Add default for size for srcset taghelper

--- Contentful.AspNetCore/TagHelpers/ContentfulImageTagHelper.cs
+++ Contentful.AspNetCore/TagHelpers/ContentfulImageTagHelper.cs
@@ -197,6 +197,13 @@
             SetDefaults(defaults);
             var sources = context.Items["sources"] as List<string>;
             var url = await BuildUrl();
+
+            if (string.IsNullOrEmpty(Size) && (Width > 0 || Height > 0))
+            {
+                var defaultSize = Width > 0 ? Width : Height;
+                Size = $"{Width}w";
+            }
+
             sources.Add($"{url} {Size}");

             output.SuppressOutput();


Tidy core tests

Tidy core tests

--- Core/NakedObjects.Core.Test/Adapter/CollectionMementoTest.cs
+++ Core/NakedObjects.Core.Test/Adapter/CollectionMementoTest.cs
@@ -15,10 +15,8 @@
 using Microsoft.Extensions.DependencyInjection;
 using NakedObjects.Architecture.Adapter;
 using NakedObjects.Architecture.Component;
-using NakedObjects.Architecture.Configuration;
 using NakedObjects.Architecture.Spec;
 using NakedObjects.Core.Adapter;
-using NakedObjects.Core.Configuration;
 using NakedObjects.Core.Util;
 using NakedObjects.Persistor.Entity.Configuration;
 using NakedObjects.Services;
@@ -137,23 +135,6 @@

         #endregion

-        //protected override void RegisterTypes(IServiceCollection container) {
-        //    base.RegisterTypes(container);
-        //    // replace INakedObjectStore types
-        //    var c = new EntityObjectStoreConfiguration();
-        //    c.UsingCodeFirstContext(() => {
-        //        var cs = GetConfiguredContainer().GetService<IConfiguration>().GetConnectionString("TestContext");
-        //        return new TestContext(cs);
-        //    });
-        //    container.AddSingleton<IEntityObjectStoreConfiguration>(c);
-
-        //    var types = new[] {typeof(TestDomainObject[]), typeof(List<TestDomainObject>), typeof(ObjectQuery<TestDomainObject>), typeof(List<Int32>)};
-        //    var ms = new[] {typeof(SimpleRepository<TestDomainObject>)};
-        //    var ns = new[] {typeof(TestDomainObject).Namespace};
-        //    var rc = new ReflectorConfiguration(types, ms, ns);
-        //    container.AddSingleton<IReflectorConfiguration>(rc);
-        //}
-
         protected override IDictionary<string, string> Configuration() {
             var config = base.Configuration();
             config["ConnectionStrings:TestContext"] = @"Server=(localdb)\MSSQLLocalDB;Initial Catalog=CodeSystemTest;Integrated Security=True;";


Change the tags on the report

Change the tags on the report

--- KenticoInspector.Reports/PageTypeNotAssignedToSite/Report.cs
+++ KenticoInspector.Reports/PageTypeNotAssignedToSite/Report.cs
@@ -23,7 +23,8 @@

         public override IList<string> Tags => new List<string>
         {
-            ReportTags.Information
+            ReportTags.Health,
+            ReportTags.Consistency
         };

         public override ReportResults GetResults()


No longer opening subscription overview in a new window

--- Mollie.WebApplicationCoreExample/Views/Customer/Index.cshtml
+++ Mollie.WebApplicationCoreExample/Views/Customer/Index.cshtml
@@ -31,7 +31,7 @@
                     @customer.Email
                     @customer.Locale

-                        View subscriptions
+                        View subscriptions

             }


Fixed test xml file location

Fixed test xml file location

--- NBi.Testing.Core/Scalar/Resolver/CSharpScalarResolverTest.cs
+++ NBi.Testing.Core/Scalar/Resolver/CSharpScalarResolverTest.cs
@@ -38,7 +38,7 @@
         [Test]
         public void Instantiate_GetValueXmlLinq_CorrectComputation()
         {
-            var xmlPath = new Uri(FileOnDisk.CreatePhysicalFile("PurchaseOrders.xml", "NBi.Testing.Core.Resources.PurchaseOrders.xml")).AbsolutePath;
+            var xmlPath = new Uri(FileOnDisk.CreatePhysicalFile("PurchaseOrders.xml", "NBi.Testing.Core.Scalar.Resolver.Resources.PurchaseOrders.xml")).AbsolutePath;
             string xmlDoc = string.Format(@"XDocument.Load(""{0}"").Root.Name.ToString()", xmlPath);

             var args = new CSharpScalarResolverArgs(xmlDoc);
@@ -53,7 +53,7 @@
         public void Instantiate_GetValueXmlXpath_CorrectComputation()
         {
             var xPath = "./PurchaseOrders/PurchaseOrder/Address/Name";
-            var xmlPath = new Uri(FileOnDisk.CreatePhysicalFile("PurchaseOrders.xml", "NBi.Testing.Core.Resources.PurchaseOrders.xml")).AbsolutePath;
+            var xmlPath = new Uri(FileOnDisk.CreatePhysicalFile("PurchaseOrders.xml", "NBi.Testing.Core.Scalar.Resolver.Resources.PurchaseOrders.xml")).AbsolutePath;
             string xmlDoc = string.Format(@"XDocument.Load(""{0}"").XPathSelectElement(""{1}"").Value.ToString()", xmlPath, xPath);

             var args = new CSharpScalarResolverArgs(xmlDoc);


Update InjectUtils.cs

Update InjectUtils.cs

--- NakedFunctions/NakedFunctions.Reflector/Utils/InjectUtils.cs
+++ NakedFunctions/NakedFunctions.Reflector/Utils/InjectUtils.cs
@@ -6,13 +6,11 @@
 // See the License for the specific language governing permissions and limitations under the License.

 using System;
-using System.Collections;
 using System.Collections.Generic;
 using System.Linq;
 using System.Reflection;
 using System.Runtime.CompilerServices;
 using NakedFramework.Architecture.Adapter;
-using NakedFramework.Architecture.Component;
 using NakedFramework.Architecture.Framework;
 using NakedFramework.Core.Util;
 using NakedFunctions.Reflector.Component;
@@ -21,17 +19,13 @@
     public static class InjectUtils {
         public static ParameterInfo[] FilterParms(MethodInfo m) => m.GetParameters().Where(p => !(p.IsInjectedParameter() || p.IsTargetParameter())).ToArray();

-        public static bool IsExtensionMethod(this MemberInfo m) => m.IsDefined(typeof(ExtensionAttribute), false);
+        private static bool IsExtensionMethod(this MemberInfo m) => m.IsDefined(typeof(ExtensionAttribute), false);

         public static bool IsInjectedParameter(this ParameterInfo p) => p.ParameterType.IsAssignableTo(typeof(IContext));

         public static bool IsTargetParameter(this ParameterInfo p) => p.Position == 0 && p.Member.IsExtensionMethod();

         public static Type ContributedToType(this MethodInfo m) => m.GetParameters().SingleOrDefault(IsTargetParameter)?.ParameterType;
-
-        // ReSharper disable once UnusedMember.Global
-        // maybe called reflectively
-        public static IQueryable<T> GetInjectedQueryableValue<T>(IObjectPersistor persistor) where T : class => persistor.Instances<T>();

         private static object GetParameterValue(this ParameterInfo p, INakedObjectAdapter adapter, INakedObjectsFramework framework) =>
             p switch {
@@ -41,16 +35,8 @@
             };

         private static object GetMatchingParameter(this ParameterInfo p, IDictionary<string, INakedObjectAdapter> parameterNameValues) {
-            if (parameterNameValues != null && parameterNameValues.ContainsKey(p.Name.ToLower())) {
-                return parameterNameValues[p.Name.ToLower()].Object;
-            }
-
-            return null;
-        }
-
-        private static INakedObjectAdapter GetNext(this IEnumerator parmValues) {
-            parmValues.MoveNext();
-            return (INakedObjectAdapter) parmValues.Current;
+            var key = p.Name?.ToLower() ?? "";
+            return parameterNameValues?.ContainsKey(key) == true ? parameterNameValues[key].Object : null;
         }

         private static object GetParameterValue(this ParameterInfo p, INakedObjectAdapter adapter, INakedObjectAdapter[] parmValues, int i, INakedObjectsFramework framework) =>
@@ -69,13 +55,9 @@

         public static object[] GetParameterValues(this MethodInfo method, INakedObjectAdapter adapter, INakedObjectAdapter parmValue, INakedObjectsFramework framework) => method.GetParameters().Select(p => p.GetParameterValue(adapter, framework) ?? parmValue.GetDomainObject()).ToArray();

-        public static object[] GetParameterValues(this MethodInfo method, INakedObjectAdapter adapter, INakedObjectAdapter[] parmValues, INakedObjectsFramework framework) {
-            var index = 0;
-            return method.GetParameters().Select(p => p.GetParameterValue(adapter, parmValues, index++, framework)).ToArray();
-        }
+        public static object[] GetParameterValues(this MethodInfo method, INakedObjectAdapter adapter, INakedObjectAdapter[] parmValues, INakedObjectsFramework framework) => method.GetParameters().Select((p, i) => p.GetParameterValue(adapter, parmValues, i, framework)).ToArray();

         public static object[] GetParameterValues(this MethodInfo method, INakedObjectAdapter adapter, string[] keys, INakedObjectsFramework framework) => method.GetParameters().Select(p => p.GetParameterValue(adapter, framework) ?? keys).ToArray();

-        public static void PerformAction<T>(object action, T toInject) => ((Action<T>) action)(toInject);
     }
 }


Revert "Added git configure in git repository fixture setup"

This reverts commit 621c816aeb1303b6e74bef2a5fea6cc56bb05eb5.

--- NetworkedPlanet.Quince.Tests/GitWrapper/RepositoryFixture.cs
+++ NetworkedPlanet.Quince.Tests/GitWrapper/RepositoryFixture.cs
@@ -34,12 +34,6 @@
             var taskResult = Command.Run("git", "init", repoPath).Result;
             if (!taskResult.Success)
                 throw new Exception("Setup failed - could not initialise test empty repo at " + repoPath);
-            var configEmailResult = Command.Run("git", "config", "user.email", "test@example.com").Result;
-            if (!configEmailResult.Success)
-                throw new Exception("Setup failed - could not configure repo user email at " + repoPath);
-            var configNameResult = Command.Run("git", "config", "user.name", "Test User").Result;
-            if (!configNameResult.Success)
-                throw new Exception("Setup failed - could nto configure repo user name at " + repoPath);
         }

         private void InitialisePopulatedRepository()


Changed Dictionary to List

Changed Dictionary to List

--- Palaso/WritingSystems/LdmlInFolderWritingSystemCollection.cs
+++ Palaso/WritingSystems/LdmlInFolderWritingSystemCollection.cs
@@ -86,10 +86,10 @@
 		{
 			Clear();

-			Dictionary<string, WritingSystemDefinition> loadedWritingSystems = ReadAndDisambiguateWritingSystems();
-			SafelyRenameFilesToMatchWritingSystems(loadedWritingSystems);
-
-			foreach (WritingSystemDefinition ws in loadedWritingSystems.Values)
+			List<WritingSystemDefinition> loadedWritingSystems = ReadAndDisambiguateWritingSystems();
+			SafelyRenameFilesAndUpdateStoreIdsToMatchWritingSystems(loadedWritingSystems);
+
+			foreach (WritingSystemDefinition ws in loadedWritingSystems)
 			{
 				SaveDefinition(ws);
 				ws.Modified = false;
@@ -98,9 +98,9 @@
 			AddActiveOSLanguages();
 		}

-		private Dictionary<string, WritingSystemDefinition> ReadAndDisambiguateWritingSystems()
-		{
-			Dictionary<string, WritingSystemDefinition> loadedWritingSystems = new Dictionary<string, WritingSystemDefinition>();
+		private List<WritingSystemDefinition> ReadAndDisambiguateWritingSystems()
+		{
+			List<WritingSystemDefinition> loadedWritingSystems = new List<WritingSystemDefinition>();
 			foreach (string filePath in Directory.GetFiles(_path, "*.ldml"))
 			{
 				try
@@ -108,7 +108,7 @@
 					WritingSystemDefinition wsFromFile = GetWritingSystemFromLdml(filePath);
 					wsFromFile.StoreID = Path.GetFileNameWithoutExtension(filePath);
 					MakeWritingSystemRfc5646TagsUniqueIfNecassary(wsFromFile, loadedWritingSystems);
-					loadedWritingSystems.Add(wsFromFile.RFC5646, wsFromFile);
+					loadedWritingSystems.Add(wsFromFile);
 				}
 				catch (Exception
 #if DEBUG
@@ -124,7 +124,7 @@
 			return loadedWritingSystems;
 		}

-		private void SafelyRenameFilesToMatchWritingSystems(Dictionary<string, WritingSystemDefinition> loadedWritingSystems)
+		private void SafelyRenameFilesAndUpdateStoreIdsToMatchWritingSystems(List<WritingSystemDefinition> loadedWritingSystems)
 		{
 			string pathToFolderForSafeFileRenaming = CreateFolderForSafeFileRenaming();
 			MoveFilesForFixedWritingSystemsIntoFolderForSafeFileRenaming(loadedWritingSystems, pathToFolderForSafeFileRenaming);
@@ -132,9 +132,9 @@
 			Directory.Delete(pathToFolderForSafeFileRenaming);
 		}

-		private void MoveFilesToFinalDestination(Dictionary<string, WritingSystemDefinition> loadedWritingSystems, string pathToFolderForSafeFileRenaming)
-		{
-			foreach (WritingSystemDefinition ws in loadedWritingSystems.Values)
+		private void MoveFilesToFinalDestination(List<WritingSystemDefinition> loadedWritingSystems, string pathToFolderForSafeFileRenaming)
+		{
+			foreach (WritingSystemDefinition ws in loadedWritingSystems)
 			{
 				if(ws.Modified)
 				{
@@ -146,9 +146,9 @@
 			}
 		}

-		private void MoveFilesForFixedWritingSystemsIntoFolderForSafeFileRenaming(Dictionary<string, WritingSystemDefinition> loadedWritingSystems, string pathToFolderForSafeFileRenaming)
-		{
-			foreach (WritingSystemDefinition ws in loadedWritingSystems.Values)
+		private void MoveFilesForFixedWritingSystemsIntoFolderForSafeFileRenaming(List<WritingSystemDefinition> loadedWritingSystems, string pathToFolderForSafeFileRenaming)
+		{
+			foreach (WritingSystemDefinition ws in loadedWritingSystems)
 			{
 				if (ws.Modified)
 				{
@@ -170,12 +170,11 @@
 			return pathToFolderForSafeFileRenaming;
 		}

-		private void MakeWritingSystemRfc5646TagsUniqueIfNecassary(WritingSystemDefinition wsFromFile, Dictionary<string, WritingSystemDefinition> rfcTagToWritingSystemMapOfAlreadyLoadedWritingSystems)
-		{
-			while (rfcTagToWritingSystemMapOfAlreadyLoadedWritingSystems.ContainsKey(wsFromFile.RFC5646))
-			{
-				WritingSystemDefinition alreadyLoadedWritingSystem =
-					rfcTagToWritingSystemMapOfAlreadyLoadedWritingSystems[wsFromFile.RFC5646];
+		private void MakeWritingSystemRfc5646TagsUniqueIfNecassary(WritingSystemDefinition wsFromFile, List<WritingSystemDefinition> listOfAlreadyLoadedWritingSystems)
+		{
+			WritingSystemDefinition alreadyLoadedWritingSystem = new WritingSystemDefinition();
+			while (listOfAlreadyLoadedWritingSystems.Find(ws => ws.RFC5646 == wsFromFile.RFC5646) != null)//.ContainsKey(wsFromFile.RFC5646))
+			{
 				if (wsFromFile.Modified)
 				{
 					AppendExtensionToDuplicateWritingSystem(wsFromFile);


added directLoad feature for directly checking packages (like V2 format), for use when using default_checked files. Added saving of one-behind backup file of old selection file.

--- RelhaxModpack/RelhaxModpack/Windows/ModSelectionList.xaml.cs
+++ RelhaxModpack/RelhaxModpack/Windows/ModSelectionList.xaml.cs
@@ -1913,6 +1913,15 @@

         private bool LoadSelectionV3(XmlDocument document, bool silent, string loadPath)
         {
+            //check if it's 'direct load' type
+            bool directLoad = false;
+            string directLoadString = XmlUtils.GetXmlStringFromXPath(document, "/packages/@directLoad");
+            if (!string.IsNullOrEmpty(directLoadString) && Utils.ParseBool(directLoadString, out bool result_, false))
+            {
+                directLoad = result_;
+                Logging.Debug("Parsed directLoad = {0}", directLoad);
+            }
+
             //first uncheck everything
             Utils.ClearSelections(ParsedCategoryList);

@@ -2103,6 +2112,13 @@
                 }
             }

+            //if direct load mode (like default checked), then don't run MaaS or any additional calculations
+            if(directLoad)
+            {
+                Logging.Debug("DirectLoad = true, stopping here");
+                return true;
+            }
+
             //determine if packages are out of date
             Logging.Debug("Processing global packages for selection");
             if (GlobalDependencies.Count != globalPackagesFromSelection.Count)
@@ -2255,6 +2271,15 @@
                 Logging.Debug("globals={0}, dependencies={1}, packages={2}, packageNames={3}, user={4}", globalsOutOfDate, dependenciesOutOfDate, packagesOutOfDate, packageNamesOutOfDate, userOutOfDate);

                 //save the document via save v3
+                document = null;
+                string filename = Path.GetFileNameWithoutExtension(loadPath);
+                string filenameBackup = filename + "_backup.xml";
+                string pathBackup = Path.Combine(Path.GetDirectoryName(loadPath), filenameBackup);
+
+                if (File.Exists(pathBackup))
+                    Utils.FileDelete(pathBackup, 3, 100);
+                Utils.FileMove(loadPath, pathBackup, 3, 100);
+
                 SaveSelectionV3(loadPath, silent);
             }


I had previously guessed that TAGame.PRI_TA:Title was a string. I was wrong.

--- RocketLeagueReplayParser/NetworkStream/ActorStateProperty.cs
+++ RocketLeagueReplayParser/NetworkStream/ActorStateProperty.cs
@@ -81,7 +81,6 @@
                 case "Engine.GameReplicationInfo:ServerName":
                 case "Engine.PlayerReplicationInfo:PlayerName":
                 case "TAGame.Team_TA:CustomTeamName":
-				case "TAGame.PRI_TA:Title":
                     asp.Data.Add(br.ReadString());
                     asp.IsComplete = true;
                     break;
@@ -102,6 +101,7 @@
                 case "TAGame.PRI_TA:MatchGoals":
                 case "TAGame.PRI_TA:MatchAssists":
 				case "ProjectX.GRI_X:ReplicatedGameMutatorIndex":
+                case "TAGame.PRI_TA:Title":
                     asp.Data.Add(br.ReadInt32());
                     asp.IsComplete = true;
                     break;


Added support for TAGame.PRI_TA:PawnType

--- RocketLeagueReplayParser/NetworkStream/ActorStateProperty.cs
+++ RocketLeagueReplayParser/NetworkStream/ActorStateProperty.cs
@@ -117,6 +117,7 @@
 				case "TAGame.CarComponent_Boost_TA:ReplicatedBoostAmount": // Always 255?
                 case "TAGame.CameraSettingsActor_TA:CameraPitch":
                 case "TAGame.CameraSettingsActor_TA:CameraYaw":
+                case "TAGame.PRI_TA:PawnType":
                     asp.Data.Add(br.ReadByte());
                     asp.MarkComplete();
                     break;


[Util.Forms] Allow BeginInvoke() in BackgroundQueue

--- SamSeifert.Utilities.Forms/MultiThreading/BackgroundQueue.cs
+++ SamSeifert.Utilities.Forms/MultiThreading/BackgroundQueue.cs
@@ -39,7 +39,11 @@

         private volatile int _Working;

-        public BackgroundQueue(Form f, String name, ThreadPriority tp = ThreadPriority.Normal, int threads = 1)
+        public BackgroundQueue(
+            Form f,
+            String name,
+            ThreadPriority tp = ThreadPriority.Normal,
+            int threads = 1)
         {
             if (f == null)
                 throw new ArgumentNullException();
@@ -103,12 +107,19 @@
             return this.Enqueue((ContinueCheck continue_on) => { return meth(continue_on, param); }, finish);
         }

-        public IDisposable Enqueue(BackgroundThreadMethodOut meth, BackgroundThreadFinisher finish)
+        public IDisposable Enqueue(BackgroundThreadMethodOut meth, BackgroundThreadFinisher finish, bool beginInvoke = false)
         {
             return this.Enqueue((Form f, ContinueCheck continue_on) =>
             {
                 var ob = meth(continue_on);
-                f.Invoke(finish, ob);
+                if (beginInvoke)
+                {
+                    f.BeginInvoke(finish, ob);
+                }
+                else
+                {
+                    f.Invoke(finish, ob);
+                }
             });
         }

@@ -217,6 +228,17 @@
             }
         }

+        public int _Count
+        {
+            get
+            {
+                lock (this._Queue)
+                {
+                    return this._Queue.Count;
+                }
+            }
+        }
+
         /// <summary>
         /// BEc
         /// </summary>


Fix build error

Fix build error

--- Source/HelixToolkit.Wpf.SharpDX.Tests/Controls/CanvasMock.cs
+++ Source/HelixToolkit.Wpf.SharpDX.Tests/Controls/CanvasMock.cs
@@ -19,7 +19,12 @@
             EffectsManager = new DefaultEffectsManager(RenderTechniquesManager);
             Device = EffectsManager.Device;
         }
-
+        private int renderCycles = 1;
+        public int RenderCycles
+        {
+            set { renderCycles = value; }
+            get { return renderCycles; }
+        }
         public Device Device { get; private set; }
         public Color4 ClearColor { get; private set; }
         public bool IsShadowMapEnabled { get; private set; }


Fix border measure for fixed width/height

--- Source/HelixToolkit.Wpf.SharpDX/Model/Elements2D/Border2D.cs
+++ Source/HelixToolkit.Wpf.SharpDX/Model/Elements2D/Border2D.cs
@@ -267,26 +267,42 @@
         {
             if (contentInternal != null)
             {
-                var margin = new Size2F((float)(BorderThickness.Left + Padding.Left + BorderThickness.Right + Padding.Right + MarginWidthHeight.X),
-                    (float)(BorderThickness.Top + Padding.Top + BorderThickness.Bottom + Padding.Bottom + MarginWidthHeight.Y));
+                var margin = new Size2F((float)(BorderThickness.Left/2 + Padding.Left + BorderThickness.Right/2 + Padding.Right),
+                    (float)(BorderThickness.Top/2 + Padding.Top + BorderThickness.Bottom/2 + Padding.Bottom));
                 var childAvail = new Size2F(Math.Max(0, availableSize.Width - margin.Width), Math.Max(0, availableSize.Height - margin.Height));

-                return base.MeasureOverride(childAvail);
+                var size = base.MeasureOverride(childAvail);
+                if(WidthInternal != float.PositiveInfinity && HeightInternal != float.PositiveInfinity)
+                {
+                    return availableSize;
+                }
+                else
+                {
+                    if(WidthInternal != float.PositiveInfinity)
+                    {
+                        size.Width = WidthInternal;
+                    }
+                    if(HeightInternal != float.PositiveInfinity)
+                    {
+                        size.Height = HeightInternal;
+                    }
+                    return size;
+                }
             }
             else
             {
-                return new Size2F((float)(BorderThickness.Left + Padding.Left + BorderThickness.Right + Padding.Right + MarginWidthHeight.X + WidthInternal == float.PositiveInfinity ? 0 : WidthInternal),
-                    (float)(BorderThickness.Top + Padding.Top + BorderThickness.Bottom + Padding.Bottom + MarginWidthHeight.Y + HeightInternal == float.PositiveInfinity ? 0 : HeightInternal));
+                return new Size2F((float)(BorderThickness.Left/2 + Padding.Left + BorderThickness.Right/2 + Padding.Right + MarginWidthHeight.X + WidthInternal == float.PositiveInfinity ? 0 : WidthInternal),
+                    (float)(BorderThickness.Top/2 + Padding.Top + BorderThickness.Bottom/2 + Padding.Bottom + MarginWidthHeight.Y + HeightInternal == float.PositiveInfinity ? 0 : HeightInternal));
             }
         }

         protected override RectangleF ArrangeOverride(RectangleF finalSize)
         {
             var contentRect = new RectangleF(finalSize.Left, finalSize.Top, finalSize.Width, finalSize.Height);
-            contentRect.Left += (float)(BorderThickness.Left + Padding.Left);
-            contentRect.Right -= (float)(BorderThickness.Right + Padding.Right);
-            contentRect.Top += (float)(BorderThickness.Top + Padding.Top);
-            contentRect.Bottom -= (float)(BorderThickness.Bottom + Padding.Bottom);
+            contentRect.Left += (float)(BorderThickness.Left/2 + Padding.Left);
+            contentRect.Right -= (float)(BorderThickness.Right/2 + Padding.Right);
+            contentRect.Top += (float)(BorderThickness.Top/2 + Padding.Top);
+            contentRect.Bottom -= (float)(BorderThickness.Bottom/2 + Padding.Bottom);
             base.ArrangeOverride(contentRect);
             return finalSize;
         }


Synchrophasor: In CommonPhasorServices.PhasorDataSourceValidation, fixed query to update device statistic measurements' signal reference to the new format.

git-tfs-id: [https://tfs.codeplex.com/tfs/TFS07]$/openpdc/Synchrophasor/Current Version;C76367

--- Source/Libraries/TVA.PhasorProtocols/CommonPhasorServices.cs
+++ Source/Libraries/TVA.PhasorProtocols/CommonPhasorServices.cs
@@ -859,7 +859,7 @@
                         // If the original format for device statistics is found in the database, update to new format
                         if (Convert.ToInt32(connection.ExecuteScalar(string.Format("SELECT COUNT(*) FROM Measurement WHERE SignalReference='{0}' AND HistorianID={1}", oldSignalReference, statHistorianID))) > 0)
                         {
-                            connection.ExecuteNonQuery("UPDATE Measurement SET SignalReference='{0}' WHERE SignalReference='{1}' AND HistorianID={2}", signalReference, oldSignalReference, statHistorianID);
+                            connection.ExecuteNonQuery(string.Format("UPDATE Measurement SET SignalReference='{0}' WHERE SignalReference='{1}' AND HistorianID={2}", signalReference, oldSignalReference, statHistorianID));

                             // No need to insert it since we
                             // can guarantee its existence


openPDC Manager: Modified code to update output stream measurement signal reference when output stream device acronym changes.

git-tfs-id: [https://tfs.codeplex.com/tfs/TFS07]$/openpdc/Synchrophasor/Current Version;C72741

--- Source/Libraries/openPDC.UI/DataModels/OutputStreamDevice.cs
+++ Source/Libraries/openPDC.UI/DataModels/OutputStreamDevice.cs
@@ -503,6 +503,8 @@
                 }
                 else
                 {
+                    OutputStreamDevice originalDevice = GetOutputStreamDevice(database, "WHERE ID = " + outputStreamDevice.ID);
+
                     query = database.ParameterizedQueryString("UPDATE OutputStreamDevice SET NodeID = {0}, AdapterID = {1}, IDCode = {2}, Acronym = {3}, BpaAcronym = {4}, " +
                         "Name = {5}, PhasorDataFormat = {6}, FrequencyDataFormat = {7}, AnalogDataFormat = {8}, CoordinateFormat = {9}, LoadOrder = {10}, Enabled = {11}, " +
                         " UpdatedBy = {12}, UpdatedOn = {13} WHERE ID = {14}", "nodeID", "adapterID", "idCode", "acronym", "bpaAcronym", "name",
@@ -513,6 +515,15 @@
                         outputStreamDevice.FrequencyDataFormat.ToNotNull(), outputStreamDevice.AnalogDataFormat.ToNotNull(), outputStreamDevice.CoordinateFormat.ToNotNull(),
                         outputStreamDevice.LoadOrder, database.Bool(outputStreamDevice.Enabled), CommonFunctions.CurrentUser,
                         database.UtcNow(), outputStreamDevice.ID);
+
+                    if (originalDevice != null && originalDevice.Acronym != outputStreamDevice.Acronym)
+                    {
+                        foreach (OutputStreamMeasurement measurement in OutputStreamMeasurement.Load(database, originalDevice.AdapterID))
+                        {
+                            measurement.SignalReference = measurement.SignalReference.Replace(originalDevice.Acronym + "-", outputStreamDevice.Acronym + "-");
+                            OutputStreamMeasurement.Save(database, measurement);
+                        }
+                    }
                 }

                 return "OutputStreamDevice information saved successfully";


Initialize EventEmailNode.TaggedEmails property

--- Source/Libraries/openXDA.Nodes/Types/Email/EventEmailNode.cs
+++ Source/Libraries/openXDA.Nodes/Types/Email/EventEmailNode.cs
@@ -100,6 +100,7 @@
             : base(host, definition, type)
         {
             m_emailTypes = new List<EventEmailProcessor>();
+            TaggedEmails = new ConcurrentQueue<DateTime>();
         }

         #endregion


-Derp

-Derp

--- Src/Newtonsoft.Json.Tests/Converters/XmlNodeConverterTest.cs
+++ Src/Newtonsoft.Json.Tests/Converters/XmlNodeConverterTest.cs
@@ -2117,7 +2117,7 @@

             try
             {
-                System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("ru");
+                System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("ru-RU");

                 // in russian culture value 12.27 will be written as 12,27


up share

up share

--- Terradue.Tep/Terradue/Tep/WebServer/Service/Share.Service.cs
+++ Terradue.Tep/Terradue/Tep/WebServer/Service/Share.Service.cs
@@ -115,7 +115,7 @@
                     //case user
                 }

-            } else if (entity is EntityList<DataPackage>) {
+            } else if (entitySelf is EntityList<DataPackage>) {
                 var entitylist = entitySelf as EntityList<DataPackage>;
                 var items = entitylist.GetItemsAsList();
                 if (items.Count == 0) return null;
@@ -141,31 +141,6 @@
                 searchResult = ose.Query(urlToShare, new System.Collections.Specialized.NameValueCollection());
             }catch(Exception e){
                 throw e;
-            }
-
-            foreach (IOpenSearchResultItem item in searchResult.Items) {
-                if (item is AtomItem && ((AtomItem)item).ReferenceData is Entity) {
-                    Entity ent = ((AtomItem)item).ReferenceData as Entity;
-                    if (ent.OwnerId == context.UserId) {
-                        string visibility = (request.visibility != null ? request.visibility : "public");
-                        switch (visibility){
-                            case "public":
-                                ent.GrantGlobalPermissions();
-                                break;
-                            case "restricted":
-                                ent.RevokeGlobalPermission();
-                                if(request.groups != null && request.groups.Count > 0)
-                                    ent.GrantPermissionsToGroups(request.groups.ToArray(), true);
-                                break;
-                            case "private":
-                                ent.GrantPermissionsToGroups(new int[0], true);
-                                ent.RevokeGlobalPermission();
-                                break;
-                            default:
-                                break;
-                        }
-                    }
-                }
             }

             context.Close ();


Update SalesOrderHeader.cs

Update SalesOrderHeader.cs

--- Test/AdventureWorksFunctionalModel/Sales/SalesOrderHeader.cs
+++ Test/AdventureWorksFunctionalModel/Sales/SalesOrderHeader.cs
@@ -353,6 +353,8 @@
         #endregion

         #endregion
+
+        public override string ToString() => $"{SalesOrderNumber}";

     }
     public enum OrderStatus : byte {


Add unit test

Add unit test


Add one unit test

Add one unit test


Added milliseconds as a unittype

Added milliseconds as a unittype

--- UXRiskLogger/Ninject/Extensions/UXRiskLogger/UnitTypeEnum.cs
+++ UXRiskLogger/Ninject/Extensions/UXRiskLogger/UnitTypeEnum.cs
@@ -1,5 +1,11 @@

 namespace Ninject.Extensions.UXRiskLogger
 {
-    public enum UnitType { bytes, seconds, count };
+    public enum UnitType
+    {
+        bytes,
+        seconds,
+        milliseconds,
+        count
+    };
 }


Fix CodeScene

Fix CodeScene

--- WalletWasabi/CoinJoin/Coordinator/Rounds/CoordinatorRound.cs
+++ WalletWasabi/CoinJoin/Coordinator/Rounds/CoordinatorRound.cs
@@ -215,29 +215,16 @@
 				{
 					Logger.LogInfo($"Round ({RoundId}): Phase change requested: {expectedPhase}.");

-					if (Status == CoordinatorRoundStatus.NotStarted) // So start the input registration phase
+					if (Status == CoordinatorRoundStatus.NotStarted) // So start the input registration phase.
 					{
 						if (expectedPhase != RoundPhase.InputRegistration)
 						{
 							return;
 						}

-						// Calculate fees.
-						if (feePerInputs is null || feePerOutputs is null)
-						{
-							(Money feePerInputs, Money feePerOutputs) fees = await CalculateFeesAsync(RpcClient, AdjustedConfirmationTarget).ConfigureAwait(false);
-							FeePerInputs = feePerInputs ?? fees.feePerInputs;
-							FeePerOutputs = feePerOutputs ?? fees.feePerOutputs;
-						}
-						else
-						{
-							FeePerInputs = feePerInputs;
-							FeePerOutputs = feePerOutputs;
-						}
-
-						Status = CoordinatorRoundStatus.Running;
-					}
-					else if (Status != CoordinatorRoundStatus.Running) // Aborted or succeeded, swallow
+						await MoveToInputRegistrationAsync(feePerInputs, feePerOutputs).ConfigureAwait(false);
+					}
+					else if (Status != CoordinatorRoundStatus.Running) // Aborted or succeeded, swallow.
 					{
 						return;
 					}
@@ -248,9 +235,7 @@
 							return;
 						}

-						await RemoveAlicesIfAnInputRefusedByMempoolAsync().ConfigureAwait(false);
-
-						Phase = RoundPhase.ConnectionConfirmation;
+						await MoveToConnectionConfirmationAsync().ConfigureAwait(false);
 					}
 					else if (Phase == RoundPhase.ConnectionConfirmation)
 					{
@@ -259,7 +244,7 @@
 							return;
 						}

-						Phase = RoundPhase.OutputRegistration;
+						MoveToOutputRegistration();
 					}
 					else if (Phase == RoundPhase.OutputRegistration)
 					{
@@ -268,150 +253,7 @@
 							return;
 						}

-						// Build CoinJoin:
-						// 1. Set new denomination: minor optimization.
-						Money newDenomination = CalculateNewDenomination();
-						var transaction = Network.Consensus.ConsensusFactory.CreateTransaction();
-
-						// 2. Add Bob outputs.
-						foreach (Bob bob in Bobs.Where(x => x.Level == MixingLevels.GetBaseLevel()))
-						{
-							transaction.Outputs.AddWithOptimize(newDenomination, bob.ActiveOutputAddress.ScriptPubKey);
-						}
-
-						// 2.1 newDenomination may differ from the Denomination at registration, so we may not be able to tinker with additional outputs.
-						bool tinkerWithAdditionalMixingLevels = CanUseAdditionalOutputs(newDenomination);
-
-						if (tinkerWithAdditionalMixingLevels)
-						{
-							foreach (MixingLevel level in MixingLevels.GetLevelsExceptBase())
-							{
-								IEnumerable<Bob> bobsOnThisLevel = Bobs.Where(x => x.Level == level);
-								if (bobsOnThisLevel.Count() <= 1)
-								{
-									break;
-								}
-
-								foreach (Bob bob in bobsOnThisLevel)
-								{
-									transaction.Outputs.AddWithOptimize(level.Denomination, bob.ActiveOutputAddress.ScriptPubKey);
-								}
-							}
-						}
-
-						var coordinatorScript = RoundConfig.GetNextCleanCoordinatorScript();
-						// 3. If there are less Bobs than Alices, then add our own address. The malicious Alice, who will refuse to sign.
-						for (int i = 0; i < MixingLevels.Count(); i++)
-						{
-							var aliceCountInLevel = Alices.Count(x => i < x.BlindedOutputScripts.Length);
-							var missingBobCount = aliceCountInLevel - Bobs.Count(x => x.Level == MixingLevels.GetLevel(i));
-							for (int j = 0; j < missingBobCount; j++)
-							{
-								var denomination = MixingLevels.GetLevel(i).Denomination;
-								transaction.Outputs.AddWithOptimize(denomination, coordinatorScript);
-							}
-						}
-
-						// 4. Start building Coordinator fee.
-						var baseDenominationOutputCount = transaction.Outputs.Count(x => x.Value == newDenomination);
-						Money coordinatorBaseFeePerAlice = newDenomination.Percentage(CoordinatorFeePercent * baseDenominationOutputCount);
-						Money coordinatorFee = baseDenominationOutputCount * coordinatorBaseFeePerAlice;
-
-						if (tinkerWithAdditionalMixingLevels)
-						{
-							foreach (MixingLevel level in MixingLevels.GetLevelsExceptBase())
-							{
-								var denominationOutputCount = transaction.Outputs.Count(x => x.Value == level.Denomination);
-								if (denominationOutputCount <= 1)
-								{
-									break;
-								}
-
-								Money coordinatorLevelFeePerAlice = level.Denomination.Percentage(CoordinatorFeePercent * denominationOutputCount);
-								coordinatorFee += coordinatorLevelFeePerAlice * denominationOutputCount;
-							}
-						}
-
-						// 5. Add the inputs and the changes of Alices.
-						var spentCoins = new List<Coin>();
-						foreach (Alice alice in Alices)
-						{
-							foreach (var input in alice.Inputs)
-							{
-								transaction.Inputs.Add(new TxIn(input.Outpoint));
-								spentCoins.Add(input);
-							}
-
-							Money changeAmount = alice.InputSum;
-							changeAmount -= alice.NetworkFeeToPayAfterBaseDenomination;
-							changeAmount -= newDenomination;
-							changeAmount -= coordinatorBaseFeePerAlice;
-
-							if (tinkerWithAdditionalMixingLevels)
-							{
-								for (int i = 1; i < alice.BlindedOutputScripts.Length; i++)
-								{
-									MixingLevel level = MixingLevels.GetLevel(i);
-									var denominationOutputCount = transaction.Outputs.Count(x => x.Value == level.Denomination);
-									if (denominationOutputCount <= 1)
-									{
-										break;
-									}
-
-									changeAmount -= FeePerOutputs;
-									changeAmount -= level.Denomination;
-									changeAmount -= level.Denomination.Percentage(CoordinatorFeePercent * denominationOutputCount);
-								}
-							}
-
-							if (changeAmount > Money.Zero) // If the coordinator fee would make change amount to be negative or zero then no need to pay it.
-							{
-								Money minimumOutputAmount = Money.Coins(0.0001m); // If the change would be less than about $1 then add it to the coordinator.
-								Money somePercentOfDenomination = newDenomination.Percentage(0.3m); // If the change is less than about 0.3% of the newDenomination then add it to the coordinator fee.
-								Money minimumChangeAmount = Math.Max(minimumOutputAmount, somePercentOfDenomination);
-								if (changeAmount < minimumChangeAmount)
-								{
-									coordinatorFee += changeAmount;
-								}
-								else
-								{
-									transaction.Outputs.AddWithOptimize(changeAmount, alice.ChangeOutputAddress.ScriptPubKey);
-								}
-							}
-							else
-							{
-								// Alice has no money enough to pay the coordinator fee then allow her to pay what she can.
-								coordinatorFee += changeAmount;
-							}
-						}
-
-						// 6. Add Coordinator fee only if > about $3, else just let it to be miner fee.
-						if (coordinatorFee > Money.Coins(0.0003m))
-						{
-							transaction.Outputs.AddWithOptimize(coordinatorFee, coordinatorScript);
-						}
-
-						// 7. Try optimize fees.
-						await TryOptimizeFeesAsync(transaction, spentCoins).ConfigureAwait(false);
-
-						// 8. Shuffle.
-						transaction.Inputs.Shuffle();
-						transaction.Outputs.Shuffle();
-
-						// 9. Sort inputs and outputs by amount so the coinjoin looks better in a block explorer.
-						transaction.Inputs.SortByAmount(spentCoins);
-						transaction.Outputs.SortByAmount();
-						// Note: We shuffle then sort because inputs and outputs could have equal values
-
-						if (transaction.Outputs.Any(x => x.ScriptPubKey == coordinatorScript))
-						{
-							RoundConfig.MakeNextCoordinatorScriptDirty();
-						}
-
-						CoinJoin = transaction;
-						UnsignedCoinJoinHex = transaction.ToHex();
-
-						Phase = RoundPhase.Signing;
+						await MoveToSigningAsync().ConfigureAwait(false);
 					}
 					else // Phase == RoundPhase.Signing
 					{
@@ -428,136 +270,326 @@
 				}
 			}

+			KickTimeout(expectedPhase);
+		}
+
+		private void KickTimeout(RoundPhase phase)
+		{
 			_ = Task.Run(async () =>
-				{
-					try
-					{
-						TimeSpan timeout;
-						switch (expectedPhase)
-						{
-							case RoundPhase.InputRegistration:
+			{
+				try
+				{
+					TimeSpan timeout = GetTimeout(phase);
+
+					// Delay asynchronously to the requested timeout.
+					await Task.Delay(timeout).ConfigureAwait(false);
+
+					var executeRunAbortion = false;
+					using (await RoundSynchronizerLock.LockAsync().ConfigureAwait(false))
+					{
+						executeRunAbortion = Status == CoordinatorRoundStatus.Running && Phase == phase;
+					}
+					if (executeRunAbortion)
+					{
+						PhaseTimeoutLog.TryAdd((RoundId, Phase), DateTimeOffset.UtcNow);
+						string timedOutLogString = $"Round ({RoundId}): {phase} timed out after {timeout.TotalSeconds} seconds.";
+
+						if (phase == RoundPhase.ConnectionConfirmation)
+						{
+							Logger.LogInfo(timedOutLogString);
+						}
+						else if (phase == RoundPhase.OutputRegistration)
+						{
+							Logger.LogInfo($"{timedOutLogString} Progressing to signing phase to blame...");
+						}
+						else
+						{
+							Logger.LogInfo($"{timedOutLogString} Aborting...");
+						}
+
+						// This will happen outside the lock.
+						_ = Task.Run(async () =>
+						{
+							try
+							{
+								switch (phase)
 								{
-									SetInputRegistrationTimesout(); // Update it, it's going to be slightly more accurate.
-									timeout = InputRegistrationTimeout;
+									case RoundPhase.InputRegistration:
+										{
+											// Only abort if less than two one Alice is registered.
+											// Do not ban anyone, it's ok if they lost connection.
+											await RemoveAlicesIfAnInputRefusedByMempoolAsync().ConfigureAwait(false);
+											int aliceCountAfterInputRegistrationTimeout = CountAlices();
+											if (aliceCountAfterInputRegistrationTimeout < 2)
+											{
+												Abort($"Only {aliceCountAfterInputRegistrationTimeout} Alices registered.");
+											}
+											else
+											{
+												UpdateAnonymitySet(aliceCountAfterInputRegistrationTimeout);
+												// Progress to the next phase, which will be ConnectionConfirmation
+												await ExecuteNextPhaseAsync(RoundPhase.ConnectionConfirmation).ConfigureAwait(false);
+											}
+										}
+										break;
+
+									case RoundPhase.ConnectionConfirmation:
+										{
+											IEnumerable<Alice> alicesToBan = GetAlicesBy(AliceState.InputsRegistered);
+
+											await ProgressToOutputRegistrationOrFailAsync(alicesToBan.ToArray()).ConfigureAwait(false);
+										}
+										break;
+
+									case RoundPhase.OutputRegistration:
+										{
+											// Output registration never aborts.
+											// We do not know which Alice to ban.
+											// Therefore proceed to signing, and whichever Alice does not sign, ban her.
+											await ExecuteNextPhaseAsync(RoundPhase.Signing).ConfigureAwait(false);
+										}
+										break;
+
+									case RoundPhase.Signing:
+										{
+											Alice[] alicesToBan = GetAlicesByNot(AliceState.SignedCoinJoin, syncLock: true).ToArray();
+
+											if (alicesToBan.Any())
+											{
+												await UtxoReferee.BanUtxosAsync(1, DateTimeOffset.UtcNow, forceNoted: false, RoundId, alicesToBan.SelectMany(x => x.Inputs.Select(y => y.Outpoint)).ToArray()).ConfigureAwait(false);
+											}
+
+											Abort($"{alicesToBan.Length} Alices did not sign.");
+										}
+										break;
+
+									default:
+										throw new InvalidOperationException("This is impossible.");
 								}
-								break;
-
-							case RoundPhase.ConnectionConfirmation:
-								timeout = ConnectionConfirmationTimeout;
-								break;
-
-							case RoundPhase.OutputRegistration:
-								timeout = OutputRegistrationTimeout;
-								break;
-
-							case RoundPhase.Signing:
-								timeout = SigningTimeout;
-								break;
-
-							default:
-								throw new InvalidOperationException("This is impossible.");
+							}
+							catch (Exception ex)
+							{
+								Logger.LogWarning($"Round ({RoundId}): {phase} timeout failed.");
+								Logger.LogWarning(ex);
+							}
+						}).ConfigureAwait(false);
+					}
+				}
+				catch (Exception ex)
+				{
+					Logger.LogWarning($"Round ({RoundId}): {phase} timeout failed.");
+					Logger.LogWarning(ex);
+				}
+			}).ConfigureAwait(false);
+		}
+
+		private TimeSpan GetTimeout(RoundPhase phase)
+		{
+			TimeSpan timeout;
+			switch (phase)
+			{
+				case RoundPhase.InputRegistration:
+					{
+						SetInputRegistrationTimesout(); // Update it, it's going to be slightly more accurate.
+						timeout = InputRegistrationTimeout;
+					}
+					break;
+
+				case RoundPhase.ConnectionConfirmation:
+					timeout = ConnectionConfirmationTimeout;
+					break;
+
+				case RoundPhase.OutputRegistration:
+					timeout = OutputRegistrationTimeout;
+					break;
+
+				case RoundPhase.Signing:
+					timeout = SigningTimeout;
+					break;
+
+				default:
+					throw new InvalidOperationException("This is impossible.");
+			}
+
+			return timeout;
+		}
+
+		private async Task MoveToSigningAsync()
+		{
+			// Build CoinJoin:
+			// 1. Set new denomination: minor optimization.
+			Money newDenomination = CalculateNewDenomination();
+			var transaction = Network.Consensus.ConsensusFactory.CreateTransaction();
+
+			// 2. Add Bob outputs.
+			foreach (Bob bob in Bobs.Where(x => x.Level == MixingLevels.GetBaseLevel()))
+			{
+				transaction.Outputs.AddWithOptimize(newDenomination, bob.ActiveOutputAddress.ScriptPubKey);
+			}
+
+			// 2.1 newDenomination may differ from the Denomination at registration, so we may not be able to tinker with additional outputs.
+			bool tinkerWithAdditionalMixingLevels = CanUseAdditionalOutputs(newDenomination);
+
+			if (tinkerWithAdditionalMixingLevels)
+			{
+				foreach (MixingLevel level in MixingLevels.GetLevelsExceptBase())
+				{
+					IEnumerable<Bob> bobsOnThisLevel = Bobs.Where(x => x.Level == level);
+					if (bobsOnThisLevel.Count() <= 1)
+					{
+						break;
+					}
+
+					foreach (Bob bob in bobsOnThisLevel)
+					{
+						transaction.Outputs.AddWithOptimize(level.Denomination, bob.ActiveOutputAddress.ScriptPubKey);
+					}
+				}
+			}
+
+			var coordinatorScript = RoundConfig.GetNextCleanCoordinatorScript();
+			// 3. If there are less Bobs than Alices, then add our own address. The malicious Alice, who will refuse to sign.
+			for (int i = 0; i < MixingLevels.Count(); i++)
+			{
+				var aliceCountInLevel = Alices.Count(x => i < x.BlindedOutputScripts.Length);
+				var missingBobCount = aliceCountInLevel - Bobs.Count(x => x.Level == MixingLevels.GetLevel(i));
+				for (int j = 0; j < missingBobCount; j++)
+				{
+					var denomination = MixingLevels.GetLevel(i).Denomination;
+					transaction.Outputs.AddWithOptimize(denomination, coordinatorScript);
+				}
+			}
+
+			// 4. Start building Coordinator fee.
+			var baseDenominationOutputCount = transaction.Outputs.Count(x => x.Value == newDenomination);
+			Money coordinatorBaseFeePerAlice = newDenomination.Percentage(CoordinatorFeePercent * baseDenominationOutputCount);
+			Money coordinatorFee = baseDenominationOutputCount * coordinatorBaseFeePerAlice;
+
+			if (tinkerWithAdditionalMixingLevels)
+			{
+				foreach (MixingLevel level in MixingLevels.GetLevelsExceptBase())
+				{
+					var denominationOutputCount = transaction.Outputs.Count(x => x.Value == level.Denomination);
+					if (denominationOutputCount <= 1)
+					{
+						break;
+					}
+
+					Money coordinatorLevelFeePerAlice = level.Denomination.Percentage(CoordinatorFeePercent * denominationOutputCount);
+					coordinatorFee += coordinatorLevelFeePerAlice * denominationOutputCount;
+				}
+			}
+
+			// 5. Add the inputs and the changes of Alices.
+			var spentCoins = new List<Coin>();
+			foreach (Alice alice in Alices)
+			{
+				foreach (var input in alice.Inputs)
+				{
+					transaction.Inputs.Add(new TxIn(input.Outpoint));
+					spentCoins.Add(input);
+				}
+
+				Money changeAmount = alice.InputSum;
+				changeAmount -= alice.NetworkFeeToPayAfterBaseDenomination;
+				changeAmount -= newDenomination;
+				changeAmount -= coordinatorBaseFeePerAlice;
+
+				if (tinkerWithAdditionalMixingLevels)
+				{
+					for (int i = 1; i < alice.BlindedOutputScripts.Length; i++)
+					{
+						MixingLevel level = MixingLevels.GetLevel(i);
+						var denominationOutputCount = transaction.Outputs.Count(x => x.Value == level.Denomination);
+						if (denominationOutputCount <= 1)
+						{
+							break;
 						}

-						// Delay asynchronously to the requested timeout.
-						await Task.Delay(timeout).ConfigureAwait(false);
-
-						var executeRunAbortion = false;
-						using (await RoundSynchronizerLock.LockAsync().ConfigureAwait(false))
-						{
-							executeRunAbortion = Status == CoordinatorRoundStatus.Running && Phase == expectedPhase;
-						}
-						if (executeRunAbortion)
-						{
-							PhaseTimeoutLog.TryAdd((RoundId, Phase), DateTimeOffset.UtcNow);
-							string timedOutLogString = $"Round ({RoundId}): {expectedPhase} timed out after {timeout.TotalSeconds} seconds.";
-
-							if (expectedPhase == RoundPhase.ConnectionConfirmation)
-							{
-								Logger.LogInfo(timedOutLogString);
-							}
-							else if (expectedPhase == RoundPhase.OutputRegistration)
-							{
-								Logger.LogInfo($"{timedOutLogString} Progressing to signing phase to blame...");
-							}
-							else
-							{
-								Logger.LogInfo($"{timedOutLogString} Aborting...");
-							}
-
-							// This will happen outside the lock.
-							_ = Task.Run(async () =>
-								{
-									try
-									{
-										switch (expectedPhase)
-										{
-											case RoundPhase.InputRegistration:
-												{
-													// Only abort if less than two one Alice is registered.
-													// Do not ban anyone, it's ok if they lost connection.
-													await RemoveAlicesIfAnInputRefusedByMempoolAsync().ConfigureAwait(false);
-													int aliceCountAfterInputRegistrationTimeout = CountAlices();
-													if (aliceCountAfterInputRegistrationTimeout < 2)
-													{
-														Abort($"Only {aliceCountAfterInputRegistrationTimeout} Alices registered.");
-													}
-													else
-													{
-														UpdateAnonymitySet(aliceCountAfterInputRegistrationTimeout);
-														// Progress to the next phase, which will be ConnectionConfirmation
-														await ExecuteNextPhaseAsync(RoundPhase.ConnectionConfirmation).ConfigureAwait(false);
-													}
-												}
-												break;
-
-											case RoundPhase.ConnectionConfirmation:
-												{
-													IEnumerable<Alice> alicesToBan = GetAlicesBy(AliceState.InputsRegistered);
-
-													await ProgressToOutputRegistrationOrFailAsync(alicesToBan.ToArray()).ConfigureAwait(false);
-												}
-												break;
-
-											case RoundPhase.OutputRegistration:
-												{
-													// Output registration never aborts.
-													// We do not know which Alice to ban.
-													// Therefore proceed to signing, and whichever Alice does not sign, ban her.
-													await ExecuteNextPhaseAsync(RoundPhase.Signing).ConfigureAwait(false);
-												}
-												break;
-
-											case RoundPhase.Signing:
-												{
-													Alice[] alicesToBan = GetAlicesByNot(AliceState.SignedCoinJoin, syncLock: true).ToArray();
-
-													if (alicesToBan.Any())
-													{
-														await UtxoReferee.BanUtxosAsync(1, DateTimeOffset.UtcNow, forceNoted: false, RoundId, alicesToBan.SelectMany(x => x.Inputs.Select(y => y.Outpoint)).ToArray()).ConfigureAwait(false);
-													}
-
-													Abort($"{alicesToBan.Length} Alices did not sign.");
-												}
-												break;
-
-											default:
-												throw new InvalidOperationException("This is impossible.");
-										}
-									}
-									catch (Exception ex)
-									{
-										Logger.LogWarning($"Round ({RoundId}): {expectedPhase} timeout failed.");
-										Logger.LogWarning(ex);
-									}
-								}).ConfigureAwait(false);
-						}
-					}
-					catch (Exception ex)
-					{
-						Logger.LogWarning($"Round ({RoundId}): {expectedPhase} timeout failed.");
-						Logger.LogWarning(ex);
-					}
-				}).ConfigureAwait(false);
+						changeAmount -= FeePerOutputs;
+						changeAmount -= level.Denomination;
+						changeAmount -= level.Denomination.Percentage(CoordinatorFeePercent * denominationOutputCount);
+					}
+				}
+
+				if (changeAmount > Money.Zero) // If the coordinator fee would make change amount to be negative or zero then no need to pay it.
+				{
+					Money minimumOutputAmount = Money.Coins(0.0001m); // If the change would be less than about $1 then add it to the coordinator.
+					Money somePercentOfDenomination = newDenomination.Percentage(0.3m); // If the change is less than about 0.3% of the newDenomination then add it to the coordinator fee.
+					Money minimumChangeAmount = Math.Max(minimumOutputAmount, somePercentOfDenomination);
+					if (changeAmount < minimumChangeAmount)
+					{
+						coordinatorFee += changeAmount;
+					}
+					else
+					{
+						transaction.Outputs.AddWithOptimize(changeAmount, alice.ChangeOutputAddress.ScriptPubKey);
+					}
+				}
+				else
+				{
+					// Alice has no money enough to pay the coordinator fee then allow her to pay what she can.
+					coordinatorFee += changeAmount;
+				}
+			}
+
+			// 6. Add Coordinator fee only if > about $3, else just let it to be miner fee.
+			if (coordinatorFee > Money.Coins(0.0003m))
+			{
+				transaction.Outputs.AddWithOptimize(coordinatorFee, coordinatorScript);
+			}
+
+			// 7. Try optimize fees.
+			await TryOptimizeFeesAsync(transaction, spentCoins).ConfigureAwait(false);
+
+			// 8. Shuffle.
+			transaction.Inputs.Shuffle();
+			transaction.Outputs.Shuffle();
+
+			// 9. Sort inputs and outputs by amount so the coinjoin looks better in a block explorer.
+			transaction.Inputs.SortByAmount(spentCoins);
+			transaction.Outputs.SortByAmount();
+			// Note: We shuffle then sort because inputs and outputs could have equal values
+
+			if (transaction.Outputs.Any(x => x.ScriptPubKey == coordinatorScript))
+			{
+				RoundConfig.MakeNextCoordinatorScriptDirty();
+			}
+
+			CoinJoin = transaction;
+			UnsignedCoinJoinHex = transaction.ToHex();
+
+			Phase = RoundPhase.Signing;
+		}
+
+		private void MoveToOutputRegistration()
+		{
+			Phase = RoundPhase.OutputRegistration;
+		}
+
+		private async Task MoveToConnectionConfirmationAsync()
+		{
+			await RemoveAlicesIfAnInputRefusedByMempoolAsync().ConfigureAwait(false);
+
+			Phase = RoundPhase.ConnectionConfirmation;
+		}
+
+		private async Task MoveToInputRegistrationAsync(Money feePerInputs, Money feePerOutputs)
+		{
+			// Calculate fees.
+			if (feePerInputs is null || feePerOutputs is null)
+			{
+				(Money feePerInputs, Money feePerOutputs) fees = await CalculateFeesAsync(RpcClient, AdjustedConfirmationTarget).ConfigureAwait(false);
+				FeePerInputs = feePerInputs ?? fees.feePerInputs;
+				FeePerOutputs = feePerOutputs ?? fees.feePerOutputs;
+			}
+			else
+			{
+				FeePerInputs = feePerInputs;
+				FeePerOutputs = feePerOutputs;
+			}
+
+			Status = CoordinatorRoundStatus.Running;
 		}

 		private Money CalculateNewDenomination()


Fix incorrect namespace

Fix incorrect namespace

--- api/test/BellRichM.Exceptions.Test/BusinessExceptionSpecs.cs
+++ api/test/BellRichM.Exceptions.Test/BusinessExceptionSpecs.cs
@@ -10,7 +10,7 @@
 using It = Machine.Specifications.It;

 #pragma warning disable SA1649 // File name should match first type name
-namespace BellRichM.Api.Exceptions.Test
+namespace BellRichM.Exceptions.Test
 {
   internal class When_info_argument_is_null
   {


Probing has strike abort safety in it.

Probing has strike abort safety in it.

This is because a strike elsewhere on the bomb, has a 20% chance of
causing probing to change its frequency, and thus make the submitted
answer an additional strike.   Also, if that strike happens in the
middle of the cycle command,  the frequency change if it happens will
make that set of frequencies read unsuable.

--- Assets/Scripts/ComponentSolvers/Modded/ProbingComponentSolver.cs
+++ Assets/Scripts/ComponentSolvers/Modded/ProbingComponentSolver.cs
@@ -18,7 +18,7 @@
             _wires[4] == null || _wires[5] == null)
             yield break;

-
+        var beforeStrikes = StrikeCount;
         if (split.Length == 1 && split[0] == "cycle")
         {
             yield return "Reading the frequencies";
@@ -27,6 +27,13 @@
             for (var i = 1; i < 6; i++)
             {
                 yield return ConnectWires(i, 0);
+                if (beforeStrikes != StrikeCount)
+                {
+                    //A strike somewhere else on the bomb has the possibility to change the frequencies, and thus
+                    //ruin the reading.
+                    yield return EnsureWiresConnected(4, 4);
+                    yield break;
+                }
                 yield return new WaitForSeconds(2.0f);
             }
             yield return ConnectWires(4, 4);  //Leave the blue wire disconnected.
@@ -41,7 +48,16 @@

         yield return "Probing Solve Attempt";
         yield return EnsureWiresConnected(red-1, blue-1);
-        yield return new WaitForSeconds(6.5f);
+
+        for (var i = 0; i < 65; i++)
+        {
+            yield return new WaitForSeconds(0.1f);
+            if (beforeStrikes == StrikeCount) continue;
+
+            //A strike somewhere else on the bomb has the possibility to cause a strike here.
+            yield return EnsureWiresConnected(4, 4);
+            yield break;
+        }
     }


Introduced ShouldRecreateInstance

Introduced ShouldRecreateInstance

git-svn-id: bab0c2de90ee11a20376049c2cdee62584491f34@1593 73e77b4c-caa6-f847-a29a-24ab75ae54b6

--- Components/General/Binder/Castle.Components.Binder/DataBinder.cs
+++ Components/General/Binder/Castle.Components.Binder/DataBinder.cs
@@ -168,6 +168,11 @@
 		{
 		}

+		protected virtual bool ShouldRecreateInstance(object value, Type type, String prefix, IBindingDataSourceNode node)
+		{
+			return value == null || type.IsArray;
+		}
+
 		#endregion

 		#region Internal implementation
@@ -234,7 +239,7 @@
 							// if the property is an object, we look if it is already instanciated
 							object value = prop.GetValue(instance, null);

-							if (value == null || propType.IsArray)
+							if (ShouldRecreateInstance(value, propType, paramName, nestedNode))
 							{
 								value = InternalBindObject(propType, paramName, nestedNode, out conversionSucceeded);

@@ -243,7 +248,7 @@
 									prop.SetValue(instance, value, null);
 								}
 							}
-							else // if the object already instanciated, then we use it
+							else
 							{
 								InternalRecursiveBindObjectInstance(value, paramName, nestedNode);
 							}


Revert "Removed incorrect error message component."

This reverts commit 4607ee5e0c0f35f892ba7d321c78522f8ef1f058.

--- GPConnect.Provider.AcceptanceTests/Steps/RegisterPatientSteps.cs
+++ GPConnect.Provider.AcceptanceTests/Steps/RegisterPatientSteps.cs
@@ -345,7 +345,7 @@

                 var numberExtensions = nhsNumberIdentifier.Extension.Where(nne => nne.Url.Equals(FhirConst.StructureDefinitionSystems.kExtCcGpcNhsNumVerification)).ToList();

-                numberExtensions.Count().ShouldBe(1,$"There can only be one extension on the NHS Number Identifer");
+                numberExtensions.Count().ShouldBe(1,$"There can only be one extension on the NHS Number Identifer with a URL of {FhirConst.StructureDefinitionSystems.kExtCcGpcNhsNumVerification}");

                 ValidateCodeConceptExtension(numberExtensions.First(), FhirConst.ValueSetSystems.kVsNhsNumVerification);


Allows loading of .NET 4.5 runtime dumps

--- Microsoft.Diagnostics.Runtime/CLRMD/ClrMemDiag/datatargetimpl.cs
+++ Microsoft.Diagnostics.Runtime/CLRMD/ClrMemDiag/datatargetimpl.cs
@@ -197,7 +197,8 @@
             }
             else if (major == 4)
             {
-                if (patch < 10000)
+                // Allow support for .NET 4.5 runtimes
+                if (minor == 0 && patch < 10000)
                     ver = DesktopVersion.v4;
                 else
                     return new V45Runtime(this, lib);


Fix a bug caused by leftover code

Fix a bug caused by leftover code

--- OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs
+++ OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs
@@ -241,10 +241,6 @@
                             timeout -= 15;
                     }
                 }
-
-                if (requestData.ContainsKey("restart")
-                    && ((string)requestData["restart"] == "delayed"))
-

                 message = "Region is restarting in {0}. Please save what you are doing and log out.";


Make llRequestAgentData shout an error instead of crashing the script when an invalid UUID is passed to it.

--- OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
+++ OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
@@ -4309,107 +4309,115 @@
         {
             m_host.AddScriptLPS(1);

-            UUID uuid = (UUID)id;
-            PresenceInfo pinfo = null;
-            UserAccount account;
-
-            UserInfoCacheEntry ce;
-            if (!m_userInfoCache.TryGetValue(uuid, out ce))
-            {
-                account = World.UserAccountService.GetUserAccount(World.RegionInfo.ScopeID, uuid);
-                if (account == null)
-                {
-                    m_userInfoCache[uuid] = null; // Cache negative
-                    return UUID.Zero.ToString();
-                }
-
-
-                PresenceInfo[] pinfos = World.PresenceService.GetAgents(new string[] { uuid.ToString() });
-                if (pinfos != null && pinfos.Length > 0)
-                {
-                    foreach (PresenceInfo p in pinfos)
+            UUID uuid;
+            if (UUID.TryParse(id, out uuid))
+            {
+                PresenceInfo pinfo = null;
+                UserAccount account;
+
+                UserInfoCacheEntry ce;
+                if (!m_userInfoCache.TryGetValue(uuid, out ce))
+                {
+                    account = World.UserAccountService.GetUserAccount(World.RegionInfo.ScopeID, uuid);
+                    if (account == null)
                     {
-                        if (p.RegionID != UUID.Zero)
+                        m_userInfoCache[uuid] = null; // Cache negative
+                        return UUID.Zero.ToString();
+                    }
+
+
+                    PresenceInfo[] pinfos = World.PresenceService.GetAgents(new string[] { uuid.ToString() });
+                    if (pinfos != null && pinfos.Length > 0)
+                    {
+                        foreach (PresenceInfo p in pinfos)
                         {
-                            pinfo = p;
+                            if (p.RegionID != UUID.Zero)
+                            {
+                                pinfo = p;
+                            }
                         }
                     }
-                }
-
-                ce = new UserInfoCacheEntry();
-                ce.time = Util.EnvironmentTickCount();
-                ce.account = account;
-                ce.pinfo = pinfo;
-                m_userInfoCache[uuid] = ce;
-            }
-            else
-            {
-                if (ce == null)
-                    return UUID.Zero.ToString();
-
-                account = ce.account;
-                pinfo = ce.pinfo;
-            }
-
-            if (Util.EnvironmentTickCount() < ce.time || (Util.EnvironmentTickCount() - ce.time) >= 20000)
-            {
-                PresenceInfo[] pinfos = World.PresenceService.GetAgents(new string[] { uuid.ToString() });
-                if (pinfos != null && pinfos.Length > 0)
-                {
-                    foreach (PresenceInfo p in pinfos)
+
+                    ce = new UserInfoCacheEntry();
+                    ce.time = Util.EnvironmentTickCount();
+                    ce.account = account;
+                    ce.pinfo = pinfo;
+                    m_userInfoCache[uuid] = ce;
+                }
+                else
+                {
+                    if (ce == null)
+                        return UUID.Zero.ToString();
+
+                    account = ce.account;
+                    pinfo = ce.pinfo;
+                }
+
+                if (Util.EnvironmentTickCount() < ce.time || (Util.EnvironmentTickCount() - ce.time) >= 20000)
+                {
+                    PresenceInfo[] pinfos = World.PresenceService.GetAgents(new string[] { uuid.ToString() });
+                    if (pinfos != null && pinfos.Length > 0)
                     {
-                        if (p.RegionID != UUID.Zero)
+                        foreach (PresenceInfo p in pinfos)
                         {
-                            pinfo = p;
+                            if (p.RegionID != UUID.Zero)
+                            {
+                                pinfo = p;
+                            }
                         }
                     }
-                }
-                else
-                    pinfo = null;
-
-                ce.time = Util.EnvironmentTickCount();
-                ce.pinfo = pinfo;
-            }
-
-            string reply = String.Empty;
-
-            switch (data)
-            {
-            case 1: // DATA_ONLINE (0|1)
-                if (pinfo != null && pinfo.RegionID != UUID.Zero)
-                    reply = "1";
-                else
-                    reply = "0";
-                break;
-            case 2: // DATA_NAME (First Last)
-                reply = account.FirstName + " " + account.LastName;
-                break;
-            case 3: // DATA_BORN (YYYY-MM-DD)
-                DateTime born = new DateTime(1970, 1, 1, 0, 0, 0, 0);
-                born = born.AddSeconds(account.Created);
-                reply = born.ToString("yyyy-MM-dd");
-                break;
-            case 4: // DATA_RATING (0,0,0,0,0,0)
-                reply = "0,0,0,0,0,0";
-                break;
-            case 8: // DATA_PAYINFO (0|1|2|3)
-                reply = "0";
-                break;
-            default:
-                return UUID.Zero.ToString(); // Raise no event
-            }
-
-            UUID rq = UUID.Random();
-
-            UUID tid = AsyncCommands.
-                DataserverPlugin.RegisterRequest(m_localID,
-                                             m_itemID, rq.ToString());
-
-            AsyncCommands.
-            DataserverPlugin.DataserverReply(rq.ToString(), reply);
-
-            ScriptSleep(100);
-            return tid.ToString();
+                    else
+                        pinfo = null;
+
+                    ce.time = Util.EnvironmentTickCount();
+                    ce.pinfo = pinfo;
+                }
+
+                string reply = String.Empty;
+
+                switch (data)
+                {
+                    case 1: // DATA_ONLINE (0|1)
+                        if (pinfo != null && pinfo.RegionID != UUID.Zero)
+                            reply = "1";
+                        else
+                            reply = "0";
+                        break;
+                    case 2: // DATA_NAME (First Last)
+                        reply = account.FirstName + " " + account.LastName;
+                        break;
+                    case 3: // DATA_BORN (YYYY-MM-DD)
+                        DateTime born = new DateTime(1970, 1, 1, 0, 0, 0, 0);
+                        born = born.AddSeconds(account.Created);
+                        reply = born.ToString("yyyy-MM-dd");
+                        break;
+                    case 4: // DATA_RATING (0,0,0,0,0,0)
+                        reply = "0,0,0,0,0,0";
+                        break;
+                    case 8: // DATA_PAYINFO (0|1|2|3)
+                        reply = "0";
+                        break;
+                    default:
+                        return UUID.Zero.ToString(); // Raise no event
+                }
+
+                UUID rq = UUID.Random();
+
+                UUID tid = AsyncCommands.
+                    DataserverPlugin.RegisterRequest(m_localID,
+                                                 m_itemID, rq.ToString());
+
+                AsyncCommands.
+                DataserverPlugin.DataserverReply(rq.ToString(), reply);
+
+                ScriptSleep(100);
+                return tid.ToString();
+            }
+            else
+            {
+                ShoutError("Invalid UUID passed to llRequestAgentData.");
+            }
+            return "";
         }

         public LSL_String llRequestInventoryData(string name)


Update AssemblyInfo.cs

Update AssemblyInfo.cs

--- WebApiProxy.Tasks/Properties/AssemblyInfo.cs
+++ WebApiProxy.Tasks/Properties/AssemblyInfo.cs
@@ -31,6 +31,6 @@
 // You can specify all the values or you can default the Build and Revision Numbers
 // by using the '*' as shown below:
 // [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyInformationalVersion("1.0.4.*")]
-[assembly: AssemblyVersion("1.0.5.*")]
-[assembly: AssemblyFileVersion("1.0.5.*")]
+[assembly: AssemblyInformationalVersion("1.0.6.*")]
+[assembly: AssemblyVersion("1.0.6.*")]
+[assembly: AssemblyFileVersion("1.0.6.*")]


don't  recoil  attachments doing llRezObject()

--- OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
+++ OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
@@ -3129,13 +3129,19 @@
                                 new_group.RootPart.UUID.ToString()) },
                                 new DetectParams[0]));

-                        float groupmass = new_group.GetMass();
+                        // do recoil
+                        SceneObjectGroup hostgrp = m_host.ParentGroup;
+                        if (hostgrp == null)
+                            return;
+
+                        if (hostgrp.IsAttachment) // don't recoil avatars
+                            return;

                         PhysicsActor pa = new_group.RootPart.PhysActor;

                         if (pa != null && pa.IsPhysical && llvel != Vector3.Zero)
                         {
-                            // recoil
+                            float groupmass = new_group.GetMass();
                             llvel *= -groupmass;
                             llApplyImpulse(new LSL_Vector(llvel.X, llvel.Y,llvel.Z), 0);
                         }


fixed Client.IsAvailable

fixed Client.IsAvailable

--- WhenItsDone/Lib/WhenItsDone.Models/Client.cs
+++ WhenItsDone/Lib/WhenItsDone.Models/Client.cs
@@ -14,6 +14,8 @@
         public Client()
         {
             this.jobs = new HashSet<Job>();
+
+            this.IsAvailable = true;
         }

         [Key]
@@ -32,7 +34,7 @@
         public string LastName { get; set; }

         public GenderType Gender { get; set; }
-
+
         [Range(ValidationConstants.AgeMinValue, ValidationConstants.AgeMaxValue)]
         public int Age { get; set; }


Clear Shape.SculptEntry if prim type is not a sculptie in llSetPrimitiveParams() - addresses Mantis #4462

--- OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
+++ OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
@@ -6502,6 +6502,7 @@
             // retain pathcurve
             shapeBlock.PathCurve = part.Shape.PathCurve;

+            part.Shape.SculptEntry = false;
             return shapeBlock;
         }

@@ -6550,6 +6551,7 @@
             shapeBlock.PathShearX = (byte)(100 * topshear.x);
             shapeBlock.PathShearY = (byte)(100 * topshear.y);

+            part.Shape.SculptEntry = false;
             part.UpdateShape(shapeBlock);
         }

@@ -6591,6 +6593,7 @@
             shapeBlock.ProfileBegin = (ushort)(50000 * dimple.x);
             shapeBlock.ProfileEnd   = (ushort)(50000 * (1 - dimple.y));

+            part.Shape.SculptEntry = false;
             part.UpdateShape(shapeBlock);
         }

@@ -6711,6 +6714,7 @@
             }
             shapeBlock.PathSkew = (sbyte)(100 * skew);

+            part.Shape.SculptEntry = false;
             part.UpdateShape(shapeBlock);
         }


Explictly typed base class of FolderBrowserDialog to avoid compiler errors

--- Windows.Forms/Dialogs/FolderBrowserDialog.cs
+++ Windows.Forms/Dialogs/FolderBrowserDialog.cs
@@ -398,7 +398,7 @@

 	/// <summary>Class to let the user browse for a folder.</summary>
 	[ToolboxBitmap(typeof(FolderBrowserDialog), "Dialog"), Description("Dialog that browses network computers.")]
-	public class FolderBrowserDialog : CommonDialog
+	public class FolderBrowserDialog : System.Windows.Forms.CommonDialog
 	{
 		private const KnownFolder defaultComputersFolder = KnownFolder.NetworkFolder;
 		private const KnownFolder defaultFolderFolder = KnownFolder.ComputerFolder;


[Windows] Fix crash when toggling IsPassword on multiple Entry controls (#405)

* [Windows] Fix crash when toggling IsPassword on multiple Entry controls

--- Xamarin.Forms.Platform.WinRT/FormsTextBox.cs
+++ Xamarin.Forms.Platform.WinRT/FormsTextBox.cs
@@ -37,7 +37,7 @@

 		public new static readonly DependencyProperty TextProperty = DependencyProperty.Register(nameof(Text), typeof(string), typeof(FormsTextBox), new PropertyMetadata("", TextPropertyChanged));

-		static InputScope s_passwordInputScope;
+		InputScope passwordInputScope;
 		Border _borderElement;
 		InputScope _cachedInputScope;
 		bool _cachedPredictionsSetting;
@@ -87,20 +87,20 @@
 			set { SetValue(TextProperty, value); }
 		}

-		static InputScope PasswordInputScope
+		InputScope PasswordInputScope
 		{
 			get
 			{
-				if (s_passwordInputScope != null)
+				if (passwordInputScope != null)
 				{
-					return s_passwordInputScope;
+					return passwordInputScope;
 				}

-				s_passwordInputScope = new InputScope();
+				passwordInputScope = new InputScope();
 				var name = new InputScopeName { NameValue = InputScopeNameValue.Default };
-				s_passwordInputScope.Names.Add(name);
-
-				return s_passwordInputScope;
+				passwordInputScope.Names.Add(name);
+
+				return passwordInputScope;
 			}
 		}


CP-25564: Added condition for maintenance mode and clustering

Signed-off-by: serenc <827a7b1d18a3645c4d6dbbc0ecb7b991927a5ce5@citrix.com>

--- XenAdmin/Dialogs/NetworkingPropertiesPage.cs
+++ XenAdmin/Dialogs/NetworkingPropertiesPage.cs
@@ -36,6 +36,7 @@
 using System.Windows.Forms;
 using XenAdmin.Controls;
 using XenAdmin.Core;
+using XenAPI;

 namespace XenAdmin.Dialogs
@@ -166,15 +167,18 @@
                 haEnabledRubric.Enabled =
                     true;
             }
-            if (network != null)
-            {
-                var master = Helpers.GetMaster(network.Connection);
+
+            var pif = (PIF) Tag;
+            var existingCluster = network != null ? network.Connection.Cache.Clusters.FirstOrDefault() : null;
+
+            if (pif != null && existingCluster != null && existingCluster.network.opaque_ref == network.opaque_ref)
+            {
+                Host host = network.Connection.Resolve(pif.host);
+
                 var clusteringEnabled = network.Connection.Cache.Cluster_hosts.Any(cluster =>
-                    cluster.host.opaque_ref == master.opaque_ref && cluster.enabled);
-                var existingCluster = network.Connection.Cache.Clusters.FirstOrDefault();
-
-                if (clusteringEnabled && existingCluster != null &&
-                    existingCluster.network.opaque_ref == network.opaque_ref)
+                    cluster.host.opaque_ref == host.opaque_ref && cluster.enabled);
+
+                if (clusteringEnabled && host.enabled)
                 {
                     DisableControls("DisableForClustering",
                         string.Format(Messages.CANNOT_CHANGE_IP_CLUSTERING_ENABLED, network.Name()));


US5287: change signin route

US5287: change signin route

--- SignInCheckIn/SignInCheckIn/Controllers/ChildSigninController.cs
+++ SignInCheckIn/SignInCheckIn/Controllers/ChildSigninController.cs
@@ -49,7 +49,7 @@

         [HttpPost]
         //[ResponseType(typeof(List<ParticipantDto>))]
-        [Route("signin/children/signin")]
+        [Route("signin/children")]
         public IHttpActionResult SigninParticipants(ParticipantEventMapDto participantEventMapDto)
         {
             try


Endpoint for api calls for meters and customers added.

--- Source/Applications/openXDA/openXDA/Controllers/WebAPI/WebAPI.cs
+++ Source/Applications/openXDA/openXDA/Controllers/WebAPI/WebAPI.cs
@@ -42,6 +42,7 @@
 using GSF.Web.Security;
 using log4net;
 using openXDA.Model;
+using SystemCenter.Model;

 namespace openXDA.Controllers.WebAPI
 {
@@ -198,7 +199,7 @@
     public class SeriesTypeController : ModelController<SeriesType> {}

     [RoutePrefix("api/Setting")]
-    public class SettingController : ModelController<Setting>
+    public class SettingController : ModelController<openXDA.Model.Setting>
     {

         [Route("Category/{category}")]
@@ -223,5 +224,22 @@
         }
     }

+    [RoutePrefix("api/ValueList")]
+    public class ValueListController : ModelController<ValueList>
+    {
+        [HttpGet, Route("Group/{groupName}")]
+        public IHttpActionResult GetValueListForGroup(string groupName)
+        {
+            using (AdoDataConnection connection = new AdoDataConnection(Connection))
+            {
+                string tableName = new TableOperations<ValueListGroup>(connection).TableName;
+                IEnumerable<ValueList> records = new TableOperations<ValueList>(connection).QueryRecordsWhere($"GroupID = ( SELECT ID FROM {tableName} WHERE Name = {{0}})", groupName);
+                return Ok(records);
+            }
+        }
+    }
+
+    [RoutePrefix("api/Customer")]
+    public class CustomerController : ModelController<Meter> {}

 }


Optimize the screen clone rendering

Optimize the screen clone rendering

--- Source/HelixToolkit.SharpDX.Shared/Core/ScreenCloneRenderCore.cs
+++ Source/HelixToolkit.SharpDX.Shared/Core/ScreenCloneRenderCore.cs
@@ -71,7 +71,10 @@
         {
             set
             {
-                Set(ref output, value);
+                if(Set(ref output, value))
+                {
+                    invalidRender = true;
+                }
             }
             get
             {
@@ -92,11 +95,14 @@
             {
                 if(Set(ref cloneRectangle, value))
                 {
+                    invalidRender = true;
                     clearTarget = true;
                 }
             }
             get { return cloneRectangle; }
         }
+
+        private bool stretchToFill = false;
         /// <summary>
         /// Gets or sets a value indicating cloned rectangle is stretched during rendering, default is false;
         /// </summary>
@@ -105,9 +111,19 @@
         /// </value>
         public bool StretchToFill
         {
-            set;
-            get;
-        } = false;
+            set
+            {
+                if(Set(ref stretchToFill, value))
+                {
+                    invalidRender = true;
+                    if (!value)
+                    {
+                        clearTarget = true;
+                    }
+                }
+            }
+            get { return stretchToFill; }
+        }

         private DuplicationResource duplicationResource;
         private FrameProcessing frameProcessor;
@@ -116,6 +132,7 @@
         private int samplerBindSlot = 0;
         private SamplerProxy textureSampler;
         private bool clearTarget = true;
+        private bool invalidRender = true;

         private DX11RenderHostConfiguration config = new DX11RenderHostConfiguration() { ClearEachFrame = false, RenderD2D = false, RenderLights = false, UpdatePerFrameData = false };
         /// <summary>
@@ -189,6 +206,7 @@
                 {
                     frameProcessor.ProcessFrame(ref data, deviceContext);
                 }
+                invalidRender = true;
             }
             if (frameProcessor.SharedTexture != null)
             {
@@ -197,15 +215,20 @@
                     clearTarget = false;
                     context.RenderHost.ClearRenderTarget(deviceContext, true, false);
                 }
-                DefaultShaderPass.BindShader(deviceContext);
-                DefaultShaderPass.BindStates(deviceContext, StateType.BlendState | StateType.DepthStencilState | StateType.RasterState);
-                deviceContext.DeviceContext.InputAssembler.PrimitiveTopology = global::SharpDX.Direct3D.PrimitiveTopology.TriangleStrip;
-                DefaultShaderPass.GetShader(ShaderStage.Pixel).BindSampler(deviceContext, samplerBindSlot, textureSampler);
-                using (var textureView = new global::SharpDX.Direct3D11.ShaderResourceView(deviceContext.DeviceContext.Device, frameProcessor.SharedTexture))
-                {
-                    DefaultShaderPass.GetShader(ShaderStage.Pixel).BindTexture(deviceContext, textureBindSlot, textureView);
-                    deviceContext.DeviceContext.Draw(4, 0);
-                }
+                if (invalidRender)
+                {
+                    DefaultShaderPass.BindShader(deviceContext);
+                    DefaultShaderPass.BindStates(deviceContext, StateType.BlendState | StateType.DepthStencilState | StateType.RasterState);
+                    deviceContext.DeviceContext.InputAssembler.PrimitiveTopology = global::SharpDX.Direct3D.PrimitiveTopology.TriangleStrip;
+                    DefaultShaderPass.GetShader(ShaderStage.Pixel).BindSampler(deviceContext, samplerBindSlot, textureSampler);
+                    using (var textureView = new global::SharpDX.Direct3D11.ShaderResourceView(deviceContext.DeviceContext.Device, frameProcessor.SharedTexture))
+                    {
+                        DefaultShaderPass.GetShader(ShaderStage.Pixel).BindTexture(deviceContext, textureBindSlot, textureView);
+                        deviceContext.DeviceContext.Draw(4, 0);
+                    }
+                    invalidRender = false;
+                }
+
             }
             if (isTimeOut)
             {
@@ -315,6 +338,7 @@
         protected override void OnDetach()
         {
             clearTarget = true;
+            invalidRender = true;
             base.OnDetach();
         }

@@ -366,7 +390,7 @@
             private readonly Stack<OutputDuplication> currentDuplicationStack = new Stack<OutputDuplication>();
             private readonly Stack<Texture2D> currentDuplicationTexture = new Stack<Texture2D>();

-            private int getFrameTimeOut = 10;
+            private int getFrameTimeOut = 5;

             public DuplicationResource(global::SharpDX.Direct3D11.Device device)
             {


Added safe-guards around program startup for when the program is started without a debugger attached.

--- Source/Runtime/SharpBattleNet.Runtime/Application/Application.cs
+++ Source/Runtime/SharpBattleNet.Runtime/Application/Application.cs
@@ -92,13 +92,50 @@
             return;
         }

-        public int Run()
+        public int UnguardedRun()
         {
             SetupNinject();
             SetupCommandLineParser();
             SetupApplicationHandler();

             return _applicationHandler.Run(_arguments);
+        }
+
+        private void UnhandledException(Exception ex)
+        {
+            return;
+        }
+
+        private void UnhandledExceptionHandler(object sender, UnhandledExceptionEventArgs e)
+        {
+            UnhandledException((Exception)e.ExceptionObject);
+
+            return;
+        }
+
+        private int GuardedRun()
+        {
+            try
+            {
+                AppDomain.CurrentDomain.UnhandledException += UnhandledExceptionHandler;
+
+                return UnguardedRun();
+            }
+            catch(Exception ex)
+            {
+                UnhandledException(ex);
+            }
+
+            return -1;
+        }
+
+        public int Run()
+        {
+            #if DEBUG
+                return UnguardedRun();
+            #else
+                return GuardedRun();
+            #endif
         }

         protected void Dispose(bool disposing)


新增註解

新增註解

新增註解

--- UartOscilloscopeTests/CSharpFiles/UARTConnectionConstValTests.cs
+++ UartOscilloscopeTests/CSharpFiles/UARTConnectionConstValTests.cs
@@ -9,15 +9,15 @@
 namespace UartOscilloscope.Tests
 {                                                                               //	進入命名空間
 	[TestClass()]
-	public class UARTConnectionConstValTests
-	{
+	public class UARTConnectionConstValTests                                    //	UARTConnectionConstValTests類別
+	{                                                                           //	進入UARTConnectionConstValTests類別
 		[TestMethod()]
-		public void GetDefaultBaudRateTest()
-		{
-			int expected = 9600;
-			int actual;
-			actual = UARTConnectionConstVal.GetDefaultBaudRate();
-			Assert.AreEqual(expected, actual);
-		}
-	}
+		public void GetDefaultBaudRateTest()                                    //	GetDefaultBaudRateTest方法
+		{                                                                       //	進入GetDefaultBaudRateTest方法
+			int expected = 9600;                                                //	宣告expected(期望輸出)
+			int actual;                                                         //	宣告actual(實際輸出)
+			actual = UARTConnectionConstVal.GetDefaultBaudRate();               //	執行GetDefaultBaudRate方法
+			Assert.AreEqual(expected, actual);									//	比對期望輸出與實際輸出
+		}                                                                       //	結束GetDefaultBaudRateTest方法
+	}                                                                           //	結束UARTConnectionConstValTests類別
 }                                                                               //	結束命名空間


Remove TryScorch from addPlatingDamage

Remove TryScorch from addPlatingDamage

--- UnityProject/Assets/Scripts/Tilemaps/Behaviours/TilemapDamage.cs
+++ UnityProject/Assets/Scripts/Tilemaps/Behaviours/TilemapDamage.cs
@@ -246,11 +246,7 @@
 	{
 		data.Damage += GetReducedDamage(cellPos, dmgAmt, attackType);
 		BasicTile tile = null;
-		if (data.Damage >= 30 && data.Damage < GetMaxDamage(cellPos))
-		{
-			TryScorch(cellPos);
-		}
-		else if (data.Damage >= GetMaxDamage(cellPos))
+		if (data.Damage >= GetMaxDamage(cellPos))
 		{
 			tile = tileChangeManager.RemoveTile(cellPos, LayerType.Base, false) as BasicTile;
 		}


Client side validation added.

Client side validation added.

--- XOMNI.SDK/XOMNI.SDK.Public/Clients/Catalog/AutoCompleteClient.cs
+++ XOMNI.SDK/XOMNI.SDK.Public/Clients/Catalog/AutoCompleteClient.cs
@@ -4,6 +4,7 @@
 using XOMNI.SDK.Public.Clients;
 using XOMNI.SDK.Public.Models;
 using XOMNI.SDK.Public.Models.Catalog;
+using XOMNI.SDK.Public.Extensions;

 namespace XOMNI.SDK.Public.Clients.Catalog
 {
@@ -15,22 +16,13 @@

 		}

-		public async Task<ApiResponse<AutoCompleteResult>> GetAsync(AutoCompleteSearchType searchType, string searchTerm, int skip, int take)
+        public async Task<ApiResponse<AutoCompleteResult>> GetAsync(AutoCompleteSearchType searchType, string searchTerm, int skip, int take, bool includeOnlyMasterItems)
 		{
-            if(string.IsNullOrEmpty(searchTerm))
-            {
-                throw new ArgumentNullException("searchTerm");
-            }
-            if(skip<=0)
-            {
-                throw new ArgumentException("skip");
-            }
-            if(take<=0)
-            {
-                throw new ArgumentException("take");
-            }
+            Validator.For(searchTerm, "searchTerm").IsNotNullOrEmpty();
+            Validator.For(skip, "skip").IsGreaterThanOrEqual(0);
+            Validator.For(take, "take").IsGreaterThanOrEqual(1);

-			string path = string.Format("/catalog/autocomplete/{0}?searchTerm={1}&skip={2}&take={3}", searchType.ToString(), searchTerm, skip, take);
+			string path = string.Format("/catalog/autocomplete/{0}?searchTerm={1}&skip={2}&take={3}&includeOnlyMasterItems={4}", searchType, searchTerm, skip, take,includeOnlyMasterItems);

 			using (var response = await Client.GetAsync(path).ConfigureAwait(false))
 			{


Add impact impulse to assault rifle projectile.

--- ethernet/server/scripts/weapons/assaultrifle/assaultrifle.cs
+++ ethernet/server/scripts/weapons/assaultrifle/assaultrifle.cs
@@ -33,7 +33,7 @@
 {
 	// script damage properties...
 	impactDamage       = 0;
-	impactImpulse      = 0;
+	impactImpulse      = 1000;
 	splashDamage       = 25;
 	splashDamageRadius = 3;
 	splashImpulse      = 0;


Fixed error with empty string

Fixed error with empty string

--- bin/projects/dbatools/dbatools/Parameter/DbaInstanceParameter.cs
+++ bin/projects/dbatools/dbatools/Parameter/DbaInstanceParameter.cs
@@ -241,6 +241,9 @@
         public DbaInstanceParameter(string Name)
         {
             InputObject = Name;
+
+            if (Name == "")
+                throw new ArgumentException("Bloody hell! Don't give me an empty string for an instance name!");

             if (Name == ".")
             {


better game start and game over handling

--- CheckersGame/Game.cs
+++ CheckersGame/Game.cs
@@ -20,6 +20,7 @@
         private GTGuiInterface GUI;
         private Logic.Logic logic;
         private Step step;
+        private GameStateChangedEventArgs actualState;

 		public Game()
         {
@@ -73,13 +74,16 @@
         {
             GUI = gui;

-            GUI.SetFieldBackground(damaBackGround);
-            GUI.SetField(StateToField(logic.getCurrentState()));
+            //GUI.SetFieldBackground(damaBackGround);
+            //GUI.SetField(StateToField(logic.getCurrentState()));
             GUI.FieldClicked += GuiOnFieldClicked;
         }

         private void GuiOnFieldClicked(GTGuiInterface gui, int row, int column)
         {
+            if (actualState == null)
+                return;
+
             if (step == null)
             {
                 Position pos = new Position(7 - row, column);
@@ -132,7 +136,17 @@

         public void RecieveGameState(object sender, GameStateChangedEventArgs gameStateChangedEventArgs)
         {
-
+            actualState = gameStateChangedEventArgs;
+
+            if (actualState.GamePhase == GamePhase.Started)
+            {
+                logic = new Logic.Logic();
+                GUI.SetFieldBackground(damaBackGround);
+                GUI.SetField(StateToField(logic.getCurrentState()));
+            }
+            else if (actualState.GamePhase == GamePhase.Ended)
+            {
+            }
         }

         private void stepWithNextUser()


Change constructors of LastfmClient, use C# 6

--- src/IF.Lastfm.Core/Api/LastfmClient.cs
+++ src/IF.Lastfm.Core/Api/LastfmClient.cs
@@ -16,69 +16,45 @@
         private TrackApi _trackApi;
         private UserApi _userApi;

-        public LastAuth Auth
-        {
-            get { return _lastAuth; }
-        }
-
-        public AlbumApi Album
-        {
-            get { return _albumApi ?? (_albumApi = new AlbumApi(_lastAuth, HttpClient)); }
-        }
-
-        public ArtistApi Artist
-        {
-            get { return _artistApi ?? (_artistApi = new ArtistApi(_lastAuth, HttpClient)); }
-        }
-
-        public ChartApi Chart
-        {
-            get { return _chartApi ?? (_chartApi = new ChartApi(_lastAuth, HttpClient)); }
-        }
-
-        public LibraryApi Library
-        {
-            get { return _libraryApi ?? (_libraryApi = new LibraryApi(_lastAuth, HttpClient)); }
-        }
+        public LastAuth Auth => _lastAuth;
+        public AlbumApi Album => _albumApi ?? (_albumApi = new AlbumApi(_lastAuth, HttpClient));
+        public ArtistApi Artist => _artistApi ?? (_artistApi = new ArtistApi(_lastAuth, HttpClient));
+        public ChartApi Chart => _chartApi ?? (_chartApi = new ChartApi(_lastAuth, HttpClient));
+        public LibraryApi Library => _libraryApi ?? (_libraryApi = new LibraryApi(_lastAuth, HttpClient));
+        public TagApi Tag => _tagApi ?? (_tagApi = new TagApi(_lastAuth, HttpClient));
+        public TrackApi Track => _trackApi ?? (_trackApi = new TrackApi(_lastAuth, HttpClient));
+        public UserApi User => _userApi ?? (_userApi = new UserApi(_lastAuth, HttpClient));

         public ScrobblerBase Scrobbler
         {
             get { return _scrobbler ?? (_scrobbler = new Scrobbler(_lastAuth, HttpClient)); }
+            set { _scrobbler = value; }
         }

-        public TagApi Tag
+        public LastfmClient(LastAuth auth, HttpClient httpClient = null, ScrobblerBase scrobbler = null)
+            : base(httpClient)
         {
-            get { return _tagApi ?? (_tagApi = new TagApi(_lastAuth, HttpClient)); }
+            _lastAuth = auth;
+            _scrobbler = scrobbler;
         }

-        public TrackApi Track
-        {
-            get { return _trackApi ?? (_trackApi = new TrackApi(_lastAuth, HttpClient)); }
-        }
-
-        public UserApi User
-        {
-            get { return _userApi ?? (_userApi = new UserApi(_lastAuth, HttpClient)); }
-        }
-
-        public LastfmClient(string apiKey, string apiSecret, HttpClient httpClient = null, ScrobblerBase scrobbler = null)
+        public LastfmClient(string apiKey, string apiSecret, HttpClient httpClient = null)
             : base(httpClient)
         {
             _lastAuth = new LastAuth(apiKey, apiSecret, httpClient);
-            _scrobbler = scrobbler;
         }
+
         public override void Dispose()
         {
             _lastAuth.Dispose();
-
-            if (_albumApi != null) _albumApi.Dispose();
-            if (_artistApi != null) _artistApi.Dispose();
-            if (_chartApi != null) _chartApi.Dispose();
-            if (_libraryApi != null) _libraryApi.Dispose();
-            if (_scrobbler != null) _scrobbler.Dispose();
-            if (_tagApi != null) _tagApi.Dispose();
-            if (_trackApi != null) _trackApi.Dispose();
-            if (_userApi != null) _userApi.Dispose();
+            _albumApi?.Dispose();
+            _artistApi?.Dispose();
+            _chartApi?.Dispose();
+            _libraryApi?.Dispose();
+            _scrobbler?.Dispose();
+            _tagApi?.Dispose();
+            _trackApi?.Dispose();
+            _userApi?.Dispose();

             base.Dispose();
         }


加入了另一种判断是否为数值类型的方式注释

加入了另一种判断是否为数值类型的方式注释

--- Core/通用扩展.cs
+++ Core/通用扩展.cs
@@ -12,8 +12,21 @@
 {
     #region 基本

-    /// <summary>
-    /// 判断是否为数值类型。
+
+    ////数值类型数组缓存
+    //private static Type[] ta = new[] { typeof(Int16), typeof(Int32), typeof(Int64), typeof(Single), typeof(Double), typeof(UInt16), typeof(UInt32), typeof(UInt64), typeof(Byte), typeof(Decimal), typeof(SByte), typeof(UIntPtr), typeof(IntPtr)};
+    ///// <summary>
+    ///// 判断是否为数值类型。目前已知不支持BigInteger。这种方法是以空间换时间的缓存策略，有大量查询时性能会更优，反之则拖慢初始化。
+    ///// </summary>
+    ///// <param name="t">要判断的类型</param>
+    ///// <returns>是否为数值类型</returns>
+    //public static bool IsNumericType(this Type t)
+    //{
+    //    return Array.IndexOf(ta, t) >= 0;
+    //}
+
+    /// <summary>
+    /// 判断是否为数值类型。目前已知不支持BigInteger。
     /// </summary>
     /// <param name="t">要判断的类型</param>
     /// <returns>是否为数值类型</returns>
@@ -24,7 +37,7 @@
     }

     /// <summary>
-    /// 判断是否为可空数值类型。
+    /// 判断是否为可空数值类型。目前已知不支持BigInteger。
     /// </summary>
     /// <param name="t">要判断的类型</param>
     /// <returns>是否为可空数值类型</returns>


Fix race condition on first launch due to Languages not yet loaded

I suspect the Resources aren't yet populated when the [InitializeOnLoad]
gets executed. This means the languages aren't found when we initialize
the LocaleManager, so it results in an error when trying to
GetTranslation (currentLanguage is unset).

--- Assets/RedBlueGames/MulliganRenamer/Editor/Undo/AssetRenameUndoer.cs
+++ Assets/RedBlueGames/MulliganRenamer/Editor/Undo/AssetRenameUndoer.cs
@@ -35,8 +35,8 @@
     [InitializeOnLoad]
     public static class AssetRenameUndoer
     {
-        private static readonly string MomentNameBeforeRename = LocaleManager.Instance.GetTranslation("before");
-        private static readonly string MomentNameAfterRename = LocaleManager.Instance.GetTranslation("after");
+        private static readonly string MomentNameBeforeRename = "Before";
+        private static readonly string MomentNameAfterRename = "After";

         private static List<AssetRenameUndoMoment> undoMoments;


Partial commit, read next commit's message for more info.

--- Aurora/Services/DataService/Connectors/Local/LocalEstateConnector.cs
+++ Aurora/Services/DataService/Connectors/Local/LocalEstateConnector.cs
@@ -255,7 +255,7 @@
             List<object> Values = new List<object>();
             Values.Add(es.EstateID);
             Values.Add("EstateSettings");
-            OSDMap map = Util.DictionaryToOSD(es.ToKeyValuePairs(true));
+            OSDMap map = es.ToOSD(true);
             Values.Add(OSDParser.SerializeLLSDXmlString(map));
             GD.Insert("estates", Values.ToArray());

@@ -293,7 +293,7 @@
             List<string> Keys = new List<string>();
             Keys.Add("Value");
             List<object> Values = new List<object>();
-            Values.Add(OSDParser.SerializeLLSDXmlString(Util.DictionaryToOSD(es.ToKeyValuePairs(true))));
+            Values.Add(OSDParser.SerializeLLSDXmlString(es.ToOSD(true)));

             GD.Update("estates", Values.ToArray(), Keys.ToArray(), new string[] { "ID", "`Key`" }, new object[] { es.EstateID, "EstateSettings" });

@@ -308,7 +308,7 @@
         public List<int> GetEstates(string search)
         {
             List<int> result = new List<int>();
-            List<string> RetVal = GD.Query("", "", "estates", "`Value`", " where `Key` = 'EstateSettings' and `Value` LIKE '%<key>EstateName</key><string>" + search + "</string>%'");
+            List<string> RetVal = GD.Query("", "", "estates", "`Value`", " where `Key` = 'EstateSettings' and `Value` LIKE '%<key>EstateName</key><string>" + search.MySQLEscape() + "</string>%'");
             if (RetVal.Count == 0)
                 return null;
             foreach (string val in RetVal)


Added BigBlock limits to lists...

Added BigBlock limits to lists...

Signed-off-by: Swizzy <51c8fc2a6f81c668ac55ab8d1eff4b17376677e4@hotmail.co.uk>

--- x360NANDManager/x360NANDManager/Main.cs
+++ x360NANDManager/x360NANDManager/Main.cs
@@ -153,10 +153,10 @@
                     break;
                 case SPIPresets.BigBlockSystemOnly:
                     Start = 0;
-                    End = 0;
+                    End = 0x1000;
                     break;
                 case SPIPresets.BigBlockMemoryUnit:
-                    Start = 0;
+                    Start = 0x1000;
                     End = 0;
                     break;
                 default:


Fix DateTime deserialize from Mongo in UTC (local in FDO) - remove remaining dates

--- src/LfMerge.Tests/Fdo/RoundTripBase.cs
+++ src/LfMerge.Tests/Fdo/RoundTripBase.cs
@@ -33,8 +33,6 @@
 		)
 		{
 			var fieldNamesThatShouldBeDifferent = new string[] {
-				"createdDate",
-				"modifiedDate",
 			};
 			var fieldNamesThatAreSubdocuments = new string[] {
 				"authorInfo",


Increased version.

Increased version.

--- src/Logbert/Properties/AssemblyInfo.cs
+++ src/Logbert/Properties/AssemblyInfo.cs
@@ -29,6 +29,6 @@
 //      Build Number
 //      Revision
 //
-[assembly: AssemblyVersion("1.3.2.0")]
-[assembly: AssemblyFileVersion("1.3.2.0")]
+[assembly: AssemblyVersion("1.3.2.1")]
+[assembly: AssemblyFileVersion("1.3.2.1")]
 [assembly: NeutralResourcesLanguageAttribute("")]