minimize memory for the static Field and Property

--- src/FastExpressionCompiler.LightExpression/Expression.cs
+++ src/FastExpressionCompiler.LightExpression/Expression.cs
@@ -361,10 +361,12 @@
         }

         public static MemberExpression Property(PropertyInfo property) =>
-            new PropertyExpression(null, property);
+            new PropertyExpression(property);

         public static MemberExpression Property(Expression instance, PropertyInfo property) =>
-            new PropertyExpression(instance, property);
+            instance == null
+                ? new PropertyExpression(property)
+                : new InstancePropertyExpression(instance, property);

         public static MemberExpression Property(Expression expression, string propertyName) =>
             Property(expression, expression.Type.FindProperty(propertyName)
@@ -376,12 +378,12 @@
         public static IndexExpression Property(Expression instance, PropertyInfo indexer, IEnumerable<Expression> arguments) =>
             new IndexExpression(instance, indexer, arguments.AsReadOnlyList());

-        public static MemberExpression PropertyOrField(Expression expression, string propertyName) =>
-            expression.Type.FindProperty(propertyName) != null ?
-                (MemberExpression)new PropertyExpression(expression, expression.Type.FindProperty(propertyName)
-                    ?? throw new ArgumentException($"Declared property with the name '{propertyName}' is not found in '{expression.Type}'", nameof(propertyName))) :
-                new FieldExpression(expression, expression.Type.FindField(propertyName)
-                    ?? throw new ArgumentException($"Declared field with the name '{propertyName}' is not found '{expression.Type}'", nameof(propertyName)));
+        public static MemberExpression PropertyOrField(Expression expression, string memberName) =>
+            expression.Type.FindProperty(memberName) != null
+                ? (MemberExpression)Property(expression, expression.Type.FindProperty(memberName)
+                    ?? throw new ArgumentException($"Declared property with the name '{memberName}' is not found in '{expression.Type}'", nameof(memberName)))
+                : Field(expression, expression.Type.FindField(memberName)
+                    ?? throw new ArgumentException($"Declared field with the name '{memberName}' is not found '{expression.Type}'", nameof(memberName)));

         public static MemberExpression MakeMemberAccess(Expression expression, MemberInfo member)
         {
@@ -402,13 +404,15 @@
             new IndexExpression(array, null, indexes.AsReadOnlyList());

         public static MemberExpression Field(FieldInfo field) =>
-            new FieldExpression(null, field);
+            new FieldExpression(field);

         public static MemberExpression Field(Expression instance, FieldInfo field) =>
-            new FieldExpression(instance, field);
+            instance == null
+                ? new FieldExpression(field)
+                : new InstanceFieldExpression(instance, field);

         public static MemberExpression Field(Expression instance, string fieldName) =>
-            new FieldExpression(instance, instance.Type.FindField(fieldName));
+            Field(instance, instance.Type.FindField(fieldName));

         /// <summary>Creates a UnaryExpression that represents a bitwise complement operation.</summary>
         /// <param name="expression">An Expression to set the Operand property equal to.</param>
@@ -2586,13 +2590,10 @@
     {
         public override ExpressionType NodeType => ExpressionType.MemberAccess;
         public readonly MemberInfo Member;
-        public readonly Expression Expression;
-
-        protected MemberExpression(Expression expression, MemberInfo member)
-        {
-            Expression = expression;
-            Member = member;
-        }
+
+        public virtual Expression Expression => null;
+
+        protected MemberExpression(MemberInfo member) => Member = member;

         public override Expression Accept(ExpressionVisitor visitor) => visitor.VisitMember(this);

@@ -2608,11 +2609,12 @@
         }
     }

-    // todo: @perf specialize to 2 classes - with and without object expression
-    public sealed class PropertyExpression : MemberExpression
+    public class PropertyExpression : MemberExpression
     {
         public override Type Type => PropertyInfo.PropertyType;
         public PropertyInfo PropertyInfo => (PropertyInfo)Member;
+
+        internal PropertyExpression(PropertyInfo property) : base(property) { }

         internal override SysExpr CreateSysExpression(ref LiveCountArray<LightAndSysExpr> exprsConverted) =>
             SysExpr.Property(Expression?.ToExpression(ref exprsConverted), PropertyInfo);
@@ -2626,17 +2628,22 @@
                 .Append(".GetTypeInfo().GetDeclaredProperty(\"").Append(PropertyInfo.Name).Append("\")");
             return sb.Append(')');
         }
-
-        internal PropertyExpression(Expression instance, PropertyInfo property) :
-            base(instance, property)
-        { }
-    }
-
-    // todo: @perf specialize to 2 classes - with and without object expression
-    public sealed class FieldExpression : MemberExpression
+    }
+
+    public sealed class InstancePropertyExpression : PropertyExpression
+    {
+        public override Expression Expression { get; }
+
+        internal InstancePropertyExpression(Expression instance, PropertyInfo property) : base(property) =>
+            Expression = instance;
+    }
+
+    public class FieldExpression : MemberExpression
     {
         public override Type Type => FieldInfo.FieldType;
         public FieldInfo FieldInfo => (FieldInfo)Member;
+
+        internal FieldExpression(FieldInfo field) : base(field) { }

         internal override SysExpr CreateSysExpression(ref LiveCountArray<LightAndSysExpr> exprsConverted) =>
             SysExpr.Field(Expression?.ToExpression(ref exprsConverted), FieldInfo);
@@ -2651,8 +2658,14 @@
             return sb.Append(')');
         }

-        internal FieldExpression(Expression instance, FieldInfo field)
-            : base(instance, field) { }
+    }
+
+    public sealed class InstanceFieldExpression : FieldExpression
+    {
+        public override Expression Expression { get; }
+
+        internal InstanceFieldExpression(Expression instance, FieldInfo field) : base(field) =>
+            Expression = instance;
     }

     public abstract class MemberBinding


UpdateSelectableSongs raises the event

UpdateSelectableSongs raises the event

--- Espera/Espera.View/ViewModels/LocalViewModel.cs
+++ Espera/Espera.View/ViewModels/LocalViewModel.cs
@@ -101,7 +101,6 @@
                         this.Library.RemoveFromLibrary(this.SelectedSongs.Select(song => song.Model));

                         this.UpdateSelectableSongs();
-                        this.RaisePropertyChanged(x => x.Artists);
                     },
                     param => this.SelectedSongs != null
                         && this.SelectedSongs.Any()


Yay for parallelization

Yay for parallelization

--- Espera/Espera.View/ViewModels/LocalViewModel.cs
+++ Espera/Espera.View/ViewModels/LocalViewModel.cs
@@ -142,10 +142,11 @@
         private void UpdateArtists()
         {
             List<ArtistViewModel> artistInfos = this.SelectableSongs
+                .AsParallel()
                 .GroupBy(song => song.Artist)
                 .Select(group =>
                     new ArtistViewModel(group.Key, group.Select(song => song.Album).Distinct().Count(), group.Count()))
-                .Concat(new[] { this.allArtistsViewModel })
+                .Concat(new[] { this.allArtistsViewModel }.AsParallel())
                 .ToList();

             List<ArtistViewModel> artistsToRemove = this.artists
@@ -189,6 +190,7 @@
             IEnumerable<Song> filtered = this.Library.Songs.FilterSongs(this.SearchText).ToList();

             this.SelectableSongs = filtered
+                .AsParallel()
                 .Where(song => this.SelectedArtist.IsAllArtists || song.Artist == this.SelectedArtist.Name)
                 .Select(song => new LocalSongViewModel(song))
                 .OrderBy(this.SongOrderFunc)


fix bug

fix bug

--- src/Foundatio.Repositories/Migration/MigrationManager.cs
+++ src/Foundatio.Repositories/Migration/MigrationManager.cs
@@ -4,12 +4,10 @@
 using System.Linq;
 using System.Reflection;
 using System.Threading.Tasks;
-using Foundatio.Logging;
 using Foundatio.Repositories.Extensions;
 using Foundatio.Utility;
 using Microsoft.Extensions.Logging;
 using Microsoft.Extensions.Logging.Abstractions;
-using ILogger = Microsoft.Build.Framework.ILogger;

 namespace Foundatio.Repositories.Migrations {
     public class MigrationManager {


New tests for intersections.

New tests for intersections.

--- ExRam.Gremlinq.Tests/GroovySerializationTest.cs
+++ ExRam.Gremlinq.Tests/GroovySerializationTest.cs
@@ -245,6 +245,50 @@
         }

         [Fact]
+        public void Where_array_intersects_property_aray()
+        {
+            g
+                .V<User>()
+                .Where(t => new[] { "+4912345", "+4923456" }.Intersect(t.PhoneNumbers).Any())
+                .Should()
+                .SerializeToGroovy("g.V().hasLabel(_a).has(_b, P.within(_c, _d))")
+                .WithParameters("User", "PhoneNumbers", "+4912345", "+4923456");
+        }
+
+        [Fact]
+        public void Where_array_does_not_intersect_property_array()
+        {
+            g
+                .V<User>()
+                .Where(t => !new[] { "+4912345", "+4923456" }.Intersect(t.PhoneNumbers).Any())
+                .Should()
+                .SerializeToGroovy("g.V().hasLabel(_a).not(__.has(_b, P.within(_c, _d)))")
+                .WithParameters("User", "PhoneNumbers", "+4912345", "+4923456");
+        }
+
+        [Fact]
+        public void Where_empty_array_intersects_property_array()
+        {
+            g
+                .V<User>()
+                .Where(t => new string[0].Intersect(t.PhoneNumbers).Any())
+                .Should()
+                .SerializeToGroovy("g.V().hasLabel(_a).has(_b, P.within())")
+                .WithParameters("User", "PhoneNumbers");
+        }
+
+        [Fact]
+        public void Where_empty_array_does_not_intersect_property_array()
+        {
+            g
+                .V<User>()
+                .Where(t => !new string[0].Intersect(t.PhoneNumbers).Any())
+                .Should()
+                .SerializeToGroovy("g.V().hasLabel(_a)")
+                .WithParameters("User");
+        }
+
+        [Fact]
         public void Where_property_is_contained_in_array()
         {
             g


add RT settings

add RT settings

--- src/IdentityServer4/host/Configuration/ClientsConsole.cs
+++ src/IdentityServer4/host/Configuration/ClientsConsole.cs
@@ -116,7 +116,12 @@
                         "custom.profile",
                         "resource1.scope1",
                         "resource2.scope1"
-                    }
+                    },
+
+                    RefreshTokenUsage = TokenUsage.ReUse,
+                    AbsoluteRefreshTokenLifetime = 3600*24,
+                    SlidingRefreshTokenLifetime = 10,
+                    RefreshTokenExpiration = TokenExpiration.Sliding
                 },

                 ///////////////////////////////////////////


followup

followup

--- src/Kephas.Messaging/Distributed/DefaultMessageBroker.cs
+++ src/Kephas.Messaging/Distributed/DefaultMessageBroker.cs
@@ -89,7 +89,7 @@
                             .FormatWith(brokeredMessage, nameof(DispatchingContextExtensions.ReplyTo)));
                 }

-                if (!(brokeredMessage.Recipients?.Any() ?? false) && !(brokeredMessage.Content is IEvent))
+                if (!(brokeredMessage.Recipients?.Any() ?? false) && !(brokeredMessage.Content is IEvent || brokeredMessage.IsOneWay))
                 {
                     throw new ArgumentException(
                         Strings.BrokeredMessage_RecipientRequired_Exception.FormatWith(brokeredMessage),


Tweak Theme

Tweak Theme

* 根据用户反馈调整浅色主题血条配色

--- ElectronicObserver/Utility/Configuration.cs
+++ ElectronicObserver/Utility/Configuration.cs
@@ -312,15 +312,15 @@
 					new List<SerializableColor>() { // SolarizedLight
 						SerializableColor.UIntToColor( 0xFFc71015 ), // Red
 						SerializableColor.UIntToColor( 0xFFc71015 ), // Red
-						SerializableColor.UIntToColor( 0xFFc94800 ), // Orange
-						SerializableColor.UIntToColor( 0xFFc94800 ), // Orange
-						SerializableColor.UIntToColor( 0xFFd68d00 ), // Yellow
-						SerializableColor.UIntToColor( 0xFFd68d00 ), // Yellow
+						SerializableColor.UIntToColor( 0xFFFF8800 ), // MEDIUM DAMAGED
+						SerializableColor.UIntToColor( 0xFFFF8800 ), // MEDIUM DAMAGED
+						SerializableColor.UIntToColor( 0xFFFFBF00 ), // LITTLE DAMAGED
+						SerializableColor.UIntToColor( 0xFFFFBF00 ), // LITTLE DAMAGED
 						SerializableColor.UIntToColor( 0xFF469046 ), // Green
 						SerializableColor.UIntToColor( 0xFF469046 ), // Green
 						SerializableColor.UIntToColor( 0xFF268BD2 ), // SolarizedBlue
 						SerializableColor.UIntToColor( 0xFFa3c8a3 ), // Lighter Green
-						SerializableColor.UIntToColor( 0xFFe3888a ), // Lighter Red
+						SerializableColor.UIntToColor( 0xFFFFD2D2 ), // DAMAGE RECEIVED
 						SerializableColor.UIntToColor( 0xFFEEE8D5 ), // SolarizedBase2
 					},
 					new List<SerializableColor>() {


Auto registering non-generic implementations

--- src/Lemonade.Web/Infrastructure/LemonadeBooststrapper.cs
+++ src/Lemonade.Web/Infrastructure/LemonadeBooststrapper.cs
@@ -39,7 +39,8 @@
             container
                 .InstallGenerics(typeof(IQueryHandler<,>))
                 .InstallGenerics(typeof(IDomainEventHandler<>))
-                .InstallGenerics(typeof(ICommandHandler<>));
+                .InstallGenerics(typeof(ICommandHandler<>))
+                .AutoRegister();
         }

         protected virtual void ConfigureDependencies(TinyIoCContainer container)


Add notification in HomeController

Add notification in HomeController

--- AstroPhotoGallery/AstroPhotoGallery/Controllers/HomeController.cs
+++ AstroPhotoGallery/AstroPhotoGallery/Controllers/HomeController.cs
@@ -61,6 +61,11 @@
                         .Where(c => c.Name.ToLower()
                         .Contains(searchString.ToLower()))
                         .ToList();
+
+                    if (categories.Count == 0)
+                    {
+                        this.AddNotification("No categories containing this string were found.", NotificationType.WARNING);
+                    }
                 }

                 int pageSize = 6;


Improve documentation

Improve documentation

--- AudioAlign/AudioAlign.Audio/Matching/Wang2003/FingerprintStore.cs
+++ AudioAlign/AudioAlign.Audio/Matching/Wang2003/FingerprintStore.cs
@@ -49,40 +49,43 @@
                 }

                 int hashListIndex = 0;
-                int hashListIndexCount = 0;
-                int frame;
                 SubFingerprint hash;
+
+                // Iterate through the sequence of input hashes and add them to the store (in batches of the same frame index)
                 while (e.SubFingerprints.Count > hashListIndex) {
-                    int indexIndex = store[e.AudioTrack].hashes.Count;
-                    frame = e.SubFingerprints[hashListIndex].Index;
-                    hashListIndexCount = 0;
-                    while (e.SubFingerprints.Count > hashListIndex + hashListIndexCount
-                        && (hash = e.SubFingerprints[hashListIndex + hashListIndexCount]).Index == frame) {
+                    int storeHashIndex = store[e.AudioTrack].hashes.Count;
+                    int storeIndex = e.SubFingerprints[hashListIndex].Index;
+                    int hashCount = 0;
+
+                    // Count all sequential input hashes with the same frame index (i.e. batch) and add them to the store
+                    while (e.SubFingerprints.Count > hashListIndex + hashCount
+                        && (hash = e.SubFingerprints[hashListIndex + hashCount]).Index == storeIndex) {
                         // Insert hash into the sequential store
                         store[e.AudioTrack].hashes.Add(hash.Hash);

                         // Insert a track/index lookup entry for the fingerprint hash
                         collisionMap.Add(hash.Hash, new SubFingerprintLookupEntry(e.AudioTrack, hash.Index));

-                        hashListIndexCount++;
+                        hashCount++;
                     }

-                    if (hashListIndexCount > 0) {
-                        int frameIndex = (int)frame;
+                    // Add an index entry which tells where a hash with a specific frame index can be found in the store
+                    if (hashCount > 0) {
                         TrackStore.IndexEntry ie;
-                        if (store[e.AudioTrack].index.ContainsKey(frameIndex)) {
-                            ie = store[e.AudioTrack].index[frameIndex];
-                            ie.length += hashListIndexCount;
-                            store[e.AudioTrack].index.Remove(frameIndex);
-                        }
-                        else {
-                            ie = new TrackStore.IndexEntry(indexIndex, hashListIndexCount);
+                        // If there is already an entry for the frame index, take it and update its length, ...
+                        if (store[e.AudioTrack].index.ContainsKey(storeIndex)) {
+                            ie = store[e.AudioTrack].index[storeIndex];
+                            ie.length += hashCount;
+                            store[e.AudioTrack].index.Remove(storeIndex);
+                        }
+                        else { // ... else create a new entry
+                            ie = new TrackStore.IndexEntry(storeHashIndex, hashCount);
                         }
                         // Add the current length of the hash list as start pointer for all hashes belonging to the current index
-                        store[e.AudioTrack].index.Add(frameIndex, ie);
+                        store[e.AudioTrack].index.Add(storeIndex, ie);
                     }

-                    hashListIndex += hashListIndexCount;
+                    hashListIndex += hashCount;
                 }
             }
         }


Thread safe loopback transport

Thread safe loopback transport

Former-commit-id: e2d48c08f9b389df0ceddf33a11d4f19bac78a9c

--- src/MassTransit/Transports/Loopback/LoopbackTransport.cs
+++ src/MassTransit/Transports/Loopback/LoopbackTransport.cs
@@ -29,7 +29,9 @@
     public class LoopbackTransport :
         IDuplexTransport
     {
-        readonly object _messageLock = new object();
+        readonly object _messageReadLock = new object();
+        readonly object _messageWriteLock = new object();
+        readonly TimeSpan _deadlockTimeout = new TimeSpan(0, 1, 0);
         bool _disposed;
         AutoResetEvent _messageReady = new AutoResetEvent(false);
         LinkedList<LoopbackMessage> _messages = new LinkedList<LoopbackMessage>();
@@ -44,11 +46,18 @@
             get
             {
                 int messageCount;
-                lock (_messageLock)
+                if (!Monitor.TryEnter(_messageReadLock, _deadlockTimeout))
+                    throw new Exception("Deadlock detected!");
+
+                try
                 {
                     GuardAgainstDisposed();

                     messageCount = _messages.Count;
+                }
+                finally
+                {
+                    Monitor.Exit(_messageReadLock);
                 }

                 return messageCount;
@@ -85,11 +94,18 @@
                 message.ContentType = context.ContentType;
                 message.OriginalMessageId = context.OriginalMessageId;

-                lock (_messageLock)
+                if (!Monitor.TryEnter(_messageWriteLock, _deadlockTimeout))
+                    throw new Exception("Deadlock detected!");
+
+                try
                 {
                     GuardAgainstDisposed();

                     _messages.AddLast(message);
+                }
+                finally
+                {
+                    Monitor.Exit(_messageWriteLock);
                 }

                 Address.LogSent(message.MessageId, context.MessageType);
@@ -120,7 +136,7 @@
             }

             bool monitorExitNeeded = true;
-            if (!Monitor.TryEnter(_messageLock, timeout))
+            if (!Monitor.TryEnter(_messageReadLock, timeout))
                 return;

             try
@@ -134,7 +150,17 @@
                         LoopbackMessage message = iterator.Value;
                         if (message.ExpirationTime.HasValue && message.ExpirationTime <= DateTime.UtcNow)
                         {
-                            _messages.Remove(iterator);
+                            if (!Monitor.TryEnter(_messageWriteLock, _deadlockTimeout))
+                                throw new Exception("Deadlock detected!");
+
+                            try
+                            {
+                                _messages.Remove(iterator);
+                            }
+                            finally
+                            {
+                                Monitor.Exit(_messageWriteLock);
+                            }
                             return;
                         }

@@ -149,11 +175,21 @@
                         if (receive == null)
                             continue;

-                        _messages.Remove(iterator);
+                        if (!Monitor.TryEnter(_messageWriteLock, _deadlockTimeout))
+                            throw new Exception("Deadlock detected!");
+
+                        try
+                        {
+                            _messages.Remove(iterator);
+                        }
+                        finally
+                        {
+                            Monitor.Exit(_messageWriteLock);
+                        }

                         using (message)
                         {
-                            Monitor.Exit(_messageLock);
+                            Monitor.Exit(_messageReadLock);
                             monitorExitNeeded = false;

                             receive(context);
@@ -166,12 +202,13 @@
                     return;

                 // we read to the end and none were accepted, so we are going to wait until we get another in the queue
+                // make any other potential readers wait as well
                 _messageReady.WaitOne(timeout, true);
             }
             finally
             {
                 if (monitorExitNeeded)
-                    Monitor.Exit(_messageLock);
+                    Monitor.Exit(_messageReadLock);
             }
         }

@@ -193,11 +230,14 @@
                 return;
             if (disposing)
             {
-                lock (_messageLock)
-                {
-                    _messages.Each(x => x.Dispose());
-                    _messages.Clear();
-                    _messages = null;
+                lock (_messageReadLock)
+                {
+                    lock (_messageWriteLock)
+                    {
+                        _messages.Each(x => x.Dispose());
+                        _messages.Clear();
+                        _messages = null;
+                    }
                 }

                 _messageReady.Close();


.BOT goes to the chest. Need to open it.

--- FEZ.Speedrun.mm/FezGame/Speedrun/BOT/BOT.cs
+++ FEZ.Speedrun.mm/FezGame/Speedrun/BOT/BOT.cs
@@ -156,10 +156,10 @@
                 if (villageLandedTime == 6) {
                     CodeInput.Left.Hold();
                     if (TAS.PlayerManager.Position.X <= 17.2f && Delta(villageTime, villageChestCanJumpToDeath) <= 0d) {
-                        if (TAS.PlayerManager.Animation.Timing.Ended) {
-                            //TODO which animation?
+//                        if (TAS.PlayerManager.Animation.Timing.Ended) {
+//                            //TODO which animation?
                             villageChestCanJumpToDeath = villageTime;
-                        }
+//                        }
                         return;
                     }
                     //wait until jumping to death (store respawn information)
@@ -170,8 +170,8 @@
                     }
                     //FakeInputHelper.Hold left and jump frame-perfectly
                     if (villageChestJumpedToDeath && TAS.PlayerManager.LastAction == ActionType.FreeFalling) {
-                        CodeInput.Jump.Press();
-                        return;
+                        CodeInput.Jump.Hold(0.14d);
+						return;
                     }
                 }


Establish the first connection before doing the rest in parallel (#3165)

--- src/Microsoft.VisualStudio.Services.Agent/AgentServer.cs
+++ src/Microsoft.VisualStudio.Services.Agent/AgentServer.cs
@@ -69,14 +69,17 @@
         public async Task ConnectAsync(Uri serverUrl, VssCredentials credentials)
         {

-            // Perf: Kick off these 3 outbound calls in parallel and wait for all of them to finish.
-            Task<VssConnection> task1 = EstablishVssConnection(serverUrl, credentials, TimeSpan.FromSeconds(60));
+            // Establish the first connection before doing the rest in parallel to eliminate the redundant 401s.
+            // issue: https://github.com/microsoft/azure-pipelines-agent/issues/3149
+            Task<VssConnection> task1 = EstablishVssConnection(serverUrl, credentials, TimeSpan.FromSeconds(100));
+
+            _genericConnection = await task1;
+
             Task<VssConnection> task2 = EstablishVssConnection(serverUrl, credentials, TimeSpan.FromSeconds(60));
             Task<VssConnection> task3 = EstablishVssConnection(serverUrl, credentials, TimeSpan.FromSeconds(60));

-            await Task.WhenAll(task1, task2, task3);
-
-            _genericConnection = task1.Result;
+            await Task.WhenAll(task2, task3);
+
             _messageConnection = task2.Result;
             _requestConnection = task3.Result;


Branch post processing updated

Branch post processing updated

--- BranchUnityTestBed/Assets/Branch/Editor/BranchPostProcessBuild.cs
+++ BranchUnityTestBed/Assets/Branch/Editor/BranchPostProcessBuild.cs
@@ -7,7 +7,7 @@

 public class BranchPostProcessBuild {

-	[PostProcessBuild(100)]
+	[PostProcessBuild(900)]
 	public static void ChangeBranchBuiltProject(BuildTarget buildTarget, string pathToBuiltProject) {
 		if ( buildTarget == BuildTarget.iOS ) {
 			ChangeXcodePlist(pathToBuiltProject);
@@ -27,14 +27,14 @@
 		PlistElementDict  urlTypesItems = null;
 		PlistElementArray urlSchemesArray = null;

-		if (!rootDict.values.ContainsKey("URL types")) {
-			urlTypesArray = rootDict.CreateArray("URL types");
+		if (!rootDict.values.ContainsKey("CFBundleURLTypes")) {
+			urlTypesArray = rootDict.CreateArray("CFBundleURLTypes");
 		}
 		else {
-			urlTypesArray = rootDict.values["URL types"].AsArray();
+			urlTypesArray = rootDict.values["CFBundleURLTypes"].AsArray();

 			if (urlTypesArray == null) {
-				urlTypesArray = rootDict.CreateArray("URL types");
+				urlTypesArray = rootDict.CreateArray("CFBundleURLTypes");
 			}
 		}

@@ -49,14 +49,14 @@
 			}
 		}

-		if (!urlTypesItems.values.ContainsKey("URL Schemes")) {
-			urlSchemesArray = urlTypesItems.CreateArray("URL Schemes");
+		if (!urlTypesItems.values.ContainsKey("CFBundleURLSchemes")) {
+			urlSchemesArray = urlTypesItems.CreateArray("CFBundleURLSchemes");
 		}
 		else {
-			urlSchemesArray = urlTypesItems.values["URL Schemes"].AsArray();
+			urlSchemesArray = urlTypesItems.values["CFBundleURLSchemes"].AsArray();

 			if (urlSchemesArray == null) {
-				urlSchemesArray = urlTypesItems.CreateArray("URL Schemes");
+				urlSchemesArray = urlTypesItems.CreateArray("CFBundleURLSchemes");
 			}
 		}


Missing image converters.

Missing image converters.

--- Code/Core/Revenj.Serialization/Json/Converters/BinaryConverter.cs
+++ Code/Core/Revenj.Serialization/Json/Converters/BinaryConverter.cs
@@ -260,5 +260,30 @@
 		{
 			JsonSerialization.DeserializeNullableCollection(sr, nextToken, next => DeserializeStream(sr, buffer, next), res);
 		}
+
+		public static Image DeserializeImage(TextReader sr, char[] buffer, int nextToken)
+		{
+			return Image.FromStream(DeserializeStream(sr, buffer, nextToken));
+		}
+
+		public static List<Image> DeserializeImageCollection(TextReader sr, char[] buffer, int nextToken)
+		{
+			return JsonSerialization.DeserializeCollection(sr, nextToken, next => DeserializeImage(sr, buffer, next));
+		}
+
+		public static void DeserializeImageCollection(TextReader sr, char[] buffer, int nextToken, ICollection<Image> res)
+		{
+			JsonSerialization.DeserializeCollection(sr, nextToken, next => DeserializeImage(sr, buffer, next), res);
+		}
+
+		public static List<Image> DeserializeImageNullableCollection(TextReader sr, char[] buffer, int nextToken)
+		{
+			return JsonSerialization.DeserializeNullableCollection(sr, nextToken, next => DeserializeImage(sr, buffer, next));
+		}
+
+		public static void DeserializeImageNullableCollection(TextReader sr, char[] buffer, int nextToken, ICollection<Image> res)
+		{
+			JsonSerialization.DeserializeNullableCollection(sr, nextToken, next => DeserializeImage(sr, buffer, next), res);
+		}
 	}
 }


NH-2127 - OutputParamReturningDelegate.ExecuteAndExtract converts return value to correct type

--- src/NHibernate/Id/Insert/OutputParamReturningDelegate.cs
+++ src/NHibernate/Id/Insert/OutputParamReturningDelegate.cs
@@ -1,3 +1,4 @@
+using System;
 using System.Data;
 using NHibernate.Dialect;
 using NHibernate.Engine;
@@ -61,7 +62,7 @@
 		public override object ExecuteAndExtract(IDbCommand insert, ISessionImplementor session)
 		{
 			session.Batcher.ExecuteNonQuery(insert);
-			return ((IDbDataParameter)insert.Parameters[driveGeneratedParamName]).Value;
+			return Convert.ChangeType(((IDbDataParameter) insert.Parameters[driveGeneratedParamName]).Value, Persister.IdentifierType.ReturnedClass);
 		}

 		#endregion


Allow customizing 'alias to bean' property not found behavior (#2287)

--- src/NHibernate/Transform/AliasToBeanResultTransformer.cs
+++ src/NHibernate/Transform/AliasToBeanResultTransformer.cs
@@ -109,6 +109,11 @@
 			return collection;
 		}

+		protected virtual void OnPropertyNotFound(string propertyName)
+		{
+			throw new PropertyNotFoundException(_resultClass.GetType(), propertyName, "setter");
+		}
+
 		#region Setter resolution

 		/// <summary>
@@ -136,7 +141,7 @@
 			if (TrySet(alias, value, resultObj, _fieldsByNameCaseInsensitive))
 				return;

-			throw new PropertyNotFoundException(resultObj.GetType(), alias, "setter");
+			OnPropertyNotFound(alias);
 		}

 		private bool TrySet(string alias, object value, object resultObj, Dictionary<string, NamedMember<FieldInfo>> fieldsMap)


woopsie

woopsie

--- src/NadekoBot/Modules/Searches/Commands/PlaceCommands.cs
+++ src/NadekoBot/Modules/Searches/Commands/PlaceCommands.cs
@@ -62,9 +62,6 @@
                     case PlaceType.Beard:
                         url = "http://placebeard.it";
                         break;
-                    case PlaceType.Img:
-                        url = "https://placeimg.com";
-                        break;
                     case PlaceType.Fill:
                         url = "http://www.fillmurray.com";
                         break;


[Core] - Fixed an issue with logging where a string with {something} in it would break even if no parameters were specified for the print message.

--- Gorgon/Gorgon.Core/Diagnostics/GorgonLog.cs
+++ Gorgon/Gorgon.Core/Diagnostics/GorgonLog.cs
@@ -370,7 +370,13 @@

                 foreach (string line in formattedLines)
                 {
-                    lines.Add($"[{DateTime.Now.ToShortDateString()} {DateTime.Now.ToShortTimeString()}] {string.Format(line, arguments)}");
+                    string lineToPrint = line;
+                    if ((arguments is not null) && (arguments.Length > 0))
+                    {
+                        lineToPrint = string.Format(line, arguments);
+                    }
+
+                    lines.Add($"[{DateTime.Now.ToShortDateString()} {DateTime.Now.ToShortTimeString()}] {lineToPrint}");
                 }
             }


removes blank lines from samples

removes blank lines from samples

--- bigquery/api/BigquerySample/Snippets.cs
+++ bigquery/api/BigquerySample/Snippets.cs
@@ -17,24 +17,18 @@
         {
             // [START bigquery_load_table_gcs_json]
             var gcsURI = "gs://cloud-samples-data/bigquery/us-states/us-states.json";
-
             var dataset = client.GetDataset(datasetId);
-
             var schema = new TableSchemaBuilder {
                 { "name", BigQueryDbType.String },
                 { "post_abbr", BigQueryDbType.String }
             }.Build();
-
             var jobOptions = new CreateLoadJobOptions()
             {
                 SourceFormat = FileFormat.NewlineDelimitedJson
             };
-
             var loadJob = client.CreateLoadJob(gcsURI, dataset.GetTableReference(tableId),
                 schema, jobOptions);
-
             loadJob.PollUntilCompleted();
-
             // [END bigquery_load_table_gcs_json]
         }

@@ -49,26 +43,20 @@
         {
             // [START bigquery_load_table_gcs_csv]
             var gcsURI = "gs://cloud-samples-data/bigquery/us-states/us-states.csv";
-
             var dataset = client.GetDataset(datasetId);
-
             var schema = new TableSchemaBuilder {
                 { "name", BigQueryDbType.String },
                 { "post_abbr", BigQueryDbType.String }
             }.Build();
-
             var jobOptions = new CreateLoadJobOptions()
             {
                 // The source format defaults to CSV; line below is optional.
                 SourceFormat = FileFormat.Csv,
                 SkipLeadingRows = 1
             };
-
             var loadJob = client.CreateLoadJob(gcsURI, dataset.GetTableReference(tableId),
                 schema, jobOptions);
-
             loadJob.PollUntilCompleted();
-
             // [END bigquery_load_table_gcs_csv]
         }

@@ -83,21 +71,16 @@
         {
             // [START bigquery_load_table_gcs_orc]
             var gcsURI = "gs://cloud-samples-data/bigquery/us-states/us-states.orc";
-
             var dataset = client.GetDataset(datasetId);
-
             var jobOptions = new CreateLoadJobOptions()
             {
                 SourceFormat = FileFormat.Orc
             };
-
             // Pass null as the schema because the schema is inferred when
             // loading Orc data
             var loadJob = client.CreateLoadJob(gcsURI, dataset.GetTableReference(tableId),
                 null, jobOptions);
-
             loadJob.PollUntilCompleted();
-
             // [END bigquery_load_table_gcs_orc]
         }

@@ -112,22 +95,17 @@
         {
             // [START bigquery_load_table_gcs_orc_truncate]
             var gcsURI = "gs://cloud-samples-data/bigquery/us-states/us-states.orc";
-
             var dataset = client.GetDataset(datasetId);
-
             var jobOptions = new CreateLoadJobOptions()
             {
                 SourceFormat = FileFormat.Orc,
                 WriteDisposition = WriteDisposition.WriteTruncate
             };
-
             // Pass null as the schema because the schema is inferred when
             // loading Orc data
             var loadJob = client.CreateLoadJob(gcsURI, dataset.GetTableReference(tableId),
                 null, jobOptions);
-
             loadJob.PollUntilCompleted();
-
             // [END bigquery_load_table_gcs_orc_truncate]
         }
     }


removed ,

removed ,

--- Collector.Common.Infrastructure.WebApi/Properties/AssemblyInfo.cs
+++ Collector.Common.Infrastructure.WebApi/Properties/AssemblyInfo.cs
@@ -11,7 +11,7 @@
 // set of attributes. Change these attribute values to modify the information
 // associated with an assembly.
 [assembly: AssemblyTitle("Collector.Common.Infrastructure.WebApi")]
-[assembly: AssemblyDescription("WebApi filters, bindings, and utilities, for request response logging, Collector.Common.RestContracts Model binding, Error handling and correlation")]
+[assembly: AssemblyDescription("WebApi filters, bindings, and utilities for request response logging, Collector.Common.RestContracts Model binding, Error handling and correlation")]
 [assembly: AssemblyConfiguration("")]
 [assembly: AssemblyCompany("Collector Bank AB")]
 [assembly: AssemblyProduct("Collector.Common.Infrastructure.WebApi")]


Quick fix on removing the zipped extension, now cuts off ".gz" from the end instead of from anywhere in the string.

--- bio/Source/Framework/Bio/Util/Helper.cs
+++ bio/Source/Framework/Bio/Util/Helper.cs
@@ -303,8 +303,8 @@
 		{
 			if(FileEndsWithZippedExtension(fileName))
 			{
-				fileName = fileName.Replace (ZippedFileExtension, "");
-				return IsFasta (fileName);
+				fileName = fileName.Substring(0,fileName.Length-ZippedFileExtension.Length);
+                return IsFasta (fileName);
 			}
 			return false;
 		}
@@ -318,7 +318,7 @@
 		{
 			if(FileEndsWithZippedExtension(fileName))
 			{
-				fileName = fileName.Replace (ZippedFileExtension, "");
+                fileName = fileName.Substring(0, fileName.Length - ZippedFileExtension.Length);
 				return IsFastQ(fileName);
 			}
 			return false;


Make weight nullable rather than using weird negative defaults

--- osu.Game/Overlays/Profile/Sections/Ranks/DrawableScore.cs
+++ osu.Game/Overlays/Profile/Sections/Ranks/DrawableScore.cs
@@ -27,9 +27,9 @@
         private readonly FillFlowContainer metadata;
         private readonly ModContainer modContainer;
         private readonly Score score;
-        private readonly double weight;
+        private readonly double? weight;

-        public DrawableScore(Score score, double weight = -1)
+        public DrawableScore(Score score, double? weight = null)
         {
             this.score = score;
             this.weight = weight;
@@ -72,7 +72,7 @@
                     Anchor = Anchor.CentreRight,
                     Origin = Anchor.CentreRight,
                     Width = 60,
-                    Margin = new MarginPadding{ Right = 150 }
+                    Margin = new MarginPadding { Right = 150 }
                 }
             };
         }
@@ -88,11 +88,12 @@
                 TextSize = 18,
                 Font = "Exo2.0-BoldItalic",
             });
-            if (weight != -1)
+
+            if (weight.HasValue)
             {
                 stats.Add(new OsuSpriteText
                 {
-                    Text = $"weighted: {Math.Round(score.PP * weight ?? 0)}pp ({weight.ToString("0%", CultureInfo.CurrentCulture)})",
+                    Text = $"weighted: {Math.Round(score.PP * weight ?? 0)}pp ({weight.Value.ToString("0%", CultureInfo.CurrentCulture)})",
                     Anchor = Anchor.TopRight,
                     Origin = Anchor.TopRight,
                     Colour = colour.GrayA,
@@ -100,6 +101,7 @@
                     Font = "Exo2.0-RegularItalic",
                 });
             }
+
             stats.Add(new OsuSpriteText
             {
                 Text = "accuracy: " + score.Accuracy.ToString("0.00%"),
@@ -121,7 +123,10 @@
                     {
                         new OsuSpriteText
                         {
-                            Current = locale.GetUnicodePreference($"{score.Beatmap.Metadata.TitleUnicode ?? score.Beatmap.Metadata.Title} [{score.Beatmap.Version}] ", $"{score.Beatmap.Metadata.Title ?? score.Beatmap.Metadata.TitleUnicode} [{score.Beatmap.Version}] "),
+                            Current = locale.GetUnicodePreference(
+                                $"{score.Beatmap.Metadata.TitleUnicode ?? score.Beatmap.Metadata.Title} [{score.Beatmap.Version}] ",
+                                $"{score.Beatmap.Metadata.Title ?? score.Beatmap.Metadata.TitleUnicode} [{score.Beatmap.Version}] "
+                            ),
                             TextSize = 15,
                             Font = "Exo2.0-SemiBoldItalic",
                         },
@@ -156,7 +161,8 @@

         private class ModIcon : Rulesets.UI.ModIcon, IHasTooltip
         {
-            public ModIcon(Mod mod) : base(mod)
+            public ModIcon(Mod mod)
+                : base(mod)
             {
                 TooltipText = mod.Name;
             }


Fixing possible memory leak

Fixing possible memory leak

--- ReminderService.cs
+++ ReminderService.cs
@@ -4,11 +4,11 @@
 {
     internal class ReminderService
     {
-
+        ReminderWindow reminderWindow = null;
         System.Windows.Forms.Timer myTimer = new System.Windows.Forms.Timer();
         public void showReminder()
         {
-            ReminderWindow reminderWindow = new ReminderWindow();
+            reminderWindow = new ReminderWindow();
             reminderWindow.Show();
         }


Type name in quotes for exception message string.

--- Servant/Servant.cs
+++ Servant/Servant.cs
@@ -200,7 +200,7 @@

             TypeEntry entry;
             if (!_nodeByType.TryGetValue(typeof(T), out entry))
-                throw new ServantException($"Type {typeof(T)} not supported.");
+                throw new ServantException($"Type \"{typeof(T)}\" is not registered.");

             return TaskUtil.Upcast<T>(entry.Provider.GetAsync());
         }


Add a safety check for when Authors is null, which shouldn't happen in the first place. Work items: 1727, 1728

--HG--
branch : 1.6

--- src/DialogServices/PackageManagerUI/Converters/StringCollectionsToStringConverter.cs
+++ src/DialogServices/PackageManagerUI/Converters/StringCollectionsToStringConverter.cs
@@ -4,21 +4,21 @@

 namespace NuGet.Dialog.PackageManagerUI
 {
-
     public class StringCollectionsToStringConverter : IValueConverter
     {
-
         public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
         {
             if (targetType == typeof(string))
             {
-
                 string stringValue = value as string;
                 if (stringValue != null)
                 {
                     return stringValue;
                 }
-                else
+                else if (value == null)
+                {
+                    return String.Empty;
+                }
                 {
                     IEnumerable<string> parts = (IEnumerable<string>)value;
                     return String.Join(", ", parts);


Resolved #747: Default language is not defined problem.

--- src/Abp.Zero/Localization/ApplicationLanguageProvider.cs
+++ src/Abp.Zero/Localization/ApplicationLanguageProvider.cs
@@ -37,21 +37,33 @@
                     .Select(l => l.ToLanguageInfo())
                     .ToList();

-            var defaultLanguage = AsyncHelper.RunSync(() => _applicationLanguageManager.GetDefaultLanguageOrNullAsync(AbpSession.TenantId));
-            if (defaultLanguage != null)
-            {
-                var languageInfo = languageInfos.FirstOrDefault(l => l.Name == defaultLanguage.Name);
-                if (languageInfo != null)
-                {
-                    languageInfo.IsDefault = true;
-                }
-            }
-            else if (languageInfos.Count > 0)
-            {
-                languageInfos[0].IsDefault = true;
-            }
+            SetDefaultLanguage(languageInfos);

             return languageInfos;
         }
+
+        private void SetDefaultLanguage(List<LanguageInfo> languageInfos)
+        {
+            if (languageInfos.Count <= 0)
+            {
+                return;
+            }
+
+            var defaultLanguage = AsyncHelper.RunSync(() => _applicationLanguageManager.GetDefaultLanguageOrNullAsync(AbpSession.TenantId));
+            if (defaultLanguage == null)
+            {
+                languageInfos[0].IsDefault = true;
+                return;
+            }
+
+            var languageInfo = languageInfos.FirstOrDefault(l => l.Name == defaultLanguage.Name);
+            if (languageInfo == null)
+            {
+                languageInfos[0].IsDefault = true;
+                return;
+            }
+
+            languageInfo.IsDefault = true;
+        }
     }
 }


Fix DockerClient.Images.ListImagesAsync(MatchName) does not work

--- src/Akka.Persistence.SqlServer.Tests/SqlServerFixture.cs
+++ src/Akka.Persistence.SqlServer.Tests/SqlServerFixture.cs
@@ -42,34 +42,35 @@
             Client = config.CreateClient();
         }

-        protected string SqlServerImageName
-        {
-            get
-            {
-                if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
-                    return "microsoft/mssql-server-windows-express";
-                return "mcr.microsoft.com/mssql/server";
-            }
-        }
+        protected string ImageName =>
+            RuntimeInformation.IsOSPlatform(OSPlatform.Windows)
+                ? "microsoft/mssql-server-windows-express"
+                : "mcr.microsoft.com/mssql/server";
+        protected string Tag => "2017-latest";

-        protected string SqlServerImageTag
-        {
-            get
-            {
-                if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
-                    return "2017-latest";
-                return "2017-latest-ubuntu";
-            }
-        }
+        protected string SqlServerImageName => $"{ImageName}:{Tag}";

         public string ConnectionString { get; private set; }

         public async Task InitializeAsync()
         {
-            var images = await Client.Images.ListImagesAsync(new ImagesListParameters {MatchName = SqlServerImageName});
+            var images = await Client.Images.ListImagesAsync(new ImagesListParameters
+            {
+                Filters = new Dictionary<string, IDictionary<string, bool>>
+                {
+                    {
+                        "reference",
+                        new Dictionary<string, bool>
+                        {
+                            {SqlServerImageName, true}
+                        }
+                    }
+                }
+            });
+
             if (images.Count == 0)
                 await Client.Images.CreateImageAsync(
-                    new ImagesCreateParameters {FromImage = SqlServerImageName, Tag = "latest"}, null,
+                    new ImagesCreateParameters {FromImage = ImageName, Tag = Tag}, null,
                     new Progress<JSONMessage>(message =>
                     {
                         Console.WriteLine(!string.IsNullOrEmpty(message.ErrorMessage)


Added support for right-click, view in explorer for entities.


Seed products

Seed products

--- CountryFoodSubscribe/CountryFood.Data/Migrations/Configuration.cs
+++ CountryFoodSubscribe/CountryFood.Data/Migrations/Configuration.cs
@@ -44,6 +44,11 @@
                 this.SeedProducers(context);
             }

+            if (context.Products.Count() == 0)
+            {
+                this.SeedProducts(context);
+            }
+
             base.Seed(context);
         }

@@ -186,5 +191,45 @@
                 context.Producers.Add(producer);
             }
         }
+
+        private void SeedProducts(ApplicationDbContext context)
+        {
+            var milkCategory = context.Categories.Where(c => c.Name == "Milk").First();
+            var herbsCategory = context.Categories.Where(c => c.Name == "Herbs").First();
+
+            var producers = context.Producers.Select(p => p.ID).Take(2).ToList();
+            var products = new List<Product>
+            {
+                new Product
+                {
+                    Category = milkCategory,
+                    Name = "Goat cheeze",
+                    ProducerID = producers[0]
+                },
+                new Product
+                {
+                    Category = herbsCategory,
+                    Name = "Basil",
+                    ProducerID = producers[0]
+                },
+                new Product
+                {
+                    Category = milkCategory,
+                    Name = "Yogurt",
+                    ProducerID = producers[1]
+                },
+                new Product
+                {
+                    Category = herbsCategory,
+                    Name = "Mint",
+                    ProducerID = producers[1]
+                },
+            };
+
+            foreach (var product in products)
+            {
+                context.Products.Add(product);
+            }
+        }
     }
 }


stuff

stuff

--- GeometryClassLibrary/Coordinates/Translation.cs
+++ GeometryClassLibrary/Coordinates/Translation.cs
@@ -7,9 +7,9 @@
         #region Constructors

         /// <summary>
-        /// Creates a new zero translation
+        /// Null Constructor
         /// </summary>
-        public Translation() { }
+        protected Translation() { }

         /// <summary>
         /// Creates a Translation with offsets in each direction represented by the point
@@ -27,21 +27,8 @@
         /// <summary>
         /// Creates a translation with the given translation Dimesnions in each direction
         /// </summary>
-        /// <param name="xTranslation">The distance to translate in the X direction</param>
-        /// <param name="yTranslation">The distance to translate in the Y direction</param>
-        /// <param name="zTranslation">The distance to translate in the Z direction</param>
         public Translation(Distance xTranslation, Distance yTranslation, Distance zTranslation)
             : base(xTranslation, yTranslation, zTranslation) { }
-
-        /// <summary>
-        /// Creates a Translation in the given units with the translation distance with each of the given direction
-        /// </summary>
-        /// <param name="passedType">The dimesnions to use for this translation object</param>
-        /// <param name="xTranslation">The unitless distance to translate in the X direction</param>
-        /// <param name="yTranslation">The unitless distance to translate in the Y direction</param>
-        /// <param name="zTranslation">The unitless distance to translate in the Z direction</param>
-        public Translation(DistanceType passedType, double xTranslation, double yTranslation, double zTranslation)
-            : base(passedType, xTranslation, yTranslation, zTranslation) { }

         /// <summary>
         /// Creates a copy of the given translation


Filter types that aren't the ancestor type.

Work Item #1987

--- trunk/Solutions/CslaGenFork/Design/ChildTypeEditor.cs
+++ trunk/Solutions/CslaGenFork/Design/ChildTypeEditor.cs
@@ -46,9 +46,11 @@
                     foreach (var obj in GeneratorController.Current.CurrentUnit.CslaObjects)
                     {
                         var added = false;
+                        var ancestor = obj.FindAncestor();

                         if (((isCollection && obj.ObjectType.IsCollectionType()) ||
                              (!isCollection && !obj.ObjectType.IsCollectionType())) &&
+                            ReferenceEquals(obj, ancestor) &&
                             !objectTree.Contains(obj.ObjectName) &&
                             RelationRulesEngine.IsParentAllowed(currentCslaObject.ObjectType, obj.ObjectType))
                         {
@@ -58,7 +60,7 @@

                         if (added)
                         {
-                            var candidateTree = obj.GetObjectTree();
+                            var candidateTree = ancestor.GetDescendents();
                             foreach (var descendent in candidateTree)
                             {
                                 if (!objectTree.Contains(descendent))
@@ -66,7 +68,7 @@

                                 var position = _lstProperties.Items.IndexOf(obj.ObjectName);
                                 if (position > -1)
-                                    _lstProperties.Items[position] = string.Format("* * * {0} - tree error", obj.ObjectName);
+                                    _lstProperties.Items[position] = string.Format("* * * {0} - tree error",                                         obj.ObjectName);
                             }
                         }
                     }


Fix references.

Fix references.

--- osu.Framework/Configuration/BindableNumber.cs
+++ osu.Framework/Configuration/BindableNumber.cs
@@ -38,12 +38,12 @@
         }

         /// <summary>
-        /// The minimum value of this bindable. <see cref="Value"/> will never go below this value.
+        /// The minimum value of this bindable. <see cref="Bindable{T}.Value"/> will never go below this value.
         /// </summary>
         public T MinValue { get; set; }

         /// <summary>
-        /// The maximim value of this bindable. <see cref="Value"/> will never go above this value.
+        /// The maximim value of this bindable. <see cref="Bindable{T}.Value"/> will never go above this value.
         /// </summary>
         public T MaxValue { get; set; }


Shield - bugfix in Enlist. When multiple commutes degenerated, method would recurse and perform some commutes multiple times.

--- Shielded/Shield.cs
+++ Shielded/Shield.cs
@@ -90,10 +90,14 @@
             // does a commute have to degenerate?
             if (_localItems.Commutes != null && _localItems.Commutes.Count > 0)
             {
-                foreach (var comm in _localItems.Commutes.Where(c => c.Affecting.Contains(item)).ToArray())
-                {
-                    _localItems.Commutes.Remove(comm);
-                    comm.Perform();
+                var commutes = _localItems.Commutes.Where(c => c.Affecting.Contains(item)).ToArray();
+                if (commutes.Length > 0)
+                {
+                    // first remove all, because they will most likely cause enlists and trigger
+                    // each other if not removed.
+                    _localItems.Commutes.RemoveAll(c => c.Affecting.Contains(item));
+                    foreach (var comm in commutes)
+                        comm.Perform();
                 }
             }
         }


DoInitialize

DoInitialize

--- Demos/CSharpGL.Demos/10RaycastVolumeRender/RaycastVolumeRender.cs
+++ Demos/CSharpGL.Demos/10RaycastVolumeRender/RaycastVolumeRender.cs
@@ -14,23 +14,40 @@
     /// </summary>
     class RaycastVolumeRender : RendererBase
     {
+        private Renderer backfaceRenderer;
+        private Renderer raycastRenderer;

-        static ShaderCode[] staticShaderCodes;
-        static PropertyNameMap map;
-        static RaycastVolumeRender()
-        {
-            staticShaderCodes = new ShaderCode[2];
-            staticShaderCodes[0] = new ShaderCode(File.ReadAllText(@"09DummyTextBoxRenderer\TexBox.vert"), ShaderType.VertexShader);
-            staticShaderCodes[1] = new ShaderCode(File.ReadAllText(@"09DummyTextBoxRenderer\TexBox.frag"), ShaderType.FragmentShader);
-            map = new PropertyNameMap();
-            map.Add("position", "position");
-            map.Add("uv", "uv");
-        }
+        private static readonly IBufferable model = new RaycastModel();

         protected override void DoInitialize()
         {
+            InitBackfaceRenderer();

-            throw new NotImplementedException();
+            InitRaycastRenderer();
+
+
+        }
+
+        private void InitRaycastRenderer()
+        {
+            var shaderCodes = new ShaderCode[2];
+            shaderCodes[0] = new ShaderCode(File.ReadAllText(@"10RaycastVolumeRender\raycasting.vert"), ShaderType.VertexShader);
+            shaderCodes[1] = new ShaderCode(File.ReadAllText(@"10RaycastVolumeRender\raycasting.frag"), ShaderType.FragmentShader);
+            var map = new PropertyNameMap();
+            map.Add("position", "position");
+            this.raycastRenderer = new Renderer(model, shaderCodes, map);
+            this.raycastRenderer.Initialize();
+        }
+
+        private void InitBackfaceRenderer()
+        {
+            var shaderCodes = new ShaderCode[2];
+            shaderCodes[0] = new ShaderCode(File.ReadAllText(@"10RaycastVolumeRender\backface.vert"), ShaderType.VertexShader);
+            shaderCodes[1] = new ShaderCode(File.ReadAllText(@"10RaycastVolumeRender\backface.frag"), ShaderType.FragmentShader);
+            var map = new PropertyNameMap();
+            map.Add("position", "position");
+            this.backfaceRenderer = new Renderer(model, shaderCodes, map);
+            this.backfaceRenderer.Initialize();
         }

         protected override void DoRender(RenderEventArgs arg)
@@ -40,101 +57,10 @@

         protected override void DisposeUnmanagedResources()
         {
-            throw new NotImplementedException();
+            this.backfaceRenderer.Dispose();
+            this.raycastRenderer.Dispose();
         }

-        class RaycastModel : IBufferable
-        {
-            public const string strPosition = "position";
-            Dictionary<string, PropertyBufferPtr> propertyBufferPtrDict = new Dictionary<string, PropertyBufferPtr>();
-            // draw the six faces of the boundbox by drawwing triangles
-            // draw it contra-clockwise
-            // front: 1 5 7 3
-            // back:  0 2 6 4
-            // left： 0 1 3 2
-            // right: 7 5 4 6
-            // up:    2 3 7 6
-            // down:  1 0 4 5
-            static readonly float[] vertices =
-            {
-				0.0f, 0.0f, 0.0f,
-				0.0f, 0.0f, 1.0f,
-				0.0f, 1.0f, 0.0f,
-				0.0f, 1.0f, 1.0f,
-				1.0f, 0.0f, 0.0f,
-				1.0f, 0.0f, 1.0f,
-				1.0f, 1.0f, 0.0f,
-				1.0f, 1.0f, 1.0f,
-            };
-            static readonly uint[] indices =
-            {
-				1,5,7,
-				7,3,1,
-				0,2,6,
-				6,4,0,
-				0,1,3,
-				3,2,0,
-				7,5,4,
-				4,6,7,
-				2,3,7,
-				7,6,2,
-				1,0,4,
-				4,5,1,
-            };

-            public PropertyBufferPtr GetProperty(string bufferName, string varNameInShader)
-            {
-                if (bufferName == strPosition)
-                {
-                    if (!propertyBufferPtrDict.ContainsKey(bufferName))
-                    {
-                        using (var buffer = new PropertyBuffer<float>(varNameInShader, 3, OpenGL.GL_FLOAT, BufferUsage.StaticDraw))
-                        {
-                            buffer.Alloc(vertices.Length);
-                            unsafe
-                            {
-                                var array = (float*)buffer.FirstElement();
-                                for (int i = 0; i < vertices.Length; i++)
-                                {
-                                    array[i] = vertices[i];
-                                }
-                            }
-                            propertyBufferPtrDict.Add(bufferName, buffer.GetBufferPtr() as PropertyBufferPtr);
-                        }
-                    }
-                    return propertyBufferPtrDict[bufferName];
-                }
-                else
-                {
-                    return null;
-                }
-            }
-
-            public IndexBufferPtr GetIndex()
-            {
-                if (indexBufferPtr == null)
-                {
-                    using (var buffer = new OneIndexBuffer<uint>(DrawMode.Triangles, BufferUsage.StaticDraw))
-                    {
-                        buffer.Alloc(indices.Length);
-                        unsafe
-                        {
-                            var array = (uint*)buffer.FirstElement();
-                            for (int i = 0; i < indices.Length; i++)
-                            {
-                                array[i] = indices[i];
-                            }
-                        }
-
-                        indexBufferPtr = buffer.GetBufferPtr() as IndexBufferPtr;
-                    }
-                }
-
-                return indexBufferPtr;
-            }
-
-            IndexBufferPtr indexBufferPtr = null;
-
-        }
     }
 }


Refactored an EditStatus usage to WithParty

--- src/CommitmentsV2/SFA.DAS.CommitmentsV2/Models/Cohort.cs
+++ src/CommitmentsV2/SFA.DAS.CommitmentsV2/Models/Cohort.cs
@@ -327,12 +327,12 @@
             UpdatedBy(modifyingParty, userInfo);
             LastUpdatedOn = DateTime.UtcNow;

-            switch (EditStatus)
-            {
-                case EditStatus.EmployerOnly:
+            switch (WithParty)
+            {
+                case Party.Employer:
                     Publish(() => new CohortAssignedToEmployerEvent(Id, now, modifyingParty));
                     break;
-                case EditStatus.ProviderOnly:
+                case Party.Provider:
                     Publish(() => new CohortAssignedToProviderEvent(Id, now));
                     break;
                 default:


Use expression body.

Use expression body.

--- osu.Framework/Graphics/Primitives/Triangle.cs
+++ osu.Framework/Graphics/Primitives/Triangle.cs
@@ -56,13 +56,7 @@
             }
         }

-        public double ConservativeArea
-        {
-            get
-            {
-                return Math.Abs((P0.Y - P1.Y) * (P1.X - P2.X)) / 2;
-            }
-        }
+        public double ConservativeArea => Math.Abs((P0.Y - P1.Y) * (P1.X - P2.X)) / 2;

         public double Area
         {


fix: read 3d texture data

fix: read 3d texture data

--- Demos/CSharpGL.Demos/10RaycastVolumeRender/RaycastVolumeRender.cs
+++ Demos/CSharpGL.Demos/10RaycastVolumeRender/RaycastVolumeRender.cs
@@ -97,18 +97,25 @@
             unsafe
             {
                 int index = 0;
+                int readCount = 0;
                 byte* array = (byte*)data.Header.ToPointer();
                 using (var fs = new FileStream(filename, FileMode.Open, FileAccess.Read))
                 using (var br = new BinaryReader(fs))
                 {
+                    int unReadCount = (int)fs.Length;
                     const int cacheSize = 1024 * 1024;
-                    var cache = new byte[cacheSize];
-                    int count = br.Read(cache, index, cacheSize);
-                    for (int i = 0; i < count; i++)
+                    do
                     {
-                        array[i + index] = cache[i];
-                    }
-                    index += count;
+                        int min = Math.Min(cacheSize, unReadCount);
+                        var cache = new byte[min];
+                        readCount = br.Read(cache, 0, min);
+                        for (int i = 0; i < readCount; i++)
+                        {
+                            array[i + index] = cache[i];
+                        }
+                        index += readCount;
+                        unReadCount -= readCount;
+                    } while (readCount > 0);
                 }
             }


Update BoundsQuadraticBezier.cs

Update BoundsQuadraticBezier.cs

--- src/Core2D/Editor/Bounds/Shapes/BoundsQuadraticBezier.cs
+++ src/Core2D/Editor/Bounds/Shapes/BoundsQuadraticBezier.cs
@@ -14,7 +14,9 @@
         public IPointShape TryToGetPoint(IBaseShape shape, Point2 target, double radius, IDictionary<Type, IBounds> registered)
         {
             if (!(shape is IQuadraticBezierShape quadratic))
+            {
                 throw new ArgumentNullException(nameof(shape));
+            }

             var pointHitTest = registered[typeof(IPointShape)];

@@ -39,7 +41,9 @@
         public bool Contains(IBaseShape shape, Point2 target, double radius, IDictionary<Type, IBounds> registered)
         {
             if (!(shape is IQuadraticBezierShape quadratic))
+            {
                 throw new ArgumentNullException(nameof(shape));
+            }

             return HitTestHelper.Contains(quadratic.GetPoints(), target);
         }
@@ -47,7 +51,9 @@
         public bool Overlaps(IBaseShape shape, Rect2 target, double radius, IDictionary<Type, IBounds> registered)
         {
             if (!(shape is IQuadraticBezierShape quadratic))
+            {
                 throw new ArgumentNullException(nameof(shape));
+            }

             return HitTestHelper.Overlap(quadratic.GetPoints(), target);
         }


Fix incorrect BasicStats padding.

Fix incorrect BasicStats padding.

--- osu.Game/Overlays/OnlineBeatmapSet/Details.cs
+++ osu.Game/Overlays/OnlineBeatmapSet/Details.cs
@@ -55,7 +55,6 @@
                         RelativeSizeAxes = Axes.X,
                         AutoSizeAxes = Axes.Y,
                         Margin = new MarginPadding { Vertical = 10 },
-                        Padding = new MarginPadding { Horizontal = 15 },
                     },
                 },
                 new DetailBox


Inline.

Inline.

--- src/ExRam.Gremlinq.Core/Queries/GremlinQuery.explicit.cs
+++ src/ExRam.Gremlinq.Core/Queries/GremlinQuery.explicit.cs
@@ -258,183 +258,7 @@

         IGremlinQueryEnvironment IGremlinQueryAdmin.Environment => Environment;

-        Traversal IGremlinQueryAdmin.ToTraversal() => ToTraversalImpl();
-
-        Type IGremlinQueryAdmin.ElementType { get => typeof(TElement); }
-
-        IEdgeGremlinQuery<TEdge> IStartGremlinQuery.AddE<TEdge>(TEdge edge) => AddE(edge);
-
-        IValueGremlinQuery<TScalar> IArrayGremlinQueryBase<TScalar>.Unfold() => Unfold<IValueGremlinQuery<TScalar>>();
-
-        IVertexGremlinQuery<TVertex> IStartGremlinQuery.AddV<TVertex>(TVertex vertex) => AddV(vertex);
-
-        IValueGremlinQuery<TNewElement> IStartGremlinQuery.Inject<TNewElement>(params TNewElement[] elements) => Inject(elements);
-
-        IVertexGremlinQuery<object> IStartGremlinQuery.V(params object[] ids) => AddStepWithObjectTypes<object>(new VStep(ids.ToImmutableArray()), QuerySemantics.Vertex);
-
-        IVertexGremlinQuery<TNewVertex> IStartGremlinQuery.ReplaceV<TNewVertex>(TNewVertex vertex) => ((IStartGremlinQuery)this).V<TNewVertex>(vertex!.GetId(Environment)).Update(vertex);
-
-        IEdgeGremlinQuery<TEdge> IStartGremlinQuery.AddE<TEdge>() => AddE(new TEdge());
-
-        IVertexGremlinQuery<TVertex> IStartGremlinQuery.AddV<TVertex>() => AddV(new TVertex());
-
-        IVertexGremlinQuery<TVertex> IStartGremlinQuery.V<TVertex>(params object[] ids) => ((IStartGremlinQuery)this).V(ids).OfType<TVertex>();
-
-        IGremlinQueryEnvironment IGremlinQuerySource.Environment => Environment;
-
-        IEdgeGremlinQuery<object> IGremlinQuerySource.E(params object[] ids) => AddStepWithObjectTypes<object>(new EStep(ids.ToImmutableArray()), QuerySemantics.Edge);
-
-        IEdgeGremlinQuery<TEdge> IGremlinQuerySource.E<TEdge>(params object[] ids) => ((IGremlinQuerySource)this).E(ids).OfType<TEdge>();
-
-        IEdgeGremlinQuery<TNewEdge> IGremlinQuerySource.ReplaceE<TNewEdge>(TNewEdge edge) => ((IGremlinQuerySource)this).E<TNewEdge>(edge!.GetId(Environment)).Update(edge);
-
-        IGremlinQuerySource IConfigurableGremlinQuerySource.ConfigureEnvironment(Func<IGremlinQueryEnvironment, IGremlinQueryEnvironment> transformation) => ConfigureEnvironment(transformation);
-
-        IGremlinQuerySource IGremlinQuerySource.WithoutStrategies(params Type[] strategyTypes) => AddStep(new WithoutStrategiesStep(strategyTypes.ToImmutableArray()));
-
-        IGremlinQuerySource IGremlinQuerySource.WithSideEffect<TSideEffect>(StepLabel<TSideEffect> label, TSideEffect value) => AddStep(new WithSideEffectStep(label, value!));
-
-        IInEdgeGremlinQuery<TElement, TInVertex> IGremlinQueryBaseRec<IInEdgeGremlinQuery<TElement, TInVertex>>.Mute() => Mute();
-
-        IBothEdgeGremlinQuery<TElement, TTargetVertex, TOutVertex> IInOrOutEdgeGremlinQueryBase<TElement, TOutVertex>.From<TTargetVertex>(StepLabel<TTargetVertex> stepLabel) => AddStep<TElement, TTargetVertex, TOutVertex, object, object, object>(new AddEStep.FromLabelStep(stepLabel), QuerySemantics.Edge);
-
-        IBothEdgeGremlinQuery<TElement, TTargetVertex, TOutVertex> IInOrOutEdgeGremlinQueryBase<TElement, TOutVertex>.From<TTargetVertex>(Func<IVertexGremlinQuery<TOutVertex>, IVertexGremlinQueryBase<TTargetVertex>> fromVertexTraversal) => AddStep<TElement, TTargetVertex, TOutVertex, object, object, object>(new AddEStep.FromTraversalStep(Cast<TOutVertex>().Continue(fromVertexTraversal).ToTraversal()), QuerySemantics.Edge);
-
-        IBothEdgeGremlinQuery<TElement, TOutVertex, TTargetVertex> IInOrOutEdgeGremlinQueryBase<TElement, TOutVertex>.To<TTargetVertex>(StepLabel<TTargetVertex> stepLabel) => To<TElement, TOutVertex, TTargetVertex>(stepLabel);
-
-        IBothEdgeGremlinQuery<TElement, TOutVertex, TTargetVertex> IInOrOutEdgeGremlinQueryBase<TElement, TOutVertex>.To<TTargetVertex>(Func<IVertexGremlinQuery<TOutVertex>, IVertexGremlinQueryBase<TTargetVertex>> toVertexTraversal) => AddStep<TElement, TOutVertex, TTargetVertex, object, object, object>(new AddEStep.ToTraversalStep(Cast<TOutVertex>().Continue(toVertexTraversal).ToTraversal()), QuerySemantics.Edge);
-
-        IInOrOutEdgeGremlinQuery<TElement, TOutVertex> IGremlinQueryBaseRec<IInOrOutEdgeGremlinQuery<TElement, TOutVertex>>.Mute() => Mute();
-
-        IOutEdgeGremlinQuery<TElement, TOutVertex> IGremlinQueryBaseRec<IOutEdgeGremlinQuery<TElement, TOutVertex>>.Mute() => Mute();
-
-        IValueGremlinQuery<string> IPropertyGremlinQueryBase<TElement>.Key() => Key();
-
-        IValueGremlinQuery<TValue> IPropertyGremlinQueryBase<TElement>.Value<TValue>() => Value<TValue>();
-
-        IValueGremlinQuery<object> IPropertyGremlinQueryBase<TElement>.Value() => Value<object>();
-
-        IPropertyGremlinQuery<TElement> IGremlinQueryBaseRec<IPropertyGremlinQuery<TElement>>.Mute() => Mute();
-
-        IValueGremlinQuery<TElement> IGremlinQueryBaseRec<IValueGremlinQuery<TElement>>.Mute() => Mute();
-
-        IEdgeOrVertexGremlinQuery<TElement> IVertexGremlinQueryBase<TElement>.Lower() => this;
-
-        IEdgeOrVertexGremlinQuery<object> IVertexGremlinQueryBase.Lower() => Cast<object>();
-
-        IInOrOutEdgeGremlinQuery<TEdge, TElement> IVertexGremlinQueryBase<TElement>.AddE<TEdge>(TEdge edge) => AddE(edge);
-
-        IInOrOutEdgeGremlinQuery<TEdge, TElement> IVertexGremlinQueryBase<TElement>.AddE<TEdge>() => AddE(new TEdge());
-
-        IVertexGremlinQuery<object> IVertexGremlinQueryBase.Both() => AddStepWithObjectTypes<object>(BothStep.NoLabels, QuerySemantics.Vertex);
-
-        IVertexGremlinQuery<object> IVertexGremlinQueryBase.Both<TEdge>() => AddStepWithObjectTypes<object>(new BothStep(Environment.Model.EdgesModel.GetFilterLabelsOrDefault(typeof(TEdge), Environment.Options.GetValue(GremlinqOption.FilterLabelsVerbosity))), QuerySemantics.Vertex);
-
-        IEdgeGremlinQuery<object> IVertexGremlinQueryBase.BothE() => AddStepWithObjectTypes<object>(BothEStep.NoLabels, QuerySemantics.Edge);
-
-        IEdgeGremlinQuery<TEdge> IVertexGremlinQueryBase.BothE<TEdge>() => AddStepWithObjectTypes<TEdge>(new BothEStep(Environment.Model.EdgesModel.GetFilterLabelsOrDefault(typeof(TEdge), Environment.Options.GetValue(GremlinqOption.FilterLabelsVerbosity))), QuerySemantics.Edge);
-
-        IVertexGremlinQuery<object> IVertexGremlinQueryBase.In() => AddStepWithObjectTypes<object>(InStep.Empty, QuerySemantics.Vertex);
-
-        IVertexGremlinQuery<object> IVertexGremlinQueryBase.In<TEdge>() => AddStepWithObjectTypes<object>(new InStep(Environment.Model.EdgesModel.GetFilterLabelsOrDefault(typeof(TEdge), Environment.Options.GetValue(GremlinqOption.FilterLabelsVerbosity))), QuerySemantics.Vertex);
-
-        IEdgeGremlinQuery<object> IVertexGremlinQueryBase.InE() => AddStepWithObjectTypes<object>(InEStep.Empty, QuerySemantics.Edge);
-
-        IEdgeGremlinQuery<TEdge> IVertexGremlinQueryBase.InE<TEdge>() => AddStepWithObjectTypes<TEdge>(new InEStep(Environment.Model.EdgesModel.GetFilterLabelsOrDefault(typeof(TEdge), Environment.Options.GetValue(GremlinqOption.FilterLabelsVerbosity))), QuerySemantics.Edge);
-
-        IInEdgeGremlinQuery<TEdge, TElement> IVertexGremlinQueryBase<TElement>.InE<TEdge>() => AddStep<TEdge, object, TElement, object, object, object>(new InEStep(Environment.Model.EdgesModel.GetFilterLabelsOrDefault(typeof(TEdge), Environment.Options.GetValue(GremlinqOption.FilterLabelsVerbosity))), QuerySemantics.Edge);
-
-        IVertexGremlinQuery<object> IVertexGremlinQueryBase.Out() => AddStepWithObjectTypes<object>(OutStep.Empty, QuerySemantics.Vertex);
-
-        IVertexGremlinQuery<object> IVertexGremlinQueryBase.Out<TEdge>() => AddStepWithObjectTypes<object>(new OutStep(Environment.Model.EdgesModel.GetFilterLabelsOrDefault(typeof(TEdge), Environment.Options.GetValue(GremlinqOption.FilterLabelsVerbosity))), QuerySemantics.Vertex);
-
-        IEdgeGremlinQuery<TEdge> IVertexGremlinQueryBase.OutE<TEdge>() => AddStepWithObjectTypes<TEdge>(new OutEStep(Environment.Model.EdgesModel.GetFilterLabelsOrDefault(typeof(TEdge), Environment.Options.GetValue(GremlinqOption.FilterLabelsVerbosity))), QuerySemantics.Edge);
-
-        IEdgeGremlinQuery<object> IVertexGremlinQueryBase.OutE() => AddStepWithObjectTypes<object>(OutEStep.Empty, QuerySemantics.Edge);
-
-        IOutEdgeGremlinQuery<TEdge, TElement> IVertexGremlinQueryBase<TElement>.OutE<TEdge>() => AddStep<TEdge, TElement, object, object, object, object>(new OutEStep(Environment.Model.EdgesModel.GetFilterLabelsOrDefault(typeof(TEdge), Environment.Options.GetValue(GremlinqOption.FilterLabelsVerbosity))), QuerySemantics.Edge);
-
-        IVertexPropertyGremlinQuery<VertexProperty<object>, object> IVertexGremlinQueryBase<TElement>.Properties() => Properties<VertexProperty<object>, object, object>(Array.Empty<string>(), QuerySemantics.VertexProperty);
-
-        IVertexPropertyGremlinQuery<VertexProperty<TValue>, TValue> IVertexGremlinQueryBase<TElement>.Properties<TValue>(params Expression<Func<TElement, TValue>>[] projections) => VertexProperties<TValue>(projections);
-
-        IVertexPropertyGremlinQuery<VertexProperty<TValue>, TValue> IVertexGremlinQueryBase<TElement>.Properties<TValue>(params Expression<Func<TElement, TValue[]>>[] projections) => VertexProperties<TValue>(projections);
-
-        IVertexPropertyGremlinQuery<VertexProperty<TValue>, TValue> IVertexGremlinQueryBase<TElement>.Properties<TValue>(params Expression<Func<TElement, VertexProperty<TValue>>>[] projections) => VertexProperties<TValue>(projections);
-
-        IVertexPropertyGremlinQuery<VertexProperty<TValue, TNewMeta>, TValue, TNewMeta> IVertexGremlinQueryBase<TElement>.Properties<TValue, TNewMeta>(params Expression<Func<TElement, VertexProperty<TValue, TNewMeta>>>[] projections) => Properties<VertexProperty<TValue, TNewMeta>, TValue, TNewMeta>(QuerySemantics.VertexProperty, projections);
-
-        IVertexPropertyGremlinQuery<VertexProperty<TValue>, TValue> IVertexGremlinQueryBase<TElement>.Properties<TValue>(params Expression<Func<TElement, VertexProperty<TValue>[]>>[] projections) => VertexProperties<TValue>(projections);
-
-        IVertexPropertyGremlinQuery<VertexProperty<TValue, TNewMeta>, TValue, TNewMeta> IVertexGremlinQueryBase<TElement>.Properties<TValue, TNewMeta>(params Expression<Func<TElement, VertexProperty<TValue, TNewMeta>[]>>[] projections) => Properties<VertexProperty<TValue, TNewMeta>, TValue, TNewMeta>(QuerySemantics.VertexProperty, projections);
-
-        IVertexPropertyGremlinQuery<VertexProperty<TValue>, TValue> IVertexGremlinQueryBase<TElement>.Properties<TValue>() => Properties<VertexProperty<TValue>, TValue, object>(Array.Empty<string>(), QuerySemantics.VertexProperty);
-
-        IVertexPropertyGremlinQuery<VertexProperty<object>, object> IVertexGremlinQueryBase<TElement>.Properties(params Expression<Func<TElement, VertexProperty<object>>>[] projections) => VertexProperties<object>(projections);
-
-        IValueGremlinQuery<TValue> IVertexGremlinQueryBase<TElement>.Values<TValue, TNewMeta>(params Expression<Func<TElement, VertexProperty<TValue, TNewMeta>>>[] projections) => ValuesForProjections<TValue>(projections);
-
-        IValueGremlinQuery<TValue> IVertexGremlinQueryBase<TElement>.Values<TValue>(params Expression<Func<TElement, VertexProperty<TValue>>>[] projections) => ValuesForProjections<TValue>(projections);
-
-        IValueGremlinQuery<TTarget> IVertexGremlinQueryBase<TElement>.Values<TTarget>(params Expression<Func<TElement, VertexProperty<TTarget>[]>>[] projections) => ValuesForProjections<TTarget>(projections);
-
-        IValueGremlinQuery<TTarget> IVertexGremlinQueryBase<TElement>.Values<TTarget, TTargetMeta>(params Expression<Func<TElement, VertexProperty<TTarget, TTargetMeta>[]>>[] projections) => ValuesForProjections<TTarget>(projections);
-
-        IValueGremlinQuery<object> IVertexGremlinQueryBase<TElement>.Values(params Expression<Func<TElement, VertexProperty<object>>>[] projections) => ValuesForProjections<object>(projections);
-
-        IVertexGremlinQuery<TElement> IVertexGremlinQueryBase<TElement>.Update(TElement element) => AddOrUpdate(element, false);
-
-        IVertexGremlinQuery<TElement> IVertexGremlinQuery<TElement>.Property<TProjectedValue>(Expression<Func<TElement, TProjectedValue[]>> projection, TProjectedValue value) => Property(projection, value != null ? new[] { value } : null);
-
-        IValueGremlinQuery<TTarget> IVertexGremlinQueryBase<TElement>.Values<TTarget>(params Expression<Func<TElement, TTarget>>[] projections) => ValuesForProjections<TTarget>(projections);
-
-        IValueGremlinQuery<TTarget> IVertexGremlinQueryBase<TElement>.Values<TTarget>(params Expression<Func<TElement, TTarget[]>>[] projections) => ValuesForProjections<TTarget>(projections);
-
-        IVertexGremlinQuery<TElement> IGremlinQueryBaseRec<IVertexGremlinQuery<TElement>>.Mute() => Mute();
-
-        IElementGremlinQuery<TElement> IVertexPropertyGremlinQueryBase<TElement, TScalar, TMeta>.Lower() => this;
-
-        IPropertyGremlinQuery<Property<TValue>> IVertexPropertyGremlinQueryBase<TElement, TScalar, TMeta>.Properties<TValue>(params Expression<Func<TMeta, TValue>>[] projections) => Properties<Property<TValue>, TValue, object>(QuerySemantics.Property, projections);
-
-        IVertexPropertyGremlinQuery<TElement, TScalar, TMeta> IVertexPropertyGremlinQueryBase<TElement, TScalar, TMeta>.Property<TValue>(Expression<Func<TMeta, TValue>> projection, TValue value) => Property(projection, value);
-
-        IValueGremlinQuery<TScalar> IVertexPropertyGremlinQueryBase<TElement, TScalar, TMeta>.Value() => Value<TScalar>();
-
-        IValueGremlinQuery<TMeta> IVertexPropertyGremlinQueryBase<TElement, TScalar, TMeta>.ValueMap() => ValueMap<TMeta>(ImmutableArray<string>.Empty);
-
-        IValueGremlinQuery<TTarget> IVertexPropertyGremlinQueryBase<TElement, TScalar, TMeta>.Values<TTarget>(params Expression<Func<TMeta, TTarget>>[] projections) => ValuesForProjections<TTarget>(projections);
-
-        IVertexPropertyGremlinQuery<TElement, TScalar, TMeta> IVertexPropertyGremlinQueryBase<TElement, TScalar, TMeta>.Where(Expression<Func<VertexProperty<TScalar, TMeta>, bool>> predicate) => Where(predicate);
-
-        IVertexPropertyGremlinQuery<TElement, TScalar, TMeta> IGremlinQueryBaseRec<IVertexPropertyGremlinQuery<TElement, TScalar, TMeta>>.Mute() => Mute();
-
-        IElementGremlinQuery<TElement> IVertexPropertyGremlinQueryBase<TElement, TScalar>.Lower() => this;
-
-        IElementGremlinQuery<object> IVertexPropertyGremlinQueryBase.Lower() => Cast<object>();
-
-        IValueGremlinQuery<IDictionary<string, TTarget>> IVertexPropertyGremlinQueryBase.ValueMap<TTarget>() => ValueMap<IDictionary<string, TTarget>>(ImmutableArray<string>.Empty);
-
-        IValueGremlinQuery<IDictionary<string, TTarget>> IVertexPropertyGremlinQueryBase.ValueMap<TTarget>(params string[] keys) => ValueMap<IDictionary<string, TTarget>>(keys.ToImmutableArray());
-
-        IValueGremlinQuery<IDictionary<string, object>> IVertexPropertyGremlinQueryBase.ValueMap(params string[] keys) => ValueMap<IDictionary<string, object>>(keys.ToImmutableArray());
-
-        IValueGremlinQuery<TValue> IVertexPropertyGremlinQueryBase.Values<TValue>() => ValuesForKeys<TValue>(Array.Empty<Key>());
-
-        IValueGremlinQuery<TValue> IVertexPropertyGremlinQueryBase.Values<TValue>(params string[] keys) => ValuesForKeys<TValue>(keys.Select(x => (Key)x));
-
-        IValueGremlinQuery<object> IVertexPropertyGremlinQueryBase.Values(params string[] keys) => ValuesForKeys<object>(keys.Select(x => (Key)x));
-
-        IPropertyGremlinQuery<Property<object>> IVertexPropertyGremlinQueryBase.Properties(params string[] keys) => Properties<Property<object>, object, object>(keys, QuerySemantics.Property);
-
-        IVertexPropertyGremlinQuery<VertexProperty<TScalar, TNewMeta>, TScalar, TNewMeta> IVertexPropertyGremlinQueryBase<TElement, TScalar>.Meta<TNewMeta>() => Cast<VertexProperty<TScalar, TNewMeta>, object, object, TScalar, TNewMeta, object>();
-
-        IPropertyGremlinQuery<Property<TValue>> IVertexPropertyGremlinQueryBase<TElement, TScalar>.Properties<TValue>(params string[] keys) => Properties<Property<TValue>, object, object>(keys, QuerySemantics.Property);
-
-        IValueGremlinQuery<TScalar> IVertexPropertyGremlinQueryBase<TElement, TScalar>.Value() => Value<TScalar>();
-
-        IVertexPropertyGremlinQuery<TElement, TScalar> IGremlinQueryBaseRec<IVertexPropertyGremlinQuery<TElement, TScalar>>.Mute() => Mute();
-
-        private Traversal ToTraversalImpl()
+        Traversal IGremlinQueryAdmin.ToTraversal()
         {
             var steps = Steps;
             IImmutableList<Step> projection = ImmutableList<Step>.Empty;
@@ -479,10 +303,184 @@
             {
                 ret[querySize + j++] = projectionStep;
             }
-
+
             return new Traversal(ret, true);
         }

+        Type IGremlinQueryAdmin.ElementType { get => typeof(TElement); }
+
+        IEdgeGremlinQuery<TEdge> IStartGremlinQuery.AddE<TEdge>(TEdge edge) => AddE(edge);
+
+        IValueGremlinQuery<TScalar> IArrayGremlinQueryBase<TScalar>.Unfold() => Unfold<IValueGremlinQuery<TScalar>>();
+
+        IVertexGremlinQuery<TVertex> IStartGremlinQuery.AddV<TVertex>(TVertex vertex) => AddV(vertex);
+
+        IValueGremlinQuery<TNewElement> IStartGremlinQuery.Inject<TNewElement>(params TNewElement[] elements) => Inject(elements);
+
+        IVertexGremlinQuery<object> IStartGremlinQuery.V(params object[] ids) => AddStepWithObjectTypes<object>(new VStep(ids.ToImmutableArray()), QuerySemantics.Vertex);
+
+        IVertexGremlinQuery<TNewVertex> IStartGremlinQuery.ReplaceV<TNewVertex>(TNewVertex vertex) => ((IStartGremlinQuery)this).V<TNewVertex>(vertex!.GetId(Environment)).Update(vertex);
+
+        IEdgeGremlinQuery<TEdge> IStartGremlinQuery.AddE<TEdge>() => AddE(new TEdge());
+
+        IVertexGremlinQuery<TVertex> IStartGremlinQuery.AddV<TVertex>() => AddV(new TVertex());
+
+        IVertexGremlinQuery<TVertex> IStartGremlinQuery.V<TVertex>(params object[] ids) => ((IStartGremlinQuery)this).V(ids).OfType<TVertex>();
+
+        IGremlinQueryEnvironment IGremlinQuerySource.Environment => Environment;
+
+        IEdgeGremlinQuery<object> IGremlinQuerySource.E(params object[] ids) => AddStepWithObjectTypes<object>(new EStep(ids.ToImmutableArray()), QuerySemantics.Edge);
+
+        IEdgeGremlinQuery<TEdge> IGremlinQuerySource.E<TEdge>(params object[] ids) => ((IGremlinQuerySource)this).E(ids).OfType<TEdge>();
+
+        IEdgeGremlinQuery<TNewEdge> IGremlinQuerySource.ReplaceE<TNewEdge>(TNewEdge edge) => ((IGremlinQuerySource)this).E<TNewEdge>(edge!.GetId(Environment)).Update(edge);
+
+        IGremlinQuerySource IConfigurableGremlinQuerySource.ConfigureEnvironment(Func<IGremlinQueryEnvironment, IGremlinQueryEnvironment> transformation) => ConfigureEnvironment(transformation);
+
+        IGremlinQuerySource IGremlinQuerySource.WithoutStrategies(params Type[] strategyTypes) => AddStep(new WithoutStrategiesStep(strategyTypes.ToImmutableArray()));
+
+        IGremlinQuerySource IGremlinQuerySource.WithSideEffect<TSideEffect>(StepLabel<TSideEffect> label, TSideEffect value) => AddStep(new WithSideEffectStep(label, value!));
+
+        IInEdgeGremlinQuery<TElement, TInVertex> IGremlinQueryBaseRec<IInEdgeGremlinQuery<TElement, TInVertex>>.Mute() => Mute();
+
+        IBothEdgeGremlinQuery<TElement, TTargetVertex, TOutVertex> IInOrOutEdgeGremlinQueryBase<TElement, TOutVertex>.From<TTargetVertex>(StepLabel<TTargetVertex> stepLabel) => AddStep<TElement, TTargetVertex, TOutVertex, object, object, object>(new AddEStep.FromLabelStep(stepLabel), QuerySemantics.Edge);
+
+        IBothEdgeGremlinQuery<TElement, TTargetVertex, TOutVertex> IInOrOutEdgeGremlinQueryBase<TElement, TOutVertex>.From<TTargetVertex>(Func<IVertexGremlinQuery<TOutVertex>, IVertexGremlinQueryBase<TTargetVertex>> fromVertexTraversal) => AddStep<TElement, TTargetVertex, TOutVertex, object, object, object>(new AddEStep.FromTraversalStep(Cast<TOutVertex>().Continue(fromVertexTraversal).ToTraversal()), QuerySemantics.Edge);
+
+        IBothEdgeGremlinQuery<TElement, TOutVertex, TTargetVertex> IInOrOutEdgeGremlinQueryBase<TElement, TOutVertex>.To<TTargetVertex>(StepLabel<TTargetVertex> stepLabel) => To<TElement, TOutVertex, TTargetVertex>(stepLabel);
+
+        IBothEdgeGremlinQuery<TElement, TOutVertex, TTargetVertex> IInOrOutEdgeGremlinQueryBase<TElement, TOutVertex>.To<TTargetVertex>(Func<IVertexGremlinQuery<TOutVertex>, IVertexGremlinQueryBase<TTargetVertex>> toVertexTraversal) => AddStep<TElement, TOutVertex, TTargetVertex, object, object, object>(new AddEStep.ToTraversalStep(Cast<TOutVertex>().Continue(toVertexTraversal).ToTraversal()), QuerySemantics.Edge);
+
+        IInOrOutEdgeGremlinQuery<TElement, TOutVertex> IGremlinQueryBaseRec<IInOrOutEdgeGremlinQuery<TElement, TOutVertex>>.Mute() => Mute();
+
+        IOutEdgeGremlinQuery<TElement, TOutVertex> IGremlinQueryBaseRec<IOutEdgeGremlinQuery<TElement, TOutVertex>>.Mute() => Mute();
+
+        IValueGremlinQuery<string> IPropertyGremlinQueryBase<TElement>.Key() => Key();
+
+        IValueGremlinQuery<TValue> IPropertyGremlinQueryBase<TElement>.Value<TValue>() => Value<TValue>();
+
+        IValueGremlinQuery<object> IPropertyGremlinQueryBase<TElement>.Value() => Value<object>();
+
+        IPropertyGremlinQuery<TElement> IGremlinQueryBaseRec<IPropertyGremlinQuery<TElement>>.Mute() => Mute();
+
+        IValueGremlinQuery<TElement> IGremlinQueryBaseRec<IValueGremlinQuery<TElement>>.Mute() => Mute();
+
+        IEdgeOrVertexGremlinQuery<TElement> IVertexGremlinQueryBase<TElement>.Lower() => this;
+
+        IEdgeOrVertexGremlinQuery<object> IVertexGremlinQueryBase.Lower() => Cast<object>();
+
+        IInOrOutEdgeGremlinQuery<TEdge, TElement> IVertexGremlinQueryBase<TElement>.AddE<TEdge>(TEdge edge) => AddE(edge);
+
+        IInOrOutEdgeGremlinQuery<TEdge, TElement> IVertexGremlinQueryBase<TElement>.AddE<TEdge>() => AddE(new TEdge());
+
+        IVertexGremlinQuery<object> IVertexGremlinQueryBase.Both() => AddStepWithObjectTypes<object>(BothStep.NoLabels, QuerySemantics.Vertex);
+
+        IVertexGremlinQuery<object> IVertexGremlinQueryBase.Both<TEdge>() => AddStepWithObjectTypes<object>(new BothStep(Environment.Model.EdgesModel.GetFilterLabelsOrDefault(typeof(TEdge), Environment.Options.GetValue(GremlinqOption.FilterLabelsVerbosity))), QuerySemantics.Vertex);
+
+        IEdgeGremlinQuery<object> IVertexGremlinQueryBase.BothE() => AddStepWithObjectTypes<object>(BothEStep.NoLabels, QuerySemantics.Edge);
+
+        IEdgeGremlinQuery<TEdge> IVertexGremlinQueryBase.BothE<TEdge>() => AddStepWithObjectTypes<TEdge>(new BothEStep(Environment.Model.EdgesModel.GetFilterLabelsOrDefault(typeof(TEdge), Environment.Options.GetValue(GremlinqOption.FilterLabelsVerbosity))), QuerySemantics.Edge);
+
+        IVertexGremlinQuery<object> IVertexGremlinQueryBase.In() => AddStepWithObjectTypes<object>(InStep.Empty, QuerySemantics.Vertex);
+
+        IVertexGremlinQuery<object> IVertexGremlinQueryBase.In<TEdge>() => AddStepWithObjectTypes<object>(new InStep(Environment.Model.EdgesModel.GetFilterLabelsOrDefault(typeof(TEdge), Environment.Options.GetValue(GremlinqOption.FilterLabelsVerbosity))), QuerySemantics.Vertex);
+
+        IEdgeGremlinQuery<object> IVertexGremlinQueryBase.InE() => AddStepWithObjectTypes<object>(InEStep.Empty, QuerySemantics.Edge);
+
+        IEdgeGremlinQuery<TEdge> IVertexGremlinQueryBase.InE<TEdge>() => AddStepWithObjectTypes<TEdge>(new InEStep(Environment.Model.EdgesModel.GetFilterLabelsOrDefault(typeof(TEdge), Environment.Options.GetValue(GremlinqOption.FilterLabelsVerbosity))), QuerySemantics.Edge);
+
+        IInEdgeGremlinQuery<TEdge, TElement> IVertexGremlinQueryBase<TElement>.InE<TEdge>() => AddStep<TEdge, object, TElement, object, object, object>(new InEStep(Environment.Model.EdgesModel.GetFilterLabelsOrDefault(typeof(TEdge), Environment.Options.GetValue(GremlinqOption.FilterLabelsVerbosity))), QuerySemantics.Edge);
+
+        IVertexGremlinQuery<object> IVertexGremlinQueryBase.Out() => AddStepWithObjectTypes<object>(OutStep.Empty, QuerySemantics.Vertex);
+
+        IVertexGremlinQuery<object> IVertexGremlinQueryBase.Out<TEdge>() => AddStepWithObjectTypes<object>(new OutStep(Environment.Model.EdgesModel.GetFilterLabelsOrDefault(typeof(TEdge), Environment.Options.GetValue(GremlinqOption.FilterLabelsVerbosity))), QuerySemantics.Vertex);
+
+        IEdgeGremlinQuery<TEdge> IVertexGremlinQueryBase.OutE<TEdge>() => AddStepWithObjectTypes<TEdge>(new OutEStep(Environment.Model.EdgesModel.GetFilterLabelsOrDefault(typeof(TEdge), Environment.Options.GetValue(GremlinqOption.FilterLabelsVerbosity))), QuerySemantics.Edge);
+
+        IEdgeGremlinQuery<object> IVertexGremlinQueryBase.OutE() => AddStepWithObjectTypes<object>(OutEStep.Empty, QuerySemantics.Edge);
+
+        IOutEdgeGremlinQuery<TEdge, TElement> IVertexGremlinQueryBase<TElement>.OutE<TEdge>() => AddStep<TEdge, TElement, object, object, object, object>(new OutEStep(Environment.Model.EdgesModel.GetFilterLabelsOrDefault(typeof(TEdge), Environment.Options.GetValue(GremlinqOption.FilterLabelsVerbosity))), QuerySemantics.Edge);
+
+        IVertexPropertyGremlinQuery<VertexProperty<object>, object> IVertexGremlinQueryBase<TElement>.Properties() => Properties<VertexProperty<object>, object, object>(Array.Empty<string>(), QuerySemantics.VertexProperty);
+
+        IVertexPropertyGremlinQuery<VertexProperty<TValue>, TValue> IVertexGremlinQueryBase<TElement>.Properties<TValue>(params Expression<Func<TElement, TValue>>[] projections) => VertexProperties<TValue>(projections);
+
+        IVertexPropertyGremlinQuery<VertexProperty<TValue>, TValue> IVertexGremlinQueryBase<TElement>.Properties<TValue>(params Expression<Func<TElement, TValue[]>>[] projections) => VertexProperties<TValue>(projections);
+
+        IVertexPropertyGremlinQuery<VertexProperty<TValue>, TValue> IVertexGremlinQueryBase<TElement>.Properties<TValue>(params Expression<Func<TElement, VertexProperty<TValue>>>[] projections) => VertexProperties<TValue>(projections);
+
+        IVertexPropertyGremlinQuery<VertexProperty<TValue, TNewMeta>, TValue, TNewMeta> IVertexGremlinQueryBase<TElement>.Properties<TValue, TNewMeta>(params Expression<Func<TElement, VertexProperty<TValue, TNewMeta>>>[] projections) => Properties<VertexProperty<TValue, TNewMeta>, TValue, TNewMeta>(QuerySemantics.VertexProperty, projections);
+
+        IVertexPropertyGremlinQuery<VertexProperty<TValue>, TValue> IVertexGremlinQueryBase<TElement>.Properties<TValue>(params Expression<Func<TElement, VertexProperty<TValue>[]>>[] projections) => VertexProperties<TValue>(projections);
+
+        IVertexPropertyGremlinQuery<VertexProperty<TValue, TNewMeta>, TValue, TNewMeta> IVertexGremlinQueryBase<TElement>.Properties<TValue, TNewMeta>(params Expression<Func<TElement, VertexProperty<TValue, TNewMeta>[]>>[] projections) => Properties<VertexProperty<TValue, TNewMeta>, TValue, TNewMeta>(QuerySemantics.VertexProperty, projections);
+
+        IVertexPropertyGremlinQuery<VertexProperty<TValue>, TValue> IVertexGremlinQueryBase<TElement>.Properties<TValue>() => Properties<VertexProperty<TValue>, TValue, object>(Array.Empty<string>(), QuerySemantics.VertexProperty);
+
+        IVertexPropertyGremlinQuery<VertexProperty<object>, object> IVertexGremlinQueryBase<TElement>.Properties(params Expression<Func<TElement, VertexProperty<object>>>[] projections) => VertexProperties<object>(projections);
+
+        IValueGremlinQuery<TValue> IVertexGremlinQueryBase<TElement>.Values<TValue, TNewMeta>(params Expression<Func<TElement, VertexProperty<TValue, TNewMeta>>>[] projections) => ValuesForProjections<TValue>(projections);
+
+        IValueGremlinQuery<TValue> IVertexGremlinQueryBase<TElement>.Values<TValue>(params Expression<Func<TElement, VertexProperty<TValue>>>[] projections) => ValuesForProjections<TValue>(projections);
+
+        IValueGremlinQuery<TTarget> IVertexGremlinQueryBase<TElement>.Values<TTarget>(params Expression<Func<TElement, VertexProperty<TTarget>[]>>[] projections) => ValuesForProjections<TTarget>(projections);
+
+        IValueGremlinQuery<TTarget> IVertexGremlinQueryBase<TElement>.Values<TTarget, TTargetMeta>(params Expression<Func<TElement, VertexProperty<TTarget, TTargetMeta>[]>>[] projections) => ValuesForProjections<TTarget>(projections);
+
+        IValueGremlinQuery<object> IVertexGremlinQueryBase<TElement>.Values(params Expression<Func<TElement, VertexProperty<object>>>[] projections) => ValuesForProjections<object>(projections);
+
+        IVertexGremlinQuery<TElement> IVertexGremlinQueryBase<TElement>.Update(TElement element) => AddOrUpdate(element, false);
+
+        IVertexGremlinQuery<TElement> IVertexGremlinQuery<TElement>.Property<TProjectedValue>(Expression<Func<TElement, TProjectedValue[]>> projection, TProjectedValue value) => Property(projection, value != null ? new[] { value } : null);
+
+        IValueGremlinQuery<TTarget> IVertexGremlinQueryBase<TElement>.Values<TTarget>(params Expression<Func<TElement, TTarget>>[] projections) => ValuesForProjections<TTarget>(projections);
+
+        IValueGremlinQuery<TTarget> IVertexGremlinQueryBase<TElement>.Values<TTarget>(params Expression<Func<TElement, TTarget[]>>[] projections) => ValuesForProjections<TTarget>(projections);
+
+        IVertexGremlinQuery<TElement> IGremlinQueryBaseRec<IVertexGremlinQuery<TElement>>.Mute() => Mute();
+
+        IElementGremlinQuery<TElement> IVertexPropertyGremlinQueryBase<TElement, TScalar, TMeta>.Lower() => this;
+
+        IPropertyGremlinQuery<Property<TValue>> IVertexPropertyGremlinQueryBase<TElement, TScalar, TMeta>.Properties<TValue>(params Expression<Func<TMeta, TValue>>[] projections) => Properties<Property<TValue>, TValue, object>(QuerySemantics.Property, projections);
+
+        IVertexPropertyGremlinQuery<TElement, TScalar, TMeta> IVertexPropertyGremlinQueryBase<TElement, TScalar, TMeta>.Property<TValue>(Expression<Func<TMeta, TValue>> projection, TValue value) => Property(projection, value);
+
+        IValueGremlinQuery<TScalar> IVertexPropertyGremlinQueryBase<TElement, TScalar, TMeta>.Value() => Value<TScalar>();
+
+        IValueGremlinQuery<TMeta> IVertexPropertyGremlinQueryBase<TElement, TScalar, TMeta>.ValueMap() => ValueMap<TMeta>(ImmutableArray<string>.Empty);
+
+        IValueGremlinQuery<TTarget> IVertexPropertyGremlinQueryBase<TElement, TScalar, TMeta>.Values<TTarget>(params Expression<Func<TMeta, TTarget>>[] projections) => ValuesForProjections<TTarget>(projections);
+
+        IVertexPropertyGremlinQuery<TElement, TScalar, TMeta> IVertexPropertyGremlinQueryBase<TElement, TScalar, TMeta>.Where(Expression<Func<VertexProperty<TScalar, TMeta>, bool>> predicate) => Where(predicate);
+
+        IVertexPropertyGremlinQuery<TElement, TScalar, TMeta> IGremlinQueryBaseRec<IVertexPropertyGremlinQuery<TElement, TScalar, TMeta>>.Mute() => Mute();
+
+        IElementGremlinQuery<TElement> IVertexPropertyGremlinQueryBase<TElement, TScalar>.Lower() => this;
+
+        IElementGremlinQuery<object> IVertexPropertyGremlinQueryBase.Lower() => Cast<object>();
+
+        IValueGremlinQuery<IDictionary<string, TTarget>> IVertexPropertyGremlinQueryBase.ValueMap<TTarget>() => ValueMap<IDictionary<string, TTarget>>(ImmutableArray<string>.Empty);
+
+        IValueGremlinQuery<IDictionary<string, TTarget>> IVertexPropertyGremlinQueryBase.ValueMap<TTarget>(params string[] keys) => ValueMap<IDictionary<string, TTarget>>(keys.ToImmutableArray());
+
+        IValueGremlinQuery<IDictionary<string, object>> IVertexPropertyGremlinQueryBase.ValueMap(params string[] keys) => ValueMap<IDictionary<string, object>>(keys.ToImmutableArray());
+
+        IValueGremlinQuery<TValue> IVertexPropertyGremlinQueryBase.Values<TValue>() => ValuesForKeys<TValue>(Array.Empty<Key>());
+
+        IValueGremlinQuery<TValue> IVertexPropertyGremlinQueryBase.Values<TValue>(params string[] keys) => ValuesForKeys<TValue>(keys.Select(x => (Key)x));
+
+        IValueGremlinQuery<object> IVertexPropertyGremlinQueryBase.Values(params string[] keys) => ValuesForKeys<object>(keys.Select(x => (Key)x));
+
+        IPropertyGremlinQuery<Property<object>> IVertexPropertyGremlinQueryBase.Properties(params string[] keys) => Properties<Property<object>, object, object>(keys, QuerySemantics.Property);
+
+        IVertexPropertyGremlinQuery<VertexProperty<TScalar, TNewMeta>, TScalar, TNewMeta> IVertexPropertyGremlinQueryBase<TElement, TScalar>.Meta<TNewMeta>() => Cast<VertexProperty<TScalar, TNewMeta>, object, object, TScalar, TNewMeta, object>();
+
+        IPropertyGremlinQuery<Property<TValue>> IVertexPropertyGremlinQueryBase<TElement, TScalar>.Properties<TValue>(params string[] keys) => Properties<Property<TValue>, object, object>(keys, QuerySemantics.Property);
+
+        IValueGremlinQuery<TScalar> IVertexPropertyGremlinQueryBase<TElement, TScalar>.Value() => Value<TScalar>();
+
+        IVertexPropertyGremlinQuery<TElement, TScalar> IGremlinQueryBaseRec<IVertexPropertyGremlinQuery<TElement, TScalar>>.Mute() => Mute();
+
         IValueTupleGremlinQuery<TElement> IGremlinQueryBaseRec<IValueTupleGremlinQuery<TElement>>.Mute() => Mute();

         IValueGremlinQuery<TTargetValue> IValueTupleGremlinQueryBase<TElement>.Select<TTargetValue>(Expression<Func<TElement, TTargetValue>> projection) => Select<IValueGremlinQuery<TTargetValue>>(projection);


Remove redundant string formatting

Remove redundant string formatting

--- osu.Game/Rulesets/Edit/Checks/CheckUnsnaps.cs
+++ osu.Game/Rulesets/Edit/Checks/CheckUnsnaps.cs
@@ -65,7 +65,7 @@
         public abstract class IssueTemplateUnsnap : IssueTemplate
         {
             protected IssueTemplateUnsnap(ICheck check, IssueType type)
-                : base(check, type, "{0:0.##} is unsnapped by {1:0.##} ms.")
+                : base(check, type, "{0} is unsnapped by {1:0.##} ms.")
             {
             }


Accidentally forgot an `int` to be a `var` on last commit.

--- Evbpc.Framework/Utilities/Extensions/NumberByteArrayExtensions.cs
+++ Evbpc.Framework/Utilities/Extensions/NumberByteArrayExtensions.cs
@@ -94,7 +94,7 @@

             var result = new byte[size];

-            for (int i = 0; i < size; i++)
+            for (var i = 0; i < size; i++)
             {
                 var bitOffset = (size - (i + 1)) * 8;
                 result[i] = (byte)((value & ((ulong)0xFF << bitOffset)) >> bitOffset);