From a1f77a5b6ab33bbcc0a8e070e50cee24ad82eac1 Mon Sep 17 00:00:00 2001
From: riperiperi <rhy3756547@hotmail.com>
Date: Sun, 17 Jan 2021 20:08:06 +0000
Subject: [PATCH 01/27] Implement lazy flush-on-read for Buffers (SSBO/Copy)
 (#1790)

* Initial implementation of buffer flush (VERY WIP)

* Host shaders need to be rebuilt for the SSBO write flag.

* New approach with reserved regions and gl sync

* Fix a ton of buffer issues.

* Remove unused buffer unmapped behaviour

* Revert "Remove unused buffer unmapped behaviour"

This reverts commit f1700e52fb8760180ac5e0987a07d409d1e70ece.

* Delete modified ranges on unmap

Fixes potential crashes in Super Smash Bros, where a previously modified range could lie on either side of an unmap.

* Cache some more delegates.

* Dispose Sync on Close

* Also create host sync for GPFifo syncpoint increment.

* Copy buffer optimization, add docs

* Fix race condition with OpenGL Sync

* Enable read tracking on CommandBuffer, insert syncpoint on WaitForIdle

* Performance: Only flush individual pages of SSBO at a time

This avoids flushing large amounts of data when only a small amount is actually used.

* Signal Modified rather than flushing after clear

* Fix some docs and code style.

* Introduce a new test for tracking memory protection.

Sucessfully demonstrates that the bug causing write protection to be cleared by a read action has been fixed. (these tests fail on master)

* Address Comments

* Add host sync for SetReference

This ensures that any indirect draws will correctly flush any related buffer data written before them. Fixes some flashing and misplaced world geometry in MH rise.

* Make PageAlign static

* Re-enable read tracking, for reads.
---
 Ryujinx.Cpu/MemoryManager.cs                  |   2 +-
 Ryujinx.Cpu/Tracking/CpuMultiRegionHandle.cs  |   1 +
 .../Tracking/CpuSmartMultiRegionHandle.cs     |   1 +
 Ryujinx.Graphics.GAL/IRenderer.cs             |   4 +
 Ryujinx.Graphics.Gpu/Engine/Compute.cs        |   2 +-
 .../Engine/GPFifo/GPFifoClass.cs              |  13 +
 .../Engine/GPFifo/GPFifoDevice.cs             |   2 +-
 .../Engine/MethodIncrementSyncpoint.cs        |   1 +
 Ryujinx.Graphics.Gpu/Engine/Methods.cs        |   3 +-
 Ryujinx.Graphics.Gpu/GpuContext.cs            |  46 +++
 Ryujinx.Graphics.Gpu/Memory/Buffer.cs         | 206 +++++++++-
 Ryujinx.Graphics.Gpu/Memory/BufferBounds.cs   |  11 +-
 Ryujinx.Graphics.Gpu/Memory/BufferManager.cs  | 121 ++++--
 .../Memory/BufferModifiedRangeList.cs         | 367 ++++++++++++++++++
 Ryujinx.Graphics.Gpu/Memory/MemoryManager.cs  |   1 +
 Ryujinx.Graphics.Gpu/Shader/ShaderCache.cs    |   2 +-
 Ryujinx.Graphics.OpenGL/Renderer.cs           |  15 +
 Ryujinx.Graphics.OpenGL/Sync.cs               | 129 ++++++
 Ryujinx.Graphics.Shader/BufferDescriptor.cs   |  10 +
 Ryujinx.Graphics.Shader/BufferUsageFlags.cs   |  18 +
 .../Glsl/Instructions/InstGenMemory.cs        |  27 ++
 .../MockVirtualMemoryManager.cs               |   3 +
 Ryujinx.Memory.Tests/TrackingTests.cs         |  63 +++
 Ryujinx.Memory/Range/RangeList.cs             |  46 +--
 Ryujinx.Memory/Tracking/MultiRegionHandle.cs  |  11 +
 Ryujinx.Memory/Tracking/RegionHandle.cs       |   1 +
 .../Tracking/SmartMultiRegionHandle.cs        |  20 +
 Ryujinx.Memory/Tracking/VirtualRegion.cs      |   4 +-
 28 files changed, 1073 insertions(+), 57 deletions(-)
 create mode 100644 Ryujinx.Graphics.Gpu/Memory/BufferModifiedRangeList.cs
 create mode 100644 Ryujinx.Graphics.OpenGL/Sync.cs
 create mode 100644 Ryujinx.Graphics.Shader/BufferUsageFlags.cs

diff --git a/Ryujinx.Cpu/MemoryManager.cs b/Ryujinx.Cpu/MemoryManager.cs
index 348ca2bd20..cef2012656 100644
--- a/Ryujinx.Cpu/MemoryManager.cs
+++ b/Ryujinx.Cpu/MemoryManager.cs
@@ -131,7 +131,7 @@ namespace Ryujinx.Cpu
         /// <exception cref="InvalidMemoryRegionException">Throw for unhandled invalid or unmapped memory accesses</exception>
         public T Read<T>(ulong va) where T : unmanaged
         {
-            return MemoryMarshal.Cast<byte, T>(GetSpan(va, Unsafe.SizeOf<T>()))[0];
+            return MemoryMarshal.Cast<byte, T>(GetSpan(va, Unsafe.SizeOf<T>(), true))[0];
         }
 
         /// <summary>
diff --git a/Ryujinx.Cpu/Tracking/CpuMultiRegionHandle.cs b/Ryujinx.Cpu/Tracking/CpuMultiRegionHandle.cs
index f76410b4bc..8204a13eb0 100644
--- a/Ryujinx.Cpu/Tracking/CpuMultiRegionHandle.cs
+++ b/Ryujinx.Cpu/Tracking/CpuMultiRegionHandle.cs
@@ -18,6 +18,7 @@ namespace Ryujinx.Cpu.Tracking
         public void QueryModified(Action<ulong, ulong> modifiedAction) => _impl.QueryModified(modifiedAction);
         public void QueryModified(ulong address, ulong size, Action<ulong, ulong> modifiedAction) => _impl.QueryModified(address, size, modifiedAction);
         public void QueryModified(ulong address, ulong size, Action<ulong, ulong> modifiedAction, int sequenceNumber) => _impl.QueryModified(address, size, modifiedAction, sequenceNumber);
+        public void RegisterAction(ulong address, ulong size, RegionSignal action) => _impl.RegisterAction(address, size, action);
         public void SignalWrite() => _impl.SignalWrite();
     }
 }
diff --git a/Ryujinx.Cpu/Tracking/CpuSmartMultiRegionHandle.cs b/Ryujinx.Cpu/Tracking/CpuSmartMultiRegionHandle.cs
index ddeeab0ae3..e38babfc57 100644
--- a/Ryujinx.Cpu/Tracking/CpuSmartMultiRegionHandle.cs
+++ b/Ryujinx.Cpu/Tracking/CpuSmartMultiRegionHandle.cs
@@ -15,6 +15,7 @@ namespace Ryujinx.Cpu.Tracking
         }
 
         public void Dispose() => _impl.Dispose();
+        public void RegisterAction(RegionSignal action) => _impl.RegisterAction(action);
         public void QueryModified(Action<ulong, ulong> modifiedAction) => _impl.QueryModified(modifiedAction);
         public void QueryModified(ulong address, ulong size, Action<ulong, ulong> modifiedAction) => _impl.QueryModified(address, size, modifiedAction);
         public void QueryModified(ulong address, ulong size, Action<ulong, ulong> modifiedAction, int sequenceNumber) => _impl.QueryModified(address, size, modifiedAction, sequenceNumber);
diff --git a/Ryujinx.Graphics.GAL/IRenderer.cs b/Ryujinx.Graphics.GAL/IRenderer.cs
index 465c880539..d03cb4c01b 100644
--- a/Ryujinx.Graphics.GAL/IRenderer.cs
+++ b/Ryujinx.Graphics.GAL/IRenderer.cs
@@ -21,6 +21,8 @@ namespace Ryujinx.Graphics.GAL
         ISampler CreateSampler(SamplerCreateInfo info);
         ITexture CreateTexture(TextureCreateInfo info, float scale);
 
+        void CreateSync(ulong id);
+
         void DeleteBuffer(BufferHandle buffer);
 
         byte[] GetBufferData(BufferHandle buffer, int offset, int size);
@@ -39,6 +41,8 @@ namespace Ryujinx.Graphics.GAL
 
         void ResetCounter(CounterType type);
 
+        void WaitSync(ulong id);
+
         void Initialize(GraphicsDebugLevel logLevel);
     }
 }
diff --git a/Ryujinx.Graphics.Gpu/Engine/Compute.cs b/Ryujinx.Graphics.Gpu/Engine/Compute.cs
index fd3114a794..c7e059ba3a 100644
--- a/Ryujinx.Graphics.Gpu/Engine/Compute.cs
+++ b/Ryujinx.Graphics.Gpu/Engine/Compute.cs
@@ -97,7 +97,7 @@ namespace Ryujinx.Graphics.Gpu.Engine
 
                 SbDescriptor sbDescriptor = _context.PhysicalMemory.Read<SbDescriptor>(sbDescAddress);
 
-                BufferManager.SetComputeStorageBuffer(sb.Slot, sbDescriptor.PackAddress(), (uint)sbDescriptor.Size);
+                BufferManager.SetComputeStorageBuffer(sb.Slot, sbDescriptor.PackAddress(), (uint)sbDescriptor.Size, sb.Flags);
             }
 
             BufferManager.SetComputeStorageBufferBindings(info.SBuffers);
diff --git a/Ryujinx.Graphics.Gpu/Engine/GPFifo/GPFifoClass.cs b/Ryujinx.Graphics.Gpu/Engine/GPFifo/GPFifoClass.cs
index 0e87aa3d2b..84d353502c 100644
--- a/Ryujinx.Graphics.Gpu/Engine/GPFifo/GPFifoClass.cs
+++ b/Ryujinx.Graphics.Gpu/Engine/GPFifo/GPFifoClass.cs
@@ -39,6 +39,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.GPFifo
                 { nameof(GPFifoClassState.Semaphored), new RwCallback(Semaphored, null) },
                 { nameof(GPFifoClassState.Syncpointb), new RwCallback(Syncpointb, null) },
                 { nameof(GPFifoClassState.WaitForIdle), new RwCallback(WaitForIdle, null) },
+                { nameof(GPFifoClassState.SetReference), new RwCallback(SetReference, null) },
                 { nameof(GPFifoClassState.LoadMmeInstructionRam), new RwCallback(LoadMmeInstructionRam, null) },
                 { nameof(GPFifoClassState.LoadMmeStartAddressRam), new RwCallback(LoadMmeStartAddressRam, null) },
                 { nameof(GPFifoClassState.SetMmeShadowRamControl), new RwCallback(SetMmeShadowRamControl, null) }
@@ -136,6 +137,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.GPFifo
             }
             else if (operation == SyncpointbOperation.Incr)
             {
+                _context.CreateHostSyncIfNeeded();
                 _context.Synchronization.IncrementSyncpoint(syncpointId);
             }
 
@@ -150,6 +152,17 @@ namespace Ryujinx.Graphics.Gpu.Engine.GPFifo
         {
             _context.Methods.PerformDeferredDraws();
             _context.Renderer.Pipeline.Barrier();
+
+            _context.CreateHostSyncIfNeeded();
+        }
+
+        /// <summary>
+        /// Used as an indirect data barrier on NVN. When used, access to previously written data must be coherent.
+        /// </summary>
+        /// <param name="argument">Method call argument</param>
+        public void SetReference(int argument)
+        {
+            _context.CreateHostSyncIfNeeded();
         }
 
         /// <summary>
diff --git a/Ryujinx.Graphics.Gpu/Engine/GPFifo/GPFifoDevice.cs b/Ryujinx.Graphics.Gpu/Engine/GPFifo/GPFifoDevice.cs
index 25614a135d..d0fcf14212 100644
--- a/Ryujinx.Graphics.Gpu/Engine/GPFifo/GPFifoDevice.cs
+++ b/Ryujinx.Graphics.Gpu/Engine/GPFifo/GPFifoDevice.cs
@@ -52,7 +52,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.GPFifo
             {
                 if (Words == null)
                 {
-                    Words = MemoryMarshal.Cast<byte, int>(context.MemoryManager.GetSpan(EntryAddress, (int)EntryCount * 4)).ToArray();
+                    Words = MemoryMarshal.Cast<byte, int>(context.MemoryManager.GetSpan(EntryAddress, (int)EntryCount * 4, true)).ToArray();
                 }
             }
         }
diff --git a/Ryujinx.Graphics.Gpu/Engine/MethodIncrementSyncpoint.cs b/Ryujinx.Graphics.Gpu/Engine/MethodIncrementSyncpoint.cs
index 8fcfb9000e..9c22275d55 100644
--- a/Ryujinx.Graphics.Gpu/Engine/MethodIncrementSyncpoint.cs
+++ b/Ryujinx.Graphics.Gpu/Engine/MethodIncrementSyncpoint.cs
@@ -13,6 +13,7 @@ namespace Ryujinx.Graphics.Gpu.Engine
         {
             uint syncpointId = (uint)(argument) & 0xFFFF;
 
+            _context.CreateHostSyncIfNeeded();
             _context.Renderer.UpdateCounters(); // Poll the query counters, the game may want an updated result.
             _context.Synchronization.IncrementSyncpoint(syncpointId);
         }
diff --git a/Ryujinx.Graphics.Gpu/Engine/Methods.cs b/Ryujinx.Graphics.Gpu/Engine/Methods.cs
index 9f27aec223..d6bd51106c 100644
--- a/Ryujinx.Graphics.Gpu/Engine/Methods.cs
+++ b/Ryujinx.Graphics.Gpu/Engine/Methods.cs
@@ -61,6 +61,7 @@ namespace Ryujinx.Graphics.Gpu.Engine
 
             context.MemoryManager.MemoryUnmapped += _counterCache.MemoryUnmappedHandler;
             context.MemoryManager.MemoryUnmapped += TextureManager.MemoryUnmappedHandler;
+            context.MemoryManager.MemoryUnmapped += BufferManager.MemoryUnmappedHandler;
         }
 
         /// <summary>
@@ -333,7 +334,7 @@ namespace Ryujinx.Graphics.Gpu.Engine
 
                     SbDescriptor sbDescriptor = _context.PhysicalMemory.Read<SbDescriptor>(sbDescAddress);
 
-                    BufferManager.SetGraphicsStorageBuffer(stage, sb.Slot, sbDescriptor.PackAddress(), (uint)sbDescriptor.Size);
+                    BufferManager.SetGraphicsStorageBuffer(stage, sb.Slot, sbDescriptor.PackAddress(), (uint)sbDescriptor.Size, sb.Flags);
                 }
             }
         }
diff --git a/Ryujinx.Graphics.Gpu/GpuContext.cs b/Ryujinx.Graphics.Gpu/GpuContext.cs
index 6834afb422..15f757c87a 100644
--- a/Ryujinx.Graphics.Gpu/GpuContext.cs
+++ b/Ryujinx.Graphics.Gpu/GpuContext.cs
@@ -4,6 +4,7 @@ using Ryujinx.Graphics.Gpu.Engine.GPFifo;
 using Ryujinx.Graphics.Gpu.Memory;
 using Ryujinx.Graphics.Gpu.Synchronization;
 using System;
+using System.Collections.Generic;
 using System.Threading;
 
 namespace Ryujinx.Graphics.Gpu
@@ -59,6 +60,18 @@ namespace Ryujinx.Graphics.Gpu
         /// </summary>
         internal int SequenceNumber { get; private set; }
 
+        /// <summary>
+        /// Internal sync number, used to denote points at which host synchronization can be requested.
+        /// </summary>
+        internal ulong SyncNumber { get; private set; }
+
+        /// <summary>
+        /// Actions to be performed when a CPU waiting sync point is triggered.
+        /// If there are more than 0 items when this happens, a host sync object will be generated for the given <see cref="SyncNumber"/>,
+        /// and the SyncNumber will be incremented.
+        /// </summary>
+        internal List<Action> SyncActions { get; }
+
         private readonly Lazy<Capabilities> _caps;
 
         /// <summary>
@@ -87,6 +100,8 @@ namespace Ryujinx.Graphics.Gpu
             _caps = new Lazy<Capabilities>(Renderer.GetCapabilities);
 
             HostInitalized = new ManualResetEvent(false);
+
+            SyncActions = new List<Action>();
         }
 
         /// <summary>
@@ -118,6 +133,37 @@ namespace Ryujinx.Graphics.Gpu
             PhysicalMemory = new PhysicalMemory(cpuMemory);
         }
 
+        /// <summary>
+        /// Registers an action to be performed the next time a syncpoint is incremented.
+        /// This will also ensure a host sync object is created, and <see cref="SyncNumber"/> is incremented.
+        /// </summary>
+        /// <param name="action">The action to be performed on sync object creation</param>
+        public void RegisterSyncAction(Action action)
+        {
+            SyncActions.Add(action);
+        }
+
+        /// <summary>
+        /// Creates a host sync object if there are any pending sync actions. The actions will then be called.
+        /// If no actions are present, a host sync object is not created.
+        /// </summary>
+        public void CreateHostSyncIfNeeded()
+        {
+            if (SyncActions.Count > 0)
+            {
+                Renderer.CreateSync(SyncNumber);
+
+                SyncNumber++;
+
+                foreach (Action action in SyncActions)
+                {
+                    action();
+                }
+
+                SyncActions.Clear();
+            }
+        }
+
         /// <summary>
         /// Disposes all GPU resources currently cached.
         /// It's an error to push any GPU commands after disposal.
diff --git a/Ryujinx.Graphics.Gpu/Memory/Buffer.cs b/Ryujinx.Graphics.Gpu/Memory/Buffer.cs
index bf2452833f..7127871a79 100644
--- a/Ryujinx.Graphics.Gpu/Memory/Buffer.cs
+++ b/Ryujinx.Graphics.Gpu/Memory/Buffer.cs
@@ -1,6 +1,7 @@
 using Ryujinx.Cpu.Tracking;
 using Ryujinx.Graphics.GAL;
 using Ryujinx.Memory.Range;
+using Ryujinx.Memory.Tracking;
 using System;
 
 namespace Ryujinx.Graphics.Gpu.Memory
@@ -34,12 +35,28 @@ namespace Ryujinx.Graphics.Gpu.Memory
         /// </summary>
         public ulong EndAddress => Address + Size;
 
+        /// <summary>
+        /// Ranges of the buffer that have been modified on the GPU.
+        /// Ranges defined here cannot be updated from CPU until a CPU waiting sync point is reached.
+        /// Then, write tracking will signal, wait for GPU sync (generated at the syncpoint) and flush these regions.
+        /// </summary>
+        /// <remarks>
+        /// This is null until at least one modification occurs.
+        /// </remarks>
+        private BufferModifiedRangeList _modifiedRanges = null;
+
         private CpuMultiRegionHandle _memoryTrackingGranular;
+
         private CpuRegionHandle _memoryTracking;
+
+        private readonly RegionSignal _externalFlushDelegate;
+        private readonly Action<ulong, ulong> _loadDelegate;
         private readonly Action<ulong, ulong> _modifiedDelegate;
+
         private int _sequenceNumber;
 
         private bool _useGranular;
+        private bool _syncActionRegistered;
 
         /// <summary>
         /// Creates a new instance of the buffer.
@@ -66,6 +83,8 @@ namespace Ryujinx.Graphics.Gpu.Memory
                 _memoryTracking = context.PhysicalMemory.BeginTracking(address, size);
             }
 
+            _externalFlushDelegate = new RegionSignal(ExternalFlush);
+            _loadDelegate = new Action<ulong, ulong>(LoadRegion);
             _modifiedDelegate = new Action<ulong, ulong>(RegionModified);
         }
 
@@ -116,12 +135,131 @@ namespace Ryujinx.Graphics.Gpu.Memory
                 if (_memoryTracking.Dirty && _context.SequenceNumber != _sequenceNumber)
                 {
                     _memoryTracking.Reprotect();
-                    _context.Renderer.SetBufferData(Handle, 0, _context.PhysicalMemory.GetSpan(Address, (int)Size));
+
+                    if (_modifiedRanges != null)
+                    {
+                        _modifiedRanges.ExcludeModifiedRegions(Address, Size, _loadDelegate);
+                    }
+                    else
+                    {
+                        _context.Renderer.SetBufferData(Handle, 0, _context.PhysicalMemory.GetSpan(Address, (int)Size));
+                    }
+                    
                     _sequenceNumber = _context.SequenceNumber;
                 }
             }
         }
 
+        /// <summary>
+        /// Ensure that the modified range list exists.
+        /// </summary>
+        private void EnsureRangeList()
+        {
+            if (_modifiedRanges == null)
+            {
+                _modifiedRanges = new BufferModifiedRangeList(_context);
+            }
+        }
+
+        /// <summary>
+        /// Signal that the given region of the buffer has been modified.
+        /// </summary>
+        /// <param name="address">The start address of the modified region</param>
+        /// <param name="size">The size of the modified region</param>
+        public void SignalModified(ulong address, ulong size)
+        {
+            EnsureRangeList();
+
+            _modifiedRanges.SignalModified(address, size);
+
+            if (!_syncActionRegistered)
+            {
+                _context.RegisterSyncAction(SyncAction);
+                _syncActionRegistered = true;
+            }
+        }
+
+        /// <summary>
+        /// Indicate that mofifications in a given region of this buffer have been overwritten.
+        /// </summary>
+        /// <param name="address">The start address of the region</param>
+        /// <param name="size">The size of the region</param>
+        public void ClearModified(ulong address, ulong size)
+        {
+            if (_modifiedRanges != null)
+            {
+                _modifiedRanges.Clear(address, size);
+            }
+        }
+
+        /// <summary>
+        /// Action to be performed when a syncpoint is reached after modification.
+        /// This will register read/write tracking to flush the buffer from GPU when its memory is used.
+        /// </summary>
+        private void SyncAction()
+        {
+            _syncActionRegistered = false;
+
+            if (_useGranular)
+            {
+                _modifiedRanges.GetRanges(Address, Size, (address, size) =>
+                {
+                    _memoryTrackingGranular.RegisterAction(address, size, _externalFlushDelegate);
+                    SynchronizeMemory(address, size);
+                });
+            }
+            else
+            {
+                _memoryTracking.RegisterAction(_externalFlushDelegate);
+                SynchronizeMemory(Address, Size);
+            }
+        }
+
+        /// <summary>
+        /// Inherit modified ranges from another buffer.
+        /// </summary>
+        /// <param name="from">The buffer to inherit from</param>
+        public void InheritModifiedRanges(Buffer from)
+        {
+            if (from._modifiedRanges != null)
+            {
+                if (from._syncActionRegistered && !_syncActionRegistered)
+                {
+                    _context.RegisterSyncAction(SyncAction);
+                    _syncActionRegistered = true;
+                }
+
+                EnsureRangeList();
+                _modifiedRanges.InheritRanges(from._modifiedRanges, (ulong address, ulong size) =>
+                {
+                    if (_useGranular)
+                    {
+                        _memoryTrackingGranular.RegisterAction(address, size, _externalFlushDelegate);
+                    }
+                    else
+                    {
+                        _memoryTracking.RegisterAction(_externalFlushDelegate);
+                    }
+                });
+            }
+        }
+
+        /// <summary>
+        /// Determine if a given region of the buffer has been modified, and must be flushed.
+        /// </summary>
+        /// <param name="address">The start address of the region</param>
+        /// <param name="size">The size of the region</param>
+        /// <returns></returns>
+        public bool IsModified(ulong address, ulong size)
+        {
+            if (_modifiedRanges != null)
+            {
+                return _modifiedRanges.HasRange(address, size);
+            }
+
+            return false;
+        }
+
         /// <summary>
         /// Indicate that a region of the buffer was modified, and must be loaded from memory.
         /// </summary>
@@ -141,6 +279,23 @@ namespace Ryujinx.Graphics.Gpu.Memory
                 mSize = maxSize;
             }
 
+            if (_modifiedRanges != null)
+            {
+                _modifiedRanges.ExcludeModifiedRegions(mAddress, mSize, _loadDelegate);
+            }
+            else
+            {
+                LoadRegion(mAddress, mSize);
+            }
+        }
+
+        /// <summary>
+        /// Load a region of the buffer from memory.
+        /// </summary>
+        /// <param name="mAddress">Start address of the modified region</param>
+        /// <param name="mSize">Size of the modified region</param>
+        private void LoadRegion(ulong mAddress, ulong mSize)
+        {
             int offset = (int)(mAddress - Address);
 
             _context.Renderer.SetBufferData(Handle, offset, _context.PhysicalMemory.GetSpan(mAddress, (int)mSize));
@@ -172,15 +327,62 @@ namespace Ryujinx.Graphics.Gpu.Memory
             _context.PhysicalMemory.WriteUntracked(address, data);
         }
 
+        /// <summary>
+        /// Align a given address and size region to page boundaries.
+        /// </summary>
+        /// <param name="address">The start address of the region</param>
+        /// <param name="size">The size of the region</param>
+        /// <returns>The page aligned address and size</returns>
+        private static (ulong address, ulong size) PageAlign(ulong address, ulong size)
+        {
+            ulong pageMask = MemoryManager.PageMask;
+            ulong rA = address & ~pageMask;
+            ulong rS = ((address + size + pageMask) & ~pageMask) - rA;
+            return (rA, rS);
+        }
+
+        /// <summary>
+        /// Flush modified ranges of the buffer from another thread.
+        /// This will flush all modifications made before the active SyncNumber was set, and may block to wait for GPU sync.
+        /// </summary>
+        /// <param name="address">Address of the memory action</param>
+        /// <param name="size">Size in bytes</param>
+        public void ExternalFlush(ulong address, ulong size)
+        {
+            _context.Renderer.BackgroundContextAction(() =>
+            {
+                var ranges = _modifiedRanges;
+
+                if (ranges != null)
+                {
+                    (address, size) = PageAlign(address, size);
+                    ranges.WaitForAndGetRanges(address, size, Flush);
+                }
+            });
+        }
+
+        /// <summary>
+        /// Called when part of the memory for this buffer has been unmapped.
+        /// Calls are from non-GPU threads.
+        /// </summary>
+        /// <param name="address">Start address of the unmapped region</param>
+        /// <param name="size">Size of the unmapped region</param>
+        public void Unmapped(ulong address, ulong size)
+        {
+            _modifiedRanges?.Clear(address, size);
+        }
+
         /// <summary>
         /// Disposes the host buffer.
         /// </summary>
         public void Dispose()
         {
-            _context.Renderer.DeleteBuffer(Handle);
+            _modifiedRanges?.Clear();
 
             _memoryTrackingGranular?.Dispose();
             _memoryTracking?.Dispose();
+
+            _context.Renderer.DeleteBuffer(Handle);
         }
     }
 }
\ No newline at end of file
diff --git a/Ryujinx.Graphics.Gpu/Memory/BufferBounds.cs b/Ryujinx.Graphics.Gpu/Memory/BufferBounds.cs
index 060171fb08..5569b9470b 100644
--- a/Ryujinx.Graphics.Gpu/Memory/BufferBounds.cs
+++ b/Ryujinx.Graphics.Gpu/Memory/BufferBounds.cs
@@ -1,3 +1,5 @@
+using Ryujinx.Graphics.Shader;
+
 namespace Ryujinx.Graphics.Gpu.Memory
 {
     /// <summary>
@@ -15,15 +17,22 @@ namespace Ryujinx.Graphics.Gpu.Memory
         /// </summary>
         public ulong Size { get; }
 
+        /// <summary>
+        /// Buffer usage flags.
+        /// </summary>
+        public BufferUsageFlags Flags { get; }
+
         /// <summary>
         /// Creates a new buffer region.
         /// </summary>
         /// <param name="address">Region address</param>
         /// <param name="size">Region size</param>
-        public BufferBounds(ulong address, ulong size)
+        /// <param name="flags">Buffer usage flags</param>
+        public BufferBounds(ulong address, ulong size, BufferUsageFlags flags = BufferUsageFlags.None)
         {
             Address = address;
             Size = size;
+            Flags = flags;
         }
     }
 }
\ No newline at end of file
diff --git a/Ryujinx.Graphics.Gpu/Memory/BufferManager.cs b/Ryujinx.Graphics.Gpu/Memory/BufferManager.cs
index 0c6431913a..cdcc5a370c 100644
--- a/Ryujinx.Graphics.Gpu/Memory/BufferManager.cs
+++ b/Ryujinx.Graphics.Gpu/Memory/BufferManager.cs
@@ -68,9 +68,10 @@ namespace Ryujinx.Graphics.Gpu.Memory
             /// <param name="index">Buffer slot</param>
             /// <param name="address">Region virtual address</param>
             /// <param name="size">Region size in bytes</param>
-            public void SetBounds(int index, ulong address, ulong size)
+            /// <param name="flags">Buffer usage flags</param>
+            public void SetBounds(int index, ulong address, ulong size, BufferUsageFlags flags = BufferUsageFlags.None)
             {
-                Buffers[index] = new BufferBounds(address, size);
+                Buffers[index] = new BufferBounds(address, size, flags);
             }
 
             /// <summary>
@@ -219,7 +220,8 @@ namespace Ryujinx.Graphics.Gpu.Memory
         /// <param name="index">Index of the storage buffer</param>
         /// <param name="gpuVa">Start GPU virtual address of the buffer</param>
         /// <param name="size">Size in bytes of the storage buffer</param>
-        public void SetComputeStorageBuffer(int index, ulong gpuVa, ulong size)
+        /// <param name="flags">Buffer usage flags</param>
+        public void SetComputeStorageBuffer(int index, ulong gpuVa, ulong size, BufferUsageFlags flags)
         {
             size += gpuVa & ((ulong)_context.Capabilities.StorageBufferOffsetAlignment - 1);
 
@@ -227,7 +229,7 @@ namespace Ryujinx.Graphics.Gpu.Memory
 
             ulong address = TranslateAndCreateBuffer(gpuVa, size);
 
-            _cpStorageBuffers.SetBounds(index, address, size);
+            _cpStorageBuffers.SetBounds(index, address, size, flags);
         }
 
         /// <summary>
@@ -238,7 +240,8 @@ namespace Ryujinx.Graphics.Gpu.Memory
         /// <param name="index">Index of the storage buffer</param>
         /// <param name="gpuVa">Start GPU virtual address of the buffer</param>
         /// <param name="size">Size in bytes of the storage buffer</param>
-        public void SetGraphicsStorageBuffer(int stage, int index, ulong gpuVa, ulong size)
+        /// <param name="flags">Buffer usage flags</param>
+        public void SetGraphicsStorageBuffer(int stage, int index, ulong gpuVa, ulong size, BufferUsageFlags flags)
         {
             size += gpuVa & ((ulong)_context.Capabilities.StorageBufferOffsetAlignment - 1);
 
@@ -252,7 +255,7 @@ namespace Ryujinx.Graphics.Gpu.Memory
                 _gpStorageBuffersDirty = true;
             }
 
-            _gpStorageBuffers[stage].SetBounds(index, address, size);
+            _gpStorageBuffers[stage].SetBounds(index, address, size, flags);
         }
 
         /// <summary>
@@ -385,6 +388,30 @@ namespace Ryujinx.Graphics.Gpu.Memory
             return mask;
         }
 
+        /// <summary>
+        /// Handles removal of buffers written to a memory region being unmapped.
+        /// </summary>
+        /// <param name="sender">Sender object</param>
+        /// <param name="e">Event arguments</param>
+        public void MemoryUnmappedHandler(object sender, UnmapEventArgs e)
+        {
+            Buffer[] overlaps = new Buffer[10];
+            int overlapCount;
+
+            ulong address = _context.MemoryManager.Translate(e.Address);
+            ulong size = e.Size;
+
+            lock (_buffers)
+            {
+                overlapCount = _buffers.FindOverlaps(address, size, ref overlaps);
+            }
+
+            for (int i = 0; i < overlapCount; i++)
+            {
+                overlaps[i].Unmapped(address, size);
+            }
+        }
+
         /// <summary>
         /// Performs address translation of the GPU virtual address, and creates a
         /// new buffer, if needed, for the specified range.
@@ -443,7 +470,12 @@ namespace Ryujinx.Graphics.Gpu.Memory
         /// <param name="size">Size in bytes of the buffer</param>
         private void CreateBufferAligned(ulong address, ulong size)
         {
-            int overlapsCount = _buffers.FindOverlapsNonOverlapping(address, size, ref _bufferOverlaps);
+            int overlapsCount;
+
+            lock (_buffers)
+            {
+                overlapsCount = _buffers.FindOverlapsNonOverlapping(address, size, ref _bufferOverlaps);
+            }
 
             if (overlapsCount != 0)
             {
@@ -463,15 +495,19 @@ namespace Ryujinx.Graphics.Gpu.Memory
                         address    = Math.Min(address,    buffer.Address);
                         endAddress = Math.Max(endAddress, buffer.EndAddress);
 
-                        buffer.SynchronizeMemory(buffer.Address, buffer.Size);
-
-                        _buffers.Remove(buffer);
+                        lock (_buffers)
+                        {
+                            _buffers.Remove(buffer);
+                        }
                     }
 
                     Buffer newBuffer = new Buffer(_context, address, endAddress - address);
                     newBuffer.SynchronizeMemory(address, endAddress - address);
 
-                    _buffers.Add(newBuffer);
+                    lock (_buffers)
+                    {
+                        _buffers.Add(newBuffer);
+                    }
 
                     for (int index = 0; index < overlapsCount; index++)
                     {
@@ -479,7 +515,10 @@ namespace Ryujinx.Graphics.Gpu.Memory
 
                         int dstOffset = (int)(buffer.Address - newBuffer.Address);
 
+                        buffer.SynchronizeMemory(buffer.Address, buffer.Size);
+
                         buffer.CopyTo(newBuffer, dstOffset);
+                        newBuffer.InheritModifiedRanges(buffer);
 
                         buffer.Dispose();
                     }
@@ -493,7 +532,10 @@ namespace Ryujinx.Graphics.Gpu.Memory
                 // No overlap, just create a new buffer.
                 Buffer buffer = new Buffer(_context, address, size);
 
-                _buffers.Add(buffer);
+                lock (_buffers)
+                {
+                    _buffers.Add(buffer);
+                }
             }
 
             ShrinkOverlapsBufferIfNeeded();
@@ -549,7 +591,7 @@ namespace Ryujinx.Graphics.Gpu.Memory
 
                 if (bounds.Address != 0)
                 {
-                    sRanges[bindingInfo.Binding] = GetBufferRange(bounds.Address, bounds.Size);
+                    sRanges[bindingInfo.Binding] = GetBufferRange(bounds.Address, bounds.Size, bounds.Flags.HasFlag(BufferUsageFlags.Write));
                 }
             }
 
@@ -722,7 +764,7 @@ namespace Ryujinx.Graphics.Gpu.Memory
 
                     if (bounds.Address != 0)
                     {
-                        ranges[bindingInfo.Binding] = GetBufferRange(bounds.Address, bounds.Size);
+                        ranges[bindingInfo.Binding] = GetBufferRange(bounds.Address, bounds.Size, bounds.Flags.HasFlag(BufferUsageFlags.Write));
                     }
                 }
             }
@@ -818,7 +860,17 @@ namespace Ryujinx.Graphics.Gpu.Memory
                 dstOffset,
                 (int)size);
 
-            dstBuffer.Flush(dstAddress, size);
+            if (srcBuffer.IsModified(srcAddress, size))
+            {
+                dstBuffer.SignalModified(dstAddress, size);
+            }
+            else
+            {
+                // Optimization: If the data being copied is already in memory, then copy it directly instead of flushing from GPU.
+
+                dstBuffer.ClearModified(dstAddress, size);
+                _context.PhysicalMemory.WriteUntracked(dstAddress, _context.PhysicalMemory.GetSpan(srcAddress, (int)size));
+            }
         }
 
         /// <summary>
@@ -840,7 +892,7 @@ namespace Ryujinx.Graphics.Gpu.Memory
 
             _context.Renderer.Pipeline.ClearBuffer(buffer.Handle, offset, (int)size, value);
 
-            buffer.Flush(address, size);
+            buffer.SignalModified(address, size);
         }
 
         /// <summary>
@@ -848,10 +900,11 @@ namespace Ryujinx.Graphics.Gpu.Memory
         /// </summary>
         /// <param name="address">Start address of the memory range</param>
         /// <param name="size">Size in bytes of the memory range</param>
+        /// <param name="write">Whether the buffer will be written to by this use</param>
         /// <returns>The buffer sub-range for the given range</returns>
-        private BufferRange GetBufferRange(ulong address, ulong size)
+        private BufferRange GetBufferRange(ulong address, ulong size, bool write = false)
         {
-            return GetBuffer(address, size).GetRange(address, size);
+            return GetBuffer(address, size, write).GetRange(address, size);
         }
 
         /// <summary>
@@ -860,20 +913,32 @@ namespace Ryujinx.Graphics.Gpu.Memory
         /// </summary>
         /// <param name="address">Start address of the memory range</param>
         /// <param name="size">Size in bytes of the memory range</param>
+        /// <param name="write">Whether the buffer will be written to by this use</param>
         /// <returns>The buffer where the range is fully contained</returns>
-        private Buffer GetBuffer(ulong address, ulong size)
+        private Buffer GetBuffer(ulong address, ulong size, bool write = false)
         {
             Buffer buffer;
 
             if (size != 0)
             {
-                buffer = _buffers.FindFirstOverlap(address, size);
+                lock (_buffers)
+                {
+                    buffer = _buffers.FindFirstOverlap(address, size);
+                }
 
                 buffer.SynchronizeMemory(address, size);
+
+                if (write)
+                {
+                    buffer.SignalModified(address, size);
+                }
             }
             else
             {
-                buffer = _buffers.FindFirstOverlap(address, 1);
+                lock (_buffers)
+                {
+                    buffer = _buffers.FindFirstOverlap(address, 1);
+                }
             }
 
             return buffer;
@@ -888,7 +953,12 @@ namespace Ryujinx.Graphics.Gpu.Memory
         {
             if (size != 0)
             {
-                Buffer buffer = _buffers.FindFirstOverlap(address, size);
+                Buffer buffer;
+
+                lock (_buffers)
+                {
+                    buffer = _buffers.FindFirstOverlap(address, size);
+                }
 
                 buffer.SynchronizeMemory(address, size);
             }
@@ -900,9 +970,12 @@ namespace Ryujinx.Graphics.Gpu.Memory
         /// </summary>
         public void Dispose()
         {
-            foreach (Buffer buffer in _buffers)
+            lock (_buffers)
             {
-                buffer.Dispose();
+                foreach (Buffer buffer in _buffers)
+                {
+                    buffer.Dispose();
+                }
             }
         }
     }
diff --git a/Ryujinx.Graphics.Gpu/Memory/BufferModifiedRangeList.cs b/Ryujinx.Graphics.Gpu/Memory/BufferModifiedRangeList.cs
new file mode 100644
index 0000000000..594dd06648
--- /dev/null
+++ b/Ryujinx.Graphics.Gpu/Memory/BufferModifiedRangeList.cs
@@ -0,0 +1,367 @@
+using Ryujinx.Memory.Range;
+using System;
+using System.Linq;
+
+namespace Ryujinx.Graphics.Gpu.Memory
+{
+    /// <summary>
+    /// A range within a buffer that has been modified by the GPU.
+    /// </summary>
+    class BufferModifiedRange : IRange
+    {
+        /// <summary>
+        /// Start address of the range in guest memory.
+        /// </summary>
+        public ulong Address { get; }
+
+        /// <summary>
+        /// Size of the range in bytes.
+        /// </summary>
+        public ulong Size { get; }
+
+        /// <summary>
+        /// End address of the range in guest memory.
+        /// </summary>
+        public ulong EndAddress => Address + Size;
+
+        /// <summary>
+        /// The GPU sync number at the time of the last modification.
+        /// </summary>
+        public ulong SyncNumber { get; internal set; }
+
+        /// <summary>
+        /// Creates a new instance of a modified range.
+        /// </summary>
+        /// <param name="address">Start address of the range</param>
+        /// <param name="size">Size of the range in bytes</param>
+        /// <param name="syncNumber">The GPU sync number at the time of creation</param>
+        public BufferModifiedRange(ulong address, ulong size, ulong syncNumber)
+        {
+            Address = address;
+            Size = size;
+            SyncNumber = syncNumber;
+        }
+
+        /// <summary>
+        /// Checks if a given range overlaps with the modified range.
+        /// </summary>
+        /// <param name="address">Start address of the range</param>
+        /// <param name="size">Size in bytes of the range</param>
+        /// <returns>True if the range overlaps, false otherwise</returns>
+        public bool OverlapsWith(ulong address, ulong size)
+        {
+            return Address < address + size && address < EndAddress;
+        }
+    }
+
+    /// <summary>
+    /// A structure used to track GPU modified ranges within a buffer.
+    /// </summary>
+    class BufferModifiedRangeList : RangeList<BufferModifiedRange>
+    {
+        private GpuContext _context;
+
+        private object _lock = new object();
+
+        // The list can be accessed from both the GPU thread, and a background thread.
+        private BufferModifiedRange[] _foregroundOverlaps = new BufferModifiedRange[1];
+        private BufferModifiedRange[] _backgroundOverlaps = new BufferModifiedRange[1];
+
+        /// <summary>
+        /// Creates a new instance of a modified range list.
+        /// </summary>
+        /// <param name="context">GPU context that the buffer range list belongs to</param>
+        public BufferModifiedRangeList(GpuContext context)
+        {
+            _context = context;
+        }
+
+        /// <summary>
+        /// Given an input range, calls the given action with sub-ranges which exclude any of the modified regions.
+        /// </summary>
+        /// <param name="address">Start address of the query range</param>
+        /// <param name="size">Size of the query range in bytes</param>
+        /// <param name="action">Action to perform for each remaining sub-range of the input range</param>
+        public void ExcludeModifiedRegions(ulong address, ulong size, Action<ulong, ulong> action)
+        {
+            lock (_lock)
+            {
+                // Slices a given region using the modified regions in the list. Calls the action for the new slices.
+                int count = FindOverlapsNonOverlapping(address, size, ref _foregroundOverlaps);
+
+                for (int i = 0; i < count; i++)
+                {
+                    BufferModifiedRange overlap = _foregroundOverlaps[i];
+                    
+                    if (overlap.Address > address)
+                    {
+                        // The start of the remaining region is uncovered by this overlap. Call the action for it.
+                        action(address, overlap.Address - address);
+                    }
+
+                    // Remaining region is after this overlap.
+                    size -= overlap.EndAddress - address;
+                    address = overlap.EndAddress;
+                }
+
+                if ((long)size > 0)
+                {
+                    // If there is any region left after removing the overlaps, signal it.
+                    action(address, size);
+                }
+            }
+        }
+
+        /// <summary>
+        /// Signal that a region of the buffer has been modified, and add the new region to the range list.
+        /// Any overlapping ranges will be (partially) removed.
+        /// </summary>
+        /// <param name="address">Start address of the modified region</param>
+        /// <param name="size">Size of the modified region in bytes</param>
+        public void SignalModified(ulong address, ulong size)
+        {
+            // Must lock, as this can affect flushes from the background thread.
+            lock (_lock)
+            {
+                // We may overlap with some existing modified regions. They must be cut into by the new entry.
+                int count = FindOverlapsNonOverlapping(address, size, ref _foregroundOverlaps);
+
+                ulong endAddress = address + size;
+                ulong syncNumber = _context.SyncNumber;
+
+                for (int i = 0; i < count; i++)
+                {
+                    // The overlaps must be removed or split.
+
+                    BufferModifiedRange overlap = _foregroundOverlaps[i];
+
+                    if (overlap.Address == address && overlap.Size == size)
+                    {
+                        // Region already exists. Just update the existing sync number.
+                        overlap.SyncNumber = syncNumber;
+
+                        return;
+                    }
+
+                    Remove(overlap);
+
+                    if (overlap.Address < address && overlap.EndAddress > address)
+                    {
+                        // A split item must be created behind this overlap.
+
+                        Add(new BufferModifiedRange(overlap.Address, address - overlap.Address, overlap.SyncNumber));
+                    }
+
+                    if (overlap.Address < endAddress && overlap.EndAddress > endAddress)
+                    {
+                        // A split item must be created after this overlap.
+
+                        Add(new BufferModifiedRange(endAddress, overlap.EndAddress - endAddress, overlap.SyncNumber));
+                    }
+                }
+
+                Add(new BufferModifiedRange(address, size, syncNumber));
+            }
+        }
+
+        /// <summary>
+        /// Gets modified ranges within the specified region, and then fires the given action for each range individually.
+        /// </summary>
+        /// <param name="address">Start address to query</param>
+        /// <param name="size">Size to query</param>
+        /// <param name="rangeAction">The action to call for each modified range</param>
+        public void GetRanges(ulong address, ulong size, Action<ulong, ulong> rangeAction)
+        {
+            int count = 0;
+
+            // Range list must be consistent for this operation.
+            lock (_lock)
+            {
+                count = FindOverlapsNonOverlapping(address, size, ref _foregroundOverlaps);
+            }
+
+            for (int i = 0; i < count; i++)
+            {
+                BufferModifiedRange overlap = _foregroundOverlaps[i];
+                rangeAction(overlap.Address, overlap.Size);
+            }
+        }
+
+        /// <summary>
+        /// Queries if a range exists within the specified region.
+        /// </summary>
+        /// <param name="address">Start address to query</param>
+        /// <param name="size">Size to query</param>
+        /// <returns>True if a range exists in the specified region, false otherwise</returns>
+        public bool HasRange(ulong address, ulong size)
+        {
+            // Range list must be consistent for this operation.
+            lock (_lock)
+            {
+                return FindOverlapsNonOverlapping(address, size, ref _foregroundOverlaps) > 0;
+            }
+        }
+
+        /// <summary>
+        /// Gets modified ranges within the specified region, waits on ones from a previous sync number,
+        /// and then fires the given action for each range individually.
+        /// </summary>
+        /// <remarks>
+        /// This function assumes it is called from the background thread.
+        /// Modifications from the current sync number are ignored because the guest should not expect them to be available yet.
+        /// They will remain reserved, so that any data sync prioritizes the data in the GPU.
+        /// </remarks>
+        /// <param name="address">Start address to query</param>
+        /// <param name="size">Size to query</param>
+        /// <param name="rangeAction">The action to call for each modified range</param>
+        public void WaitForAndGetRanges(ulong address, ulong size, Action<ulong, ulong> rangeAction)
+        {
+            ulong endAddress = address + size;
+            ulong currentSync = _context.SyncNumber;
+
+            int rangeCount = 0;
+
+            // Range list must be consistent for this operation
+            lock (_lock)
+            {
+                rangeCount = FindOverlapsNonOverlapping(address, size, ref _backgroundOverlaps);
+            }
+
+            if (rangeCount == 0)
+            {
+                return;
+            }
+
+            // First, determine which syncpoint to wait on.
+            // This is the latest syncpoint that is not equal to the current sync.
+
+            long highestDiff = long.MinValue;
+
+            for (int i = 0; i < rangeCount; i++)
+            {
+                BufferModifiedRange overlap = _backgroundOverlaps[i];
+
+                long diff = (long)(overlap.SyncNumber - currentSync);
+
+                if (diff < 0 && diff > highestDiff)
+                {
+                    highestDiff = diff;
+                }
+            }
+
+            if (highestDiff == long.MinValue)
+            {
+                return;
+            }
+
+            // Wait for the syncpoint.
+            _context.Renderer.WaitSync(currentSync + (ulong)highestDiff);
+
+            // Flush and remove all regions with the older syncpoint.
+            lock (_lock)
+            {
+                for (int i = 0; i < rangeCount; i++)
+                {
+                    BufferModifiedRange overlap = _backgroundOverlaps[i];
+
+                    long diff = (long)(overlap.SyncNumber - currentSync);
+
+                    if (diff <= highestDiff)
+                    {
+                        ulong clampAddress = Math.Max(address, overlap.Address);
+                        ulong clampEnd = Math.Min(endAddress, overlap.EndAddress);
+
+                        ClearPart(overlap, clampAddress, clampEnd);
+
+                        rangeAction(clampAddress, clampEnd - clampAddress);
+                    }
+                }
+            }
+        }
+
+        /// <summary>
+        /// Inherit ranges from another modified range list.
+        /// </summary>
+        /// <param name="ranges">The range list to inherit from</param>
+        /// <param name="rangeAction">The action to call for each modified range</param>
+        public void InheritRanges(BufferModifiedRangeList ranges, Action<ulong, ulong> rangeAction)
+        {
+            BufferModifiedRange[] inheritRanges;
+
+            lock (ranges._lock)
+            {
+                inheritRanges = ranges.ToArray();
+            }
+
+            lock (_lock)
+            {
+                foreach (BufferModifiedRange range in inheritRanges)
+                {
+                    Add(range);
+                }
+            }
+
+            ulong currentSync = _context.SyncNumber;
+            foreach (BufferModifiedRange range in inheritRanges)
+            {
+                if (range.SyncNumber != currentSync)
+                {
+                    rangeAction(range.Address, range.Size);
+                }
+            }
+        }
+
+        private void ClearPart(BufferModifiedRange overlap, ulong address, ulong endAddress)
+        {
+            Remove(overlap);
+
+            // If the overlap extends outside of the clear range, make sure those parts still exist.
+
+            if (overlap.Address < address)
+            {
+                Add(new BufferModifiedRange(overlap.Address, address - overlap.Address, overlap.SyncNumber));
+            }
+
+            if (overlap.EndAddress > endAddress)
+            {
+                Add(new BufferModifiedRange(endAddress, overlap.EndAddress - endAddress, overlap.SyncNumber));
+            }
+        }
+
+        /// <summary>
+        /// Clear modified ranges within the specified area.
+        /// </summary>
+        /// <param name="address">Start address to clear</param>
+        /// <param name="size">Size to clear</param>
+        public void Clear(ulong address, ulong size)
+        {
+            lock (_lock)
+            {
+                // This function can be called from any thread, so it cannot use the arrays for background or foreground.
+                BufferModifiedRange[] toClear = new BufferModifiedRange[1];
+
+                int rangeCount = FindOverlapsNonOverlapping(address, size, ref toClear);
+
+                ulong endAddress = address + size;
+
+                for (int i = 0; i < rangeCount; i++)
+                {
+                    BufferModifiedRange overlap = toClear[i];
+
+                    ClearPart(overlap, address, endAddress);
+                }
+            }
+        }
+
+        /// <summary>
+        /// Clear all modified ranges.
+        /// </summary>
+        public void Clear()
+        {
+            lock (_lock)
+            {
+                Items.Clear();
+            }
+        }
+    }
+}
diff --git a/Ryujinx.Graphics.Gpu/Memory/MemoryManager.cs b/Ryujinx.Graphics.Gpu/Memory/MemoryManager.cs
index 3da22b22f5..7021cd2090 100644
--- a/Ryujinx.Graphics.Gpu/Memory/MemoryManager.cs
+++ b/Ryujinx.Graphics.Gpu/Memory/MemoryManager.cs
@@ -61,6 +61,7 @@ namespace Ryujinx.Graphics.Gpu.Memory
         /// </summary>
         /// <param name="va">GPU virtual address where the data is located</param>
         /// <param name="size">Size of the data</param>
+        /// <param name="tracked">True if read tracking is triggered on the span</param>
         /// <returns>The span of the data at the specified memory location</returns>
         public ReadOnlySpan<byte> GetSpan(ulong va, int size, bool tracked = false)
         {
diff --git a/Ryujinx.Graphics.Gpu/Shader/ShaderCache.cs b/Ryujinx.Graphics.Gpu/Shader/ShaderCache.cs
index 20e1c9f847..1dbe1805aa 100644
--- a/Ryujinx.Graphics.Gpu/Shader/ShaderCache.cs
+++ b/Ryujinx.Graphics.Gpu/Shader/ShaderCache.cs
@@ -34,7 +34,7 @@ namespace Ryujinx.Graphics.Gpu.Shader
         /// <summary>
         /// Version of the codegen (to be changed when codegen or guest format change).
         /// </summary>
-        private const ulong ShaderCodeGenVersion = 1910;
+        private const ulong ShaderCodeGenVersion = 1790;
 
         /// <summary>
         /// Creates a new instance of the shader cache.
diff --git a/Ryujinx.Graphics.OpenGL/Renderer.cs b/Ryujinx.Graphics.OpenGL/Renderer.cs
index acbc24de0f..4a3f51bfd3 100644
--- a/Ryujinx.Graphics.OpenGL/Renderer.cs
+++ b/Ryujinx.Graphics.OpenGL/Renderer.cs
@@ -26,6 +26,8 @@ namespace Ryujinx.Graphics.OpenGL
         private TextureCopy _backgroundTextureCopy;
         internal TextureCopy TextureCopy => BackgroundContextWorker.InBackground ? _backgroundTextureCopy : _textureCopy;
 
+        private Sync _sync;
+
         internal ResourcePool ResourcePool { get; }
 
         public string GpuVendor { get; private set; }
@@ -39,6 +41,7 @@ namespace Ryujinx.Graphics.OpenGL
             _window = new Window(this);
             _textureCopy = new TextureCopy(this);
             _backgroundTextureCopy = new TextureCopy(this);
+            _sync = new Sync();
             ResourcePool = new ResourcePool();
         }
 
@@ -108,6 +111,7 @@ namespace Ryujinx.Graphics.OpenGL
 
         public void PreFrame()
         {
+            _sync.Cleanup();
             ResourcePool.Tick();
         }
 
@@ -164,6 +168,7 @@ namespace Ryujinx.Graphics.OpenGL
             _pipeline.Dispose();
             _window.Dispose();
             _counters.Dispose();
+            _sync.Dispose();
         }
 
         public IProgram LoadProgramBinary(byte[] programBinary)
@@ -179,5 +184,15 @@ namespace Ryujinx.Graphics.OpenGL
 
             return null;
         }
+
+        public void CreateSync(ulong id)
+        {
+            _sync.Create(id);
+        }
+
+        public void WaitSync(ulong id)
+        {
+            _sync.Wait(id);
+        }
     }
 }
diff --git a/Ryujinx.Graphics.OpenGL/Sync.cs b/Ryujinx.Graphics.OpenGL/Sync.cs
new file mode 100644
index 0000000000..97a71fc4b9
--- /dev/null
+++ b/Ryujinx.Graphics.OpenGL/Sync.cs
@@ -0,0 +1,129 @@
+using OpenTK.Graphics.OpenGL;
+using Ryujinx.Common.Logging;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+
+namespace Ryujinx.Graphics.OpenGL
+{
+    class Sync : IDisposable
+    {
+        private class SyncHandle
+        {
+            public ulong ID;
+            public IntPtr Handle;
+        }
+
+        private ulong _firstHandle = 0;
+
+        private List<SyncHandle> Handles = new List<SyncHandle>();
+
+        public void Create(ulong id)
+        {
+            SyncHandle handle = new SyncHandle
+            {
+                ID = id,
+                Handle = GL.FenceSync(SyncCondition.SyncGpuCommandsComplete, WaitSyncFlags.None)
+            };
+
+            lock (Handles)
+            {
+                Handles.Add(handle);
+            }
+        }
+
+        public void Wait(ulong id)
+        {
+            SyncHandle result = null;
+
+            lock (Handles)
+            {
+                if ((long)(_firstHandle - id) > 0)
+                {
+                    return; // The handle has already been signalled or deleted.
+                }
+
+                foreach (SyncHandle handle in Handles)
+                {
+                    if (handle.ID == id)
+                    {
+                        result = handle;
+                        break;
+                    }
+                }
+            }
+
+            if (result != null)
+            {
+                lock (result)
+                {
+                    if (result.Handle == IntPtr.Zero)
+                    {
+                        return;
+                    }
+
+                    WaitSyncStatus syncResult = GL.ClientWaitSync(result.Handle, ClientWaitSyncFlags.SyncFlushCommandsBit, 1000000000);
+                    
+                    if (syncResult == WaitSyncStatus.TimeoutExpired)
+                    {
+                        Logger.Error?.PrintMsg(LogClass.Gpu, $"GL Sync Object {result.ID} failed to signal within 1000ms. Continuing...");
+                    }
+                }
+            }
+        }
+
+        public void Cleanup()
+        {
+            // Iterate through handles and remove any that have already been signalled.
+
+            while (true)
+            {
+                SyncHandle first = null;
+                lock (Handles)
+                {
+                    first = Handles.FirstOrDefault();
+                }
+
+                if (first == null) break;
+
+                WaitSyncStatus syncResult = GL.ClientWaitSync(first.Handle, ClientWaitSyncFlags.SyncFlushCommandsBit, 0);
+
+                if (syncResult == WaitSyncStatus.AlreadySignaled)
+                {
+                    // Delete the sync object.
+                    lock (Handles)
+                    {
+                        lock (first)
+                        {
+                            _firstHandle = first.ID + 1;
+                            Handles.RemoveAt(0);
+                            GL.DeleteSync(first.Handle);
+                            first.Handle = IntPtr.Zero;
+                        }
+                    }
+                } else
+                {
+                    // This sync handle and any following have not been reached yet.
+                    break;
+                }
+            }
+        }
+
+        public void Dispose()
+        {
+            lock (Handles)
+            {
+                foreach (SyncHandle handle in Handles)
+                {
+                    lock (handle)
+                    {
+                        GL.DeleteSync(handle.Handle);
+                        handle.Handle = IntPtr.Zero;
+                    }
+                }
+
+                Handles.Clear();
+            }
+        }
+    }
+}
diff --git a/Ryujinx.Graphics.Shader/BufferDescriptor.cs b/Ryujinx.Graphics.Shader/BufferDescriptor.cs
index 53a4fb164f..a3af6e41f9 100644
--- a/Ryujinx.Graphics.Shader/BufferDescriptor.cs
+++ b/Ryujinx.Graphics.Shader/BufferDescriptor.cs
@@ -4,11 +4,21 @@ namespace Ryujinx.Graphics.Shader
     {
         public readonly int Binding;
         public readonly int Slot;
+        public BufferUsageFlags Flags;
 
         public BufferDescriptor(int binding, int slot)
         {
             Binding = binding;
             Slot = slot;
+
+            Flags = BufferUsageFlags.None;
+        }
+
+        public BufferDescriptor SetFlag(BufferUsageFlags flag)
+        {
+            Flags |= flag;
+
+            return this;
         }
     }
 }
\ No newline at end of file
diff --git a/Ryujinx.Graphics.Shader/BufferUsageFlags.cs b/Ryujinx.Graphics.Shader/BufferUsageFlags.cs
new file mode 100644
index 0000000000..657546cb71
--- /dev/null
+++ b/Ryujinx.Graphics.Shader/BufferUsageFlags.cs
@@ -0,0 +1,18 @@
+using System;
+
+namespace Ryujinx.Graphics.Shader
+{
+    /// <summary>
+    /// Flags that indicate how a buffer will be used in a shader.
+    /// </summary>
+    [Flags]
+    public enum BufferUsageFlags
+    {
+        None = 0,
+
+        /// <summary>
+        /// Buffer is written to.
+        /// </summary>
+        Write = 1 << 0
+    }
+}
diff --git a/Ryujinx.Graphics.Shader/CodeGen/Glsl/Instructions/InstGenMemory.cs b/Ryujinx.Graphics.Shader/CodeGen/Glsl/Instructions/InstGenMemory.cs
index 6244f68b62..3bfc064752 100644
--- a/Ryujinx.Graphics.Shader/CodeGen/Glsl/Instructions/InstGenMemory.cs
+++ b/Ryujinx.Graphics.Shader/CodeGen/Glsl/Instructions/InstGenMemory.cs
@@ -298,6 +298,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl.Instructions
 
             string src = TypeConversion.ReinterpretCast(context, src3, srcType, VariableType.U32);
 
+            SetStorageWriteFlag(context, src1, context.Config.Stage);
             string sb = GetStorageBufferAccessor(indexExpr, offsetExpr, context.Config.Stage);
 
             return $"{sb} = {src}";
@@ -629,6 +630,32 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl.Instructions
             }
         }
 
+        private static void SetStorageWriteFlag(CodeGenContext context, IAstNode indexExpr, ShaderStage stage)
+        {
+            // Attempt to find a BufferDescriptor with the given index.
+            // If it cannot be resolved or is not constant, assume that the slot expression could potentially index any of them,
+            // and set the flag on all storage buffers.
+
+            int index = -1;
+
+            if (indexExpr is AstOperand operand && operand.Type == OperandType.Constant)
+            {
+                index = context.SBufferDescriptors.FindIndex(buffer => buffer.Slot == operand.Value);
+            }
+
+            if (index != -1)
+            {
+                context.SBufferDescriptors[index] = context.SBufferDescriptors[index].SetFlag(BufferUsageFlags.Write);
+            }
+            else
+            {
+                for (int i = 0; i < context.SBufferDescriptors.Count; i++)
+                {
+                    context.SBufferDescriptors[i] = context.SBufferDescriptors[i].SetFlag(BufferUsageFlags.Write);
+                }
+            }
+        }
+
         private static string GetStorageBufferAccessor(string slotExpr, string offsetExpr, ShaderStage stage)
         {
             string sbName = OperandManager.GetShaderStagePrefix(stage);
diff --git a/Ryujinx.Memory.Tests/MockVirtualMemoryManager.cs b/Ryujinx.Memory.Tests/MockVirtualMemoryManager.cs
index 62b3ee4a10..0dd2ce4618 100644
--- a/Ryujinx.Memory.Tests/MockVirtualMemoryManager.cs
+++ b/Ryujinx.Memory.Tests/MockVirtualMemoryManager.cs
@@ -6,6 +6,8 @@ namespace Ryujinx.Memory.Tests
     {
         public bool NoMappings;
 
+        public event Action<ulong, ulong, MemoryPermission> OnProtect;
+
         public MockVirtualMemoryManager(ulong size, int pageSize)
         {
         }
@@ -82,6 +84,7 @@ namespace Ryujinx.Memory.Tests
 
         public void TrackingReprotect(ulong va, ulong size, MemoryPermission protection)
         {
+            OnProtect?.Invoke(va, size, protection);
         }
     }
 }
diff --git a/Ryujinx.Memory.Tests/TrackingTests.cs b/Ryujinx.Memory.Tests/TrackingTests.cs
index 25c230922e..a9cc6df371 100644
--- a/Ryujinx.Memory.Tests/TrackingTests.cs
+++ b/Ryujinx.Memory.Tests/TrackingTests.cs
@@ -421,5 +421,68 @@ namespace Ryujinx.Memory.Tests
 
             Assert.AreEqual((0, 0), _tracking.GetRegionCounts());
         }
+
+        [Test]
+        public void ReadAndWriteProtection()
+        {
+            MemoryPermission protection = MemoryPermission.ReadAndWrite;
+
+            _memoryManager.OnProtect += (va, size, newProtection) =>
+            {
+                Assert.AreEqual((0, PageSize), (va, size)); // Should protect the exact region all the operations use.
+                protection = newProtection;
+            };
+
+            RegionHandle handle = _tracking.BeginTracking(0, PageSize);
+
+            // After creating the handle, there is no protection yet.
+            Assert.AreEqual(MemoryPermission.ReadAndWrite, protection);
+
+            bool dirtyInitial = handle.Dirty;
+            Assert.True(dirtyInitial); // Handle starts dirty.
+
+            handle.Reprotect();
+
+            // After a reprotect, there is write protection, which will set a dirty flag when any write happens.
+            Assert.AreEqual(MemoryPermission.Read, protection);
+
+            (ulong address, ulong size)? readTrackingTriggered = null;
+            handle.RegisterAction((address, size) =>
+            {
+                readTrackingTriggered = (address, size);
+            });
+
+            // Registering an action adds read/write protection.
+            Assert.AreEqual(MemoryPermission.None, protection);
+
+            bool dirtyAfterReprotect = handle.Dirty;
+            Assert.False(dirtyAfterReprotect); // Handle is no longer dirty.
+
+            // First we should read, which will trigger the action. This _should not_ remove write protection on the memory.
+
+            _tracking.VirtualMemoryEvent(0, 4, false);
+
+            bool dirtyAfterRead = handle.Dirty;
+            Assert.False(dirtyAfterRead); // Not dirtied, as this was a read.
+
+            Assert.AreEqual(readTrackingTriggered, (0UL, 4UL)); // Read action was triggered.
+
+            Assert.AreEqual(MemoryPermission.Read, protection); // Write protection is still present.
+
+            readTrackingTriggered = null;
+
+            // Now, perform a write.
+
+            _tracking.VirtualMemoryEvent(0, 4, true);
+
+            bool dirtyAfterWriteAfterRead = handle.Dirty;
+            Assert.True(dirtyAfterWriteAfterRead); // Should be dirty.
+
+            Assert.AreEqual(MemoryPermission.ReadAndWrite, protection); // All protection is now be removed from the memory.
+
+            Assert.IsNull(readTrackingTriggered); // Read tracking was removed when the action fired, as it can only fire once.
+
+            handle.Dispose();
+        }
     }
 }
diff --git a/Ryujinx.Memory/Range/RangeList.cs b/Ryujinx.Memory/Range/RangeList.cs
index 3c8c4c4cdd..fd26065632 100644
--- a/Ryujinx.Memory/Range/RangeList.cs
+++ b/Ryujinx.Memory/Range/RangeList.cs
@@ -12,16 +12,16 @@ namespace Ryujinx.Memory.Range
     {
         private const int ArrayGrowthSize = 32;
 
-        private readonly List<T> _items;
+        protected readonly List<T> Items;
 
-        public int Count => _items.Count;
+        public int Count => Items.Count;
 
         /// <summary>
         /// Creates a new range list.
         /// </summary>
         public RangeList()
         {
-            _items = new List<T>();
+            Items = new List<T>();
         }
 
         /// <summary>
@@ -37,7 +37,7 @@ namespace Ryujinx.Memory.Range
                 index = ~index;
             }
 
-            _items.Insert(index, item);
+            Items.Insert(index, item);
         }
 
         /// <summary>
@@ -51,21 +51,21 @@ namespace Ryujinx.Memory.Range
 
             if (index >= 0)
             {
-                while (index > 0 && _items[index - 1].Address == item.Address)
+                while (index > 0 && Items[index - 1].Address == item.Address)
                 {
                     index--;
                 }
 
-                while (index < _items.Count)
+                while (index < Items.Count)
                 {
-                    if (_items[index].Equals(item))
+                    if (Items[index].Equals(item))
                     {
-                        _items.RemoveAt(index);
+                        Items.RemoveAt(index);
 
                         return true;
                     }
 
-                    if (_items[index].Address > item.Address)
+                    if (Items[index].Address > item.Address)
                     {
                         break;
                     }
@@ -110,7 +110,7 @@ namespace Ryujinx.Memory.Range
                 return default(T);
             }
 
-            return _items[index];
+            return Items[index];
         }
 
         /// <summary>
@@ -137,7 +137,7 @@ namespace Ryujinx.Memory.Range
 
             ulong endAddress = address + size;
 
-            foreach (T item in _items)
+            foreach (T item in Items)
             {
                 if (item.Address >= endAddress)
                 {
@@ -196,7 +196,7 @@ namespace Ryujinx.Memory.Range
 
             if (index >= 0)
             {
-                while (index > 0 && _items[index - 1].OverlapsWith(address, size))
+                while (index > 0 && Items[index - 1].OverlapsWith(address, size))
                 {
                     index--;
                 }
@@ -208,9 +208,9 @@ namespace Ryujinx.Memory.Range
                         Array.Resize(ref output, outputIndex + ArrayGrowthSize);
                     }
 
-                    output[outputIndex++] = _items[index++];
+                    output[outputIndex++] = Items[index++];
                 }
-                while (index < _items.Count && _items[index].OverlapsWith(address, size));
+                while (index < Items.Count && Items[index].OverlapsWith(address, size));
             }
 
             return outputIndex;
@@ -230,14 +230,14 @@ namespace Ryujinx.Memory.Range
 
             if (index >= 0)
             {
-                while (index > 0 && _items[index - 1].Address == address)
+                while (index > 0 && Items[index - 1].Address == address)
                 {
                     index--;
                 }
 
-                while (index < _items.Count)
+                while (index < Items.Count)
                 {
-                    T overlap = _items[index++];
+                    T overlap = Items[index++];
 
                     if (overlap.Address != address)
                     {
@@ -264,7 +264,7 @@ namespace Ryujinx.Memory.Range
         private int BinarySearch(ulong address)
         {
             int left  = 0;
-            int right = _items.Count - 1;
+            int right = Items.Count - 1;
 
             while (left <= right)
             {
@@ -272,7 +272,7 @@ namespace Ryujinx.Memory.Range
 
                 int middle = left + (range >> 1);
 
-                T item = _items[middle];
+                T item = Items[middle];
 
                 if (item.Address == address)
                 {
@@ -301,7 +301,7 @@ namespace Ryujinx.Memory.Range
         private int BinarySearch(ulong address, ulong size)
         {
             int left  = 0;
-            int right = _items.Count - 1;
+            int right = Items.Count - 1;
 
             while (left <= right)
             {
@@ -309,7 +309,7 @@ namespace Ryujinx.Memory.Range
 
                 int middle = left + (range >> 1);
 
-                T item = _items[middle];
+                T item = Items[middle];
 
                 if (item.OverlapsWith(address, size))
                 {
@@ -331,12 +331,12 @@ namespace Ryujinx.Memory.Range
 
         public IEnumerator<T> GetEnumerator()
         {
-            return _items.GetEnumerator();
+            return Items.GetEnumerator();
         }
 
         IEnumerator IEnumerable.GetEnumerator()
         {
-            return _items.GetEnumerator();
+            return Items.GetEnumerator();
         }
     }
 }
\ No newline at end of file
diff --git a/Ryujinx.Memory/Tracking/MultiRegionHandle.cs b/Ryujinx.Memory/Tracking/MultiRegionHandle.cs
index 02ae3a8bb8..df154bc220 100644
--- a/Ryujinx.Memory/Tracking/MultiRegionHandle.cs
+++ b/Ryujinx.Memory/Tracking/MultiRegionHandle.cs
@@ -123,6 +123,17 @@ namespace Ryujinx.Memory.Tracking
             }
         }
 
+        public void RegisterAction(ulong address, ulong size, RegionSignal action)
+        {
+            int startHandle = (int)((address - Address) / Granularity);
+            int lastHandle = (int)((address + (size - 1) - Address) / Granularity);
+
+            for (int i = startHandle; i <= lastHandle; i++)
+            {
+                _handles[i].RegisterAction(action);
+            }
+        }
+
         public void Dispose()
         {
             foreach (var handle in _handles)
diff --git a/Ryujinx.Memory/Tracking/RegionHandle.cs b/Ryujinx.Memory/Tracking/RegionHandle.cs
index 96898c214f..3ddcb6db48 100644
--- a/Ryujinx.Memory/Tracking/RegionHandle.cs
+++ b/Ryujinx.Memory/Tracking/RegionHandle.cs
@@ -24,6 +24,7 @@ namespace Ryujinx.Memory.Tracking
         private readonly MemoryTracking _tracking;
 
         internal MemoryPermission RequiredPermission => _preAction != null ? MemoryPermission.None : (Dirty ? MemoryPermission.ReadAndWrite : MemoryPermission.Read);
+        internal RegionSignal PreAction => _preAction;
 
         /// <summary>
         /// Create a new region handle. The handle is registered with the given tracking object,
diff --git a/Ryujinx.Memory/Tracking/SmartMultiRegionHandle.cs b/Ryujinx.Memory/Tracking/SmartMultiRegionHandle.cs
index 6018840019..8bc10c411e 100644
--- a/Ryujinx.Memory/Tracking/SmartMultiRegionHandle.cs
+++ b/Ryujinx.Memory/Tracking/SmartMultiRegionHandle.cs
@@ -41,6 +41,17 @@ namespace Ryujinx.Memory.Tracking
             Dirty = true;
         }
 
+        public void RegisterAction(RegionSignal action)
+        {
+            foreach (var handle in _handles)
+            {
+                if (handle != null)
+                {
+                    handle?.RegisterAction((address, size) => action(handle.Address, handle.Size));
+                }
+            }
+        }
+
         public void QueryModified(Action<ulong, ulong> modifiedAction)
         {
             if (!Dirty)
@@ -66,14 +77,23 @@ namespace Ryujinx.Memory.Tracking
             ulong size = HandlesToBytes(splitIndex - handleIndex);
 
             // First, the target handle must be removed. Its data can still be used to determine the new handles.
+            RegionSignal signal = handle.PreAction;
             handle.Dispose();
 
             RegionHandle splitLow = _tracking.BeginTracking(address, size);
             splitLow.Parent = this;
+            if (signal != null)
+            {
+                splitLow.RegisterAction(signal);
+            }
             _handles[handleIndex] = splitLow;
 
             RegionHandle splitHigh = _tracking.BeginTracking(address + size, handle.Size - size);
             splitHigh.Parent = this;
+            if (signal != null)
+            {
+                splitHigh.RegisterAction(signal);
+            }
             _handles[splitIndex] = splitHigh;
         }
 
diff --git a/Ryujinx.Memory/Tracking/VirtualRegion.cs b/Ryujinx.Memory/Tracking/VirtualRegion.cs
index 90fb55d655..15a11568e7 100644
--- a/Ryujinx.Memory/Tracking/VirtualRegion.cs
+++ b/Ryujinx.Memory/Tracking/VirtualRegion.cs
@@ -22,12 +22,12 @@ namespace Ryujinx.Memory.Tracking
 
         public override void Signal(ulong address, ulong size, bool write)
         {
-            _tracking.ProtectVirtualRegion(this, MemoryPermission.ReadAndWrite); // Remove our protection immedately.
-
             foreach (var handle in Handles)
             {
                 handle.Signal(address, size, write);
             }
+
+            UpdateProtection();
         }
 
         /// <summary>

From 4da674286148d804be6bddb9011d3d28924caf0e Mon Sep 17 00:00:00 2001
From: pineappleEA <67879877+pineappleEA@users.noreply.github.com>
Date: Mon, 18 Jan 2021 22:33:58 +0200
Subject: [PATCH 02/27] Fix Linux Icon (#1927)

---
 Ryujinx/Ui/Applet/ErrorAppletDialog.cs     | 3 +++
 Ryujinx/Ui/MainWindow.cs                   | 2 ++
 Ryujinx/Ui/Widgets/GameTableContextMenu.cs | 4 ++++
 Ryujinx/Ui/Widgets/GtkDialog.cs            | 2 ++
 Ryujinx/Ui/Widgets/ProfileDialog.cs        | 2 ++
 Ryujinx/Ui/Windows/AboutWindow.cs          | 2 ++
 Ryujinx/Ui/Windows/ControllerWindow.cs     | 2 ++
 Ryujinx/Ui/Windows/SettingsWindow.cs       | 3 +++
 8 files changed, 20 insertions(+)

diff --git a/Ryujinx/Ui/Applet/ErrorAppletDialog.cs b/Ryujinx/Ui/Applet/ErrorAppletDialog.cs
index a51d532447..db02040f68 100644
--- a/Ryujinx/Ui/Applet/ErrorAppletDialog.cs
+++ b/Ryujinx/Ui/Applet/ErrorAppletDialog.cs
@@ -1,4 +1,5 @@
 using Gtk;
+using System.Reflection;
 
 namespace Ryujinx.Ui.Applet
 {
@@ -6,6 +7,8 @@ namespace Ryujinx.Ui.Applet
     {
         public ErrorAppletDialog(Window parentWindow, DialogFlags dialogFlags, MessageType messageType, string[] buttons) : base(parentWindow, dialogFlags, messageType, ButtonsType.None, null)
         {
+            Icon = new Gdk.Pixbuf(Assembly.GetExecutingAssembly(), "Ryujinx.Ui.Resources.Logo_Ryujinx.png");
+
             int responseId = 0;
 
             if (buttons != null)
diff --git a/Ryujinx/Ui/MainWindow.cs b/Ryujinx/Ui/MainWindow.cs
index 2e3437292a..778afd1249 100644
--- a/Ryujinx/Ui/MainWindow.cs
+++ b/Ryujinx/Ui/MainWindow.cs
@@ -22,6 +22,7 @@ using Ryujinx.Ui.Windows;
 using System;
 using System.Diagnostics;
 using System.IO;
+using System.Reflection;
 using System.Runtime.InteropServices;
 using System.Threading;
 using System.Threading.Tasks;
@@ -110,6 +111,7 @@ namespace Ryujinx.Ui
             DefaultWidth  = monitorWidth  < 1280 ? monitorWidth  : 1280;
             DefaultHeight = monitorHeight < 760  ? monitorHeight : 760;
 
+            Icon  = new Gdk.Pixbuf(Assembly.GetExecutingAssembly(), "Ryujinx.Ui.Resources.Logo_Ryujinx.png");
             Title = $"Ryujinx {Program.Version}";
 
             // Hide emulation context status bar.
diff --git a/Ryujinx/Ui/Widgets/GameTableContextMenu.cs b/Ryujinx/Ui/Widgets/GameTableContextMenu.cs
index 5ee8baa381..79cda5ae0c 100644
--- a/Ryujinx/Ui/Widgets/GameTableContextMenu.cs
+++ b/Ryujinx/Ui/Widgets/GameTableContextMenu.cs
@@ -20,6 +20,7 @@ using System.Buffers;
 using System.Collections.Generic;
 using System.Globalization;
 using System.IO;
+using System.Reflection;
 using System.Threading;
 
 using static LibHac.Fs.ApplicationSaveDataManagement;
@@ -85,6 +86,7 @@ namespace Ryujinx.Ui.Widgets
                 using MessageDialog messageDialog = new MessageDialog(null, DialogFlags.Modal, MessageType.Question, ButtonsType.YesNo, null)
                 {
                     Title          = "Ryujinx",
+                    Icon           = new Gdk.Pixbuf(Assembly.GetExecutingAssembly(), "Ryujinx.Ui.Resources.Logo_Ryujinx.png"),
                     Text           = $"There is no savedata for {titleName} [{titleId:x16}]",
                     SecondaryText  = "Would you like to create savedata for this game?",
                     WindowPosition = WindowPosition.Center
@@ -194,6 +196,7 @@ namespace Ryujinx.Ui.Widgets
                         _dialog = new MessageDialog(null, DialogFlags.DestroyWithParent, MessageType.Info, ButtonsType.Cancel, null)
                         {
                             Title          = "Ryujinx - NCA Section Extractor",
+                            Icon           = new Gdk.Pixbuf(Assembly.GetExecutingAssembly(), "Ryujinx.Ui.Resources.Logo_Ryujinx.png"),
                             SecondaryText  = $"Extracting {ncaSectionType} section from {System.IO.Path.GetFileName(_titleFilePath)}...",
                             WindowPosition = WindowPosition.Center
                         };
@@ -310,6 +313,7 @@ namespace Ryujinx.Ui.Widgets
                                     MessageDialog dialog = new MessageDialog(null, DialogFlags.DestroyWithParent, MessageType.Info, ButtonsType.Ok, null)
                                     {
                                         Title          = "Ryujinx - NCA Section Extractor",
+                                        Icon           = new Gdk.Pixbuf(Assembly.GetExecutingAssembly(), "Ryujinx.Ui.Resources.Logo_Ryujinx.png"),
                                         SecondaryText  = "Extraction has completed successfully.",
                                         WindowPosition = WindowPosition.Center
                                     };
diff --git a/Ryujinx/Ui/Widgets/GtkDialog.cs b/Ryujinx/Ui/Widgets/GtkDialog.cs
index e603383ab6..d8bad60f23 100644
--- a/Ryujinx/Ui/Widgets/GtkDialog.cs
+++ b/Ryujinx/Ui/Widgets/GtkDialog.cs
@@ -1,4 +1,5 @@
 using Gtk;
+using System.Reflection;
 using Ryujinx.Common.Logging;
 
 namespace Ryujinx.Ui.Widgets
@@ -11,6 +12,7 @@ namespace Ryujinx.Ui.Widgets
             : base(null, DialogFlags.Modal, messageType, buttonsType, null)
         {
             Title              = title;
+            Icon               = new Gdk.Pixbuf(Assembly.GetExecutingAssembly(), "Ryujinx.Ui.Resources.Logo_Ryujinx.png");
             Text               = mainText;
             SecondaryText      = secondaryText;
             WindowPosition     = WindowPosition.Center;
diff --git a/Ryujinx/Ui/Widgets/ProfileDialog.cs b/Ryujinx/Ui/Widgets/ProfileDialog.cs
index 8666757263..0f94bd6e61 100644
--- a/Ryujinx/Ui/Widgets/ProfileDialog.cs
+++ b/Ryujinx/Ui/Widgets/ProfileDialog.cs
@@ -1,5 +1,6 @@
 using Gtk;
 using System;
+using System.Reflection;
 
 using GUI = Gtk.Builder.ObjectAttribute;
 
@@ -19,6 +20,7 @@ namespace Ryujinx.Ui.Widgets
         private ProfileDialog(Builder builder) : base(builder.GetObject("_profileDialog").Handle)
         {
             builder.Autoconnect(this);
+            Icon = new Gdk.Pixbuf(Assembly.GetExecutingAssembly(), "Ryujinx.Ui.Resources.Logo_Ryujinx.png");
         }
 
         private void OkToggle_Activated(object sender, EventArgs args)
diff --git a/Ryujinx/Ui/Windows/AboutWindow.cs b/Ryujinx/Ui/Windows/AboutWindow.cs
index ab93e41d11..05c6b13e5e 100644
--- a/Ryujinx/Ui/Windows/AboutWindow.cs
+++ b/Ryujinx/Ui/Windows/AboutWindow.cs
@@ -3,6 +3,7 @@ using Ryujinx.Common.Utilities;
 using Ryujinx.Ui.Helper;
 using System.Net.Http;
 using System.Net.NetworkInformation;
+using System.Reflection;
 using System.Threading.Tasks;
 
 namespace Ryujinx.Ui.Windows
@@ -11,6 +12,7 @@ namespace Ryujinx.Ui.Windows
     {
         public AboutWindow() : base($"Ryujinx {Program.Version} - About")
         {
+            Icon = new Gdk.Pixbuf(Assembly.GetExecutingAssembly(), "Ryujinx.Ui.Resources.Logo_Ryujinx.png");
             InitializeComponent();
 
             _ = DownloadPatronsJson();
diff --git a/Ryujinx/Ui/Windows/ControllerWindow.cs b/Ryujinx/Ui/Windows/ControllerWindow.cs
index 7b0f7cf8b0..a5345b0354 100644
--- a/Ryujinx/Ui/Windows/ControllerWindow.cs
+++ b/Ryujinx/Ui/Windows/ControllerWindow.cs
@@ -94,6 +94,8 @@ namespace Ryujinx.Ui.Windows
 
         private ControllerWindow(Builder builder, PlayerIndex controllerId) : base(builder.GetObject("_controllerWin").Handle)
         {
+            Icon = new Gdk.Pixbuf(Assembly.GetExecutingAssembly(), "Ryujinx.Ui.Resources.Logo_Ryujinx.png");
+
             builder.Autoconnect(this);
 
             _playerIndex = controllerId;
diff --git a/Ryujinx/Ui/Windows/SettingsWindow.cs b/Ryujinx/Ui/Windows/SettingsWindow.cs
index 4497dedf1f..ba64226c37 100644
--- a/Ryujinx/Ui/Windows/SettingsWindow.cs
+++ b/Ryujinx/Ui/Windows/SettingsWindow.cs
@@ -11,6 +11,7 @@ using System;
 using System.Collections.Generic;
 using System.Globalization;
 using System.IO;
+using System.Reflection;
 using System.Threading.Tasks;
 
 using GUI = Gtk.Builder.ObjectAttribute;
@@ -91,6 +92,8 @@ namespace Ryujinx.Ui.Windows
 
         private SettingsWindow(MainWindow parent, Builder builder, VirtualFileSystem virtualFileSystem, HLE.FileSystem.Content.ContentManager contentManager) : base(builder.GetObject("_settingsWin").Handle)
         {
+            Icon = new Gdk.Pixbuf(Assembly.GetExecutingAssembly(), "Ryujinx.Ui.Resources.Logo_Ryujinx.png");
+
             _parent = parent;
 
             builder.Autoconnect(this);

From 5e1a839eaa7349342fc34a7adf4d901222b2343b Mon Sep 17 00:00:00 2001
From: mageven <62494521+mageven@users.noreply.github.com>
Date: Tue, 19 Jan 2021 05:26:53 +0530
Subject: [PATCH 03/27] Emulate a circular zone for keyboard analog sticks
 (#1906)

---
 Ryujinx/Ui/KeyboardController.cs | 29 ++++++++++++++++++-----------
 1 file changed, 18 insertions(+), 11 deletions(-)

diff --git a/Ryujinx/Ui/KeyboardController.cs b/Ryujinx/Ui/KeyboardController.cs
index f52642e3e1..f201c28331 100644
--- a/Ryujinx/Ui/KeyboardController.cs
+++ b/Ryujinx/Ui/KeyboardController.cs
@@ -1,4 +1,5 @@
 using System;
+using OpenTK;
 using OpenTK.Input;
 using Ryujinx.Common.Configuration.Hid;
 using Ryujinx.Configuration;
@@ -68,13 +69,16 @@ namespace Ryujinx.Ui
 
             short dx = 0;
             short dy = 0;
-            
-            if (keyboard[(Key)_config.LeftJoycon.StickUp])    dy =  short.MaxValue;
-            if (keyboard[(Key)_config.LeftJoycon.StickDown])  dy = -short.MaxValue;
-            if (keyboard[(Key)_config.LeftJoycon.StickLeft])  dx = -short.MaxValue;
-            if (keyboard[(Key)_config.LeftJoycon.StickRight]) dx =  short.MaxValue;
 
-            return (dx, dy);
+            if (keyboard[(Key)_config.LeftJoycon.StickUp])    dy +=  1;
+            if (keyboard[(Key)_config.LeftJoycon.StickDown])  dy += -1;
+            if (keyboard[(Key)_config.LeftJoycon.StickLeft])  dx += -1;
+            if (keyboard[(Key)_config.LeftJoycon.StickRight]) dx +=  1;
+
+            Vector2 stick = new Vector2(dx, dy);
+            stick.NormalizeFast();
+
+            return ((short)(stick.X * short.MaxValue), (short)(stick.Y * short.MaxValue));
         }
 
         public (short, short) GetRightStick()
@@ -84,12 +88,15 @@ namespace Ryujinx.Ui
             short dx = 0;
             short dy = 0;
 
-            if (keyboard[(Key)_config.RightJoycon.StickUp])    dy =  short.MaxValue;
-            if (keyboard[(Key)_config.RightJoycon.StickDown])  dy = -short.MaxValue;
-            if (keyboard[(Key)_config.RightJoycon.StickLeft])  dx = -short.MaxValue;
-            if (keyboard[(Key)_config.RightJoycon.StickRight]) dx =  short.MaxValue;
+            if (keyboard[(Key)_config.RightJoycon.StickUp])    dy +=  1;
+            if (keyboard[(Key)_config.RightJoycon.StickDown])  dy += -1;
+            if (keyboard[(Key)_config.RightJoycon.StickLeft])  dx += -1;
+            if (keyboard[(Key)_config.RightJoycon.StickRight]) dx +=  1;
 
-            return (dx, dy);
+            Vector2 stick = new Vector2(dx, dy);
+            stick.NormalizeFast();
+
+            return ((short)(stick.X * short.MaxValue), (short)(stick.Y * short.MaxValue));
         }
 
         public static HotkeyButtons GetHotkeyButtons(KeyboardState keyboard)

From 1364f3616111b8517ac48ee506d556c364c8a6a5 Mon Sep 17 00:00:00 2001
From: Ac_K <Acoustik666@gmail.com>
Date: Tue, 19 Jan 2021 03:28:35 +0100
Subject: [PATCH 04/27] am: Implement CreateHandleStorage and fixes (#1929)

---
 .../ILibraryAppletCreator.cs                  | 47 +++++++++++++++----
 .../HOS/Services/Am/AppletAE/IStorage.cs      |  8 ++--
 .../Services/Am/AppletAE/IStorageAccessor.cs  |  5 ++
 3 files changed, 49 insertions(+), 11 deletions(-)

diff --git a/Ryujinx.HLE/HOS/Services/Am/AppletAE/AllSystemAppletProxiesService/SystemAppletProxy/ILibraryAppletCreator.cs b/Ryujinx.HLE/HOS/Services/Am/AppletAE/AllSystemAppletProxiesService/SystemAppletProxy/ILibraryAppletCreator.cs
index 5b91e235ed..9fd002a217 100644
--- a/Ryujinx.HLE/HOS/Services/Am/AppletAE/AllSystemAppletProxiesService/SystemAppletProxy/ILibraryAppletCreator.cs
+++ b/Ryujinx.HLE/HOS/Services/Am/AppletAE/AllSystemAppletProxiesService/SystemAppletProxy/ILibraryAppletCreator.cs
@@ -26,8 +26,15 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
         {
             long size = context.RequestData.ReadInt64();
 
+            if (size <= 0)
+            {
+                return ResultCode.ObjectInvalid;
+            }
+
             MakeObject(context, new IStorage(new byte[size]));
 
+            // NOTE: Returns ResultCode.MemoryAllocationFailed if IStorage is null, it doesn't occur in our case.
+
             return ResultCode.Success;
         }
 
@@ -35,20 +42,44 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
         // CreateTransferMemoryStorage(b8, u64, handle<copy>) -> object<nn::am::service::IStorage>
         public ResultCode CreateTransferMemoryStorage(ServiceCtx context)
         {
-            bool unknown = context.RequestData.ReadBoolean();
-            long size    = context.RequestData.ReadInt64();
-            int  handle  = context.Request.HandleDesc.ToCopy[0];
+            bool isReadOnly = context.RequestData.ReadBoolean();
+            long size       = context.RequestData.ReadInt64();
+            int  handle     = context.Request.HandleDesc.ToCopy[0];
 
             KTransferMemory transferMem = context.Process.HandleTable.GetObject<KTransferMemory>(handle);
 
-            if (transferMem == null)
+            if (size <= 0)
             {
-                Logger.Warning?.Print(LogClass.ServiceAm, $"Invalid TransferMemory Handle: {handle:X}");
-
-                return ResultCode.Success; // TODO: Find correct error code
+                return ResultCode.ObjectInvalid;
             }
 
-            var data = new byte[transferMem.Size];
+            byte[] data = new byte[transferMem.Size];
+
+            transferMem.Creator.CpuMemory.Read(transferMem.Address, data);
+
+            context.Device.System.KernelContext.Syscall.CloseHandle(handle);
+
+            MakeObject(context, new IStorage(data, isReadOnly));
+
+            return ResultCode.Success;
+        }
+
+        [Command(12)] // 2.0.0+
+        // CreateHandleStorage(u64, handle<copy>) -> object<nn::am::service::IStorage>
+        public ResultCode CreateHandleStorage(ServiceCtx context)
+        {
+            long size   = context.RequestData.ReadInt64();
+            int  handle = context.Request.HandleDesc.ToCopy[0];
+
+            KTransferMemory transferMem = context.Process.HandleTable.GetObject<KTransferMemory>(handle);
+
+            if (size <= 0)
+            {
+                return ResultCode.ObjectInvalid;
+            }
+
+            byte[] data = new byte[transferMem.Size];
+
             transferMem.Creator.CpuMemory.Read(transferMem.Address, data);
 
             context.Device.System.KernelContext.Syscall.CloseHandle(handle);
diff --git a/Ryujinx.HLE/HOS/Services/Am/AppletAE/IStorage.cs b/Ryujinx.HLE/HOS/Services/Am/AppletAE/IStorage.cs
index 37514275db..e4b7d1984d 100644
--- a/Ryujinx.HLE/HOS/Services/Am/AppletAE/IStorage.cs
+++ b/Ryujinx.HLE/HOS/Services/Am/AppletAE/IStorage.cs
@@ -2,11 +2,13 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE
 {
     class IStorage : IpcService
     {
-        public byte[] Data { get; private set; }
+        public bool   IsReadOnly { get; private set; }
+        public byte[] Data       { get; private set; }
 
-        public IStorage(byte[] data)
+        public IStorage(byte[] data, bool isReadOnly = false)
         {
-            Data = data;
+            IsReadOnly = isReadOnly;
+            Data       = data;
         }
 
         [Command(0)]
diff --git a/Ryujinx.HLE/HOS/Services/Am/AppletAE/IStorageAccessor.cs b/Ryujinx.HLE/HOS/Services/Am/AppletAE/IStorageAccessor.cs
index ddd97a4c02..721cf1f9d2 100644
--- a/Ryujinx.HLE/HOS/Services/Am/AppletAE/IStorageAccessor.cs
+++ b/Ryujinx.HLE/HOS/Services/Am/AppletAE/IStorageAccessor.cs
@@ -24,6 +24,11 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE
         // Write(u64, buffer<bytes, 0x21>)
         public ResultCode Write(ServiceCtx context)
         {
+            if (_storage.IsReadOnly)
+            {
+                return ResultCode.ObjectInvalid;
+            }
+
             long writePosition = context.RequestData.ReadInt64();
 
             if (writePosition > _storage.Data.Length)

From 734747ae5806f85a9378d446d246b7eb27012bb6 Mon Sep 17 00:00:00 2001
From: gdkchan <gab.dark.100@gmail.com>
Date: Mon, 18 Jan 2021 23:31:15 -0300
Subject: [PATCH 05/27] Reduce temporary copy/fill buffer size (#1926)

---
 Ryujinx.Memory/IVirtualMemoryManager.cs | 2 +-
 Ryujinx.Memory/MemoryBlock.cs           | 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/Ryujinx.Memory/IVirtualMemoryManager.cs b/Ryujinx.Memory/IVirtualMemoryManager.cs
index cd271a5f94..f52c4b2205 100644
--- a/Ryujinx.Memory/IVirtualMemoryManager.cs
+++ b/Ryujinx.Memory/IVirtualMemoryManager.cs
@@ -15,7 +15,7 @@ namespace Ryujinx.Memory
 
         void Fill(ulong va, ulong size, byte value)
         {
-            const int MaxChunkSize = 1 << 30;
+            const int MaxChunkSize = 1 << 24;
 
             for (ulong subOffset = 0; subOffset < size; subOffset += MaxChunkSize)
             {
diff --git a/Ryujinx.Memory/MemoryBlock.cs b/Ryujinx.Memory/MemoryBlock.cs
index fadd50d44d..3b7a54ae9b 100644
--- a/Ryujinx.Memory/MemoryBlock.cs
+++ b/Ryujinx.Memory/MemoryBlock.cs
@@ -136,7 +136,7 @@ namespace Ryujinx.Memory
         /// <exception cref="InvalidMemoryRegionException">Throw when <paramref name="srcOffset"/>, <paramref name="dstOffset"/> or <paramref name="size"/> is out of range</exception>
         public void Copy(ulong dstOffset, ulong srcOffset, ulong size)
         {
-            const int MaxChunkSize = 1 << 30;
+            const int MaxChunkSize = 1 << 24;
 
             for (ulong offset = 0; offset < size; offset += MaxChunkSize)
             {
@@ -155,7 +155,7 @@ namespace Ryujinx.Memory
         /// <exception cref="InvalidMemoryRegionException">Throw when either <paramref name="offset"/> or <paramref name="size"/> are out of range</exception>
         public void ZeroFill(ulong offset, ulong size)
         {
-            const int MaxChunkSize = 1 << 30;
+            const int MaxChunkSize = 1 << 24;
 
             for (ulong subOffset = 0; subOffset < size; subOffset += MaxChunkSize)
             {

From 2fe3b8e58c63196327214319f5d9654a4b3d30b2 Mon Sep 17 00:00:00 2001
From: Sera <62521228+SeraUQ@users.noreply.github.com>
Date: Tue, 19 Jan 2021 03:31:59 +0100
Subject: [PATCH 06/27] Fix some GLXBadDrawable crashes on linux (#1900)

Fixes the crashes on linux when you stop emulation, and when you try to
exit the emulator while a game is running.
Also tested on windows without problems on my side.
---
 Ryujinx/Ui/MainWindow.cs | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/Ryujinx/Ui/MainWindow.cs b/Ryujinx/Ui/MainWindow.cs
index 778afd1249..1c847f4a68 100644
--- a/Ryujinx/Ui/MainWindow.cs
+++ b/Ryujinx/Ui/MainWindow.cs
@@ -593,7 +593,6 @@ namespace Ryujinx.Ui
                     ToggleExtraWidgets(true);
                 }
 
-                _viewBox.Remove(GlRendererWidget);
                 GlRendererWidget.Exit();
 
                 if(GlRendererWidget.Window != Window && GlRendererWidget.Window != null)
@@ -606,6 +605,7 @@ namespace Ryujinx.Ui
                 _windowsMultimediaTimerResolution?.Dispose();
                 _windowsMultimediaTimerResolution = null;
 
+                _viewBox.Remove(GlRendererWidget);
                 _viewBox.Add(_gameTableWindow);
 
                 _gameTableWindow.Expand = true;
@@ -713,6 +713,7 @@ namespace Ryujinx.Ui
 
                     // Wait for the other thread to dispose the HLE context before exiting.
                     _deviceExitStatus.WaitOne();
+                    GlRendererWidget.Dispose();
                 }
             }
 
@@ -1202,4 +1203,4 @@ namespace Ryujinx.Ui
             UpdateGameTable();
         }
     }
-}
\ No newline at end of file
+}

From 03aab63e0320ab8c3097d59ca5c474f6168e48a4 Mon Sep 17 00:00:00 2001
From: gdkchan <gab.dark.100@gmail.com>
Date: Tue, 19 Jan 2021 00:04:38 -0300
Subject: [PATCH 07/27] Fix out of range exception when a invalid base lod is
 used (#1931)

---
 Ryujinx.Graphics.Gpu/Image/TexturePool.cs | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Ryujinx.Graphics.Gpu/Image/TexturePool.cs b/Ryujinx.Graphics.Gpu/Image/TexturePool.cs
index 065844cb02..dfcd8a528a 100644
--- a/Ryujinx.Graphics.Gpu/Image/TexturePool.cs
+++ b/Ryujinx.Graphics.Gpu/Image/TexturePool.cs
@@ -223,7 +223,7 @@ namespace Ryujinx.Graphics.Gpu.Image
 
                 layerSize = sizeInfo.LayerSize;
 
-                if (minLod != 0)
+                if (minLod != 0 && minLod < levels)
                 {
                     // If the base level is not zero, we additionally add the mip level offset
                     // to the address, this allows the texture manager to find the base level from the

From b8353f5639cd61cfe33bb3af8f93988f31b3e444 Mon Sep 17 00:00:00 2001
From: gdkchan <gab.dark.100@gmail.com>
Date: Tue, 19 Jan 2021 00:19:52 -0300
Subject: [PATCH 08/27] Enable parallel ASTC decoding by default (#1930)

---
 Ryujinx.Graphics.Gpu/Image/Texture.cs | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Ryujinx.Graphics.Gpu/Image/Texture.cs b/Ryujinx.Graphics.Gpu/Image/Texture.cs
index 1c558f567d..3c576cb719 100644
--- a/Ryujinx.Graphics.Gpu/Image/Texture.cs
+++ b/Ryujinx.Graphics.Gpu/Image/Texture.cs
@@ -646,7 +646,7 @@ namespace Ryujinx.Graphics.Gpu.Image
             // - BC4/BC5 is not supported on 3D textures.
             if (!_context.Capabilities.SupportsAstcCompression && Info.FormatInfo.Format.IsAstc())
             {
-                if (!AstcDecoder.TryDecodeToRgba8(
+                if (!AstcDecoder.TryDecodeToRgba8P(
                     data.ToArray(),
                     Info.FormatInfo.BlockWidth,
                     Info.FormatInfo.BlockHeight,

From c3e0c41da3cef647b8bea54f77103fbad85098ba Mon Sep 17 00:00:00 2001
From: LDj3SNuD <35856442+LDj3SNuD@users.noreply.github.com>
Date: Tue, 19 Jan 2021 23:12:33 +0100
Subject: [PATCH 09/27] CPU (A64): Add Fmaxnmp & Fminnmp Scalar Inst.s, Fast &
 Slow Paths; with Tests. (#1894)

---
 ARMeilleure/CodeGen/X86/IntrinsicTable.cs     |  1 +
 ARMeilleure/Decoders/OpCodeTable.cs           |  2 +
 .../Instructions/InstEmitSimdArithmetic.cs    | 58 ++++++++++++++-----
 .../Instructions/InstEmitSimdHelper.cs        | 43 ++++++++++++++
 ARMeilleure/Instructions/InstName.cs          |  2 +
 .../IntermediateRepresentation/Intrinsic.cs   |  1 +
 Ryujinx.Tests/Cpu/CpuTestSimd.cs              | 29 ++++++----
 7 files changed, 111 insertions(+), 25 deletions(-)

diff --git a/ARMeilleure/CodeGen/X86/IntrinsicTable.cs b/ARMeilleure/CodeGen/X86/IntrinsicTable.cs
index 9030be3c1e..5deee349a6 100644
--- a/ARMeilleure/CodeGen/X86/IntrinsicTable.cs
+++ b/ARMeilleure/CodeGen/X86/IntrinsicTable.cs
@@ -119,6 +119,7 @@ namespace ARMeilleure.CodeGen.X86
             Add(Intrinsic.X86Popcnt,       new IntrinsicInfo(X86Instruction.Popcnt,       IntrinsicType.PopCount));
             Add(Intrinsic.X86Por,          new IntrinsicInfo(X86Instruction.Por,          IntrinsicType.Binary));
             Add(Intrinsic.X86Pshufb,       new IntrinsicInfo(X86Instruction.Pshufb,       IntrinsicType.Binary));
+            Add(Intrinsic.X86Pshufd,       new IntrinsicInfo(X86Instruction.Pshufd,       IntrinsicType.BinaryImm));
             Add(Intrinsic.X86Pslld,        new IntrinsicInfo(X86Instruction.Pslld,        IntrinsicType.Binary));
             Add(Intrinsic.X86Pslldq,       new IntrinsicInfo(X86Instruction.Pslldq,       IntrinsicType.Binary));
             Add(Intrinsic.X86Psllq,        new IntrinsicInfo(X86Instruction.Psllq,        IntrinsicType.Binary));
diff --git a/ARMeilleure/Decoders/OpCodeTable.cs b/ARMeilleure/Decoders/OpCodeTable.cs
index b19124851a..928d0e0d6a 100644
--- a/ARMeilleure/Decoders/OpCodeTable.cs
+++ b/ARMeilleure/Decoders/OpCodeTable.cs
@@ -311,6 +311,7 @@ namespace ARMeilleure.Decoders
             SetA64("0>0011100<1xxxxx111101xxxxxxxxxx", InstName.Fmax_V,          InstEmit.Fmax_V,          OpCodeSimdReg.Create);
             SetA64("000111100x1xxxxx011010xxxxxxxxxx", InstName.Fmaxnm_S,        InstEmit.Fmaxnm_S,        OpCodeSimdReg.Create);
             SetA64("0>0011100<1xxxxx110001xxxxxxxxxx", InstName.Fmaxnm_V,        InstEmit.Fmaxnm_V,        OpCodeSimdReg.Create);
+            SetA64("011111100x110000110010xxxxxxxxxx", InstName.Fmaxnmp_S,       InstEmit.Fmaxnmp_S,       OpCodeSimd.Create);
             SetA64("0>1011100<1xxxxx110001xxxxxxxxxx", InstName.Fmaxnmp_V,       InstEmit.Fmaxnmp_V,       OpCodeSimdReg.Create);
             SetA64("0110111000110000110010xxxxxxxxxx", InstName.Fmaxnmv_V,       InstEmit.Fmaxnmv_V,       OpCodeSimd.Create);
             SetA64("0>1011100<1xxxxx111101xxxxxxxxxx", InstName.Fmaxp_V,         InstEmit.Fmaxp_V,         OpCodeSimdReg.Create);
@@ -319,6 +320,7 @@ namespace ARMeilleure.Decoders
             SetA64("0>0011101<1xxxxx111101xxxxxxxxxx", InstName.Fmin_V,          InstEmit.Fmin_V,          OpCodeSimdReg.Create);
             SetA64("000111100x1xxxxx011110xxxxxxxxxx", InstName.Fminnm_S,        InstEmit.Fminnm_S,        OpCodeSimdReg.Create);
             SetA64("0>0011101<1xxxxx110001xxxxxxxxxx", InstName.Fminnm_V,        InstEmit.Fminnm_V,        OpCodeSimdReg.Create);
+            SetA64("011111101x110000110010xxxxxxxxxx", InstName.Fminnmp_S,       InstEmit.Fminnmp_S,       OpCodeSimd.Create);
             SetA64("0>1011101<1xxxxx110001xxxxxxxxxx", InstName.Fminnmp_V,       InstEmit.Fminnmp_V,       OpCodeSimdReg.Create);
             SetA64("0110111010110000110010xxxxxxxxxx", InstName.Fminnmv_V,       InstEmit.Fminnmv_V,       OpCodeSimd.Create);
             SetA64("0>1011101<1xxxxx111101xxxxxxxxxx", InstName.Fminp_V,         InstEmit.Fminp_V,         OpCodeSimdReg.Create);
diff --git a/ARMeilleure/Instructions/InstEmitSimdArithmetic.cs b/ARMeilleure/Instructions/InstEmitSimdArithmetic.cs
index 88be07bdd3..bd6a98bed8 100644
--- a/ARMeilleure/Instructions/InstEmitSimdArithmetic.cs
+++ b/ARMeilleure/Instructions/InstEmitSimdArithmetic.cs
@@ -347,19 +347,17 @@ namespace ARMeilleure.Instructions
 
         public static void Faddp_S(ArmEmitterContext context)
         {
-            OpCodeSimd op = (OpCodeSimd)context.CurrOp;
-
-            int sizeF = op.Size & 1;
-
             if (Optimizations.FastFP && Optimizations.UseSse3)
             {
-                if (sizeF == 0)
+                OpCodeSimd op = (OpCodeSimd)context.CurrOp;
+
+                if ((op.Size & 1) == 0)
                 {
                     Operand res = context.AddIntrinsic(Intrinsic.X86Haddps, GetVec(op.Rn), GetVec(op.Rn));
 
                     context.Copy(GetVec(op.Rd), context.VectorZeroUpper96(res));
                 }
-                else /* if (sizeF == 1) */
+                else /* if ((op.Size & 1) == 1) */
                 {
                     Operand res = context.AddIntrinsic(Intrinsic.X86Haddpd, GetVec(op.Rn), GetVec(op.Rn));
 
@@ -368,14 +366,10 @@ namespace ARMeilleure.Instructions
             }
             else
             {
-                OperandType type = sizeF != 0 ? OperandType.FP64 : OperandType.FP32;
-
-                Operand ne0 = context.VectorExtract(type, GetVec(op.Rn), 0);
-                Operand ne1 = context.VectorExtract(type, GetVec(op.Rn), 1);
-
-                Operand res = EmitSoftFloatCall(context, nameof(SoftFloat32.FPAdd), ne0, ne1);
-
-                context.Copy(GetVec(op.Rd), context.VectorInsert(context.VectorZero(), res, 0));
+                EmitScalarPairwiseOpF(context, (op1, op2) =>
+                {
+                    return EmitSoftFloatCall(context, nameof(SoftFloat32.FPAdd), op1, op2);
+                });
             }
         }
 
@@ -552,6 +546,24 @@ namespace ARMeilleure.Instructions
             }
         }
 
+        public static void Fmaxnmp_S(ArmEmitterContext context)
+        {
+            if (Optimizations.FastFP && Optimizations.UseSse41)
+            {
+                EmitSse2ScalarPairwiseOpF(context, (op1, op2) =>
+                {
+                    return EmitSse41MaxMinNumOpF(context, isMaxNum: true, scalar: true, op1, op2);
+                });
+            }
+            else
+            {
+                EmitScalarPairwiseOpF(context, (op1, op2) =>
+                {
+                    return EmitSoftFloatCall(context, nameof(SoftFloat32.FPMaxNum), op1, op2);
+                });
+            }
+        }
+
         public static void Fmaxnmp_V(ArmEmitterContext context)
         {
             if (Optimizations.FastFP && Optimizations.UseSse41)
@@ -708,6 +720,24 @@ namespace ARMeilleure.Instructions
             }
         }
 
+        public static void Fminnmp_S(ArmEmitterContext context)
+        {
+            if (Optimizations.FastFP && Optimizations.UseSse41)
+            {
+                EmitSse2ScalarPairwiseOpF(context, (op1, op2) =>
+                {
+                    return EmitSse41MaxMinNumOpF(context, isMaxNum: false, scalar: true, op1, op2);
+                });
+            }
+            else
+            {
+                EmitScalarPairwiseOpF(context, (op1, op2) =>
+                {
+                    return EmitSoftFloatCall(context, nameof(SoftFloat32.FPMinNum), op1, op2);
+                });
+            }
+        }
+
         public static void Fminnmp_V(ArmEmitterContext context)
         {
             if (Optimizations.FastFP && Optimizations.UseSse41)
diff --git a/ARMeilleure/Instructions/InstEmitSimdHelper.cs b/ARMeilleure/Instructions/InstEmitSimdHelper.cs
index eab891ec5e..e9d5303c78 100644
--- a/ARMeilleure/Instructions/InstEmitSimdHelper.cs
+++ b/ARMeilleure/Instructions/InstEmitSimdHelper.cs
@@ -1118,6 +1118,49 @@ namespace ARMeilleure.Instructions
             context.Copy(GetVec(op.Rd), context.VectorZeroUpper96(res));
         }
 
+        public static void EmitScalarPairwiseOpF(ArmEmitterContext context, Func2I emit)
+        {
+            OpCodeSimd op = (OpCodeSimd)context.CurrOp;
+
+            OperandType type = (op.Size & 1) != 0 ? OperandType.FP64 : OperandType.FP32;
+
+            Operand ne0 = context.VectorExtract(type, GetVec(op.Rn), 0);
+            Operand ne1 = context.VectorExtract(type, GetVec(op.Rn), 1);
+
+            Operand res = context.VectorInsert(context.VectorZero(), emit(ne0, ne1), 0);
+
+            context.Copy(GetVec(op.Rd), res);
+        }
+
+        public static void EmitSse2ScalarPairwiseOpF(ArmEmitterContext context, Func2I emit)
+        {
+            OpCodeSimd op = (OpCodeSimd)context.CurrOp;
+
+            Operand n = GetVec(op.Rn);
+
+            Operand op0, op1;
+
+            if ((op.Size & 1) == 0)
+            {
+                const int sm0 = 2 << 6 | 2 << 4 | 2 << 2 | 0 << 0;
+                const int sm1 = 2 << 6 | 2 << 4 | 2 << 2 | 1 << 0;
+
+                Operand zeroN = context.VectorZeroUpper64(n);
+
+                op0 = context.AddIntrinsic(Intrinsic.X86Pshufd, zeroN, Const(sm0));
+                op1 = context.AddIntrinsic(Intrinsic.X86Pshufd, zeroN, Const(sm1));
+            }
+            else /* if ((op.Size & 1) == 1) */
+            {
+                Operand zero = context.VectorZero();
+
+                op0 = context.AddIntrinsic(Intrinsic.X86Movlhps, n, zero);
+                op1 = context.AddIntrinsic(Intrinsic.X86Movhlps, zero, n);
+            }
+
+            context.Copy(GetVec(op.Rd), emit(op0, op1));
+        }
+
         public static void EmitVectorPairwiseOpF(ArmEmitterContext context, Func2I emit)
         {
             OpCodeSimdReg op = (OpCodeSimdReg)context.CurrOp;
diff --git a/ARMeilleure/Instructions/InstName.cs b/ARMeilleure/Instructions/InstName.cs
index a0ec9dc394..990e4393f1 100644
--- a/ARMeilleure/Instructions/InstName.cs
+++ b/ARMeilleure/Instructions/InstName.cs
@@ -212,6 +212,7 @@ namespace ARMeilleure.Instructions
         Fmax_V,
         Fmaxnm_S,
         Fmaxnm_V,
+        Fmaxnmp_S,
         Fmaxnmp_V,
         Fmaxnmv_V,
         Fmaxp_V,
@@ -220,6 +221,7 @@ namespace ARMeilleure.Instructions
         Fmin_V,
         Fminnm_S,
         Fminnm_V,
+        Fminnmp_S,
         Fminnmp_V,
         Fminnmv_V,
         Fminp_V,
diff --git a/ARMeilleure/IntermediateRepresentation/Intrinsic.cs b/ARMeilleure/IntermediateRepresentation/Intrinsic.cs
index e2989863b8..1ddf93e5b1 100644
--- a/ARMeilleure/IntermediateRepresentation/Intrinsic.cs
+++ b/ARMeilleure/IntermediateRepresentation/Intrinsic.cs
@@ -108,6 +108,7 @@ namespace ARMeilleure.IntermediateRepresentation
         X86Popcnt,
         X86Por,
         X86Pshufb,
+        X86Pshufd,
         X86Pslld,
         X86Pslldq,
         X86Psllq,
diff --git a/Ryujinx.Tests/Cpu/CpuTestSimd.cs b/Ryujinx.Tests/Cpu/CpuTestSimd.cs
index 1371de4b76..89c2857089 100644
--- a/Ryujinx.Tests/Cpu/CpuTestSimd.cs
+++ b/Ryujinx.Tests/Cpu/CpuTestSimd.cs
@@ -715,19 +715,23 @@ namespace Ryujinx.Tests.Cpu
             };
         }
 
-        private static uint[] _F_Add_P_S_2SS_()
+        private static uint[] _F_Add_Max_Min_Nm_P_S_2SS_()
         {
             return new uint[]
             {
-                0x7E30D820u // FADDP S0, V1.2S
+                0x7E30D820u, // FADDP   S0, V1.2S
+                0x7E30C820u, // FMAXNMP S0, V1.2S
+                0x7EB0C820u  // FMINNMP S0, V1.2S
             };
         }
 
-        private static uint[] _F_Add_P_S_2DD_()
+        private static uint[] _F_Add_Max_Min_Nm_P_S_2DD_()
         {
             return new uint[]
             {
-                0x7E70D820u // FADDP D0, V1.2D
+                0x7E70D820u, // FADDP   D0, V1.2D
+                0x7E70C820u, // FMAXNMP D0, V1.2D
+                0x7EF0C820u  // FMINNMP D0, V1.2D
             };
         }
 
@@ -1802,12 +1806,13 @@ namespace Ryujinx.Tests.Cpu
         }
 
         [Test, Pairwise] [Explicit]
-        public void F_Add_P_S_2SS([ValueSource("_F_Add_P_S_2SS_")] uint opcodes,
-                                  [ValueSource("_2S_F_")] ulong a)
+        public void F_Add_Max_Min_Nm_P_S_2SS([ValueSource("_F_Add_Max_Min_Nm_P_S_2SS_")] uint opcodes,
+                                             [ValueSource("_2S_F_")] ulong a)
         {
             ulong z = TestContext.CurrentContext.Random.NextULong();
+
             V128 v0 = MakeVectorE0E1(z, z);
-            V128 v1 = MakeVectorE0(a);
+            V128 v1 = MakeVectorE0E1(a, z);
 
             int rnd = (int)TestContext.CurrentContext.Random.NextUInt();
 
@@ -1820,12 +1825,14 @@ namespace Ryujinx.Tests.Cpu
         }
 
         [Test, Pairwise] [Explicit]
-        public void F_Add_P_S_2DD([ValueSource("_F_Add_P_S_2DD_")] uint opcodes,
-                                  [ValueSource("_1D_F_")] ulong a)
+        public void F_Add_Max_Min_Nm_P_S_2DD([ValueSource("_F_Add_Max_Min_Nm_P_S_2DD_")] uint opcodes,
+                                             [ValueSource("_1D_F_")] ulong a0,
+                                             [ValueSource("_1D_F_")] ulong a1)
         {
             ulong z = TestContext.CurrentContext.Random.NextULong();
-            V128 v0 = MakeVectorE1(z);
-            V128 v1 = MakeVectorE0E1(a, a);
+
+            V128 v0 = MakeVectorE0E1(z, z);
+            V128 v1 = MakeVectorE0E1(a0, a1);
 
             int rnd = (int)TestContext.CurrentContext.Random.NextUInt();
 

From 6a95a3b01a4b68cf944a2ea0733f6b8008aa8357 Mon Sep 17 00:00:00 2001
From: gdkchan <gab.dark.100@gmail.com>
Date: Tue, 19 Jan 2021 21:48:27 -0300
Subject: [PATCH 10/27] Fix alignment on CreateTransferMemoryStorage (#1937)

---
 .../SystemAppletProxy/ILibraryAppletCreator.cs                  | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Ryujinx.HLE/HOS/Services/Am/AppletAE/AllSystemAppletProxiesService/SystemAppletProxy/ILibraryAppletCreator.cs b/Ryujinx.HLE/HOS/Services/Am/AppletAE/AllSystemAppletProxiesService/SystemAppletProxy/ILibraryAppletCreator.cs
index 9fd002a217..b64da12f14 100644
--- a/Ryujinx.HLE/HOS/Services/Am/AppletAE/AllSystemAppletProxiesService/SystemAppletProxy/ILibraryAppletCreator.cs
+++ b/Ryujinx.HLE/HOS/Services/Am/AppletAE/AllSystemAppletProxiesService/SystemAppletProxy/ILibraryAppletCreator.cs
@@ -42,7 +42,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
         // CreateTransferMemoryStorage(b8, u64, handle<copy>) -> object<nn::am::service::IStorage>
         public ResultCode CreateTransferMemoryStorage(ServiceCtx context)
         {
-            bool isReadOnly = context.RequestData.ReadBoolean();
+            bool isReadOnly = (context.RequestData.ReadInt64() & 1) != 0;
             long size       = context.RequestData.ReadInt64();
             int  handle     = context.Request.HandleDesc.ToCopy[0];
 

From c72f78b4d481b889c46196792dff913cfd8becdc Mon Sep 17 00:00:00 2001
From: mageven <62494521+mageven@users.noreply.github.com>
Date: Wed, 20 Jan 2021 23:29:51 +0530
Subject: [PATCH 11/27] Fix SL/SR typo in keyboard controller mapping (#1938)

---
 Ryujinx/Ui/KeyboardController.cs | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/Ryujinx/Ui/KeyboardController.cs b/Ryujinx/Ui/KeyboardController.cs
index f201c28331..3fb249dbc7 100644
--- a/Ryujinx/Ui/KeyboardController.cs
+++ b/Ryujinx/Ui/KeyboardController.cs
@@ -47,7 +47,7 @@ namespace Ryujinx.Ui
             if (keyboard[(Key)_config.LeftJoycon.ButtonL])     buttons |= ControllerKeys.L;
             if (keyboard[(Key)_config.LeftJoycon.ButtonZl])    buttons |= ControllerKeys.Zl;
             if (keyboard[(Key)_config.LeftJoycon.ButtonSl])    buttons |= ControllerKeys.SlLeft;
-            if (keyboard[(Key)_config.LeftJoycon.ButtonSr])    buttons |= ControllerKeys.SlRight;
+            if (keyboard[(Key)_config.LeftJoycon.ButtonSr])    buttons |= ControllerKeys.SrLeft;
             
             if (keyboard[(Key)_config.RightJoycon.StickButton]) buttons |= ControllerKeys.RStick;
             if (keyboard[(Key)_config.RightJoycon.ButtonA])     buttons |= ControllerKeys.A;
@@ -57,7 +57,7 @@ namespace Ryujinx.Ui
             if (keyboard[(Key)_config.RightJoycon.ButtonPlus])  buttons |= ControllerKeys.Plus;
             if (keyboard[(Key)_config.RightJoycon.ButtonR])     buttons |= ControllerKeys.R;
             if (keyboard[(Key)_config.RightJoycon.ButtonZr])    buttons |= ControllerKeys.Zr;
-            if (keyboard[(Key)_config.RightJoycon.ButtonSl])    buttons |= ControllerKeys.SrLeft;
+            if (keyboard[(Key)_config.RightJoycon.ButtonSl])    buttons |= ControllerKeys.SlRight;
             if (keyboard[(Key)_config.RightJoycon.ButtonSr])    buttons |= ControllerKeys.SrRight;
 
             return buttons;

From 3b200806378f393e3014d4f4fbc2948d80d00a3f Mon Sep 17 00:00:00 2001
From: Caian Benedicto <caianbene@gmail.com>
Date: Fri, 22 Jan 2021 23:48:03 -0300
Subject: [PATCH 12/27] Fix inverted read only flag in transfer memory creation
 (#1945)

---
 .../SystemAppletProxy/ILibraryAppletCreator.cs                  | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Ryujinx.HLE/HOS/Services/Am/AppletAE/AllSystemAppletProxiesService/SystemAppletProxy/ILibraryAppletCreator.cs b/Ryujinx.HLE/HOS/Services/Am/AppletAE/AllSystemAppletProxiesService/SystemAppletProxy/ILibraryAppletCreator.cs
index b64da12f14..2cd2866ef4 100644
--- a/Ryujinx.HLE/HOS/Services/Am/AppletAE/AllSystemAppletProxiesService/SystemAppletProxy/ILibraryAppletCreator.cs
+++ b/Ryujinx.HLE/HOS/Services/Am/AppletAE/AllSystemAppletProxiesService/SystemAppletProxy/ILibraryAppletCreator.cs
@@ -42,7 +42,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
         // CreateTransferMemoryStorage(b8, u64, handle<copy>) -> object<nn::am::service::IStorage>
         public ResultCode CreateTransferMemoryStorage(ServiceCtx context)
         {
-            bool isReadOnly = (context.RequestData.ReadInt64() & 1) != 0;
+            bool isReadOnly = (context.RequestData.ReadInt64() & 1) == 0;
             long size       = context.RequestData.ReadInt64();
             int  handle     = context.Request.HandleDesc.ToCopy[0];
 

From 6982282cc8ad362924bcb0c176ccb6e6d0339fa4 Mon Sep 17 00:00:00 2001
From: mageven <62494521+mageven@users.noreply.github.com>
Date: Sat, 23 Jan 2021 17:59:14 +0530
Subject: [PATCH 13/27] TZ: Fix loop condition in GetTZName (#1950)

Closes #1949
---
 Ryujinx.HLE/HOS/Services/Time/TimeZone/TimeZone.cs | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/Ryujinx.HLE/HOS/Services/Time/TimeZone/TimeZone.cs b/Ryujinx.HLE/HOS/Services/Time/TimeZone/TimeZone.cs
index 496c678680..c77c472e07 100644
--- a/Ryujinx.HLE/HOS/Services/Time/TimeZone/TimeZone.cs
+++ b/Ryujinx.HLE/HOS/Services/Time/TimeZone/TimeZone.cs
@@ -183,11 +183,10 @@ namespace Ryujinx.HLE.HOS.Services.Time.TimeZone
         {
             int i = namePosition;
 
-            char c = name[i];
+            char c;
 
-            while (c != '\0' && !char.IsDigit(c) && c != ',' && c != '-' && c != '+')
+            while ((c = name[i]) != '\0' && !char.IsDigit(c) && c != ',' && c != '-' && c != '+')
             {
-                c = name[i];
                 i++;
             }
 

From f565b0e5a6bebc09381aabb046e9b0b6285b7d10 Mon Sep 17 00:00:00 2001
From: gdkchan <gab.dark.100@gmail.com>
Date: Sat, 23 Jan 2021 09:38:00 -0300
Subject: [PATCH 14/27] Match texture if the physical range is the same (#1934)

* Match texture if the physical range is the same

* XML docs and comments
---
 Ryujinx.Graphics.Gpu/Image/TextureManager.cs | 26 +++++++++++----
 Ryujinx.Graphics.Gpu/Memory/MemoryManager.cs | 33 ++++++++++++++++++++
 2 files changed, 53 insertions(+), 6 deletions(-)

diff --git a/Ryujinx.Graphics.Gpu/Image/TextureManager.cs b/Ryujinx.Graphics.Gpu/Image/TextureManager.cs
index 30137d0646..2646a75b7c 100644
--- a/Ryujinx.Graphics.Gpu/Image/TextureManager.cs
+++ b/Ryujinx.Graphics.Gpu/Image/TextureManager.cs
@@ -685,14 +685,28 @@ namespace Ryujinx.Graphics.Gpu.Image
             {
                 Texture overlap = _textureOverlaps[index];
 
-                bool rangeMatches = range != null ? overlap.Range.Equals(range.Value) : overlap.Info.GpuAddress == info.GpuAddress;
-                if (!rangeMatches)
-                {
-                    continue;
-                }
-
                 TextureMatchQuality matchQuality = overlap.IsExactMatch(info, flags);
 
+                if (matchQuality != TextureMatchQuality.NoMatch)
+                {
+                    // If the parameters match, we need to make sure the texture is mapped to the same memory regions.
+
+                    // If a range of memory was supplied, just check if the ranges match.
+                    if (range != null && !overlap.Range.Equals(range.Value))
+                    {
+                        continue;
+                    }
+
+                    // If no range was supplied, we can check if the GPU virtual address match. If they do,
+                    // we know the textures are located at the same memory region.
+                    // If they don't, it may still be mapped to the same physical region, so we
+                    // do a more expensive check to tell if they are mapped into the same physical regions.
+                    if (overlap.Info.GpuAddress != info.GpuAddress && !_context.MemoryManager.CompareRange(overlap.Range, info.GpuAddress))
+                    {
+                        continue;
+                    }
+                }
+
                 if (matchQuality == TextureMatchQuality.Perfect)
                 {
                     texture = overlap;
diff --git a/Ryujinx.Graphics.Gpu/Memory/MemoryManager.cs b/Ryujinx.Graphics.Gpu/Memory/MemoryManager.cs
index 7021cd2090..5776836c72 100644
--- a/Ryujinx.Graphics.Gpu/Memory/MemoryManager.cs
+++ b/Ryujinx.Graphics.Gpu/Memory/MemoryManager.cs
@@ -343,6 +343,39 @@ namespace Ryujinx.Graphics.Gpu.Memory
             return new MultiRange(regions.ToArray());
         }
 
+        /// <summary>
+        /// Checks if a given GPU virtual memory range is mapped to the same physical regions
+        /// as the specified physical memory multi-range.
+        /// </summary>
+        /// <param name="range">Physical memory multi-range</param>
+        /// <param name="va">GPU virtual memory address</param>
+        /// <returns>True if the virtual memory region is mapped into the specified physical one, false otherwise</returns>
+        public bool CompareRange(MultiRange range, ulong va)
+        {
+            va &= ~PageMask;
+
+            for (int i = 0; i < range.Count; i++)
+            {
+                MemoryRange currentRange = range.GetSubRange(i);
+
+                ulong address = currentRange.Address & ~PageMask;
+                ulong endAddress = (currentRange.EndAddress + PageMask) & ~PageMask;
+
+                while (address < endAddress)
+                {
+                    if (Translate(va) != address)
+                    {
+                        return false;
+                    }
+
+                    va += PageSize;
+                    address += PageSize;
+                }
+            }
+
+            return true;
+        }
+
         /// <summary>
         /// Validates a GPU virtual address.
         /// </summary>

From 30c7b77118994b245729099485185c0c5f77b234 Mon Sep 17 00:00:00 2001
From: Mary <me@thog.eu>
Date: Sun, 24 Jan 2021 14:29:16 +0100
Subject: [PATCH 15/27] Github Actions: Workaround windows-latest restore
 failures (#1957)

See https://github.com/actions/setup-dotnet/issues/155.
---
 .github/workflows/build.yml | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 596ed5b8a3..5bd3e4f13f 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -33,6 +33,8 @@ jobs:
       - uses: actions/setup-dotnet@v1
         with:
           dotnet-version: 5.0.x
+      - name: Clear
+        run: dotnet clean && dotnet nuget locals all --clear
       - name: Build
         run: dotnet build -c "${{ matrix.configuration }}"
       - name: Test

From 8d4bee3ea90bc1e75006bdf64f859204991a37a2 Mon Sep 17 00:00:00 2001
From: ShahilSharma <67567036+ShahilSharma@users.noreply.github.com>
Date: Sun, 24 Jan 2021 14:21:49 -0800
Subject: [PATCH 16/27] Update Controller Images (#1951)

This updates the old Images used for the input section for Ryujinx. The old one didn't play nice with the some GTK themes like light mode, this new one does.
---
 .../Ui/Resources/Controller_JoyConLeft.svg    |  329 +++--
 .../Ui/Resources/Controller_JoyConPair.svg    |  682 ++++++---
 .../Ui/Resources/Controller_JoyConRight.svg   |  423 ++++--
 Ryujinx/Ui/Resources/Controller_ProCon.svg    | 1224 +++++++++++++++--
 4 files changed, 2085 insertions(+), 573 deletions(-)

diff --git a/Ryujinx/Ui/Resources/Controller_JoyConLeft.svg b/Ryujinx/Ui/Resources/Controller_JoyConLeft.svg
index 40d06136b1..c3b82f8a26 100644
--- a/Ryujinx/Ui/Resources/Controller_JoyConLeft.svg
+++ b/Ryujinx/Ui/Resources/Controller_JoyConLeft.svg
@@ -1,105 +1,232 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 viewBox="0 0 1000.8 1000" style="enable-background:new 0 0 1000.8 1000;" xml:space="preserve">
-<style type="text/css">
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.1"
+   id="Layer_1"
+   x="0px"
+   y="0px"
+   viewBox="0 0 1000.8 1000"
+   style="enable-background:new 0 0 1000.8 1000;"
+   xml:space="preserve"
+   sodipodi:docname="JoyConLeft.svg"
+   inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"><metadata
+   id="metadata85"><rdf:RDF><cc:Work
+       rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+         rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
+   id="defs83" /><sodipodi:namedview
+   pagecolor="#ffffff"
+   bordercolor="#666666"
+   borderopacity="1"
+   objecttolerance="10"
+   gridtolerance="10"
+   guidetolerance="10"
+   inkscape:pageopacity="0"
+   inkscape:pageshadow="2"
+   inkscape:window-width="1920"
+   inkscape:window-height="1003"
+   id="namedview81"
+   showgrid="false"
+   inkscape:zoom="0.66711859"
+   inkscape:cx="290.89733"
+   inkscape:cy="479.45052"
+   inkscape:window-x="1400"
+   inkscape:window-y="0"
+   inkscape:window-maximized="1"
+   inkscape:current-layer="Layer_1" />
+<style
+   type="text/css"
+   id="style2">
 	.st0{opacity:0.1;}
 	.st1{fill:#02C5E5;}
 	.st2{fill:#FFFFFF;}
 </style>
-<g class="st0">
-	<path class="st1" d="M419.1,642.6v67.6c0,3.3-2.7,6-6,6h-4.2v-79.5h4.2C416.4,636.6,419.1,639.3,419.1,642.6z"/>
-	<path class="st1" d="M419.1,239.8v67.6c0,3.3-2.7,6-6,6h-4.2v-79.5h4.2C416.4,233.9,419.1,236.5,419.1,239.8z"/>
-	<path class="st1" d="M330.1,7v2.6h-54.2c-84.8,0-161.4,50.7-194.6,128.7l-3.4-3.4c-1.8-1.7-2.3-4.4-1.3-6.6
-		C111.2,50.8,188.1,1,272.9,1h51.2C327.4,1,330.1,3.7,330.1,7z"/>
-	<path class="st1" d="M359.6,115.1h-46.9c-1.6,0-3-1.3-3-3v-11.7c0-1.6,1.3-3,3-3h46.9c1.6,0,3,1.3,3,3v11.7
-		C362.6,113.8,361.3,115.1,359.6,115.1z"/>
-	<circle class="st1" cx="237.9" cy="464.4" r="37.5"/>
-	<circle class="st1" cx="237.9" cy="611.3" r="37.5"/>
-	<circle class="st1" cx="311.4" cy="537.9" r="37.5"/>
-	<ellipse class="st1" cx="164.5" cy="537.9" rx="37.5" ry="37.5"/>
-	<path class="st1" d="M269.1,689.9h45c4.9,0,8.9,4,8.9,8.9v45c0,4.9-4,8.9-8.9,8.9h-45c-4.9,0-8.9-4-8.9-8.9v-45
-		C260.2,693.9,264.2,689.9,269.1,689.9z"/>
-	<circle class="st1" cx="291.6" cy="721.3" r="19.4"/>
-	<path class="st1" d="M234.6,187.1v12.3c0,3-2.2,5.5-5.2,5.9c-25.2,3.7-45,23.5-48.7,48.7c-0.4,2.9-2.9,5.1-5.9,5.2h-12.3
-		C164.3,220.1,195.5,188.9,234.6,187.1z"/>
-	<path class="st1" d="M234.6,325.6v12.3c-39.1-1.7-70.3-33-72.1-72h12.3c3,0,5.5,2.2,5.9,5.2c3.7,25.2,23.5,45,48.7,48.7
-		C232.4,320.1,234.6,322.6,234.6,325.6z"/>
-	<path class="st1" d="M313.3,265.9c-1.7,39.1-33,70.3-72.1,72v-12.3c0-3,2.2-5.5,5.2-5.9c25.2-3.7,45-23.5,48.7-48.7
-		c0.4-2.9,2.9-5.1,5.9-5.2L313.3,265.9z"/>
-	<path class="st1" d="M313.3,259.2H301c-3,0-5.5-2.2-5.9-5.2c-3.7-25.2-23.5-45-48.7-48.7c-2.9-0.4-5.1-2.9-5.2-5.9v-12.3
-		C280.3,188.9,311.6,220.1,313.3,259.2z"/>
-	<path class="st1" d="M313.4,262.5c0,1.1,0,2.2-0.1,3.3H301c-3,0-5.5,2.2-5.9,5.2c-3.7,25.2-23.5,45-48.7,48.7
-		c-2.9,0.4-5.1,2.9-5.2,5.9v12.3c-1.1,0.1-2.2,0.1-3.3,0.1s-2.2,0-3.3-0.1v-12.3c0-3-2.2-5.5-5.2-5.9c-25.2-3.7-45-23.5-48.7-48.7
-		c-0.4-2.9-2.9-5.1-5.9-5.2h-12.3c-0.1-1.1-0.1-2.2-0.1-3.3s0-2.2,0.1-3.3h12.3c3,0,5.5-2.2,5.9-5.2c3.7-25.2,23.5-45,48.7-48.7
-		c2.9-0.4,5.1-2.9,5.2-5.9v-12.3c1.1-0.1,2.2-0.1,3.3-0.1s2.2,0,3.3,0.1v12.3c0,3,2.2,5.5,5.2,5.9c25.2,3.7,45,23.5,48.7,48.7
-		c0.4,2.9,2.9,5.1,5.9,5.2h12.3C313.4,260.3,313.4,261.4,313.4,262.5z"/>
-</g>
-<path class="st2" d="M413.1,906.6h-7.9c-3.6,0-6.4-2.9-6.5-6.5V71.2c0-3.6,2.9-6.4,6.5-6.5h7.9c3.6,0,6.4,2.9,6.5,6.5V207
-	c0,4.9-1.2,9.6-3.4,14l-6.7,13v79.2l6.7,13c2.2,4.3,3.4,9.1,3.4,13.9v269.7c0,4.9-1.2,9.6-3.4,14l-6.7,13V716l6.7,13
-	c2.2,4.3,3.4,9.1,3.4,13.9v157.2C419.6,903.7,416.7,906.6,413.1,906.6z M405.2,65.7c-3,0-5.5,2.4-5.5,5.5v828.9c0,3,2.4,5.5,5.5,5.5
-	h7.9c3,0,5.5-2.4,5.5-5.5V742.9c0-4.7-1.1-9.3-3.3-13.5l-6.8-13.1c0-0.1-0.1-0.2-0.1-0.2v-79.5c0-0.1,0-0.2,0.1-0.2l6.8-13.1
-	c2.2-4.2,3.3-8.8,3.3-13.5V340.1c0-4.7-1.1-9.3-3.3-13.5l-6.8-13.1c0-0.1-0.1-0.2-0.1-0.2v-79.5c0-0.1,0-0.2,0.1-0.2l6.8-13.1
-	c2.2-4.2,3.3-8.8,3.3-13.5V71.2c0-3-2.4-5.5-5.5-5.5H405.2z"/>
-<path class="st2" d="M399.3,858.9h-11.2c-0.3,0-0.5-0.2-0.5-0.5V72c0-0.3,0.2-0.5,0.5-0.5h11.2c0.3,0,0.5,0.2,0.5,0.5v786.4
-	C399.8,858.7,399.6,858.9,399.3,858.9z M388.6,857.9h10.2V72.5h-10.2V857.9z"/>
-<path class="st2" d="M382.1,1000H275.9C158.9,1000,64,905.2,64,788.1l0,0V220.9C64,104.1,159.1,9.1,275.9,9.1h106.2
-	c3.6,0,6.5,2.9,6.5,6.5v978C388.6,997.1,385.7,1000,382.1,1000z M275.9,10.1C159.6,10.1,65,104.7,65,220.9v567.2
-	C65,904.4,159.6,999,275.9,999h106.2c3,0,5.5-2.4,5.5-5.5v-978c0-3-2.4-5.5-5.5-5.5H275.9V10.1z"/>
-<polygon class="st1" points="237.9,448.9 225.8,469.9 250,469.9 "/>
-<polygon class="st1" points="237.9,626.9 225.8,605.9 250,605.9 "/>
-<polygon class="st1" points="148.9,537.9 169.9,550 169.9,525.8 "/>
-<polygon class="st1" points="326.9,537.9 305.9,550 305.9,525.8 "/>
-<path class="st1" d="M413.1,717.1h-4.2c-0.6,0-1-0.4-1-1l0,0v-79.5c0-0.6,0.4-1,1-1l0,0h4.2c3.8,0,6.9,3.1,7,7v67.6
-	C420.1,714,417,717.1,413.1,717.1z M409.9,715.1h3.2c2.7,0,5-2.2,5-5v-67.6c0-2.7-2.2-5-5-5h-3.2V715.1z"/>
-<path class="st1" d="M413.1,314.3h-4.2c-0.6,0-1-0.4-1-1v-79.5c0-0.6,0.4-1,1-1h4.2c3.8,0,6.9,3.1,7,7v67.6
-	C420.1,311.2,417,314.3,413.1,314.3z M409.9,312.3h3.2c2.7,0,5-2.2,5-5v-67.6c0-2.7-2.2-5-5-5h-3.2V312.3z"/>
-<path class="st1" d="M81.3,139.3c-0.3,0-0.5-0.1-0.7-0.3l-3.4-3.4c-2-2-2.6-5.1-1.5-7.8C110.5,50.1,187.7,0.1,272.9,0h51.2
-	c3.8,0,6.9,3.1,7,7v2.6c0,0.6-0.4,1-1,1h-54.2C191.4,10.5,115.1,61,82.2,138.7c-0.1,0.3-0.4,0.5-0.7,0.6
-	C81.4,139.3,81.3,139.3,81.3,139.3z M272.9,2C188.5,2.1,112,51.7,77.5,128.7c-0.8,1.9-0.4,4.1,1.1,5.5l2.4,2.4
-	C114.6,58.8,191.3,8.5,276,8.6h53.2V7c0-2.7-2.2-5-5-5H272.9z"/>
-<path class="st1" d="M359.6,116.1h-46.9c-2.2,0-4-1.8-4-4v-11.7c0-2.2,1.8-4,4-4h46.9c2.2,0,4,1.8,4,4v11.7
-	C363.6,114.3,361.8,116.1,359.6,116.1z M312.7,98.5c-1.1,0-2,0.9-2,2v11.7c0,1.1,0.9,2,2,2h46.9c1.1,0,2-0.9,2-2v-11.7
-	c0-1.1-0.9-2-2-2H312.7z"/>
-<path class="st1" d="M237.9,502.9c-21.2,0-38.5-17.2-38.5-38.5c0-21.2,17.2-38.5,38.5-38.5c21.2,0,38.5,17.2,38.5,38.5
-	C276.4,485.7,259.2,502.9,237.9,502.9z M237.9,428c-20.1,0-36.5,16.3-36.5,36.5c0,20.1,16.3,36.5,36.5,36.5
-	c20.1,0,36.5-16.3,36.5-36.5S258.1,428,237.9,428z"/>
-<path class="st1" d="M237.9,649.8c-21.2,0-38.5-17.2-38.5-38.5s17.2-38.5,38.5-38.5c21.2,0,38.5,17.2,38.5,38.5
-	S259.2,649.8,237.9,649.8z M237.9,574.9c-20.1,0-36.5,16.3-36.5,36.5s16.3,36.5,36.5,36.5s36.5-16.3,36.5-36.5l0,0
-	C274.4,591.2,258.1,574.9,237.9,574.9z"/>
-<path class="st1" d="M311.4,576.3c-21.2,0-38.5-17.2-38.5-38.5c0-21.2,17.2-38.5,38.5-38.5s38.5,17.2,38.5,38.5l0,0
-	C349.8,559.1,332.6,576.3,311.4,576.3z M311.4,501.4c-20.1,0-36.5,16.3-36.5,36.5s16.3,36.5,36.5,36.5c20.1,0,36.5-16.3,36.5-36.5
-	l0,0C347.8,517.7,331.5,501.4,311.4,501.4L311.4,501.4z"/>
-<path class="st1" d="M164.5,576.3c-21.2,0-38.5-17.2-38.5-38.5c0-21.2,17.2-38.5,38.5-38.5s38.5,17.2,38.5,38.5l0,0
-	C202.9,559.1,185.7,576.3,164.5,576.3z M164.5,501.4c-20.1,0-36.5,16.3-36.5,36.5c0,20.1,16.3,36.5,36.5,36.5
-	c20.1,0,36.5-16.3,36.5-36.5l0,0C200.9,517.7,184.6,501.4,164.5,501.4L164.5,501.4z"/>
-<path class="st1" d="M314.1,753.7h-45c-5.5,0-9.9-4.4-9.9-9.9v-45c0-5.5,4.4-9.9,9.9-9.9h45c5.5,0,9.9,4.4,9.9,9.9v45
-	C324,749.3,319.5,753.7,314.1,753.7z M269.1,690.9c-4.4,0-7.9,3.6-7.9,7.9v45c0,4.4,3.6,7.9,7.9,7.9h45c4.4,0,7.9-3.6,7.9-7.9v-45
-	c0-4.4-3.6-7.9-7.9-7.9H269.1z"/>
-<path class="st1" d="M291.6,741.7c-11.3,0-20.4-9.2-20.4-20.4c0-11.3,9.2-20.4,20.4-20.4c11.3,0,20.4,9.2,20.4,20.4l0,0
-	C312,732.6,302.9,741.7,291.6,741.7z M291.6,702.8c-10.2,0-18.4,8.3-18.4,18.4s8.3,18.4,18.4,18.4c10.2,0,18.4-8.3,18.4-18.4
-	S301.8,702.9,291.6,702.8z"/>
-<path class="st1" d="M174.8,260.2h-12.3c-0.6,0-1-0.4-1-1l0,0c1.7-39.6,33.4-71.3,73-73c0.3,0,0.5,0.1,0.7,0.3s0.3,0.4,0.3,0.7v12.3
-	c0,3.5-2.6,6.4-6,6.9c-24.7,3.7-44.2,23.1-47.9,47.9C181.2,257.6,178.3,260.2,174.8,260.2z M163.6,258.2h11.2c2.5,0,4.6-1.8,4.9-4.3
-	c3.9-25.6,24-45.7,49.6-49.6c2.5-0.3,4.3-2.4,4.3-4.9v-11.2C196.2,190.3,165.7,220.8,163.6,258.2L163.6,258.2z"/>
-<path class="st1" d="M234.6,338.9L234.6,338.9c-39.6-1.7-71.3-33.4-73-73c0-0.6,0.4-1,1-1l0,0h12.3c3.5,0,6.4,2.6,6.9,6
-	c3.7,24.7,23.1,44.2,47.9,47.9c3.4,0.5,6,3.4,6,6.9V338C235.6,338.5,235.1,338.9,234.6,338.9L234.6,338.9z M163.6,266.9
-	c2.2,37.4,32.6,67.8,70,70v-11.2c0-2.5-1.8-4.6-4.3-4.9c-25.6-3.9-45.7-24-49.6-49.6c-0.3-2.5-2.4-4.3-4.9-4.3H163.6z"/>
-<path class="st1" d="M241.3,338.9c-0.6,0-1-0.4-1-1v-12.3c0-3.5,2.6-6.4,6-6.9c24.7-3.7,44.2-23.1,47.9-47.9c0.5-3.4,3.4-6,6.9-6
-	h12.3c0.6,0,1,0.4,1,1l0,0C312.6,305.5,280.9,337.2,241.3,338.9L241.3,338.9z M301,266.9c-2.5,0-4.6,1.8-4.9,4.3
-	c-3.9,25.6-24,45.7-49.6,49.6c-2.5,0.3-4.3,2.4-4.3,4.9v11.2c37.4-2.2,67.8-32.6,70-70H301z"/>
-<path class="st1" d="M313.3,260.2H301c-3.5,0-6.4-2.6-6.9-6c-3.7-24.7-23.1-44.2-47.9-47.9c-3.4-0.5-6-3.4-6-6.9v-12.3
-	c0-0.3,0.1-0.5,0.3-0.7s0.5-0.3,0.7-0.3c39.6,1.7,71.3,33.4,73,73C314.3,259.7,313.9,260.2,313.3,260.2L313.3,260.2L313.3,260.2z
-	 M242.3,188.2v11.2c0,2.5,1.8,4.6,4.3,4.9c25.6,3.9,45.7,24,49.6,49.6c0.3,2.5,2.4,4.3,4.9,4.3h11.2
-	C310.1,220.8,279.6,190.3,242.3,188.2L242.3,188.2z"/>
-<path class="st1" d="M237.9,339c-1.2,0-2.3,0-3.4-0.1c-0.5,0-0.9-0.5-0.9-1v-12.3c0-2.5-1.8-4.6-4.3-4.9
-	c-25.6-3.9-45.7-24-49.6-49.6c-0.3-2.5-2.4-4.3-4.9-4.3h-12.3c-0.5,0-1-0.4-1-0.9c-0.1-1.1-0.1-2.2-0.1-3.4s0-2.3,0.1-3.4
-	c0-0.5,0.5-0.9,1-0.9h12.3c2.5,0,4.6-1.8,4.9-4.3c3.9-25.6,24-45.7,49.6-49.6c2.5-0.3,4.3-2.4,4.3-4.9v-12.3c0-0.5,0.4-1,0.9-1
-	c2.3-0.1,4.5-0.1,6.8,0c0.5,0,0.9,0.5,0.9,1v12.3c0,2.5,1.8,4.6,4.3,4.9c25.6,3.9,45.7,24,49.6,49.6c0.3,2.5,2.4,4.3,4.9,4.3h12.3
-	c0.5,0,1,0.4,1,0.9c0.1,1.1,0.1,2.2,0.1,3.4s0,2.3-0.1,3.4c0,0.5-0.5,0.9-1,0.9H301c-2.5,0-4.6,1.8-4.9,4.3
-	c-3.9,25.6-24,45.7-49.6,49.6c-2.5,0.3-4.3,2.4-4.3,4.9v12.3c0,0.5-0.4,1-0.9,1C240.2,339,239.1,339,237.9,339z M235.6,337
-	c1.5,0.1,3.1,0.1,4.7,0v-11.3c0-3.5,2.6-6.4,6-6.9c24.7-3.7,44.2-23.1,47.9-47.9c0.5-3.4,3.4-6,6.9-6h11.3c0-0.8,0-1.5,0-2.3
-	s0-1.6,0-2.3H301c-3.5,0-6.4-2.6-6.9-6c-3.7-24.7-23.1-44.2-47.9-47.9c-3.4-0.5-6-3.4-6-6.9v-11.3c-1.5-0.1-3.1-0.1-4.7,0v11.3
-	c0,3.5-2.6,6.4-6,6.9c-24.7,3.7-44.2,23.1-47.9,47.9c-0.5,3.4-3.4,6-6.9,6h-11.3c0,0.8,0,1.5,0,2.3s0,1.6,0,2.3h11.3
-	c3.5,0,6.4,2.6,6.9,6c3.7,24.7,23.1,44.2,47.9,47.9c3.4,0.5,6,3.4,6,6.9L235.6,337z"/>
-</svg>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<style
+   type="text/css"
+   id="style2-6">
+	.st0{opacity:0.1;}
+	.st1{fill:#02C5E5;}
+	.st2{fill:#FF5F55;}
+	.st3{fill:#FFFFFF;}
+</style><g
+   id="g344"><path
+     class="st3"
+     d="m 413.1,906.6 h -7.9 c -3.6,0 -6.4,-2.9 -6.5,-6.5 V 71.2 c 0,-3.6 2.9,-6.4 6.5,-6.5 h 7.9 c 3.6,0 6.4,2.9 6.5,6.5 V 207 c 0,4.9 -1.2,9.6 -3.4,14 l -6.7,13 v 79.2 l 6.7,13 c 2.2,4.3 3.4,9.1 3.4,13.9 v 269.7 c 0,4.9 -1.2,9.6 -3.4,14 l -6.7,13 V 716 l 6.7,13 c 2.2,4.3 3.4,9.1 3.4,13.9 v 157.2 c 0,3.6 -2.9,6.5 -6.5,6.5 z M 405.2,65.7 c -3,0 -5.5,2.4 -5.5,5.5 v 828.9 c 0,3 2.4,5.5 5.5,5.5 h 7.9 c 3,0 5.5,-2.4 5.5,-5.5 V 742.9 c 0,-4.7 -1.1,-9.3 -3.3,-13.5 l -6.8,-13.1 c 0,-0.1 -0.1,-0.2 -0.1,-0.2 v -79.5 c 0,-0.1 0,-0.2 0.1,-0.2 l 6.8,-13.1 c 2.2,-4.2 3.3,-8.8 3.3,-13.5 V 340.1 c 0,-4.7 -1.1,-9.3 -3.3,-13.5 l -6.8,-13.1 c 0,-0.1 -0.1,-0.2 -0.1,-0.2 v -79.5 c 0,-0.1 0,-0.2 0.1,-0.2 l 6.8,-13.1 c 2.2,-4.2 3.3,-8.8 3.3,-13.5 V 71.2 c 0,-3 -2.4,-5.5 -5.5,-5.5 z"
+     id="path66-7"
+     style="fill:#000000" /><path
+     class="st3"
+     d="m 399.3,858.9 h -11.2 c -0.3,0 -0.5,-0.2 -0.5,-0.5 V 72 c 0,-0.3 0.2,-0.5 0.5,-0.5 h 11.2 c 0.3,0 0.5,0.2 0.5,0.5 v 786.4 c 0,0.3 -0.2,0.5 -0.5,0.5 z m -10.7,-1 h 10.2 V 72.5 h -10.2 z"
+     id="path68-5"
+     style="fill:#000000" /><path
+     class="st3"
+     d="M 382.1,1000 H 275.9 C 158.9,1000 64,905.2 64,788.1 c 0,0 0,0 0,0 V 220.9 C 64,104.1 159.1,9.1 275.9,9.1 h 106.2 c 3.6,0 6.5,2.9 6.5,6.5 v 978 c 0,3.5 -2.9,6.4 -6.5,6.4 z M 275.9,10.1 C 159.6,10.1 65,104.7 65,220.9 V 788.1 C 65,904.4 159.6,999 275.9,999 h 106.2 c 3,0 5.5,-2.4 5.5,-5.5 v -978 c 0,-3 -2.4,-5.5 -5.5,-5.5 H 275.9 Z"
+     id="path70-3"
+     style="fill:#000000" /><path
+     class="st1"
+     d="m 413.1,717.1 h -4.2 c -0.6,0 -1,-0.4 -1,-1 0,0 0,0 0,0 v -79.5 c 0,-0.6 0.4,-1 1,-1 0,0 0,0 0,0 h 4.2 c 3.8,0 6.9,3.1 7,7 v 67.6 c 0,3.8 -3.1,6.9 -7,6.9 z m -3.2,-2 h 3.2 c 2.7,0 5,-2.2 5,-5 v -67.6 c 0,-2.7 -2.2,-5 -5,-5 h -3.2 z"
+     id="path98"
+     style="fill:#000000" /><path
+     class="st1"
+     d="m 413.1,314.3 h -4.2 c -0.6,0 -1,-0.4 -1,-1 v -79.5 c 0,-0.6 0.4,-1 1,-1 h 4.2 c 3.8,0 6.9,3.1 7,7 v 67.6 c 0,3.8 -3.1,6.9 -7,6.9 z m -3.2,-2 h 3.2 c 2.7,0 5,-2.2 5,-5 v -67.6 c 0,-2.7 -2.2,-5 -5,-5 h -3.2 z"
+     id="path100"
+     style="fill:#000000" /><path
+     style="fill:#01c6e6;fill-opacity:0.992157;stroke:#4d4d4d;stroke-width:1"
+     d="m 257.47599,997.49473 c -26.30234,-2.3493 -49.90186,-9.17738 -75.04426,-21.71262 C 117.17154,943.24531 74.755874,881.82088 66.727355,808.2243 64.943441,791.87136 64.94041,218.41588 66.724145,200.93415 69.379611,174.90893 75.914592,151.99608 87.247373,128.97592 118.63505,65.218492 179.0982,21.796519 249.3051,12.593199 c 18.18131,-2.383363 133.61873,-2.6919419 135.94726,-0.363405 1.12672,1.12671 1.45478,112.251076 1.45478,492.764216 0,484.50248 -0.0325,491.32681 -2.34493,492.5644 -2.80172,1.49943 -109.98822,1.44564 -126.88622,-0.0636 z"
+     id="path1144" /><polygon
+     class="st1"
+     points="237.9,448.9 225.8,469.9 250,469.9 "
+     id="polygon80"
+     style="fill:#333333;stroke:#4d4d4d;stroke-width:0.927894"
+     transform="matrix(1.1037134,0,0,1.0523169,-24.636066,-24.267048)" /><polygon
+     class="st1"
+     points="250,605.9 237.9,626.9 225.8,605.9 "
+     id="polygon82"
+     style="fill:#333333;stroke:#4d4d4d;stroke-width:0.957418"
+     transform="matrix(1.0574383,0,0,1.0316716,-13.259456,-19.457378)" /><polygon
+     class="st1"
+     points="169.9,525.8 148.9,537.9 169.9,550 "
+     id="polygon84"
+     style="fill:#333333;stroke:#4d4d4d;stroke-width:0.931439"
+     transform="matrix(1.0443863,0,0,1.1036462,-7.5389156,-55.555947)" /><polygon
+     class="st1"
+     points="326.9,537.9 305.9,550 305.9,525.8 "
+     id="polygon86"
+     style="fill:#333333;stroke:#4d4d4d;stroke-width:0.849928"
+     transform="matrix(1.2181479,0,0,1.1364095,-67.797686,-73.39984)" /><path
+     class="st1"
+     d="m 81.300444,139.3 c -0.3,0 -0.5,-0.1 -0.7,-0.3 l -3.4,-3.4 c -2,-2 -2.6,-5.1 -1.5,-7.8 C 110.50044,50.1 187.70044,0.1 272.90044,0 h 51.2 c 3.8,0 6.9,3.1 7,7 v 2.6 c 0,0.6 -0.4,1 -1,1 h -54.2 c -84.5,-0.1 -160.8,50.4 -193.699996,128.1 -0.1,0.3 -0.4,0.5 -0.7,0.6 -0.1,0 -0.2,0 -0.2,0 z M 272.90044,2 c -84.4,0.1 -160.9,49.7 -195.399996,126.7 -0.8,1.9 -0.4,4.1 1.1,5.5 l 2.4,2.4 C 114.60044,58.8 191.30044,8.5 276.00044,8.6 h 53.2 V 7 c 0,-2.7 -2.2,-5 -5,-5 z"
+     id="path102"
+     style="fill:#000000" /><path
+     class="st1"
+     d="m 359.60044,116.1 h -46.9 c -2.2,0 -4,-1.8 -4,-4 v -11.7 c 0,-2.2 1.8,-4 4,-4 h 46.9 c 2.2,0 4,1.8 4,4 v 11.7 c 0,2.2 -1.8,4 -4,4 z m -46.9,-17.6 c -1.1,0 -2,0.9 -2,2 v 11.7 c 0,1.1 0.9,2 2,2 h 46.9 c 1.1,0 2,-0.9 2,-2 v -11.7 c 0,-1.1 -0.9,-2 -2,-2 z"
+     id="path104"
+     style="fill:#000000" /><path
+     class="st1"
+     d="m 237.90044,502.9 c -21.2,0 -38.5,-17.2 -38.5,-38.5 0,-21.2 17.2,-38.5 38.5,-38.5 21.2,0 38.5,17.2 38.5,38.5 0,21.3 -17.2,38.5 -38.5,38.5 z m 0,-74.9 c -20.1,0 -36.5,16.3 -36.5,36.5 0,20.1 16.3,36.5 36.5,36.5 20.1,0 36.5,-16.3 36.5,-36.5 0,-20.2 -16.3,-36.5 -36.5,-36.5 z"
+     id="path106"
+     style="fill:#000000" /><path
+     class="st1"
+     d="m 237.90044,649.8 c -21.2,0 -38.5,-17.2 -38.5,-38.5 0,-21.3 17.2,-38.5 38.5,-38.5 21.2,0 38.5,17.2 38.5,38.5 0,21.3 -17.2,38.5 -38.5,38.5 z m 0,-74.9 c -20.1,0 -36.5,16.3 -36.5,36.5 0,20.2 16.3,36.5 36.5,36.5 20.2,0 36.5,-16.3 36.5,-36.5 0,0 0,0 0,0 0,-20.2 -16.3,-36.5 -36.5,-36.5 z"
+     id="path108"
+     style="fill:#000000" /><path
+     class="st1"
+     d="m 311.40044,576.3 c -21.2,0 -38.5,-17.2 -38.5,-38.5 0,-21.2 17.2,-38.5 38.5,-38.5 21.3,0 38.5,17.2 38.5,38.5 v 0 c -0.1,21.3 -17.3,38.5 -38.5,38.5 z m 0,-74.9 c -20.1,0 -36.5,16.3 -36.5,36.5 0,20.2 16.3,36.5 36.5,36.5 20.1,0 36.5,-16.3 36.5,-36.5 0,0 0,0 0,0 -0.1,-20.2 -16.4,-36.5 -36.5,-36.5 z"
+     id="path110"
+     style="fill:#000000" /><path
+     class="st1"
+     d="m 164.50044,576.3 c -21.2,0 -38.5,-17.2 -38.5,-38.5 0,-21.2 17.2,-38.5 38.5,-38.5 21.3,0 38.5,17.2 38.5,38.5 v 0 c -0.1,21.3 -17.3,38.5 -38.5,38.5 z m 0,-74.9 c -20.1,0 -36.5,16.3 -36.5,36.5 0,20.1 16.3,36.5 36.5,36.5 20.1,0 36.5,-16.3 36.5,-36.5 0,0 0,0 0,0 -0.1,-20.2 -16.4,-36.5 -36.5,-36.5 z"
+     id="path112"
+     style="fill:#000000" /><path
+     class="st1"
+     d="m 314.10044,753.7 h -45 c -5.5,0 -9.9,-4.4 -9.9,-9.9 v -45 c 0,-5.5 4.4,-9.9 9.9,-9.9 h 45 c 5.5,0 9.9,4.4 9.9,9.9 v 45 c 0,5.5 -4.5,9.9 -9.9,9.9 z m -45,-62.8 c -4.4,0 -7.9,3.6 -7.9,7.9 v 45 c 0,4.4 3.6,7.9 7.9,7.9 h 45 c 4.4,0 7.9,-3.6 7.9,-7.9 v -45 c 0,-4.4 -3.6,-7.9 -7.9,-7.9 z"
+     id="path114"
+     style="fill:#000000" /><path
+     class="st1"
+     d="m 291.60044,741.7 c -11.3,0 -20.4,-9.2 -20.4,-20.4 0,-11.3 9.2,-20.4 20.4,-20.4 11.3,0 20.4,9.2 20.4,20.4 0,0 0,0 0,0 0,11.3 -9.1,20.4 -20.4,20.4 z m 0,-38.9 c -10.2,0 -18.4,8.3 -18.4,18.4 0,10.1 8.3,18.4 18.4,18.4 10.2,0 18.4,-8.3 18.4,-18.4 0,-10.1 -8.2,-18.3 -18.4,-18.4 z"
+     id="path116"
+     style="fill:#000000" /><path
+     class="st1"
+     d="m 174.80044,260.2 h -12.3 c -0.6,0 -1,-0.4 -1,-1 0,0 0,0 0,0 1.7,-39.6 33.4,-71.3 73,-73 0.3,0 0.5,0.1 0.7,0.3 0.2,0.2 0.3,0.4 0.3,0.7 v 12.3 c 0,3.5 -2.6,6.4 -6,6.9 -24.7,3.7 -44.2,23.1 -47.9,47.9 -0.4,3.3 -3.3,5.9 -6.8,5.9 z m -11.2,-2 h 11.2 c 2.5,0 4.6,-1.8 4.9,-4.3 3.9,-25.6 24,-45.7 49.6,-49.6 2.5,-0.3 4.3,-2.4 4.3,-4.9 v -11.2 c -37.4,2.1 -67.9,32.6 -70,70 z"
+     id="path118"
+     style="fill:#000000" /><path
+     class="st1"
+     d="m 234.60044,338.9 v 0 c -39.6,-1.7 -71.3,-33.4 -73,-73 0,-0.6 0.4,-1 1,-1 0,0 0,0 0,0 h 12.3 c 3.5,0 6.4,2.6 6.9,6 3.7,24.7 23.1,44.2 47.9,47.9 3.4,0.5 6,3.4 6,6.9 V 338 c -0.1,0.5 -0.6,0.9 -1.1,0.9 z m -71,-72 c 2.2,37.4 32.6,67.8 70,70 v -11.2 c 0,-2.5 -1.8,-4.6 -4.3,-4.9 -25.6,-3.9 -45.7,-24 -49.6,-49.6 -0.3,-2.5 -2.4,-4.3 -4.9,-4.3 z"
+     id="path120"
+     style="fill:#000000" /><path
+     class="st1"
+     d="m 241.30044,338.9 c -0.6,0 -1,-0.4 -1,-1 v -12.3 c 0,-3.5 2.6,-6.4 6,-6.9 24.7,-3.7 44.2,-23.1 47.9,-47.9 0.5,-3.4 3.4,-6 6.9,-6 h 12.3 c 0.6,0 1,0.4 1,1 0,0 0,0 0,0 -1.8,39.7 -33.5,71.4 -73.1,73.1 z m 59.7,-72 c -2.5,0 -4.6,1.8 -4.9,4.3 -3.9,25.6 -24,45.7 -49.6,49.6 -2.5,0.3 -4.3,2.4 -4.3,4.9 v 11.2 c 37.4,-2.2 67.8,-32.6 70,-70 z"
+     id="path122"
+     style="fill:#000000" /><path
+     class="st1"
+     d="m 313.30044,260.2 h -12.3 c -3.5,0 -6.4,-2.6 -6.9,-6 -3.7,-24.7 -23.1,-44.2 -47.9,-47.9 -3.4,-0.5 -6,-3.4 -6,-6.9 v -12.3 c 0,-0.3 0.1,-0.5 0.3,-0.7 0.2,-0.2 0.5,-0.3 0.7,-0.3 39.6,1.7 71.3,33.4 73,73 0.1,0.6 -0.3,1.1 -0.9,1.1 0,0 0,0 0,0 z m -71,-72 v 11.2 c 0,2.5 1.8,4.6 4.3,4.9 25.6,3.9 45.7,24 49.6,49.6 0.3,2.5 2.4,4.3 4.9,4.3 h 11.2 c -2.2,-37.4 -32.7,-67.9 -70,-70 z"
+     id="path124"
+     style="fill:#000000" /><path
+     class="st1"
+     d="m 237.90044,339 c -1.2,0 -2.3,0 -3.4,-0.1 -0.5,0 -0.9,-0.5 -0.9,-1 v -12.3 c 0,-2.5 -1.8,-4.6 -4.3,-4.9 -25.6,-3.9 -45.7,-24 -49.6,-49.6 -0.3,-2.5 -2.4,-4.3 -4.9,-4.3 h -12.3 c -0.5,0 -1,-0.4 -1,-0.9 -0.1,-1.1 -0.1,-2.2 -0.1,-3.4 0,-1.2 0,-2.3 0.1,-3.4 0,-0.5 0.5,-0.9 1,-0.9 h 12.3 c 2.5,0 4.6,-1.8 4.9,-4.3 3.9,-25.6 24,-45.7 49.6,-49.6 2.5,-0.3 4.3,-2.4 4.3,-4.9 v -12.3 c 0,-0.5 0.4,-1 0.9,-1 2.3,-0.1 4.5,-0.1 6.8,0 0.5,0 0.9,0.5 0.9,1 v 12.3 c 0,2.5 1.8,4.6 4.3,4.9 25.6,3.9 45.7,24 49.6,49.6 0.3,2.5 2.4,4.3 4.9,4.3 h 12.3 c 0.5,0 1,0.4 1,0.9 0.1,1.1 0.1,2.2 0.1,3.4 0,1.2 0,2.3 -0.1,3.4 0,0.5 -0.5,0.9 -1,0.9 h -12.3 c -2.5,0 -4.6,1.8 -4.9,4.3 -3.9,25.6 -24,45.7 -49.6,49.6 -2.5,0.3 -4.3,2.4 -4.3,4.9 v 12.3 c 0,0.5 -0.4,1 -0.9,1 -1.1,0.1 -2.2,0.1 -3.4,0.1 z m -2.3,-2 c 1.5,0.1 3.1,0.1 4.7,0 v -11.3 c 0,-3.5 2.6,-6.4 6,-6.9 24.7,-3.7 44.2,-23.1 47.9,-47.9 0.5,-3.4 3.4,-6 6.9,-6 h 11.3 c 0,-0.8 0,-1.5 0,-2.3 0,-0.8 0,-1.6 0,-2.3 h -11.4 c -3.5,0 -6.4,-2.6 -6.9,-6 -3.7,-24.7 -23.1,-44.2 -47.9,-47.9 -3.4,-0.5 -6,-3.4 -6,-6.9 v -11.3 c -1.5,-0.1 -3.1,-0.1 -4.7,0 v 11.3 c 0,3.5 -2.6,6.4 -6,6.9 -24.7,3.7 -44.2,23.1 -47.9,47.9 -0.5,3.4 -3.4,6 -6.9,6 h -11.3 c 0,0.8 0,1.5 0,2.3 0,0.8 0,1.6 0,2.3 h 11.3 c 3.5,0 6.4,2.6 6.9,6 3.7,24.7 23.1,44.2 47.9,47.9 3.4,0.5 6,3.4 6,6.9 z"
+     id="path126"
+     style="fill:#000000" /><path
+     style="fill:#1a1a1a;fill-opacity:1;stroke:#4d4d4d;stroke-width:0.999997"
+     d="m 158.02789,574.27925 c -14.73064,-3.25266 -24.85554,-12.70578 -29.04419,-27.11717 -0.98592,-3.39218 -1.21679,-6.26957 -0.93511,-11.65556 0.33774,-6.4583 0.67944,-7.76803 3.52546,-13.51272 11.35216,-22.91431 40.68588,-27.928 58.61532,-10.01846 19.42229,19.40073 11.99924,51.86436 -13.89781,60.78009 -5.19354,1.788 -13.81105,2.50701 -18.26367,1.52382 z m 12.59864,-36.29462 c 0,-7.35074 -0.18108,-13.36496 -0.40241,-13.36496 -0.89601,0 -23.32454,13.1809 -22.99291,13.51259 0.66445,0.66458 22.24473,13.11359 22.82266,13.1657 0.31497,0.0284 0.57266,-5.96261 0.57266,-13.31333 z"
+     id="path179" /><path
+     style="fill:#1a1a1a;fill-opacity:1;stroke:#4d4d4d;stroke-width:0.999997"
+     d="m 232.50517,500.57091 c -6.91699,-0.86484 -15.04235,-4.99807 -20.4853,-10.42051 -14.58513,-14.53016 -14.55979,-36.85709 0.0584,-51.42015 23.0282,-22.94142 62.26853,-6.95317 62.26853,25.37095 0,10.34881 -3.46897,18.75364 -10.723,25.98031 -8.34032,8.30891 -19.22192,11.97685 -31.1186,10.4894 z m 18.58209,-30.69278 c -0.91811,-2.38357 -12.79282,-22.35099 -13.28879,-22.34521 -0.45143,0.005 -5.88471,9.05299 -11.95805,19.91302 l -2.0157,3.60439 h 13.85703 c 12.18288,0 13.80248,-0.14161 13.40551,-1.1722 z"
+     id="path181" /><path
+     style="fill:#1a1a1a;fill-opacity:1;stroke:#4d4d4d;stroke-width:0.999997"
+     d="m 229.21434,646.98161 c -12.9232,-3.46654 -23.15418,-13.73508 -26.52403,-26.62142 -5.92248,-22.64757 11.58541,-45.21876 35.15949,-45.32763 7.44717,-0.0344 11.29183,0.91312 18.09999,4.46071 16.90217,8.80735 23.84898,30.39169 15.40753,47.87245 -7.54225,15.61868 -25.6403,24.04261 -42.14298,19.61589 z M 245.434,616.92014 c 3.65424,-6.30197 6.48622,-11.61534 6.29329,-11.8075 -0.19293,-0.19216 -6.40658,-0.25572 -13.80812,-0.14123 l -13.45735,0.20814 6.66623,11.58776 c 3.66642,6.37327 6.89025,11.59297 7.16405,11.59935 0.27381,0.006 3.48766,-5.14457 7.1419,-11.44652 z"
+     id="path185" /><path
+     style="fill:#1a1a1a;fill-opacity:1;stroke:#4d4d4d;stroke-width:1"
+     d="m 307.85537,574.24407 c -0.34478,-0.0389 -1.62711,-0.27075 -2.84962,-0.51537 -11.23844,-2.24892 -20.9226,-9.70179 -26.17378,-20.1432 -2.82839,-5.62398 -4.20289,-12.18393 -3.75883,-17.93953 1.14218,-14.80435 11.33006,-27.74217 25.61809,-32.53303 8.75405,-2.93529 18.04495,-2.18507 26.72988,2.15843 8.69225,4.34715 15.48783,12.11097 18.64346,21.29973 5.25881,15.31297 -0.71552,32.17026 -14.73029,41.56334 -5.99457,4.01773 -13.35804,6.28235 -20.18834,6.20884 -1.46502,-0.0157 -2.94577,-0.0604 -3.29057,-0.0993 z m -0.66719,-23.08553 c 0.71175,-0.35815 3.02697,-1.62049 5.14496,-2.80516 8.66766,-4.84825 15.63944,-9.1681 16.21592,-10.0477 0.27948,-0.42642 0.28078,-0.49758 0.0166,-0.90068 -0.86957,-1.32678 -21.50733,-13.52937 -22.8817,-13.52937 -0.25925,0 -0.5656,0.11351 -0.68079,0.25225 -0.41371,0.49837 -0.59707,4.78502 -0.59431,13.89388 0.003,9.06159 0.17803,13.03427 0.59744,13.53951 0.32082,0.38645 0.78324,0.3011 2.18189,-0.40273 z"
+     id="path187" /><path
+     style="fill:#333333;fill-opacity:1;stroke:#4d4d4d;stroke-width:1"
+     d="m 287.96017,739.09726 c -1.01606,-0.21912 -2.9756,-0.9477 -4.35453,-1.61905 -2.09414,-1.01956 -2.88115,-1.59464 -4.77748,-3.49097 -1.89792,-1.89791 -2.4703,-2.68159 -3.48941,-4.77748 -2.66648,-5.48389 -2.66607,-10.55714 10e-4,-16.08572 1.0133,-2.10022 1.56326,-2.85257 3.48092,-4.76199 3.62968,-3.61405 7.72755,-5.3398 12.70198,-5.34921 8.35146,-0.0158 15.68299,5.71579 17.81213,13.92506 0.52326,2.01754 0.54009,6.16569 0.0339,8.34799 -1.47072,6.34008 -6.30854,11.44929 -12.69973,13.41212 -2.44922,0.7522 -6.26202,0.92699 -8.70906,0.39925 z"
+     id="path189" /><path
+     style="fill:#1a1a1a;fill-opacity:1;stroke:#4d4d4d;stroke-width:1"
+     d="m 267.23012,751.2862 c -1.59942,-0.43597 -2.94763,-1.29847 -4.05871,-2.59652 -1.81264,-2.11766 -1.73429,-0.87988 -1.73429,-27.39725 0,-26.73402 -0.0972,-25.30688 1.87658,-27.54923 0.58306,-0.66239 1.71204,-1.51487 2.55332,-1.92799 l 1.5081,-0.74058 h 24.1534 24.15339 l 1.77672,0.87468 c 1.25727,0.61895 2.04823,1.23027 2.70544,2.091 1.78729,2.34073 1.72742,1.33094 1.64816,27.80036 -0.0712,23.78487 -0.0733,23.86757 -0.63865,25.09049 -0.72339,1.56486 -2.26169,3.10316 -3.93043,3.93043 l -1.30842,0.64864 -23.75199,0.0516 c -18.21394,0.0396 -24.03192,-0.0247 -24.95262,-0.27565 z m 27.28995,-9.68076 c 10.60326,-1.53286 18.09097,-10.66806 17.50501,-21.35655 -0.18432,-3.36213 -0.66908,-5.27077 -2.04745,-8.06138 -4.59235,-9.29756 -15.46557,-13.67756 -25.3079,-10.19463 -2.76161,0.97725 -4.68871,2.16763 -7.02836,4.34145 -3.05146,2.83517 -5.11688,6.34636 -6.04249,10.27217 -0.50715,2.151 -0.50715,7.22087 0,9.37186 0.92171,3.90925 2.95421,7.3745 6.0133,10.25221 2.20884,2.07787 4.16469,3.31668 6.72144,4.2573 3.40627,1.25315 6.72782,1.61756 10.18645,1.11757 z"
+     id="path191" /><path
+     style="fill:#1a1a1a;fill-opacity:1;stroke:#4d4d4d;stroke-width:1"
+     d="m 235.77295,330.34531 c 0,-6.0203 -0.0462,-6.51813 -0.73076,-7.87124 -1.06164,-2.09851 -2.95253,-3.39477 -5.65313,-3.87537 -15.06064,-2.68022 -27.49575,-10.15006 -36.51861,-21.93692 -4.96934,-6.49162 -8.83069,-15.11098 -10.3887,-23.18981 -0.83474,-4.3284 -1.3998,-5.65891 -2.97647,-7.00848 -1.7724,-1.51711 -3.30405,-1.79252 -9.96885,-1.79252 h -5.86461 v -2.11107 -2.11107 h 6.26944 c 6.12912,0 6.30805,-0.0192 7.9945,-0.85963 2.44443,-1.21811 3.32179,-2.74063 4.22338,-7.32906 4.56927,-23.25403 22.39532,-40.97679 45.63214,-45.36773 4.16129,-0.78634 5.57438,-1.57205 6.90818,-3.84114 0.9048,-1.53927 0.91186,-1.5954 1.02116,-8.12677 l 0.11006,-6.57679 h 2.0822 2.0822 v 6.27497 c 0,6.20191 0.0104,6.29547 0.89315,8.03629 1.32629,2.61551 2.65075,3.37644 7.56606,4.34684 19.37922,3.82593 35.08856,16.98397 42.28514,35.41774 1.04383,2.67375 1.9437,5.93165 3.31831,12.01372 0.58905,2.60627 1.67368,4.16462 3.60307,5.17675 1.1513,0.60396 1.95144,0.68258 7.85861,0.77219 l 6.57679,0.0998 v 2.0925 2.09249 h -6.26944 c -6.12912,0 -6.30805,0.0192 -7.9945,0.85963 -2.20181,1.09721 -3.39863,2.90223 -3.90849,5.89474 -4.06097,23.83452 -22.22419,42.32715 -45.97159,46.8053 -4.2535,0.8021 -5.71797,1.66037 -6.96502,4.08193 -0.79329,1.54043 -0.83455,1.89301 -0.94026,8.03533 l -0.11057,6.42419 h -2.08169 -2.0817 z"
+     id="path1082" /><path
+     style="fill:#1a1a1a;fill-opacity:1;stroke:#4d4d4d;stroke-width:1"
+     d="m 163.78864,257.28223 c 0.0926,-0.49123 0.26012,-1.9162 0.37218,-3.1666 0.34565,-3.85681 1.73866,-10.12043 3.27937,-14.74553 8.02141,-24.0797 28.10082,-42.70464 52.74332,-48.92282 3.12397,-0.78829 7.58171,-1.54879 11.2861,-1.92544 l 2.02988,-0.20639 v 5.8726 c 0,8.54266 -0.3854,9.15422 -6.53853,10.37563 -18.42711,3.65779 -33.66767,15.25204 -41.92018,31.89074 -2.55007,5.14144 -4.14587,10.08856 -5.47376,16.9691 -0.45828,2.3746 -1.81844,3.9985 -3.71595,4.43649 -0.71452,0.16493 -3.75876,0.30335 -6.76499,0.30761 l -5.46587,0.008 z"
+     id="path1084" /><path
+     style="fill:#1a1a1a;fill-opacity:1;stroke:#4d4d4d;stroke-width:1"
+     d="m 229.76452,336.39384 c -26.99792,-3.04756 -50.79328,-21.35759 -60.92173,-46.87799 -2.38214,-6.00221 -4.22117,-13.35788 -4.67827,-18.71196 -0.11259,-1.31887 -0.27512,-2.73804 -0.36117,-3.1537 l -0.15645,-0.75574 6.32279,0.10618 c 5.78597,0.0972 6.39885,0.16304 7.21874,0.77582 1.58067,1.18137 2.03872,2.1715 2.89278,6.25312 1.21968,5.82894 2.45374,9.35857 5.18759,14.8375 2.85902,5.72977 5.67403,9.77885 9.85937,14.18161 8.62003,9.0678 19.6967,15.16512 31.73111,17.46684 3.63419,0.69508 4.63135,1.16546 5.80819,2.73983 0.6132,0.82034 0.6781,1.4276 0.77012,7.20628 0.0943,5.92221 0.0643,6.30785 -0.48717,6.26798 -0.32321,-0.0233 -1.75687,-0.17446 -3.1859,-0.33577 z"
+     id="path1086" /><path
+     style="fill:#1a1a1a;fill-opacity:1;stroke:#4d4d4d;stroke-width:1"
+     d="m 299.6703,257.71116 c -2.39043,-0.853 -2.81858,-1.58503 -3.81252,-6.51855 -3.66786,-18.20579 -15.40436,-33.45997 -31.99138,-41.57986 -4.81668,-2.35792 -8.58209,-3.67044 -13.47836,-4.69819 -4.72195,-0.99115 -6.17077,-1.58672 -7.05619,-2.9006 -0.70499,-1.04613 -0.73853,-1.38133 -0.73853,-7.38107 0,-3.45685 0.11517,-6.28518 0.25593,-6.28518 0.14076,0 1.93111,0.20926 3.97855,0.46502 11.96867,1.4951 22.85594,5.62979 32.79042,12.45291 4.36974,3.00118 7.416,5.6069 11.57682,9.90259 9.30395,9.60553 15.50823,20.66713 18.77966,33.48224 0.93232,3.65217 2.12151,10.886 2.12151,12.90514 0,0.58643 -0.30132,0.619 -5.60245,0.60551 -3.82949,-0.01 -5.98886,-0.15214 -6.82346,-0.44996 z"
+     id="path1088" /><path
+     style="fill:#1a1a1a;fill-opacity:1;stroke:#4d4d4d;stroke-width:1"
+     d="m 242.3249,330.46177 c 0.097,-5.7735 0.163,-6.38655 0.77566,-7.20629 1.18269,-1.58243 2.17182,-2.02925 6.33209,-2.86041 23.48707,-4.69236 41.89612,-23.31363 46.43689,-46.97223 0.66775,-3.47916 1.14738,-4.47847 2.71006,-5.64639 0.81991,-0.6128 1.43277,-0.67865 7.22079,-0.77584 l 6.32483,-0.10621 -0.19591,1.73011 c -1.19107,10.51857 -3.29919,17.9842 -7.45853,26.41337 -11.17834,22.65366 -32.93361,38.14197 -57.96776,41.26919 -2.04744,0.25577 -3.84896,0.46502 -4.00338,0.46502 -0.15442,0 -0.23305,-2.83964 -0.17474,-6.31032 z"
+     id="path1090" /><path
+     style="fill:#000000;fill-opacity:1;stroke:#4d4d4d;stroke-width:0.999998"
+     d="m 311.60253,113.45766 c -0.55307,-0.55307 -0.67321,-1.83753 -0.67321,-7.19731 0,-4.50308 0.15925,-6.68335 0.51409,-7.03819 0.38766,-0.38766 6.43841,-0.5141 24.60307,-0.5141 21.32785,0 24.16614,0.0772 24.76219,0.67322 0.55166,0.55166 0.67322,1.82364 0.67322,7.0445 0,6.09825 -0.0408,6.39986 -0.95215,7.03819 -0.83385,0.58406 -3.89051,0.66691 -24.60307,0.66691 -20.92962,0 -23.72838,-0.0775 -24.32414,-0.67322 z"
+     id="path1092" /><path
+     style="fill:#000000;fill-opacity:1;stroke:#4d4d4d;stroke-width:0.999998"
+     d="m 78.977784,134.18912 c -2.35328,-2.74929 -2.18932,-3.66269 2.26682,-12.62797 C 92.012734,99.89682 104.871,81.96966 121.771,65.058734 153.11752,33.69194 193.3541,12.833792 237.03838,5.305545 252.10894,2.708387 253.57756,2.630423 291.07604,2.43687 l 34.76922,-0.179466 1.35092,1.207149 c 0.9677,0.864713 1.41875,1.712966 1.59003,2.990242 l 0.23911,1.783092 -33.78877,0.194148 c -36.2509,0.208295 -38.76527,0.335101 -53.2555,2.685802 -38.392,6.2282 -72.8916,22.039868 -103.29303,47.340693 -6.79226,5.652686 -19.46547,18.33117 -25.22484,25.23531 -8.3636,10.02603 -16.479016,21.67655 -22.544486,32.36489 -3.07683,5.42188 -9.61802,18.64996 -9.61802,19.45027 0,0.91062 -0.80534,0.45303 -2.32289,-1.31988 z"
+     id="path1094" /><path
+     style="fill:#1a1a1a;fill-opacity:1;stroke:#4d4d4d;stroke-width:1"
+     d="m 398.20583,464.93186 c 0,-216.02489 0.12146,-304.39871 0.26991,-196.38626 0.14845,108.01244 0.14845,284.76008 0,392.77252 -0.14845,108.01245 -0.26991,19.63863 -0.26991,-196.38626 z"
+     id="path1150" /><path
+     style="fill:#1a1a1a;fill-opacity:1;stroke:#4d4d4d;stroke-width:1"
+     d="m 401.44318,902.40274 c -1.48283,-2.11702 -1.64585,-43.40647 -1.64585,-416.85429 0,-373.44781 0.16302,-414.737261 1.64585,-416.854286 1.37591,-1.964385 2.64173,-2.349769 7.718,-2.349769 3.33969,0 6.64309,0.570921 7.34088,1.268713 0.96181,0.961813 1.26871,18.598983 1.26871,72.911362 0,69.01305 -0.0775,71.84973 -2.1109,77.28456 -1.161,3.10304 -3.53984,7.89508 -5.28631,10.64899 l -3.1754,5.00708 v 40.24031 c 0,37.61687 0.12902,40.42327 1.97893,43.04667 1.08842,1.5435 3.34831,5.42309 5.02199,8.6213 l 3.04306,5.81494 0.27946,141.61892 c 0.30957,156.88126 0.80443,145.17745 -6.6628,157.57802 l -3.66064,6.0791 v 40.51406 c 0,26.52506 0.37415,40.74531 1.08359,41.18376 0.59597,0.36833 2.85586,4.08361 5.02199,8.25617 l 3.9384,7.58648 0.28906,83.91411 c 0.21318,61.88506 -0.029,84.29733 -0.9224,85.37384 -0.77641,0.93553 -3.42147,1.45973 -7.36562,1.45973 -5.161,0 -6.41977,-0.37921 -7.8,-2.34977 z"
+     id="path1152" /><path
+     style="fill:#1a1a1a;fill-opacity:1;stroke:#4d4d4d;stroke-width:1"
+     d="M 389.22472,464.93186 V 72.687962 h 4.22905 4.22904 v 392.243898 392.2439 h -4.22904 -4.22905 z"
+     id="path1154" /><path
+     style="fill:#00c7e7;fill-opacity:0.992157;stroke:#4d4d4d;stroke-width:1"
+     d="m 409.89998,273.33293 v -38.63294 h 3.04188 c 1.74435,0 3.58682,0.88543 4.31941,2.07573 1.73761,2.82321 1.73761,70.29119 0,73.11439 -0.73259,1.19032 -2.57506,2.07573 -4.31941,2.07573 h -3.04188 z"
+     id="path1156" /><path
+     style="fill:#00c7e7;fill-opacity:0.992157;stroke:#4d4d4d;stroke-width:1"
+     d="m 409.89998,676.164 v -38.66403 h 3.04381 c 1.74545,0 3.58909,0.88613 4.32215,2.07741 1.7387,2.82547 1.7387,70.34777 0,73.17325 -0.73306,1.19129 -2.5767,2.0774 -4.32215,2.0774 h -3.04381 z"
+     id="path1158" /><path
+     style="opacity:1;fill:#1a1a1a;fill-opacity:1;stroke:#4d4d4d;stroke-width:1"
+     d=""
+     id="path1502" /></g></svg>
diff --git a/Ryujinx/Ui/Resources/Controller_JoyConPair.svg b/Ryujinx/Ui/Resources/Controller_JoyConPair.svg
index fca94d18f6..cf0f2bb09a 100644
--- a/Ryujinx/Ui/Resources/Controller_JoyConPair.svg
+++ b/Ryujinx/Ui/Resources/Controller_JoyConPair.svg
@@ -1,218 +1,476 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 viewBox="0 0 1000.8 1000" style="enable-background:new 0 0 1000.8 1000;" xml:space="preserve">
-<style type="text/css">
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.1"
+   id="Layer_1"
+   x="0px"
+   y="0px"
+   viewBox="0 0 1000.8 1000"
+   style="enable-background:new 0 0 1000.8 1000;"
+   xml:space="preserve"
+   sodipodi:docname="JoyConPair.svg"
+   inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"><metadata
+   id="metadata161"><rdf:RDF><cc:Work
+       rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+         rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
+   id="defs159" /><sodipodi:namedview
+   pagecolor="#ffffff"
+   bordercolor="#666666"
+   borderopacity="1"
+   objecttolerance="10"
+   gridtolerance="10"
+   guidetolerance="10"
+   inkscape:pageopacity="0"
+   inkscape:pageshadow="2"
+   inkscape:window-width="1920"
+   inkscape:window-height="1003"
+   id="namedview157"
+   showgrid="false"
+   inkscape:zoom="0.70910507"
+   inkscape:cx="438.34351"
+   inkscape:cy="472.42785"
+   inkscape:window-x="1400"
+   inkscape:window-y="0"
+   inkscape:window-maximized="1"
+   inkscape:current-layer="Layer_1" />
+<style
+   type="text/css"
+   id="style2">
 	.st0{opacity:0.1;}
 	.st1{fill:#02C5E5;}
 	.st2{fill:#FF5F55;}
 	.st3{fill:#FFFFFF;}
 </style>
-<g class="st0">
-	<path class="st1" d="M419.1,642.6v67.6c0,3.3-2.7,6-6,6h-4.2v-79.5h4.2C416.4,636.6,419.1,639.3,419.1,642.6z"/>
-	<path class="st1" d="M419.1,239.8v67.6c0,3.3-2.7,6-6,6h-4.2v-79.5h4.2C416.4,233.9,419.1,236.5,419.1,239.8z"/>
-	<path class="st1" d="M330.1,7v2.6h-54.2c-84.8,0-161.4,50.7-194.6,128.7l-3.4-3.4c-1.8-1.7-2.3-4.4-1.3-6.6
-		C111.2,50.8,188.1,1,272.9,1h51.2C327.4,1,330.1,3.7,330.1,7z"/>
-	<path class="st1" d="M359.6,115.1h-46.9c-1.6,0-3-1.3-3-3v-11.7c0-1.6,1.3-3,3-3h46.9c1.6,0,3,1.3,3,3v11.7
-		C362.6,113.8,361.3,115.1,359.6,115.1z"/>
-	<circle class="st1" cx="237.9" cy="464.4" r="37.5"/>
-	<circle class="st1" cx="237.9" cy="611.3" r="37.5"/>
-	<circle class="st1" cx="311.4" cy="537.9" r="37.5"/>
-	
-		<ellipse transform="matrix(0.9951 -9.853756e-02 9.853756e-02 0.9951 -52.201 18.8252)" class="st1" cx="164.5" cy="537.9" rx="37.5" ry="37.5"/>
-	<path class="st1" d="M269.1,689.9h45c4.9,0,8.9,4,8.9,8.9v45c0,4.9-4,8.9-8.9,8.9h-45c-4.9,0-8.9-4-8.9-8.9v-45
-		C260.2,693.9,264.2,689.9,269.1,689.9z"/>
-	<circle class="st1" cx="291.6" cy="721.3" r="19.4"/>
-	<path class="st1" d="M234.6,187.1v12.3c0,3-2.2,5.5-5.2,5.9c-25.2,3.7-45,23.5-48.7,48.7c-0.4,2.9-2.9,5.1-5.9,5.2h-12.3
-		C164.3,220.1,195.5,188.9,234.6,187.1z"/>
-	<path class="st1" d="M234.6,325.6v12.3c-39.1-1.7-70.3-33-72.1-72h12.3c3,0,5.5,2.2,5.9,5.2c3.7,25.2,23.5,45,48.7,48.7
-		C232.4,320.1,234.6,322.6,234.6,325.6z"/>
-	<path class="st1" d="M313.3,265.9c-1.7,39.1-33,70.3-72.1,72v-12.3c0-3,2.2-5.5,5.2-5.9c25.2-3.7,45-23.5,48.7-48.7
-		c0.4-2.9,2.9-5.1,5.9-5.2L313.3,265.9z"/>
-	<path class="st1" d="M313.3,259.2H301c-3,0-5.5-2.2-5.9-5.2c-3.7-25.2-23.5-45-48.7-48.7c-2.9-0.4-5.1-2.9-5.2-5.9v-12.3
-		C280.3,188.9,311.6,220.1,313.3,259.2z"/>
-	<path class="st1" d="M313.4,262.5c0,1.1,0,2.2-0.1,3.3H301c-3,0-5.5,2.2-5.9,5.2c-3.7,25.2-23.5,45-48.7,48.7
-		c-2.9,0.4-5.1,2.9-5.2,5.9v12.3c-1.1,0.1-2.2,0.1-3.3,0.1s-2.2,0-3.3-0.1v-12.3c0-3-2.2-5.5-5.2-5.9c-25.2-3.7-45-23.5-48.7-48.7
-		c-0.4-2.9-2.9-5.1-5.9-5.2h-12.3c-0.1-1.1-0.1-2.2-0.1-3.3s0-2.2,0.1-3.3h12.3c3,0,5.5-2.2,5.9-5.2c3.7-25.2,23.5-45,48.7-48.7
-		c2.9-0.4,5.1-2.9,5.2-5.9v-12.3c1.1-0.1,2.2-0.1,3.3-0.1s2.2,0,3.3,0.1v12.3c0,3,2.2,5.5,5.2,5.9c25.2,3.7,45,23.5,48.7,48.7
-		c0.4,2.9,2.9,5.1,5.9,5.2h12.3C313.4,260.3,313.4,261.4,313.4,262.5z"/>
+
+<g
+   class="st0"
+   id="g64">
+	<path
+   class="st2"
+   d="M597.9,233.9v79.5h-4.2c-3.3,0-6-2.7-6-6v-67.6c0-3.3,2.7-6,6-6H597.9z"
+   id="path36" />
+	<path
+   class="st2"
+   d="M597.9,636.6v79.5h-4.2c-3.3,0-6-2.7-6-6v-67.6c0-3.3,2.7-6,6-6H597.9z"
+   id="path38" />
+	<path
+   class="st2"
+   d="M929,134.9l-3.4,3.4C892.4,60.3,815.8,9.6,730.9,9.6h-54.2V7c0-3.3,2.7-6,6-6c0,0,0,0,0,0h51.2   c84.8,0,161.7,49.8,196.4,127.2C931.3,130.5,930.8,133.1,929,134.9z"
+   id="path40" />
+	<path
+   class="st2"
+   d="M679.5,94.5V82.8c0-1.6-1.3-3-3-3l0,0h-11.7c-1.6,0-3,1.3-3,3c0,0,0,0,0,0v11.7c0,1.6-1.3,3-3,3l0,0h-11.7   c-1.6,0-3,1.3-3,3c0,0,0,0,0,0v11.7c0,1.6,1.3,3,3,3l0,0h11.7c1.6,0,3,1.3,3,3c0,0,0,0,0,0v11.7c0,1.6,1.3,3,3,3l0,0h11.7   c1.6,0,3-1.3,3-3v0v-11.7c0-1.6,1.3-3,3-3l0,0h11.7c1.6,0,3-1.3,3-3c0,0,0,0,0,0v-11.7c0-1.6-1.3-3-3-3l0,0h-11.7   C680.8,97.5,679.5,96.1,679.5,94.5C679.5,94.5,679.5,94.5,679.5,94.5z"
+   id="path42" />
+	<circle
+   class="st2"
+   cx="768.9"
+   cy="333.9"
+   r="37.5"
+   id="circle44" />
+	<circle
+   class="st2"
+   cx="768.9"
+   cy="187.1"
+   r="37.5"
+   id="circle46" />
+	<circle
+   class="st2"
+   cx="842.3"
+   cy="260.5"
+   r="37.5"
+   id="circle48" />
+	<circle
+   class="st2"
+   cx="695.5"
+   cy="260.5"
+   r="37.5"
+   id="circle50" />
+	<circle
+   class="st2"
+   cx="715"
+   cy="721.3"
+   r="27.9"
+   id="circle52" />
+	<path
+   class="st2"
+   d="M765.6,460.3v12.3c0,3-2.2,5.5-5.2,5.9c-25.2,3.7-45,23.5-48.7,48.7c-0.4,2.9-2.9,5.1-5.9,5.2h-12.3   C695.2,493.3,726.5,462,765.6,460.3z"
+   id="path54" />
+	<path
+   class="st2"
+   d="M765.6,598.8v12.3c-39.1-1.7-70.3-33-72.1-72h12.3c3,0,5.5,2.2,5.9,5.2c3.7,25.2,23.5,45,48.7,48.7   C763.4,593.3,765.6,595.8,765.6,598.8z"
+   id="path56" />
+	<path
+   class="st2"
+   d="M844.3,539c-1.7,39.1-33,70.3-72.1,72v-12.3c0-3,2.2-5.5,5.2-5.9c25.2-3.7,45-23.5,48.7-48.7   c0.4-2.9,2.9-5.1,5.9-5.2L844.3,539z"
+   id="path58" />
+	<path
+   class="st2"
+   d="M844.3,532.4H832c-3,0-5.5-2.2-5.9-5.2c-3.7-25.2-23.5-45-48.7-48.7c-2.9-0.4-5.1-2.9-5.2-5.9v-12.3   C811.3,462,842.6,493.3,844.3,532.4z"
+   id="path60" />
+	<path
+   class="st2"
+   d="M844.4,535.7c0,1.1,0,2.2-0.1,3.3H832c-3,0-5.5,2.2-5.9,5.2c-3.7,25.2-23.5,45-48.7,48.7   c-2.9,0.4-5.1,2.9-5.2,5.9v12.3c-1.1,0.1-2.2,0.1-3.3,0.1s-2.2,0-3.3-0.1v-12.3c0-3-2.2-5.5-5.2-5.9c-25.2-3.7-45-23.5-48.7-48.7   c-0.4-2.9-2.9-5.1-5.9-5.2h-12.3c-0.1-1.1-0.1-2.2-0.1-3.3s0-2.2,0.1-3.3h12.3c3,0,5.5-2.2,5.9-5.2c3.7-25.2,23.5-45,48.7-48.7   c2.9-0.4,5.1-2.9,5.2-5.9v-12.3c1.1-0.1,2.2-0.1,3.3-0.1s2.2,0,3.3,0.1v12.3c0,3,2.2,5.5,5.2,5.9c25.2,3.7,45,23.5,48.7,48.7   c0.4,2.9,2.9,5.1,5.9,5.2h12.3C844.3,533.5,844.4,534.6,844.4,535.7z"
+   id="path62" />
 </g>
-<g class="st0">
-	<path class="st2" d="M597.9,233.9v79.5h-4.2c-3.3,0-6-2.7-6-6v-67.6c0-3.3,2.7-6,6-6H597.9z"/>
-	<path class="st2" d="M597.9,636.6v79.5h-4.2c-3.3,0-6-2.7-6-6v-67.6c0-3.3,2.7-6,6-6H597.9z"/>
-	<path class="st2" d="M929,134.9l-3.4,3.4C892.4,60.3,815.8,9.6,730.9,9.6h-54.2V7c0-3.3,2.7-6,6-6c0,0,0,0,0,0h51.2
-		c84.8,0,161.7,49.8,196.4,127.2C931.3,130.5,930.8,133.1,929,134.9z"/>
-	<path class="st2" d="M679.5,94.5V82.8c0-1.6-1.3-3-3-3l0,0h-11.7c-1.6,0-3,1.3-3,3c0,0,0,0,0,0v11.7c0,1.6-1.3,3-3,3l0,0h-11.7
-		c-1.6,0-3,1.3-3,3c0,0,0,0,0,0v11.7c0,1.6,1.3,3,3,3l0,0h11.7c1.6,0,3,1.3,3,3c0,0,0,0,0,0v11.7c0,1.6,1.3,3,3,3l0,0h11.7
-		c1.6,0,3-1.3,3-3v0v-11.7c0-1.6,1.3-3,3-3l0,0h11.7c1.6,0,3-1.3,3-3c0,0,0,0,0,0v-11.7c0-1.6-1.3-3-3-3l0,0h-11.7
-		C680.8,97.5,679.5,96.1,679.5,94.5C679.5,94.5,679.5,94.5,679.5,94.5z"/>
-	<circle class="st2" cx="768.9" cy="333.9" r="37.5"/>
-	<circle class="st2" cx="768.9" cy="187.1" r="37.5"/>
-	<circle class="st2" cx="842.3" cy="260.5" r="37.5"/>
-	<circle class="st2" cx="695.5" cy="260.5" r="37.5"/>
-	<circle class="st2" cx="715" cy="721.3" r="27.9"/>
-	<path class="st2" d="M765.6,460.3v12.3c0,3-2.2,5.5-5.2,5.9c-25.2,3.7-45,23.5-48.7,48.7c-0.4,2.9-2.9,5.1-5.9,5.2h-12.3
-		C695.2,493.3,726.5,462,765.6,460.3z"/>
-	<path class="st2" d="M765.6,598.8v12.3c-39.1-1.7-70.3-33-72.1-72h12.3c3,0,5.5,2.2,5.9,5.2c3.7,25.2,23.5,45,48.7,48.7
-		C763.4,593.3,765.6,595.8,765.6,598.8z"/>
-	<path class="st2" d="M844.3,539c-1.7,39.1-33,70.3-72.1,72v-12.3c0-3,2.2-5.5,5.2-5.9c25.2-3.7,45-23.5,48.7-48.7
-		c0.4-2.9,2.9-5.1,5.9-5.2L844.3,539z"/>
-	<path class="st2" d="M844.3,532.4H832c-3,0-5.5-2.2-5.9-5.2c-3.7-25.2-23.5-45-48.7-48.7c-2.9-0.4-5.1-2.9-5.2-5.9v-12.3
-		C811.3,462,842.6,493.3,844.3,532.4z"/>
-	<path class="st2" d="M844.4,535.7c0,1.1,0,2.2-0.1,3.3H832c-3,0-5.5,2.2-5.9,5.2c-3.7,25.2-23.5,45-48.7,48.7
-		c-2.9,0.4-5.1,2.9-5.2,5.9v12.3c-1.1,0.1-2.2,0.1-3.3,0.1s-2.2,0-3.3-0.1v-12.3c0-3-2.2-5.5-5.2-5.9c-25.2-3.7-45-23.5-48.7-48.7
-		c-0.4-2.9-2.9-5.1-5.9-5.2h-12.3c-0.1-1.1-0.1-2.2-0.1-3.3s0-2.2,0.1-3.3h12.3c3,0,5.5-2.2,5.9-5.2c3.7-25.2,23.5-45,48.7-48.7
-		c2.9-0.4,5.1-2.9,5.2-5.9v-12.3c1.1-0.1,2.2-0.1,3.3-0.1s2.2,0,3.3,0.1v12.3c0,3,2.2,5.5,5.2,5.9c25.2,3.7,45,23.5,48.7,48.7
-		c0.4,2.9,2.9,5.1,5.9,5.2h12.3C844.3,533.5,844.4,534.6,844.4,535.7z"/>
-</g>
-<path class="st3" d="M413.1,906.6h-7.9c-3.6,0-6.4-2.9-6.5-6.5V71.2c0-3.6,2.9-6.4,6.5-6.5h7.9c3.6,0,6.4,2.9,6.5,6.5V207
-	c0,4.9-1.2,9.6-3.4,14l-6.7,13v79.2l6.7,13c2.2,4.3,3.4,9.1,3.4,13.9v269.7c0,4.9-1.2,9.6-3.4,14l-6.7,13V716l6.7,13
-	c2.2,4.3,3.4,9.1,3.4,13.9v157.2C419.6,903.7,416.7,906.6,413.1,906.6z M405.2,65.7c-3,0-5.5,2.4-5.5,5.5v828.9c0,3,2.4,5.5,5.5,5.5
-	h7.9c3,0,5.5-2.4,5.5-5.5V742.9c0-4.7-1.1-9.3-3.3-13.5l-6.8-13.1c0-0.1-0.1-0.2-0.1-0.2v-79.5c0-0.1,0-0.2,0.1-0.2l6.8-13.1
-	c2.2-4.2,3.3-8.8,3.3-13.5V340.1c0-4.7-1.1-9.3-3.3-13.5l-6.8-13.1c0-0.1-0.1-0.2-0.1-0.2v-79.5c0-0.1,0-0.2,0.1-0.2l6.8-13.1
-	c2.2-4.2,3.3-8.8,3.3-13.5V71.2c0-3-2.4-5.5-5.5-5.5L405.2,65.7z"/>
-<path class="st3" d="M399.3,858.9h-11.2c-0.3,0-0.5-0.2-0.5-0.5V72c0-0.3,0.2-0.5,0.5-0.5h11.2c0.3,0,0.5,0.2,0.5,0.5v786.4
-	C399.8,858.7,399.6,858.9,399.3,858.9z M388.6,857.9h10.2V72.5h-10.2V857.9z"/>
-<path class="st3" d="M382.1,1000H275.9C158.9,1000,64,905.2,64,788.1c0,0,0,0,0,0V220.9C64,104.1,159.1,9.1,275.9,9.1h106.2
-	c3.6,0,6.5,2.9,6.5,6.5v978C388.6,997.1,385.7,1000,382.1,1000z M275.9,10.1C159.6,10.1,65,104.7,65,220.9v567.2
-	C65,904.4,159.6,999,275.9,999h106.2c3,0,5.5-2.4,5.5-5.5v-978c0-3-2.4-5.5-5.5-5.5H275.9z"/>
-<path class="st3" d="M601.6,906.6h-7.9c-3.6,0-6.4-2.9-6.5-6.5V742.9c0-4.9,1.2-9.6,3.4-13.9l6.7-13v-79.2l-6.7-13
-	c-2.2-4.3-3.4-9.1-3.4-14V340.1c0-4.9,1.2-9.6,3.4-13.9l6.7-13V234l-6.7-13c-2.2-4.3-3.4-9.1-3.4-14V71.2c0-3.6,2.9-6.4,6.5-6.5h7.9
-	c3.6,0,6.4,2.9,6.5,6.5v828.9C608,903.7,605.1,906.6,601.6,906.6z M593.7,65.7c-3,0-5.5,2.4-5.5,5.5V207c0,4.7,1.1,9.3,3.3,13.5
-	l6.8,13.1c0,0.1,0.1,0.1,0.1,0.2v79.5c0,0.1,0,0.2-0.1,0.2l-6.8,13.1c-2.2,4.2-3.3,8.8-3.3,13.5v269.7c0,4.7,1.1,9.3,3.3,13.5
-	l6.8,13.1c0,0.1,0.1,0.1,0.1,0.2v79.5c0,0.1,0,0.2-0.1,0.2l-6.8,13.1c-2.2,4.2-3.3,8.8-3.3,13.5v157.2c0,3,2.4,5.5,5.5,5.5h7.9
-	c3,0,5.5-2.4,5.5-5.5V71.2c0-3-2.4-5.5-5.5-5.5L593.7,65.7z"/>
-<path class="st3" d="M618.8,858.9h-11.3c-0.3,0-0.5-0.2-0.5-0.5c0,0,0,0,0,0V72c0-0.3,0.2-0.5,0.5-0.5h11.3c0.3,0,0.5,0.2,0.5,0.5
-	v786.4C619.3,858.7,619.1,858.9,618.8,858.9C618.8,858.9,618.8,858.9,618.8,858.9z M608,857.9h10.3V72.5H608V857.9z"/>
-<path class="st3" d="M730.9,1000H624.7c-3.6,0-6.5-2.9-6.5-6.5v-978c0-3.6,2.9-6.5,6.5-6.5h106.2c116.8,0,211.9,95.1,211.9,211.9
-	v567.2C942.8,905.1,848,1000,730.9,1000C730.9,1000,730.9,1000,730.9,1000z M624.7,10.1c-3,0-5.5,2.4-5.5,5.5v978
-	c0,3,2.4,5.5,5.5,5.5h106.2c116.3,0,210.9-94.6,210.9-210.9V220.9c0-116.3-94.6-210.9-210.9-210.9L624.7,10.1z"/>
-<path class="st3" d="M715,763.2c-23.1,0-41.9-18.7-41.9-41.9s18.7-41.9,41.9-41.9s41.9,18.7,41.9,41.9l0,0
-	C756.8,744.4,738.1,763.1,715,763.2z M715,680.4c-22.6,0-40.9,18.3-40.9,40.9c0,22.6,18.3,40.9,40.9,40.9
-	c22.6,0,40.9-18.3,40.9-40.9v0C755.8,698.7,737.6,680.4,715,680.4z"/>
-<polygon class="st1" points="237.9,448.9 225.8,469.9 250,469.9 "/>
-<polygon class="st1" points="237.9,626.9 225.8,605.9 250,605.9 "/>
-<polygon class="st1" points="148.9,537.9 169.9,550 169.9,525.8 "/>
-<polygon class="st1" points="326.9,537.9 305.9,550 305.9,525.8 "/>
-<path class="st2" d="M782.2,203.2h-5.5l-7.8-12.9l-7.8,12.9h-5.4l10.6-16.3l-9.8-15.6h5.2l7.3,12l7.4-12h5l-9.8,15.4L782.2,203.2z"
-	/>
-<path class="st2" d="M709.2,244.5l-11.6,20.6v11.4h-4.4V265l-11.6-20.5h5.3l6.4,11.7l2.3,4.7l2.2-4.3l6.4-12.1L709.2,244.5z"/>
-<path class="st2" d="M855.9,276.5h-4.7l-2.2-7h-13.3l-2.3,7h-4.5l10.6-32h6L855.9,276.5z M847.7,265.6l-5.4-17.1l-5.4,17.1
-	L847.7,265.6z"/>
-<path class="st2" d="M779.4,340.4c0,1.4-0.3,2.8-0.9,4.1c-0.6,1.2-1.5,2.2-2.5,3c-1.2,0.9-2.6,1.5-4,1.9c-1.7,0.4-3.4,0.7-5.2,0.6
-	h-8.4v-32h9.2c7.1,0,10.7,2.6,10.7,7.8c0,1.6-0.4,3.1-1.2,4.5c-1,1.4-2.4,2.3-4,2.8c0.9,0.2,1.7,0.4,2.5,0.8c0.8,0.4,1.5,0.9,2,1.5
-	c0.6,0.6,1.1,1.4,1.4,2.2C779.2,338.4,779.4,339.4,779.4,340.4z M773.7,326.3c0-0.6-0.1-1.3-0.3-1.8c-0.2-0.6-0.6-1.1-1-1.5
-	c-0.6-0.5-1.3-0.8-2-1c-1-0.3-2.1-0.4-3.2-0.4h-4.5v10h4.4c0.9,0,1.8-0.1,2.7-0.3c0.8-0.2,1.5-0.5,2.1-1c0.6-0.4,1-1,1.3-1.7
-	C773.6,327.9,773.7,327.1,773.7,326.3L773.7,326.3z M774.8,340.5c0-0.8-0.2-1.5-0.5-2.2c-0.4-0.7-0.9-1.2-1.5-1.7
-	c-0.7-0.5-1.5-0.8-2.4-1c-1-0.3-2.1-0.4-3.2-0.4h-4.5v11h4.6c2.5,0,4.4-0.5,5.6-1.4C774.2,343.8,774.9,342.2,774.8,340.5
-	L774.8,340.5z"/>
-<path class="st2" d="M715,701.3L695.4,721h5.6v16.8h28.2V721h5.3L715,701.3z M720.7,731.8h-11.1V721h11.1V731.8z"/>
-<path class="st1" d="M413.1,717.1h-4.2c-0.6,0-1-0.4-1-1c0,0,0,0,0,0v-79.5c0-0.6,0.4-1,1-1c0,0,0,0,0,0h4.2c3.8,0,6.9,3.1,7,7v67.6
-	C420.1,714,417,717.1,413.1,717.1z M409.9,715.1h3.2c2.7,0,5-2.2,5-5v-67.6c0-2.7-2.2-5-5-5h-3.2V715.1z"/>
-<path class="st1" d="M413.1,314.3h-4.2c-0.6,0-1-0.4-1-1v-79.5c0-0.6,0.4-1,1-1h4.2c3.8,0,6.9,3.1,7,7v67.6
-	C420.1,311.2,417,314.3,413.1,314.3z M409.9,312.3h3.2c2.7,0,5-2.2,5-5v-67.6c0-2.7-2.2-5-5-5h-3.2V312.3z"/>
-<path class="st1" d="M81.3,139.3c-0.3,0-0.5-0.1-0.7-0.3l-3.4-3.4c-2-2-2.6-5.1-1.5-7.8C110.5,50.1,187.7,0.1,272.9,0h51.2
-	c3.8,0,6.9,3.1,7,7v2.6c0,0.6-0.4,1-1,1h-54.2C191.4,10.5,115.1,61,82.2,138.7c-0.1,0.3-0.4,0.5-0.7,0.6
-	C81.4,139.3,81.3,139.3,81.3,139.3z M272.9,2C188.5,2.1,112,51.7,77.5,128.7c-0.8,1.9-0.4,4.1,1.1,5.5l2.4,2.4
-	c33.6-77.8,110.3-128.1,195-128h53.2V7c0-2.7-2.2-5-5-5L272.9,2z"/>
-<path class="st1" d="M359.6,116.1h-46.9c-2.2,0-4-1.8-4-4v-11.7c0-2.2,1.8-4,4-4h46.9c2.2,0,4,1.8,4,4v11.7
-	C363.6,114.3,361.8,116.1,359.6,116.1z M312.7,98.5c-1.1,0-2,0.9-2,2v11.7c0,1.1,0.9,2,2,2h46.9c1.1,0,2-0.9,2-2v-11.7
-	c0-1.1-0.9-2-2-2H312.7z"/>
-<path class="st1" d="M237.9,502.9c-21.2,0-38.5-17.2-38.5-38.5c0-21.2,17.2-38.5,38.5-38.5c21.2,0,38.5,17.2,38.5,38.5
-	C276.4,485.7,259.2,502.9,237.9,502.9z M237.9,428c-20.1,0-36.5,16.3-36.5,36.5c0,20.1,16.3,36.5,36.5,36.5
-	c20.1,0,36.5-16.3,36.5-36.5C274.4,444.3,258.1,428,237.9,428z"/>
-<path class="st1" d="M237.9,649.8c-21.2,0-38.5-17.2-38.5-38.5s17.2-38.5,38.5-38.5c21.2,0,38.5,17.2,38.5,38.5
-	C276.4,632.6,259.2,649.8,237.9,649.8z M237.9,574.9c-20.1,0-36.5,16.3-36.5,36.5s16.3,36.5,36.5,36.5s36.5-16.3,36.5-36.5
-	c0,0,0,0,0,0C274.4,591.2,258.1,574.9,237.9,574.9z"/>
-<path class="st1" d="M311.4,576.3c-21.2,0-38.5-17.2-38.5-38.5c0-21.2,17.2-38.5,38.5-38.5s38.5,17.2,38.5,38.5l0,0
-	C349.8,559.1,332.6,576.3,311.4,576.3z M311.4,501.4c-20.1,0-36.5,16.3-36.5,36.5s16.3,36.5,36.5,36.5c20.1,0,36.5-16.3,36.5-36.5
-	c0,0,0,0,0,0C347.8,517.7,331.5,501.4,311.4,501.4L311.4,501.4z"/>
-<path class="st1" d="M164.5,576.3c-21.2,0-38.5-17.2-38.5-38.5c0-21.2,17.2-38.5,38.5-38.5s38.5,17.2,38.5,38.5l0,0
-	C202.9,559.1,185.7,576.3,164.5,576.3z M164.5,501.4c-20.1,0-36.5,16.3-36.5,36.5c0,20.1,16.3,36.5,36.5,36.5
-	c20.1,0,36.5-16.3,36.5-36.5c0,0,0,0,0,0C200.9,517.7,184.6,501.4,164.5,501.4L164.5,501.4z"/>
-<path class="st1" d="M314.1,753.7h-45c-5.5,0-9.9-4.4-9.9-9.9v-45c0-5.5,4.4-9.9,9.9-9.9h45c5.5,0,9.9,4.4,9.9,9.9v45
-	C324,749.3,319.5,753.7,314.1,753.7z M269.1,690.9c-4.4,0-7.9,3.6-7.9,7.9v45c0,4.4,3.6,7.9,7.9,7.9h45c4.4,0,7.9-3.6,7.9-7.9v-45
-	c0-4.4-3.6-7.9-7.9-7.9H269.1z"/>
-<path class="st1" d="M291.6,741.7c-11.3,0-20.4-9.2-20.4-20.4c0-11.3,9.2-20.4,20.4-20.4c11.3,0,20.4,9.2,20.4,20.4c0,0,0,0,0,0
-	C312,732.6,302.9,741.7,291.6,741.7z M291.6,702.8c-10.2,0-18.4,8.3-18.4,18.4s8.3,18.4,18.4,18.4c10.2,0,18.4-8.3,18.4-18.4
-	C310,711.1,301.8,702.9,291.6,702.8z"/>
-<path class="st1" d="M174.8,260.2h-12.3c-0.6,0-1-0.4-1-1c0,0,0,0,0,0c1.7-39.6,33.4-71.3,73-73c0.3,0,0.5,0.1,0.7,0.3
-	c0.2,0.2,0.3,0.4,0.3,0.7v12.3c0,3.5-2.6,6.4-6,6.9c-24.7,3.7-44.2,23.1-47.9,47.9C181.2,257.6,178.3,260.2,174.8,260.2z
-	 M163.6,258.2h11.2c2.5,0,4.6-1.8,4.9-4.3c3.9-25.6,24-45.7,49.6-49.6c2.5-0.3,4.3-2.4,4.3-4.9v-11.2
-	C196.2,190.3,165.7,220.8,163.6,258.2L163.6,258.2z"/>
-<path class="st1" d="M234.6,338.9L234.6,338.9c-39.6-1.7-71.3-33.4-73-73c0-0.6,0.4-1,1-1c0,0,0,0,0,0h12.3c3.5,0,6.4,2.6,6.9,6
-	c3.7,24.7,23.1,44.2,47.9,47.9c3.4,0.5,6,3.4,6,6.9v12.3C235.6,338.5,235.1,338.9,234.6,338.9L234.6,338.9z M163.6,266.9
-	c2.2,37.4,32.6,67.8,70,70v-11.2c0-2.5-1.8-4.6-4.3-4.9c-25.6-3.9-45.7-24-49.6-49.6c-0.3-2.5-2.4-4.3-4.9-4.3L163.6,266.9z"/>
-<path class="st1" d="M241.3,338.9c-0.6,0-1-0.4-1-1v-12.3c0-3.5,2.6-6.4,6-6.9c24.7-3.7,44.2-23.1,47.9-47.9c0.5-3.4,3.4-6,6.9-6
-	h12.3c0.6,0,1,0.4,1,1c0,0,0,0,0,0C312.6,305.5,280.9,337.2,241.3,338.9L241.3,338.9z M301,266.9c-2.5,0-4.6,1.8-4.9,4.3
-	c-3.9,25.6-24,45.7-49.6,49.6c-2.5,0.3-4.3,2.4-4.3,4.9v11.2c37.4-2.2,67.8-32.6,70-70L301,266.9z"/>
-<path class="st1" d="M313.3,260.2H301c-3.5,0-6.4-2.6-6.9-6c-3.7-24.7-23.1-44.2-47.9-47.9c-3.4-0.5-6-3.4-6-6.9v-12.3
-	c0-0.3,0.1-0.5,0.3-0.7c0.2-0.2,0.5-0.3,0.7-0.3c39.6,1.7,71.3,33.4,73,73C314.3,259.7,313.9,260.2,313.3,260.2
-	C313.3,260.2,313.3,260.2,313.3,260.2L313.3,260.2z M242.3,188.2v11.2c0,2.5,1.8,4.6,4.3,4.9c25.6,3.9,45.7,24,49.6,49.6
-	c0.3,2.5,2.4,4.3,4.9,4.3h11.2C310.1,220.8,279.6,190.3,242.3,188.2L242.3,188.2z"/>
-<path class="st1" d="M237.9,339c-1.2,0-2.3,0-3.4-0.1c-0.5,0-0.9-0.5-0.9-1v-12.3c0-2.5-1.8-4.6-4.3-4.9
-	c-25.6-3.9-45.7-24-49.6-49.6c-0.3-2.5-2.4-4.3-4.9-4.3h-12.3c-0.5,0-1-0.4-1-0.9c-0.1-1.1-0.1-2.2-0.1-3.4s0-2.3,0.1-3.4
-	c0-0.5,0.5-0.9,1-0.9h12.3c2.5,0,4.6-1.8,4.9-4.3c3.9-25.6,24-45.7,49.6-49.6c2.5-0.3,4.3-2.4,4.3-4.9v-12.3c0-0.5,0.4-1,0.9-1
-	c2.3-0.1,4.5-0.1,6.8,0c0.5,0,0.9,0.5,0.9,1v12.3c0,2.5,1.8,4.6,4.3,4.9c25.6,3.9,45.7,24,49.6,49.6c0.3,2.5,2.4,4.3,4.9,4.3h12.3
-	c0.5,0,1,0.4,1,0.9c0.1,1.1,0.1,2.2,0.1,3.4s0,2.3-0.1,3.4c0,0.5-0.5,0.9-1,0.9H301c-2.5,0-4.6,1.8-4.9,4.3
-	c-3.9,25.6-24,45.7-49.6,49.6c-2.5,0.3-4.3,2.4-4.3,4.9v12.3c0,0.5-0.4,1-0.9,1C240.2,339,239.1,339,237.9,339z M235.6,337
-	c1.5,0.1,3.1,0.1,4.7,0v-11.3c0-3.5,2.6-6.4,6-6.9c24.7-3.7,44.2-23.1,47.9-47.9c0.5-3.4,3.4-6,6.9-6h11.3c0-0.8,0-1.5,0-2.3
-	s0-1.6,0-2.3H301c-3.5,0-6.4-2.6-6.9-6c-3.7-24.7-23.1-44.2-47.9-47.9c-3.4-0.5-6-3.4-6-6.9v-11.3c-1.5-0.1-3.1-0.1-4.7,0v11.3
-	c0,3.5-2.6,6.4-6,6.9c-24.7,3.7-44.2,23.1-47.9,47.9c-0.5,3.4-3.4,6-6.9,6h-11.3c0,0.8,0,1.5,0,2.3s0,1.6,0,2.3h11.3
-	c3.5,0,6.4,2.6,6.9,6c3.7,24.7,23.1,44.2,47.9,47.9c3.4,0.5,6,3.4,6,6.9L235.6,337z"/>
-<path class="st2" d="M597.9,314.3h-4.2c-3.8,0-6.9-3.1-7-7v-67.6c0-3.8,3.1-6.9,7-7h4.2c0.6,0,1,0.4,1,1c0,0,0,0,0,0v79.5
-	C598.9,313.9,598.4,314.3,597.9,314.3C597.9,314.3,597.9,314.3,597.9,314.3z M593.7,234.8c-2.7,0-5,2.2-5,5v67.6c0,2.7,2.2,5,5,5
-	h3.2v-77.5H593.7z"/>
-<path class="st2" d="M597.9,717.1h-4.2c-3.8,0-6.9-3.1-7-7v-67.6c0-3.8,3.1-6.9,7-7h4.2c0.6,0,1,0.4,1,1c0,0,0,0,0,0v79.5
-	C598.9,716.6,598.4,717.1,597.9,717.1C597.9,717.1,597.9,717.1,597.9,717.1z M593.7,637.6c-2.7,0-5,2.2-5,5v67.6c0,2.7,2.2,5,5,5
-	h3.2v-77.5H593.7z"/>
-<path class="st2" d="M925.6,139.3c-0.1,0-0.1,0-0.2,0c-0.3-0.1-0.6-0.3-0.7-0.6C891.7,61,815.4,10.5,730.9,10.6h-54.2
-	c-0.6,0-1-0.4-1-1c0,0,0,0,0,0V7c0-3.8,3.1-6.9,7-7h51.2c85.2,0.1,162.4,50.1,197.3,127.8c1.2,2.6,0.6,5.7-1.5,7.8l-3.4,3.4
-	C926.1,139.2,925.8,139.3,925.6,139.3z M677.7,8.6h53.2c84.7-0.1,161.3,50.2,195,128l2.4-2.4l0,0c1.5-1.4,1.9-3.6,1.1-5.5
-	C894.8,51.7,818.3,2.1,733.9,2h-51.2c-2.7,0-5,2.2-5,5V8.6z"/>
-<path class="st2" d="M676.5,133.7h-11.7c-2.2,0-4-1.8-4-4v-11.7c0-1.1-0.9-2-2-2h-11.7c-2.2,0-4-1.8-4-4v-11.7c0-2.2,1.8-4,4-4h11.7
-	c1.1,0,2-0.9,2-2V82.8c0-2.2,1.8-4,4-4h11.7c2.2,0,4,1.8,4,4v11.7c0,1.1,0.9,2,2,2h11.7c2.2,0,4,1.8,4,4v11.7c0,2.2-1.8,4-4,4h-11.7
-	c-1.1,0-2,0.9-2,2v11.7C680.5,131.9,678.7,133.7,676.5,133.7z M647.2,98.5c-1.1,0-2,0.9-2,2v11.7c0,1.1,0.9,2,2,2h11.7
-	c2.2,0,4,1.8,4,4v11.7c0,1.1,0.9,2,2,2h11.7c1.1,0,2-0.9,2-2v-11.7c0-2.2,1.8-4,4-4h11.7c1.1,0,2-0.9,2-2v-11.7c0-1.1-0.9-2-2-2
-	h-11.7c-2.2,0-4-1.8-4-4V82.8c0-1.1-0.9-2-2-2h-11.7c-1.1,0-2,0.9-2,2v11.7c0,2.2-1.8,4-4,4L647.2,98.5z"/>
-<path class="st2" d="M768.9,372.4c-21.2,0-38.5-17.2-38.5-38.5c0-21.2,17.2-38.5,38.5-38.5c21.2,0,38.5,17.2,38.5,38.5
-	C807.3,355.2,790.1,372.4,768.9,372.4z M768.9,297.5c-20.1,0-36.5,16.3-36.5,36.5c0,20.1,16.3,36.5,36.5,36.5
-	c20.1,0,36.5-16.3,36.5-36.5C805.3,313.8,789,297.5,768.9,297.5L768.9,297.5z"/>
-<path class="st2" d="M768.9,225.5c-21.2,0-38.5-17.2-38.5-38.5c0-21.2,17.2-38.5,38.5-38.5c21.2,0,38.5,17.2,38.5,38.5
-	C807.3,208.3,790.1,225.5,768.9,225.5z M768.9,150.6c-20.1,0-36.5,16.3-36.5,36.5c0,20.1,16.3,36.5,36.5,36.5
-	c20.1,0,36.5-16.3,36.5-36.5C805.3,166.9,789,150.6,768.9,150.6L768.9,150.6z"/>
-<path class="st2" d="M842.3,299c-21.2,0-38.5-17.2-38.5-38.5c0-21.2,17.2-38.5,38.5-38.5c21.2,0,38.5,17.2,38.5,38.5
-	C880.8,281.7,863.6,298.9,842.3,299z M842.3,224c-20.1,0-36.5,16.3-36.5,36.5c0,20.1,16.3,36.5,36.5,36.5
-	c20.1,0,36.5-16.3,36.5-36.5C878.8,240.4,862.5,224,842.3,224L842.3,224z"/>
-<path class="st2" d="M695.5,299c-21.2,0-38.5-17.2-38.5-38.5c0-21.2,17.2-38.5,38.5-38.5c21.2,0,38.5,17.2,38.5,38.5
-	C733.9,281.7,716.7,298.9,695.5,299z M695.5,224c-20.1,0-36.5,16.3-36.5,36.5c0,20.1,16.3,36.5,36.5,36.5
-	c20.1,0,36.5-16.3,36.5-36.5C731.9,240.4,715.6,224,695.5,224L695.5,224z"/>
-<path class="st2" d="M715,750.2c-16,0-28.9-13-28.9-28.9s13-28.9,28.9-28.9c16,0,28.9,13,28.9,28.9c0,0,0,0,0,0
-	C743.9,737.3,731,750.2,715,750.2z M715,694.3c-14.9,0-26.9,12.1-26.9,26.9s12.1,26.9,26.9,26.9c14.9,0,26.9-12.1,26.9-26.9
-	C741.9,706.4,729.9,694.4,715,694.3z"/>
-<path class="st2" d="M705.8,533.4h-12.3c-0.6,0-1-0.4-1-1c0,0,0,0,0,0c1.7-39.6,33.4-71.3,73-73c0.3,0,0.5,0.1,0.7,0.3
-	c0.2,0.2,0.3,0.4,0.3,0.7v12.3c0,3.5-2.6,6.4-6,6.9c-24.7,3.7-44.2,23.1-47.9,47.9C712.2,530.8,709.3,533.4,705.8,533.4z
-	 M694.6,531.4h11.2c2.5,0,4.6-1.8,4.9-4.3c3.9-25.6,24-45.7,49.6-49.6c2.5-0.3,4.3-2.4,4.3-4.9v-11.2
-	C727.2,463.5,696.7,494,694.6,531.4z"/>
-<path class="st2" d="M765.6,612.1C765.6,612.1,765.5,612.1,765.6,612.1c-39.6-1.7-71.3-33.4-73-73c0-0.6,0.4-1,1-1c0,0,0,0,0,0h12.3
-	c3.5,0,6.4,2.6,6.9,6c3.7,24.7,23.1,44.2,47.9,47.9c3.4,0.5,6,3.4,6,6.9v12.3C766.6,611.6,766.1,612.1,765.6,612.1
-	C765.6,612.1,765.6,612.1,765.6,612.1L765.6,612.1z M694.6,540c2.2,37.4,32.6,67.8,70,70v-11.2c0-2.5-1.8-4.6-4.3-4.9
-	c-25.6-3.9-45.7-24-49.6-49.6c-0.3-2.5-2.4-4.3-4.9-4.3H694.6z"/>
-<path class="st2" d="M772.2,612.1c-0.6,0-1-0.4-1-1c0,0,0,0,0,0v-12.3c0-3.5,2.6-6.4,6-6.9c24.7-3.7,44.2-23.1,47.9-47.9
-	c0.5-3.4,3.4-6,6.9-6h12.3c0.6,0,1,0.4,1,1c0,0,0,0,0,0C843.5,578.7,811.9,610.3,772.2,612.1C772.3,612.1,772.3,612.1,772.2,612.1z
-	 M832,540c-2.5,0-4.6,1.8-4.9,4.3c-3.9,25.6-24,45.7-49.6,49.6c-2.5,0.3-4.3,2.4-4.3,4.9V610c37.4-2.2,67.8-32.6,70-70H832z"/>
-<path class="st2" d="M844.3,533.4H832c-3.5,0-6.4-2.6-6.9-6c-3.7-24.7-23.1-44.2-47.9-47.9c-3.4-0.5-6-3.4-6-6.9v-12.3
-	c0-0.3,0.1-0.5,0.3-0.7c0.2-0.2,0.5-0.3,0.7-0.3c39.6,1.7,71.3,33.4,73,73C845.3,532.9,844.9,533.3,844.3,533.4
-	C844.3,533.4,844.3,533.4,844.3,533.4L844.3,533.4z M773.2,461.4v11.2c0,2.5,1.8,4.6,4.3,4.9c25.6,3.9,45.7,24,49.6,49.6
-	c0.3,2.5,2.4,4.3,4.9,4.3h11.2C841.1,494,810.6,463.5,773.2,461.4z"/>
-<path class="st2" d="M768.9,612.2c-1.2,0-2.3,0-3.4-0.1c-0.5,0-0.9-0.5-0.9-1v-12.3c0-2.5-1.8-4.6-4.3-4.9
-	c-25.6-3.9-45.7-24-49.6-49.6c-0.3-2.5-2.4-4.3-4.9-4.3h-12.3c-0.5,0-1-0.4-1-0.9c-0.1-1.1-0.1-2.2-0.1-3.4s0-2.3,0.1-3.4
-	c0-0.5,0.5-0.9,1-0.9h12.3c2.5,0,4.6-1.8,4.9-4.3c3.9-25.6,24-45.7,49.6-49.6c2.5-0.3,4.3-2.4,4.3-4.9v-12.3c0-0.5,0.4-1,0.9-1
-	c2.3-0.1,4.5-0.1,6.8,0c0.5,0,0.9,0.5,0.9,1v12.3c0,2.5,1.8,4.6,4.3,4.9c25.6,3.9,45.7,24,49.6,49.6c0.3,2.5,2.4,4.3,4.9,4.3h12.3
-	c0.5,0,1,0.4,1,0.9c0.1,1.1,0.1,2.2,0.1,3.4s0,2.3-0.1,3.4c0,0.5-0.5,0.9-1,0.9H832c-2.5,0-4.6,1.8-4.9,4.3
-	c-3.9,25.6-24,45.7-49.6,49.6c-2.5,0.3-4.3,2.4-4.3,4.9v12.3c0,0.5-0.4,1-0.9,1C771.2,612.1,770.1,612.2,768.9,612.2z M766.6,610.1
-	c1.5,0.1,3.1,0.1,4.7,0v-11.3c0-3.5,2.6-6.4,6-6.9c24.7-3.7,44.2-23.1,47.9-47.9c0.5-3.4,3.4-6,6.9-6h11.3c0-0.8,0-1.5,0-2.3
-	s0-1.6,0-2.3H832c-3.5,0-6.4-2.6-6.9-6c-3.7-24.7-23.1-44.2-47.9-47.9c-3.4-0.5-6-3.4-6-6.9v-11.3c-1.5-0.1-3.1-0.1-4.7,0v11.3
-	c0,3.5-2.6,6.4-6,6.9c-24.7,3.7-44.2,23.1-47.9,47.9c-0.5,3.4-3.4,6-6.9,6h-11.3c0,0.8,0,1.5,0,2.3s0,1.6,0,2.3h11.3
-	c3.5,0,6.4,2.6,6.9,6c3.7,24.7,23.1,44.2,47.9,47.9c3.4,0.5,6,3.4,6,6.9V610.1z"/>
-</svg>
+<path
+   class="st3"
+   d="M413.1,906.6h-7.9c-3.6,0-6.4-2.9-6.5-6.5V71.2c0-3.6,2.9-6.4,6.5-6.5h7.9c3.6,0,6.4,2.9,6.5,6.5V207  c0,4.9-1.2,9.6-3.4,14l-6.7,13v79.2l6.7,13c2.2,4.3,3.4,9.1,3.4,13.9v269.7c0,4.9-1.2,9.6-3.4,14l-6.7,13V716l6.7,13  c2.2,4.3,3.4,9.1,3.4,13.9v157.2C419.6,903.7,416.7,906.6,413.1,906.6z M405.2,65.7c-3,0-5.5,2.4-5.5,5.5v828.9c0,3,2.4,5.5,5.5,5.5  h7.9c3,0,5.5-2.4,5.5-5.5V742.9c0-4.7-1.1-9.3-3.3-13.5l-6.8-13.1c0-0.1-0.1-0.2-0.1-0.2v-79.5c0-0.1,0-0.2,0.1-0.2l6.8-13.1  c2.2-4.2,3.3-8.8,3.3-13.5V340.1c0-4.7-1.1-9.3-3.3-13.5l-6.8-13.1c0-0.1-0.1-0.2-0.1-0.2v-79.5c0-0.1,0-0.2,0.1-0.2l6.8-13.1  c2.2-4.2,3.3-8.8,3.3-13.5V71.2c0-3-2.4-5.5-5.5-5.5L405.2,65.7z"
+   id="path66"
+   style="fill:#000000" />
+<path
+   class="st3"
+   d="M399.3,858.9h-11.2c-0.3,0-0.5-0.2-0.5-0.5V72c0-0.3,0.2-0.5,0.5-0.5h11.2c0.3,0,0.5,0.2,0.5,0.5v786.4  C399.8,858.7,399.6,858.9,399.3,858.9z M388.6,857.9h10.2V72.5h-10.2V857.9z"
+   id="path68"
+   style="fill:#000000" />
+<path
+   class="st3"
+   d="M382.1,1000H275.9C158.9,1000,64,905.2,64,788.1c0,0,0,0,0,0V220.9C64,104.1,159.1,9.1,275.9,9.1h106.2  c3.6,0,6.5,2.9,6.5,6.5v978C388.6,997.1,385.7,1000,382.1,1000z M275.9,10.1C159.6,10.1,65,104.7,65,220.9v567.2  C65,904.4,159.6,999,275.9,999h106.2c3,0,5.5-2.4,5.5-5.5v-978c0-3-2.4-5.5-5.5-5.5H275.9z"
+   id="path70"
+   style="fill:#000000" />
+<path
+   class="st3"
+   d="M601.6,906.6h-7.9c-3.6,0-6.4-2.9-6.5-6.5V742.9c0-4.9,1.2-9.6,3.4-13.9l6.7-13v-79.2l-6.7-13  c-2.2-4.3-3.4-9.1-3.4-14V340.1c0-4.9,1.2-9.6,3.4-13.9l6.7-13V234l-6.7-13c-2.2-4.3-3.4-9.1-3.4-14V71.2c0-3.6,2.9-6.4,6.5-6.5h7.9  c3.6,0,6.4,2.9,6.5,6.5v828.9C608,903.7,605.1,906.6,601.6,906.6z M593.7,65.7c-3,0-5.5,2.4-5.5,5.5V207c0,4.7,1.1,9.3,3.3,13.5  l6.8,13.1c0,0.1,0.1,0.1,0.1,0.2v79.5c0,0.1,0,0.2-0.1,0.2l-6.8,13.1c-2.2,4.2-3.3,8.8-3.3,13.5v269.7c0,4.7,1.1,9.3,3.3,13.5  l6.8,13.1c0,0.1,0.1,0.1,0.1,0.2v79.5c0,0.1,0,0.2-0.1,0.2l-6.8,13.1c-2.2,4.2-3.3,8.8-3.3,13.5v157.2c0,3,2.4,5.5,5.5,5.5h7.9  c3,0,5.5-2.4,5.5-5.5V71.2c0-3-2.4-5.5-5.5-5.5L593.7,65.7z"
+   id="path72"
+   style="fill:#000000" />
+<path
+   class="st3"
+   d="M618.8,858.9h-11.3c-0.3,0-0.5-0.2-0.5-0.5c0,0,0,0,0,0V72c0-0.3,0.2-0.5,0.5-0.5h11.3c0.3,0,0.5,0.2,0.5,0.5  v786.4C619.3,858.7,619.1,858.9,618.8,858.9C618.8,858.9,618.8,858.9,618.8,858.9z M608,857.9h10.3V72.5H608V857.9z"
+   id="path74"
+   style="fill:#000000" />
+<path
+   class="st3"
+   d="M730.9,1000H624.7c-3.6,0-6.5-2.9-6.5-6.5v-978c0-3.6,2.9-6.5,6.5-6.5h106.2c116.8,0,211.9,95.1,211.9,211.9  v567.2C942.8,905.1,848,1000,730.9,1000C730.9,1000,730.9,1000,730.9,1000z M624.7,10.1c-3,0-5.5,2.4-5.5,5.5v978  c0,3,2.4,5.5,5.5,5.5h106.2c116.3,0,210.9-94.6,210.9-210.9V220.9c0-116.3-94.6-210.9-210.9-210.9L624.7,10.1z"
+   id="path76"
+   style="fill:#000000" />
+
+
+
+
+
+
+
+
+
+
+<path
+   class="st1"
+   d="M413.1,717.1h-4.2c-0.6,0-1-0.4-1-1c0,0,0,0,0,0v-79.5c0-0.6,0.4-1,1-1c0,0,0,0,0,0h4.2c3.8,0,6.9,3.1,7,7v67.6  C420.1,714,417,717.1,413.1,717.1z M409.9,715.1h3.2c2.7,0,5-2.2,5-5v-67.6c0-2.7-2.2-5-5-5h-3.2V715.1z"
+   id="path98"
+   style="fill:#000000" />
+<path
+   class="st1"
+   d="M413.1,314.3h-4.2c-0.6,0-1-0.4-1-1v-79.5c0-0.6,0.4-1,1-1h4.2c3.8,0,6.9,3.1,7,7v67.6  C420.1,311.2,417,314.3,413.1,314.3z M409.9,312.3h3.2c2.7,0,5-2.2,5-5v-67.6c0-2.7-2.2-5-5-5h-3.2V312.3z"
+   id="path100"
+   style="fill:#000000" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+<path
+   class="st2"
+   d="M597.9,314.3h-4.2c-3.8,0-6.9-3.1-7-7v-67.6c0-3.8,3.1-6.9,7-7h4.2c0.6,0,1,0.4,1,1c0,0,0,0,0,0v79.5  C598.9,313.9,598.4,314.3,597.9,314.3C597.9,314.3,597.9,314.3,597.9,314.3z M593.7,234.8c-2.7,0-5,2.2-5,5v67.6c0,2.7,2.2,5,5,5  h3.2v-77.5H593.7z"
+   id="path128"
+   style="fill:#000000" />
+<path
+   class="st2"
+   d="M597.9,717.1h-4.2c-3.8,0-6.9-3.1-7-7v-67.6c0-3.8,3.1-6.9,7-7h4.2c0.6,0,1,0.4,1,1c0,0,0,0,0,0v79.5  C598.9,716.6,598.4,717.1,597.9,717.1C597.9,717.1,597.9,717.1,597.9,717.1z M593.7,637.6c-2.7,0-5,2.2-5,5v67.6c0,2.7,2.2,5,5,5  h3.2v-77.5H593.7z"
+   id="path130"
+   style="fill:#000000" />
+
+
+
+
+
+
+
+
+
+
+
+
+<path
+   style="fill:#01c6e6;fill-opacity:0.992157;stroke:#4d4d4d;stroke-width:1"
+   d="m 257.47599,997.49473 c -26.30234,-2.3493 -49.90186,-9.17738 -75.04426,-21.71262 C 117.17154,943.24531 74.755874,881.82088 66.727355,808.2243 64.943441,791.87136 64.94041,218.41588 66.724145,200.93415 69.379611,174.90893 75.914592,151.99608 87.247373,128.97592 118.63505,65.218492 179.0982,21.796519 249.3051,12.593199 c 18.18131,-2.383363 133.61873,-2.6919419 135.94726,-0.363405 1.12672,1.12671 1.45478,112.251076 1.45478,492.764216 0,484.50248 -0.0325,491.32681 -2.34493,492.5644 -2.80172,1.49943 -109.98822,1.44564 -126.88622,-0.0636 z"
+   id="path1144" /><polygon
+   class="st1"
+   points="225.8,469.9 250,469.9 237.9,448.9 "
+   id="polygon80"
+   style="fill:#333333;stroke:#4d4d4d;stroke-width:0.927894"
+   transform="matrix(1.1037134,0,0,1.0523169,-24.636066,-24.267048)" /><polygon
+   class="st1"
+   points="237.9,626.9 225.8,605.9 250,605.9 "
+   id="polygon82"
+   style="fill:#333333;stroke:#4d4d4d;stroke-width:0.957418"
+   transform="matrix(1.0574383,0,0,1.0316716,-13.259456,-19.457378)" /><polygon
+   class="st1"
+   points="148.9,537.9 169.9,550 169.9,525.8 "
+   id="polygon84"
+   style="fill:#333333;stroke:#4d4d4d;stroke-width:0.931439"
+   transform="matrix(1.0443863,0,0,1.1036462,-7.5389156,-55.555947)" /><polygon
+   class="st1"
+   points="305.9,550 305.9,525.8 326.9,537.9 "
+   id="polygon86"
+   style="fill:#333333;stroke:#4d4d4d;stroke-width:0.849928"
+   transform="matrix(1.2181479,0,0,1.1364095,-67.797686,-73.39984)" /><path
+   class="st1"
+   d="m 81.300444,139.3 c -0.3,0 -0.5,-0.1 -0.7,-0.3 l -3.4,-3.4 c -2,-2 -2.6,-5.1 -1.5,-7.8 C 110.50044,50.1 187.70044,0.1 272.90044,0 h 51.2 c 3.8,0 6.9,3.1 7,7 v 2.6 c 0,0.6 -0.4,1 -1,1 h -54.2 c -84.5,-0.1 -160.8,50.4 -193.699996,128.1 -0.1,0.3 -0.4,0.5 -0.7,0.6 -0.1,0 -0.2,0 -0.2,0 z M 272.90044,2 c -84.4,0.1 -160.9,49.7 -195.399996,126.7 -0.8,1.9 -0.4,4.1 1.1,5.5 l 2.4,2.4 C 114.60044,58.8 191.30044,8.5 276.00044,8.6 h 53.2 V 7 c 0,-2.7 -2.2,-5 -5,-5 z"
+   id="path102"
+   style="fill:#000000" /><path
+   class="st1"
+   d="m 359.60044,116.1 h -46.9 c -2.2,0 -4,-1.8 -4,-4 v -11.7 c 0,-2.2 1.8,-4 4,-4 h 46.9 c 2.2,0 4,1.8 4,4 v 11.7 c 0,2.2 -1.8,4 -4,4 z m -46.9,-17.6 c -1.1,0 -2,0.9 -2,2 v 11.7 c 0,1.1 0.9,2 2,2 h 46.9 c 1.1,0 2,-0.9 2,-2 v -11.7 c 0,-1.1 -0.9,-2 -2,-2 z"
+   id="path104"
+   style="fill:#000000" /><path
+   class="st1"
+   d="m 237.90044,502.9 c -21.2,0 -38.5,-17.2 -38.5,-38.5 0,-21.2 17.2,-38.5 38.5,-38.5 21.2,0 38.5,17.2 38.5,38.5 0,21.3 -17.2,38.5 -38.5,38.5 z m 0,-74.9 c -20.1,0 -36.5,16.3 -36.5,36.5 0,20.1 16.3,36.5 36.5,36.5 20.1,0 36.5,-16.3 36.5,-36.5 0,-20.2 -16.3,-36.5 -36.5,-36.5 z"
+   id="path106"
+   style="fill:#000000" /><path
+   class="st1"
+   d="m 237.90044,649.8 c -21.2,0 -38.5,-17.2 -38.5,-38.5 0,-21.3 17.2,-38.5 38.5,-38.5 21.2,0 38.5,17.2 38.5,38.5 0,21.3 -17.2,38.5 -38.5,38.5 z m 0,-74.9 c -20.1,0 -36.5,16.3 -36.5,36.5 0,20.2 16.3,36.5 36.5,36.5 20.2,0 36.5,-16.3 36.5,-36.5 0,0 0,0 0,0 0,-20.2 -16.3,-36.5 -36.5,-36.5 z"
+   id="path108"
+   style="fill:#000000" /><path
+   class="st1"
+   d="m 311.40044,576.3 c -21.2,0 -38.5,-17.2 -38.5,-38.5 0,-21.2 17.2,-38.5 38.5,-38.5 21.3,0 38.5,17.2 38.5,38.5 v 0 c -0.1,21.3 -17.3,38.5 -38.5,38.5 z m 0,-74.9 c -20.1,0 -36.5,16.3 -36.5,36.5 0,20.2 16.3,36.5 36.5,36.5 20.1,0 36.5,-16.3 36.5,-36.5 0,0 0,0 0,0 -0.1,-20.2 -16.4,-36.5 -36.5,-36.5 z"
+   id="path110"
+   style="fill:#000000" /><path
+   class="st1"
+   d="m 164.50044,576.3 c -21.2,0 -38.5,-17.2 -38.5,-38.5 0,-21.2 17.2,-38.5 38.5,-38.5 21.3,0 38.5,17.2 38.5,38.5 v 0 c -0.1,21.3 -17.3,38.5 -38.5,38.5 z m 0,-74.9 c -20.1,0 -36.5,16.3 -36.5,36.5 0,20.1 16.3,36.5 36.5,36.5 20.1,0 36.5,-16.3 36.5,-36.5 0,0 0,0 0,0 -0.1,-20.2 -16.4,-36.5 -36.5,-36.5 z"
+   id="path112"
+   style="fill:#000000" /><path
+   class="st1"
+   d="m 314.10044,753.7 h -45 c -5.5,0 -9.9,-4.4 -9.9,-9.9 v -45 c 0,-5.5 4.4,-9.9 9.9,-9.9 h 45 c 5.5,0 9.9,4.4 9.9,9.9 v 45 c 0,5.5 -4.5,9.9 -9.9,9.9 z m -45,-62.8 c -4.4,0 -7.9,3.6 -7.9,7.9 v 45 c 0,4.4 3.6,7.9 7.9,7.9 h 45 c 4.4,0 7.9,-3.6 7.9,-7.9 v -45 c 0,-4.4 -3.6,-7.9 -7.9,-7.9 z"
+   id="path114"
+   style="fill:#000000" /><path
+   class="st1"
+   d="m 291.60044,741.7 c -11.3,0 -20.4,-9.2 -20.4,-20.4 0,-11.3 9.2,-20.4 20.4,-20.4 11.3,0 20.4,9.2 20.4,20.4 0,0 0,0 0,0 0,11.3 -9.1,20.4 -20.4,20.4 z m 0,-38.9 c -10.2,0 -18.4,8.3 -18.4,18.4 0,10.1 8.3,18.4 18.4,18.4 10.2,0 18.4,-8.3 18.4,-18.4 0,-10.1 -8.2,-18.3 -18.4,-18.4 z"
+   id="path116"
+   style="fill:#000000" /><path
+   class="st1"
+   d="m 174.80044,260.2 h -12.3 c -0.6,0 -1,-0.4 -1,-1 0,0 0,0 0,0 1.7,-39.6 33.4,-71.3 73,-73 0.3,0 0.5,0.1 0.7,0.3 0.2,0.2 0.3,0.4 0.3,0.7 v 12.3 c 0,3.5 -2.6,6.4 -6,6.9 -24.7,3.7 -44.2,23.1 -47.9,47.9 -0.4,3.3 -3.3,5.9 -6.8,5.9 z m -11.2,-2 h 11.2 c 2.5,0 4.6,-1.8 4.9,-4.3 3.9,-25.6 24,-45.7 49.6,-49.6 2.5,-0.3 4.3,-2.4 4.3,-4.9 v -11.2 c -37.4,2.1 -67.9,32.6 -70,70 z"
+   id="path118"
+   style="fill:#000000" /><path
+   class="st1"
+   d="m 234.60044,338.9 v 0 c -39.6,-1.7 -71.3,-33.4 -73,-73 0,-0.6 0.4,-1 1,-1 0,0 0,0 0,0 h 12.3 c 3.5,0 6.4,2.6 6.9,6 3.7,24.7 23.1,44.2 47.9,47.9 3.4,0.5 6,3.4 6,6.9 V 338 c -0.1,0.5 -0.6,0.9 -1.1,0.9 z m -71,-72 c 2.2,37.4 32.6,67.8 70,70 v -11.2 c 0,-2.5 -1.8,-4.6 -4.3,-4.9 -25.6,-3.9 -45.7,-24 -49.6,-49.6 -0.3,-2.5 -2.4,-4.3 -4.9,-4.3 z"
+   id="path120"
+   style="fill:#000000" /><path
+   class="st1"
+   d="m 241.30044,338.9 c -0.6,0 -1,-0.4 -1,-1 v -12.3 c 0,-3.5 2.6,-6.4 6,-6.9 24.7,-3.7 44.2,-23.1 47.9,-47.9 0.5,-3.4 3.4,-6 6.9,-6 h 12.3 c 0.6,0 1,0.4 1,1 0,0 0,0 0,0 -1.8,39.7 -33.5,71.4 -73.1,73.1 z m 59.7,-72 c -2.5,0 -4.6,1.8 -4.9,4.3 -3.9,25.6 -24,45.7 -49.6,49.6 -2.5,0.3 -4.3,2.4 -4.3,4.9 v 11.2 c 37.4,-2.2 67.8,-32.6 70,-70 z"
+   id="path122"
+   style="fill:#000000" /><path
+   class="st1"
+   d="m 313.30044,260.2 h -12.3 c -3.5,0 -6.4,-2.6 -6.9,-6 -3.7,-24.7 -23.1,-44.2 -47.9,-47.9 -3.4,-0.5 -6,-3.4 -6,-6.9 v -12.3 c 0,-0.3 0.1,-0.5 0.3,-0.7 0.2,-0.2 0.5,-0.3 0.7,-0.3 39.6,1.7 71.3,33.4 73,73 0.1,0.6 -0.3,1.1 -0.9,1.1 0,0 0,0 0,0 z m -71,-72 v 11.2 c 0,2.5 1.8,4.6 4.3,4.9 25.6,3.9 45.7,24 49.6,49.6 0.3,2.5 2.4,4.3 4.9,4.3 h 11.2 c -2.2,-37.4 -32.7,-67.9 -70,-70 z"
+   id="path124"
+   style="fill:#000000" /><path
+   class="st1"
+   d="m 237.90044,339 c -1.2,0 -2.3,0 -3.4,-0.1 -0.5,0 -0.9,-0.5 -0.9,-1 v -12.3 c 0,-2.5 -1.8,-4.6 -4.3,-4.9 -25.6,-3.9 -45.7,-24 -49.6,-49.6 -0.3,-2.5 -2.4,-4.3 -4.9,-4.3 h -12.3 c -0.5,0 -1,-0.4 -1,-0.9 -0.1,-1.1 -0.1,-2.2 -0.1,-3.4 0,-1.2 0,-2.3 0.1,-3.4 0,-0.5 0.5,-0.9 1,-0.9 h 12.3 c 2.5,0 4.6,-1.8 4.9,-4.3 3.9,-25.6 24,-45.7 49.6,-49.6 2.5,-0.3 4.3,-2.4 4.3,-4.9 v -12.3 c 0,-0.5 0.4,-1 0.9,-1 2.3,-0.1 4.5,-0.1 6.8,0 0.5,0 0.9,0.5 0.9,1 v 12.3 c 0,2.5 1.8,4.6 4.3,4.9 25.6,3.9 45.7,24 49.6,49.6 0.3,2.5 2.4,4.3 4.9,4.3 h 12.3 c 0.5,0 1,0.4 1,0.9 0.1,1.1 0.1,2.2 0.1,3.4 0,1.2 0,2.3 -0.1,3.4 0,0.5 -0.5,0.9 -1,0.9 h -12.3 c -2.5,0 -4.6,1.8 -4.9,4.3 -3.9,25.6 -24,45.7 -49.6,49.6 -2.5,0.3 -4.3,2.4 -4.3,4.9 v 12.3 c 0,0.5 -0.4,1 -0.9,1 -1.1,0.1 -2.2,0.1 -3.4,0.1 z m -2.3,-2 c 1.5,0.1 3.1,0.1 4.7,0 v -11.3 c 0,-3.5 2.6,-6.4 6,-6.9 24.7,-3.7 44.2,-23.1 47.9,-47.9 0.5,-3.4 3.4,-6 6.9,-6 h 11.3 c 0,-0.8 0,-1.5 0,-2.3 0,-0.8 0,-1.6 0,-2.3 h -11.4 c -3.5,0 -6.4,-2.6 -6.9,-6 -3.7,-24.7 -23.1,-44.2 -47.9,-47.9 -3.4,-0.5 -6,-3.4 -6,-6.9 v -11.3 c -1.5,-0.1 -3.1,-0.1 -4.7,0 v 11.3 c 0,3.5 -2.6,6.4 -6,6.9 -24.7,3.7 -44.2,23.1 -47.9,47.9 -0.5,3.4 -3.4,6 -6.9,6 h -11.3 c 0,0.8 0,1.5 0,2.3 0,0.8 0,1.6 0,2.3 h 11.3 c 3.5,0 6.4,2.6 6.9,6 3.7,24.7 23.1,44.2 47.9,47.9 3.4,0.5 6,3.4 6,6.9 z"
+   id="path126"
+   style="fill:#000000" /><path
+   style="fill:#1a1a1a;fill-opacity:1;stroke:#4d4d4d;stroke-width:0.999997"
+   d="m 158.02789,574.27925 c -14.73064,-3.25266 -24.85554,-12.70578 -29.04419,-27.11717 -0.98592,-3.39218 -1.21679,-6.26957 -0.93511,-11.65556 0.33774,-6.4583 0.67944,-7.76803 3.52546,-13.51272 11.35216,-22.91431 40.68588,-27.928 58.61532,-10.01846 19.42229,19.40073 11.99924,51.86436 -13.89781,60.78009 -5.19354,1.788 -13.81105,2.50701 -18.26367,1.52382 z m 12.59864,-36.29462 c 0,-7.35074 -0.18108,-13.36496 -0.40241,-13.36496 -0.89601,0 -23.32454,13.1809 -22.99291,13.51259 0.66445,0.66458 22.24473,13.11359 22.82266,13.1657 0.31497,0.0284 0.57266,-5.96261 0.57266,-13.31333 z"
+   id="path179" /><path
+   style="fill:#1a1a1a;fill-opacity:1;stroke:#4d4d4d;stroke-width:0.999997"
+   d="m 232.50517,500.57091 c -6.91699,-0.86484 -15.04235,-4.99807 -20.4853,-10.42051 -14.58513,-14.53016 -14.55979,-36.85709 0.0584,-51.42015 23.0282,-22.94142 62.26853,-6.95317 62.26853,25.37095 0,10.34881 -3.46897,18.75364 -10.723,25.98031 -8.34032,8.30891 -19.22192,11.97685 -31.1186,10.4894 z m 18.58209,-30.69278 c -0.91811,-2.38357 -12.79282,-22.35099 -13.28879,-22.34521 -0.45143,0.005 -5.88471,9.05299 -11.95805,19.91302 l -2.0157,3.60439 h 13.85703 c 12.18288,0 13.80248,-0.14161 13.40551,-1.1722 z"
+   id="path181" /><path
+   style="fill:#1a1a1a;fill-opacity:1;stroke:#4d4d4d;stroke-width:0.999997"
+   d="m 229.21434,646.98161 c -12.9232,-3.46654 -23.15418,-13.73508 -26.52403,-26.62142 -5.92248,-22.64757 11.58541,-45.21876 35.15949,-45.32763 7.44717,-0.0344 11.29183,0.91312 18.09999,4.46071 16.90217,8.80735 23.84898,30.39169 15.40753,47.87245 -7.54225,15.61868 -25.6403,24.04261 -42.14298,19.61589 z M 245.434,616.92014 c 3.65424,-6.30197 6.48622,-11.61534 6.29329,-11.8075 -0.19293,-0.19216 -6.40658,-0.25572 -13.80812,-0.14123 l -13.45735,0.20814 6.66623,11.58776 c 3.66642,6.37327 6.89025,11.59297 7.16405,11.59935 0.27381,0.006 3.48766,-5.14457 7.1419,-11.44652 z"
+   id="path185" /><path
+   style="fill:#1a1a1a;fill-opacity:1;stroke:#4d4d4d;stroke-width:1"
+   d="m 307.85537,574.24407 c -0.34478,-0.0389 -1.62711,-0.27075 -2.84962,-0.51537 -11.23844,-2.24892 -20.9226,-9.70179 -26.17378,-20.1432 -2.82839,-5.62398 -4.20289,-12.18393 -3.75883,-17.93953 1.14218,-14.80435 11.33006,-27.74217 25.61809,-32.53303 8.75405,-2.93529 18.04495,-2.18507 26.72988,2.15843 8.69225,4.34715 15.48783,12.11097 18.64346,21.29973 5.25881,15.31297 -0.71552,32.17026 -14.73029,41.56334 -5.99457,4.01773 -13.35804,6.28235 -20.18834,6.20884 -1.46502,-0.0157 -2.94577,-0.0604 -3.29057,-0.0993 z m -0.66719,-23.08553 c 0.71175,-0.35815 3.02697,-1.62049 5.14496,-2.80516 8.66766,-4.84825 15.63944,-9.1681 16.21592,-10.0477 0.27948,-0.42642 0.28078,-0.49758 0.0166,-0.90068 -0.86957,-1.32678 -21.50733,-13.52937 -22.8817,-13.52937 -0.25925,0 -0.5656,0.11351 -0.68079,0.25225 -0.41371,0.49837 -0.59707,4.78502 -0.59431,13.89388 0.003,9.06159 0.17803,13.03427 0.59744,13.53951 0.32082,0.38645 0.78324,0.3011 2.18189,-0.40273 z"
+   id="path187" /><path
+   style="fill:#333333;fill-opacity:1;stroke:#4d4d4d;stroke-width:1"
+   d="m 287.96017,739.09726 c -1.01606,-0.21912 -2.9756,-0.9477 -4.35453,-1.61905 -2.09414,-1.01956 -2.88115,-1.59464 -4.77748,-3.49097 -1.89792,-1.89791 -2.4703,-2.68159 -3.48941,-4.77748 -2.66648,-5.48389 -2.66607,-10.55714 10e-4,-16.08572 1.0133,-2.10022 1.56326,-2.85257 3.48092,-4.76199 3.62968,-3.61405 7.72755,-5.3398 12.70198,-5.34921 8.35146,-0.0158 15.68299,5.71579 17.81213,13.92506 0.52326,2.01754 0.54009,6.16569 0.0339,8.34799 -1.47072,6.34008 -6.30854,11.44929 -12.69973,13.41212 -2.44922,0.7522 -6.26202,0.92699 -8.70906,0.39925 z"
+   id="path189" /><path
+   style="fill:#1a1a1a;fill-opacity:1;stroke:#4d4d4d;stroke-width:1"
+   d="m 267.23012,751.2862 c -1.59942,-0.43597 -2.94763,-1.29847 -4.05871,-2.59652 -1.81264,-2.11766 -1.73429,-0.87988 -1.73429,-27.39725 0,-26.73402 -0.0972,-25.30688 1.87658,-27.54923 0.58306,-0.66239 1.71204,-1.51487 2.55332,-1.92799 l 1.5081,-0.74058 h 24.1534 24.15339 l 1.77672,0.87468 c 1.25727,0.61895 2.04823,1.23027 2.70544,2.091 1.78729,2.34073 1.72742,1.33094 1.64816,27.80036 -0.0712,23.78487 -0.0733,23.86757 -0.63865,25.09049 -0.72339,1.56486 -2.26169,3.10316 -3.93043,3.93043 l -1.30842,0.64864 -23.75199,0.0516 c -18.21394,0.0396 -24.03192,-0.0247 -24.95262,-0.27565 z m 27.28995,-9.68076 c 10.60326,-1.53286 18.09097,-10.66806 17.50501,-21.35655 -0.18432,-3.36213 -0.66908,-5.27077 -2.04745,-8.06138 -4.59235,-9.29756 -15.46557,-13.67756 -25.3079,-10.19463 -2.76161,0.97725 -4.68871,2.16763 -7.02836,4.34145 -3.05146,2.83517 -5.11688,6.34636 -6.04249,10.27217 -0.50715,2.151 -0.50715,7.22087 0,9.37186 0.92171,3.90925 2.95421,7.3745 6.0133,10.25221 2.20884,2.07787 4.16469,3.31668 6.72144,4.2573 3.40627,1.25315 6.72782,1.61756 10.18645,1.11757 z"
+   id="path191" /><path
+   style="fill:#1a1a1a;fill-opacity:1;stroke:#4d4d4d;stroke-width:1"
+   d="m 235.77295,330.34531 c 0,-6.0203 -0.0462,-6.51813 -0.73076,-7.87124 -1.06164,-2.09851 -2.95253,-3.39477 -5.65313,-3.87537 -15.06064,-2.68022 -27.49575,-10.15006 -36.51861,-21.93692 -4.96934,-6.49162 -8.83069,-15.11098 -10.3887,-23.18981 -0.83474,-4.3284 -1.3998,-5.65891 -2.97647,-7.00848 -1.7724,-1.51711 -3.30405,-1.79252 -9.96885,-1.79252 h -5.86461 v -2.11107 -2.11107 h 6.26944 c 6.12912,0 6.30805,-0.0192 7.9945,-0.85963 2.44443,-1.21811 3.32179,-2.74063 4.22338,-7.32906 4.56927,-23.25403 22.39532,-40.97679 45.63214,-45.36773 4.16129,-0.78634 5.57438,-1.57205 6.90818,-3.84114 0.9048,-1.53927 0.91186,-1.5954 1.02116,-8.12677 l 0.11006,-6.57679 h 2.0822 2.0822 v 6.27497 c 0,6.20191 0.0104,6.29547 0.89315,8.03629 1.32629,2.61551 2.65075,3.37644 7.56606,4.34684 19.37922,3.82593 35.08856,16.98397 42.28514,35.41774 1.04383,2.67375 1.9437,5.93165 3.31831,12.01372 0.58905,2.60627 1.67368,4.16462 3.60307,5.17675 1.1513,0.60396 1.95144,0.68258 7.85861,0.77219 l 6.57679,0.0998 v 2.0925 2.09249 h -6.26944 c -6.12912,0 -6.30805,0.0192 -7.9945,0.85963 -2.20181,1.09721 -3.39863,2.90223 -3.90849,5.89474 -4.06097,23.83452 -22.22419,42.32715 -45.97159,46.8053 -4.2535,0.8021 -5.71797,1.66037 -6.96502,4.08193 -0.79329,1.54043 -0.83455,1.89301 -0.94026,8.03533 l -0.11057,6.42419 h -2.08169 -2.0817 z"
+   id="path1082" /><path
+   style="fill:#1a1a1a;fill-opacity:1;stroke:#4d4d4d;stroke-width:1"
+   d="m 163.78864,257.28223 c 0.0926,-0.49123 0.26012,-1.9162 0.37218,-3.1666 0.34565,-3.85681 1.73866,-10.12043 3.27937,-14.74553 8.02141,-24.0797 28.10082,-42.70464 52.74332,-48.92282 3.12397,-0.78829 7.58171,-1.54879 11.2861,-1.92544 l 2.02988,-0.20639 v 5.8726 c 0,8.54266 -0.3854,9.15422 -6.53853,10.37563 -18.42711,3.65779 -33.66767,15.25204 -41.92018,31.89074 -2.55007,5.14144 -4.14587,10.08856 -5.47376,16.9691 -0.45828,2.3746 -1.81844,3.9985 -3.71595,4.43649 -0.71452,0.16493 -3.75876,0.30335 -6.76499,0.30761 l -5.46587,0.008 z"
+   id="path1084" /><path
+   style="fill:#1a1a1a;fill-opacity:1;stroke:#4d4d4d;stroke-width:1"
+   d="m 229.76452,336.39384 c -26.99792,-3.04756 -50.79328,-21.35759 -60.92173,-46.87799 -2.38214,-6.00221 -4.22117,-13.35788 -4.67827,-18.71196 -0.11259,-1.31887 -0.27512,-2.73804 -0.36117,-3.1537 l -0.15645,-0.75574 6.32279,0.10618 c 5.78597,0.0972 6.39885,0.16304 7.21874,0.77582 1.58067,1.18137 2.03872,2.1715 2.89278,6.25312 1.21968,5.82894 2.45374,9.35857 5.18759,14.8375 2.85902,5.72977 5.67403,9.77885 9.85937,14.18161 8.62003,9.0678 19.6967,15.16512 31.73111,17.46684 3.63419,0.69508 4.63135,1.16546 5.80819,2.73983 0.6132,0.82034 0.6781,1.4276 0.77012,7.20628 0.0943,5.92221 0.0643,6.30785 -0.48717,6.26798 -0.32321,-0.0233 -1.75687,-0.17446 -3.1859,-0.33577 z"
+   id="path1086" /><path
+   style="fill:#1a1a1a;fill-opacity:1;stroke:#4d4d4d;stroke-width:1"
+   d="m 299.6703,257.71116 c -2.39043,-0.853 -2.81858,-1.58503 -3.81252,-6.51855 -3.66786,-18.20579 -15.40436,-33.45997 -31.99138,-41.57986 -4.81668,-2.35792 -8.58209,-3.67044 -13.47836,-4.69819 -4.72195,-0.99115 -6.17077,-1.58672 -7.05619,-2.9006 -0.70499,-1.04613 -0.73853,-1.38133 -0.73853,-7.38107 0,-3.45685 0.11517,-6.28518 0.25593,-6.28518 0.14076,0 1.93111,0.20926 3.97855,0.46502 11.96867,1.4951 22.85594,5.62979 32.79042,12.45291 4.36974,3.00118 7.416,5.6069 11.57682,9.90259 9.30395,9.60553 15.50823,20.66713 18.77966,33.48224 0.93232,3.65217 2.12151,10.886 2.12151,12.90514 0,0.58643 -0.30132,0.619 -5.60245,0.60551 -3.82949,-0.01 -5.98886,-0.15214 -6.82346,-0.44996 z"
+   id="path1088" /><path
+   style="fill:#1a1a1a;fill-opacity:1;stroke:#4d4d4d;stroke-width:1"
+   d="m 242.3249,330.46177 c 0.097,-5.7735 0.163,-6.38655 0.77566,-7.20629 1.18269,-1.58243 2.17182,-2.02925 6.33209,-2.86041 23.48707,-4.69236 41.89612,-23.31363 46.43689,-46.97223 0.66775,-3.47916 1.14738,-4.47847 2.71006,-5.64639 0.81991,-0.6128 1.43277,-0.67865 7.22079,-0.77584 l 6.32483,-0.10621 -0.19591,1.73011 c -1.19107,10.51857 -3.29919,17.9842 -7.45853,26.41337 -11.17834,22.65366 -32.93361,38.14197 -57.96776,41.26919 -2.04744,0.25577 -3.84896,0.46502 -4.00338,0.46502 -0.15442,0 -0.23305,-2.83964 -0.17474,-6.31032 z"
+   id="path1090" /><path
+   style="fill:#000000;fill-opacity:1;stroke:#4d4d4d;stroke-width:0.999998"
+   d="m 311.60253,113.45766 c -0.55307,-0.55307 -0.67321,-1.83753 -0.67321,-7.19731 0,-4.50308 0.15925,-6.68335 0.51409,-7.03819 0.38766,-0.38766 6.43841,-0.5141 24.60307,-0.5141 21.32785,0 24.16614,0.0772 24.76219,0.67322 0.55166,0.55166 0.67322,1.82364 0.67322,7.0445 0,6.09825 -0.0408,6.39986 -0.95215,7.03819 -0.83385,0.58406 -3.89051,0.66691 -24.60307,0.66691 -20.92962,0 -23.72838,-0.0775 -24.32414,-0.67322 z"
+   id="path1092" /><path
+   style="fill:#000000;fill-opacity:1;stroke:#4d4d4d;stroke-width:0.999998"
+   d="m 78.977784,134.18912 c -2.35328,-2.74929 -2.18932,-3.66269 2.26682,-12.62797 C 92.012734,99.89682 104.871,81.96966 121.771,65.058734 153.11752,33.69194 193.3541,12.833792 237.03838,5.305545 252.10894,2.708387 253.57756,2.630423 291.07604,2.43687 l 34.76922,-0.179466 1.35092,1.207149 c 0.9677,0.864713 1.41875,1.712966 1.59003,2.990242 l 0.23911,1.783092 -33.78877,0.194148 c -36.2509,0.208295 -38.76527,0.335101 -53.2555,2.685802 -38.392,6.2282 -72.8916,22.039868 -103.29303,47.340693 -6.79226,5.652686 -19.46547,18.33117 -25.22484,25.23531 -8.3636,10.02603 -16.479016,21.67655 -22.544486,32.36489 -3.07683,5.42188 -9.61802,18.64996 -9.61802,19.45027 0,0.91062 -0.80534,0.45303 -2.32289,-1.31988 z"
+   id="path1094" /><path
+   style="fill:#1a1a1a;fill-opacity:1;stroke:#4d4d4d;stroke-width:1"
+   d="m 398.20583,464.93186 c 0,-216.02489 0.12146,-304.39871 0.26991,-196.38626 0.14845,108.01244 0.14845,284.76008 0,392.77252 -0.14845,108.01245 -0.26991,19.63863 -0.26991,-196.38626 z"
+   id="path1150" /><path
+   style="fill:#1a1a1a;fill-opacity:1;stroke:#4d4d4d;stroke-width:1"
+   d="m 401.44318,902.40274 c -1.48283,-2.11702 -1.64585,-43.40647 -1.64585,-416.85429 0,-373.44781 0.16302,-414.737261 1.64585,-416.854286 1.37591,-1.964385 2.64173,-2.349769 7.718,-2.349769 3.33969,0 6.64309,0.570921 7.34088,1.268713 0.96181,0.961813 1.26871,18.598983 1.26871,72.911362 0,69.01305 -0.0775,71.84973 -2.1109,77.28456 -1.161,3.10304 -3.53984,7.89508 -5.28631,10.64899 l -3.1754,5.00708 v 40.24031 c 0,37.61687 0.12902,40.42327 1.97893,43.04667 1.08842,1.5435 3.34831,5.42309 5.02199,8.6213 l 3.04306,5.81494 0.27946,141.61892 c 0.30957,156.88126 0.80443,145.17745 -6.6628,157.57802 l -3.66064,6.0791 v 40.51406 c 0,26.52506 0.37415,40.74531 1.08359,41.18376 0.59597,0.36833 2.85586,4.08361 5.02199,8.25617 l 3.9384,7.58648 0.28906,83.91411 c 0.21318,61.88506 -0.029,84.29733 -0.9224,85.37384 -0.77641,0.93553 -3.42147,1.45973 -7.36562,1.45973 -5.161,0 -6.41977,-0.37921 -7.8,-2.34977 z"
+   id="path1152" /><path
+   style="fill:#1a1a1a;fill-opacity:1;stroke:#4d4d4d;stroke-width:1"
+   d="M 389.22472,464.93186 V 72.687962 h 4.22905 4.22904 v 392.243898 392.2439 h -4.22904 -4.22905 z"
+   id="path1154" /><path
+   style="fill:#00c7e7;fill-opacity:0.992157;stroke:#4d4d4d;stroke-width:1"
+   d="m 409.89998,273.33293 v -38.63294 h 3.04188 c 1.74435,0 3.58682,0.88543 4.31941,2.07573 1.73761,2.82321 1.73761,70.29119 0,73.11439 -0.73259,1.19032 -2.57506,2.07573 -4.31941,2.07573 h -3.04188 z"
+   id="path1156" /><path
+   style="fill:#00c7e7;fill-opacity:0.992157;stroke:#4d4d4d;stroke-width:1"
+   d="m 409.89998,676.164 v -38.66403 h 3.04381 c 1.74545,0 3.58909,0.88613 4.32215,2.07741 1.7387,2.82547 1.7387,70.34777 0,73.17325 -0.73306,1.19129 -2.5767,2.0774 -4.32215,2.0774 h -3.04381 z"
+   id="path1158" /><path
+   style="fill:#ff5f55;fill-opacity:0.95686275;stroke:#4d4d4d;stroke-width:1"
+   d="m 748.93436,998.67954 c 26.59545,-2.35471 50.45796,-9.1985 75.88056,-21.7626 65.98743,-32.61168 108.87577,-94.17749 116.99375,-167.94346 1.80381,-16.39057 1.80686,-591.16592 0.003,-608.68789 -2.68506,-26.08512 -9.29287,-49.0507 -20.75194,-72.12385 C 889.32253,64.257568 828.18558,20.735655 757.19631,11.511152 738.81239,9.1223039 622.08856,8.8130147 619.73408,11.146911 c -1.13928,1.129303 -1.47099,112.509439 -1.47099,493.898369 0,485.61761 0.0328,492.45765 2.37105,493.69808 2.83295,1.50294 111.21392,1.44894 128.30022,-0.0637 z"
+   id="path1240" /><path
+   class="st3"
+   d="m 715,763.2 c -23.1,0 -41.9,-18.7 -41.9,-41.9 0,-23.2 18.7,-41.9 41.9,-41.9 23.2,0 41.9,18.7 41.9,41.9 v 0 c -0.1,23.1 -18.8,41.8 -41.9,41.9 z m 0,-82.8 c -22.6,0 -40.9,18.3 -40.9,40.9 0,22.6 18.3,40.9 40.9,40.9 22.6,0 40.9,-18.3 40.9,-40.9 v 0 C 755.8,698.7 737.6,680.4 715,680.4 Z"
+   id="path78"
+   style="fill:#000000" /><path
+   class="st2"
+   d="m 782.2,203.2 h -5.5 l -7.8,-12.9 -7.8,12.9 h -5.4 l 10.6,-16.3 -9.8,-15.6 h 5.2 l 7.3,12 7.4,-12 h 5 l -9.8,15.4 z"
+   id="path88"
+   style="fill:#b3b3b3;fill-opacity:1" /><path
+   class="st2"
+   d="m 709.2,244.5 -11.6,20.6 v 11.4 h -4.4 V 265 l -11.6,-20.5 h 5.3 l 6.4,11.7 2.3,4.7 2.2,-4.3 6.4,-12.1 z"
+   id="path90"
+   style="fill:#b3b3b3" /><path
+   class="st2"
+   d="m 855.9,276.5 h -4.7 l -2.2,-7 h -13.3 l -2.3,7 h -4.5 l 10.6,-32 h 6 z m -8.2,-10.9 -5.4,-17.1 -5.4,17.1 z"
+   id="path92"
+   style="fill:#b3b3b3" /><path
+   class="st2"
+   d="m 779.4,340.4 c 0,1.4 -0.3,2.8 -0.9,4.1 -0.6,1.2 -1.5,2.2 -2.5,3 -1.2,0.9 -2.6,1.5 -4,1.9 -1.7,0.4 -3.4,0.7 -5.2,0.6 h -8.4 v -32 h 9.2 c 7.1,0 10.7,2.6 10.7,7.8 0,1.6 -0.4,3.1 -1.2,4.5 -1,1.4 -2.4,2.3 -4,2.8 0.9,0.2 1.7,0.4 2.5,0.8 0.8,0.4 1.5,0.9 2,1.5 0.6,0.6 1.1,1.4 1.4,2.2 0.2,0.8 0.4,1.8 0.4,2.8 z m -5.7,-14.1 c 0,-0.6 -0.1,-1.3 -0.3,-1.8 -0.2,-0.6 -0.6,-1.1 -1,-1.5 -0.6,-0.5 -1.3,-0.8 -2,-1 -1,-0.3 -2.1,-0.4 -3.2,-0.4 h -4.5 v 10 h 4.4 c 0.9,0 1.8,-0.1 2.7,-0.3 0.8,-0.2 1.5,-0.5 2.1,-1 0.6,-0.4 1,-1 1.3,-1.7 0.4,-0.7 0.5,-1.5 0.5,-2.3 z m 1.1,14.2 c 0,-0.8 -0.2,-1.5 -0.5,-2.2 -0.4,-0.7 -0.9,-1.2 -1.5,-1.7 -0.7,-0.5 -1.5,-0.8 -2.4,-1 -1,-0.3 -2.1,-0.4 -3.2,-0.4 h -4.5 v 11 h 4.6 c 2.5,0 4.4,-0.5 5.6,-1.4 1.3,-1 2,-2.6 1.9,-4.3 z"
+   id="path94"
+   style="fill:#b3b3b3" /><path
+   class="st2"
+   d="M 715,701.3 695.4,721 h 5.6 v 16.8 h 28.2 V 721 h 5.3 z m 5.7,30.5 H 709.6 V 721 h 11.1 z"
+   id="path96"
+   style="fill:#333333" /><path
+   class="st2"
+   d="m 925.6,139.3 c -0.1,0 -0.1,0 -0.2,0 -0.3,-0.1 -0.6,-0.3 -0.7,-0.6 C 891.7,61 815.4,10.5 730.9,10.6 h -54.2 c -0.6,0 -1,-0.4 -1,-1 0,0 0,0 0,0 V 7 c 0,-3.8 3.1,-6.9 7,-7 h 51.2 c 85.2,0.1 162.4,50.1 197.3,127.8 1.2,2.6 0.6,5.7 -1.5,7.8 l -3.4,3.4 c -0.2,0.2 -0.5,0.3 -0.7,0.3 z M 677.7,8.6 h 53.2 c 84.7,-0.1 161.3,50.2 195,128 l 2.4,-2.4 v 0 c 1.5,-1.4 1.9,-3.6 1.1,-5.5 C 894.8,51.7 818.3,2.1 733.9,2 h -51.2 c -2.7,0 -5,2.2 -5,5 z"
+   id="path132"
+   style="fill:#000000" /><path
+   class="st2"
+   d="m 676.5,133.7 h -11.7 c -2.2,0 -4,-1.8 -4,-4 V 118 c 0,-1.1 -0.9,-2 -2,-2 h -11.7 c -2.2,0 -4,-1.8 -4,-4 v -11.7 c 0,-2.2 1.8,-4 4,-4 h 11.7 c 1.1,0 2,-0.9 2,-2 V 82.8 c 0,-2.2 1.8,-4 4,-4 h 11.7 c 2.2,0 4,1.8 4,4 v 11.7 c 0,1.1 0.9,2 2,2 h 11.7 c 2.2,0 4,1.8 4,4 v 11.7 c 0,2.2 -1.8,4 -4,4 h -11.7 c -1.1,0 -2,0.9 -2,2 v 11.7 c 0,2 -1.8,3.8 -4,3.8 z M 647.2,98.5 c -1.1,0 -2,0.9 -2,2 v 11.7 c 0,1.1 0.9,2 2,2 h 11.7 c 2.2,0 4,1.8 4,4 v 11.7 c 0,1.1 0.9,2 2,2 h 11.7 c 1.1,0 2,-0.9 2,-2 v -11.7 c 0,-2.2 1.8,-4 4,-4 h 11.7 c 1.1,0 2,-0.9 2,-2 v -11.7 c 0,-1.1 -0.9,-2 -2,-2 h -11.7 c -2.2,0 -4,-1.8 -4,-4 V 82.8 c 0,-1.1 -0.9,-2 -2,-2 h -11.7 c -1.1,0 -2,0.9 -2,2 v 11.7 c 0,2.2 -1.8,4 -4,4 z"
+   id="path134"
+   style="fill:#000000" /><path
+   class="st2"
+   d="m 768.9,372.4 c -21.2,0 -38.5,-17.2 -38.5,-38.5 0,-21.2 17.2,-38.5 38.5,-38.5 21.2,0 38.5,17.2 38.5,38.5 -0.1,21.3 -17.3,38.5 -38.5,38.5 z m 0,-74.9 c -20.1,0 -36.5,16.3 -36.5,36.5 0,20.1 16.3,36.5 36.5,36.5 20.1,0 36.5,-16.3 36.5,-36.5 -0.1,-20.2 -16.4,-36.5 -36.5,-36.5 z"
+   id="path136"
+   style="fill:#000000" /><path
+   class="st2"
+   d="m 768.9,225.5 c -21.2,0 -38.5,-17.2 -38.5,-38.5 0,-21.2 17.2,-38.5 38.5,-38.5 21.2,0 38.5,17.2 38.5,38.5 -0.1,21.3 -17.3,38.5 -38.5,38.5 z m 0,-74.9 c -20.1,0 -36.5,16.3 -36.5,36.5 0,20.1 16.3,36.5 36.5,36.5 20.1,0 36.5,-16.3 36.5,-36.5 -0.1,-20.2 -16.4,-36.5 -36.5,-36.5 z"
+   id="path138"
+   style="fill:#000000" /><path
+   class="st2"
+   d="m 842.3,299 c -21.2,0 -38.5,-17.2 -38.5,-38.5 0,-21.2 17.2,-38.5 38.5,-38.5 21.2,0 38.5,17.2 38.5,38.5 0,21.2 -17.2,38.4 -38.5,38.5 z m 0,-75 c -20.1,0 -36.5,16.3 -36.5,36.5 0,20.1 16.3,36.5 36.5,36.5 20.1,0 36.5,-16.3 36.5,-36.5 0,-20.1 -16.3,-36.5 -36.5,-36.5 z"
+   id="path140"
+   style="fill:#000000" /><path
+   class="st2"
+   d="m 695.5,299 c -21.2,0 -38.5,-17.2 -38.5,-38.5 0,-21.2 17.2,-38.5 38.5,-38.5 21.2,0 38.5,17.2 38.5,38.5 -0.1,21.2 -17.3,38.4 -38.5,38.5 z m 0,-75 c -20.1,0 -36.5,16.3 -36.5,36.5 0,20.1 16.3,36.5 36.5,36.5 20.1,0 36.5,-16.3 36.5,-36.5 C 731.9,240.4 715.6,224 695.5,224 Z"
+   id="path142"
+   style="fill:#000000" /><path
+   class="st2"
+   d="m 715,750.2 c -16,0 -28.9,-13 -28.9,-28.9 0,-15.9 13,-28.9 28.9,-28.9 16,0 28.9,13 28.9,28.9 0,0 0,0 0,0 0,16 -12.9,28.9 -28.9,28.9 z m 0,-55.9 c -14.9,0 -26.9,12.1 -26.9,26.9 0,14.8 12.1,26.9 26.9,26.9 14.9,0 26.9,-12.1 26.9,-26.9 0,-14.8 -12,-26.8 -26.9,-26.9 z"
+   id="path144"
+   style="fill:#000000" /><path
+   class="st2"
+   d="m 705.8,533.4 h -12.3 c -0.6,0 -1,-0.4 -1,-1 0,0 0,0 0,0 1.7,-39.6 33.4,-71.3 73,-73 0.3,0 0.5,0.1 0.7,0.3 0.2,0.2 0.3,0.4 0.3,0.7 v 12.3 c 0,3.5 -2.6,6.4 -6,6.9 -24.7,3.7 -44.2,23.1 -47.9,47.9 -0.4,3.3 -3.3,5.9 -6.8,5.9 z m -11.2,-2 h 11.2 c 2.5,0 4.6,-1.8 4.9,-4.3 3.9,-25.6 24,-45.7 49.6,-49.6 2.5,-0.3 4.3,-2.4 4.3,-4.9 v -11.2 c -37.4,2.1 -67.9,32.6 -70,70 z"
+   id="path146"
+   style="fill:#000000" /><path
+   class="st2"
+   d="m 765.6,612.1 c 0,0 -0.1,0 0,0 -39.6,-1.7 -71.3,-33.4 -73,-73 0,-0.6 0.4,-1 1,-1 0,0 0,0 0,0 h 12.3 c 3.5,0 6.4,2.6 6.9,6 3.7,24.7 23.1,44.2 47.9,47.9 3.4,0.5 6,3.4 6,6.9 v 12.3 c -0.1,0.4 -0.6,0.9 -1.1,0.9 0,0 0,0 0,0 z m -71,-72.1 c 2.2,37.4 32.6,67.8 70,70 v -11.2 c 0,-2.5 -1.8,-4.6 -4.3,-4.9 -25.6,-3.9 -45.7,-24 -49.6,-49.6 -0.3,-2.5 -2.4,-4.3 -4.9,-4.3 z"
+   id="path148"
+   style="fill:#000000" /><path
+   class="st2"
+   d="m 772.2,612.1 c -0.6,0 -1,-0.4 -1,-1 0,0 0,0 0,0 v -12.3 c 0,-3.5 2.6,-6.4 6,-6.9 24.7,-3.7 44.2,-23.1 47.9,-47.9 0.5,-3.4 3.4,-6 6.9,-6 h 12.3 c 0.6,0 1,0.4 1,1 0,0 0,0 0,0 -1.8,39.7 -33.4,71.3 -73.1,73.1 0.1,0 0.1,0 0,0 z M 832,540 c -2.5,0 -4.6,1.8 -4.9,4.3 -3.9,25.6 -24,45.7 -49.6,49.6 -2.5,0.3 -4.3,2.4 -4.3,4.9 V 610 c 37.4,-2.2 67.8,-32.6 70,-70 z"
+   id="path150"
+   style="fill:#000000" /><path
+   class="st2"
+   d="M 844.3,533.4 H 832 c -3.5,0 -6.4,-2.6 -6.9,-6 -3.7,-24.7 -23.1,-44.2 -47.9,-47.9 -3.4,-0.5 -6,-3.4 -6,-6.9 v -12.3 c 0,-0.3 0.1,-0.5 0.3,-0.7 0.2,-0.2 0.5,-0.3 0.7,-0.3 39.6,1.7 71.3,33.4 73,73 0.1,0.6 -0.3,1 -0.9,1.1 0,0 0,0 0,0 z m -71.1,-72 v 11.2 c 0,2.5 1.8,4.6 4.3,4.9 25.6,3.9 45.7,24 49.6,49.6 0.3,2.5 2.4,4.3 4.9,4.3 h 11.2 c -2.1,-37.4 -32.6,-67.9 -70,-70 z"
+   id="path152"
+   style="fill:#000000" /><path
+   class="st2"
+   d="m 768.9,612.2 c -1.2,0 -2.3,0 -3.4,-0.1 -0.5,0 -0.9,-0.5 -0.9,-1 v -12.3 c 0,-2.5 -1.8,-4.6 -4.3,-4.9 -25.6,-3.9 -45.7,-24 -49.6,-49.6 -0.3,-2.5 -2.4,-4.3 -4.9,-4.3 h -12.3 c -0.5,0 -1,-0.4 -1,-0.9 -0.1,-1.1 -0.1,-2.2 -0.1,-3.4 0,-1.2 0,-2.3 0.1,-3.4 0,-0.5 0.5,-0.9 1,-0.9 h 12.3 c 2.5,0 4.6,-1.8 4.9,-4.3 3.9,-25.6 24,-45.7 49.6,-49.6 2.5,-0.3 4.3,-2.4 4.3,-4.9 v -12.3 c 0,-0.5 0.4,-1 0.9,-1 2.3,-0.1 4.5,-0.1 6.8,0 0.5,0 0.9,0.5 0.9,1 v 12.3 c 0,2.5 1.8,4.6 4.3,4.9 25.6,3.9 45.7,24 49.6,49.6 0.3,2.5 2.4,4.3 4.9,4.3 h 12.3 c 0.5,0 1,0.4 1,0.9 0.1,1.1 0.1,2.2 0.1,3.4 0,1.2 0,2.3 -0.1,3.4 0,0.5 -0.5,0.9 -1,0.9 H 832 c -2.5,0 -4.6,1.8 -4.9,4.3 -3.9,25.6 -24,45.7 -49.6,49.6 -2.5,0.3 -4.3,2.4 -4.3,4.9 v 12.3 c 0,0.5 -0.4,1 -0.9,1 -1.1,0 -2.2,0.1 -3.4,0.1 z m -2.3,-2.1 c 1.5,0.1 3.1,0.1 4.7,0 v -11.3 c 0,-3.5 2.6,-6.4 6,-6.9 24.7,-3.7 44.2,-23.1 47.9,-47.9 0.5,-3.4 3.4,-6 6.9,-6 h 11.3 c 0,-0.8 0,-1.5 0,-2.3 0,-0.8 0,-1.6 0,-2.3 H 832 c -3.5,0 -6.4,-2.6 -6.9,-6 -3.7,-24.7 -23.1,-44.2 -47.9,-47.9 -3.4,-0.5 -6,-3.4 -6,-6.9 v -11.3 c -1.5,-0.1 -3.1,-0.1 -4.7,0 v 11.3 c 0,3.5 -2.6,6.4 -6,6.9 -24.7,3.7 -44.2,23.1 -47.9,47.9 -0.5,3.4 -3.4,6 -6.9,6 h -11.3 c 0,0.8 0,1.5 0,2.3 0,0.8 0,1.6 0,2.3 h 11.3 c 3.5,0 6.4,2.6 6.9,6 3.7,24.7 23.1,44.2 47.9,47.9 3.4,0.5 6,3.4 6,6.9 v 11.3 z"
+   id="path154"
+   style="fill:#000000" /><path
+   style="opacity:1;fill:#1a1a1a;fill-opacity:1;stroke:#4d4d4d;stroke-width:1"
+   d="m 686.27756,295.45757 c -6.3268,-1.65761 -11.02024,-4.44224 -16.19729,-9.60987 -7.7249,-7.71084 -11.00252,-16.02709 -10.55426,-26.7792 0.56274,-13.49806 7.94054,-24.90282 19.94518,-30.83167 10.51307,-5.1922 21.47279,-5.27638 31.58153,-0.24258 7.93543,3.95157 13.41304,9.50319 17.2109,17.44344 5.18792,10.84649 4.24806,24.40322 -2.39714,34.5766 -4.99743,7.65076 -13.48676,13.69608 -22.04004,15.69491 -4.81862,1.12607 -12.72306,1.01273 -17.54888,-0.25163 z m 11.6608,-24.5355 v -5.81067 l 5.62044,-9.96942 c 3.09124,-5.48319 5.62044,-10.21511 5.62044,-10.51538 0,-0.30027 -1.15454,-0.54595 -2.56564,-0.54595 h -2.56564 l -4.20029,8.09641 c -2.67942,5.1648 -4.33588,7.8298 -4.57474,7.3601 -0.20594,-0.40496 -2.13104,-4.04835 -4.27799,-8.0964 l -3.90356,-7.36011 h -2.87335 c -1.58035,0 -2.87336,0.12781 -2.87336,0.28402 0,0.1562 2.64964,4.96636 5.88808,10.68923 l 5.88809,10.40522 v 5.63681 5.63682 h 2.40876 2.40876 z"
+   id="path1462" /><path
+   style="opacity:1;fill:#1a1a1a;fill-opacity:1;stroke:#4d4d4d;stroke-width:1"
+   d="m 762.70726,222.86949 c -4.07666,-0.78537 -10.17009,-3.29429 -13.6441,-5.61785 -6.91015,-4.6218 -11.71459,-10.88088 -14.5402,-18.94258 -1.34575,-3.83954 -1.49911,-4.98899 -1.49911,-11.23574 0,-6.24676 0.15336,-7.39621 1.49911,-11.23575 3.87774,-11.0635 11.80142,-19.0577 22.76847,-22.97107 4.25097,-1.51687 5.15889,-1.64602 11.57155,-1.64602 6.41266,0 7.32058,0.12915 11.57155,1.64602 14.51853,5.18065 23.77179,17.63258 24.42528,32.86862 0.45428,10.5913 -2.84072,19.07821 -10.28709,26.49636 -7.55957,7.53093 -14.1652,10.43737 -24.37154,10.72334 -3.38565,0.0949 -6.75791,0.0565 -7.49392,-0.0853 z m 2.38607,-25.68467 c 4.25443,-7.14961 3.37755,-7.25493 8.20926,0.98595 l 3.05431,5.20938 3.12152,0.01 3.12152,0.01 -1.22963,-2.0073 c -0.6763,-1.10401 -3.07664,-4.86619 -5.3341,-8.36039 l -4.10446,-6.35309 4.75516,-7.43514 c 2.61533,-4.08932 4.75516,-7.56602 4.75516,-7.72599 0,-0.15996 -1.24936,-0.21804 -2.77636,-0.12905 l -2.77635,0.16179 -3.10726,5.05393 c -1.70899,2.77966 -3.29562,5.24229 -3.52585,5.47251 -0.23022,0.23022 -1.93136,-2.10426 -3.78031,-5.18775 l -3.36174,-5.60633 h -2.95881 -2.95881 l 1.22685,2.0073 c 0.67476,1.10402 2.8714,4.62127 4.88142,7.81612 l 3.65457,5.80881 -4.85255,7.43415 c -2.66891,4.08878 -4.99211,7.79781 -5.16268,8.24229 -0.25287,0.65897 0.2216,0.80814 2.57051,0.80814 h 2.88063 z"
+   id="path1464" /><path
+   style="opacity:1;fill:#1a1a1a;fill-opacity:1;stroke:#4d4d4d;stroke-width:1"
+   d="m 833.85476,295.72323 c -6.83119,-1.65863 -13.77734,-5.88165 -18.67395,-11.35311 -3.40208,-3.80148 -7.27107,-11.46438 -8.31543,-16.4695 -2.76322,-13.24277 2.63571,-27.85526 13.26894,-35.91309 19.99373,-15.15118 48.09433,-6.6877 56.44101,16.99918 1.86188,5.28381 2.27747,13.55775 0.97503,19.41195 -1.50813,6.77877 -4.55198,12.15816 -9.87968,17.46031 -5.26572,5.24048 -9.89475,7.95133 -16.43315,9.62357 -4.85615,1.24199 -12.80551,1.35206 -17.38277,0.24069 z m 0.90791,-22.33599 1.06927,-3.3455 6.50377,-0.1501 6.50377,-0.1501 0.98735,3.36178 0.98735,3.36179 2.51591,0.16314 c 1.8243,0.1183 2.51592,-0.0335 2.51592,-0.55237 0,-0.39353 -2.29576,-7.75345 -5.10169,-16.35537 l -5.10169,-15.63986 h -3.1506 -3.1506 l -5.20854,15.65695 c -2.86469,8.61132 -5.31927,15.95804 -5.45462,16.32605 -0.17576,0.47789 0.50564,0.6691 2.38452,0.6691 h 2.6306 z"
+   id="path1466" /><path
+   style="opacity:1;fill:#1a1a1a;fill-opacity:1;stroke:#4d4d4d;stroke-width:1"
+   d="m 763.70798,369.86416 c -8.12397,-1.27622 -14.00129,-4.35733 -20.33165,-10.65861 -3.76197,-3.74468 -5.02094,-5.43974 -6.83916,-9.20812 -7.60051,-15.75262 -3.54817,-33.43875 10.18745,-44.46231 6.3567,-5.10159 13.61954,-7.5924 22.13836,-7.5924 29.9337,0 46.67981,33.83863 28.70945,58.01278 -7.44586,10.01634 -21.60997,15.83377 -33.86445,13.90866 z m 11.20335,-21.38348 c 3.07353,-1.75995 4.52918,-4.20847 4.57675,-7.69846 0.0443,-3.24643 -1.27165,-5.85301 -3.49954,-6.93201 l -1.49389,-0.72351 1.60877,-1.54129 c 1.87307,-1.79453 2.80455,-4.70189 2.3305,-7.27407 -0.92747,-5.03237 -3.68485,-6.33408 -13.45172,-6.35026 l -7.09246,-0.0118 v 16.10974 16.10973 l 7.3601,-0.18515 c 6.6513,-0.16732 7.58173,-0.31206 9.66149,-1.50296 z"
+   id="path1468" /><path
+   style="opacity:1;fill:#1a1a1a;fill-opacity:1;stroke:#4d4d4d;stroke-width:1"
+   d="m 762.70726,326.44188 v -4.88945 l 3.72999,0.26688 c 4.16057,0.29769 6.24901,1.33706 6.7575,3.36306 0.94714,3.77369 -1.80659,6.14376 -7.14199,6.14695 l -3.3455,0.002 z"
+   id="path1470" /><path
+   style="opacity:1;fill:#1a1a1a;fill-opacity:1;stroke:#4d4d4d;stroke-width:0.999998"
+   d="m 837.54718,264.82028 c 0,-0.76372 4.25204,-14.10124 4.62716,-14.51418 0.17889,-0.19692 1.32644,2.82483 2.55012,6.715 1.22368,3.89017 2.33144,7.35074 2.46168,7.69016 0.18748,0.48856 -0.7918,0.61711 -4.70107,0.61711 -3.25732,0 -4.93789,-0.17292 -4.93789,-0.50809 z"
+   id="path1496" /><path
+   style="opacity:1;fill:#1a1a1a;fill-opacity:1;stroke:#4d4d4d;stroke-width:0.999998"
+   d="m 763.06218,340.74443 v -5.12084 h 3.61513 c 4.59667,0 6.58099,0.93645 7.49973,3.5393 0.55274,1.56594 0.54465,2.04231 -0.0591,3.47983 -0.97646,2.32493 -3.07062,3.22256 -7.51823,3.22256 h -3.53752 z"
+   id="path1498" /><path
+   style="opacity:1;fill:#1a1a1a;fill-opacity:1;stroke:#4d4d4d;stroke-width:1"
+   d="m 766.92321,602.64753 c -0.29048,-8.92659 -0.85756,-9.59054 -10.1321,-11.86299 -21.45382,-5.25664 -37.29198,-20.85776 -42.70074,-42.06165 -0.55002,-2.15622 -1.00003,-4.47981 -1.00003,-5.16353 0,-0.68371 -1.0064,-2.24952 -2.23643,-3.47956 l -2.23643,-2.23643 h -6.9724 -6.97241 v -1.97332 -1.97332 h 5.94109 c 6.60342,0 9.93688,-1.00153 11.20212,-3.36564 0.44261,-0.82703 1.34271,-3.96544 2.00022,-6.97425 3.49259,-15.98235 14.91214,-30.68661 29.48362,-37.96428 4.71573,-2.35525 11.36654,-4.65443 15.50589,-5.36038 6.61875,-1.12879 8.22218,-3.61509 8.22218,-12.74947 v -5.94109 h 1.97332 1.97332 v 6.89625 c 0,6.61611 0.0735,6.97475 1.80888,8.82901 1.46262,1.5628 3.13096,2.25493 8.7155,3.61572 20.40883,4.97306 36.06052,19.9102 41.49254,39.59826 0.78813,2.85653 1.76467,6.36883 2.17007,7.80511 1.22789,4.35011 3.85392,5.61076 11.68766,5.61076 h 6.48046 v 1.97332 1.97332 h -6.6104 c -6.95598,0 -9.89025,0.84134 -10.81193,3.1001 -0.2638,0.64649 -1.18554,3.97814 -2.0483,7.40367 -5.38972,21.39923 -21.36363,37.35004 -42.22246,42.16138 -9.94989,2.29507 -10.66202,3.14671 -10.66202,12.75068 v 6.28151 h -1.91345 -1.91345 z"
+   id="path1500" /><path
+   style="opacity:1;fill:#1a1a1a;fill-opacity:1;stroke:#4d4d4d;stroke-width:1"
+   d=""
+   id="path1502" /><path
+   style="opacity:1;fill:#1a1a1a;fill-opacity:1;stroke:#4d4d4d;stroke-width:1"
+   d="m 695.45795,526.49678 c 1.75282,-15.26781 9.42349,-30.89435 20.92126,-42.62035 11.95352,-12.1908 27.0212,-19.51188 45.22194,-21.97243 l 2.79554,-0.37793 v 6.18375 c 0,7.93282 -0.51936,8.65269 -7.23551,10.02904 -22.30129,4.57023 -40.70977,22.45408 -45.7072,44.40457 -2.01248,8.8395 -2.35691,9.12221 -11.11415,9.12221 h -5.42936 z"
+   id="path1504" /><path
+   style="opacity:1;fill:#1a1a1a;fill-opacity:1;stroke:#4d4d4d;stroke-width:1"
+   d="M 754.53008,608.24817 C 722.31091,601.3332 698.78801,575.33696 695.1389,542.61223 l -0.23838,-2.13776 h 6.36187 c 5.30645,0 6.54081,0.19773 7.44049,1.19187 0.59325,0.65553 1.8242,4.13099 2.73545,7.72325 5.73315,22.60074 22.81787,39.26947 45.21411,44.1132 6.89875,1.49203 7.74425,2.60069 7.74425,10.15464 v 5.88328 l -2.13776,-0.0463 c -1.17577,-0.0255 -4.65375,-0.58628 -7.72885,-1.24626 z"
+   id="path1506" /><path
+   style="opacity:1;fill:#1a1a1a;fill-opacity:1;stroke:#4d4d4d;stroke-width:1"
+   d="m 773.60552,603.37682 c 0,-7.26315 0.7124,-8.57514 5.06106,-9.32073 4.85038,-0.83162 11.1113,-2.92244 16.31659,-5.44891 15.80304,-7.67023 27.12455,-21.98721 31.55746,-39.907 0.97744,-3.95125 2.07685,-6.90365 2.75558,-7.39995 0.71733,-0.52453 3.39605,-0.82576 7.34299,-0.82576 h 6.21369 l -0.43161,3.7822 c -3.78834,33.19719 -31.7798,61.26383 -64.82878,65.00289 l -3.98698,0.45108 z"
+   id="path1508" /><path
+   style="opacity:1;fill:#1a1a1a;fill-opacity:1;stroke:#4d4d4d;stroke-width:1"
+   d="m 829.28285,529.78565 c -1.17591,-1.07273 -1.92806,-2.90835 -2.7333,-6.67061 -4.37909,-20.45999 -18.95972,-36.61709 -39.28934,-43.53733 -2.43875,-0.83016 -5.8241,-1.71782 -7.52299,-1.97259 -1.88233,-0.28227 -3.68318,-1.05749 -4.6103,-1.9846 -1.37609,-1.3761 -1.5214,-2.11712 -1.5214,-7.7588 v -6.23739 l 2.46665,0.33127 c 18.99503,2.55107 32.67768,9.21103 45.44487,22.12006 10.43139,10.54728 17.44069,23.80984 20.16018,38.14583 0.547,2.88355 0.99455,6.09813 0.99455,7.14349 v 1.90066 h -5.88329 c -5.18197,0 -6.07667,-0.17643 -7.50563,-1.47999 z"
+   id="path1510" /><path
+   style="opacity:1;fill:#000000;fill-opacity:1;stroke:#4d4d4d;stroke-width:0.999999"
+   d="m 663.62068,131.03319 c -0.53326,-0.58925 -0.625,-1.69704 -0.625,-7.54707 v -6.85645 l -1.10115,-1.23333 -1.10115,-1.23332 -7.11278,-0.10646 c -9.08871,-0.13604 -8.43455,0.46843 -8.43455,-7.79389 0,-4.68262 0.12554,-6.289149 0.5353,-6.850301 0.49015,-0.671243 1.10329,-0.741434 7.26979,-0.832236 3.70397,-0.05454 7.12214,-0.18656 7.59593,-0.293374 0.47378,-0.106815 1.19541,-0.741963 1.60361,-1.411441 0.66219,-1.086052 0.74232,-1.921972 0.74358,-7.756551 8.2e-4,-3.782617 0.16622,-6.847257 0.39235,-7.269795 0.3648,-0.681634 0.8563,-0.730476 7.35092,-0.730476 6.49462,0 6.98613,0.04884 7.35092,0.730476 0.22614,0.422538 0.39154,3.487178 0.39236,7.269795 10e-4,5.834579 0.0814,6.670499 0.74358,7.756551 0.4082,0.669478 1.12983,1.304626 1.60361,1.411441 0.47379,0.106814 3.89196,0.238833 7.59593,0.293374 6.1665,0.0908 6.77964,0.160993 7.26979,0.832236 0.40976,0.561152 0.5353,2.167681 0.5353,6.850301 0,8.26232 0.65416,7.65785 -8.43455,7.79389 l -7.11278,0.10646 -1.10115,1.23332 -1.10115,1.23333 v 6.92207 c 0,6.22636 -0.0694,6.98488 -0.69062,7.54707 -0.58568,0.53003 -1.66715,0.62501 -7.11685,0.62501 -5.74601,0 -6.49238,-0.0731 -7.05124,-0.69063 z"
+   id="path1512" /><path
+   style="opacity:1;fill:#1a1a1a;fill-opacity:1;stroke:#4d4d4d;stroke-width:1"
+   d="m 709.89826,726.4428 v -5.25775 h 5.25776 5.25775 v 5.25775 5.25776 h -5.25775 -5.25776 z"
+   id="path1514" /><path
+   style="opacity:1;fill:#1a1a1a;fill-opacity:1;stroke:#4d4d4d;stroke-width:1"
+   d="m 708.88715,747.11324 c -7.7953,-1.94254 -14.19265,-7.02605 -17.61469,-13.99713 -2.11167,-4.3017 -2.80967,-7.2657 -2.80967,-11.93106 0,-4.6603 0.69677,-7.62382 2.80517,-11.93107 2.98868,-6.10556 8.92756,-11.23718 15.51022,-13.40195 4.61637,-1.51813 11.17625,-1.60821 15.65781,-0.215 15.04474,4.67704 23.00917,20.70184 17.43246,35.07495 -4.8049,12.38391 -18.34269,19.55071 -30.9813,16.40126 z m 20.42437,-17.43489 v -8.4933 h 2.62887 c 1.44589,0 2.62888,-0.13514 2.62888,-0.3003 0,-0.16516 -4.4121,-4.71516 -9.80467,-10.1111 l -9.80467,-9.8108 -9.81081,9.80467 c -5.39594,5.39257 -9.8108,9.94257 -9.8108,10.1111 0,0.16854 1.27399,0.30643 2.8311,0.30643 h 2.8311 v 8.4933 8.4933 h 14.1555 14.1555 z"
+   id="path1516" /><path
+   style="opacity:1;fill:#1a1a1a;fill-opacity:1;stroke:#4d4d4d;stroke-width:1"
+   d="m 709.32587,761.61376 c -14.84534,-2.33618 -27.22151,-12.34303 -32.43644,-26.22673 -7.52289,-20.0282 2.33277,-43.0312 22.02756,-51.41208 6.07171,-2.58375 8.49788,-3.03235 16.23903,-3.00264 6.50926,0.025 7.37011,0.11595 10.71773,1.13248 14.44352,4.38591 24.64194,14.87492 28.58676,29.40132 0.78714,2.89856 0.92468,4.38074 0.9169,9.88116 -0.008,5.44704 -0.15534,7.01511 -0.93296,9.90885 -4.75273,17.68623 -20.04274,29.95104 -38.0751,30.54176 -2.55811,0.0838 -5.72767,-0.0171 -7.04348,-0.22412 z m 12.01917,-11.94961 c 11.93985,-2.6283 21.26602,-13.04595 22.49006,-25.12213 2.18282,-21.53536 -18.13115,-37.7028 -38.52104,-30.65805 -4.17709,1.44319 -6.99053,3.28712 -10.81791,7.09005 -2.821,2.80297 -3.81838,4.14269 -5.32568,7.15366 -2.55937,5.1126 -3.29841,8.68914 -3.02322,14.63061 0.31524,6.80606 2.15585,11.73401 6.30752,16.88741 6.75846,8.38917 18.22621,12.36591 28.89027,10.01845 z"
+   id="path1518" /><path
+   style="opacity:1;fill:#ff5f55;fill-opacity:0.956863;stroke:#4d4d4d;stroke-width:1"
+   d="m 591.47251,714.31134 c -2.59326,-1.58129 -2.41164,1.27628 -2.41164,-37.94303 0,-35.39705 0.002,-35.47278 0.79102,-36.47631 1.14169,-1.45141 2.68891,-2.12685 4.87199,-2.12685 h 1.91275 v 38.63637 38.63636 l -1.98864,-0.002 c -1.28887,-7.5e-4 -2.40626,-0.25607 -3.17548,-0.72512 z"
+   id="path1520" /><path
+   style="opacity:1;fill:#ff5f55;fill-opacity:0.956863;stroke:#4d4d4d;stroke-width:1"
+   d="m 592.87653,312.11027 c -0.50555,-0.0951 -1.32393,-0.43811 -1.8186,-0.76224 -2.07696,-1.36087 -1.99706,0.15175 -1.99706,-37.80487 0,-31.80626 0.058,-35.19116 0.61953,-36.14171 0.93372,-1.58066 2.4287,-2.28781 4.83664,-2.28781 h 2.11959 V 273.75 312.38636 l -1.42045,-0.0516 c -0.78125,-0.0284 -1.83409,-0.1294 -2.33965,-0.22451 z"
+   id="path1522" /><path
+   style="opacity:1;fill:#000000;fill-opacity:0.956863;stroke:#4d4d4d;stroke-width:1"
+   d="M 921.31509,126.45258 C 911.22775,105.90097 899.41123,89.210741 883.15837,72.558198 848.342,36.885643 804.48862,15.547979 753.51164,9.4762173 748.44895,8.8732107 740.43487,8.6841876 712.59008,8.5110262 L 677.96414,8.2956939 V 6.8885761 c 0,-0.9784616 0.48302,-1.8901352 1.58557,-2.9926826 l 1.58556,-1.5855648 h 30.73203 c 16.92783,0 33.54939,0.2176979 37.00428,0.4846569 50.75274,3.9216602 97.06468,24.5817024 133.31418,59.4722764 17.58138,16.922285 31.48259,35.738975 42.78184,57.909488 4.28368,8.40514 4.87972,10.05538 4.25358,11.77682 -0.41652,1.14511 -2.61821,3.7514 -3.13345,3.70927 -0.14438,-0.0118 -2.29207,-4.15642 -4.77264,-9.21026 z"
+   id="path1524" /><path
+   style="opacity:1;fill:#1a1a1a;fill-opacity:1;stroke:#4d4d4d;stroke-width:1"
+   d="m 591.56604,904.17079 c -2.01964,-1.17632 -2.15587,-6.52992 -2.15587,-84.72244 v -83.46676 l 4.9277,-10.18986 4.92769,-10.18984 v -39.48272 -39.48272 l -4.92769,-9.84523 -4.9277,-9.84523 V 475.04429 333.1426 l 4.9277,-10.18986 4.92769,-10.18984 v -39.48272 -39.48272 l -4.93732,-9.86447 -4.93732,-9.86446 0.31761,-73.44555 0.31761,-73.44554 6.5676,-0.375829 c 3.78331,-0.216499 7.3086,0.239148 8.31548,1.074785 1.50292,1.24731 1.74788,59.776984 1.74788,417.620064 v 416.16945 l -2.73795,1.91775 c -3.10138,2.17229 -9.13889,2.45924 -12.35311,0.58713 z"
+   id="path1530" /><path
+   style="opacity:1;fill:#1a1a1a;fill-opacity:1;stroke:#4d4d4d;stroke-width:1"
+   d="M 609.12095,465.08874 V 72.721096 h 4.31173 4.31173 V 465.08874 857.45638 h -4.31173 -4.31173 z"
+   id="path1532" /></svg>
diff --git a/Ryujinx/Ui/Resources/Controller_JoyConRight.svg b/Ryujinx/Ui/Resources/Controller_JoyConRight.svg
index 014c0ae3df..aa64330c9e 100644
--- a/Ryujinx/Ui/Resources/Controller_JoyConRight.svg
+++ b/Ryujinx/Ui/Resources/Controller_JoyConRight.svg
@@ -1,120 +1,311 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 viewBox="0 0 1000.8 1000" style="enable-background:new 0 0 1000.8 1000;" xml:space="preserve">
-<style type="text/css">
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.1"
+   id="Layer_1"
+   x="0px"
+   y="0px"
+   viewBox="0 0 1000.8 1000"
+   style="enable-background:new 0 0 1000.8 1000;"
+   xml:space="preserve"
+   sodipodi:docname="JoyConRight.svg"
+   inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"><metadata
+   id="metadata85"><rdf:RDF><cc:Work
+       rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+         rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
+   id="defs83" /><sodipodi:namedview
+   pagecolor="#ffffff"
+   bordercolor="#666666"
+   borderopacity="1"
+   objecttolerance="10"
+   gridtolerance="10"
+   guidetolerance="10"
+   inkscape:pageopacity="0"
+   inkscape:pageshadow="2"
+   inkscape:window-width="1920"
+   inkscape:window-height="1003"
+   id="namedview81"
+   showgrid="false"
+   inkscape:zoom="0.715"
+   inkscape:cx="500.39999"
+   inkscape:cy="504.8442"
+   inkscape:window-x="1400"
+   inkscape:window-y="0"
+   inkscape:window-maximized="1"
+   inkscape:current-layer="Layer_1" />
+<style
+   type="text/css"
+   id="style2">
 	.st0{opacity:0.1;}
 	.st1{fill:#FF5F55;}
 	.st2{fill:#FFFFFF;}
 </style>
-<g class="st0">
-	<path class="st1" d="M597.9,233.9v79.5h-4.2c-3.3,0-6-2.7-6-6v-67.6c0-3.3,2.7-6,6-6h4.2V233.9z"/>
-	<path class="st1" d="M597.9,636.6v79.5h-4.2c-3.3,0-6-2.7-6-6v-67.6c0-3.3,2.7-6,6-6L597.9,636.6L597.9,636.6z"/>
-	<path class="st1" d="M929,134.9l-3.4,3.4C892.4,60.3,815.8,9.6,730.9,9.6h-54.2V7c0-3.3,2.7-6,6-6l0,0h51.2
-		c84.8,0,161.7,49.8,196.4,127.2C931.3,130.5,930.8,133.1,929,134.9z"/>
-	<path class="st1" d="M679.5,94.5V82.8c0-1.6-1.3-3-3-3l0,0h-11.7c-1.6,0-3,1.3-3,3l0,0v11.7c0,1.6-1.3,3-3,3l0,0h-11.7
-		c-1.6,0-3,1.3-3,3l0,0v11.7c0,1.6,1.3,3,3,3l0,0h11.7c1.6,0,3,1.3,3,3l0,0v11.7c0,1.6,1.3,3,3,3l0,0h11.7c1.6,0,3-1.3,3-3l0,0
-		v-11.7c0-1.6,1.3-3,3-3l0,0h11.7c1.6,0,3-1.3,3-3l0,0v-11.7c0-1.6-1.3-3-3-3l0,0h-11.7C680.8,97.5,679.5,96.1,679.5,94.5
-		L679.5,94.5z"/>
-	<circle class="st1" cx="768.9" cy="333.9" r="37.5"/>
-	<circle class="st1" cx="768.9" cy="187.1" r="37.5"/>
-	<circle class="st1" cx="842.3" cy="260.5" r="37.5"/>
-	<circle class="st1" cx="695.5" cy="260.5" r="37.5"/>
-	<circle class="st1" cx="715" cy="721.3" r="27.9"/>
-	<path class="st1" d="M765.6,460.3v12.3c0,3-2.2,5.5-5.2,5.9c-25.2,3.7-45,23.5-48.7,48.7c-0.4,2.9-2.9,5.1-5.9,5.2h-12.3
-		C695.2,493.3,726.5,462,765.6,460.3z"/>
-	<path class="st1" d="M765.6,598.8v12.3c-39.1-1.7-70.3-33-72.1-72h12.3c3,0,5.5,2.2,5.9,5.2c3.7,25.2,23.5,45,48.7,48.7
-		C763.4,593.3,765.6,595.8,765.6,598.8z"/>
-	<path class="st1" d="M844.3,539c-1.7,39.1-33,70.3-72.1,72v-12.3c0-3,2.2-5.5,5.2-5.9c25.2-3.7,45-23.5,48.7-48.7
-		c0.4-2.9,2.9-5.1,5.9-5.2L844.3,539z"/>
-	<path class="st1" d="M844.3,532.4H832c-3,0-5.5-2.2-5.9-5.2c-3.7-25.2-23.5-45-48.7-48.7c-2.9-0.4-5.1-2.9-5.2-5.9v-12.3
-		C811.3,462,842.6,493.3,844.3,532.4z"/>
-	<path class="st1" d="M844.4,535.7c0,1.1,0,2.2-0.1,3.3H832c-3,0-5.5,2.2-5.9,5.2c-3.7,25.2-23.5,45-48.7,48.7
-		c-2.9,0.4-5.1,2.9-5.2,5.9v12.3c-1.1,0.1-2.2,0.1-3.3,0.1s-2.2,0-3.3-0.1v-12.3c0-3-2.2-5.5-5.2-5.9c-25.2-3.7-45-23.5-48.7-48.7
-		c-0.4-2.9-2.9-5.1-5.9-5.2h-12.3c-0.1-1.1-0.1-2.2-0.1-3.3s0-2.2,0.1-3.3h12.3c3,0,5.5-2.2,5.9-5.2c3.7-25.2,23.5-45,48.7-48.7
-		c2.9-0.4,5.1-2.9,5.2-5.9v-12.3c1.1-0.1,2.2-0.1,3.3-0.1s2.2,0,3.3,0.1v12.3c0,3,2.2,5.5,5.2,5.9c25.2,3.7,45,23.5,48.7,48.7
-		c0.4,2.9,2.9,5.1,5.9,5.2h12.3C844.3,533.5,844.4,534.6,844.4,535.7z"/>
-</g>
-<path class="st2" d="M601.6,906.6h-7.9c-3.6,0-6.4-2.9-6.5-6.5V742.9c0-4.9,1.2-9.6,3.4-13.9l6.7-13v-79.2l-6.7-13
-	c-2.2-4.3-3.4-9.1-3.4-14V340.1c0-4.9,1.2-9.6,3.4-13.9l6.7-13V234l-6.7-13c-2.2-4.3-3.4-9.1-3.4-14V71.2c0-3.6,2.9-6.4,6.5-6.5h7.9
-	c3.6,0,6.4,2.9,6.5,6.5v828.9C608,903.7,605.1,906.6,601.6,906.6z M593.7,65.7c-3,0-5.5,2.4-5.5,5.5V207c0,4.7,1.1,9.3,3.3,13.5
-	l6.8,13.1c0,0.1,0.1,0.1,0.1,0.2v79.5c0,0.1,0,0.2-0.1,0.2l-6.8,13.1c-2.2,4.2-3.3,8.8-3.3,13.5v269.7c0,4.7,1.1,9.3,3.3,13.5
-	l6.8,13.1c0,0.1,0.1,0.1,0.1,0.2v79.5c0,0.1,0,0.2-0.1,0.2l-6.8,13.1c-2.2,4.2-3.3,8.8-3.3,13.5v157.2c0,3,2.4,5.5,5.5,5.5h7.9
-	c3,0,5.5-2.4,5.5-5.5V71.2c0-3-2.4-5.5-5.5-5.5H593.7z"/>
-<path class="st2" d="M618.8,858.9h-11.3c-0.3,0-0.5-0.2-0.5-0.5l0,0V72c0-0.3,0.2-0.5,0.5-0.5h11.3c0.3,0,0.5,0.2,0.5,0.5v786.4
-	C619.3,858.7,619.1,858.9,618.8,858.9L618.8,858.9z M608,857.9h10.3V72.5H608V857.9z"/>
-<path class="st2" d="M730.9,1000H624.7c-3.6,0-6.5-2.9-6.5-6.5v-978c0-3.6,2.9-6.5,6.5-6.5h106.2c116.8,0,211.9,95.1,211.9,211.9
-	v567.2C942.8,905.1,848,1000,730.9,1000L730.9,1000z M624.7,10.1c-3,0-5.5,2.4-5.5,5.5v978c0,3,2.4,5.5,5.5,5.5h106.2
-	c116.3,0,210.9-94.6,210.9-210.9V220.9C941.8,104.6,847.2,10,730.9,10L624.7,10.1z"/>
-<path class="st2" d="M715,763.2c-23.1,0-41.9-18.7-41.9-41.9s18.7-41.9,41.9-41.9s41.9,18.7,41.9,41.9l0,0
-	C756.8,744.4,738.1,763.1,715,763.2z M715,680.4c-22.6,0-40.9,18.3-40.9,40.9c0,22.6,18.3,40.9,40.9,40.9
-	c22.6,0,40.9-18.3,40.9-40.9l0,0C755.8,698.7,737.6,680.4,715,680.4z"/>
-<path class="st1" d="M782.2,203.2h-5.5l-7.8-12.9l-7.8,12.9h-5.4l10.6-16.3l-9.8-15.6h5.2l7.3,12l7.4-12h5l-9.8,15.4L782.2,203.2z"
-	/>
-<path class="st1" d="M709.2,244.5l-11.6,20.6v11.4h-4.4V265l-11.6-20.5h5.3l6.4,11.7l2.3,4.7l2.2-4.3l6.4-12.1L709.2,244.5z"/>
-<path class="st1" d="M855.9,276.5h-4.7l-2.2-7h-13.3l-2.3,7h-4.5l10.6-32h6L855.9,276.5z M847.7,265.6l-5.4-17.1l-5.4,17.1H847.7z"
-	/>
-<path class="st1" d="M779.4,340.4c0,1.4-0.3,2.8-0.9,4.1c-0.6,1.2-1.5,2.2-2.5,3c-1.2,0.9-2.6,1.5-4,1.9c-1.7,0.4-3.4,0.7-5.2,0.6
-	h-8.4v-32h9.2c7.1,0,10.7,2.6,10.7,7.8c0,1.6-0.4,3.1-1.2,4.5c-1,1.4-2.4,2.3-4,2.8c0.9,0.2,1.7,0.4,2.5,0.8s1.5,0.9,2,1.5
-	c0.6,0.6,1.1,1.4,1.4,2.2C779.2,338.4,779.4,339.4,779.4,340.4z M773.7,326.3c0-0.6-0.1-1.3-0.3-1.8c-0.2-0.6-0.6-1.1-1-1.5
-	c-0.6-0.5-1.3-0.8-2-1c-1-0.3-2.1-0.4-3.2-0.4h-4.5v10h4.4c0.9,0,1.8-0.1,2.7-0.3c0.8-0.2,1.5-0.5,2.1-1c0.6-0.4,1-1,1.3-1.7
-	C773.6,327.9,773.7,327.1,773.7,326.3L773.7,326.3z M774.8,340.5c0-0.8-0.2-1.5-0.5-2.2c-0.4-0.7-0.9-1.2-1.5-1.7
-	c-0.7-0.5-1.5-0.8-2.4-1c-1-0.3-2.1-0.4-3.2-0.4h-4.5v11h4.6c2.5,0,4.4-0.5,5.6-1.4C774.2,343.8,774.9,342.2,774.8,340.5
-	L774.8,340.5z"/>
-<path class="st1" d="M715,701.3L695.4,721h5.6v16.8h28.2V721h5.3L715,701.3z M720.7,731.8h-11.1V721h11.1V731.8z"/>
-<path class="st1" d="M597.9,314.3h-4.2c-3.8,0-6.9-3.1-7-7v-67.6c0-3.8,3.1-6.9,7-7h4.2c0.6,0,1,0.4,1,1l0,0v79.5
-	C598.9,313.9,598.4,314.3,597.9,314.3L597.9,314.3z M593.7,234.8c-2.7,0-5,2.2-5,5v67.6c0,2.7,2.2,5,5,5h3.2v-77.5L593.7,234.8
-	L593.7,234.8z"/>
-<path class="st1" d="M597.9,717.1h-4.2c-3.8,0-6.9-3.1-7-7v-67.6c0-3.8,3.1-6.9,7-7h4.2c0.6,0,1,0.4,1,1l0,0V716
-	C598.9,716.6,598.4,717.1,597.9,717.1L597.9,717.1z M593.7,637.6c-2.7,0-5,2.2-5,5v67.6c0,2.7,2.2,5,5,5h3.2v-77.5L593.7,637.6
-	L593.7,637.6z"/>
-<path class="st1" d="M925.6,139.3c-0.1,0-0.1,0-0.2,0c-0.3-0.1-0.6-0.3-0.7-0.6C891.7,61,815.4,10.5,730.9,10.6h-54.2
-	c-0.6,0-1-0.4-1-1l0,0V7c0-3.8,3.1-6.9,7-7h51.2c85.2,0.1,162.4,50.1,197.3,127.8c1.2,2.6,0.6,5.7-1.5,7.8l-3.4,3.4
-	C926.1,139.2,925.8,139.3,925.6,139.3z M677.7,8.6h53.2c84.7-0.1,161.3,50.2,195,128l2.4-2.4l0,0c1.5-1.4,1.9-3.6,1.1-5.5
-	C894.8,51.7,818.3,2.1,733.9,2h-51.2c-2.7,0-5,2.2-5,5V8.6z"/>
-<path class="st1" d="M676.5,133.7h-11.7c-2.2,0-4-1.8-4-4V118c0-1.1-0.9-2-2-2h-11.7c-2.2,0-4-1.8-4-4v-11.7c0-2.2,1.8-4,4-4h11.7
-	c1.1,0,2-0.9,2-2V82.8c0-2.2,1.8-4,4-4h11.7c2.2,0,4,1.8,4,4v11.7c0,1.1,0.9,2,2,2h11.7c2.2,0,4,1.8,4,4v11.7c0,2.2-1.8,4-4,4h-11.7
-	c-1.1,0-2,0.9-2,2v11.7C680.5,131.9,678.7,133.7,676.5,133.7z M647.2,98.5c-1.1,0-2,0.9-2,2v11.7c0,1.1,0.9,2,2,2h11.7
-	c2.2,0,4,1.8,4,4v11.7c0,1.1,0.9,2,2,2h11.7c1.1,0,2-0.9,2-2v-11.7c0-2.2,1.8-4,4-4h11.7c1.1,0,2-0.9,2-2v-11.7c0-1.1-0.9-2-2-2
-	h-11.7c-2.2,0-4-1.8-4-4V82.8c0-1.1-0.9-2-2-2h-11.7c-1.1,0-2,0.9-2,2v11.7c0,2.2-1.8,4-4,4H647.2z"/>
-<path class="st1" d="M768.9,372.4c-21.2,0-38.5-17.2-38.5-38.5c0-21.2,17.2-38.5,38.5-38.5c21.2,0,38.5,17.2,38.5,38.5
-	C807.3,355.2,790.1,372.4,768.9,372.4z M768.9,297.5c-20.1,0-36.5,16.3-36.5,36.5c0,20.1,16.3,36.5,36.5,36.5
-	c20.1,0,36.5-16.3,36.5-36.5C805.3,313.8,789,297.5,768.9,297.5L768.9,297.5z"/>
-<path class="st1" d="M768.9,225.5c-21.2,0-38.5-17.2-38.5-38.5c0-21.2,17.2-38.5,38.5-38.5c21.2,0,38.5,17.2,38.5,38.5
-	C807.3,208.3,790.1,225.5,768.9,225.5z M768.9,150.6c-20.1,0-36.5,16.3-36.5,36.5c0,20.1,16.3,36.5,36.5,36.5
-	c20.1,0,36.5-16.3,36.5-36.5C805.3,166.9,789,150.6,768.9,150.6L768.9,150.6z"/>
-<path class="st1" d="M842.3,299c-21.2,0-38.5-17.2-38.5-38.5c0-21.2,17.2-38.5,38.5-38.5c21.2,0,38.5,17.2,38.5,38.5
-	C880.8,281.7,863.6,298.9,842.3,299z M842.3,224c-20.1,0-36.5,16.3-36.5,36.5c0,20.1,16.3,36.5,36.5,36.5
-	c20.1,0,36.5-16.3,36.5-36.5C878.8,240.4,862.5,224,842.3,224L842.3,224z"/>
-<path class="st1" d="M695.5,299c-21.2,0-38.5-17.2-38.5-38.5c0-21.2,17.2-38.5,38.5-38.5c21.2,0,38.5,17.2,38.5,38.5
-	C733.9,281.7,716.7,298.9,695.5,299z M695.5,224c-20.1,0-36.5,16.3-36.5,36.5c0,20.1,16.3,36.5,36.5,36.5
-	c20.1,0,36.5-16.3,36.5-36.5C731.9,240.4,715.6,224,695.5,224L695.5,224z"/>
-<path class="st1" d="M715,750.2c-16,0-28.9-13-28.9-28.9s13-28.9,28.9-28.9c16,0,28.9,13,28.9,28.9l0,0
-	C743.9,737.3,731,750.2,715,750.2z M715,694.3c-14.9,0-26.9,12.1-26.9,26.9s12.1,26.9,26.9,26.9c14.9,0,26.9-12.1,26.9-26.9
-	C741.9,706.4,729.9,694.4,715,694.3z"/>
-<path class="st1" d="M705.8,533.4h-12.3c-0.6,0-1-0.4-1-1l0,0c1.7-39.6,33.4-71.3,73-73c0.3,0,0.5,0.1,0.7,0.3
-	c0.2,0.2,0.3,0.4,0.3,0.7v12.3c0,3.5-2.6,6.4-6,6.9c-24.7,3.7-44.2,23.1-47.9,47.9C712.2,530.8,709.3,533.4,705.8,533.4z
-	 M694.6,531.4h11.2c2.5,0,4.6-1.8,4.9-4.3c3.9-25.6,24-45.7,49.6-49.6c2.5-0.3,4.3-2.4,4.3-4.9v-11.2
-	C727.2,463.5,696.7,494,694.6,531.4z"/>
-<path class="st1" d="M765.6,612.1C765.6,612.1,765.5,612.1,765.6,612.1c-39.6-1.7-71.3-33.4-73-73c0-0.6,0.4-1,1-1l0,0h12.3
-	c3.5,0,6.4,2.6,6.9,6c3.7,24.7,23.1,44.2,47.9,47.9c3.4,0.5,6,3.4,6,6.9v12.3C766.6,611.6,766.1,612.1,765.6,612.1L765.6,612.1
-	L765.6,612.1z M694.6,540c2.2,37.4,32.6,67.8,70,70v-11.2c0-2.5-1.8-4.6-4.3-4.9c-25.6-3.9-45.7-24-49.6-49.6
-	c-0.3-2.5-2.4-4.3-4.9-4.3H694.6z"/>
-<path class="st1" d="M772.2,612.1c-0.6,0-1-0.4-1-1l0,0v-12.3c0-3.5,2.6-6.4,6-6.9c24.7-3.7,44.2-23.1,47.9-47.9
-	c0.5-3.4,3.4-6,6.9-6h12.3c0.6,0,1,0.4,1,1l0,0C843.5,578.7,811.9,610.3,772.2,612.1C772.3,612.1,772.3,612.1,772.2,612.1z M832,540
-	c-2.5,0-4.6,1.8-4.9,4.3c-3.9,25.6-24,45.7-49.6,49.6c-2.5,0.3-4.3,2.4-4.3,4.9V610c37.4-2.2,67.8-32.6,70-70H832z"/>
-<path class="st1" d="M844.3,533.4H832c-3.5,0-6.4-2.6-6.9-6c-3.7-24.7-23.1-44.2-47.9-47.9c-3.4-0.5-6-3.4-6-6.9v-12.3
-	c0-0.3,0.1-0.5,0.3-0.7s0.5-0.3,0.7-0.3c39.6,1.7,71.3,33.4,73,73C845.3,532.9,844.9,533.3,844.3,533.4L844.3,533.4L844.3,533.4z
-	 M773.2,461.4v11.2c0,2.5,1.8,4.6,4.3,4.9c25.6,3.9,45.7,24,49.6,49.6c0.3,2.5,2.4,4.3,4.9,4.3h11.2
-	C841.1,494,810.6,463.5,773.2,461.4z"/>
-<path class="st1" d="M768.9,612.2c-1.2,0-2.3,0-3.4-0.1c-0.5,0-0.9-0.5-0.9-1v-12.3c0-2.5-1.8-4.6-4.3-4.9
-	c-25.6-3.9-45.7-24-49.6-49.6c-0.3-2.5-2.4-4.3-4.9-4.3h-12.3c-0.5,0-1-0.4-1-0.9c-0.1-1.1-0.1-2.2-0.1-3.4s0-2.3,0.1-3.4
-	c0-0.5,0.5-0.9,1-0.9h12.3c2.5,0,4.6-1.8,4.9-4.3c3.9-25.6,24-45.7,49.6-49.6c2.5-0.3,4.3-2.4,4.3-4.9v-12.3c0-0.5,0.4-1,0.9-1
-	c2.3-0.1,4.5-0.1,6.8,0c0.5,0,0.9,0.5,0.9,1v12.3c0,2.5,1.8,4.6,4.3,4.9c25.6,3.9,45.7,24,49.6,49.6c0.3,2.5,2.4,4.3,4.9,4.3h12.3
-	c0.5,0,1,0.4,1,0.9c0.1,1.1,0.1,2.2,0.1,3.4s0,2.3-0.1,3.4c0,0.5-0.5,0.9-1,0.9H832c-2.5,0-4.6,1.8-4.9,4.3
-	c-3.9,25.6-24,45.7-49.6,49.6c-2.5,0.3-4.3,2.4-4.3,4.9v12.3c0,0.5-0.4,1-0.9,1C771.2,612.1,770.1,612.2,768.9,612.2z M766.6,610.1
-	c1.5,0.1,3.1,0.1,4.7,0v-11.3c0-3.5,2.6-6.4,6-6.9c24.7-3.7,44.2-23.1,47.9-47.9c0.5-3.4,3.4-6,6.9-6h11.3c0-0.8,0-1.5,0-2.3
-	s0-1.6,0-2.3H832c-3.5,0-6.4-2.6-6.9-6c-3.7-24.7-23.1-44.2-47.9-47.9c-3.4-0.5-6-3.4-6-6.9v-11.3c-1.5-0.1-3.1-0.1-4.7,0v11.3
-	c0,3.5-2.6,6.4-6,6.9c-24.7,3.7-44.2,23.1-47.9,47.9c-0.5,3.4-3.4,6-6.9,6h-11.3c0,0.8,0,1.5,0,2.3s0,1.6,0,2.3h11.3
-	c3.5,0,6.4,2.6,6.9,6c3.7,24.7,23.1,44.2,47.9,47.9c3.4,0.5,6,3.4,6,6.9v11.3H766.6z"/>
-</svg>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<style
+   type="text/css"
+   id="style2-6">
+	.st0{opacity:0.1;}
+	.st1{fill:#02C5E5;}
+	.st2{fill:#FF5F55;}
+	.st3{fill:#FFFFFF;}
+</style><g
+   id="g315"><g
+     class="st0"
+     id="g64">
+	<path
+   class="st2"
+   d="m 597.9,233.9 v 79.5 h -4.2 c -3.3,0 -6,-2.7 -6,-6 v -67.6 c 0,-3.3 2.7,-6 6,-6 h 4.2 z"
+   id="path36" />
+	<path
+   class="st2"
+   d="m 597.9,636.6 v 79.5 h -4.2 c -3.3,0 -6,-2.7 -6,-6 v -67.6 c 0,-3.3 2.7,-6 6,-6 h 4.2 z"
+   id="path38" />
+	<path
+   class="st2"
+   d="m 929,134.9 -3.4,3.4 C 892.4,60.3 815.8,9.6 730.9,9.6 H 676.7 V 7 c 0,-3.3 2.7,-6 6,-6 0,0 0,0 0,0 h 51.2 c 84.8,0 161.7,49.8 196.4,127.2 1,2.3 0.5,4.9 -1.3,6.7 z"
+   id="path40" />
+	<path
+   class="st2"
+   d="M 679.5,94.5 V 82.8 c 0,-1.6 -1.3,-3 -3,-3 v 0 h -11.7 c -1.6,0 -3,1.3 -3,3 0,0 0,0 0,0 v 11.7 c 0,1.6 -1.3,3 -3,3 v 0 h -11.7 c -1.6,0 -3,1.3 -3,3 0,0 0,0 0,0 v 11.7 c 0,1.6 1.3,3 3,3 v 0 h 11.7 c 1.6,0 3,1.3 3,3 0,0 0,0 0,0 v 11.7 c 0,1.6 1.3,3 3,3 v 0 h 11.7 c 1.6,0 3,-1.3 3,-3 v 0 -11.7 c 0,-1.6 1.3,-3 3,-3 v 0 h 11.7 c 1.6,0 3,-1.3 3,-3 0,0 0,0 0,0 v -11.7 c 0,-1.6 -1.3,-3 -3,-3 v 0 h -11.7 c -1.7,0 -3,-1.4 -3,-3 0,0 0,0 0,0 z"
+   id="path42" />
+	<circle
+   class="st2"
+   cx="768.90002"
+   cy="333.89999"
+   r="37.5"
+   id="circle44" />
+	<circle
+   class="st2"
+   cx="768.90002"
+   cy="187.10001"
+   r="37.5"
+   id="circle46" />
+	<circle
+   class="st2"
+   cx="842.29999"
+   cy="260.5"
+   r="37.5"
+   id="circle48" />
+	<circle
+   class="st2"
+   cx="695.5"
+   cy="260.5"
+   r="37.5"
+   id="circle50" />
+	<circle
+   class="st2"
+   cx="715"
+   cy="721.29999"
+   r="27.9"
+   id="circle52" />
+	<path
+   class="st2"
+   d="m 765.6,460.3 v 12.3 c 0,3 -2.2,5.5 -5.2,5.9 -25.2,3.7 -45,23.5 -48.7,48.7 -0.4,2.9 -2.9,5.1 -5.9,5.2 h -12.3 c 1.7,-39.1 33,-70.4 72.1,-72.1 z"
+   id="path54" />
+	<path
+   class="st2"
+   d="m 765.6,598.8 v 12.3 c -39.1,-1.7 -70.3,-33 -72.1,-72 h 12.3 c 3,0 5.5,2.2 5.9,5.2 3.7,25.2 23.5,45 48.7,48.7 3,0.3 5.2,2.8 5.2,5.8 z"
+   id="path56" />
+	<path
+   class="st2"
+   d="m 844.3,539 c -1.7,39.1 -33,70.3 -72.1,72 v -12.3 c 0,-3 2.2,-5.5 5.2,-5.9 25.2,-3.7 45,-23.5 48.7,-48.7 0.4,-2.9 2.9,-5.1 5.9,-5.2 z"
+   id="path58" />
+	<path
+   class="st2"
+   d="M 844.3,532.4 H 832 c -3,0 -5.5,-2.2 -5.9,-5.2 -3.7,-25.2 -23.5,-45 -48.7,-48.7 -2.9,-0.4 -5.1,-2.9 -5.2,-5.9 v -12.3 c 39.1,1.7 70.4,33 72.1,72.1 z"
+   id="path60" />
+	<path
+   class="st2"
+   d="m 844.4,535.7 c 0,1.1 0,2.2 -0.1,3.3 H 832 c -3,0 -5.5,2.2 -5.9,5.2 -3.7,25.2 -23.5,45 -48.7,48.7 -2.9,0.4 -5.1,2.9 -5.2,5.9 v 12.3 c -1.1,0.1 -2.2,0.1 -3.3,0.1 -1.1,0 -2.2,0 -3.3,-0.1 v -12.3 c 0,-3 -2.2,-5.5 -5.2,-5.9 -25.2,-3.7 -45,-23.5 -48.7,-48.7 -0.4,-2.9 -2.9,-5.1 -5.9,-5.2 h -12.3 c -0.1,-1.1 -0.1,-2.2 -0.1,-3.3 0,-1.1 0,-2.2 0.1,-3.3 h 12.3 c 3,0 5.5,-2.2 5.9,-5.2 3.7,-25.2 23.5,-45 48.7,-48.7 2.9,-0.4 5.1,-2.9 5.2,-5.9 v -12.3 c 1.1,-0.1 2.2,-0.1 3.3,-0.1 1.1,0 2.2,0 3.3,0.1 v 12.3 c 0,3 2.2,5.5 5.2,5.9 25.2,3.7 45,23.5 48.7,48.7 0.4,2.9 2.9,5.1 5.9,5.2 h 12.3 c 0,1.1 0.1,2.2 0.1,3.3 z"
+   id="path62" />
+</g><path
+     class="st3"
+     d="m 601.6,906.6 h -7.9 c -3.6,0 -6.4,-2.9 -6.5,-6.5 V 742.9 c 0,-4.9 1.2,-9.6 3.4,-13.9 l 6.7,-13 v -79.2 l -6.7,-13 c -2.2,-4.3 -3.4,-9.1 -3.4,-14 V 340.1 c 0,-4.9 1.2,-9.6 3.4,-13.9 l 6.7,-13 V 234 l -6.7,-13 c -2.2,-4.3 -3.4,-9.1 -3.4,-14 V 71.2 c 0,-3.6 2.9,-6.4 6.5,-6.5 h 7.9 c 3.6,0 6.4,2.9 6.5,6.5 v 828.9 c -0.1,3.6 -3,6.5 -6.5,6.5 z M 593.7,65.7 c -3,0 -5.5,2.4 -5.5,5.5 V 207 c 0,4.7 1.1,9.3 3.3,13.5 l 6.8,13.1 c 0,0.1 0.1,0.1 0.1,0.2 v 79.5 c 0,0.1 0,0.2 -0.1,0.2 l -6.8,13.1 c -2.2,4.2 -3.3,8.8 -3.3,13.5 v 269.7 c 0,4.7 1.1,9.3 3.3,13.5 l 6.8,13.1 c 0,0.1 0.1,0.1 0.1,0.2 v 79.5 c 0,0.1 0,0.2 -0.1,0.2 l -6.8,13.1 c -2.2,4.2 -3.3,8.8 -3.3,13.5 v 157.2 c 0,3 2.4,5.5 5.5,5.5 h 7.9 c 3,0 5.5,-2.4 5.5,-5.5 V 71.2 c 0,-3 -2.4,-5.5 -5.5,-5.5 z"
+     id="path72"
+     style="fill:#000000" /><path
+     class="st3"
+     d="m 618.8,858.9 h -11.3 c -0.3,0 -0.5,-0.2 -0.5,-0.5 0,0 0,0 0,0 V 72 c 0,-0.3 0.2,-0.5 0.5,-0.5 h 11.3 c 0.3,0 0.5,0.2 0.5,0.5 v 786.4 c 0,0.3 -0.2,0.5 -0.5,0.5 0,0 0,0 0,0 z m -10.8,-1 h 10.3 V 72.5 H 608 Z"
+     id="path74"
+     style="fill:#000000" /><path
+     class="st3"
+     d="M 730.9,1000 H 624.7 c -3.6,0 -6.5,-2.9 -6.5,-6.5 v -978 c 0,-3.6 2.9,-6.5 6.5,-6.5 h 106.2 c 116.8,0 211.9,95.1 211.9,211.9 v 567.2 c 0,117 -94.8,211.9 -211.9,211.9 0,0 0,0 0,0 z M 624.7,10.1 c -3,0 -5.5,2.4 -5.5,5.5 v 978 c 0,3 2.4,5.5 5.5,5.5 h 106.2 c 116.3,0 210.9,-94.6 210.9,-210.9 V 220.9 C 941.8,104.6 847.2,10 730.9,10 Z"
+     id="path76"
+     style="fill:#000000" /><path
+     class="st2"
+     d="m 597.9,314.3 h -4.2 c -3.8,0 -6.9,-3.1 -7,-7 v -67.6 c 0,-3.8 3.1,-6.9 7,-7 h 4.2 c 0.6,0 1,0.4 1,1 0,0 0,0 0,0 v 79.5 c 0,0.7 -0.5,1.1 -1,1.1 0,0 0,0 0,0 z m -4.2,-79.5 c -2.7,0 -5,2.2 -5,5 v 67.6 c 0,2.7 2.2,5 5,5 h 3.2 v -77.5 h -3.2 z"
+     id="path128"
+     style="fill:#000000" /><path
+     class="st2"
+     d="m 597.9,717.1 h -4.2 c -3.8,0 -6.9,-3.1 -7,-7 v -67.6 c 0,-3.8 3.1,-6.9 7,-7 h 4.2 c 0.6,0 1,0.4 1,1 0,0 0,0 0,0 V 716 c 0,0.6 -0.5,1.1 -1,1.1 0,0 0,0 0,0 z m -4.2,-79.5 c -2.7,0 -5,2.2 -5,5 v 67.6 c 0,2.7 2.2,5 5,5 h 3.2 v -77.5 h -3.2 z"
+     id="path130"
+     style="fill:#000000" /><path
+     style="fill:#ff5f55;fill-opacity:0.956863;stroke:#4d4d4d;stroke-width:1"
+     d="m 748.93436,998.67954 c 26.59545,-2.35471 50.45796,-9.1985 75.88056,-21.7626 65.98743,-32.61168 108.87577,-94.17749 116.99375,-167.94346 1.80381,-16.39057 1.80686,-591.16592 0.003,-608.68789 -2.68506,-26.08512 -9.29287,-49.0507 -20.75194,-72.12385 C 889.32253,64.257568 828.18558,20.735655 757.19631,11.511152 738.81239,9.1223039 622.08856,8.8130147 619.73408,11.146911 c -1.13928,1.129303 -1.47099,112.509439 -1.47099,493.898369 0,485.61761 0.0328,492.45765 2.37105,493.69808 2.83295,1.50294 111.21392,1.44894 128.30022,-0.0637 z"
+     id="path1240" /><path
+     class="st3"
+     d="m 715,763.2 c -23.1,0 -41.9,-18.7 -41.9,-41.9 0,-23.2 18.7,-41.9 41.9,-41.9 23.2,0 41.9,18.7 41.9,41.9 v 0 c -0.1,23.1 -18.8,41.8 -41.9,41.9 z m 0,-82.8 c -22.6,0 -40.9,18.3 -40.9,40.9 0,22.6 18.3,40.9 40.9,40.9 22.6,0 40.9,-18.3 40.9,-40.9 v 0 C 755.8,698.7 737.6,680.4 715,680.4 Z"
+     id="path78"
+     style="fill:#000000" /><path
+     class="st2"
+     d="m 782.2,203.2 h -5.5 l -7.8,-12.9 -7.8,12.9 h -5.4 l 10.6,-16.3 -9.8,-15.6 h 5.2 l 7.3,12 7.4,-12 h 5 l -9.8,15.4 z"
+     id="path88"
+     style="fill:#b3b3b3;fill-opacity:1" /><path
+     class="st2"
+     d="m 709.2,244.5 -11.6,20.6 v 11.4 h -4.4 V 265 l -11.6,-20.5 h 5.3 l 6.4,11.7 2.3,4.7 2.2,-4.3 6.4,-12.1 z"
+     id="path90"
+     style="fill:#b3b3b3" /><path
+     class="st2"
+     d="m 855.9,276.5 h -4.7 l -2.2,-7 h -13.3 l -2.3,7 h -4.5 l 10.6,-32 h 6 z m -8.2,-10.9 -5.4,-17.1 -5.4,17.1 z"
+     id="path92"
+     style="fill:#b3b3b3" /><path
+     class="st2"
+     d="m 779.4,340.4 c 0,1.4 -0.3,2.8 -0.9,4.1 -0.6,1.2 -1.5,2.2 -2.5,3 -1.2,0.9 -2.6,1.5 -4,1.9 -1.7,0.4 -3.4,0.7 -5.2,0.6 h -8.4 v -32 h 9.2 c 7.1,0 10.7,2.6 10.7,7.8 0,1.6 -0.4,3.1 -1.2,4.5 -1,1.4 -2.4,2.3 -4,2.8 0.9,0.2 1.7,0.4 2.5,0.8 0.8,0.4 1.5,0.9 2,1.5 0.6,0.6 1.1,1.4 1.4,2.2 0.2,0.8 0.4,1.8 0.4,2.8 z m -5.7,-14.1 c 0,-0.6 -0.1,-1.3 -0.3,-1.8 -0.2,-0.6 -0.6,-1.1 -1,-1.5 -0.6,-0.5 -1.3,-0.8 -2,-1 -1,-0.3 -2.1,-0.4 -3.2,-0.4 h -4.5 v 10 h 4.4 c 0.9,0 1.8,-0.1 2.7,-0.3 0.8,-0.2 1.5,-0.5 2.1,-1 0.6,-0.4 1,-1 1.3,-1.7 0.4,-0.7 0.5,-1.5 0.5,-2.3 z m 1.1,14.2 c 0,-0.8 -0.2,-1.5 -0.5,-2.2 -0.4,-0.7 -0.9,-1.2 -1.5,-1.7 -0.7,-0.5 -1.5,-0.8 -2.4,-1 -1,-0.3 -2.1,-0.4 -3.2,-0.4 h -4.5 v 11 h 4.6 c 2.5,0 4.4,-0.5 5.6,-1.4 1.3,-1 2,-2.6 1.9,-4.3 z"
+     id="path94"
+     style="fill:#b3b3b3" /><path
+     class="st2"
+     d="M 715,701.3 695.4,721 h 5.6 v 16.8 h 28.2 V 721 h 5.3 z m 5.7,30.5 H 709.6 V 721 h 11.1 z"
+     id="path96"
+     style="fill:#333333" /><path
+     class="st2"
+     d="m 925.6,139.3 c -0.1,0 -0.1,0 -0.2,0 -0.3,-0.1 -0.6,-0.3 -0.7,-0.6 C 891.7,61 815.4,10.5 730.9,10.6 h -54.2 c -0.6,0 -1,-0.4 -1,-1 0,0 0,0 0,0 V 7 c 0,-3.8 3.1,-6.9 7,-7 h 51.2 c 85.2,0.1 162.4,50.1 197.3,127.8 1.2,2.6 0.6,5.7 -1.5,7.8 l -3.4,3.4 c -0.2,0.2 -0.5,0.3 -0.7,0.3 z M 677.7,8.6 h 53.2 c 84.7,-0.1 161.3,50.2 195,128 l 2.4,-2.4 v 0 c 1.5,-1.4 1.9,-3.6 1.1,-5.5 C 894.8,51.7 818.3,2.1 733.9,2 h -51.2 c -2.7,0 -5,2.2 -5,5 z"
+     id="path132"
+     style="fill:#000000" /><path
+     class="st2"
+     d="m 676.5,133.7 h -11.7 c -2.2,0 -4,-1.8 -4,-4 V 118 c 0,-1.1 -0.9,-2 -2,-2 h -11.7 c -2.2,0 -4,-1.8 -4,-4 v -11.7 c 0,-2.2 1.8,-4 4,-4 h 11.7 c 1.1,0 2,-0.9 2,-2 V 82.8 c 0,-2.2 1.8,-4 4,-4 h 11.7 c 2.2,0 4,1.8 4,4 v 11.7 c 0,1.1 0.9,2 2,2 h 11.7 c 2.2,0 4,1.8 4,4 v 11.7 c 0,2.2 -1.8,4 -4,4 h -11.7 c -1.1,0 -2,0.9 -2,2 v 11.7 c 0,2 -1.8,3.8 -4,3.8 z M 647.2,98.5 c -1.1,0 -2,0.9 -2,2 v 11.7 c 0,1.1 0.9,2 2,2 h 11.7 c 2.2,0 4,1.8 4,4 v 11.7 c 0,1.1 0.9,2 2,2 h 11.7 c 1.1,0 2,-0.9 2,-2 v -11.7 c 0,-2.2 1.8,-4 4,-4 h 11.7 c 1.1,0 2,-0.9 2,-2 v -11.7 c 0,-1.1 -0.9,-2 -2,-2 h -11.7 c -2.2,0 -4,-1.8 -4,-4 V 82.8 c 0,-1.1 -0.9,-2 -2,-2 h -11.7 c -1.1,0 -2,0.9 -2,2 v 11.7 c 0,2.2 -1.8,4 -4,4 z"
+     id="path134"
+     style="fill:#000000" /><path
+     class="st2"
+     d="m 768.9,372.4 c -21.2,0 -38.5,-17.2 -38.5,-38.5 0,-21.2 17.2,-38.5 38.5,-38.5 21.2,0 38.5,17.2 38.5,38.5 -0.1,21.3 -17.3,38.5 -38.5,38.5 z m 0,-74.9 c -20.1,0 -36.5,16.3 -36.5,36.5 0,20.1 16.3,36.5 36.5,36.5 20.1,0 36.5,-16.3 36.5,-36.5 -0.1,-20.2 -16.4,-36.5 -36.5,-36.5 z"
+     id="path136"
+     style="fill:#000000" /><path
+     class="st2"
+     d="m 768.9,225.5 c -21.2,0 -38.5,-17.2 -38.5,-38.5 0,-21.2 17.2,-38.5 38.5,-38.5 21.2,0 38.5,17.2 38.5,38.5 -0.1,21.3 -17.3,38.5 -38.5,38.5 z m 0,-74.9 c -20.1,0 -36.5,16.3 -36.5,36.5 0,20.1 16.3,36.5 36.5,36.5 20.1,0 36.5,-16.3 36.5,-36.5 -0.1,-20.2 -16.4,-36.5 -36.5,-36.5 z"
+     id="path138"
+     style="fill:#000000" /><path
+     class="st2"
+     d="m 842.3,299 c -21.2,0 -38.5,-17.2 -38.5,-38.5 0,-21.2 17.2,-38.5 38.5,-38.5 21.2,0 38.5,17.2 38.5,38.5 0,21.2 -17.2,38.4 -38.5,38.5 z m 0,-75 c -20.1,0 -36.5,16.3 -36.5,36.5 0,20.1 16.3,36.5 36.5,36.5 20.1,0 36.5,-16.3 36.5,-36.5 0,-20.1 -16.3,-36.5 -36.5,-36.5 z"
+     id="path140"
+     style="fill:#000000" /><path
+     class="st2"
+     d="m 695.5,299 c -21.2,0 -38.5,-17.2 -38.5,-38.5 0,-21.2 17.2,-38.5 38.5,-38.5 21.2,0 38.5,17.2 38.5,38.5 -0.1,21.2 -17.3,38.4 -38.5,38.5 z m 0,-75 c -20.1,0 -36.5,16.3 -36.5,36.5 0,20.1 16.3,36.5 36.5,36.5 20.1,0 36.5,-16.3 36.5,-36.5 C 731.9,240.4 715.6,224 695.5,224 Z"
+     id="path142"
+     style="fill:#000000" /><path
+     class="st2"
+     d="m 715,750.2 c -16,0 -28.9,-13 -28.9,-28.9 0,-15.9 13,-28.9 28.9,-28.9 16,0 28.9,13 28.9,28.9 0,0 0,0 0,0 0,16 -12.9,28.9 -28.9,28.9 z m 0,-55.9 c -14.9,0 -26.9,12.1 -26.9,26.9 0,14.8 12.1,26.9 26.9,26.9 14.9,0 26.9,-12.1 26.9,-26.9 0,-14.8 -12,-26.8 -26.9,-26.9 z"
+     id="path144"
+     style="fill:#000000" /><path
+     class="st2"
+     d="m 705.8,533.4 h -12.3 c -0.6,0 -1,-0.4 -1,-1 0,0 0,0 0,0 1.7,-39.6 33.4,-71.3 73,-73 0.3,0 0.5,0.1 0.7,0.3 0.2,0.2 0.3,0.4 0.3,0.7 v 12.3 c 0,3.5 -2.6,6.4 -6,6.9 -24.7,3.7 -44.2,23.1 -47.9,47.9 -0.4,3.3 -3.3,5.9 -6.8,5.9 z m -11.2,-2 h 11.2 c 2.5,0 4.6,-1.8 4.9,-4.3 3.9,-25.6 24,-45.7 49.6,-49.6 2.5,-0.3 4.3,-2.4 4.3,-4.9 v -11.2 c -37.4,2.1 -67.9,32.6 -70,70 z"
+     id="path146"
+     style="fill:#000000" /><path
+     class="st2"
+     d="m 765.6,612.1 c 0,0 -0.1,0 0,0 -39.6,-1.7 -71.3,-33.4 -73,-73 0,-0.6 0.4,-1 1,-1 0,0 0,0 0,0 h 12.3 c 3.5,0 6.4,2.6 6.9,6 3.7,24.7 23.1,44.2 47.9,47.9 3.4,0.5 6,3.4 6,6.9 v 12.3 c -0.1,0.4 -0.6,0.9 -1.1,0.9 0,0 0,0 0,0 z m -71,-72.1 c 2.2,37.4 32.6,67.8 70,70 v -11.2 c 0,-2.5 -1.8,-4.6 -4.3,-4.9 -25.6,-3.9 -45.7,-24 -49.6,-49.6 -0.3,-2.5 -2.4,-4.3 -4.9,-4.3 z"
+     id="path148"
+     style="fill:#000000" /><path
+     class="st2"
+     d="m 772.2,612.1 c -0.6,0 -1,-0.4 -1,-1 0,0 0,0 0,0 v -12.3 c 0,-3.5 2.6,-6.4 6,-6.9 24.7,-3.7 44.2,-23.1 47.9,-47.9 0.5,-3.4 3.4,-6 6.9,-6 h 12.3 c 0.6,0 1,0.4 1,1 0,0 0,0 0,0 -1.8,39.7 -33.4,71.3 -73.1,73.1 0.1,0 0.1,0 0,0 z M 832,540 c -2.5,0 -4.6,1.8 -4.9,4.3 -3.9,25.6 -24,45.7 -49.6,49.6 -2.5,0.3 -4.3,2.4 -4.3,4.9 V 610 c 37.4,-2.2 67.8,-32.6 70,-70 z"
+     id="path150"
+     style="fill:#000000" /><path
+     class="st2"
+     d="M 844.3,533.4 H 832 c -3.5,0 -6.4,-2.6 -6.9,-6 -3.7,-24.7 -23.1,-44.2 -47.9,-47.9 -3.4,-0.5 -6,-3.4 -6,-6.9 v -12.3 c 0,-0.3 0.1,-0.5 0.3,-0.7 0.2,-0.2 0.5,-0.3 0.7,-0.3 39.6,1.7 71.3,33.4 73,73 0.1,0.6 -0.3,1 -0.9,1.1 0,0 0,0 0,0 z m -71.1,-72 v 11.2 c 0,2.5 1.8,4.6 4.3,4.9 25.6,3.9 45.7,24 49.6,49.6 0.3,2.5 2.4,4.3 4.9,4.3 h 11.2 c -2.1,-37.4 -32.6,-67.9 -70,-70 z"
+     id="path152"
+     style="fill:#000000" /><path
+     class="st2"
+     d="m 768.9,612.2 c -1.2,0 -2.3,0 -3.4,-0.1 -0.5,0 -0.9,-0.5 -0.9,-1 v -12.3 c 0,-2.5 -1.8,-4.6 -4.3,-4.9 -25.6,-3.9 -45.7,-24 -49.6,-49.6 -0.3,-2.5 -2.4,-4.3 -4.9,-4.3 h -12.3 c -0.5,0 -1,-0.4 -1,-0.9 -0.1,-1.1 -0.1,-2.2 -0.1,-3.4 0,-1.2 0,-2.3 0.1,-3.4 0,-0.5 0.5,-0.9 1,-0.9 h 12.3 c 2.5,0 4.6,-1.8 4.9,-4.3 3.9,-25.6 24,-45.7 49.6,-49.6 2.5,-0.3 4.3,-2.4 4.3,-4.9 v -12.3 c 0,-0.5 0.4,-1 0.9,-1 2.3,-0.1 4.5,-0.1 6.8,0 0.5,0 0.9,0.5 0.9,1 v 12.3 c 0,2.5 1.8,4.6 4.3,4.9 25.6,3.9 45.7,24 49.6,49.6 0.3,2.5 2.4,4.3 4.9,4.3 h 12.3 c 0.5,0 1,0.4 1,0.9 0.1,1.1 0.1,2.2 0.1,3.4 0,1.2 0,2.3 -0.1,3.4 0,0.5 -0.5,0.9 -1,0.9 H 832 c -2.5,0 -4.6,1.8 -4.9,4.3 -3.9,25.6 -24,45.7 -49.6,49.6 -2.5,0.3 -4.3,2.4 -4.3,4.9 v 12.3 c 0,0.5 -0.4,1 -0.9,1 -1.1,0 -2.2,0.1 -3.4,0.1 z m -2.3,-2.1 c 1.5,0.1 3.1,0.1 4.7,0 v -11.3 c 0,-3.5 2.6,-6.4 6,-6.9 24.7,-3.7 44.2,-23.1 47.9,-47.9 0.5,-3.4 3.4,-6 6.9,-6 h 11.3 c 0,-0.8 0,-1.5 0,-2.3 0,-0.8 0,-1.6 0,-2.3 H 832 c -3.5,0 -6.4,-2.6 -6.9,-6 -3.7,-24.7 -23.1,-44.2 -47.9,-47.9 -3.4,-0.5 -6,-3.4 -6,-6.9 v -11.3 c -1.5,-0.1 -3.1,-0.1 -4.7,0 v 11.3 c 0,3.5 -2.6,6.4 -6,6.9 -24.7,3.7 -44.2,23.1 -47.9,47.9 -0.5,3.4 -3.4,6 -6.9,6 h -11.3 c 0,0.8 0,1.5 0,2.3 0,0.8 0,1.6 0,2.3 h 11.3 c 3.5,0 6.4,2.6 6.9,6 3.7,24.7 23.1,44.2 47.9,47.9 3.4,0.5 6,3.4 6,6.9 v 11.3 z"
+     id="path154"
+     style="fill:#000000" /><path
+     style="opacity:1;fill:#1a1a1a;fill-opacity:1;stroke:#4d4d4d;stroke-width:1"
+     d="m 686.27756,295.45757 c -6.3268,-1.65761 -11.02024,-4.44224 -16.19729,-9.60987 -7.7249,-7.71084 -11.00252,-16.02709 -10.55426,-26.7792 0.56274,-13.49806 7.94054,-24.90282 19.94518,-30.83167 10.51307,-5.1922 21.47279,-5.27638 31.58153,-0.24258 7.93543,3.95157 13.41304,9.50319 17.2109,17.44344 5.18792,10.84649 4.24806,24.40322 -2.39714,34.5766 -4.99743,7.65076 -13.48676,13.69608 -22.04004,15.69491 -4.81862,1.12607 -12.72306,1.01273 -17.54888,-0.25163 z m 11.6608,-24.5355 v -5.81067 l 5.62044,-9.96942 c 3.09124,-5.48319 5.62044,-10.21511 5.62044,-10.51538 0,-0.30027 -1.15454,-0.54595 -2.56564,-0.54595 h -2.56564 l -4.20029,8.09641 c -2.67942,5.1648 -4.33588,7.8298 -4.57474,7.3601 -0.20594,-0.40496 -2.13104,-4.04835 -4.27799,-8.0964 l -3.90356,-7.36011 h -2.87335 c -1.58035,0 -2.87336,0.12781 -2.87336,0.28402 0,0.1562 2.64964,4.96636 5.88808,10.68923 l 5.88809,10.40522 v 5.63681 5.63682 h 2.40876 2.40876 z"
+     id="path1462" /><path
+     style="opacity:1;fill:#1a1a1a;fill-opacity:1;stroke:#4d4d4d;stroke-width:1"
+     d="m 762.70726,222.86949 c -4.07666,-0.78537 -10.17009,-3.29429 -13.6441,-5.61785 -6.91015,-4.6218 -11.71459,-10.88088 -14.5402,-18.94258 -1.34575,-3.83954 -1.49911,-4.98899 -1.49911,-11.23574 0,-6.24676 0.15336,-7.39621 1.49911,-11.23575 3.87774,-11.0635 11.80142,-19.0577 22.76847,-22.97107 4.25097,-1.51687 5.15889,-1.64602 11.57155,-1.64602 6.41266,0 7.32058,0.12915 11.57155,1.64602 14.51853,5.18065 23.77179,17.63258 24.42528,32.86862 0.45428,10.5913 -2.84072,19.07821 -10.28709,26.49636 -7.55957,7.53093 -14.1652,10.43737 -24.37154,10.72334 -3.38565,0.0949 -6.75791,0.0565 -7.49392,-0.0853 z m 2.38607,-25.68467 c 4.25443,-7.14961 3.37755,-7.25493 8.20926,0.98595 l 3.05431,5.20938 3.12152,0.01 3.12152,0.01 -1.22963,-2.0073 c -0.6763,-1.10401 -3.07664,-4.86619 -5.3341,-8.36039 l -4.10446,-6.35309 4.75516,-7.43514 c 2.61533,-4.08932 4.75516,-7.56602 4.75516,-7.72599 0,-0.15996 -1.24936,-0.21804 -2.77636,-0.12905 l -2.77635,0.16179 -3.10726,5.05393 c -1.70899,2.77966 -3.29562,5.24229 -3.52585,5.47251 -0.23022,0.23022 -1.93136,-2.10426 -3.78031,-5.18775 l -3.36174,-5.60633 h -2.95881 -2.95881 l 1.22685,2.0073 c 0.67476,1.10402 2.8714,4.62127 4.88142,7.81612 l 3.65457,5.80881 -4.85255,7.43415 c -2.66891,4.08878 -4.99211,7.79781 -5.16268,8.24229 -0.25287,0.65897 0.2216,0.80814 2.57051,0.80814 h 2.88063 z"
+     id="path1464" /><path
+     style="opacity:1;fill:#1a1a1a;fill-opacity:1;stroke:#4d4d4d;stroke-width:1"
+     d="m 833.85476,295.72323 c -6.83119,-1.65863 -13.77734,-5.88165 -18.67395,-11.35311 -3.40208,-3.80148 -7.27107,-11.46438 -8.31543,-16.4695 -2.76322,-13.24277 2.63571,-27.85526 13.26894,-35.91309 19.99373,-15.15118 48.09433,-6.6877 56.44101,16.99918 1.86188,5.28381 2.27747,13.55775 0.97503,19.41195 -1.50813,6.77877 -4.55198,12.15816 -9.87968,17.46031 -5.26572,5.24048 -9.89475,7.95133 -16.43315,9.62357 -4.85615,1.24199 -12.80551,1.35206 -17.38277,0.24069 z m 0.90791,-22.33599 1.06927,-3.3455 6.50377,-0.1501 6.50377,-0.1501 0.98735,3.36178 0.98735,3.36179 2.51591,0.16314 c 1.8243,0.1183 2.51592,-0.0335 2.51592,-0.55237 0,-0.39353 -2.29576,-7.75345 -5.10169,-16.35537 l -5.10169,-15.63986 h -3.1506 -3.1506 l -5.20854,15.65695 c -2.86469,8.61132 -5.31927,15.95804 -5.45462,16.32605 -0.17576,0.47789 0.50564,0.6691 2.38452,0.6691 h 2.6306 z"
+     id="path1466" /><path
+     style="opacity:1;fill:#1a1a1a;fill-opacity:1;stroke:#4d4d4d;stroke-width:1"
+     d="m 763.70798,369.86416 c -8.12397,-1.27622 -14.00129,-4.35733 -20.33165,-10.65861 -3.76197,-3.74468 -5.02094,-5.43974 -6.83916,-9.20812 -7.60051,-15.75262 -3.54817,-33.43875 10.18745,-44.46231 6.3567,-5.10159 13.61954,-7.5924 22.13836,-7.5924 29.9337,0 46.67981,33.83863 28.70945,58.01278 -7.44586,10.01634 -21.60997,15.83377 -33.86445,13.90866 z m 11.20335,-21.38348 c 3.07353,-1.75995 4.52918,-4.20847 4.57675,-7.69846 0.0443,-3.24643 -1.27165,-5.85301 -3.49954,-6.93201 l -1.49389,-0.72351 1.60877,-1.54129 c 1.87307,-1.79453 2.80455,-4.70189 2.3305,-7.27407 -0.92747,-5.03237 -3.68485,-6.33408 -13.45172,-6.35026 l -7.09246,-0.0118 v 16.10974 16.10973 l 7.3601,-0.18515 c 6.6513,-0.16732 7.58173,-0.31206 9.66149,-1.50296 z"
+     id="path1468" /><path
+     style="opacity:1;fill:#1a1a1a;fill-opacity:1;stroke:#4d4d4d;stroke-width:1"
+     d="m 762.70726,326.44188 v -4.88945 l 3.72999,0.26688 c 4.16057,0.29769 6.24901,1.33706 6.7575,3.36306 0.94714,3.77369 -1.80659,6.14376 -7.14199,6.14695 l -3.3455,0.002 z"
+     id="path1470" /><path
+     style="opacity:1;fill:#1a1a1a;fill-opacity:1;stroke:#4d4d4d;stroke-width:0.999998"
+     d="m 837.54718,264.82028 c 0,-0.76372 4.25204,-14.10124 4.62716,-14.51418 0.17889,-0.19692 1.32644,2.82483 2.55012,6.715 1.22368,3.89017 2.33144,7.35074 2.46168,7.69016 0.18748,0.48856 -0.7918,0.61711 -4.70107,0.61711 -3.25732,0 -4.93789,-0.17292 -4.93789,-0.50809 z"
+     id="path1496" /><path
+     style="opacity:1;fill:#1a1a1a;fill-opacity:1;stroke:#4d4d4d;stroke-width:0.999998"
+     d="m 763.06218,340.74443 v -5.12084 h 3.61513 c 4.59667,0 6.58099,0.93645 7.49973,3.5393 0.55274,1.56594 0.54465,2.04231 -0.0591,3.47983 -0.97646,2.32493 -3.07062,3.22256 -7.51823,3.22256 h -3.53752 z"
+     id="path1498" /><path
+     style="opacity:1;fill:#1a1a1a;fill-opacity:1;stroke:#4d4d4d;stroke-width:1"
+     d="m 766.92321,602.64753 c -0.29048,-8.92659 -0.85756,-9.59054 -10.1321,-11.86299 -21.45382,-5.25664 -37.29198,-20.85776 -42.70074,-42.06165 -0.55002,-2.15622 -1.00003,-4.47981 -1.00003,-5.16353 0,-0.68371 -1.0064,-2.24952 -2.23643,-3.47956 l -2.23643,-2.23643 h -6.9724 -6.97241 v -1.97332 -1.97332 h 5.94109 c 6.60342,0 9.93688,-1.00153 11.20212,-3.36564 0.44261,-0.82703 1.34271,-3.96544 2.00022,-6.97425 3.49259,-15.98235 14.91214,-30.68661 29.48362,-37.96428 4.71573,-2.35525 11.36654,-4.65443 15.50589,-5.36038 6.61875,-1.12879 8.22218,-3.61509 8.22218,-12.74947 v -5.94109 h 1.97332 1.97332 v 6.89625 c 0,6.61611 0.0735,6.97475 1.80888,8.82901 1.46262,1.5628 3.13096,2.25493 8.7155,3.61572 20.40883,4.97306 36.06052,19.9102 41.49254,39.59826 0.78813,2.85653 1.76467,6.36883 2.17007,7.80511 1.22789,4.35011 3.85392,5.61076 11.68766,5.61076 h 6.48046 v 1.97332 1.97332 h -6.6104 c -6.95598,0 -9.89025,0.84134 -10.81193,3.1001 -0.2638,0.64649 -1.18554,3.97814 -2.0483,7.40367 -5.38972,21.39923 -21.36363,37.35004 -42.22246,42.16138 -9.94989,2.29507 -10.66202,3.14671 -10.66202,12.75068 v 6.28151 h -1.91345 -1.91345 z"
+     id="path1500" /><path
+     style="opacity:1;fill:#1a1a1a;fill-opacity:1;stroke:#4d4d4d;stroke-width:1"
+     d=""
+     id="path1502" /><path
+     style="opacity:1;fill:#1a1a1a;fill-opacity:1;stroke:#4d4d4d;stroke-width:1"
+     d="m 695.45795,526.49678 c 1.75282,-15.26781 9.42349,-30.89435 20.92126,-42.62035 11.95352,-12.1908 27.0212,-19.51188 45.22194,-21.97243 l 2.79554,-0.37793 v 6.18375 c 0,7.93282 -0.51936,8.65269 -7.23551,10.02904 -22.30129,4.57023 -40.70977,22.45408 -45.7072,44.40457 -2.01248,8.8395 -2.35691,9.12221 -11.11415,9.12221 h -5.42936 z"
+     id="path1504" /><path
+     style="opacity:1;fill:#1a1a1a;fill-opacity:1;stroke:#4d4d4d;stroke-width:1"
+     d="M 754.53008,608.24817 C 722.31091,601.3332 698.78801,575.33696 695.1389,542.61223 l -0.23838,-2.13776 h 6.36187 c 5.30645,0 6.54081,0.19773 7.44049,1.19187 0.59325,0.65553 1.8242,4.13099 2.73545,7.72325 5.73315,22.60074 22.81787,39.26947 45.21411,44.1132 6.89875,1.49203 7.74425,2.60069 7.74425,10.15464 v 5.88328 l -2.13776,-0.0463 c -1.17577,-0.0255 -4.65375,-0.58628 -7.72885,-1.24626 z"
+     id="path1506" /><path
+     style="opacity:1;fill:#1a1a1a;fill-opacity:1;stroke:#4d4d4d;stroke-width:1"
+     d="m 773.60552,603.37682 c 0,-7.26315 0.7124,-8.57514 5.06106,-9.32073 4.85038,-0.83162 11.1113,-2.92244 16.31659,-5.44891 15.80304,-7.67023 27.12455,-21.98721 31.55746,-39.907 0.97744,-3.95125 2.07685,-6.90365 2.75558,-7.39995 0.71733,-0.52453 3.39605,-0.82576 7.34299,-0.82576 h 6.21369 l -0.43161,3.7822 c -3.78834,33.19719 -31.7798,61.26383 -64.82878,65.00289 l -3.98698,0.45108 z"
+     id="path1508" /><path
+     style="opacity:1;fill:#1a1a1a;fill-opacity:1;stroke:#4d4d4d;stroke-width:1"
+     d="m 829.28285,529.78565 c -1.17591,-1.07273 -1.92806,-2.90835 -2.7333,-6.67061 -4.37909,-20.45999 -18.95972,-36.61709 -39.28934,-43.53733 -2.43875,-0.83016 -5.8241,-1.71782 -7.52299,-1.97259 -1.88233,-0.28227 -3.68318,-1.05749 -4.6103,-1.9846 -1.37609,-1.3761 -1.5214,-2.11712 -1.5214,-7.7588 v -6.23739 l 2.46665,0.33127 c 18.99503,2.55107 32.67768,9.21103 45.44487,22.12006 10.43139,10.54728 17.44069,23.80984 20.16018,38.14583 0.547,2.88355 0.99455,6.09813 0.99455,7.14349 v 1.90066 h -5.88329 c -5.18197,0 -6.07667,-0.17643 -7.50563,-1.47999 z"
+     id="path1510" /><path
+     style="opacity:1;fill:#000000;fill-opacity:1;stroke:#4d4d4d;stroke-width:0.999999"
+     d="m 663.62068,131.03319 c -0.53326,-0.58925 -0.625,-1.69704 -0.625,-7.54707 v -6.85645 l -1.10115,-1.23333 -1.10115,-1.23332 -7.11278,-0.10646 c -9.08871,-0.13604 -8.43455,0.46843 -8.43455,-7.79389 0,-4.68262 0.12554,-6.289149 0.5353,-6.850301 0.49015,-0.671243 1.10329,-0.741434 7.26979,-0.832236 3.70397,-0.05454 7.12214,-0.18656 7.59593,-0.293374 0.47378,-0.106815 1.19541,-0.741963 1.60361,-1.411441 0.66219,-1.086052 0.74232,-1.921972 0.74358,-7.756551 8.2e-4,-3.782617 0.16622,-6.847257 0.39235,-7.269795 0.3648,-0.681634 0.8563,-0.730476 7.35092,-0.730476 6.49462,0 6.98613,0.04884 7.35092,0.730476 0.22614,0.422538 0.39154,3.487178 0.39236,7.269795 10e-4,5.834579 0.0814,6.670499 0.74358,7.756551 0.4082,0.669478 1.12983,1.304626 1.60361,1.411441 0.47379,0.106814 3.89196,0.238833 7.59593,0.293374 6.1665,0.0908 6.77964,0.160993 7.26979,0.832236 0.40976,0.561152 0.5353,2.167681 0.5353,6.850301 0,8.26232 0.65416,7.65785 -8.43455,7.79389 l -7.11278,0.10646 -1.10115,1.23332 -1.10115,1.23333 v 6.92207 c 0,6.22636 -0.0694,6.98488 -0.69062,7.54707 -0.58568,0.53003 -1.66715,0.62501 -7.11685,0.62501 -5.74601,0 -6.49238,-0.0731 -7.05124,-0.69063 z"
+     id="path1512" /><path
+     style="opacity:1;fill:#1a1a1a;fill-opacity:1;stroke:#4d4d4d;stroke-width:1"
+     d="m 709.89826,726.4428 v -5.25775 h 5.25776 5.25775 v 5.25775 5.25776 h -5.25775 -5.25776 z"
+     id="path1514" /><path
+     style="opacity:1;fill:#1a1a1a;fill-opacity:1;stroke:#4d4d4d;stroke-width:1"
+     d="m 708.88715,747.11324 c -7.7953,-1.94254 -14.19265,-7.02605 -17.61469,-13.99713 -2.11167,-4.3017 -2.80967,-7.2657 -2.80967,-11.93106 0,-4.6603 0.69677,-7.62382 2.80517,-11.93107 2.98868,-6.10556 8.92756,-11.23718 15.51022,-13.40195 4.61637,-1.51813 11.17625,-1.60821 15.65781,-0.215 15.04474,4.67704 23.00917,20.70184 17.43246,35.07495 -4.8049,12.38391 -18.34269,19.55071 -30.9813,16.40126 z m 20.42437,-17.43489 v -8.4933 h 2.62887 c 1.44589,0 2.62888,-0.13514 2.62888,-0.3003 0,-0.16516 -4.4121,-4.71516 -9.80467,-10.1111 l -9.80467,-9.8108 -9.81081,9.80467 c -5.39594,5.39257 -9.8108,9.94257 -9.8108,10.1111 0,0.16854 1.27399,0.30643 2.8311,0.30643 h 2.8311 v 8.4933 8.4933 h 14.1555 14.1555 z"
+     id="path1516" /><path
+     style="opacity:1;fill:#1a1a1a;fill-opacity:1;stroke:#4d4d4d;stroke-width:1"
+     d="m 709.32587,761.61376 c -14.84534,-2.33618 -27.22151,-12.34303 -32.43644,-26.22673 -7.52289,-20.0282 2.33277,-43.0312 22.02756,-51.41208 6.07171,-2.58375 8.49788,-3.03235 16.23903,-3.00264 6.50926,0.025 7.37011,0.11595 10.71773,1.13248 14.44352,4.38591 24.64194,14.87492 28.58676,29.40132 0.78714,2.89856 0.92468,4.38074 0.9169,9.88116 -0.008,5.44704 -0.15534,7.01511 -0.93296,9.90885 -4.75273,17.68623 -20.04274,29.95104 -38.0751,30.54176 -2.55811,0.0838 -5.72767,-0.0171 -7.04348,-0.22412 z m 12.01917,-11.94961 c 11.93985,-2.6283 21.26602,-13.04595 22.49006,-25.12213 2.18282,-21.53536 -18.13115,-37.7028 -38.52104,-30.65805 -4.17709,1.44319 -6.99053,3.28712 -10.81791,7.09005 -2.821,2.80297 -3.81838,4.14269 -5.32568,7.15366 -2.55937,5.1126 -3.29841,8.68914 -3.02322,14.63061 0.31524,6.80606 2.15585,11.73401 6.30752,16.88741 6.75846,8.38917 18.22621,12.36591 28.89027,10.01845 z"
+     id="path1518" /><path
+     style="opacity:1;fill:#ff5f55;fill-opacity:0.956863;stroke:#4d4d4d;stroke-width:1"
+     d="m 591.47251,714.31134 c -2.59326,-1.58129 -2.41164,1.27628 -2.41164,-37.94303 0,-35.39705 0.002,-35.47278 0.79102,-36.47631 1.14169,-1.45141 2.68891,-2.12685 4.87199,-2.12685 h 1.91275 v 38.63637 38.63636 l -1.98864,-0.002 c -1.28887,-7.5e-4 -2.40626,-0.25607 -3.17548,-0.72512 z"
+     id="path1520" /><path
+     style="opacity:1;fill:#ff5f55;fill-opacity:0.956863;stroke:#4d4d4d;stroke-width:1"
+     d="m 592.87653,312.11027 c -0.50555,-0.0951 -1.32393,-0.43811 -1.8186,-0.76224 -2.07696,-1.36087 -1.99706,0.15175 -1.99706,-37.80487 0,-31.80626 0.058,-35.19116 0.61953,-36.14171 0.93372,-1.58066 2.4287,-2.28781 4.83664,-2.28781 h 2.11959 V 273.75 312.38636 l -1.42045,-0.0516 c -0.78125,-0.0284 -1.83409,-0.1294 -2.33965,-0.22451 z"
+     id="path1522" /><path
+     style="opacity:1;fill:#000000;fill-opacity:0.956863;stroke:#4d4d4d;stroke-width:1"
+     d="M 921.31509,126.45258 C 911.22775,105.90097 899.41123,89.210741 883.15837,72.558198 848.342,36.885643 804.48862,15.547979 753.51164,9.4762173 748.44895,8.8732107 740.43487,8.6841876 712.59008,8.5110262 L 677.96414,8.2956939 V 6.8885761 c 0,-0.9784616 0.48302,-1.8901352 1.58557,-2.9926826 l 1.58556,-1.5855648 h 30.73203 c 16.92783,0 33.54939,0.2176979 37.00428,0.4846569 50.75274,3.9216602 97.06468,24.5817024 133.31418,59.4722764 17.58138,16.922285 31.48259,35.738975 42.78184,57.909488 4.28368,8.40514 4.87972,10.05538 4.25358,11.77682 -0.41652,1.14511 -2.61821,3.7514 -3.13345,3.70927 -0.14438,-0.0118 -2.29207,-4.15642 -4.77264,-9.21026 z"
+     id="path1524" /><path
+     style="opacity:1;fill:#1a1a1a;fill-opacity:1;stroke:#4d4d4d;stroke-width:1"
+     d="m 591.56604,904.17079 c -2.01964,-1.17632 -2.15587,-6.52992 -2.15587,-84.72244 v -83.46676 l 4.9277,-10.18986 4.92769,-10.18984 v -39.48272 -39.48272 l -4.92769,-9.84523 -4.9277,-9.84523 V 475.04429 333.1426 l 4.9277,-10.18986 4.92769,-10.18984 v -39.48272 -39.48272 l -4.93732,-9.86447 -4.93732,-9.86446 0.31761,-73.44555 0.31761,-73.44554 6.5676,-0.375829 c 3.78331,-0.216499 7.3086,0.239148 8.31548,1.074785 1.50292,1.24731 1.74788,59.776984 1.74788,417.620064 v 416.16945 l -2.73795,1.91775 c -3.10138,2.17229 -9.13889,2.45924 -12.35311,0.58713 z"
+     id="path1530" /><path
+     style="opacity:1;fill:#1a1a1a;fill-opacity:1;stroke:#4d4d4d;stroke-width:1"
+     d="M 609.12095,465.08874 V 72.721096 h 4.31173 4.31173 V 465.08874 857.45638 h -4.31173 -4.31173 z"
+     id="path1532" /></g></svg>
diff --git a/Ryujinx/Ui/Resources/Controller_ProCon.svg b/Ryujinx/Ui/Resources/Controller_ProCon.svg
index 8c2b879fa3..e25122d483 100644
--- a/Ryujinx/Ui/Resources/Controller_ProCon.svg
+++ b/Ryujinx/Ui/Resources/Controller_ProCon.svg
@@ -1,149 +1,1085 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 viewBox="0 0 1000 1000.5" style="enable-background:new 0 0 1000 1000.5;" xml:space="preserve">
-<style type="text/css">
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.1"
+   id="Layer_1"
+   x="0px"
+   y="0px"
+   viewBox="0 0 1000 1000.5"
+   style="enable-background:new 0 0 1000 1000.5;"
+   xml:space="preserve"
+   sodipodi:docname="Controller_ProCon.svg"
+   inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"
+   inkscape:export-filename="/home/shahil/Desktop/Controller_ProCon.png"
+   inkscape:export-xdpi="96"
+   inkscape:export-ydpi="96"><metadata
+   id="metadata393"><rdf:RDF><cc:Work
+       rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+         rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs
+   id="defs391"><inkscape:path-effect
+     effect="bspline"
+     id="path-effect777" /><inkscape:path-effect
+     effect="bspline"
+     id="path-effect1911"
+     is_visible="true"
+     lpeversion="1"
+     weight="33.333333"
+     steps="2"
+     helper_size="0"
+     apply_no_weight="true"
+     apply_with_weight="true"
+     only_selected="false" /><inkscape:path-effect
+     effect="spiro"
+     id="path-effect1583"
+     is_visible="true"
+     lpeversion="1" /><inkscape:path-effect
+     effect="spiro"
+     id="path-effect1579"
+     is_visible="true"
+     lpeversion="1" /><inkscape:path-effect
+     effect="spiro"
+     id="path-effect1575"
+     is_visible="true"
+     lpeversion="1" /><inkscape:path-effect
+     effect="spiro"
+     id="path-effect1571"
+     is_visible="true"
+     lpeversion="1" /><inkscape:path-effect
+     effect="spiro"
+     id="path-effect1567"
+     is_visible="true"
+     lpeversion="1" /><inkscape:path-effect
+     effect="spiro"
+     id="path-effect1563"
+     is_visible="true"
+     lpeversion="1" /><inkscape:path-effect
+     effect="spiro"
+     id="path-effect1559"
+     is_visible="true"
+     lpeversion="1" /><inkscape:path-effect
+     effect="spiro"
+     id="path-effect1376"
+     is_visible="true"
+     lpeversion="1" /><inkscape:path-effect
+     effect="spiro"
+     id="path-effect1372"
+     is_visible="true"
+     lpeversion="1" /><inkscape:path-effect
+     effect="spiro"
+     id="path-effect1356"
+     is_visible="true"
+     lpeversion="1" /><inkscape:path-effect
+     effect="spiro"
+     id="path-effect1352"
+     is_visible="true"
+     lpeversion="1" /><inkscape:path-effect
+     effect="spiro"
+     id="path-effect1348"
+     is_visible="true"
+     lpeversion="1" /><inkscape:path-effect
+     effect="spiro"
+     id="path-effect1344"
+     is_visible="true"
+     lpeversion="1" /><inkscape:path-effect
+     effect="spiro"
+     id="path-effect1336"
+     is_visible="true"
+     lpeversion="1" /><inkscape:path-effect
+     effect="spiro"
+     id="path-effect1332"
+     is_visible="true"
+     lpeversion="1" /><inkscape:path-effect
+     effect="spiro"
+     id="path-effect1328"
+     is_visible="true"
+     lpeversion="1" /><inkscape:path-effect
+     effect="spiro"
+     id="path-effect1324"
+     is_visible="true"
+     lpeversion="1" /><inkscape:path-effect
+     effect="spiro"
+     id="path-effect1320"
+     is_visible="true"
+     lpeversion="1" /><inkscape:path-effect
+     effect="spiro"
+     id="path-effect1308"
+     is_visible="true"
+     lpeversion="1" /><inkscape:path-effect
+     effect="spiro"
+     id="path-effect1304"
+     is_visible="true"
+     lpeversion="1" /><filter
+     inkscape:collect="always"
+     style="color-interpolation-filters:sRGB"
+     id="filter1841"
+     x="-0.027324708"
+     width="1.0546494"
+     y="-0.02712539"
+     height="1.0542508"><feGaussianBlur
+       inkscape:collect="always"
+       stdDeviation="1.4543468"
+       id="feGaussianBlur1843" /></filter></defs><sodipodi:namedview
+   pagecolor="#ffffff"
+   bordercolor="#666666"
+   borderopacity="1"
+   objecttolerance="10"
+   gridtolerance="10"
+   guidetolerance="10"
+   inkscape:pageopacity="0"
+   inkscape:pageshadow="2"
+   inkscape:window-width="1920"
+   inkscape:window-height="1003"
+   id="namedview389"
+   showgrid="false"
+   inkscape:zoom="0.33345764"
+   inkscape:cx="589.13054"
+   inkscape:cy="501.0257"
+   inkscape:window-x="0"
+   inkscape:window-y="0"
+   inkscape:window-maximized="1"
+   inkscape:current-layer="Layer_1"
+   inkscape:document-rotation="0" />
+<style
+   type="text/css"
+   id="style280">
 	.st0{opacity:0.1;}
 	.st1{fill:#1ABC9C;}
 	.st2{fill:#CCCCCC;}
 	.st3{fill:#FFFFFF;}
 </style>
-<g class="st0">
-	<path class="st1" d="M259.4,630.9c-22.4,12.5-32.3,39.7-49,69.8c-35.7,64.1-50.5,128.9-116.6,128.9C40.8,829.5,1,776.1,1,705.8
-		c0-48.3,29.9-226.9,55.6-347.6C113.4,453.9,219.5,604.4,259.4,630.9z"/>
-	<path class="st1" d="M999,705.8c0,70.4-39.9,123.8-92.7,123.8c-66.1,0-80.9-64.8-116.6-128.9c-16.7-30-26.7-57.3-49-69.8
-		c39.8-26.5,146-177,202.7-272.7C969.1,478.9,999,657.5,999,705.8z"/>
-	<circle class="st1" cx="630.3" cy="482.7" r="56.2"/>
-	<circle class="st1" cx="630.3" cy="482.7" r="40.5"/>
-	<circle class="st1" cx="764.9" cy="276.6" r="36.6"/>
-	<circle class="st1" cx="764.9" cy="412.6" r="36.6"/>
-	<circle class="st1" cx="223.9" cy="344.8" r="56.2"/>
-	<circle class="st1" cx="223.9" cy="344.8" r="40.5"/>
-	<circle class="st1" cx="843.1" cy="344.6" r="36.6"/>
-	<circle class="st1" cx="686.7" cy="344.6" r="36.6"/>
-	<circle class="st1" cx="624.1" cy="269.3" r="22.1"/>
-	<circle class="st1" cx="571.3" cy="344.6" r="22.1"/>
-	<circle class="st1" cx="375.9" cy="269.3" r="22.1"/>
-	<circle class="st1" cx="428.7" cy="344.6" r="14"/>
-	<path class="st1" d="M414.6,326.5h28.2c2.2,0,4.1,1.8,4.1,4.1v28.2c0,2.2-1.8,4.1-4.1,4.1h-28.2c-2.2,0-4.1-1.8-4.1-4.1v-28.2
-		C410.6,328.3,412.4,326.5,414.6,326.5z"/>
-	<path class="st1" d="M351.6,158.8c-88.4,3.8-169.6,13.7-207,39.4c-14.9,10.2-26.4,16.9-32.9,20.5C142.6,135.9,282,138,299,138
-		c6.5,0,26.6,8.7,39.9,14.8h0C346.3,156.2,351.6,158.8,351.6,158.8z"/>
-	<path class="st1" d="M888.3,218.7c-6.5-3.6-18-10.3-32.9-20.6c-37.4-25.7-118.7-35.6-207-39.4c0,0,5.3-2.6,12.6-6
-		c13.4-6.1,33.4-14.8,40-14.8C717.9,138,857.4,135.9,888.3,218.7z"/>
-	<path class="st1" d="M414.6,461.1H373c-2.2,0-4.1-1.8-4.1-4.1v-41.6c0-2.2-1.8-4.1-4.1-4.1c0,0,0,0,0,0h-36.4
-		c-2.2,0-4.1,1.8-4.1,4.1c0,0,0,0,0,0v41.6c0,2.2-1.8,4.1-4.1,4.1h-41.6c-2.2,0-4.1,1.8-4.1,4.1v36.4c0,2.2,1.8,4.1,4.1,4.1h41.6
-		c2.2,0,4.1,1.8,4.1,4.1l0,0v41.6c0,2.2,1.8,4.1,4.1,4.1c0,0,0,0,0,0h36.4c2.2,0,4.1-1.8,4.1-4.1l0,0v-41.6c0-2.2,1.8-4.1,4.1-4.1
-		l0,0h41.6c2.2,0,4.1-1.8,4.1-4.1v-36.4C418.6,462.9,416.8,461.1,414.6,461.1z"/>
-</g>
-<path class="st2" d="M661,153.1L661,153.1c-0.2,0-0.3-0.1-0.3-0.3c0-0.1,0.1-0.2,0.2-0.2c0.1,0,0.3,0.1,0.3,0.2
-	C661.3,153,661.2,153.1,661,153.1C661,153.1,661,153.1,661,153.1z"/>
-<path class="st3" d="M630.3,560.6c-43,0-77.9-34.9-77.9-77.9s34.9-77.9,77.9-77.9c43,0,77.9,34.9,77.9,77.9
-	C708.2,525.7,673.3,560.6,630.3,560.6z M630.3,405.8c-42.5,0-76.9,34.4-76.9,76.9s34.4,76.9,76.9,76.9c42.5,0,76.9-34.4,76.9-76.9
-	C707.2,440.3,672.8,405.9,630.3,405.8L630.3,405.8z"/>
-<path class="st3" d="M223.9,422.7c-43,0-77.9-34.9-77.9-77.9c0-43,34.9-77.9,77.9-77.9s77.9,34.9,77.9,77.9l0,0
-	C301.7,387.8,266.9,422.7,223.9,422.7z M223.9,267.9c-42.5,0-76.9,34.4-76.9,76.9c0,42.5,34.4,76.9,76.9,76.9s76.9-34.4,76.9-76.9
-	l0,0C300.7,302.4,266.3,268,223.9,267.9z"/>
-<path class="st3" d="M648.4,159.3L648.4,159.3c-49.9-2.1-102.8-2.3-148.4-2.3c-45.6,0-98.4,0.2-148.4,2.3c-0.1,0-0.2,0-0.2-0.1
-	c-0.1,0-5.4-2.6-12.6-6c-0.3-0.1-0.4-0.4-0.2-0.7c0.1-0.2,0.2-0.3,0.4-0.3c2-0.2,50-4.9,161.1-4.9c111.7,0,159.1,4.7,161,4.9
-	c0.3,0,0.5,0.3,0.4,0.5c0,0.2-0.1,0.3-0.3,0.4c-7.2,3.3-12.6,5.9-12.6,6C648.5,159.3,648.4,159.3,648.4,159.3z M340.9,153.2
-	c5.8,2.7,10.1,4.8,10.8,5.1c49.9-2.1,102.7-2.3,148.3-2.3c45.6,0,98.4,0.2,148.3,2.3c0.7-0.4,5-2.4,10.8-5.1
-	c-9.8-0.9-58.2-4.7-159.1-4.7C399.6,148.5,350.7,152.3,340.9,153.2L340.9,153.2z"/>
-<path class="st3" d="M740.6,631.4c-0.1,0-0.2,0-0.2-0.1c-8.6-4.8-18.6-7.2-30.7-7.2H290.3c-12,0-22.1,2.4-30.7,7.2
-	c-0.2,0.1-0.4,0.1-0.5,0C218.3,604.2,110,449.1,56.2,358.4c-0.1-0.1-0.1-0.2-0.1-0.4c11.3-53.3,20.7-90,27.1-106.1
-	c1.2-3.1,2.9-5.9,4.9-8.5l12.7-16.2c2.9-3.7,6.5-6.8,10.6-9c0,0,0,0,0,0l0,0c7.1-3.9,18.5-10.6,32.8-20.5
-	c32-22,99.8-34.9,207.3-39.4c49.5-2.1,100.5-2.3,148.4-2.3c47.9,0,98.8,0.2,148.4,2.3c107.5,4.6,175.3,17.5,207.3,39.4
-	c14.4,9.9,25.8,16.6,32.9,20.5c4.1,2.2,7.7,5.3,10.6,9l12.7,16.2c2.1,2.6,3.7,5.5,4.9,8.6c6.4,16.1,15.7,52.8,27.1,106.1
-	c0,0.1,0,0.3-0.1,0.4C890,449.1,781.7,604.2,740.9,631.3C740.8,631.4,740.7,631.4,740.6,631.4z M57.2,358.1
-	c53.6,90.4,161.4,244.7,202.2,272.2c8.7-4.8,18.8-7.2,30.9-7.2h419.4c12.1,0,22.2,2.3,30.9,7.2c40.8-27.5,148.6-181.8,202.2-272.2
-	c-11.3-53.1-20.6-89.7-27-105.7c-1.2-3-2.8-5.8-4.8-8.3l-12.7-16.2c-2.8-3.6-6.3-6.5-10.3-8.7c-7.1-3.9-18.5-10.7-33-20.6
-	c-31.8-21.9-99.4-34.7-206.8-39.3c-49.5-2.1-100.4-2.3-148.3-2.3c-47.9,0-98.8,0.2-148.4,2.3c-107.3,4.6-174.9,17.4-206.7,39.3
-	c-14.4,9.9-25.8,16.6-32.9,20.5c0,0-0.1,0-0.1,0.1c-4,2.2-7.5,5.2-10.3,8.7l-12.7,16.2c-2,2.5-3.6,5.3-4.8,8.3
-	C77.8,268.4,68.5,305,57.2,358.1z"/>
-<path class="st1" d="M93.7,830.5C40.3,830.5,0,776.9,0,705.8C0,657.1,29.9,478.8,55.6,358c0.1-0.5,0.6-0.9,1.2-0.8
-	c0.3,0.1,0.5,0.2,0.7,0.5c53.7,90.5,161.9,245.4,202.4,272.4c0.5,0.3,0.6,0.9,0.3,1.4c-0.1,0.1-0.2,0.2-0.3,0.3
-	c-17.4,9.7-27.3,28.8-38.8,50.9c-3.1,6-6.3,12.1-9.8,18.4c-7.3,13.1-13.7,26.1-19.8,38.7C167.5,788.5,146.9,830.5,93.7,830.5z
-	 M57.1,360.9C31.5,481.6,2,657.5,2,705.8c0,70,39.4,122.8,91.7,122.8c52,0,72.3-41.5,95.9-89.6c6.2-12.6,12.6-25.7,19.9-38.8
-	c3.5-6.3,6.7-12.4,9.8-18.4c11.3-21.8,21.2-40.7,38.2-51C216.1,601.5,110.7,450.9,57.1,360.9z"/>
-<path class="st1" d="M906.3,830.5c-53.3,0-73.9-42-97.7-90.7c-6.2-12.6-12.5-25.6-19.8-38.7c-3.5-6.3-6.7-12.5-9.8-18.4
-	c-11.5-22.1-21.4-41.2-38.8-50.9c-0.5-0.3-0.7-0.9-0.4-1.4c0.1-0.1,0.2-0.3,0.3-0.3c40.6-27,148.7-181.8,202.4-272.4
-	c0.3-0.5,0.9-0.6,1.4-0.3c0.2,0.1,0.4,0.4,0.5,0.7c25.7,120.9,55.6,299.1,55.6,347.8C1000,776.9,959.7,830.5,906.3,830.5z
-	 M742.5,630.8c17.1,10.2,26.9,29.2,38.2,51c3.1,6,6.3,12.1,9.8,18.4c7.3,13.1,13.7,26.1,19.9,38.7c23.5,48.1,43.9,89.6,95.9,89.6
-	c52.3,0,91.7-52.8,91.7-122.8c0-48.2-29.5-224.2-55.1-344.9C889.3,450.9,783.9,601.5,742.5,630.8z"/>
-<path class="st1" d="M630.3,539.9c-31.6,0-57.2-25.6-57.2-57.2c0-31.6,25.6-57.2,57.2-57.2c31.6,0,57.2,25.6,57.2,57.2l0,0
-	C687.5,514.3,661.9,539.9,630.3,539.9z M630.3,427.5c-30.5,0-55.2,24.7-55.2,55.2c0,30.5,24.7,55.2,55.2,55.2
-	c30.5,0,55.2-24.7,55.2-55.2C685.5,452.2,660.8,427.5,630.3,427.5L630.3,427.5z"/>
-<path class="st1" d="M630.3,524.2c-22.9,0-41.5-18.6-41.5-41.5s18.6-41.5,41.5-41.5c22.9,0,41.5,18.6,41.5,41.5
-	C671.8,505.6,653.2,524.2,630.3,524.2z M630.3,443.2c-21.8,0-39.5,17.7-39.5,39.5c0,21.8,17.7,39.5,39.5,39.5
-	c21.8,0,39.5-17.7,39.5-39.5C669.8,460.9,652.1,443.2,630.3,443.2z"/>
-<path class="st1" d="M764.9,314.2c-20.7,0-37.6-16.8-37.5-37.6c0-20.7,16.8-37.6,37.6-37.5c20.7,0,37.5,16.8,37.5,37.6
-	C802.4,297.4,785.6,314.1,764.9,314.2z M764.9,241.1c-19.6,0-35.6,15.9-35.6,35.6c0,19.6,15.9,35.6,35.6,35.6
-	c19.6,0,35.6-15.9,35.6-35.6C800.4,257,784.5,241.1,764.9,241.1L764.9,241.1z"/>
-<path class="st1" d="M764.9,450.2c-20.7,0-37.6-16.8-37.5-37.6c0-20.7,16.8-37.6,37.6-37.5c20.7,0,37.5,16.8,37.5,37.6
-	C802.4,433.4,785.6,450.2,764.9,450.2z M764.9,377.1c-19.6,0-35.6,15.9-35.6,35.6c0,19.6,15.9,35.6,35.6,35.6
-	c19.6,0,35.6-15.9,35.6-35.6C800.4,393,784.5,377.1,764.9,377.1z"/>
-<path class="st1" d="M223.9,402.1c-31.6,0-57.2-25.6-57.2-57.2c0-31.6,25.6-57.2,57.2-57.2s57.2,25.6,57.2,57.2
-	C281.1,376.4,255.5,402,223.9,402.1z M223.9,289.6c-30.5,0-55.2,24.7-55.2,55.2c0,30.5,24.7,55.2,55.2,55.2
-	c30.5,0,55.2-24.7,55.2-55.2c0,0,0,0,0,0C279.1,314.4,254.4,289.7,223.9,289.6L223.9,289.6z"/>
-<path class="st1" d="M223.9,386.4c-22.9,0-41.5-18.6-41.5-41.5c0-22.9,18.6-41.5,41.5-41.5s41.5,18.6,41.5,41.5
-	C265.4,367.8,246.8,386.3,223.9,386.4z M223.9,305.3c-21.8,0-39.5,17.7-39.5,39.5c0,21.8,17.7,39.5,39.5,39.5s39.5-17.7,39.5-39.5
-	l0,0C263.4,323,245.7,305.3,223.9,305.3L223.9,305.3z"/>
-<path class="st1" d="M843.1,382.2c-20.7,0-37.6-16.8-37.6-37.5s16.8-37.6,37.5-37.6c20.7,0,37.6,16.8,37.6,37.5c0,0,0,0,0,0
-	C880.6,365.4,863.8,382.2,843.1,382.2z M843.1,309.1c-19.6,0-35.6,15.9-35.6,35.6s15.9,35.6,35.6,35.6c19.6,0,35.6-15.9,35.6-35.6
-	c0,0,0,0,0,0C878.6,325,862.7,309.1,843.1,309.1z"/>
-<path class="st1" d="M686.7,382.2c-20.7,0-37.6-16.8-37.6-37.6s16.8-37.6,37.6-37.6c20.7,0,37.6,16.8,37.6,37.6
-	C724.2,365.4,707.4,382.2,686.7,382.2z M686.7,309.1c-19.6,0-35.6,15.9-35.6,35.6s15.9,35.6,35.6,35.6c19.6,0,35.6-15.9,35.6-35.6
-	l0,0C722.2,325,706.3,309.1,686.7,309.1z"/>
-<path class="st1" d="M624.1,292.4c-12.8,0-23.1-10.3-23.1-23.1c0-12.8,10.3-23.1,23.1-23.1c12.8,0,23.1,10.3,23.1,23.1
-	C647.2,282,636.8,292.4,624.1,292.4z M624.1,248.2c-11.7,0-21.1,9.5-21.1,21.1c0,11.7,9.5,21.1,21.1,21.1c11.7,0,21.1-9.5,21.1-21.1
-	C645.2,257.6,635.7,248.2,624.1,248.2z"/>
-<path class="st1" d="M571.3,367.7c-12.8,0-23.1-10.3-23.1-23.1c0-12.8,10.3-23.1,23.1-23.1c12.8,0,23.1,10.3,23.1,23.1
-	C594.3,357.4,584,367.7,571.3,367.7z M571.3,323.5c-11.7,0-21.1,9.5-21.1,21.1c0,11.7,9.5,21.1,21.1,21.1c11.7,0,21.1-9.5,21.1-21.1
-	C592.3,333,582.9,323.5,571.3,323.5L571.3,323.5z"/>
-<path class="st1" d="M375.9,292.4c-12.8,0-23.1-10.3-23.1-23.1c0-12.8,10.3-23.1,23.1-23.1c12.8,0,23.1,10.3,23.1,23.1
-	C399,282,388.7,292.4,375.9,292.4z M375.9,248.2c-11.7,0-21.1,9.5-21.1,21.1c0,11.7,9.5,21.1,21.1,21.1c11.7,0,21.1-9.5,21.1-21.1
-	C397,257.6,387.6,248.2,375.9,248.2z"/>
-<path class="st1" d="M428.7,359.6c-8.3,0-15-6.7-15-15s6.7-15,15-15s15,6.7,15,15l0,0C443.7,352.9,437,359.6,428.7,359.6z
-	 M428.7,331.7c-7.2,0-13,5.8-13,13c0,7.2,5.8,13,13,13c7.2,0,13-5.8,13-13c0,0,0,0,0,0C441.7,337.5,435.9,331.7,428.7,331.7
-	L428.7,331.7z"/>
-<path class="st1" d="M442.8,363.8h-28.2c-2.8,0-5.1-2.3-5.1-5.1v-28.2c0-2.8,2.3-5.1,5.1-5.1h28.2c2.8,0,5.1,2.3,5.1,5.1v28.2
-	C447.9,361.5,445.6,363.8,442.8,363.8z M414.6,327.5c-1.7,0-3.1,1.4-3.1,3.1v28.2c0,1.7,1.4,3.1,3.1,3.1h28.2c1.7,0,3.1-1.4,3.1-3.1
-	v-28.2c0-1.7-1.4-3.1-3.1-3.1H414.6z"/>
-<path class="st1" d="M111.7,219.7c-0.6,0-1-0.4-1-1c0-0.1,0-0.2,0.1-0.3c27.3-73.2,138.4-81.3,186-81.3c0.3,0,0.6,0,1,0l1.2,0
-	c6.6,0,25.5,8.1,40.3,14.9c0,0,0.1,0,0.1,0c7.2,3.3,12.6,6,12.7,6c0.5,0.2,0.7,0.8,0.5,1.3c-0.2,0.3-0.5,0.5-0.9,0.6
-	c-107.2,4.6-174.8,17.4-206.5,39.2c-14.6,10-26,16.7-33,20.6C112.1,219.6,111.9,219.7,111.7,219.7z M296.8,139
-	c-46.6,0-154.6,7.8-183.1,77.5c7-4,17.5-10.3,30.4-19.1c31.6-21.7,98.2-34.6,203.6-39.4c-2.2-1.1-5.4-2.5-8.9-4.2c0,0-0.1,0-0.1,0
-	c-20.6-9.5-34.7-14.7-39.5-14.7l-1.2,0C297.5,139,297.1,139,296.8,139L296.8,139z"/>
-<path class="st1" d="M888.3,219.7c-0.2,0-0.3,0-0.5-0.1c-7-3.9-18.5-10.7-33-20.6c-31.7-21.8-99.3-34.6-206.5-39.2c-0.6,0-1-0.5-1-1
-	c0-0.4,0.2-0.7,0.6-0.9c0.1,0,5.4-2.6,12.7-6C682.2,142,695.8,137,701,137l1.2,0c0.3,0,0.6,0,1,0c47.6,0,158.7,8.1,186.1,81.4
-	c0.2,0.5-0.1,1.1-0.6,1.3C888.5,219.7,888.4,219.7,888.3,219.7L888.3,219.7z M652.4,158c105.3,4.7,171.9,17.6,203.6,39.4
-	c12.9,8.8,23.3,15.1,30.4,19.1C857.8,146.8,749.8,139,703.2,139c-0.3,0-0.6,0-1,0l-1.2,0c-4.8,0-18.8,5.2-39.5,14.7
-	C657.8,155.4,654.6,156.9,652.4,158z"/>
-<path class="st1" d="M364.9,556.4h-36.4c-2.8,0-5.1-2.3-5.1-5.1v-41.6c0-1.7-1.4-3.1-3.1-3.1h-41.6c-2.8,0-5.1-2.3-5.1-5.1v-36.4
-	c0-2.8,2.3-5.1,5.1-5.1h41.6c1.7,0,3.1-1.4,3.1-3.1v-41.6c0-2.8,2.3-5.1,5.1-5.1h36.4c2.8,0,5.1,2.3,5.1,5.1v41.6
-	c0,1.7,1.4,3.1,3.1,3.1h41.6c2.8,0,5.1,2.3,5.1,5.1v36.4c0,2.8-2.3,5.1-5.1,5.1H373c-1.7,0-3.1,1.4-3.1,3.1v41.6
-	C369.9,554.1,367.7,556.4,364.9,556.4z M278.8,462.1c-1.7,0-3.1,1.4-3.1,3.1v36.4c0,1.7,1.4,3.1,3.1,3.1h41.6c2.8,0,5.1,2.3,5.1,5.1
-	v41.6c0,1.7,1.4,3.1,3.1,3.1h36.4c1.7,0,3.1-1.4,3.1-3.1v-41.6c0-2.8,2.3-5.1,5.1-5.1h41.6c1.7,0,3.1-1.4,3.1-3.1v-36.4
-	c0-1.7-1.4-3.1-3.1-3.1H373c-2.8,0-5.1-2.3-5.1-5.1v-41.6c0-1.7-1.4-3.1-3.1-3.1h-36.4c-1.7,0-3.1,1.4-3.1,3.1v41.6
-	c0,2.8-2.3,5.1-5.1,5.1H278.8z"/>
-<rect x="363.7" y="267.5" class="st1" width="24.4" height="3.5"/>
-<polygon class="st1" points="636.3,267.5 625.8,267.5 625.8,257.1 622.3,257.1 622.3,267.5 611.9,267.5 611.9,271 622.3,271 
-	622.3,281.4 625.8,281.4 625.8,271 636.3,271 "/>
-<path class="st1" d="M775.5,289.9H771l-6.3-10.4l-6.3,10.4h-4.4l8.6-13.2l-7.9-12.6h4.2l5.9,9.7l5.9-9.7h4l-7.9,12.4L775.5,289.9z"
-	/>
-<path class="st1" d="M697.8,331.8l-9.3,16.5v9.2h-3.5v-9.3l-9.3-16.5h4.2l5.1,9.4l1.9,3.8l1.7-3.4l5.2-9.8L697.8,331.8z"/>
-<path class="st1" d="M854,357.5h-3.8l-1.8-5.6h-10.7l-1.8,5.6h-3.6l8.5-25.7h4.8L854,357.5z M847.4,348.8L843,335l-4.4,13.8H847.4z"
-	/>
-<path class="st1" d="M773.3,417.8c0,1.1-0.2,2.3-0.7,3.3c-0.5,1-1.2,1.8-2,2.4c-1,0.7-2.1,1.2-3.2,1.5c-1.4,0.4-2.8,0.5-4.2,0.5
-	h-6.7v-25.7h7.4c5.7,0,8.6,2.1,8.6,6.3c0,1.3-0.3,2.5-1,3.6c-0.8,1.1-1.9,1.9-3.2,2.2c0.7,0.1,1.4,0.4,2,0.7
-	c0.6,0.3,1.2,0.7,1.6,1.2c0.5,0.5,0.9,1.1,1.1,1.8C773.2,416.2,773.4,417,773.3,417.8z M768.8,406.5c0-0.5-0.1-1-0.2-1.5
-	c-0.2-0.5-0.4-0.9-0.8-1.2c-0.5-0.4-1-0.6-1.6-0.8c-0.8-0.2-1.7-0.3-2.5-0.3H760v8.1h3.5c0.7,0,1.5-0.1,2.2-0.3
-	c0.6-0.1,1.2-0.4,1.7-0.8c0.5-0.3,0.8-0.8,1.1-1.3C768.7,407.8,768.8,407.2,768.8,406.5L768.8,406.5z M769.6,417.9
-	c0-0.6-0.1-1.2-0.4-1.8c-0.3-0.5-0.7-1-1.2-1.3c-0.6-0.4-1.2-0.7-1.9-0.8c-0.8-0.2-1.7-0.3-2.5-0.3H760v8.9h3.7
-	c1.6,0.1,3.2-0.3,4.5-1.1C769.2,420.6,769.7,419.3,769.6,417.9L769.6,417.9z"/>
-<path class="st1" d="M571.3,329.3L557.7,343h3.9v11.6h19.5V343h3.7L571.3,329.3z M575.2,350.4h-7.7V343h7.7L575.2,350.4z"/>
-<polygon class="st1" points="346.7,426.4 339.2,439.4 354.2,439.4 "/>
-<polygon class="st1" points="346.7,540.4 339.2,527.4 354.2,527.4 "/>
-<polygon class="st1" points="403.7,483.4 390.7,475.9 390.7,490.9 "/>
-<polygon class="st1" points="289.6,483.4 302.6,475.9 302.6,490.9 "/>
-</svg>
+
+
+
+
+
+<path
+   class="st3"
+   d="m 740.4,631 c -0.1,0 -0.2,0 -0.2,-0.1 -8.6,-4.8 -18.6,-7.2 -30.7,-7.2 H 290.1 c -12,0 -22.1,2.4 -30.7,7.2 -0.2,0.1 -0.4,0.1 -0.5,0 C 218.1,603.8 109.8,448.7 56,358 c -0.1,-0.1 -0.1,-0.2 -0.1,-0.4 11.3,-53.3 20.7,-90 27.1,-106.1 1.2,-3.1 2.9,-5.9 4.9,-8.5 l 12.7,-16.2 c 2.9,-3.7 6.5,-6.8 10.6,-9 0,0 0,0 0,0 v 0 c 7.1,-3.9 18.5,-10.6 32.8,-20.5 32,-22 99.8,-34.9 207.3,-39.4 49.5,-2.1 100.5,-2.3 148.4,-2.3 47.9,0 98.8,0.2 148.4,2.3 107.5,4.6 175.3,17.5 207.3,39.4 14.4,9.9 25.8,16.6 32.9,20.5 4.1,2.2 7.7,5.3 10.6,9 l 12.7,16.2 c 2.1,2.6 3.7,5.5 4.9,8.6 6.4,16.1 15.7,52.8 27.1,106.1 0,0.1 0,0.3 -0.1,0.4 -53.7,90.6 -162,245.7 -202.8,272.8 -0.1,0.1 -0.2,0.1 -0.3,0.1 z M 57,357.7 c 53.6,90.4 161.4,244.7 202.2,272.2 8.7,-4.8 18.8,-7.2 30.9,-7.2 h 419.4 c 12.1,0 22.2,2.3 30.9,7.2 C 781.2,602.4 889,448.1 942.6,357.7 931.3,304.6 922,268 915.6,252 c -1.2,-3 -2.8,-5.8 -4.8,-8.3 l -12.7,-16.2 c -2.8,-3.6 -6.3,-6.5 -10.3,-8.7 -7.1,-3.9 -18.5,-10.7 -33,-20.6 C 823,176.3 755.4,163.5 648,158.9 c -49.5,-2.1 -100.4,-2.3 -148.3,-2.3 -47.9,0 -98.8,0.2 -148.4,2.3 -107.3,4.6 -174.9,17.4 -206.7,39.3 -14.4,9.9 -25.8,16.6 -32.9,20.5 0,0 -0.1,0 -0.1,0.1 -4,2.2 -7.5,5.2 -10.3,8.7 l -12.7,16.2 c -2,2.5 -3.6,5.3 -4.8,8.3 -6.2,16 -15.5,52.6 -26.8,105.7 z"
+   id="path328"
+   style="fill:#000000" />
+<path
+   class="st1"
+   d="M93.7,830.5C40.3,830.5,0,776.9,0,705.8C0,657.1,29.9,478.8,55.6,358c0.1-0.5,0.6-0.9,1.2-0.8  c0.3,0.1,0.5,0.2,0.7,0.5c53.7,90.5,161.9,245.4,202.4,272.4c0.5,0.3,0.6,0.9,0.3,1.4c-0.1,0.1-0.2,0.2-0.3,0.3  c-17.4,9.7-27.3,28.8-38.8,50.9c-3.1,6-6.3,12.1-9.8,18.4c-7.3,13.1-13.7,26.1-19.8,38.7C167.5,788.5,146.9,830.5,93.7,830.5z   M57.1,360.9C31.5,481.6,2,657.5,2,705.8c0,70,39.4,122.8,91.7,122.8c52,0,72.3-41.5,95.9-89.6c6.2-12.6,12.6-25.7,19.9-38.8  c3.5-6.3,6.7-12.4,9.8-18.4c11.3-21.8,21.2-40.7,38.2-51C216.1,601.5,110.7,450.9,57.1,360.9z"
+   id="path330"
+   style="fill:#000000" />
+<path
+   class="st1"
+   d="M906.3,830.5c-53.3,0-73.9-42-97.7-90.7c-6.2-12.6-12.5-25.6-19.8-38.7c-3.5-6.3-6.7-12.5-9.8-18.4  c-11.5-22.1-21.4-41.2-38.8-50.9c-0.5-0.3-0.7-0.9-0.4-1.4c0.1-0.1,0.2-0.3,0.3-0.3c40.6-27,148.7-181.8,202.4-272.4  c0.3-0.5,0.9-0.6,1.4-0.3c0.2,0.1,0.4,0.4,0.5,0.7c25.7,120.9,55.6,299.1,55.6,347.8C1000,776.9,959.7,830.5,906.3,830.5z   M742.5,630.8c17.1,10.2,26.9,29.2,38.2,51c3.1,6,6.3,12.1,9.8,18.4c7.3,13.1,13.7,26.1,19.9,38.7c23.5,48.1,43.9,89.6,95.9,89.6  c52.3,0,91.7-52.8,91.7-122.8c0-48.2-29.5-224.2-55.1-344.9C889.3,450.9,783.9,601.5,742.5,630.8z"
+   id="path332"
+   style="fill:#000000" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<style
+   type="text/css"
+   id="style1175">
+	.st0{opacity:0.1;}
+	.st1{fill:#1ABC9C;}
+	.st2{fill:#CCCCCC;}
+	.st3{fill:#FFFFFF;}
+</style><path
+   style="fill:#333333;stroke-width:1"
+   d="M 248.814,619.86491 C 212.87506,586.7494 136.92517,484.0235 75.18227,385.0196 L 57.771403,357.10151 63.135842,333.1429 c 11.626766,-51.92736 19.368222,-78.91666 25.028589,-87.25801 8.643803,-12.73787 18.810229,-23.58017 25.830799,-27.54806 3.96697,-2.24205 13.54571,-8.18146 21.28608,-13.19869 7.74038,-5.01723 18.30099,-11.24779 23.46803,-13.84569 31.12988,-15.65155 90.16587,-26.09872 174.906,-30.95183 63.45998,-3.63438 215.70229,-4.20672 301.9965,-1.13532 101.70148,3.61978 169.93845,14.34684 205.65406,32.32944 6.51023,3.27786 20.14816,11.67812 46.62419,28.71806 5.80188,3.73408 9.9978,8.0076 17.18162,17.49934 8.08999,10.68902 10.06176,14.29664 13.2445,24.23247 4.60302,14.36967 11.00332,39.56786 18.09432,71.23786 l 5.3822,24.03817 -4.47534,7.4584 c -42.57702,70.95682 -107.69638,164.29012 -152.13735,218.05308 -12.46339,15.07773 -35.51266,39.39061 -41.18722,43.44516 -3.40025,2.42953 -3.40245,2.42944 -10.49886,-0.43621 l -7.09789,-2.86626 -222.95845,-0.32833 c -216.14496,-0.31831 -223.22229,-0.25628 -231.59241,2.03004 -4.74868,1.2971 -9.74862,2.72474 -11.11096,3.1725 -1.92153,0.63155 -4.60365,-1.14545 -11.96025,-7.92411 z"
+   id="path607" /><path
+   style="fill:#4d4d4d;stroke-width:1"
+   d="M 83.696391,827.10537 C 53.677115,823.468 26.300476,798.6294 12.805512,762.78667 4.0181053,739.44724 1.1850363,714.89037 3.7936954,684.67278 8.7308953,627.48239 30.2218,495.6161 51.642567,391.07633 l 5.744967,-28.03716 13.524385,21.86136 C 109.2146,446.81452 164.66725,526.10825 203.24336,574.126 c 19.53222,24.3128 42.25041,48.93394 49.84886,54.02436 l 2.81015,1.88261 -7.20065,6.51621 c -3.96035,3.58391 -9.76656,10.34065 -12.90271,15.01499 -7.03228,10.48145 -26.19898,46.17237 -47.67321,88.77382 -8.92634,17.70844 -20.08933,38.04111 -24.80663,45.18369 -21.17042,32.05467 -46.98776,45.53801 -79.622779,41.58369 z"
+   id="path611" /><path
+   style="fill:#4d4d4d;stroke-width:1"
+   d="m 886.71078,824.81813 c -11.9497,-2.96472 -28.05993,-13.7286 -38.75402,-25.89309 -10.9371,-12.44092 -14.3911,-18.37994 -43.20016,-74.28094 -33.24402,-64.50659 -40.89081,-77.21496 -54.08955,-89.89267 l -4.39391,-4.22046 16.94618,-17.4174 c 39.78713,-40.89348 99.43541,-122.36769 164.5306,-224.73409 11.73572,-18.45517 14.20212,-21.66523 14.9964,-19.51807 1.07996,2.91941 13.58034,65.61536 20.11628,100.89361 10.12834,54.6686 21.97466,128.09972 28.59421,177.2454 4.32955,32.14396 5.42369,70.75274 2.48523,87.69632 -7.15708,41.2689 -29.56579,73.65783 -59.99917,86.72114 -8.7332,3.74866 -10.21859,3.9927 -25.93835,4.26131 -9.17106,0.15671 -18.75324,-0.23077 -21.29374,-0.86106 z"
+   id="path613" /><path
+   style="fill:#4d4d4d;stroke-width:1"
+   d="m 769.16932,660.38415 c -0.053,-0.0832 -0.49675,-0.81703 -0.98618,-1.6307 -3.24188,-5.38954 -6.6581,-10.27705 -9.91756,-14.18883 -1.50013,-1.80036 -2.75803,-3.17132 -4.56665,-4.97708 -2.40306,-2.39926 -4.01193,-3.80822 -6.39211,-5.59787 -1.17033,-0.87996 -3.64355,-2.56472 -4.33555,-2.95339 -0.18584,-0.10437 -0.33792,-0.20654 -0.33796,-0.22704 -3e-5,-0.0205 0.68836,-0.55445 1.52977,-1.18656 6.00006,-4.50754 13.51433,-11.59187 22.2791,-21.00435 8.66135,-9.30142 18.18008,-20.4298 29.57705,-34.57863 l 2.04394,-2.53746 h 0.70804 0.70804 l -0.13622,0.1513 c -0.0749,0.0832 -0.9336,1.13477 -1.90819,2.33678 -11.80375,14.55825 -22.9888,27.38826 -32.5046,37.28496 -0.81646,0.84914 -5.35026,5.51759 -10.0751,10.37432 -4.72485,4.85674 -8.59063,8.85374 -8.59063,8.88222 0,0.0285 1.21799,1.21996 2.70664,2.64771 2.76973,2.65643 4.5052,4.39264 5.93617,5.93866 4.38359,4.73604 8.30869,10.01626 12.92927,17.39298 1.27979,2.04318 2.43461,3.93405 2.43461,3.98636 0,0.0209 -0.22626,0.0379 -0.50279,0.0379 -0.44805,0 -0.51328,-0.0165 -0.59909,-0.1513 z"
+   id="path615" /><path
+   style="fill:#4d4d4d;stroke-width:1"
+   d="m 867.37286,477.50389 c 0.0572,-0.0926 1.57495,-2.30203 3.37276,-4.90994 13.0156,-18.88035 28.73065,-42.45844 40.99956,-61.5137 10.19528,-15.83465 18.59162,-29.28291 27.31393,-43.74822 3.01048,-4.99267 3.80865,-6.22733 3.86928,-5.98521 0.13724,0.54807 2.2247,10.51549 3.59897,17.18467 5.91025,28.68197 11.80196,59.02761 17.9791,92.60256 l 1.18776,6.45595 -0.59936,0.0418 c -0.32965,0.023 -0.6389,-0.0221 -0.68723,-0.10034 -0.0483,-0.0782 -0.25728,-1.09567 -0.46434,-2.26107 -4.68179,-26.35044 -20.21304,-104.41483 -21.20842,-106.59946 -0.34737,-0.7624 -0.97595,-0.56692 -2.14507,0.6671 -1.92853,2.03559 -4.38889,5.66878 -13.5172,19.96071 -20.62678,32.29475 -38.06393,58.71191 -55.61495,84.25626 l -2.77235,4.03497 -0.70822,0.0411 c -0.5401,0.0313 -0.68354,10e-4 -0.60422,-0.1272 z"
+   id="path617" /><path
+   style="fill:#4d4d4d;stroke-width:1"
+   d="m 797.38406,574.26115 c 0.50652,-0.57937 8.12417,-10.14174 10.74135,-13.48353 10.01354,-12.78593 20.13131,-26.20692 30.52005,-40.48419 25.88701,-35.57653 52.59961,-74.88872 82.34416,-121.18359 l 1.68511,-2.62273 12.91702,-0.0343 12.91701,-0.0343 0.15182,0.70679 c 1.41271,6.57701 9.35454,47.24539 12.8373,65.73705 5.57661,29.60892 12.93159,72.34264 18.29918,106.32145 0.409,2.58911 0.77536,4.84365 0.81415,5.01009 l 0.0705,0.30262 H 888.93 c -87.37131,0 -91.74189,-0.0112 -91.54594,-0.23537 z"
+   id="path619" /><path
+   style="fill:#4d4d4d;stroke-width:1"
+   d="m 797.38318,574.26115 c 0.51558,-0.59227 7.62526,-9.51932 10.47077,-13.14728 32.90441,-41.95251 71.07219,-96.56147 112.00723,-160.25555 l 2.80931,-4.37121 12.91913,-0.0343 12.91914,-0.0343 0.15488,0.70679 c 1.17698,5.37122 9.28747,46.91042 12.83511,65.73705 5.3957,28.63392 12.45466,69.5642 17.82622,103.36247 0.67012,4.21655 1.24955,7.80263 1.28758,7.96907 l 0.0692,0.30262 H 888.93 c -87.37097,0 -91.74193,-0.0113 -91.54682,-0.23537 z"
+   id="path621" /><path
+   style="fill:#4d4d4d;stroke-width:1"
+   d="m 798.29597,571.33764 c 0,-0.036 1.2582,-1.655 2.79599,-3.59785 18.63073,-23.53796 42.06724,-55.36466 63.04126,-85.60985 l 3.09348,-4.46088 0.71793,-0.006 0.71792,-0.006 -0.59663,0.84062 c -0.32815,0.46234 -1.64525,2.35373 -2.92689,4.20309 -22.09879,31.88772 -43.44875,60.84293 -62.30485,84.49899 l -3.35026,4.2031 h -0.59398 c -0.32668,0 -0.59397,-0.0294 -0.59397,-0.0654 z"
+   id="path623" /><path
+   style="fill:#4d4d4d;stroke-width:1"
+   d=""
+   id="path625" /><path
+   style="fill:#4d4d4d;stroke-width:1"
+   d="m 980.74818,574.1939 c -0.0374,-0.16644 -0.46512,-2.81439 -0.95045,-5.88433 -2.97435,-18.81454 -7.56941,-46.32011 -11.23464,-67.2495 -1.13817,-6.4992 -3.90949,-22.0013 -4.1056,-22.9657 l -0.0889,-0.43712 h 0.68931 c 0.37911,0 0.6893,0.0564 0.6893,0.12522 0,0.0689 0.60244,3.47338 1.33876,7.56557 3.95407,21.97543 8.09489,45.92112 11.17141,64.60242 1.87461,11.38311 3.89871,23.98996 3.89871,24.2827 0,0.22623 -0.0944,0.26336 -0.66993,0.26336 -0.58492,0 -0.67857,-0.0384 -0.73798,-0.30262 z"
+   id="path629" /><path
+   style="fill:#4d4d4d;stroke-width:1"
+   d="m 994.61798,678.49787 c -0.58839,-9.07248 -1.54144,-19.2302 -2.58382,-27.53867 -1.69175,-13.48446 -6.23374,-44.53355 -10.35308,-70.77382 -0.47849,-3.048 -0.86998,-5.5749 -0.86998,-5.61534 0,-0.0404 0.32244,-0.0735 0.71653,-0.0735 h 0.71653 l 0.22174,1.44587 c 0.12196,0.79522 0.7948,5.13786 1.49519,9.6503 5.95839,38.38835 10.25523,70.86742 12.42442,93.91392 l 0.24369,2.5891 h -0.88894 -0.88894 z"
+   id="path631" /><path
+   style="fill:#4d4d4d;stroke-width:1"
+   d="m 972.16286,789.52368 c 0.0591,-0.0942 0.65799,-0.98691 1.33075,-1.98386 8.57653,-12.7094 15.02466,-27.93139 18.8003,-44.38156 2.04084,-8.89182 2.76955,-14.6185 3.17479,-24.94957 0.17399,-4.43551 0.17575,-16.91924 0.003,-22.19233 -0.16672,-5.09284 -0.52194,-13.06372 -0.60389,-13.55077 l -0.0622,-0.36988 h 0.91492 0.91491 l 0.29689,3.73235 c 0.81536,10.25064 1.01571,15.16609 0.9196,22.56221 -0.0775,5.96252 -0.27056,9.65702 -0.76972,14.72764 -2.41377,24.52031 -9.82947,46.80466 -21.49447,64.59145 l -1.29995,1.98217 -1.1163,0.002 c -0.87078,10e-4 -1.09264,-0.036 -1.00874,-0.16954 z"
+   id="path633" /><path
+   style="fill:#4d4d4d;stroke-width:1"
+   d="m 901.99469,828.33791 c -9.64667,-0.45111 -18.98432,-2.56296 -26.98862,-6.10387 -17.03878,-7.53755 -30.97746,-21.6867 -44.95278,-45.63155 -5.03633,-8.62907 -9.15499,-16.53049 -18.06399,-34.65472 -10.65852,-21.68341 -14.33774,-28.8653 -21.29095,-41.56019 -1.64094,-2.99597 -3.30024,-6.03733 -3.68734,-6.75858 l -0.70381,-1.31136 0.78255,0.002 0.78255,0.002 2.01748,3.86292 c 5.64315,10.80507 8.17165,15.67701 15.96723,30.7659 27.90539,54.01283 31.2024,59.66751 41.8836,71.83438 9.51897,10.84299 23.27007,20.6327 34.9066,24.85078 5.00333,1.81364 7.46853,2.04014 22.10471,2.0309 17.21926,-0.0109 19.84779,-0.33263 27.17814,-3.32697 9.79555,-4.00134 17.90564,-9.15774 25.94008,-16.49274 4.48834,-4.09759 9.38556,-9.58891 12.99071,-14.56666 l 1.14057,-1.57482 1.12508,-0.006 1.12508,-0.006 -0.24049,0.36987 c -0.61906,0.95205 -3.03158,4.19291 -4.39617,5.90559 -8.17851,10.26475 -17.94274,18.45071 -28.54827,23.93379 -11.13379,5.75618 -23.01569,8.61137 -35.37324,8.50007 -1.55346,-0.014 -3.21789,-0.0438 -3.69872,-0.0663 z"
+   id="path635" /><path
+   style="fill:#4d4d4d;stroke-width:1"
+   d="m 786.13171,691.98432 c -0.0723,-0.13866 -0.71359,-1.35412 -1.42509,-2.70104 -0.7115,-1.34692 -2.63992,-5.04195 -4.28538,-8.21117 -4.71581,-9.08285 -7.72803,-14.69127 -9.96017,-18.54478 -0.5844,-1.00888 -1.06254,-1.87192 -1.06254,-1.91786 0,-0.0459 0.208,-0.0632 0.46221,-0.0384 0.43911,0.0429 0.55675,0.2072 2.35283,3.28639 2.47236,4.23857 4.64305,8.10004 7.73353,13.7573 2.81245,5.14832 7.53434,13.98121 7.68167,14.36955 0.0833,0.21953 10e-4,0.2521 -0.63498,0.2521 -0.54971,0 -0.76317,-0.0624 -0.86208,-0.2521 z"
+   id="path637" /><path
+   style="fill:#4d4d4d;stroke-width:0.999999"
+   d="M 6.6792728,745.96007 C 5.3392012,740.44792 4.2019336,734.24206 3.4486683,728.33126 2.8420429,723.57112 2.4856626,719.42317 2.1953912,713.74421 2.0822074,711.52985 2.0394189,703.32375 2.1277365,700.76921 2.4790527,690.60754 3.5645116,678.09235 5.7059106,659.51335 l 0.1491468,-1.29401 h 0.3631407 c 0.3604608,0 0.362863,10e-4 0.3255141,0.18486 -0.0849,0.41711 -1.091156,9.25894 -1.5816832,13.89802 -1.6028893,15.15908 -2.1088455,23.06586 -2.1077392,32.93849 4.907e-4,4.37415 0.059747,6.79065 0.2571489,10.48654 0.4946482,9.26112 1.6711871,18.03068 3.5713416,26.61967 0.3153915,1.42562 1.0197466,4.36885 1.1381557,4.75591 0.031704,0.10364 -0.015862,0.11764 -0.3996286,0.11764 H 6.9856918 Z"
+   id="path639" /><path
+   style="fill:#4d4d4d;stroke-width:0.999999"
+   d="m 5.8748873,658.06809 c 0.013762,-0.0832 0.1765181,-1.42173 0.3616791,-2.97454 1.9954089,-16.73409 5.3062136,-40.48263 8.9777936,-64.3981 0.862739,-5.6196 1.969361,-12.72941 2.01671,-12.95693 0.03634,-0.17459 0.059,-0.18486 0.408189,-0.18486 0.367777,0 0.369517,9.7e-4 0.331506,0.18486 -0.297459,1.43905 -4.206872,27.3569 -5.853072,38.80355 -2.043414,14.20863 -4.4797277,32.46072 -5.511544,41.29075 l -0.045167,0.38652 H 6.2054236 c -0.3313277,0 -0.3538537,-0.0103 -0.3305363,-0.15125 z"
+   id="path641" /><path
+   style="fill:#4d4d4d;stroke-width:0.999999"
+   d="m 17.290742,577.33519 c 0.02089,-0.12015 0.325623,-2.03344 0.677193,-4.25175 2.612775,-16.48585 5.876919,-36.11961 9.284136,-55.84388 l 0.728601,-4.21785 0.357442,-2.9e-4 c 0.309322,-2.6e-4 0.35262,0.0155 0.321623,0.11734 -0.07356,0.24159 -3.242323,18.82869 -4.672827,27.40952 -1.721361,10.32554 -5.988616,36.67588 -5.988616,36.97977 0,0.0141 -0.167744,0.0256 -0.372764,0.0256 h -0.372763 z"
+   id="path643" /><path
+   style="fill:#4d4d4d;stroke-width:0.999999"
+   d="m 28.046298,512.70182 c 0.08497,-0.57382 2.634866,-15.03203 3.737409,-21.19155 2.092274,-11.68878 4.877209,-26.90384 7.028652,-38.39995 l 0.864836,-4.6212 0.319301,-2.7e-4 c 0.1861,-1.6e-4 0.319302,0.0303 0.319302,0.0731 0,0.0404 -0.164865,0.94029 -0.366365,1.99983 -1.571633,8.26409 -4.899234,26.41343 -7.088683,38.66295 -1.538793,8.60923 -4.174254,23.60533 -4.174254,23.75202 0,0.0244 -0.154683,0.0444 -0.343739,0.0444 h -0.34374 z"
+   id="path645" /><path
+   style="fill:#4d4d4d;stroke-width:0.999999"
+   d="m 39.710805,448.40356 c 0,-0.25247 4.292075,-22.61726 6.492037,-33.82817 2.322199,-11.83383 5.34869,-26.86222 7.723074,-38.34981 0.317132,-1.53433 0.593091,-2.84263 0.613241,-2.90733 0.0284,-0.0912 0.111197,-0.11763 0.368214,-0.11763 0.196856,0 0.331577,0.0301 0.331577,0.0741 0,0.0408 -0.803676,3.99592 -1.785946,8.7892 -2.442755,11.92015 -3.007829,14.69893 -4.403654,21.65518 -2.840413,14.15551 -5.651466,28.57431 -8.144954,41.7781 l -0.558558,2.95774 -0.317516,0.0205 c -0.234465,0.0151 -0.317515,-0.004 -0.317515,-0.0719 z"
+   id="path647" /><path
+   style="fill:#4d4d4d;stroke-width:0.999999"
+   d=""
+   id="path649" /><path
+   style="fill:#4d4d4d;stroke-width:0.999999"
+   d="m 99.213545,429.04479 c -1.63935,-2.45169 -8.10151,-12.36766 -11.619974,-17.83047 -7.305161,-11.34208 -11.820628,-18.52836 -23.072647,-36.71969 -3.893349,-6.29445 -7.099989,-11.44445 -7.125866,-11.44445 -0.02588,0 -0.514026,2.28376 -1.084775,5.07501 l -1.037724,5.075 -0.352912,2e-4 c -0.194102,1.3e-4 -0.352913,-0.0143 -0.352913,-0.0321 0,-0.028 0.739276,-3.56738 2.1204,-10.15171 0.20939,-0.99823 0.402846,-1.83873 0.429904,-1.86777 0.02706,-0.029 0.770414,1.1507 1.651902,2.62164 11.492042,19.17671 26.380953,42.78857 40.587757,64.36686 l 1.183883,1.79818 h -0.36573 -0.365739 z"
+   id="path651" /><path
+   style="fill:#4d4d4d;stroke-width:0.999999"
+   d="m 45.525456,811.36904 c -2.780194,-2.24749 -4.830049,-4.07673 -7.250032,-6.46974 -2.599436,-2.57047 -4.480892,-4.61257 -6.598556,-7.16195 -7.689293,-9.25687 -14.010121,-20.10938 -18.890727,-32.43432 -2.085786,-5.26722 -4.0447964,-11.28248 -5.4675811,-16.78855 l -0.3343766,-1.29401 h 0.42731 c 0.3488088,0 0.4337425,0.0216 0.4623245,0.11764 0.019258,0.0647 0.129986,0.48063 0.2460623,0.92429 1.7463557,6.67484 4.3800839,14.31277 7.0614389,20.47849 5.60125,12.87996 13.098196,24.32025 21.997164,33.56752 3.213828,3.33961 6.416326,6.26163 9.640985,8.79662 0.415933,0.32697 0.756241,0.60653 0.756241,0.62124 0,0.0147 -0.355433,0.0259 -0.789852,0.0249 l -0.789851,-0.002 -0.47055,-0.38039 z"
+   id="path653" /><path
+   style="fill:#4d4d4d;stroke-width:0.999999"
+   d="m 90.788851,828.51385 c -3.204205,-0.17019 -5.237204,-0.35064 -7.474558,-0.66346 -13.070819,-1.82751 -25.154413,-6.9208 -36.184842,-15.25209 l -1.074644,-0.81168 0.788503,-0.0189 0.788503,-0.0189 0.924744,0.69674 c 10.533017,7.93594 22.512569,13.02323 34.36739,14.59461 8.329117,1.10404 16.874881,0.99943 24.438333,-0.29917 17.25741,-2.96298 32.36703,-12.05593 45.68156,-27.4911 3.23226,-3.74708 6.09225,-7.50098 9.31493,-12.22639 l 1.16363,-1.70624 v 0.85547 0.85547 l -0.9849,1.45576 c -6.98081,10.31822 -14.57891,18.73097 -22.42192,24.82591 -13.25619,10.30162 -28.63643,15.32976 -46.604263,15.23596 -1.294012,-0.007 -2.519122,-0.0211 -2.722466,-0.0319 z"
+   id="path655" /><path
+   style="fill:#4d4d4d;stroke-width:0.999999"
+   d=""
+   id="path657" /><path
+   style="fill:#4d4d4d;stroke-width:0.999999"
+   d="m 163.58273,786.04707 v -0.86091 l 0.5636,-0.88348 c 4.11656,-6.45305 12.58334,-21.7566 20.36719,-36.81332 l 1.65069,-3.19302 0.40353,-0.02 0.40353,-0.0199 -1.64817,3.34741 c -7.44931,15.12945 -13.41583,26.16964 -18.73832,34.67259 -1.09141,1.74359 -2.84344,4.46419 -2.94153,4.56769 -0.036,0.038 -0.0605,-0.2842 -0.0605,-0.79705 z"
+   id="path659" /><path
+   style="fill:#4d4d4d;stroke-width:0.999999"
+   d="m 186.63671,743.37205 c 7.15893,-14.3032 18.84875,-36.99317 26.27727,-51.00424 0.9703,-1.8301 1.91137,-3.60665 2.09127,-3.94789 l 0.3271,-0.62044 0.38652,-10e-4 c 0.21259,-7.5e-4 0.38653,0.01 0.38653,0.0239 0,0.0339 -1.51991,2.91465 -2.80631,5.31887 -1.28702,2.40539 -2.25156,4.174 -4.05094,7.42796 -5.74999,10.39816 -10.24111,19.17303 -20.14416,39.35813 -1.12461,2.29225 -2.09443,4.20554 -2.15517,4.25175 -0.0607,0.0462 -0.25611,0.084 -0.43417,0.084 h -0.32374 z"
+   id="path661" /><path
+   style="fill:#4d4d4d;stroke-width:0.999999"
+   d="m 215.38897,687.75362 c 0,-0.0771 3.89631,-7.32667 6.37157,-11.85505 7.09132,-12.97333 12.00862,-21.39917 14.76397,-25.29819 2.71029,-3.83528 6.73653,-8.60721 10.17647,-12.06125 0.69122,-0.69406 3.04149,-2.87687 5.22282,-4.85071 2.18134,-1.97383 3.97566,-3.61281 3.98738,-3.64217 0.0117,-0.0294 -0.42406,-0.34977 -0.96842,-0.71204 l -0.98974,-0.65867 0.28177,-0.0208 c 0.27005,-0.0199 0.33739,0.0211 1.61965,0.98584 0.73584,0.55364 1.39246,1.03716 1.45914,1.07448 0.0667,0.0373 0.10638,0.0797 0.0882,0.0941 -0.0182,0.0144 -0.48224,0.30891 -1.03125,0.65437 -2.34077,1.47294 -4.9281,3.44449 -7.40448,5.64226 -1.14186,1.01338 -4.00916,3.87861 -5.11854,5.11483 -6.07516,6.76977 -11.4843,14.95498 -18.52431,28.03132 -1.58663,2.94706 -2.77911,5.21636 -5.93441,11.29319 -1.46857,2.82835 -2.80539,5.392 -2.9707,5.69702 l -0.30058,0.55457 h -0.36427 c -0.20035,0 -0.36428,-0.0194 -0.36428,-0.0431 z"
+   id="path663" /><path
+   style="fill:#4d4d4d;stroke-width:0.999999"
+   d="m 253.14815,628.13833 c -0.84964,-0.58283 -1.58944,-1.15347 -2.70118,-2.08352 -5.09197,-4.25982 -14.13459,-13.53948 -24.27265,-24.90895 -7.09632,-7.95827 -13.94565,-16.02285 -21.5643,-25.39037 l -0.7244,-0.89068 0.39077,0.004 0.39077,0.004 0.84027,1.05389 c 2.82962,3.54898 8.8733,10.85954 12.59829,15.23917 6.79501,7.98917 13.49864,15.48809 18.38826,20.56974 6.99769,7.27253 12.12835,12.12451 16.84147,15.9267 0.59155,0.47722 1.10428,0.89283 1.1394,0.92358 0.0351,0.0308 -0.0858,0.0545 -0.26888,0.0528 -0.30132,-0.003 -0.40122,-0.0501 -1.05782,-0.50049 z"
+   id="path665" /><path
+   style="fill:#4d4d4d;stroke-width:0.999999"
+   d="m 149.98255,576.34368 v -44.50057 l 10.40251,0.003 10.40252,0.003 1.04193,1.4182 c 1.49017,2.02832 8.31513,11.15019 10.4517,13.96919 12.37022,16.32132 22.53471,29.13964 31.68939,39.96312 10.48693,12.39859 20.40208,23.35275 28.48692,31.47207 l 2.16303,2.17224 h -47.319 -47.319 z"
+   id="path667" /><path
+   style="fill:#4d4d4d;stroke-width:0.999999"
+   d="m 149.98255,576.34368 v -44.50057 l 10.40251,0.003 10.40252,0.003 1.27498,1.7279 c 14.38683,19.49738 29.72316,39.15179 41.00264,52.54727 10.94933,13.0034 23.37849,26.71856 30.44284,33.59266 l 1.15585,1.12473 -47.34067,10e-4 -47.34067,10e-4 z"
+   id="path669" /><path
+   style="fill:#4d4d4d;stroke-width:0.999999"
+   d="m 201.7578,572.19276 c -8.31989,-10.39785 -18.06092,-23.08359 -28.11862,-36.61886 -1.23628,-1.66373 -2.36353,-3.18377 -2.505,-3.37787 l -0.25722,-0.35292 h 0.32608 0.32608 l 3.09113,4.15007 c 10.2925,13.81844 20.74117,27.34889 29.90054,38.71953 l 0.12252,0.1521 h -0.37373 -0.37373 z"
+   id="path671" /><path
+   style="fill:#4d4d4d;stroke-width:0.999999"
+   d="m 168.62538,528.80135 c -18.04364,-24.43061 -39.30444,-54.74574 -59.61376,-85.00146 l -2.26742,-3.37788 h 0.37161 0.37161 l 3.08705,4.62147 c 15.08036,22.57604 31.99122,46.92606 47.48994,68.38097 3.27519,4.53386 10.65668,14.64276 11.52267,15.78022 l 0.16633,0.21847 h -0.33439 -0.3344 z"
+   id="path673" /><path
+   style="fill:#333333;stroke-width:0.999999"
+   d="m 103.30315,435.23862 c -1.88556,-2.84762 -3.438377,-5.20576 -3.450701,-5.24032 -0.01232,-0.0345 0.138925,-0.0618 0.336111,-0.0605 l 0.35851,0.002 3.42829,5.18576 c 1.88556,2.85216 3.43838,5.21061 3.4507,5.24098 0.0123,0.0304 -0.13892,0.0539 -0.33611,0.0523 l -0.35851,-0.003 z"
+   id="path675" /><path
+   style="fill:#333333;stroke-width:1"
+   d="M 77.240174,389.88833 C 70.887343,379.76577 64.755073,369.7708 59.603102,361.14169 c -1.136514,-1.90356 -2.157966,-3.55654 -2.269895,-3.67328 l -0.203506,-0.21225 0.885888,-4.12242 c 3.898282,-18.14043 7.43072,-33.78738 10.894861,-48.25885 l 0.221199,-0.92406 h 0.357043 c 0.196374,0 0.357043,0.01 0.357043,0.0213 0,0.0117 -0.288463,1.22896 -0.641029,2.70498 -0.920287,3.85277 -2.039852,8.62842 -3.047502,12.99951 -2.347119,10.1816 -8.423506,37.3633 -8.378608,37.4803 0.03707,0.0966 18.287805,29.37224 20.850133,33.44528 0.787633,1.25201 1.43206,2.2878 1.43206,2.30175 0,0.014 -0.205225,0.0254 -0.456056,0.0254 h -0.456056 z"
+   id="path677" /><path
+   style="fill:#333333;stroke-width:1"
+   d=""
+   id="path679" /><path
+   style="fill:#333333;stroke-width:1"
+   d="m 69.205001,303.70261 c 0.08173,-0.43838 1.945209,-8.01625 2.86411,-11.64694 3.683531,-14.55409 6.709181,-25.27661 9.434349,-33.43414 l 1.010286,-3.0242 0.487231,-0.0197 c 0.267977,-0.0109 0.487231,-4.5e-4 0.487231,0.0231 0,0.0236 -0.259901,0.75827 -0.577557,1.63265 -3.264821,8.98667 -7.273045,23.11128 -11.779291,41.50912 -0.62468,2.55041 -1.162935,4.75807 -1.196124,4.90592 -0.06034,0.26879 -0.06038,0.26882 -0.419135,0.28941 l -0.358792,0.0206 z"
+   id="path681" /><path
+   style="fill:#333333;stroke-width:1"
+   d="m 82.547348,255.53395 c 0,-0.0393 0.724229,-2.03214 1.063812,-2.92721 1.061302,-2.79738 2.567112,-5.5935 4.195877,-7.79129 0.596693,-0.80515 13.198513,-16.88979 13.877393,-17.71274 2.59522,-3.14599 5.94904,-5.98924 9.35754,-7.93299 0.31418,-0.17916 0.58636,-0.34494 0.60484,-0.36839 0.0185,-0.0234 0.86526,-0.50676 1.88172,-1.07404 2.27411,-1.26915 4.62482,-2.62517 7.06605,-4.0761 l 1.85771,-1.10412 0.50338,0.0198 0.50339,0.0198 -1.35304,0.83535 c -2.3375,1.44316 -5.38489,3.27885 -7.2334,4.35728 -2.07224,1.20895 -2.90556,1.74896 -4.20027,2.72187 -6.15442,4.62473 -13.631849,12.81274 -20.543244,22.49545 -2.619667,3.67009 -3.334147,4.87963 -4.737419,8.01993 -0.508689,1.13836 -1.68106,4.00194 -1.799782,4.39606 -0.04192,0.13916 -0.08535,0.15121 -0.545053,0.15121 -0.274727,0 -0.499504,-0.0134 -0.499504,-0.0298 z"
+   id="path683" /><path
+   style="fill:#333333;stroke-width:0.999999"
+   d="m 80.431206,264.88271 c 0,-0.0656 1.130965,-3.5117 1.698535,-5.17545 1.74903,-5.12702 3.80733,-10.01325 5.245383,-12.45209 0.830116,-1.40783 2.839586,-4.28752 5.080702,-7.28097 6.116646,-8.16997 12.899224,-15.36655 18.298934,-19.4159 1.23027,-0.9226 2.12736,-1.50514 4.05417,-2.63258 4.49299,-2.62903 11.10014,-6.71457 17.6646,-10.92293 6.84214,-4.38638 7.77354,-4.97132 11.7902,-7.40456 4.5609,-2.76294 9.03034,-5.34227 12.41073,-7.16228 12.28102,-6.61212 30.46341,-12.59089 52.95244,-17.41193 6.36907,-1.36536 15.78138,-3.14545 21.86357,-4.13492 l 0.35164,-0.0572 v 47.04394 47.04394 h -75.70545 c -41.638,0 -75.705454,-0.0167 -75.705454,-0.0371 z"
+   id="path685" /><path
+   style="fill:#333333;stroke-width:0.999999"
+   d="m 80.472971,264.73361 c 0.208786,-0.73452 1.921354,-5.81991 2.458916,-7.30165 1.572229,-4.33367 3.123332,-7.90064 4.38942,-10.09406 0.759865,-1.31641 3.078188,-4.64238 5.204863,-7.46711 6.726898,-8.93494 14.02206,-16.50663 19.44876,-20.18597 0.60307,-0.40889 2.06453,-1.31295 3.24769,-2.00903 5.01348,-2.94956 11.01732,-6.67727 19.0262,-11.81312 10.82828,-6.94387 20.2047,-12.44749 25.92424,-15.21658 14.91919,-7.22308 36.10794,-13.38787 62.7747,-18.26407 3.03333,-0.55466 8.6718,-1.53485 8.83216,-1.53538 0.034,-1.1e-4 0.0713,21.1663 0.0827,47.03646 l 0.0208,47.03667 H 156.15177 80.420055 Z"
+   id="path687" /><path
+   style="fill:#333333;stroke-width:0.999999"
+   d="m 122.55184,212.51391 c 0.019,-0.0179 0.72327,-0.45129 1.56514,-0.96306 4.94389,-3.00542 9.65971,-6.02725 15.34793,-9.83473 2.41182,-1.61438 5.23198,-3.50157 6.26703,-4.19375 15.44392,-10.32806 39.24969,-18.63753 71.42414,-24.93077 3.7449,-0.7325 8.05839,-1.52001 11.58335,-2.11478 1.5017,-0.25338 2.81413,-0.47936 2.91652,-0.50217 0.17311,-0.0386 0.18616,-0.0134 0.18616,0.35856 v 0.40005 l -1.59271,0.27192 c -29.70268,5.071 -51.83288,11.11479 -68.11422,18.60211 -6.36259,2.92597 -15.97557,8.49335 -28.13099,16.29213 -3.27997,2.10439 -7.44,4.74186 -9.55334,6.05684 -0.89911,0.55946 -0.97425,0.59023 -1.44103,0.59023 -0.27085,0 -0.47694,-0.0147 -0.45798,-0.0326 z"
+   id="path689" /><path
+   style="fill:#333333;stroke-width:1"
+   d="m 231.91265,170.29473 v -0.35084 l 2.16262,-0.34282 c 53.5121,-8.48277 121.85698,-12.42456 222.06063,-12.80736 9.30868,-0.0356 21.84719,-0.0941 27.86335,-0.13011 10.60583,-0.0635 10.93849,-0.0584 10.93849,0.16784 0,0.22302 -0.26091,0.23695 -5.92371,0.3163 -3.25804,0.0456 -10.29596,0.0836 -15.63984,0.0844 -20.55104,0.003 -59.40522,0.47699 -82.24235,1.00334 -26.78063,0.61724 -44.30351,1.26618 -61.05492,2.26108 -36.42709,2.16349 -69.4288,5.54186 -95.42579,9.76869 -1.28644,0.20916 -2.42887,0.3803 -2.53873,0.3803 -0.13517,0 -0.19975,-0.11343 -0.19975,-0.35083 z"
+   id="path691" /><path
+   style="fill:#333333;stroke-width:1"
+   d="m 543.88289,157.33804 c 0.1357,-0.0261 0.33207,-0.0251 0.43637,0.002 0.1043,0.0273 -0.007,0.0487 -0.24673,0.0474 -0.24,-0.001 -0.32534,-0.0236 -0.18964,-0.0496 z"
+   id="path695" /><path
+   style="fill:#333333;stroke-width:1"
+   d=""
+   id="path697" /><path
+   style="fill:#333333;stroke-width:1"
+   d="m 666.14597,160.51638 c -6.81918,-0.40074 -21.02211,-1.0286 -31.90928,-1.41058 -32.57131,-1.14278 -79.85777,-1.86623 -126.00074,-1.92773 -8.67005,-0.0116 -15.24827,-0.0488 -14.61826,-0.0828 1.13775,-0.0614 1.47931,-0.14741 1.35898,-0.34211 -0.13297,-0.21516 51.44237,-0.0617 75.33238,0.22409 36.18648,0.43295 66.68132,1.32503 93.37851,2.73165 3.38789,0.1785 6.272,0.32454 6.40913,0.32454 0.20428,0 0.24931,0.0591 0.24931,0.32728 v 0.32727 l -0.90001,-0.0153 c -0.495,-0.008 -1.98001,-0.0787 -3.30002,-0.1563 z"
+   id="path699" /><path
+   style="fill:#333333;stroke-width:1"
+   d="m 549.29338,227.16798 v -69.62164 l 2.17014,1.2e-4 c 8.46526,4.3e-4 50.42952,0.74314 65.14849,1.15304 57.45089,1.59991 101.77718,4.86016 138.7118,10.2024 41.50743,6.00367 71.25819,14.29296 90.50889,25.21801 6.89654,3.91388 24.283,14.74644 40.22003,25.05891 5.29845,3.4285 7.8313,5.50198 11.23278,9.19553 4.98449,5.41249 13.41848,16.78769 16.20223,21.85248 2.70332,4.91848 5.47568,13.16854 9.84271,29.29024 1.36797,5.05007 4.36448,16.76519 4.36448,17.06327 0,0.1608 -43.82795,0.20927 -189.20078,0.20927 H 549.29338 Z"
+   id="path701" /><path
+   style="fill:#333333;stroke-width:1"
+   d="m 549.29338,227.16798 v -69.62164 l 2.25871,6.3e-4 c 11.26831,0.003 51.91347,0.76349 71.26032,1.33307 102.25977,3.01062 171.5609,12.62465 210.8472,29.2505 9.05758,3.83314 16.63927,8.22904 41.4205,24.01579 14.71755,9.37575 15.7268,10.06297 18.78429,12.79069 5.12459,4.57186 16.16001,18.8189 19.70751,25.44295 2.67407,4.99315 5.2269,12.51665 9.25544,27.27698 1.5996,5.86081 4.86758,18.5657 4.86758,18.92358 0,0.16054 -43.92379,0.20908 -189.20078,0.20908 H 549.29338 Z"
+   id="path703" /><path
+   style="fill:#333333;stroke-width:1"
+   d="m 927.96594,296.56817 c -0.0397,-0.12179 -0.86926,-3.33101 -1.84347,-7.13159 -2.24036,-8.74016 -4.10353,-15.59009 -5.80607,-21.34596 -4.32846,-14.63339 -5.98392,-18.08708 -13.58642,-28.34469 -6.68506,-9.01975 -11.33688,-14.16233 -15.88314,-17.55876 -3.36903,-2.51695 -28.27903,-18.35195 -38.94726,-24.75832 -7.25457,-4.35644 -10.77962,-6.23734 -16.14772,-8.61612 -20.21036,-8.95584 -49.47875,-16.00835 -87.42564,-21.06607 -21.5749,-2.87559 -45.4942,-5.09239 -72.77987,-6.74513 -2.41907,-0.14652 -4.55156,-0.26641 -4.73888,-0.26641 -0.2062,0 -0.34061,-0.12231 -0.34067,-0.31002 -9e-5,-0.25806 0.14093,-0.3025 0.84148,-0.26513 3.04467,0.16239 13.35358,0.81548 17.58267,1.11389 79.62208,5.6182 132.54598,16.81701 161.38756,34.14995 0.73076,0.43916 4.27827,2.76471 7.88336,5.16788 10.88693,7.25728 19.00205,12.30646 27.78187,17.2857 4.5436,2.57679 7.05239,4.36328 9.34026,6.65116 1.66239,1.66238 15.02988,18.52618 16.96559,21.40299 2.07556,3.08463 3.42615,6.15186 5.81798,13.21279 1.79011,5.28456 3.87233,12.27261 6.14963,20.63847 1.27352,4.67839 4.3635,16.63616 4.3635,16.8861 0,0.21578 -0.54046,0.12723 -0.61476,-0.10073 z"
+   id="path705" /><path
+   style="fill:#333333;stroke-width:0.999999"
+   d="m 933.14369,318.64226 c 0,-0.0276 -0.67778,-2.93689 -1.29205,-5.54592 -1.61194,-6.84656 -3.35249,-14.00687 -4.82962,-19.86815 -0.31854,-1.26398 -0.57347,-2.31526 -0.5665,-2.33617 0.007,-0.0209 0.18028,0.61631 0.38512,1.41605 0.67029,2.61688 1.08162,4.18893 1.11762,4.27148 0.0794,0.18194 0.50248,0.30398 0.60899,0.17565 0.0521,-0.0627 0.025,-0.19228 -0.37421,-1.7885 -1.89578,-7.58097 -4.26345,-16.45099 -6.09747,-22.84302 -0.17613,-0.61387 -0.31388,-1.12315 -0.30611,-1.13173 0.041,-0.0452 0.11462,0.18261 0.52885,1.63579 3.00863,10.55468 6.21334,23.05388 9.82199,38.30836 0.43933,1.85715 1.72187,7.34846 1.7764,7.60586 l 0.0248,0.11701 h -0.39891 c -0.2194,0 -0.3989,-0.008 -0.3989,-0.0167 z"
+   id="path707" /><path
+   style="fill:#333333;stroke-width:1"
+   d="m 930.64027,375.83766 c 0.0358,-0.0606 0.61415,-1.00942 1.28519,-2.10852 3.42821,-5.61513 9.90884,-16.39759 9.90884,-16.4863 0,-0.0456 -5.02426,-22.53299 -5.62696,-25.18497 -0.0639,-0.28135 -0.11625,-0.52695 -0.11625,-0.54577 0,-0.0212 0.14562,-0.0342 0.38397,-0.0342 0.33669,0 0.38612,0.007 0.40135,0.0588 0.0233,0.0789 1.41058,6.33724 2.02123,9.11832 1.34582,6.12924 3.64197,16.78175 3.64197,16.89614 0,0.0522 -0.0323,0.10678 -2.71362,4.59083 -1.9463,3.25484 -4.71553,7.83248 -6.94869,11.48643 l -1.40607,2.30064 -0.44804,0.009 -0.44803,0.009 z"
+   id="path709" /><path
+   style="fill:#333333;stroke-width:1"
+   d="m 935.71052,329.85721 c -0.43732,-1.94805 -1.85283,-8.14989 -2.25408,-9.87593 -0.15804,-0.67983 -0.28734,-1.25085 -0.28734,-1.26894 0,-0.0201 0.15288,-0.0292 0.39394,-0.0234 l 0.39394,0.009 0.12835,0.55417 c 0.56872,2.45558 2.06623,9.04249 2.54267,11.18415 0.11301,0.50799 0.21326,0.95007 0.22278,0.98239 0.0158,0.0537 -0.0173,0.0588 -0.37959,0.0586 l -0.3969,-1.5e-4 z"
+   id="path711" /><path
+   style="fill:#333333;stroke-width:1"
+   d="m 916.35167,398.74235 c 0.009,-0.0231 0.24699,-0.40471 0.52885,-0.84804 3.76571,-5.92308 10.13368,-16.12708 13.13138,-21.04167 0.26478,-0.4341 0.50627,-0.81619 0.53663,-0.8491 0.0483,-0.0523 0.10803,-0.0586 0.47794,-0.0504 l 0.42274,0.009 -0.94036,1.52817 c -3.45607,5.61643 -7.90686,12.74356 -12.16951,19.48724 l -1.14041,1.80418 -0.43182,0.001 c -0.33212,8.2e-4 -0.42803,-0.009 -0.41544,-0.0409 z"
+   id="path713" /><path
+   style="fill:#333333;stroke-width:0.999999"
+   d="m 185.80848,547.5184 c -0.18202,-0.24083 -0.87404,-1.15406 -1.53782,-2.0294 -5.5758,-7.3529 -11.78299,-15.69832 -17.69474,-23.79013 -2.45054,-3.35423 -5.3972,-7.41246 -5.3972,-7.4332 0,-0.007 0.23198,-0.0127 0.51551,-0.0123 l 0.5155,7e-4 0.20617,0.2857 c 1.9983,2.76913 7.38548,10.11042 10.68031,14.55441 4.52484,6.10298 9.95705,13.32722 13.55738,18.02982 0.34027,0.44444 0.61867,0.81389 0.61867,0.82099 0,0.007 -0.25489,0.0126 -0.56642,0.0121 l -0.56642,-7.9e-4 -0.33094,-0.43788 z"
+   id="path715" /><path
+   style="fill:#333333;stroke-width:1"
+   d="M 246.25417,617.31141 C 233.56548,605.21121 214.39272,582.84517 192.83699,554.99746 169.10357,524.3364 141.67075,486.10129 116.70878,448.89204 l -4.48458,-6.68488 h 116.03575 116.03574 v 88.95257 88.95257 h -47.5522 -47.55222 z"
+   id="path717" /><path
+   style="fill:#333333;stroke-width:1"
+   d="m 159.74413,512.17616 c -11.67755,-16.21207 -23.3413,-32.85273 -34.96236,-49.88077 -5.06489,-7.42146 -13.48269,-19.91511 -13.48269,-20.01094 0,-0.0425 0.16628,-0.076 0.36952,-0.0745 0.30695,0.002 0.46923,0.15589 0.95852,0.907 3.6853,5.65743 18.40195,27.21287 26.53351,38.86356 6.90516,9.89355 20.18489,28.55869 22.63333,31.81197 l 0.32867,0.4367 -0.45265,-0.004 c -0.42835,-0.004 -0.53173,-0.11367 -1.92585,-2.04913 z"
+   id="path719" /><path
+   style="fill:#333333;stroke-width:1"
+   d="m 245.30137,617.70478 c -10.64361,-10.1613 -26.83592,-28.66277 -43.53329,-49.7415 -4.91055,-6.19909 -12.43261,-15.8859 -15.14495,-19.50349 l -0.3778,-0.50388 h 0.47495 c 0.4642,0 0.54583,0.092 3.60665,4.06467 17.04892,22.12801 32.13594,40.36729 44.37486,53.64648 3.06355,3.32395 9.81391,10.36117 10.0125,10.438 0.0616,0.0238 1.03559,0.93522 2.16438,2.02529 l 2.05235,1.98195 h -0.55393 c -0.53456,0 -0.64215,-0.0842 -3.07572,-2.40752 z"
+   id="path721" /><path
+   style="fill:#333333;stroke-width:1"
+   d="m 247.9947,619.91546 c -0.8616,-0.37472 -7.16556,-6.62669 -12.87897,-12.77274 -12.90759,-13.88502 -29.97372,-34.52886 -46.81881,-56.63379 -0.98556,-1.29331 -1.89931,-2.45561 -2.03056,-2.58288 -0.76168,-0.73868 -23.88234,-31.91824 -24.76313,-33.39454 -0.0709,-0.11888 0.0143,-0.16796 0.29168,-0.16796 0.35565,0 0.58886,0.27028 2.5217,2.92253 5.82906,7.99866 16.54779,22.3983 21.20027,28.48063 1.37145,1.79294 1.53445,2.06011 1.32967,2.17942 -0.19387,0.11295 -0.19804,0.13667 -0.0246,0.14006 0.33619,0.007 0.77358,0.53779 6.19907,7.52878 12.65523,16.30681 22.42103,28.29136 32.68369,40.10927 7.35869,8.47387 16.11678,17.80253 21.17315,22.55255 1.86233,1.74949 2.06905,2.0528 1.11685,1.63867 z"
+   id="path723" /><path
+   style="fill:#333333;stroke-width:0.999995"
+   d="m 150.0014,497.13192 c -12.79964,-18.04469 -25.12116,-35.9279 -36.7032,-53.27027 -1.80647,-2.70492 -3.3055,-4.89704 -3.33117,-4.87137 -0.0257,0.0257 0.40931,0.73097 0.9666,1.56735 0.5573,0.83637 1.01326,1.53779 1.01326,1.5587 0,0.0209 -0.17313,0.0545 -0.38473,0.0747 l -0.38473,0.0367 -4.68681,-7.08352 c -9.22656,-13.94476 -15.936446,-24.28115 -23.906168,-36.82679 -1.79154,-2.82018 -3.277755,-5.18078 -3.302699,-5.24578 -0.03158,-0.0823 0.09757,-0.127 0.42516,-0.1472 l 0.470513,-0.029 -6.301483,-10.07438 c -3.465816,-5.5409 -6.304143,-10.10644 -6.307395,-10.14565 -0.0033,-0.0392 35.620292,-0.0713 79.163432,-0.0713 h 79.16935 v 62.9173 62.9173 h -37.48648 -37.48648 z m -40.05037,-58.32595 c 0,-0.0231 -0.0428,-0.0683 -0.095,-0.10065 -0.0523,-0.0323 -0.0951,-0.0134 -0.0951,0.0419 0,0.0554 0.0428,0.10065 0.0951,0.10065 0.0523,0 0.095,-0.0189 0.095,-0.0419 z m -0.19009,-0.28512 c 0,-0.0231 -0.0428,-0.0684 -0.095,-0.10065 -0.0523,-0.0323 -0.095,-0.0135 -0.095,0.0419 0,0.0554 0.0428,0.10065 0.095,0.10065 0.0523,0 0.095,-0.0189 0.095,-0.0419 z m -0.19008,-0.28513 c 0,-0.0231 -0.0428,-0.0683 -0.095,-0.10065 -0.0523,-0.0323 -0.095,-0.0134 -0.095,0.0419 0,0.0554 0.0428,0.10065 0.095,0.10065 0.0523,0 0.095,-0.0189 0.095,-0.0419 z m -0.19008,-0.28512 c 0,-0.0231 -0.0428,-0.0683 -0.095,-0.10065 -0.0523,-0.0323 -0.095,-0.0134 -0.095,0.0419 0,0.0554 0.0428,0.10065 0.095,0.10065 0.0523,0 0.095,-0.0189 0.095,-0.0419 z m -0.19008,-0.28512 c 0,-0.0231 -0.0428,-0.0684 -0.095,-0.10065 -0.0523,-0.0323 -0.0951,-0.0134 -0.0951,0.0419 0,0.0553 0.0428,0.10065 0.0951,0.10065 0.0523,0 0.095,-0.0189 0.095,-0.0419 z m -0.19009,-0.28513 c 0,-0.0231 -0.0428,-0.0683 -0.095,-0.10065 -0.0523,-0.0323 -0.095,-0.0134 -0.095,0.0419 0,0.0554 0.0428,0.10065 0.095,0.10065 0.0523,0 0.095,-0.0189 0.095,-0.0419 z m -0.19008,-0.28512 c 0,-0.0231 -0.0428,-0.0684 -0.095,-0.10065 -0.0523,-0.0323 -0.095,-0.0134 -0.095,0.0419 0,0.0554 0.0428,0.10065 0.095,0.10065 0.0523,0 0.095,-0.0189 0.095,-0.0419 z m -0.19008,-0.28513 c 0,-0.023 -0.0428,-0.0683 -0.095,-0.10065 -0.0523,-0.0323 -0.095,-0.0134 -0.095,0.0419 0,0.0553 0.0428,0.10065 0.095,0.10065 0.0523,0 0.095,-0.0189 0.095,-0.0419 z m -0.19008,-0.28512 c 0,-0.0231 -0.0428,-0.0683 -0.095,-0.10065 -0.0523,-0.0323 -0.0951,-0.0134 -0.0951,0.0419 0,0.0554 0.0428,0.10065 0.0951,0.10065 0.0523,0 0.095,-0.0189 0.095,-0.0419 z m -0.19009,-0.28512 c 0,-0.0231 -0.0428,-0.0684 -0.095,-0.10065 -0.0523,-0.0323 -0.095,-0.0134 -0.095,0.0419 0,0.0554 0.0428,0.10065 0.095,0.10065 0.0523,0 0.095,-0.0189 0.095,-0.0419 z m -0.19008,-0.28513 c 0,-0.0231 -0.0428,-0.0683 -0.095,-0.10065 -0.0523,-0.0323 -0.095,-0.0134 -0.095,0.0419 0,0.0554 0.0428,0.10066 0.095,0.10066 0.0523,0 0.095,-0.0189 0.095,-0.0419 z m -0.19008,-0.28512 c 0,-0.023 -0.0428,-0.0683 -0.095,-0.10065 -0.0523,-0.0323 -0.095,-0.0134 -0.095,0.0419 0,0.0554 0.0428,0.10065 0.095,0.10065 0.0523,0 0.095,-0.0189 0.095,-0.0419 z m -0.19008,-0.28512 c 0,-0.0231 -0.0428,-0.0684 -0.095,-0.10065 -0.0523,-0.0323 -0.095,-0.0134 -0.095,0.0419 0,0.0553 0.0428,0.10065 0.095,0.10065 0.0523,0 0.095,-0.0189 0.095,-0.0419 z m -0.19008,-0.28513 c 0,-0.0231 -0.0428,-0.0683 -0.0951,-0.10065 -0.0523,-0.0323 -0.095,-0.0134 -0.095,0.0419 0,0.0554 0.0428,0.10065 0.095,0.10065 0.0523,0 0.0951,-0.0189 0.0951,-0.0419 z m -0.33837,-0.50457 c -1.13791,-1.74796 -2.36322,-3.53154 -2.40052,-3.49424 -0.0624,0.0624 2.38274,3.75058 2.48845,3.7534 0.0452,10e-4 0.006,-0.11541 -0.0879,-0.25916 z m -2.41783,-3.67724 c 0,-0.0231 -0.0428,-0.0684 -0.095,-0.10065 -0.0523,-0.0323 -0.095,-0.0134 -0.095,0.0419 0,0.0554 0.0428,0.10065 0.095,0.10065 0.0523,0 0.095,-0.0189 0.095,-0.0419 z m -0.19008,-0.28513 c 0,-0.0231 -0.0428,-0.0683 -0.095,-0.10065 -0.0523,-0.0323 -0.0951,-0.0134 -0.0951,0.0419 0,0.0553 0.0428,0.10065 0.0951,0.10065 0.0523,0 0.095,-0.0189 0.095,-0.0419 z m -0.19009,-0.28512 c 0,-0.0231 -0.0428,-0.0683 -0.095,-0.10065 -0.0523,-0.0323 -0.095,-0.0134 -0.095,0.0419 0,0.0554 0.0428,0.10065 0.095,0.10065 0.0523,0 0.095,-0.0189 0.095,-0.0419 z m -0.19008,-0.28512 c 0,-0.0231 -0.0428,-0.0684 -0.095,-0.10065 -0.0523,-0.0323 -0.095,-0.0134 -0.095,0.0419 0,0.0554 0.0428,0.10065 0.095,0.10065 0.0523,0 0.095,-0.0189 0.095,-0.0419 z m -0.338,-0.50458 c -0.6305,-0.97061 -0.83692,-1.25655 -0.87765,-1.21582 -0.0624,0.0624 0.86098,1.4744 0.96522,1.47596 0.0452,6.6e-4 0.006,-0.11639 -0.0876,-0.26014 z m -0.89753,-1.39625 c 0,-0.0231 -0.0428,-0.0683 -0.0951,-0.10065 -0.0523,-0.0323 -0.095,-0.0134 -0.095,0.0419 0,0.0554 0.0428,0.10065 0.095,0.10065 0.0523,0 0.0951,-0.0189 0.0951,-0.0419 z m -0.19009,-0.28512 c 0,-0.0231 -0.0428,-0.0684 -0.095,-0.10065 -0.0523,-0.0323 -0.095,-0.0134 -0.095,0.0419 0,0.0554 0.0428,0.10065 0.095,0.10065 0.0523,0 0.095,-0.0189 0.095,-0.0419 z m -0.19008,-0.28512 c 0,-0.0231 -0.0428,-0.0684 -0.095,-0.10066 -0.0523,-0.0323 -0.095,-0.0134 -0.095,0.0419 0,0.0553 0.0428,0.10065 0.095,0.10065 0.0523,0 0.095,-0.0189 0.095,-0.0419 z m -0.19008,-0.28513 c 0,-0.023 -0.0428,-0.0683 -0.095,-0.10065 -0.0523,-0.0323 -0.095,-0.0134 -0.095,0.0419 0,0.0554 0.0428,0.10065 0.095,0.10065 0.0523,0 0.095,-0.0189 0.095,-0.0419 z m -0.19008,-0.28512 c 0,-0.0231 -0.0428,-0.0684 -0.0951,-0.10065 -0.0523,-0.0323 -0.095,-0.0134 -0.095,0.0419 0,0.0554 0.0428,0.10065 0.095,0.10065 0.0523,0 0.0951,-0.0189 0.0951,-0.0419 z m -0.33801,-0.50458 c -0.6305,-0.97061 -0.83691,-1.25655 -0.87765,-1.21582 -0.0624,0.0624 0.86098,1.4744 0.96522,1.47596 0.0452,6.6e-4 0.006,-0.11639 -0.0876,-0.26014 z m -0.89753,-1.39625 c 0,-0.0231 -0.0428,-0.0683 -0.095,-0.10065 -0.0523,-0.0323 -0.095,-0.0134 -0.095,0.0419 0,0.0554 0.0428,0.10065 0.095,0.10065 0.0523,0 0.095,-0.0189 0.095,-0.0419 z m -0.19008,-0.28512 c 0,-0.023 -0.0428,-0.0683 -0.095,-0.10065 -0.0523,-0.0323 -0.0951,-0.0135 -0.0951,0.0419 0,0.0554 0.0428,0.10065 0.0951,0.10065 0.0523,0 0.095,-0.0189 0.095,-0.0419 z m -0.19009,-0.28512 c 0,-0.0231 -0.0428,-0.0683 -0.095,-0.10065 -0.0523,-0.0323 -0.095,-0.0134 -0.095,0.0419 0,0.0554 0.0428,0.10065 0.095,0.10065 0.0523,0 0.095,-0.0189 0.095,-0.0419 z m -0.19008,-0.28513 c 0,-0.0231 -0.0428,-0.0683 -0.095,-0.10065 -0.0523,-0.0323 -0.095,-0.0135 -0.095,0.0419 0,0.0554 0.0428,0.10065 0.095,0.10065 0.0523,0 0.095,-0.0189 0.095,-0.0419 z m -0.338,-0.50457 c -0.630503,-0.97061 -0.836915,-1.25656 -0.877649,-1.21582 -0.06241,0.0624 0.860979,1.4744 0.965219,1.47595 0.0452,6.7e-4 0.006,-0.11638 -0.0876,-0.26013 z m -0.897534,-1.39625 c 0,-0.023 -0.04277,-0.0684 -0.09504,-0.10065 -0.05227,-0.0323 -0.09504,-0.0135 -0.09504,0.0419 0,0.0554 0.04277,0.10065 0.09504,0.10065 0.05227,0 0.09504,-0.0189 0.09504,-0.0419 z m -0.190082,-0.28513 c 0,-0.0231 -0.04277,-0.0683 -0.09504,-0.10065 -0.05227,-0.0323 -0.09504,-0.0134 -0.09504,0.0419 0,0.0554 0.04277,0.10065 0.09504,0.10065 0.05227,0 0.09504,-0.0189 0.09504,-0.0419 z m -0.190083,-0.28512 c 0,-0.0231 -0.04277,-0.0683 -0.09504,-0.10065 -0.05227,-0.0323 -0.09504,-0.0135 -0.09504,0.0419 0,0.0554 0.04277,0.10065 0.09504,0.10065 0.05227,0 0.09504,-0.0189 0.09504,-0.0419 z m -0.337786,-0.50458 c -0.534936,-0.82453 -0.644817,-0.97366 -0.686631,-0.93184 -0.06249,0.0625 0.670251,1.19133 0.773985,1.19238 0.04522,4.7e-4 0.0059,-0.11679 -0.08735,-0.26054 z m -0.707667,-1.11112 c 0,-0.0231 -0.04277,-0.0684 -0.09504,-0.10065 -0.05227,-0.0323 -0.09504,-0.0135 -0.09504,0.0419 0,0.0554 0.04277,0.10065 0.09504,0.10065 0.05227,0 0.09504,-0.0189 0.09504,-0.0419 z m -0.190083,-0.28512 c 0,-0.0231 -0.04277,-0.0684 -0.09504,-0.10066 -0.05227,-0.0323 -0.09504,-0.0134 -0.09504,0.0419 0,0.0554 0.04277,0.10065 0.09504,0.10065 0.05227,0 0.09504,-0.0189 0.09504,-0.0419 z m -0.321713,-0.48082 c -0.08442,-0.13068 -0.223439,-0.34586 -0.308929,-0.47817 -0.08549,-0.13232 -0.176194,-0.21981 -0.201565,-0.19444 -0.06279,0.0628 0.47871,0.90983 0.581775,0.91004 0.04522,10e-5 0.01314,-0.10675 -0.07128,-0.23743 z m -0.533658,-0.84976 c 0,-0.0231 -0.04277,-0.0684 -0.09504,-0.10065 -0.05227,-0.0323 -0.09504,-0.0135 -0.09504,0.0419 0,0.0554 0.04277,0.10065 0.09504,0.10065 0.05227,0 0.09504,-0.0189 0.09504,-0.0419 z m -0.190082,-0.28513 c 0,-0.0231 -0.04277,-0.0683 -0.09504,-0.10065 -0.05227,-0.0323 -0.09504,-0.0134 -0.09504,0.0419 0,0.0554 0.04277,0.10066 0.09504,0.10066 0.05227,0 0.09504,-0.0189 0.09504,-0.0419 z m -0.337786,-0.50457 c -0.534937,-0.82454 -0.644818,-0.97366 -0.686631,-0.93185 -0.06249,0.0625 0.67025,1.19133 0.773984,1.19238 0.04522,4.8e-4 0.0059,-0.11678 -0.08735,-0.26053 z m -0.707668,-1.11113 c 0,-0.0231 -0.04277,-0.0683 -0.09504,-0.10065 -0.05227,-0.0323 -0.09504,-0.0134 -0.09504,0.0419 0,0.0554 0.04277,0.10065 0.09504,0.10065 0.05227,0 0.09504,-0.0189 0.09504,-0.0419 z m -0.190082,-0.28512 c 0,-0.0231 -0.04277,-0.0683 -0.09504,-0.10065 -0.05227,-0.0323 -0.09504,-0.0135 -0.09504,0.0419 0,0.0554 0.04277,0.10065 0.09504,0.10065 0.05227,0 0.09504,-0.0189 0.09504,-0.0419 z m -0.321714,-0.48082 c -0.08442,-0.13068 -0.223439,-0.34585 -0.308928,-0.47817 -0.08549,-0.13231 -0.176195,-0.21981 -0.201566,-0.19444 -0.06279,0.0628 0.478711,0.90983 0.581775,0.91005 0.04522,9e-5 0.01314,-0.10675 -0.07128,-0.23744 z m -0.533657,-0.84976 c 0,-0.0231 -0.04277,-0.0683 -0.09504,-0.10065 -0.05227,-0.0323 -0.09504,-0.0134 -0.09504,0.0419 0,0.0554 0.04277,0.10065 0.09504,0.10065 0.05227,0 0.09504,-0.0189 0.09504,-0.0419 z m -0.190083,-0.28512 c 0,-0.0231 -0.04277,-0.0684 -0.09504,-0.10065 -0.05227,-0.0323 -0.09504,-0.0135 -0.09504,0.0419 0,0.0554 0.04277,0.10065 0.09504,0.10065 0.05227,0 0.09504,-0.0189 0.09504,-0.0419 z M 93.9841,414.47541 c 0,-0.0231 -0.04277,-0.0683 -0.09504,-0.10065 -0.05227,-0.0323 -0.09504,-0.0134 -0.09504,0.0419 0,0.0554 0.04277,0.10065 0.09504,0.10065 0.05227,0 0.09504,-0.0189 0.09504,-0.0419 z m -0.321714,-0.48081 c -0.08442,-0.13068 -0.223439,-0.34586 -0.308929,-0.47817 -0.08549,-0.13232 -0.176194,-0.21981 -0.201565,-0.19444 -0.06279,0.0628 0.47871,0.90983 0.581775,0.91004 0.04522,10e-5 0.01314,-0.10675 -0.07128,-0.23743 z m -0.533657,-0.84976 c 0,-0.0231 -0.04277,-0.0684 -0.09504,-0.10065 -0.05227,-0.0323 -0.09504,-0.0135 -0.09504,0.0419 0,0.0554 0.04277,0.10065 0.09504,0.10065 0.05227,0 0.09504,-0.0189 0.09504,-0.0419 z m -0.190083,-0.28513 c 0,-0.0231 -0.04277,-0.0683 -0.09504,-0.10065 -0.05227,-0.0323 -0.09504,-0.0134 -0.09504,0.0419 0,0.0554 0.04277,0.10066 0.09504,0.10066 0.05227,0 0.09504,-0.0189 0.09504,-0.0419 z m -0.274815,-0.40953 c -0.147704,-0.26872 -0.384176,-0.5532 -0.387451,-0.46611 -0.0048,0.12786 0.315105,0.63243 0.400978,0.63243 0.04284,0 0.03675,-0.0748 -0.01353,-0.16632 z m -0.390473,-0.63592 c 0,-0.0231 -0.04277,-0.0683 -0.09504,-0.10065 -0.05227,-0.0323 -0.09504,-0.0135 -0.09504,0.0419 0,0.0554 0.04277,0.10065 0.09504,0.10065 0.05227,0 0.09504,-0.0189 0.09504,-0.0419 z m -0.190083,-0.28512 c 0,-0.0231 -0.04277,-0.0684 -0.09504,-0.10065 -0.05227,-0.0323 -0.09504,-0.0135 -0.09504,0.0419 0,0.0554 0.04277,0.10065 0.09504,0.10065 0.05227,0 0.09504,-0.0189 0.09504,-0.0419 z M 91.80846,411.1196 c -0.147704,-0.26871 -0.384176,-0.5532 -0.387451,-0.46611 -0.0048,0.12786 0.315105,0.63243 0.400978,0.63243 0.04284,0 0.03675,-0.0748 -0.01353,-0.16632 z m -0.390474,-0.63592 c 0,-0.0231 -0.04277,-0.0683 -0.09504,-0.10065 -0.05227,-0.0323 -0.09504,-0.0134 -0.09504,0.0419 0,0.0554 0.04277,0.10065 0.09504,0.10065 0.05227,0 0.09504,-0.0189 0.09504,-0.0419 z m -0.321713,-0.48081 c -0.08442,-0.13068 -0.223439,-0.34586 -0.308929,-0.47817 -0.08549,-0.13232 -0.176194,-0.21982 -0.201565,-0.19444 -0.06279,0.0628 0.47871,0.90983 0.581775,0.91004 0.04522,9e-5 0.01314,-0.10675 -0.07128,-0.23743 z m -0.533658,-0.84976 c 0,-0.0231 -0.04277,-0.0684 -0.09504,-0.10065 -0.05227,-0.0323 -0.09504,-0.0134 -0.09504,0.0419 0,0.0553 0.04277,0.10065 0.09504,0.10065 0.05227,0 0.09504,-0.0189 0.09504,-0.0419 z m -0.321713,-0.48082 c -0.08442,-0.13068 -0.223439,-0.34586 -0.308929,-0.47817 -0.08549,-0.13231 -0.176194,-0.21981 -0.201565,-0.19444 -0.06279,0.0628 0.47871,0.90983 0.581775,0.91004 0.04522,1e-4 0.01314,-0.10675 -0.07128,-0.23743 z m -0.533658,-0.84976 c 0,-0.023 -0.04277,-0.0683 -0.09504,-0.10065 -0.05227,-0.0323 -0.09504,-0.0134 -0.09504,0.0419 0,0.0554 0.04277,0.10065 0.09504,0.10065 0.05227,0 0.09504,-0.0189 0.09504,-0.0419 z m -0.321713,-0.48082 c -0.08442,-0.13068 -0.223439,-0.34586 -0.308929,-0.47817 -0.08549,-0.13231 -0.176194,-0.21981 -0.201565,-0.19444 -0.06279,0.0628 0.47871,0.90983 0.581775,0.91005 0.04522,9e-5 0.01314,-0.10676 -0.07128,-0.23744 z m -0.533658,-0.84976 c 0,-0.023 -0.04277,-0.0683 -0.09504,-0.10065 -0.05227,-0.0323 -0.09504,-0.0134 -0.09504,0.0419 0,0.0554 0.04277,0.10065 0.09504,0.10065 0.05227,0 0.09504,-0.0189 0.09504,-0.0419 z m -0.274815,-0.40953 c -0.147704,-0.26872 -0.384176,-0.5532 -0.387451,-0.46611 -0.0048,0.12785 0.315105,0.63243 0.400978,0.63243 0.04284,0 0.03675,-0.0749 -0.01353,-0.16632 z m -0.390474,-0.63592 c 0,-0.0231 -0.04277,-0.0684 -0.09504,-0.10065 -0.05227,-0.0323 -0.09504,-0.0134 -0.09504,0.0419 0,0.0554 0.04277,0.10065 0.09504,0.10065 0.05227,0 0.09504,-0.0189 0.09504,-0.0419 z m -0.190082,-0.28513 c 0,-0.023 -0.04277,-0.0683 -0.09504,-0.10065 -0.05227,-0.0323 -0.09504,-0.0134 -0.09504,0.0419 0,0.0554 0.04277,0.10066 0.09504,0.10066 0.05227,0 0.09504,-0.0189 0.09504,-0.0419 z m -0.274816,-0.40953 c -0.147703,-0.26872 -0.384175,-0.5532 -0.38745,-0.46611 -0.0048,0.12786 0.315105,0.63243 0.400978,0.63243 0.04284,0 0.03675,-0.0748 -0.01353,-0.16632 z m -0.390473,-0.63592 c 0,-0.0231 -0.04277,-0.0683 -0.09504,-0.10065 -0.05227,-0.0323 -0.09504,-0.0134 -0.09504,0.0419 0,0.0554 0.04277,0.10065 0.09504,0.10065 0.05227,0 0.09504,-0.0189 0.09504,-0.0419 z M 87.0095,403.6351 c -0.08442,-0.13068 -0.223439,-0.34585 -0.308929,-0.47817 -0.08549,-0.13231 -0.176194,-0.21981 -0.201565,-0.19444 -0.06279,0.0628 0.47871,0.90983 0.581775,0.91005 0.04522,9e-5 0.01314,-0.10675 -0.07128,-0.23744 z m -0.533658,-0.84976 c 0,-0.0231 -0.04277,-0.0683 -0.09504,-0.10065 -0.05227,-0.0323 -0.09504,-0.0134 -0.09504,0.0419 0,0.0554 0.04277,0.10065 0.09504,0.10065 0.05227,0 0.09504,-0.0189 0.09504,-0.0419 z m -0.274815,-0.40953 c -0.147704,-0.26872 -0.384176,-0.5532 -0.387451,-0.46611 -0.0048,0.12785 0.315105,0.63243 0.400978,0.63243 0.04284,0 0.03675,-0.0748 -0.01353,-0.16632 z m -0.390473,-0.63592 c 0,-0.0231 -0.04277,-0.0683 -0.09504,-0.10065 -0.05227,-0.0323 -0.09504,-0.0134 -0.09504,0.0419 0,0.0554 0.04277,0.10065 0.09504,0.10065 0.05227,0 0.09504,-0.0189 0.09504,-0.0419 z m -0.274816,-0.40954 c -0.147703,-0.26871 -0.384176,-0.55319 -0.387451,-0.4661 -0.0048,0.12785 0.315106,0.63243 0.400978,0.63243 0.04284,0 0.03675,-0.0749 -0.01353,-0.16633 z m -0.390473,-0.63591 c 0,-0.0231 -0.04277,-0.0684 -0.09504,-0.10065 -0.05227,-0.0323 -0.09504,-0.0135 -0.09504,0.0419 0,0.0554 0.04277,0.10065 0.09504,0.10065 0.05227,0 0.09504,-0.0189 0.09504,-0.0419 z m -0.274816,-0.40954 c -0.147703,-0.26872 -0.384175,-0.5532 -0.38745,-0.46611 -0.0048,0.12786 0.315105,0.63243 0.400978,0.63243 0.04284,0 0.03675,-0.0748 -0.01353,-0.16632 z m -0.390473,-0.63592 c 0,-0.0231 -0.04277,-0.0683 -0.09504,-0.10065 -0.05227,-0.0323 -0.09504,-0.0134 -0.09504,0.0419 0,0.0554 0.04277,0.10065 0.09504,0.10065 0.05227,0 0.09504,-0.0189 0.09504,-0.0419 z m -0.274815,-0.40953 c -0.147704,-0.26872 -0.384176,-0.5532 -0.387451,-0.46611 -0.0048,0.12785 0.315105,0.63243 0.400978,0.63243 0.04284,0 0.03675,-0.0749 -0.01353,-0.16632 z m -0.475206,-0.76033 c -0.147704,-0.26872 -0.384176,-0.5532 -0.387451,-0.46611 -0.0048,0.12785 0.315105,0.63243 0.400978,0.63243 0.04284,0 0.03675,-0.0748 -0.01353,-0.16632 z m -0.390473,-0.63592 c 0,-0.0231 -0.04277,-0.0684 -0.09504,-0.10065 -0.05227,-0.0323 -0.09504,-0.0134 -0.09504,0.0419 0,0.0554 0.04277,0.10065 0.09504,0.10065 0.05227,0 0.09504,-0.0189 0.09504,-0.0419 z m -0.274816,-0.40954 c -0.147704,-0.26871 -0.384176,-0.55319 -0.387451,-0.46611 -0.0048,0.12786 0.315106,0.63244 0.400978,0.63244 0.04284,0 0.03675,-0.0748 -0.01353,-0.16633 z m -0.390473,-0.63591 c 0,-0.0231 -0.04277,-0.0684 -0.09504,-0.10066 -0.05227,-0.0323 -0.09504,-0.0134 -0.09504,0.0419 0,0.0553 0.04277,0.10065 0.09504,0.10065 0.05227,0 0.09504,-0.0189 0.09504,-0.0419 z m -0.274816,-0.40954 c -0.147703,-0.26872 -0.384175,-0.5532 -0.38745,-0.46611 -0.0048,0.12786 0.315105,0.63243 0.400978,0.63243 0.04284,0 0.03675,-0.0748 -0.01353,-0.16632 z m -0.475206,-0.76033 c -0.147703,-0.26872 -0.384175,-0.5532 -0.387451,-0.46611 -0.0048,0.12786 0.315106,0.63243 0.400978,0.63243 0.04284,0 0.03675,-0.0748 -0.01353,-0.16632 z m -0.390473,-0.63592 c 0,-0.0231 -0.04277,-0.0683 -0.09504,-0.10065 -0.05227,-0.0323 -0.09504,-0.0134 -0.09504,0.0419 0,0.0554 0.04277,0.10065 0.09504,0.10065 0.05227,0 0.09504,-0.0189 0.09504,-0.0419 z m -0.274815,-0.40953 c -0.147704,-0.26872 -0.384176,-0.5532 -0.387451,-0.46611 -0.0048,0.12785 0.315105,0.63243 0.400978,0.63243 0.04284,0 0.03675,-0.0748 -0.01353,-0.16632 z m -0.475207,-0.76033 c -0.147703,-0.26872 -0.384175,-0.5532 -0.38745,-0.46611 -0.0048,0.12785 0.315105,0.63243 0.400978,0.63243 0.04284,0 0.03675,-0.0749 -0.01353,-0.16632 z m -0.390473,-0.63592 c 0,-0.023 -0.04277,-0.0683 -0.09504,-0.10065 -0.05227,-0.0323 -0.09504,-0.0134 -0.09504,0.0419 0,0.0554 0.04277,0.10065 0.09504,0.10065 0.05227,0 0.09504,-0.0189 0.09504,-0.0419 z"
+   id="path725" /><path
+   style="fill:#333333;stroke-width:0.999998"
+   d="m 258.32956,628.94693 c -1.35364,-0.96721 -3.25694,-2.44585 -4.74156,-3.68361 -2.13959,-1.78383 -5.89286,-5.14297 -5.82368,-5.21215 0.0165,-0.0165 0.12292,0.005 0.23646,0.0485 0.11354,0.0432 0.39507,0.0708 0.62564,0.0614 l 0.41921,-0.0171 1.23937,1.11967 c 4.88208,4.41056 7.3103,6.18074 9.03271,6.5849 0.62342,0.14628 1.08132,0.10397 2.00408,-0.18518 1.75826,-0.55095 9.84596,-2.83262 11.5984,-3.2721 0.92238,-0.23131 2.52085,-0.52352 3.16975,-0.57946 0.34188,-0.0295 0.0171,0.0585 -1.00856,0.2732 -5.49859,1.15096 -10.37479,2.87081 -14.95921,5.27617 l -0.69941,0.36697 z"
+   id="path727" /><path
+   style="fill:#333333;stroke-width:0.999999"
+   d="m 739.12329,629.17248 c -2.75273,-1.48199 -6.34433,-2.92801 -9.69851,-3.90473 -3.53799,-1.03025 -6.95868,-1.69494 -11.06025,-2.14919 l -1.41165,-0.15633 4.72837,-0.007 4.72836,-0.007 4.65015,1.87688 c 5.02734,2.02912 5.17587,2.08773 6.42925,2.53698 1.22322,0.43843 2.06518,0.62756 2.7943,0.62766 0.98875,1.3e-4 1.55851,-0.22522 2.95313,-1.16809 2.2287,-1.50677 4.62388,-3.68295 10.28872,-9.348 6.95939,-6.95965 14.95255,-15.47751 22.58657,-24.06923 5.28616,-5.94933 9.07455,-10.43753 14.88006,-17.62881 l 1.09893,-1.36124 h 0.53277 c 0.40905,0 0.52074,0.0195 0.48094,0.084 -0.1688,0.27363 -5.53126,6.8177 -8.68948,10.60418 -16.20146,19.42441 -29.46328,33.34124 -39.2627,41.20192 -2.14278,1.71885 -4.58799,3.50605 -4.78202,3.49518 -0.0503,-0.003 -0.61146,-0.28505 -1.24694,-0.62718 z"
+   id="path729" /><path
+   style="fill:#333333;stroke-width:0.999999"
+   d="m 794.67844,571.2376 c 21.72947,-27.12412 50.25582,-65.97855 76.65032,-104.40188 0.86718,-1.26238 0.95286,-1.34813 1.34718,-1.34813 h 0.42111 l -0.40656,0.59569 c -26.06008,38.18366 -54.64282,77.22357 -76.75829,104.8408 l -2.73657,3.41736 h -0.50185 -0.50186 z"
+   id="path731" /><path
+   style="fill:#333333;stroke-width:0.999999"
+   d=""
+   id="path733" /><path
+   style="fill:#333333;stroke-width:0.999999"
+   d="m 872.33255,465.43628 c 0,-0.0369 0.98983,-1.51023 2.19962,-3.27394 12.47224,-18.18288 29.19881,-43.46795 39.62988,-59.90731 1.93137,-3.04383 2.15744,-3.35079 2.47076,-3.35465 0.18968,-0.002 0.34487,0.0223 0.34487,0.0547 0,0.20709 -11.98276,18.76383 -19.55914,30.28968 -4.3111,6.55841 -16.73734,25.12711 -21.02278,31.41462 -3.06468,4.49644 -3.27107,4.7677 -3.65563,4.80478 -0.22417,0.0216 -0.40758,0.009 -0.40758,-0.0279 z"
+   id="path735" /><path
+   style="fill:#333333;stroke-width:1"
+   d="m 190.3131,551.9963 c -1.56974,-2.03658 -2.09339,-2.70605 -2.4866,-3.17907 -0.49807,-0.59915 -0.72343,-0.80461 -0.93284,-0.85049 -0.0357,-0.008 -0.0317,-0.008 0.0966,-0.009 0.15787,-7.4e-4 0.28563,-0.007 0.28563,-0.0129 0,-0.003 -0.0484,-0.0693 -0.10748,-0.14847 -0.0591,-0.0792 -0.1063,-0.14508 -0.10487,-0.14651 0.001,-10e-4 0.16285,0.20704 0.35872,0.46328 1.0088,1.31977 3.18957,4.16106 3.26801,4.25785 l 0.0205,0.0253 h -0.0446 -0.0446 z"
+   id="path737" /><path
+   style="fill:#333333;stroke-width:1"
+   d="m 189.19166,551.96655 c -1.17032,-1.52604 -3.05823,-3.999 -3.05823,-4.00596 0,-0.002 0.0248,-0.003 0.055,-0.003 l 0.055,2.6e-4 0.23207,0.31039 c 0.66608,0.89089 1.88421,2.49124 2.98231,3.9181 0.0861,0.1119 0.15659,0.20496 0.15659,0.20678 0,0.002 -0.0209,0.003 -0.0465,0.003 h -0.0466 z"
+   id="path739" /><path
+   style="fill:#333333;stroke-width:1"
+   d="m 270.27786,625.29652 c 0,-0.008 8.3e-4,-0.0139 0.002,-0.0139 0.001,0 0.11484,-0.0324 0.25293,-0.072 1.12386,-0.32241 2.26461,-0.61474 3.43858,-0.88116 0.36547,-0.0829 0.65493,-0.14599 1.18359,-0.25781 0.46949,-0.0993 0.80022,-0.17366 0.93164,-0.20948 0.14708,-0.0401 0.17239,-0.0561 0.0886,-0.0561 -0.25204,9e-5 -1.28763,0.16493 -2.22203,0.35369 -0.62703,0.12667 -0.97969,0.21075 -1.77091,0.42221 -0.40597,0.1085 -1.30174,0.35276 -1.78515,0.48678 l -0.11719,0.0325 -10e-4,-0.0191 c -6.5e-4,-0.0105 -3.6e-4,-0.0199 6.5e-4,-0.0209 0.004,-0.004 1.68481,-0.46482 1.97516,-0.54167 0.47514,-0.12576 0.86864,-0.22207 1.27738,-0.31266 1.39326,-0.30876 2.90538,-0.52698 4.90035,-0.7072 0.33529,-0.0303 0.41837,-0.0374 0.43275,-0.037 0.007,2e-4 -0.0859,0.0151 -0.20618,0.0331 -0.12032,0.018 -0.29434,0.0443 -0.38672,0.0584 -2.56038,0.39277 -5.01379,0.91878 -7.39649,1.58583 -0.12396,0.0347 -0.5466,0.1552 -0.59082,0.16844 -0.006,0.002 -0.007,-4.4e-4 -0.007,-0.0119 z"
+   id="path741" /><path
+   class="st2"
+   d="m 661,153.1 v 0 c -0.2,0 -0.3,-0.1 -0.3,-0.3 0,-0.1 0.1,-0.2 0.2,-0.2 0.1,0 0.3,0.1 0.3,0.2 0.1,0.2 0,0.3 -0.2,0.3 0,0 0,0 0,0 z"
+   id="path320" /><path
+   class="st1"
+   d="m 764.9,314.2 c -20.7,0 -37.6,-16.8 -37.5,-37.6 0,-20.7 16.8,-37.6 37.6,-37.5 20.7,0 37.5,16.8 37.5,37.6 -0.1,20.7 -16.9,37.4 -37.6,37.5 z m 0,-73.1 c -19.6,0 -35.6,15.9 -35.6,35.6 0,19.6 15.9,35.6 35.6,35.6 19.6,0 35.6,-15.9 35.6,-35.6 -0.1,-19.7 -16,-35.6 -35.6,-35.6 z"
+   id="path338"
+   style="fill:#000000" /><path
+   class="st1"
+   d="m 764.9,450.2 c -20.7,0 -37.6,-16.8 -37.5,-37.6 0,-20.7 16.8,-37.6 37.6,-37.5 20.7,0 37.5,16.8 37.5,37.6 -0.1,20.7 -16.9,37.5 -37.6,37.5 z m 0,-73.1 c -19.6,0 -35.6,15.9 -35.6,35.6 0,19.6 15.9,35.6 35.6,35.6 19.6,0 35.6,-15.9 35.6,-35.6 -0.1,-19.7 -16,-35.6 -35.6,-35.6 z"
+   id="path340"
+   style="fill:#000000" /><path
+   class="st1"
+   d="m 843.1,382.2 c -20.7,0 -37.6,-16.8 -37.6,-37.5 0,-20.7 16.8,-37.6 37.5,-37.6 20.7,0 37.6,16.8 37.6,37.5 0,0 0,0 0,0 0,20.8 -16.8,37.6 -37.5,37.6 z m 0,-73.1 c -19.6,0 -35.6,15.9 -35.6,35.6 0,19.7 15.9,35.6 35.6,35.6 19.6,0 35.6,-15.9 35.6,-35.6 0,0 0,0 0,0 -0.1,-19.7 -16,-35.6 -35.6,-35.6 z"
+   id="path346"
+   style="fill:#000000" /><path
+   class="st1"
+   d="m 686.7,382.2 c -20.7,0 -37.6,-16.8 -37.6,-37.6 0,-20.8 16.8,-37.6 37.6,-37.6 20.7,0 37.6,16.8 37.6,37.6 -0.1,20.8 -16.9,37.6 -37.6,37.6 z m 0,-73.1 c -19.6,0 -35.6,15.9 -35.6,35.6 0,19.7 15.9,35.6 35.6,35.6 19.6,0 35.6,-15.9 35.6,-35.6 v 0 c -0.1,-19.7 -16,-35.6 -35.6,-35.6 z"
+   id="path348"
+   style="fill:#000000" /><path
+   class="st1"
+   d="m 624.1,292.4 c -12.8,0 -23.1,-10.3 -23.1,-23.1 0,-12.8 10.3,-23.1 23.1,-23.1 12.8,0 23.1,10.3 23.1,23.1 0,12.7 -10.4,23.1 -23.1,23.1 z m 0,-44.2 c -11.7,0 -21.1,9.5 -21.1,21.1 0,11.7 9.5,21.1 21.1,21.1 11.7,0 21.1,-9.5 21.1,-21.1 0,-11.7 -9.5,-21.1 -21.1,-21.1 z"
+   id="path350"
+   style="fill:#000000" /><path
+   class="st1"
+   d="m 571.3,367.7 c -12.8,0 -23.1,-10.3 -23.1,-23.1 0,-12.8 10.3,-23.1 23.1,-23.1 12.8,0 23.1,10.3 23.1,23.1 -0.1,12.8 -10.4,23.1 -23.1,23.1 z m 0,-44.2 c -11.7,0 -21.1,9.5 -21.1,21.1 0,11.7 9.5,21.1 21.1,21.1 11.7,0 21.1,-9.5 21.1,-21.1 -0.1,-11.6 -9.5,-21.1 -21.1,-21.1 z"
+   id="path352"
+   style="fill:#000000" /><path
+   class="st1"
+   d="m 375.9,292.4 c -12.8,0 -23.1,-10.3 -23.1,-23.1 0,-12.8 10.3,-23.1 23.1,-23.1 12.8,0 23.1,10.3 23.1,23.1 0,12.7 -10.3,23.1 -23.1,23.1 z m 0,-44.2 c -11.7,0 -21.1,9.5 -21.1,21.1 0,11.7 9.5,21.1 21.1,21.1 11.7,0 21.1,-9.5 21.1,-21.1 0,-11.7 -9.4,-21.1 -21.1,-21.1 z"
+   id="path354"
+   style="fill:#000000" /><path
+   class="st1"
+   d="m 428.7,359.6 c -8.3,0 -15,-6.7 -15,-15 0,-8.3 6.7,-15 15,-15 8.3,0 15,6.7 15,15 v 0 c 0,8.3 -6.7,15 -15,15 z m 0,-27.9 c -7.2,0 -13,5.8 -13,13 0,7.2 5.8,13 13,13 7.2,0 13,-5.8 13,-13 0,0 0,0 0,0 0,-7.2 -5.8,-13 -13,-13 z"
+   id="path356"
+   style="fill:#000000" /><path
+   class="st1"
+   d="m 442.8,363.8 h -28.2 c -2.8,0 -5.1,-2.3 -5.1,-5.1 v -28.2 c 0,-2.8 2.3,-5.1 5.1,-5.1 h 28.2 c 2.8,0 5.1,2.3 5.1,5.1 v 28.2 c 0,2.8 -2.3,5.1 -5.1,5.1 z m -28.2,-36.3 c -1.7,0 -3.1,1.4 -3.1,3.1 v 28.2 c 0,1.7 1.4,3.1 3.1,3.1 h 28.2 c 1.7,0 3.1,-1.4 3.1,-3.1 v -28.2 c 0,-1.7 -1.4,-3.1 -3.1,-3.1 z"
+   id="path358"
+   style="fill:#000000" /><path
+   class="st1"
+   d="m 111.7,219.7 c -0.6,0 -1,-0.4 -1,-1 0,-0.1 0,-0.2 0.1,-0.3 27.3,-73.2 138.4,-81.3 186,-81.3 0.3,0 0.6,0 1,0 h 1.2 c 6.6,0 25.5,8.1 40.3,14.9 0,0 0.1,0 0.1,0 7.2,3.3 12.6,6 12.7,6 0.5,0.2 0.7,0.8 0.5,1.3 -0.2,0.3 -0.5,0.5 -0.9,0.6 -107.2,4.6 -174.8,17.4 -206.5,39.2 -14.6,10 -26,16.7 -33,20.6 -0.1,-0.1 -0.3,0 -0.5,0 z M 296.8,139 c -46.6,0 -154.6,7.8 -183.1,77.5 7,-4 17.5,-10.3 30.4,-19.1 31.6,-21.7 98.2,-34.6 203.6,-39.4 -2.2,-1.1 -5.4,-2.5 -8.9,-4.2 0,0 -0.1,0 -0.1,0 -20.6,-9.5 -34.7,-14.7 -39.5,-14.7 H 298 c -0.5,-0.1 -0.9,-0.1 -1.2,-0.1 z"
+   id="path360"
+   style="fill:#000000" /><path
+   class="st1"
+   d="m 888.3,219.7 c -0.2,0 -0.3,0 -0.5,-0.1 -7,-3.9 -18.5,-10.7 -33,-20.6 -31.7,-21.8 -99.3,-34.6 -206.5,-39.2 -0.6,0 -1,-0.5 -1,-1 0,-0.4 0.2,-0.7 0.6,-0.9 0.1,0 5.4,-2.6 12.7,-6 C 682.2,142 695.8,137 701,137 h 1.2 c 0.3,0 0.6,0 1,0 47.6,0 158.7,8.1 186.1,81.4 0.2,0.5 -0.1,1.1 -0.6,1.3 -0.2,0 -0.3,0 -0.4,0 z M 652.4,158 c 105.3,4.7 171.9,17.6 203.6,39.4 12.9,8.8 23.3,15.1 30.4,19.1 C 857.8,146.8 749.8,139 703.2,139 c -0.3,0 -0.6,0 -1,0 H 701 c -4.8,0 -18.8,5.2 -39.5,14.7 -3.7,1.7 -6.9,3.2 -9.1,4.3 z"
+   id="path362"
+   style="fill:#000000" /><path
+   class="st1"
+   d="m 364.9,556.4 h -36.4 c -2.8,0 -5.1,-2.3 -5.1,-5.1 v -41.6 c 0,-1.7 -1.4,-3.1 -3.1,-3.1 h -41.6 c -2.8,0 -5.1,-2.3 -5.1,-5.1 v -36.4 c 0,-2.8 2.3,-5.1 5.1,-5.1 h 41.6 c 1.7,0 3.1,-1.4 3.1,-3.1 v -41.6 c 0,-2.8 2.3,-5.1 5.1,-5.1 h 36.4 c 2.8,0 5.1,2.3 5.1,5.1 v 41.6 c 0,1.7 1.4,3.1 3.1,3.1 h 41.6 c 2.8,0 5.1,2.3 5.1,5.1 v 36.4 c 0,2.8 -2.3,5.1 -5.1,5.1 H 373 c -1.7,0 -3.1,1.4 -3.1,3.1 v 41.6 c 0,2.8 -2.2,5.1 -5,5.1 z m -86.1,-94.3 c -1.7,0 -3.1,1.4 -3.1,3.1 v 36.4 c 0,1.7 1.4,3.1 3.1,3.1 h 41.6 c 2.8,0 5.1,2.3 5.1,5.1 v 41.6 c 0,1.7 1.4,3.1 3.1,3.1 H 365 c 1.7,0 3.1,-1.4 3.1,-3.1 v -41.6 c 0,-2.8 2.3,-5.1 5.1,-5.1 h 41.6 c 1.7,0 3.1,-1.4 3.1,-3.1 v -36.4 c 0,-1.7 -1.4,-3.1 -3.1,-3.1 H 373 c -2.8,0 -5.1,-2.3 -5.1,-5.1 v -41.6 c 0,-1.7 -1.4,-3.1 -3.1,-3.1 h -36.4 c -1.7,0 -3.1,1.4 -3.1,3.1 V 457 c 0,2.8 -2.3,5.1 -5.1,5.1 z"
+   id="path364"
+   style="fill:#000000" /><rect
+   x="363.70001"
+   y="267.5"
+   class="st1"
+   width="24.4"
+   height="3.5"
+   id="rect366"
+   style="fill:#000000" /><polygon
+   class="st1"
+   points="611.9,267.5 611.9,271 622.3,271 622.3,281.4 625.8,281.4 625.8,271 636.3,271 636.3,267.5 625.8,267.5 625.8,257.1 622.3,257.1 622.3,267.5 "
+   id="polygon368"
+   style="fill:#000000" /><path
+   class="st1"
+   d="M 775.5,289.9 H 771 l -6.3,-10.4 -6.3,10.4 H 754 l 8.6,-13.2 -7.9,-12.6 h 4.2 l 5.9,9.7 5.9,-9.7 h 4 l -7.9,12.4 z"
+   id="path370"
+   style="fill:#cccccc" /><path
+   class="st1"
+   d="m 697.8,331.8 -9.3,16.5 v 9.2 H 685 v -9.3 l -9.3,-16.5 h 4.2 l 5.1,9.4 1.9,3.8 1.7,-3.4 5.2,-9.8 z"
+   id="path372"
+   style="fill:#cccccc" /><path
+   class="st1"
+   d="m 854,357.5 h -3.8 l -1.8,-5.6 h -10.7 l -1.8,5.6 h -3.6 l 8.5,-25.7 h 4.8 z m -6.6,-8.7 -4.4,-13.8 -4.4,13.8 z"
+   id="path374"
+   style="fill:#cccccc" /><path
+   class="st1"
+   d="m 773.3,417.8 c 0,1.1 -0.2,2.3 -0.7,3.3 -0.5,1 -1.2,1.8 -2,2.4 -1,0.7 -2.1,1.2 -3.2,1.5 -1.4,0.4 -2.8,0.5 -4.2,0.5 h -6.7 v -25.7 h 7.4 c 5.7,0 8.6,2.1 8.6,6.3 0,1.3 -0.3,2.5 -1,3.6 -0.8,1.1 -1.9,1.9 -3.2,2.2 0.7,0.1 1.4,0.4 2,0.7 0.6,0.3 1.2,0.7 1.6,1.2 0.5,0.5 0.9,1.1 1.1,1.8 0.2,0.6 0.4,1.4 0.3,2.2 z m -4.5,-11.3 c 0,-0.5 -0.1,-1 -0.2,-1.5 -0.2,-0.5 -0.4,-0.9 -0.8,-1.2 -0.5,-0.4 -1,-0.6 -1.6,-0.8 -0.8,-0.2 -1.7,-0.3 -2.5,-0.3 H 760 v 8.1 h 3.5 c 0.7,0 1.5,-0.1 2.2,-0.3 0.6,-0.1 1.2,-0.4 1.7,-0.8 0.5,-0.3 0.8,-0.8 1.1,-1.3 0.2,-0.6 0.3,-1.2 0.3,-1.9 z m 0.8,11.4 c 0,-0.6 -0.1,-1.2 -0.4,-1.8 -0.3,-0.5 -0.7,-1 -1.2,-1.3 -0.6,-0.4 -1.2,-0.7 -1.9,-0.8 -0.8,-0.2 -1.7,-0.3 -2.5,-0.3 H 760 v 8.9 h 3.7 c 1.6,0.1 3.2,-0.3 4.5,-1.1 1,-0.9 1.5,-2.2 1.4,-3.6 z"
+   id="path376"
+   style="fill:#cccccc" /><path
+   class="st1"
+   d="M 571.3,329.3 557.7,343 h 3.9 v 11.6 h 19.5 V 343 h 3.7 z m 3.9,21.1 h -7.7 V 343 h 7.7 z"
+   id="path378"
+   style="fill:#000000" /><polygon
+   class="st1"
+   points="354.2,439.4 346.7,426.4 339.2,439.4 "
+   id="polygon380"
+   style="fill:#e6e6e6" /><polygon
+   class="st1"
+   points="354.2,527.4 346.7,540.4 339.2,527.4 "
+   id="polygon382"
+   style="fill:#e6e6e6" /><polygon
+   class="st1"
+   points="390.7,490.9 403.7,483.4 390.7,475.9 "
+   id="polygon384"
+   style="fill:#ececec" /><polygon
+   class="st1"
+   points="302.6,490.9 289.6,483.4 302.6,475.9 "
+   id="polygon386"
+   style="fill:#e6e6e6" /><path
+   style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+   d="M 116.98425,210.08925 Z"
+   id="path751" /><path
+   style="fill:#000000;stroke-width:1"
+   d="m 114.22974,215.69072 c 0,-0.45229 3.09924,-6.7405 4.64453,-9.42354 16.44424,-28.55157 49.38258,-48.50806 97.46727,-59.05294 22.91904,-5.0261 49.79261,-7.86656 74.8975,-7.91647 l 9.88554,-0.0197 2.326,0.63276 c 2.97781,0.81008 8.22968,2.5842 12.10978,4.09077 6.75585,2.62316 20.56435,8.65122 28.71169,12.53399 l 2.90751,1.38563 -3.72162,0.16596 c -11.63204,0.5187 -33.61178,1.92 -46.28758,2.95102 -67.37339,5.48 -114.05367,15.24194 -142.46806,29.79343 -4.37467,2.24034 -7.76567,4.33057 -16.21834,9.99711 -7.20519,4.83024 -10.94407,7.21515 -17.27619,11.01994 -5.99472,3.60205 -6.97803,4.14345 -6.97803,3.84199 z"
+   id="path743" /><path
+   style="fill:#000000;stroke-width:1"
+   d="m 879.10381,212.0035 c -7.14303,-4.3019 -12.97768,-8.02082 -20.04188,-12.77441 -7.89676,-5.31382 -12.21024,-7.78869 -18.92531,-10.85841 -33.46415,-15.29779 -89.94791,-25.16692 -169.03895,-29.53535 -5.9052,-0.32616 -12.38404,-0.68592 -14.39743,-0.79947 l -3.6607,-0.20646 5.80805,-2.69868 c 15.36201,-7.13788 28.3455,-12.44888 36.01403,-14.73183 4.41124,-1.31324 5.76816,-1.4226 15.03141,-1.21137 22.24978,0.50737 39.43928,2.00926 57.97832,5.06572 60.20915,9.92646 100.03845,33.24557 116.54168,68.2324 1.48898,3.15664 1.55024,3.32534 1.2044,3.31672 -0.11811,-0.003 -3.04923,-1.71243 -6.51362,-3.79886 z"
+   id="path745" /><path
+   style="opacity:0.67;fill:#1a1a1a;stroke-width:1"
+   d="m 373.80281,290.14717 c -2.46034,-0.23077 -4.45113,-0.79491 -6.88752,-1.95177 -10.56016,-5.0142 -14.95691,-17.6134 -9.80143,-28.08671 4.87183,-9.89711 16.2049,-14.28552 26.57706,-10.29122 3.4685,1.33571 7.33008,4.40139 9.47985,7.52597 1.11657,1.62288 2.51752,4.70976 3.07977,6.78602 0.72146,2.66419 0.72146,7.60871 0,10.27291 -0.94517,3.49032 -2.77396,6.79155 -5.14924,9.29514 -4.45499,4.69564 -10.79538,7.05963 -17.29849,6.44966 z m 14.42691,-20.93963 -0.0682,-1.80943 h -12.25746 -12.25745 l -0.0682,1.80943 -0.0682,1.80944 h 12.39383 12.39384 z"
+   id="path1154" /><path
+   style="opacity:0.67;fill:#1a1a1a;stroke-width:1"
+   d="m 426.21801,357.36468 c -0.64206,-0.12068 -2.05883,-0.64919 -3.14838,-1.17448 -3.44933,-1.66297 -5.83453,-4.56858 -6.77775,-8.2565 -1.94337,-7.5985 3.07881,-14.99311 10.85219,-15.97868 7.59674,-0.96317 14.35218,5.00493 14.36379,12.68971 0.005,3.63407 -1.20746,6.5209 -3.84027,9.13989 -3.10515,3.08884 -7.21905,4.37517 -11.44958,3.58006 z"
+   id="path1156" /><path
+   style="opacity:0.67;fill:#1a1a1a;stroke-width:1"
+   d="m 413.27452,361.41224 c -0.43751,-0.23464 -0.98909,-0.78623 -1.22573,-1.22575 -0.40718,-0.75626 -0.42693,-1.6029 -0.36825,-15.78468 l 0.062,-14.98556 0.6893,-0.71937 c 0.37912,-0.39566 1.0847,-0.82585 1.56795,-0.95598 0.56164,-0.15123 6.08297,-0.21306 15.30375,-0.17138 13.72309,0.062 14.45694,0.0868 15.0791,0.50847 1.37181,0.92976 1.33063,0.41418 1.32968,16.64721 -9.4e-4,14.52857 -0.0125,14.91469 -0.47206,15.66849 -0.89759,1.47221 -0.58647,1.44517 -16.62528,1.44517 -13.64078,0 -14.59443,-0.0265 -15.34046,-0.42662 z m 19.59753,-2.27163 c 3.88482,-1.15541 7.55315,-4.23277 9.30758,-7.80814 1.57862,-3.21706 1.99463,-6.33925 1.30011,-9.75743 -1.29206,-6.35905 -6.60871,-11.21795 -13.06731,-11.94225 -4.64538,-0.52096 -9.09828,1.02679 -12.37166,4.30017 -2.8821,2.8821 -4.36829,6.49308 -4.37455,10.62873 -0.007,4.31143 1.34318,7.58751 4.38882,10.65292 3.14817,3.16859 6.87487,4.62191 11.31488,4.41252 1.21991,-0.0575 2.79587,-0.27647 3.50213,-0.48652 z"
+   id="path1158" /><path
+   style="opacity:0.67;fill:#1a1a1a;stroke-width:1"
+   d="m 568.59972,365.41357 c -10.75578,-1.47277 -18.77819,-11.0675 -18.20783,-21.7764 0.0783,-1.47013 0.37112,-3.45737 0.66418,-4.50746 3.24002,-11.60952 15.56282,-18.21873 26.82601,-14.38787 7.75715,2.63837 13.20978,9.42157 14.23519,17.70892 0.644,5.20475 -1.01912,10.86158 -4.4641,15.18395 -4.50376,5.65078 -12.06133,8.73628 -19.05345,7.77886 z m 12.50555,-16.5177 v -5.75953 h 1.87811 c 1.03296,0 1.87811,-0.0853 1.87811,-0.18952 0,-0.10423 -3.0727,-3.26069 -6.82821,-7.01434 l -6.82822,-6.82483 -6.83923,7.01435 -6.83924,7.01434 h 2.02318 2.02318 v 5.75953 5.75953 h 9.76616 9.76616 z"
+   id="path1160" /><path
+   style="opacity:0.67;fill:#1a1a1a;stroke-width:1"
+   d="m 567.5829,346.76735 v -3.63101 h 3.75621 3.75622 v 3.63101 3.63101 h -3.75622 -3.75621 z"
+   id="path1162" /><path
+   style="opacity:0.67;fill:#1a1a1a;stroke-width:1"
+   d="m 620.71179,290.01818 c -4.30272,-0.71544 -8.00129,-2.67106 -11.3097,-5.98003 -4.0228,-4.02347 -5.85445,-8.04282 -6.18626,-13.57507 -0.59942,-9.99373 5.95554,-18.89893 15.82722,-21.502 2.81023,-0.74104 6.99657,-0.75839 9.89136,-0.041 4.25742,1.05505 7.33166,2.87554 10.48956,6.21164 1.61122,1.70214 2.2812,2.65969 3.28312,4.69228 1.70406,3.45702 2.2543,5.75797 2.25209,9.41757 -0.002,3.18843 -0.52697,5.95047 -1.58659,8.34645 -3.8817,8.77722 -13.36042,13.9766 -22.6608,12.43017 z m 5.21765,-13.74247 V 271.017 h 5.26967 5.26968 l -0.0736,-1.8155 -0.0736,-1.8155 -5.1961,-0.0677 -5.1961,-0.0677 v -5.12842 -5.12841 h -1.87811 -1.8781 v 5.13349 5.1335 h -5.1335 -5.13349 v 1.87811 1.8781 h 5.13349 5.1335 v 5.25871 5.2587 h 1.8781 1.87811 z"
+   id="path1164" /><path
+   style="opacity:0.67;fill:#1a1a1a;stroke-width:1"
+   d="m 675.30314,377.93404 c -14.84444,-5.38258 -23.47152,-17.72945 -23.47152,-33.59187 0,-27.8091 31.12766,-44.21455 54.48095,-28.71352 22.52502,14.95126 19.83567,49.10417 -4.78746,60.79764 -5.26574,2.50069 -6.54152,2.78823 -13.50874,3.04463 -6.65812,0.24503 -8.36953,0.0381 -12.71323,-1.53688 z m 13.7566,-24.95476 c 0,-4.30168 0.36635,-5.33497 4.55855,-12.85748 2.5072,-4.49894 4.55855,-8.37712 4.55855,-8.61817 0,-0.24104 -1.0105,-0.43827 -2.24554,-0.43827 -2.02772,0 -2.56203,0.58855 -5.50825,6.0674 -1.79448,3.33707 -3.43365,6.07131 -3.64258,6.0761 -0.20893,0.005 -1.74744,-2.64007 -3.41891,-5.87746 -2.75553,-5.33706 -3.26937,-5.90837 -5.50824,-6.12423 -1.35807,-0.13095 -2.46921,0.0101 -2.46921,0.31345 0,0.30334 2.05134,4.20117 4.55854,8.66183 4.20104,7.47425 4.55855,8.4775 4.55855,12.79237 v 4.68206 h 2.27927 2.27927 z"
+   id="path1166" /><path
+   style="opacity:0.67;fill:#1a1a1a;stroke-width:1"
+   d="m 757.43794,311.01658 c -10.24057,-2.27297 -19.25589,-9.42756 -23.94319,-19.00139 -10.36733,-21.17529 2.58332,-46.04242 26.03155,-49.98436 17.09092,-2.87319 34.89044,8.71152 39.27892,25.56445 4.22549,16.22701 -3.35175,33.07207 -18.13797,40.32274 -8.26199,4.0514 -14.92947,4.94078 -23.22931,3.09856 z m 4.34079,-25.82956 2.90548,-4.85143 2.91793,4.85143 c 2.66712,4.43443 3.13935,4.85143 5.49395,4.85143 1.41682,0 2.57603,-0.15918 2.57603,-0.35374 0,-0.19455 -1.88517,-3.24583 -4.18926,-6.78062 l -4.18926,-6.42689 3.80928,-5.94532 c 2.0951,-3.26992 3.80932,-6.20173 3.80938,-6.51513 6e-5,-0.3134 -0.97698,-0.56982 -2.17118,-0.56982 -1.83932,0 -2.60995,0.71069 -5.04043,4.64838 l -2.86914,4.64838 -2.95546,-4.64838 c -2.57306,-4.04694 -3.2585,-4.64838 -5.29759,-4.64838 -2.77258,0 -2.77646,-0.0154 1.89639,7.53524 l 3.48784,5.63584 -1.64075,2.72149 c -0.90241,1.49682 -2.54608,4.08906 -3.6526,5.76052 -3.3775,5.10195 -3.36234,4.93843 -0.45798,4.93843 2.46143,0 2.8807,-0.36535 5.56737,-4.85143 z"
+   id="path1170" /><path
+   style="opacity:0.67;fill:#1a1a1a;stroke-width:1"
+   d="m 832.47308,378.21451 c -16.19875,-5.17833 -26.7213,-22.02313 -24.11367,-38.60187 2.06818,-13.14906 11.11126,-23.84226 23.97599,-28.35094 3.66912,-1.28592 5.89619,-1.52885 12.09479,-1.3193 6.87941,0.23257 8.14444,0.51672 13.38293,3.00607 20.45385,9.71977 26.69973,34.95761 13.12156,53.02057 -8.54744,11.3706 -24.90597,16.57886 -38.4616,12.24547 z m 4.73941,-23.21678 0.8776,-2.65915 h 5.17483 5.17483 l 0.49886,2.65915 c 0.45286,2.41394 0.73483,2.65915 3.05775,2.65915 h 2.5589 l -4.28902,-12.91588 -4.28902,-12.91588 h -2.79979 -2.79979 l -3.97363,11.96618 c -2.1855,6.5814 -4.13085,12.39355 -4.32301,12.91588 -0.23091,0.62765 0.43111,0.9497 1.95225,0.9497 1.95678,0 2.43314,-0.39843 3.17924,-2.65915 z"
+   id="path1172" /><path
+   style="opacity:0.67;fill:#1a1a1a;stroke-width:1"
+   d="m 757.40096,447.03271 c -10.07219,-2.1694 -19.21882,-9.44689 -23.90621,-19.02089 -10.36733,-21.1753 2.58332,-46.04243 26.03155,-49.98436 17.09092,-2.8732 34.89044,8.71151 39.27892,25.56445 4.22549,16.22701 -3.35175,33.07206 -18.13797,40.32273 -8.24649,4.04381 -14.85581,4.92956 -23.26629,3.11807 z m 9.85056,-21.73925 c 4.1628,-1.19388 6.14133,-3.55815 6.14133,-7.33868 0,-2.3637 -0.45221,-3.67818 -1.64894,-4.7931 -1.54828,-1.44244 -1.57147,-1.62182 -0.37988,-2.93851 1.27738,-1.41149 1.67269,-5.04496 0.79711,-7.32667 -0.86361,-2.25052 -4.52241,-3.45295 -10.50681,-3.45295 h -5.73591 v 13.29576 13.29576 h 4.37362 c 2.40549,0 5.53726,-0.33372 6.95948,-0.74161 z"
+   id="path1174" /><g
+   id="g2719"
+   transform="matrix(1.1372652,0,0,1.1336727,-374.379,-96.430432)"
+   style="opacity:0.479596;stroke-width:0.880697"><path
+     style="fill:#000000;stroke-width:0.536762"
+     d=""
+     id="path2549" /><path
+     style="fill:#000000;stroke-width:0.536762"
+     d="m 508.72756,411.59389 c -13.91081,-3.77088 -24.64623,-14.60227 -28.18439,-28.43636 -5.27076,-20.60849 7.70496,-42.10984 28.6625,-47.49505 5.87211,-1.50889 16.55606,-0.98811 22.08841,1.07666 11.39736,4.25371 19.83826,12.69461 24.09197,24.09197 2.04758,5.48627 2.59264,16.22365 1.12206,22.10412 -3.14034,12.55748 -12.796,23.09925 -25.37406,27.70268 -6.28645,2.30077 -15.92801,2.71213 -22.40649,0.95598 z"
+     id="path2551" /><path
+     style="fill:#000000;stroke-width:0.203809"
+     d=""
+     id="path2553" /><path
+     style="fill:#000000;stroke-width:0.0720572"
+     d=""
+     id="path2555" /><path
+     style="fill:#000000;stroke-width:0.0127381"
+     d=""
+     id="path2557" /><path
+     style="fill:#000000;stroke-width:0.0127381"
+     d=""
+     id="path2559" /><path
+     style="fill:#000000;stroke-width:0.0127381"
+     d=""
+     id="path2561" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path2563" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path2565" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path2567" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path2569" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path2571" /><path
+     style="fill:#000000;stroke-width:0.33369"
+     d=""
+     id="path2573" /><path
+     style="fill:#000000;stroke-width:0.029494"
+     d=""
+     id="path2575" /><path
+     style="fill:#000000;stroke-width:0.029494"
+     d=""
+     id="path2577" /><path
+     style="fill:#000000;stroke-width:0.018168"
+     d=""
+     id="path2579" /><path
+     style="fill:#000000;stroke-width:0.018168"
+     d=""
+     id="path2581" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path2583" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path2585" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path2587" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path2589" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path2591" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path2593" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path2595" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path2597" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path2599" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path2601" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path2603" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path2605" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path2607" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path2609" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path2611" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path2613" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path2615" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path2617" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path2619" /><path
+     style="fill:#000000;stroke-width:0.28994"
+     d=""
+     id="path2621" /><path
+     style="fill:#000000;stroke-width:0.28994"
+     d=""
+     id="path2623" /><path
+     style="fill:#000000;stroke-width:0.14497"
+     d=""
+     id="path2625" /><path
+     style="fill:#000000;stroke-width:0.14497"
+     d=""
+     id="path2627" /><path
+     style="fill:#000000;stroke-width:0.14497"
+     d=""
+     id="path2629" /><path
+     style="fill:#000000;stroke-width:0.0362129"
+     d=""
+     id="path2631" /><path
+     style="fill:#000000;stroke-width:0.0362129"
+     d=""
+     id="path2633" /><path
+     style="fill:#000000;stroke-width:0.0776238"
+     d=""
+     id="path2635" /><path
+     style="fill:#000000;stroke-width:0.0776238"
+     d=""
+     id="path2637" /><path
+     style="fill:#000000;stroke-width:0.0194058"
+     d=""
+     id="path2639" /><path
+     style="fill:#000000;stroke-width:0.00485148"
+     d=""
+     id="path2641" /><path
+     style="fill:#000000;stroke-width:0.00521431"
+     d=""
+     id="path2643" /><path
+     style="fill:#000000;stroke-width:0.00521431"
+     d=""
+     id="path2645" /><path
+     style="fill:#000000;stroke-width:0.00521431"
+     d=""
+     id="path2647" /><path
+     style="fill:#000000;stroke-width:0.00521431"
+     d=""
+     id="path2649" /><path
+     style="fill:#000000;stroke-width:0.0068803"
+     d=""
+     id="path2651" /><path
+     style="fill:#000000;stroke-width:0.0068803"
+     d=""
+     id="path2653" /><path
+     style="fill:#000000;stroke-width:0.0068803"
+     d=""
+     id="path2655" /><path
+     style="fill:#000000;stroke-width:0.0068803"
+     d=""
+     id="path2657" /><path
+     style="fill:#000000;stroke-width:0.0068803"
+     d=""
+     id="path2659" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path2661" /><path
+     style="fill:#000000;stroke-width:0.00558815"
+     d=""
+     id="path2663" /><path
+     style="fill:#000000;stroke-width:0.00558815"
+     d=""
+     id="path2665" /><path
+     style="fill:#000000;stroke-width:0.00558815"
+     d=""
+     id="path2667" /><path
+     style="fill:#000000;stroke-width:0.00558815"
+     d=""
+     id="path2669" /><path
+     style="fill:#000000;stroke-width:0.00558815"
+     d=""
+     id="path2671" /><path
+     style="fill:#000000;stroke-width:0.00558815"
+     d=""
+     id="path2673" /><path
+     style="fill:#000000;stroke-width:0.00558815"
+     d=""
+     id="path2675" /><path
+     style="fill:#000000;stroke-width:0.00558815"
+     d=""
+     id="path2677" /><path
+     style="fill:#4d4d4d;stroke-width:0.61668"
+     d="m 509.42071,425.86016 c -11.10178,-2.06385 -18.41059,-6.02909 -27.28492,-14.80288 -7.66189,-7.57507 -11.0378,-12.72079 -13.71249,-20.90132 -2.41491,-7.38596 -2.97196,-18.79572 -1.28626,-26.34584 4.1386,-18.53657 17.10882,-32.94167 35.10638,-38.99014 14.07882,-4.73153 30.28173,-3.07342 43.17853,4.41863 7.20374,4.18481 16.45586,13.65392 20.02967,20.4994 4.77458,9.14553 6.00829,14.12571 6.00745,24.25077 -6.8e-4,9.79924 -0.77784,13.79366 -4.06976,20.9208 -4.95788,10.73394 -11.69724,18.34366 -21.32396,24.07786 -6.76481,4.02951 -13.1431,6.24859 -20.60568,7.16899 -7.1587,0.88292 -9.97591,0.83087 -16.03896,-0.29627 z m 18.40721,-12.13004 c 9.82322,-2.03786 19.70865,-8.67097 25.27779,-16.96137 1.41961,-2.11327 3.44154,-6.28447 4.49317,-9.26935 1.65543,-4.6986 1.91331,-6.45089 1.92119,-13.05504 0.008,-6.41601 -0.26862,-8.44554 -1.73892,-12.77334 -4.16203,-12.25088 -13.62222,-21.60008 -26.20363,-25.89619 -3.71605,-1.26891 -5.80696,-1.50552 -12.95322,-1.46589 -7.39312,0.041 -9.13061,0.27388 -13.11788,1.75821 -13.24477,4.93055 -22.63944,15.02442 -26.03509,27.9727 -0.62757,2.39303 -1.07016,6.88171 -1.07016,10.85344 0,13.79818 5.7102,24.5707 17.3893,32.80551 8.90175,6.27655 20.41101,8.44326 32.03745,6.03132 z"
+     id="path2679" /><path
+     style="fill:#000000;stroke-width:0.00972674"
+     d=""
+     id="path2681" /><path
+     style="fill:#000000;stroke-width:0.00972674"
+     d=""
+     id="path2683" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path2685" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path2687" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path2689" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path2691" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path2693" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path2695" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path2697" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path2699" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path2701" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path2703" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path2705" /><path
+     style="fill:#333333;stroke-width:0.880697"
+     d="m 513.56794,412.70742 c -5.66888,-0.71025 -12.2808,-3.27961 -17.44766,-6.78005 -2.56885,-1.74035 -6.615,-5.54589 -8.66879,-8.15328 -3.33856,-4.23847 -6.24391,-10.13955 -7.50988,-15.2534 -0.88356,-3.56923 -1.09175,-10.69181 -0.4418,-15.1164 2.19565,-14.94673 14.19812,-27.79074 29.92299,-32.02101 2.44393,-0.65746 3.79683,-0.81846 7.87788,-0.93748 4.25407,-0.12408 5.35557,-0.0551 8.06269,0.50414 13.06349,2.69913 23.14331,10.24166 28.79618,21.54761 2.47441,4.94894 4.05403,11.6476 4.05015,17.17555 -0.009,14.83399 -9.79772,29.77917 -23.37306,35.69058 -6.19632,2.6982 -15.16601,4.10836 -21.2687,3.34374 z m 9.25718,-2.50833 c 6.324,-0.7225 12.79488,-3.19778 17.25628,-6.60101 11.10077,-8.46789 16.79057,-20.61576 15.49602,-33.08443 -0.92577,-8.91674 -4.09432,-15.83307 -10.1182,-22.08615 -5.55653,-5.76791 -12.26615,-9.52451 -19.34928,-10.83333 -2.86956,-0.53023 -13.16978,-0.51232 -15.52818,0.0269 -7.47172,1.70862 -13.88712,5.36457 -19.07617,10.87093 -4.43295,4.70403 -7.04024,9.50079 -8.74006,16.07947 -1.00183,3.87738 -1.27485,10.79346 -0.60036,15.20911 1.18942,7.78667 4.36253,13.97455 10.08923,19.67498 8.13623,8.09893 19.31899,12.02887 30.57072,10.74341 z"
+     id="path2707" /><path
+     style="fill:#333333;stroke-width:0.880697"
+     d="m 513.90558,410.54873 c -5.42263,-0.67412 -11.74734,-3.1128 -16.68975,-6.43519 -2.45727,-1.65184 -6.32765,-5.26382 -8.29222,-7.73859 -3.19354,-4.02289 -5.97267,-9.62383 -7.18365,-14.47758 -0.84518,-3.38769 -1.04433,-10.14801 -0.42261,-14.34754 2.10027,-14.18651 13.58136,-26.37725 28.62314,-30.39236 2.33778,-0.62402 3.63191,-0.77683 7.53566,-0.88979 4.06929,-0.11777 5.12294,-0.0523 7.71246,0.47849 12.49602,2.56185 22.13798,9.72075 27.54527,20.45165 2.36694,4.69723 3.87795,11.05518 3.87423,16.30197 -0.008,14.07949 -9.37212,28.26453 -22.35774,33.87527 -5.92715,2.56097 -14.50721,3.89941 -20.34479,3.17367 z m 8.85503,-2.38074 c 6.0493,-0.68575 12.2391,-3.03514 16.50669,-6.26528 10.61855,-8.03719 16.06119,-19.56719 14.82288,-31.40167 -0.88557,-8.46322 -3.91647,-15.02777 -9.67869,-20.9628 -5.31514,-5.47454 -11.7333,-9.04007 -18.50874,-10.28233 -2.7449,-0.50326 -12.59769,-0.48626 -14.85365,0.0256 -7.14713,1.62172 -13.28387,5.09172 -18.24749,10.31801 -4.24039,4.46478 -6.73442,9.01757 -8.36041,15.26164 -0.95831,3.68016 -1.21947,10.24448 -0.57428,14.43553 1.13776,7.39063 4.17304,13.26378 9.65097,18.67427 7.78279,7.68701 18.47978,11.41706 29.24272,10.19698 z"
+     id="path2709" /><path
+     style="fill:#1a1a1a;stroke-width:0.880697"
+     d="m 514.31251,414.84492 c -16.22017,-1.83695 -30.7673,-13.36767 -35.41268,-28.06975 -1.56626,-4.95701 -1.75703,-6.3857 -1.75184,-13.11997 0.004,-6.87771 0.25269,-8.71249 1.82221,-13.51559 4.39433,-13.44773 16.16243,-24.06064 30.23807,-27.26982 2.32027,-0.52901 10.35217,-0.78103 14.65832,-0.45993 5.82468,0.43431 11.01236,2.09752 16.10374,5.16291 10.45743,6.29611 17.71766,16.18361 20.02836,27.27602 2.8789,13.82017 -0.79836,26.47561 -10.74184,36.96849 -6.68335,7.05264 -14.02546,11.01674 -23.4271,12.64856 -2.9094,0.50499 -8.71751,0.69614 -11.51724,0.37908 z"
+     id="path2711" /><path
+     style="fill:#333333;stroke-width:0.880697"
+     d="m 514.14839,412.81481 c -6.71001,-0.70916 -15.03775,-4.23368 -20.19157,-8.54563 -2.30472,-1.92824 -5.20836,-4.85451 -6.6002,-6.65162 -3.68481,-4.75776 -6.81729,-11.54259 -7.64522,-16.55925 -0.66305,-4.01754 -0.71085,-9.82773 -0.1131,-13.74551 0.62688,-4.10875 2.16684,-8.51846 4.25619,-12.18771 1.85183,-3.25213 3.93101,-5.95605 6.71291,-8.72994 4.86931,-4.85529 10.96738,-8.46579 17.79297,-10.53472 3.28822,-0.9967 5.42775,-1.24352 10.87012,-1.25398 3.46985,-0.007 3.61096,0.002 5.10566,0.29721 4.34551,0.85959 7.89269,2.00559 11.41912,3.68921 7.77694,3.71295 13.87072,9.57363 17.93189,17.24596 2.2043,4.16437 3.79525,9.60524 4.30218,14.71305 0.17122,1.72517 0.14123,5.26434 -0.0593,7.00134 -1.63637,14.17274 -11.48956,27.28786 -24.27149,32.30666 -3.95704,1.55373 -8.3637,2.53333 -13.33005,2.96329 -1.46841,0.12712 -4.94259,0.12243 -6.18009,-0.008 z m 9.03487,-4.54618 c 6.95326,-0.9546 13.00422,-3.53522 17.84237,-7.60942 1.76178,-1.48359 4.30627,-4.06992 5.58519,-5.67701 5.11411,-6.42642 7.65789,-13.43003 7.65538,-21.07701 -0.002,-7.58325 -2.34406,-14.88218 -6.58102,-20.51365 -5.50671,-7.31916 -13.12864,-12.32738 -21.25756,-13.96792 -1.85098,-0.37356 -5.44946,-0.54165 -9.72251,-0.45415 -3.76242,0.077 -4.94698,0.18191 -6.53305,0.57841 -8.19938,2.04973 -15.19189,6.70791 -20.25871,13.4957 -2.12229,2.84312 -3.63749,5.85435 -4.86244,9.66331 -0.95433,2.9675 -1.30924,5.06153 -1.52164,8.97794 -0.52718,9.72057 2.12134,17.68042 8.15784,24.51745 6.15864,6.97538 14.37985,11.21068 23.64435,12.18082 1.81381,0.18993 6.08849,0.12761 7.8518,-0.11447 z"
+     id="path2713" /><path
+     style="fill:#666666;fill-opacity:1;stroke-width:0.880697"
+     d=""
+     id="path2715" /><path
+     style="fill:#666666;fill-opacity:1;stroke-width:0.880697"
+     d=""
+     id="path2717" /></g><path
+   style="opacity:0.67;fill:#000000;stroke-width:1;filter:url(#filter1841)"
+   d="m 207.20054,391.65552 c -9.23682,-1.35517 -17.60906,-4.3199 -24.25473,-8.58893 -7.16895,-4.60518 -16.81327,-14.00166 -21.93822,-21.37443 -7.30347,-10.50683 -10.83415,-25.00911 -9.65204,-39.64581 2.07384,-25.67817 19.81349,-47.87162 44.60316,-55.80145 13.13969,-4.20319 28.24246,-3.85488 41.26452,0.95165 9.74569,3.5972 16.99497,8.71304 25.88524,18.2673 7.44138,7.99715 13.2053,19.25259 15.10591,29.49792 0.79189,4.26871 0.89372,20.12896 0.15777,24.57196 -1.67809,10.13079 -8.68931,23.65676 -16.66054,32.14131 -8.22693,8.75673 -20.57432,15.90529 -31.99658,18.52452 -7.05057,1.61676 -17.02295,2.26165 -22.51449,1.45596 z m 14.09883,-14.14042 c 13.51286,-1.50678 25.20045,-8.27328 34.34666,-19.88493 13.6254,-17.29824 14.54039,-41.00495 2.29271,-59.4024 -7.27086,-10.92169 -19.143,-19.2721 -31.05214,-21.84089 -6.97876,-1.50531 -20.32088,-1.21346 -26.54074,0.58057 -9.31735,2.68745 -19.40362,9.54672 -25.39437,17.26969 -5.19514,6.69732 -8.07606,12.73178 -9.97858,20.90141 -0.96539,4.14547 -0.96797,18.85768 -0.004,22.98097 3.08405,13.19222 10.68439,23.93975 22.24141,31.45124 5.69331,3.70037 12.94766,6.582 19.52377,7.75538 3.44871,0.61536 9.98127,0.70011 14.56531,0.18896 z"
+   id="path2721" /><path
+   style="opacity:0.354357;fill:#000000;stroke-width:0.999998"
+   d="m 208.23475,364.28326 c -23.59633,-5.17025 -36.75957,-27.727 -29.1465,-49.94591 3.70958,-10.82648 13.58161,-20.17046 24.91445,-23.58185 6.47913,-1.95032 16.79063,-1.95032 23.26977,0 12.82635,3.86095 23.88568,15.56238 26.55587,28.09768 0.48304,2.26763 0.70299,7.07921 0.50593,11.06748 -0.31955,6.46766 -0.60155,7.55322 -3.38343,13.02459 -8.14186,16.01327 -26.09291,24.98038 -42.71609,21.33801 z"
+   id="path2723" /><path
+   style="opacity:0.164176;fill:#191919;fill-opacity:1;stroke-width:1"
+   d="m 211.29227,373.88975 c -3.1501,-0.37454 -5.91498,-0.91346 -8.51808,-1.66034 -12.9001,-3.70124 -24.16659,-12.78277 -29.95147,-24.14288 -2.02213,-3.97098 -3.83328,-9.71481 -4.24606,-13.46588 -0.44822,-4.07314 -0.29333,-13.49269 0.2767,-16.82699 0.89922,-5.25986 3.54485,-11.75433 6.74641,-16.561 1.94382,-2.91836 3.59097,-4.9342 5.98,-7.31852 5.82769,-5.81621 12.79172,-9.96099 20.51923,-12.21246 3.72636,-1.0857 6.04041,-1.30482 13.72493,-1.29965 4.4938,0.003 5.9829,0.0535 7.48083,0.25337 6.731,0.89829 12.42927,3.03344 18.12664,6.79208 3.41924,2.25571 5.81505,4.2423 8.72522,7.23486 1.21457,1.24896 2.74265,2.95603 3.39574,3.7935 6.33442,8.1228 9.52665,16.98828 9.90941,27.52055 0.44533,12.25408 -4.3604,23.97912 -13.73146,33.50204 -3.07767,3.12755 -5.46231,5.12094 -8.54843,7.14588 -1.81672,1.19203 -5.16204,2.95425 -7.19376,3.78948 -3.85044,1.58289 -8.69111,2.80875 -12.84129,3.25194 -1.472,0.15719 -8.94686,0.31195 -9.85456,0.20402 z m 8.99139,-2.56263 c 8.99264,-1.2628 15.7231,-3.87616 21.83646,-8.47885 8.34222,-6.28078 14.61572,-15.79799 17.08469,-25.91835 0.83746,-3.4328 1.02624,-4.91966 1.10503,-8.70367 0.1003,-4.81682 -0.29197,-7.91654 -1.60705,-12.69891 -2.55275,-9.2832 -8.21771,-17.60344 -15.93733,-23.40748 -5.78923,-4.35267 -12.94848,-7.42263 -20.8191,-8.92745 -1.56535,-0.29928 -1.91476,-0.31106 -7.12118,-0.23997 -4.72354,0.0645 -5.70214,0.11621 -7.12947,0.37676 -6.8674,1.25359 -14.59984,4.87636 -20.49162,9.60066 -7.68438,6.16169 -13.12288,14.38131 -15.40383,23.28098 -0.94589,3.69059 -1.22001,6.18024 -1.22001,11.08031 0,8.07001 1.07966,12.68388 4.58048,19.57434 2.28329,4.49408 4.24899,7.26683 7.57489,10.68489 3.61537,3.71555 6.08997,5.73477 9.53507,7.78041 4.77726,2.83665 10.94223,5.1476 15.92854,5.97085 0.71212,0.11757 1.45661,0.24351 1.65442,0.27985 0.92412,0.16979 8.77255,-0.0216 10.43001,-0.25437 z"
+   id="path2725" /><path
+   style="opacity:1;fill:#191919;fill-opacity:1;stroke-width:1"
+   d="m 210.12652,371.51768 c -0.17198,-0.0315 -0.84741,-0.14291 -1.50095,-0.24759 -6.54312,-1.0481 -14.525,-4.38908 -19.68107,-8.23789 -2.56525,-1.91487 -5.98738,-5.15475 -8.26628,-7.82605 -3.01188,-3.5305 -6.18602,-9.17261 -7.96337,-14.15509 -1.37769,-3.86211 -1.89233,-6.92052 -2.05904,-12.2366 -0.2281,-7.27391 0.84081,-13.07004 3.52836,-19.13243 3.30803,-7.462 9.26176,-14.37224 16.54386,-19.20173 5.3931,-3.57671 12.21524,-6.34349 17.58443,-7.13152 1.81095,-0.2658 5.53723,-0.41733 9.25627,-0.37642 2.6782,0.0295 3.17723,0.0688 4.62792,0.36531 7.06882,1.44454 13.02977,3.81983 18.29043,7.28828 4.75125,3.13258 8.84192,7.17411 12.07173,11.92672 3.62667,5.33658 5.7438,10.52365 7.01763,17.19355 0.57635,3.01784 0.6445,3.83116 0.63927,7.62983 -0.004,3.15124 -0.0426,3.86532 -0.29113,5.44094 -1.59445,10.10626 -6.26202,19.12228 -13.60179,26.27363 -6.32886,6.1664 -13.21548,9.72323 -22.26413,11.4991 -3.66005,0.71832 -5.38387,0.88526 -9.67945,0.9374 -2.167,0.0263 -4.08071,0.022 -4.25269,-0.009 z m 8.97318,-4.929 c 5.35551,-0.4165 11.61406,-2.31446 16.22051,-4.91901 3.35076,-1.89457 5.73765,-3.77159 8.96018,-7.04617 3.97219,-4.03634 6.14954,-7.14919 8.85914,-12.6655 2.16136,-4.40017 2.47534,-5.76781 2.7878,-12.14305 0.16519,-3.37046 0.0196,-7.8598 -0.32933,-10.15405 -0.72792,-4.78629 -3.13453,-10.30728 -6.5,-14.91159 -2.76031,-3.77639 -6.50967,-7.44118 -10.35754,-10.12394 -4.69995,-3.27684 -10.53631,-5.72999 -15.35556,-6.45427 -2.72385,-0.40936 -12.14391,-0.49359 -15.19711,-0.13588 -3.20544,0.37555 -8.39691,2.17468 -12.11033,4.1969 -3.56488,1.94133 -6.3426,4.036 -9.34901,7.05009 -4.48788,4.49934 -7.16857,8.71652 -9.12127,14.34928 -1.61426,4.65649 -2.16365,8.21858 -2.15846,13.99471 0.005,5.02975 0.60728,8.78063 2.10046,13.07077 3.35607,9.64253 11.86179,18.45366 21.95381,22.74209 3.94134,1.6748 8.24424,2.76255 12.6248,3.19147 0.98581,0.0965 5.54454,0.0692 6.97191,-0.0419 z"
+   id="path2749" /><g
+   id="g4623"
+   transform="matrix(1.1372652,0,0,1.1336727,20.435096,61.296928)"
+   style="opacity:0.479596;stroke-width:0.880697"><path
+     style="fill:#000000;stroke-width:0.536762"
+     d=""
+     id="path4453" /><path
+     style="fill:#000000;stroke-width:0.536762"
+     d="m 508.72756,411.59389 c -13.91081,-3.77088 -24.64623,-14.60227 -28.18439,-28.43636 -5.27076,-20.60849 7.70496,-42.10984 28.6625,-47.49505 5.87211,-1.50889 16.55606,-0.98811 22.08841,1.07666 11.39736,4.25371 19.83826,12.69461 24.09197,24.09197 2.04758,5.48627 2.59264,16.22365 1.12206,22.10412 -3.14034,12.55748 -12.796,23.09925 -25.37406,27.70268 -6.28645,2.30077 -15.92801,2.71213 -22.40649,0.95598 z"
+     id="path4455" /><path
+     style="fill:#000000;stroke-width:0.203809"
+     d=""
+     id="path4457" /><path
+     style="fill:#000000;stroke-width:0.0720572"
+     d=""
+     id="path4459" /><path
+     style="fill:#000000;stroke-width:0.0127381"
+     d=""
+     id="path4461" /><path
+     style="fill:#000000;stroke-width:0.0127381"
+     d=""
+     id="path4463" /><path
+     style="fill:#000000;stroke-width:0.0127381"
+     d=""
+     id="path4465" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path4467" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path4469" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path4471" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path4473" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path4475" /><path
+     style="fill:#000000;stroke-width:0.33369"
+     d=""
+     id="path4477" /><path
+     style="fill:#000000;stroke-width:0.029494"
+     d=""
+     id="path4479" /><path
+     style="fill:#000000;stroke-width:0.029494"
+     d=""
+     id="path4481" /><path
+     style="fill:#000000;stroke-width:0.018168"
+     d=""
+     id="path4483" /><path
+     style="fill:#000000;stroke-width:0.018168"
+     d=""
+     id="path4485" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path4487" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path4489" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path4491" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path4493" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path4495" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path4497" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path4499" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path4501" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path4503" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path4505" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path4507" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path4509" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path4511" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path4513" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path4515" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path4517" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path4519" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path4521" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path4523" /><path
+     style="fill:#000000;stroke-width:0.28994"
+     d=""
+     id="path4525" /><path
+     style="fill:#000000;stroke-width:0.28994"
+     d=""
+     id="path4527" /><path
+     style="fill:#000000;stroke-width:0.14497"
+     d=""
+     id="path4529" /><path
+     style="fill:#000000;stroke-width:0.14497"
+     d=""
+     id="path4531" /><path
+     style="fill:#000000;stroke-width:0.14497"
+     d=""
+     id="path4533" /><path
+     style="fill:#000000;stroke-width:0.0362129"
+     d=""
+     id="path4535" /><path
+     style="fill:#000000;stroke-width:0.0362129"
+     d=""
+     id="path4537" /><path
+     style="fill:#000000;stroke-width:0.0776238"
+     d=""
+     id="path4539" /><path
+     style="fill:#000000;stroke-width:0.0776238"
+     d=""
+     id="path4541" /><path
+     style="fill:#000000;stroke-width:0.0194058"
+     d=""
+     id="path4543" /><path
+     style="fill:#000000;stroke-width:0.00485148"
+     d=""
+     id="path4545" /><path
+     style="fill:#000000;stroke-width:0.00521431"
+     d=""
+     id="path4547" /><path
+     style="fill:#000000;stroke-width:0.00521431"
+     d=""
+     id="path4549" /><path
+     style="fill:#000000;stroke-width:0.00521431"
+     d=""
+     id="path4551" /><path
+     style="fill:#000000;stroke-width:0.00521431"
+     d=""
+     id="path4553" /><path
+     style="fill:#000000;stroke-width:0.0068803"
+     d=""
+     id="path4555" /><path
+     style="fill:#000000;stroke-width:0.0068803"
+     d=""
+     id="path4557" /><path
+     style="fill:#000000;stroke-width:0.0068803"
+     d=""
+     id="path4559" /><path
+     style="fill:#000000;stroke-width:0.0068803"
+     d=""
+     id="path4561" /><path
+     style="fill:#000000;stroke-width:0.0068803"
+     d=""
+     id="path4563" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path4565" /><path
+     style="fill:#000000;stroke-width:0.00558815"
+     d=""
+     id="path4567" /><path
+     style="fill:#000000;stroke-width:0.00558815"
+     d=""
+     id="path4569" /><path
+     style="fill:#000000;stroke-width:0.00558815"
+     d=""
+     id="path4571" /><path
+     style="fill:#000000;stroke-width:0.00558815"
+     d=""
+     id="path4573" /><path
+     style="fill:#000000;stroke-width:0.00558815"
+     d=""
+     id="path4575" /><path
+     style="fill:#000000;stroke-width:0.00558815"
+     d=""
+     id="path4577" /><path
+     style="fill:#000000;stroke-width:0.00558815"
+     d=""
+     id="path4579" /><path
+     style="fill:#000000;stroke-width:0.00558815"
+     d=""
+     id="path4581" /><path
+     style="fill:#4d4d4d;stroke-width:0.61668"
+     d="m 509.42071,425.86016 c -11.10178,-2.06385 -18.41059,-6.02909 -27.28492,-14.80288 -7.66189,-7.57507 -11.0378,-12.72079 -13.71249,-20.90132 -2.41491,-7.38596 -2.97196,-18.79572 -1.28626,-26.34584 4.1386,-18.53657 17.10882,-32.94167 35.10638,-38.99014 14.07882,-4.73153 30.28173,-3.07342 43.17853,4.41863 7.20374,4.18481 16.45586,13.65392 20.02967,20.4994 4.77458,9.14553 6.00829,14.12571 6.00745,24.25077 -6.8e-4,9.79924 -0.77784,13.79366 -4.06976,20.9208 -4.95788,10.73394 -11.69724,18.34366 -21.32396,24.07786 -6.76481,4.02951 -13.1431,6.24859 -20.60568,7.16899 -7.1587,0.88292 -9.97591,0.83087 -16.03896,-0.29627 z m 18.40721,-12.13004 c 9.82322,-2.03786 19.70865,-8.67097 25.27779,-16.96137 1.41961,-2.11327 3.44154,-6.28447 4.49317,-9.26935 1.65543,-4.6986 1.91331,-6.45089 1.92119,-13.05504 0.008,-6.41601 -0.26862,-8.44554 -1.73892,-12.77334 -4.16203,-12.25088 -13.62222,-21.60008 -26.20363,-25.89619 -3.71605,-1.26891 -5.80696,-1.50552 -12.95322,-1.46589 -7.39312,0.041 -9.13061,0.27388 -13.11788,1.75821 -13.24477,4.93055 -22.63944,15.02442 -26.03509,27.9727 -0.62757,2.39303 -1.07016,6.88171 -1.07016,10.85344 0,13.79818 5.7102,24.5707 17.3893,32.80551 8.90175,6.27655 20.41101,8.44326 32.03745,6.03132 z"
+     id="path4583" /><path
+     style="fill:#000000;stroke-width:0.00972674"
+     d=""
+     id="path4585" /><path
+     style="fill:#000000;stroke-width:0.00972674"
+     d=""
+     id="path4587" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path4589" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path4591" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path4593" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path4595" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path4597" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path4599" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path4601" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path4603" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path4605" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path4607" /><path
+     style="fill:#000000;stroke-width:0.0034402"
+     d=""
+     id="path4609" /><path
+     style="fill:#333333;stroke-width:0.880697"
+     d="m 513.56794,412.70742 c -5.66888,-0.71025 -12.2808,-3.27961 -17.44766,-6.78005 -2.56885,-1.74035 -6.615,-5.54589 -8.66879,-8.15328 -3.33856,-4.23847 -6.24391,-10.13955 -7.50988,-15.2534 -0.88356,-3.56923 -1.09175,-10.69181 -0.4418,-15.1164 2.19565,-14.94673 14.19812,-27.79074 29.92299,-32.02101 2.44393,-0.65746 3.79683,-0.81846 7.87788,-0.93748 4.25407,-0.12408 5.35557,-0.0551 8.06269,0.50414 13.06349,2.69913 23.14331,10.24166 28.79618,21.54761 2.47441,4.94894 4.05403,11.6476 4.05015,17.17555 -0.009,14.83399 -9.79772,29.77917 -23.37306,35.69058 -6.19632,2.6982 -15.16601,4.10836 -21.2687,3.34374 z m 9.25718,-2.50833 c 6.324,-0.7225 12.79488,-3.19778 17.25628,-6.60101 11.10077,-8.46789 16.79057,-20.61576 15.49602,-33.08443 -0.92577,-8.91674 -4.09432,-15.83307 -10.1182,-22.08615 -5.55653,-5.76791 -12.26615,-9.52451 -19.34928,-10.83333 -2.86956,-0.53023 -13.16978,-0.51232 -15.52818,0.0269 -7.47172,1.70862 -13.88712,5.36457 -19.07617,10.87093 -4.43295,4.70403 -7.04024,9.50079 -8.74006,16.07947 -1.00183,3.87738 -1.27485,10.79346 -0.60036,15.20911 1.18942,7.78667 4.36253,13.97455 10.08923,19.67498 8.13623,8.09893 19.31899,12.02887 30.57072,10.74341 z"
+     id="path4611" /><path
+     style="fill:#333333;stroke-width:0.880697"
+     d="m 513.90558,410.54873 c -5.42263,-0.67412 -11.74734,-3.1128 -16.68975,-6.43519 -2.45727,-1.65184 -6.32765,-5.26382 -8.29222,-7.73859 -3.19354,-4.02289 -5.97267,-9.62383 -7.18365,-14.47758 -0.84518,-3.38769 -1.04433,-10.14801 -0.42261,-14.34754 2.10027,-14.18651 13.58136,-26.37725 28.62314,-30.39236 2.33778,-0.62402 3.63191,-0.77683 7.53566,-0.88979 4.06929,-0.11777 5.12294,-0.0523 7.71246,0.47849 12.49602,2.56185 22.13798,9.72075 27.54527,20.45165 2.36694,4.69723 3.87795,11.05518 3.87423,16.30197 -0.008,14.07949 -9.37212,28.26453 -22.35774,33.87527 -5.92715,2.56097 -14.50721,3.89941 -20.34479,3.17367 z m 8.85503,-2.38074 c 6.0493,-0.68575 12.2391,-3.03514 16.50669,-6.26528 10.61855,-8.03719 16.06119,-19.56719 14.82288,-31.40167 -0.88557,-8.46322 -3.91647,-15.02777 -9.67869,-20.9628 -5.31514,-5.47454 -11.7333,-9.04007 -18.50874,-10.28233 -2.7449,-0.50326 -12.59769,-0.48626 -14.85365,0.0256 -7.14713,1.62172 -13.28387,5.09172 -18.24749,10.31801 -4.24039,4.46478 -6.73442,9.01757 -8.36041,15.26164 -0.95831,3.68016 -1.21947,10.24448 -0.57428,14.43553 1.13776,7.39063 4.17304,13.26378 9.65097,18.67427 7.78279,7.68701 18.47978,11.41706 29.24272,10.19698 z"
+     id="path4613" /><path
+     style="fill:#1a1a1a;stroke-width:0.880697"
+     d="m 514.31251,414.84492 c -16.22017,-1.83695 -30.7673,-13.36767 -35.41268,-28.06975 -1.56626,-4.95701 -1.75703,-6.3857 -1.75184,-13.11997 0.004,-6.87771 0.25269,-8.71249 1.82221,-13.51559 4.39433,-13.44773 16.16243,-24.06064 30.23807,-27.26982 2.32027,-0.52901 10.35217,-0.78103 14.65832,-0.45993 5.82468,0.43431 11.01236,2.09752 16.10374,5.16291 10.45743,6.29611 17.71766,16.18361 20.02836,27.27602 2.8789,13.82017 -0.79836,26.47561 -10.74184,36.96849 -6.68335,7.05264 -14.02546,11.01674 -23.4271,12.64856 -2.9094,0.50499 -8.71751,0.69614 -11.51724,0.37908 z"
+     id="path4615" /><path
+     style="fill:#333333;stroke-width:0.880697"
+     d="m 514.14839,412.81481 c -6.71001,-0.70916 -15.03775,-4.23368 -20.19157,-8.54563 -2.30472,-1.92824 -5.20836,-4.85451 -6.6002,-6.65162 -3.68481,-4.75776 -6.81729,-11.54259 -7.64522,-16.55925 -0.66305,-4.01754 -0.71085,-9.82773 -0.1131,-13.74551 0.62688,-4.10875 2.16684,-8.51846 4.25619,-12.18771 1.85183,-3.25213 3.93101,-5.95605 6.71291,-8.72994 4.86931,-4.85529 10.96738,-8.46579 17.79297,-10.53472 3.28822,-0.9967 5.42775,-1.24352 10.87012,-1.25398 3.46985,-0.007 3.61096,0.002 5.10566,0.29721 4.34551,0.85959 7.89269,2.00559 11.41912,3.68921 7.77694,3.71295 13.87072,9.57363 17.93189,17.24596 2.2043,4.16437 3.79525,9.60524 4.30218,14.71305 0.17122,1.72517 0.14123,5.26434 -0.0593,7.00134 -1.63637,14.17274 -11.48956,27.28786 -24.27149,32.30666 -3.95704,1.55373 -8.3637,2.53333 -13.33005,2.96329 -1.46841,0.12712 -4.94259,0.12243 -6.18009,-0.008 z m 9.03487,-4.54618 c 6.95326,-0.9546 13.00422,-3.53522 17.84237,-7.60942 1.76178,-1.48359 4.30627,-4.06992 5.58519,-5.67701 5.11411,-6.42642 7.65789,-13.43003 7.65538,-21.07701 -0.002,-7.58325 -2.34406,-14.88218 -6.58102,-20.51365 -5.50671,-7.31916 -13.12864,-12.32738 -21.25756,-13.96792 -1.85098,-0.37356 -5.44946,-0.54165 -9.72251,-0.45415 -3.76242,0.077 -4.94698,0.18191 -6.53305,0.57841 -8.19938,2.04973 -15.19189,6.70791 -20.25871,13.4957 -2.12229,2.84312 -3.63749,5.85435 -4.86244,9.66331 -0.95433,2.9675 -1.30924,5.06153 -1.52164,8.97794 -0.52718,9.72057 2.12134,17.68042 8.15784,24.51745 6.15864,6.97538 14.37985,11.21068 23.64435,12.18082 1.81381,0.18993 6.08849,0.12761 7.8518,-0.11447 z"
+     id="path4617" /><path
+     style="fill:#666666;fill-opacity:1;stroke-width:0.880697"
+     d=""
+     id="path4619" /><path
+     style="fill:#666666;fill-opacity:1;stroke-width:0.880697"
+     d=""
+     id="path4621" /></g><path
+   style="opacity:0.67;fill:#000000;stroke-width:1;filter:url(#filter1841)"
+   d="m 602.01462,549.38288 c -9.23682,-1.35517 -17.60906,-4.3199 -24.25473,-8.58893 -7.16895,-4.60518 -16.81327,-14.00166 -21.93822,-21.37443 -7.30347,-10.50683 -10.83415,-25.00911 -9.65204,-39.64581 2.07384,-25.67817 19.81349,-47.87162 44.60316,-55.80145 13.13969,-4.20319 28.24246,-3.85488 41.26452,0.95165 9.74569,3.5972 16.99497,8.71304 25.88524,18.2673 7.44138,7.99715 13.2053,19.25259 15.10591,29.49792 0.79189,4.26871 0.89372,20.12896 0.15777,24.57196 -1.67809,10.13079 -8.68931,23.65676 -16.66054,32.14131 -8.22693,8.75673 -20.57432,15.90529 -31.99658,18.52452 -7.05057,1.61676 -17.02295,2.26165 -22.51449,1.45596 z m 14.09883,-14.14042 c 13.51286,-1.50678 25.20045,-8.27328 34.34666,-19.88493 13.6254,-17.29824 14.54039,-41.00495 2.29271,-59.4024 -7.27086,-10.92169 -19.143,-19.2721 -31.05214,-21.84089 -6.97876,-1.50531 -20.32088,-1.21346 -26.54074,0.58057 -9.31735,2.68745 -19.40362,9.54672 -25.39437,17.26969 -5.19514,6.69732 -8.07606,12.73178 -9.97858,20.90141 -0.96539,4.14547 -0.96797,18.85768 -0.004,22.98097 3.08405,13.19222 10.68439,23.93975 22.24141,31.45124 5.69331,3.70037 12.94766,6.582 19.52377,7.75538 3.44871,0.61536 9.98127,0.70011 14.56531,0.18896 z"
+   id="path4625" /><path
+   style="opacity:0.354357;fill:#000000;stroke-width:0.999998"
+   d="m 603.04883,522.01062 c -23.59633,-5.17025 -36.75957,-27.727 -29.1465,-49.94591 3.70958,-10.82648 13.58161,-20.17046 24.91445,-23.58185 6.47913,-1.95032 16.79063,-1.95032 23.26977,0 12.82635,3.86095 23.88568,15.56238 26.55587,28.09768 0.48304,2.26763 0.70299,7.07921 0.50593,11.06748 -0.31955,6.46766 -0.60155,7.55322 -3.38343,13.02459 -8.14186,16.01327 -26.09291,24.98038 -42.71609,21.33801 z"
+   id="path4627" /><path
+   style="opacity:0.164176;fill:#191919;fill-opacity:1;stroke-width:1"
+   d="m 606.10635,531.61711 c -3.1501,-0.37454 -5.91498,-0.91346 -8.51808,-1.66034 -12.9001,-3.70124 -24.16659,-12.78277 -29.95147,-24.14288 -2.02213,-3.97098 -3.83328,-9.71481 -4.24606,-13.46588 -0.44822,-4.07314 -0.29333,-13.49269 0.2767,-16.82699 0.89922,-5.25986 3.54485,-11.75433 6.74641,-16.561 1.94382,-2.91836 3.59097,-4.9342 5.98,-7.31852 5.82769,-5.81621 12.79172,-9.96099 20.51923,-12.21246 3.72636,-1.0857 6.04041,-1.30482 13.72493,-1.29965 4.4938,0.003 5.9829,0.0535 7.48083,0.25337 6.731,0.89829 12.42927,3.03344 18.12664,6.79208 3.41924,2.25571 5.81505,4.2423 8.72522,7.23486 1.21457,1.24896 2.74265,2.95603 3.39574,3.7935 6.33442,8.1228 9.52665,16.98828 9.90941,27.52055 0.44533,12.25408 -4.3604,23.97912 -13.73146,33.50204 -3.07767,3.12755 -5.46231,5.12094 -8.54843,7.14588 -1.81672,1.19203 -5.16204,2.95425 -7.19376,3.78948 -3.85044,1.58289 -8.69111,2.80875 -12.84129,3.25194 -1.472,0.15719 -8.94686,0.31195 -9.85456,0.20402 z m 8.99139,-2.56263 c 8.99264,-1.2628 15.7231,-3.87616 21.83646,-8.47885 8.34222,-6.28078 14.61572,-15.79799 17.08469,-25.91835 0.83746,-3.4328 1.02624,-4.91966 1.10503,-8.70367 0.1003,-4.81682 -0.29197,-7.91654 -1.60705,-12.69891 -2.55275,-9.2832 -8.21771,-17.60344 -15.93733,-23.40748 -5.78923,-4.35267 -12.94848,-7.42263 -20.8191,-8.92745 -1.56535,-0.29928 -1.91476,-0.31106 -7.12118,-0.23997 -4.72354,0.0645 -5.70214,0.11621 -7.12947,0.37676 -6.8674,1.25359 -14.59984,4.87636 -20.49162,9.60066 -7.68438,6.16169 -13.12288,14.38131 -15.40383,23.28098 -0.94589,3.69059 -1.22001,6.18024 -1.22001,11.08031 0,8.07001 1.07966,12.68388 4.58048,19.57434 2.28329,4.49408 4.24899,7.26683 7.57489,10.68489 3.61537,3.71555 6.08997,5.73477 9.53507,7.78041 4.77726,2.83665 10.94223,5.1476 15.92854,5.97085 0.71212,0.11757 1.45661,0.24351 1.65442,0.27985 0.92412,0.16979 8.77255,-0.0216 10.43001,-0.25437 z"
+   id="path4629" /><path
+   style="opacity:1;fill:#191919;fill-opacity:1;stroke-width:1"
+   d="m 604.9406,529.24504 c -0.17198,-0.0315 -0.84741,-0.14291 -1.50095,-0.24759 -6.54312,-1.0481 -14.525,-4.38908 -19.68107,-8.23789 -2.56525,-1.91487 -5.98738,-5.15475 -8.26628,-7.82605 -3.01188,-3.5305 -6.18602,-9.17261 -7.96337,-14.15509 -1.37769,-3.86211 -1.89233,-6.92052 -2.05904,-12.2366 -0.2281,-7.27391 0.84081,-13.07004 3.52836,-19.13243 3.30803,-7.462 9.26176,-14.37224 16.54386,-19.20173 5.3931,-3.57671 12.21524,-6.34349 17.58443,-7.13152 1.81095,-0.2658 5.53723,-0.41733 9.25627,-0.37642 2.6782,0.0295 3.17723,0.0688 4.62792,0.36531 7.06882,1.44454 13.02977,3.81983 18.29043,7.28828 4.75125,3.13258 8.84192,7.17411 12.07173,11.92672 3.62667,5.33658 5.7438,10.52365 7.01763,17.19355 0.57635,3.01784 0.6445,3.83116 0.63927,7.62983 -0.004,3.15124 -0.0426,3.86532 -0.29113,5.44094 -1.59445,10.10626 -6.26202,19.12228 -13.60179,26.27363 -6.32886,6.1664 -13.21548,9.72323 -22.26413,11.4991 -3.66005,0.71832 -5.38387,0.88526 -9.67945,0.9374 -2.167,0.0263 -4.08071,0.022 -4.25269,-0.009 z m 8.97318,-4.929 c 5.35551,-0.4165 11.61406,-2.31446 16.22051,-4.91901 3.35076,-1.89457 5.73765,-3.77159 8.96018,-7.04617 3.97219,-4.03634 6.14954,-7.14919 8.85914,-12.6655 2.16136,-4.40017 2.47534,-5.76781 2.7878,-12.14305 0.16519,-3.37046 0.0196,-7.8598 -0.32933,-10.15405 -0.72792,-4.78629 -3.13453,-10.30728 -6.5,-14.91159 -2.76031,-3.77639 -6.50967,-7.44118 -10.35754,-10.12394 -4.69995,-3.27684 -10.53631,-5.72999 -15.35556,-6.45427 -2.72385,-0.40936 -12.14391,-0.49359 -15.19711,-0.13588 -3.20544,0.37555 -8.39691,2.17468 -12.11033,4.1969 -3.56488,1.94133 -6.3426,4.036 -9.34901,7.05009 -4.48788,4.49934 -7.16857,8.71652 -9.12127,14.34928 -1.61426,4.65649 -2.16365,8.21858 -2.15846,13.99471 0.005,5.02975 0.60728,8.78063 2.10046,13.07077 3.35607,9.64253 11.86179,18.45366 21.95381,22.74209 3.94134,1.6748 8.24424,2.76255 12.6248,3.19147 0.98581,0.0965 5.54454,0.0692 6.97191,-0.0419 z"
+   id="path4631" /><path
+   style="opacity:1;fill:#222222;fill-opacity:1;stroke-width:0.999998"
+   d="m 326.81108,553.24095 c -0.72314,-0.72314 -0.99243,-7.08393 -0.99243,-23.44204 0,-20.69852 -0.11797,-22.55639 -1.51241,-23.81834 -1.32863,-1.20239 -4.22303,-1.36872 -23.81834,-1.36872 -16.24634,0 -22.57552,-0.2696 -23.29835,-0.99243 -1.40874,-1.40874 -1.40874,-38.78469 0,-40.19343 0.72239,-0.72239 7.0074,-0.99243 23.09764,-0.99243 18.99295,0 22.28819,-0.18298 23.40483,-1.29962 0.71478,-0.71478 1.37783,-1.36606 1.47344,-1.44729 0.0956,-0.0812 0.37473,-10.5682 0.62027,-23.3044 l 0.44644,-23.15671 h 20.26212 20.26212 l 0.41352,22.86486 c 0.37961,20.99047 0.54267,23.00744 1.98898,24.60401 1.52743,1.6861 2.26016,1.73915 24.02509,1.73915 16.35811,0 22.71891,0.26928 23.44205,0.99243 0.71501,0.71501 0.99243,6.37081 0.99243,20.23302 0,18.17619 -0.0885,19.28796 -1.59968,20.09672 -0.98687,0.52816 -9.96711,0.85612 -23.44205,0.85612 -20.11021,0 -21.95091,0.11994 -23.21108,1.51242 -1.2004,1.32642 -1.36872,4.18083 -1.36872,23.21108 0,13.37589 -0.32838,22.31225 -0.85612,23.29835 -0.80876,1.51119 -1.92053,1.59968 -20.09672,1.59968 -13.86221,0 -19.51801,-0.27741 -20.23303,-0.99243 z m 25.0012,-20.71699 3.09462,-5.58242 h -7.92792 c -4.36035,0 -7.92792,0.28691 -7.92792,0.63756 0,0.35066 1.70609,3.55207 3.7913,7.11424 4.30577,7.35554 3.59439,7.5276 8.96992,-2.16938 z m -49.4018,-56.5581 c -0.44959,-0.4496 -12.94154,6.60621 -12.9631,7.32193 -0.01,0.32566 2.8664,2.26491 6.3916,4.30946 l 6.40945,3.71735 0.23918,-7.51622 c 0.13155,-4.13391 0.0968,-7.65855 -0.0771,-7.83252 z m 95.0843,11.59963 c 3.56278,-2.09768 6.58763,-3.91327 6.72189,-4.03464 0.30064,-0.27179 -12.58073,-7.86489 -13.34245,-7.86489 -0.30117,0 -0.54758,3.53554 -0.54758,7.85675 0,4.3212 0.15533,7.85674 0.34518,7.85674 0.18985,0 3.26018,-1.71629 6.82296,-3.81396 z m -42.73024,-47.89414 c 0,-1.23467 -7.74627,-13.53724 -8.3059,-13.19137 -0.86707,0.53588 -7.40758,11.89898 -7.40758,12.86951 0,0.41491 3.53553,0.75438 7.85674,0.75438 4.32121,0 7.85674,-0.19463 7.85674,-0.43252 z"
+   id="path4635" /></svg>

From f94acdb4efcf48555481f38417f8befa4ca560ad Mon Sep 17 00:00:00 2001
From: gdkchan <gab.dark.100@gmail.com>
Date: Sun, 24 Jan 2021 19:22:19 -0300
Subject: [PATCH 17/27] Allow out of bounds storage buffer access by aligning
 their sizes (#1870)

* Allow out of bounds storage buffer access by aligning their sizes

* Use correct size

* Fix typo and comment on the reason for the change
---
 Ryujinx.Graphics.Gpu/Memory/Buffer.cs        | 15 +++++++++++++
 Ryujinx.Graphics.Gpu/Memory/BufferManager.cs | 23 ++++++++++++++++++--
 2 files changed, 36 insertions(+), 2 deletions(-)

diff --git a/Ryujinx.Graphics.Gpu/Memory/Buffer.cs b/Ryujinx.Graphics.Gpu/Memory/Buffer.cs
index 7127871a79..cdd61b6d95 100644
--- a/Ryujinx.Graphics.Gpu/Memory/Buffer.cs
+++ b/Ryujinx.Graphics.Gpu/Memory/Buffer.cs
@@ -88,6 +88,21 @@ namespace Ryujinx.Graphics.Gpu.Memory
             _modifiedDelegate = new Action<ulong, ulong>(RegionModified);
         }
 
+        /// <summary>
+        /// Gets a sub-range from the buffer, from a start address till the end of the buffer.
+        /// </summary>
+        /// <remarks>
+        /// This can be used to bind and use sub-ranges of the buffer on the host API.
+        /// </remarks>
+        /// <param name="address">Start address of the sub-range, must be greater than or equal to the buffer address</param>
+        /// <returns>The buffer sub-range</returns>
+        public BufferRange GetRange(ulong address)
+        {
+            ulong offset = address - Address;
+
+            return new BufferRange(Handle, (int)offset, (int)(Size - offset));
+        }
+
         /// <summary>
         /// Gets a sub-range from the buffer.
         /// </summary>
diff --git a/Ryujinx.Graphics.Gpu/Memory/BufferManager.cs b/Ryujinx.Graphics.Gpu/Memory/BufferManager.cs
index cdcc5a370c..08d52faa4b 100644
--- a/Ryujinx.Graphics.Gpu/Memory/BufferManager.cs
+++ b/Ryujinx.Graphics.Gpu/Memory/BufferManager.cs
@@ -591,7 +591,12 @@ namespace Ryujinx.Graphics.Gpu.Memory
 
                 if (bounds.Address != 0)
                 {
-                    sRanges[bindingInfo.Binding] = GetBufferRange(bounds.Address, bounds.Size, bounds.Flags.HasFlag(BufferUsageFlags.Write));
+                    // The storage buffer size is not reliable (it might be lower than the actual size),
+                    // so we bind the entire buffer to allow otherwise out of range accesses to work.
+                    sRanges[bindingInfo.Binding] = GetBufferRangeTillEnd(
+                        bounds.Address,
+                        bounds.Size,
+                        bounds.Flags.HasFlag(BufferUsageFlags.Write));
                 }
             }
 
@@ -764,7 +769,9 @@ namespace Ryujinx.Graphics.Gpu.Memory
 
                     if (bounds.Address != 0)
                     {
-                        ranges[bindingInfo.Binding] = GetBufferRange(bounds.Address, bounds.Size, bounds.Flags.HasFlag(BufferUsageFlags.Write));
+                        ranges[bindingInfo.Binding] = isStorage
+                            ? GetBufferRangeTillEnd(bounds.Address, bounds.Size, bounds.Flags.HasFlag(BufferUsageFlags.Write))
+                            : GetBufferRange(bounds.Address, bounds.Size, bounds.Flags.HasFlag(BufferUsageFlags.Write));
                     }
                 }
             }
@@ -895,6 +902,18 @@ namespace Ryujinx.Graphics.Gpu.Memory
             buffer.SignalModified(address, size);
         }
 
+        /// <summary>
+        /// Gets a buffer sub-range starting at a given memory address.
+        /// </summary>
+        /// <param name="address">Start address of the memory range</param>
+        /// <param name="size">Size in bytes of the memory range</param>
+        /// <param name="write">Whether the buffer will be written to by this use</param>
+        /// <returns>The buffer sub-range starting at the given memory address</returns>
+        private BufferRange GetBufferRangeTillEnd(ulong address, ulong size, bool write = false)
+        {
+            return GetBuffer(address, size, write).GetRange(address);
+        }
+
         /// <summary>
         /// Gets a buffer sub-range for a given memory range.
         /// </summary>

From ddf1105bcb6c9884e1188d5f63f0890ef1806176 Mon Sep 17 00:00:00 2001
From: FICTURE7 <FICTURE7@gmail.com>
Date: Mon, 25 Jan 2021 03:01:25 +0400
Subject: [PATCH 18/27] Add VCLZ.* fast path (#1917)

* Add VCLZ fast path

* Add VCLZ.8B/16B SSSE3 fast path
* Add VCLZ.4H/8H SSSE3 fast path
* Add VCLZ.2S/4S SSE2 fast path

* Improve CLZ.4H/8H fast path

* Improve CLZ.2S/4S fast path

* Set PPTC version
---
 .../Instructions/InstEmitSimdArithmetic.cs    | 147 +++++++++++++++++-
 .../Instructions/InstEmitSimdHelper.cs        |   5 +
 ARMeilleure/Translation/PTC/Ptc.cs            |   2 +-
 3 files changed, 145 insertions(+), 9 deletions(-)

diff --git a/ARMeilleure/Instructions/InstEmitSimdArithmetic.cs b/ARMeilleure/Instructions/InstEmitSimdArithmetic.cs
index bd6a98bed8..f18b91cfcc 100644
--- a/ARMeilleure/Instructions/InstEmitSimdArithmetic.cs
+++ b/ARMeilleure/Instructions/InstEmitSimdArithmetic.cs
@@ -120,24 +120,155 @@ namespace ARMeilleure.Instructions
         {
             OpCodeSimd op = (OpCodeSimd)context.CurrOp;
 
-            Operand res = context.VectorZero();
-
-            int elems = op.GetBytesCount() >> op.Size;
-
             int eSize = 8 << op.Size;
 
-            for (int index = 0; index < elems; index++)
+            Operand res = eSize switch {
+                8  => Clz_V_I8 (context, GetVec(op.Rn)),
+                16 => Clz_V_I16(context, GetVec(op.Rn)),
+                32 => Clz_V_I32(context, GetVec(op.Rn)),
+                _  => null
+            };
+
+            if (res != null)
             {
-                Operand ne = EmitVectorExtractZx(context, op.Rn, index, op.Size);
+                if (op.RegisterSize == RegisterSize.Simd64)
+                {
+                    res = context.VectorZeroUpper64(res);
+                }
+            }
+            else
+            {
+                int elems = op.GetBytesCount() >> op.Size;
 
-                Operand de = context.Call(typeof(SoftFallback).GetMethod(nameof(SoftFallback.CountLeadingZeros)), ne, Const(eSize));
+                res = context.VectorZero();
 
-                res = EmitVectorInsert(context, res, de, index, op.Size);
+                for (int index = 0; index < elems; index++)
+                {
+                    Operand ne = EmitVectorExtractZx(context, op.Rn, index, op.Size);
+
+                    Operand de = context.Call(typeof(SoftFallback).GetMethod(nameof(SoftFallback.CountLeadingZeros)), ne, Const(eSize));
+
+                    res = EmitVectorInsert(context, res, de, index, op.Size);
+                }
             }
 
             context.Copy(GetVec(op.Rd), res);
         }
 
+        private static Operand Clz_V_I8(ArmEmitterContext context, Operand arg)
+        {
+            if (!Optimizations.UseSsse3)
+            {
+                return null;
+            }
+
+            // CLZ nibble table.
+            Operand clzTable = X86GetScalar(context, 0x01_01_01_01_02_02_03_04);
+
+            Operand maskLow = X86GetAllElements(context, 0x0f_0f_0f_0f);
+            Operand c04     = X86GetAllElements(context, 0x04_04_04_04);
+
+            // CLZ of low 4 bits of elements in arg.
+            Operand loClz = context.AddIntrinsic(Intrinsic.X86Pshufb, clzTable, arg);
+
+            // Get the high 4 bits of elements in arg.
+            Operand hiArg = context.AddIntrinsic(Intrinsic.X86Psrlw, arg, Const(4));
+                    hiArg = context.AddIntrinsic(Intrinsic.X86Pand, hiArg, maskLow);
+
+            // CLZ of high 4 bits of elements in arg.
+            Operand hiClz = context.AddIntrinsic(Intrinsic.X86Pshufb, clzTable, hiArg);
+
+            // If high 4 bits are not all zero, we discard the CLZ of the low 4 bits.
+            Operand mask = context.AddIntrinsic(Intrinsic.X86Pcmpeqb, hiClz, c04);
+            loClz = context.AddIntrinsic(Intrinsic.X86Pand, loClz, mask);
+
+            return context.AddIntrinsic(Intrinsic.X86Paddb, loClz, hiClz);
+        }
+
+        private static Operand Clz_V_I16(ArmEmitterContext context, Operand arg)
+        {
+            if (!Optimizations.UseSsse3)
+            {
+                return null;
+            }
+
+            Operand maskSwap = X86GetElements(context, 0x80_0f_80_0d_80_0b_80_09, 0x80_07_80_05_80_03_80_01);
+            Operand maskLow  = X86GetAllElements(context, 0x00ff_00ff);
+            Operand c0008    = X86GetAllElements(context, 0x0008_0008);
+
+            // CLZ pair of high 8 and low 8 bits of elements in arg.
+            Operand hiloClz = Clz_V_I8(context, arg);
+            // Get CLZ of low 8 bits in each pair.
+            Operand loClz = context.AddIntrinsic(Intrinsic.X86Pand, hiloClz, maskLow);
+            // Get CLZ of high 8 bits in each pair.
+            Operand hiClz = context.AddIntrinsic(Intrinsic.X86Pshufb, hiloClz, maskSwap);
+
+            // If high 8 bits are not all zero, we discard the CLZ of the low 8 bits.
+            Operand mask = context.AddIntrinsic(Intrinsic.X86Pcmpeqw, hiClz, c0008);
+            loClz = context.AddIntrinsic(Intrinsic.X86Pand, loClz, mask);
+
+            return context.AddIntrinsic(Intrinsic.X86Paddw, loClz, hiClz);
+        }
+
+        private static Operand Clz_V_I32(ArmEmitterContext context, Operand arg)
+        {
+            // TODO: Use vplzcntd when AVX-512 is supported.
+            if (!Optimizations.UseSse2)
+            {
+                return null;
+            }
+
+            Operand AddVectorI32(Operand op0, Operand op1)      => context.AddIntrinsic(Intrinsic.X86Paddd, op0, op1);
+            Operand SubVectorI32(Operand op0, Operand op1)      => context.AddIntrinsic(Intrinsic.X86Psubd, op0, op1);
+            Operand ShiftRightVectorUI32(Operand op0, int imm8) => context.AddIntrinsic(Intrinsic.X86Psrld, op0, Const(imm8));
+            Operand OrVector(Operand op0, Operand op1)          => context.AddIntrinsic(Intrinsic.X86Por, op0, op1);
+            Operand AndVector(Operand op0, Operand op1)         => context.AddIntrinsic(Intrinsic.X86Pand, op0, op1);
+            Operand NotVector(Operand op0)                      => context.AddIntrinsic(Intrinsic.X86Pandn, op0, context.VectorOne());
+
+            Operand c55555555 = X86GetAllElements(context, 0x55555555);
+            Operand c33333333 = X86GetAllElements(context, 0x33333333);
+            Operand c0f0f0f0f = X86GetAllElements(context, 0x0f0f0f0f);
+            Operand c0000003f = X86GetAllElements(context, 0x0000003f);
+
+            Operand tmp0;
+            Operand tmp1;
+            Operand res;
+
+            // Set all bits after highest set bit to 1.
+            res = OrVector(ShiftRightVectorUI32(arg, 1), arg);
+            res = OrVector(ShiftRightVectorUI32(res, 2), res);
+            res = OrVector(ShiftRightVectorUI32(res, 4), res);
+            res = OrVector(ShiftRightVectorUI32(res, 8), res);
+            res = OrVector(ShiftRightVectorUI32(res, 16), res);
+
+            // Make leading 0s into leading 1s.
+            res = NotVector(res);
+
+            // Count leading 1s, which is the population count.
+            tmp0 = ShiftRightVectorUI32(res, 1);
+            tmp0 = AndVector(tmp0, c55555555);
+            res  = SubVectorI32(res, tmp0);
+
+            tmp0 = ShiftRightVectorUI32(res, 2);
+            tmp0 = AndVector(tmp0, c33333333);
+            tmp1 = AndVector(res, c33333333);
+            res  = AddVectorI32(tmp0, tmp1);
+
+            tmp0 = ShiftRightVectorUI32(res, 4);
+            tmp0 = AddVectorI32(tmp0, res);
+            res  = AndVector(tmp0, c0f0f0f0f);
+
+            tmp0 = ShiftRightVectorUI32(res, 8);
+            res  = AddVectorI32(tmp0, res);
+
+            tmp0 = ShiftRightVectorUI32(res, 16);
+            res  = AddVectorI32(tmp0, res);
+
+            res  = AndVector(res, c0000003f);
+
+            return res;
+        }
+
         public static void Cnt_V(ArmEmitterContext context)
         {
             OpCodeSimd op = (OpCodeSimd)context.CurrOp;
diff --git a/ARMeilleure/Instructions/InstEmitSimdHelper.cs b/ARMeilleure/Instructions/InstEmitSimdHelper.cs
index e9d5303c78..da8ccae78a 100644
--- a/ARMeilleure/Instructions/InstEmitSimdHelper.cs
+++ b/ARMeilleure/Instructions/InstEmitSimdHelper.cs
@@ -209,6 +209,11 @@ namespace ARMeilleure.Instructions
         }
 
         public static Operand X86GetElements(ArmEmitterContext context, long e1, long e0)
+        {
+            return X86GetElements(context, (ulong)e1, (ulong)e0);
+        }
+
+        public static Operand X86GetElements(ArmEmitterContext context, ulong e1, ulong e0)
         {
             Operand vector0 = context.VectorCreateScalar(Const(e0));
             Operand vector1 = context.VectorCreateScalar(Const(e1));
diff --git a/ARMeilleure/Translation/PTC/Ptc.cs b/ARMeilleure/Translation/PTC/Ptc.cs
index 8f250a5528..92094e6212 100644
--- a/ARMeilleure/Translation/PTC/Ptc.cs
+++ b/ARMeilleure/Translation/PTC/Ptc.cs
@@ -22,7 +22,7 @@ namespace ARMeilleure.Translation.PTC
     {
         private const string HeaderMagic = "PTChd";
 
-        private const int InternalVersion = 1817; //! To be incremented manually for each change to the ARMeilleure project.
+        private const int InternalVersion = 1917; //! To be incremented manually for each change to the ARMeilleure project.
 
         private const string ActualDir = "0";
         private const string BackupDir = "1";

From ad491b5570ec428d0d87d56426b03125e2ca5220 Mon Sep 17 00:00:00 2001
From: EliEron <subanimehd@gmail.com>
Date: Mon, 25 Jan 2021 00:02:00 +0100
Subject: [PATCH 19/27] Prevent Display Sleep on Windows while running a game
 (#1850)

Co-authored-by: EliEron <example@example.com>
---
 Ryujinx.Common/System/DisplaySleep.cs   | 35 +++++++++++++++++++++++++
 Ryujinx/Ui/MainWindow.cs                |  3 +++
 Ryujinx/Ui/Windows/SettingsWindow.glade |  3 ++-
 3 files changed, 40 insertions(+), 1 deletion(-)
 create mode 100644 Ryujinx.Common/System/DisplaySleep.cs

diff --git a/Ryujinx.Common/System/DisplaySleep.cs b/Ryujinx.Common/System/DisplaySleep.cs
new file mode 100644
index 0000000000..77f9dd75b9
--- /dev/null
+++ b/Ryujinx.Common/System/DisplaySleep.cs
@@ -0,0 +1,35 @@
+using System;
+using System.Runtime.InteropServices;
+
+namespace Ryujinx.Common.System
+{
+    public class DisplaySleep
+    {
+        [Flags]
+        enum EXECUTION_STATE : uint
+        {
+            ES_CONTINUOUS = 0x80000000,
+            ES_DISPLAY_REQUIRED = 0x00000002,
+            ES_SYSTEM_REQUIRED = 0x00000001
+        }
+
+        [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
+        static extern EXECUTION_STATE SetThreadExecutionState(EXECUTION_STATE esFlags);
+
+        static public void Prevent()
+        {
+            if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
+            {
+                SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS | EXECUTION_STATE.ES_SYSTEM_REQUIRED | EXECUTION_STATE.ES_DISPLAY_REQUIRED);
+            }
+        }
+        
+        static public void Restore()
+        {
+            if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
+            {
+                SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS);  
+            }
+        }
+    }
+}
diff --git a/Ryujinx/Ui/MainWindow.cs b/Ryujinx/Ui/MainWindow.cs
index 1c847f4a68..3f2c2fb8a5 100644
--- a/Ryujinx/Ui/MainWindow.cs
+++ b/Ryujinx/Ui/MainWindow.cs
@@ -554,6 +554,8 @@ namespace Ryujinx.Ui
                 _windowsMultimediaTimerResolution = new WindowsMultimediaTimerResolution(1);
             }
 
+            DisplaySleep.Prevent();
+
             GlRendererWidget = new GlRenderer(_emulationContext, ConfigurationState.Instance.Logger.GraphicsDebugLevel);
 
             Application.Invoke(delegate
@@ -604,6 +606,7 @@ namespace Ryujinx.Ui
 
                 _windowsMultimediaTimerResolution?.Dispose();
                 _windowsMultimediaTimerResolution = null;
+                DisplaySleep.Restore();
 
                 _viewBox.Remove(GlRendererWidget);
                 _viewBox.Add(_gameTableWindow);
diff --git a/Ryujinx/Ui/Windows/SettingsWindow.glade b/Ryujinx/Ui/Windows/SettingsWindow.glade
index 97a88b229a..6457ecfeb9 100644
--- a/Ryujinx/Ui/Windows/SettingsWindow.glade
+++ b/Ryujinx/Ui/Windows/SettingsWindow.glade
@@ -1299,6 +1299,7 @@
                                       <object class="GtkLabel">
                                         <property name="visible">True</property>
                                         <property name="can-focus">False</property>
+                                        <property name="tooltip-text" translatable="yes">Change System Time</property>
                                         <property name="halign">end</property>
                                         <property name="label" translatable="yes">System Time:</property>
                                       </object>
@@ -1509,7 +1510,7 @@
                                   <object class="GtkLabel">
                                     <property name="visible">True</property>
                                     <property name="can-focus">False</property>
-                                    <property name="tooltip-text" translatable="yes">Change System Region</property>
+                                    <property name="tooltip-text" translatable="yes">Change Audio Backend</property>
                                     <property name="halign">end</property>
                                     <property name="margin-right">5</property>
                                     <property name="label" translatable="yes">Audio Backend: </property>

From b0d3f1d06ff669c9e7af68080ae260207b8b10fb Mon Sep 17 00:00:00 2001
From: EmulationFanatic <62343878+EmulationFanatic@users.noreply.github.com>
Date: Mon, 25 Jan 2021 22:08:22 -0700
Subject: [PATCH 20/27] GUI Update: Fix controller input window to fit all
 images without scrolling (#1962)

Currently, when configuring controller input with an "Xinput Controller" or "Unmapped Controller", the window does not fit the images for Pro Controller (width limited) or Joycon Pair (width and height limited). This PR proportionally enlarges the window so that no scrolling is ever necessary to fully see the controller image.
---
 Ryujinx/Ui/Windows/ControllerWindow.glade | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/Ryujinx/Ui/Windows/ControllerWindow.glade b/Ryujinx/Ui/Windows/ControllerWindow.glade
index 2143e9de8e..d1ba42f4a3 100644
--- a/Ryujinx/Ui/Windows/ControllerWindow.glade
+++ b/Ryujinx/Ui/Windows/ControllerWindow.glade
@@ -48,8 +48,8 @@
     <property name="title" translatable="yes">Ryujinx - Controller Settings</property>
     <property name="modal">True</property>
     <property name="window_position">center</property>
-    <property name="default_width">1100</property>
-    <property name="default_height">600</property>
+    <property name="default_width">1150</property>
+    <property name="default_height">690</property>
     <child type="titlebar">
       <placeholder/>
     </child>

From c19cfca183cbbae8091688a292242032c3f337cb Mon Sep 17 00:00:00 2001
From: mageven <62494521+mageven@users.noreply.github.com>
Date: Tue, 26 Jan 2021 10:39:27 +0530
Subject: [PATCH 21/27] Implement PRFM (register variant) as NOP (#1956)

* Implement PRFM (register variant) as NOP

Fix typo pfrm -> prfm
Add comments to distinguish variants

* Increment PTC version
---
 ARMeilleure/Decoders/OpCodeTable.cs          | 7 ++++---
 ARMeilleure/Instructions/InstEmitMemoryEx.cs | 2 +-
 ARMeilleure/Instructions/InstName.cs         | 2 +-
 ARMeilleure/Translation/PTC/Ptc.cs           | 2 +-
 4 files changed, 7 insertions(+), 6 deletions(-)

diff --git a/ARMeilleure/Decoders/OpCodeTable.cs b/ARMeilleure/Decoders/OpCodeTable.cs
index 928d0e0d6a..50fb132a25 100644
--- a/ARMeilleure/Decoders/OpCodeTable.cs
+++ b/ARMeilleure/Decoders/OpCodeTable.cs
@@ -144,9 +144,10 @@ namespace ARMeilleure.Decoders
             SetA64("101100100xxxxxxxxxxxxxxxxxxxxxxx", InstName.Orr,             InstEmit.Orr,             OpCodeAluImm.Create);
             SetA64("00101010xx0xxxxx0xxxxxxxxxxxxxxx", InstName.Orr,             InstEmit.Orr,             OpCodeAluRs.Create);
             SetA64("10101010xx0xxxxxxxxxxxxxxxxxxxxx", InstName.Orr,             InstEmit.Orr,             OpCodeAluRs.Create);
-            SetA64("1111100110xxxxxxxxxxxxxxxxxxxxxx", InstName.Pfrm,            InstEmit.Pfrm,            OpCodeMemImm.Create);
-            SetA64("11111000100xxxxxxxxx00xxxxxxxxxx", InstName.Pfrm,            InstEmit.Pfrm,            OpCodeMemImm.Create);
-            SetA64("11011000xxxxxxxxxxxxxxxxxxxxxxxx", InstName.Pfrm,            InstEmit.Pfrm,            OpCodeMemLit.Create);
+            SetA64("1111100110xxxxxxxxxxxxxxxxxxxxxx", InstName.Prfm,            InstEmit.Prfm,            OpCodeMemImm.Create); // immediate
+            SetA64("11111000100xxxxxxxxx00xxxxxxxxxx", InstName.Prfm,            InstEmit.Prfm,            OpCodeMemImm.Create); // prfum (unscaled offset)
+            SetA64("11011000xxxxxxxxxxxxxxxxxxxxxxxx", InstName.Prfm,            InstEmit.Prfm,            OpCodeMemLit.Create); // literal
+            SetA64("11111000101xxxxxxxxx10xxxxxxxxxx", InstName.Prfm,            InstEmit.Prfm,            OpCodeMemReg.Create); // register
             SetA64("x101101011000000000000xxxxxxxxxx", InstName.Rbit,            InstEmit.Rbit,            OpCodeAlu.Create);
             SetA64("1101011001011111000000xxxxx00000", InstName.Ret,             InstEmit.Ret,             OpCodeBReg.Create);
             SetA64("x101101011000000000001xxxxxxxxxx", InstName.Rev16,           InstEmit.Rev16,           OpCodeAlu.Create);
diff --git a/ARMeilleure/Instructions/InstEmitMemoryEx.cs b/ARMeilleure/Instructions/InstEmitMemoryEx.cs
index 977f23d384..95be4fcfe9 100644
--- a/ARMeilleure/Instructions/InstEmitMemoryEx.cs
+++ b/ARMeilleure/Instructions/InstEmitMemoryEx.cs
@@ -102,7 +102,7 @@ namespace ARMeilleure.Instructions
             }
         }
 
-        public static void Pfrm(ArmEmitterContext context)
+        public static void Prfm(ArmEmitterContext context)
         {
             // Memory Prefetch, execute as no-op.
         }
diff --git a/ARMeilleure/Instructions/InstName.cs b/ARMeilleure/Instructions/InstName.cs
index 990e4393f1..ca2a63d99d 100644
--- a/ARMeilleure/Instructions/InstName.cs
+++ b/ARMeilleure/Instructions/InstName.cs
@@ -68,7 +68,7 @@ namespace ARMeilleure.Instructions
         Nop,
         Orn,
         Orr,
-        Pfrm,
+        Prfm,
         Rbit,
         Ret,
         Rev16,
diff --git a/ARMeilleure/Translation/PTC/Ptc.cs b/ARMeilleure/Translation/PTC/Ptc.cs
index 92094e6212..75a801e5f8 100644
--- a/ARMeilleure/Translation/PTC/Ptc.cs
+++ b/ARMeilleure/Translation/PTC/Ptc.cs
@@ -22,7 +22,7 @@ namespace ARMeilleure.Translation.PTC
     {
         private const string HeaderMagic = "PTChd";
 
-        private const int InternalVersion = 1917; //! To be incremented manually for each change to the ARMeilleure project.
+        private const int InternalVersion = 1956; //! To be incremented manually for each change to the ARMeilleure project.
 
         private const string ActualDir = "0";
         private const string BackupDir = "1";

From e453ba69f42057d36559b2c84b6ad9f01eaf4c86 Mon Sep 17 00:00:00 2001
From: gdkchan <gab.dark.100@gmail.com>
Date: Tue, 26 Jan 2021 03:38:33 -0300
Subject: [PATCH 22/27] Add support for shader atomic min/max (S32) (#1948)

---
 .../CodeGen/Glsl/Declarations.cs              | 16 +++++++++++++-
 .../AtomicMinMaxS32Shared.glsl                | 21 +++++++++++++++++++
 .../AtomicMinMaxS32Storage.glsl               | 21 +++++++++++++++++++
 .../HelperFunctions/HelperFunctionNames.cs    |  3 +++
 .../HelperFunctions/TexelFetchScale_cp.glsl   |  6 ++++--
 .../HelperFunctions/TexelFetchScale_fp.glsl   | 13 ++++++++----
 .../CodeGen/Glsl/Instructions/InstGen.cs      | 14 ++++++++-----
 .../Glsl/Instructions/InstGenHelper.cs        |  4 ++--
 .../Ryujinx.Graphics.Shader.csproj            |  2 ++
 .../StructuredIr/HelperFunctionsMask.cs       | 16 +++++++-------
 .../StructuredIr/StructuredProgram.cs         |  8 +++++++
 11 files changed, 103 insertions(+), 21 deletions(-)
 create mode 100644 Ryujinx.Graphics.Shader/CodeGen/Glsl/HelperFunctions/AtomicMinMaxS32Shared.glsl
 create mode 100644 Ryujinx.Graphics.Shader/CodeGen/Glsl/HelperFunctions/AtomicMinMaxS32Storage.glsl

diff --git a/Ryujinx.Graphics.Shader/CodeGen/Glsl/Declarations.cs b/Ryujinx.Graphics.Shader/CodeGen/Glsl/Declarations.cs
index d43fe6324d..a6109a9597 100644
--- a/Ryujinx.Graphics.Shader/CodeGen/Glsl/Declarations.cs
+++ b/Ryujinx.Graphics.Shader/CodeGen/Glsl/Declarations.cs
@@ -157,6 +157,16 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl
                 }
             }
 
+            if ((info.HelperFunctionsMask & HelperFunctionsMask.AtomicMinMaxS32Shared) != 0)
+            {
+                AppendHelperFunction(context, "Ryujinx.Graphics.Shader/CodeGen/Glsl/HelperFunctions/AtomicMinMaxS32Shared.glsl");
+            }
+
+            if ((info.HelperFunctionsMask & HelperFunctionsMask.AtomicMinMaxS32Storage) != 0)
+            {
+                AppendHelperFunction(context, "Ryujinx.Graphics.Shader/CodeGen/Glsl/HelperFunctions/AtomicMinMaxS32Storage.glsl");
+            }
+
             if ((info.HelperFunctionsMask & HelperFunctionsMask.MultiplyHighS32) != 0)
             {
                 AppendHelperFunction(context, "Ryujinx.Graphics.Shader/CodeGen/Glsl/HelperFunctions/MultiplyHighS32.glsl");
@@ -523,7 +533,11 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl
         {
             string code = EmbeddedResources.ReadAllText(filename);
 
-            context.AppendLine(code.Replace("\t", CodeGenContext.Tab));
+            code = code.Replace("\t", CodeGenContext.Tab);
+            code = code.Replace("$SHARED_MEM$", DefaultNames.SharedMemoryName);
+            code = code.Replace("$STORAGE_MEM$", OperandManager.GetShaderStagePrefix(context.Config.Stage) + "_" + DefaultNames.StorageNamePrefix);
+
+            context.AppendLine(code);
             context.AppendLine();
         }
     }
diff --git a/Ryujinx.Graphics.Shader/CodeGen/Glsl/HelperFunctions/AtomicMinMaxS32Shared.glsl b/Ryujinx.Graphics.Shader/CodeGen/Glsl/HelperFunctions/AtomicMinMaxS32Shared.glsl
new file mode 100644
index 0000000000..9f8c641dff
--- /dev/null
+++ b/Ryujinx.Graphics.Shader/CodeGen/Glsl/HelperFunctions/AtomicMinMaxS32Shared.glsl
@@ -0,0 +1,21 @@
+int Helper_AtomicMaxS32(int offset, int value)
+{
+    uint oldValue, newValue;
+    do
+    {
+        oldValue = $SHARED_MEM$[offset];
+        newValue = uint(max(int(oldValue), value));
+    } while (atomicCompSwap($SHARED_MEM$[offset], newValue, oldValue) != oldValue);
+    return int(oldValue);
+}
+
+int Helper_AtomicMinS32(int offset, int value)
+{
+    uint oldValue, newValue;
+    do
+    {
+        oldValue = $SHARED_MEM$[offset];
+        newValue = uint(min(int(oldValue), value));
+    } while (atomicCompSwap($SHARED_MEM$[offset], newValue, oldValue) != oldValue);
+    return int(oldValue);
+}
\ No newline at end of file
diff --git a/Ryujinx.Graphics.Shader/CodeGen/Glsl/HelperFunctions/AtomicMinMaxS32Storage.glsl b/Ryujinx.Graphics.Shader/CodeGen/Glsl/HelperFunctions/AtomicMinMaxS32Storage.glsl
new file mode 100644
index 0000000000..fc3af6a73e
--- /dev/null
+++ b/Ryujinx.Graphics.Shader/CodeGen/Glsl/HelperFunctions/AtomicMinMaxS32Storage.glsl
@@ -0,0 +1,21 @@
+int Helper_AtomicMaxS32(int index, int offset, int value)
+{
+    uint oldValue, newValue;
+    do
+    {
+        oldValue = $STORAGE_MEM$[index].data[offset];
+        newValue = uint(max(int(oldValue), value));
+    } while (atomicCompSwap($STORAGE_MEM$[index].data[offset], newValue, oldValue) != oldValue);
+    return int(oldValue);
+}
+
+int Helper_AtomicMinS32(int index, int offset, int value)
+{
+    uint oldValue, newValue;
+    do
+    {
+        oldValue = $STORAGE_MEM$[index].data[offset];
+        newValue = uint(min(int(oldValue), value));
+    } while (atomicCompSwap($STORAGE_MEM$[index].data[offset], newValue, oldValue) != oldValue);
+    return int(oldValue);
+}
\ No newline at end of file
diff --git a/Ryujinx.Graphics.Shader/CodeGen/Glsl/HelperFunctions/HelperFunctionNames.cs b/Ryujinx.Graphics.Shader/CodeGen/Glsl/HelperFunctions/HelperFunctionNames.cs
index 21c435475f..1ff127bb38 100644
--- a/Ryujinx.Graphics.Shader/CodeGen/Glsl/HelperFunctions/HelperFunctionNames.cs
+++ b/Ryujinx.Graphics.Shader/CodeGen/Glsl/HelperFunctions/HelperFunctionNames.cs
@@ -2,6 +2,9 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl
 {
     static class HelperFunctionNames
     {
+        public static string AtomicMaxS32 = "Helper_AtomicMaxS32";
+        public static string AtomicMinS32 = "Helper_AtomicMinS32";
+
         public static string MultiplyHighS32 = "Helper_MultiplyHighS32";
         public static string MultiplyHighU32 = "Helper_MultiplyHighU32";
 
diff --git a/Ryujinx.Graphics.Shader/CodeGen/Glsl/HelperFunctions/TexelFetchScale_cp.glsl b/Ryujinx.Graphics.Shader/CodeGen/Glsl/HelperFunctions/TexelFetchScale_cp.glsl
index 381566d37c..88d18246d3 100644
--- a/Ryujinx.Graphics.Shader/CodeGen/Glsl/HelperFunctions/TexelFetchScale_cp.glsl
+++ b/Ryujinx.Graphics.Shader/CodeGen/Glsl/HelperFunctions/TexelFetchScale_cp.glsl
@@ -1,6 +1,8 @@
-ivec2 Helper_TexelFetchScale(ivec2 inputVec, int samplerIndex) {
+ivec2 Helper_TexelFetchScale(ivec2 inputVec, int samplerIndex)
+{
     float scale = cp_renderScale[samplerIndex];
-    if (scale == 1.0) {
+    if (scale == 1.0)
+    {
         return inputVec;
     }
     return ivec2(vec2(inputVec) * scale);
diff --git a/Ryujinx.Graphics.Shader/CodeGen/Glsl/HelperFunctions/TexelFetchScale_fp.glsl b/Ryujinx.Graphics.Shader/CodeGen/Glsl/HelperFunctions/TexelFetchScale_fp.glsl
index 4efaa65af6..2e166a4be7 100644
--- a/Ryujinx.Graphics.Shader/CodeGen/Glsl/HelperFunctions/TexelFetchScale_fp.glsl
+++ b/Ryujinx.Graphics.Shader/CodeGen/Glsl/HelperFunctions/TexelFetchScale_fp.glsl
@@ -1,11 +1,16 @@
-ivec2 Helper_TexelFetchScale(ivec2 inputVec, int samplerIndex) {
+ivec2 Helper_TexelFetchScale(ivec2 inputVec, int samplerIndex)
+{
     float scale = fp_renderScale[1 + samplerIndex];
-    if (scale == 1.0) {
+    if (scale == 1.0)
+    {
         return inputVec;
     }
-    if (scale < 0.0) { // If less than 0, try interpolate between texels by using the screen position.
+    if (scale < 0.0) // If less than 0, try interpolate between texels by using the screen position.
+    {
         return ivec2(vec2(inputVec) * (-scale) + mod(gl_FragCoord.xy, -scale));
-    } else {
+    }
+    else
+    {
         return ivec2(vec2(inputVec) * scale);
     }
 }
\ No newline at end of file
diff --git a/Ryujinx.Graphics.Shader/CodeGen/Glsl/Instructions/InstGen.cs b/Ryujinx.Graphics.Shader/CodeGen/Glsl/Instructions/InstGen.cs
index 388f0c2506..7d0f1aa583 100644
--- a/Ryujinx.Graphics.Shader/CodeGen/Glsl/Instructions/InstGen.cs
+++ b/Ryujinx.Graphics.Shader/CodeGen/Glsl/Instructions/InstGen.cs
@@ -42,13 +42,18 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl.Instructions
 
                 for (int argIndex = 0; argIndex < arity; argIndex++)
                 {
+                    // For shared memory access, the second argument is unused and should be ignored.
+                    // It is there to make both storage and shared access have the same number of arguments.
+                    if (argIndex == 1 && (inst & Instruction.MrMask) == Instruction.MrShared)
+                    {
+                        continue;
+                    }
+
                     if (argIndex != 0)
                     {
                         args += ", ";
                     }
 
-                    VariableType dstType = GetSrcVarType(inst, argIndex);
-
                     if (argIndex == 0 && atomic)
                     {
                         Instruction memRegion = inst & Instruction.MrMask;
@@ -60,12 +65,11 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl.Instructions
 
                             default: throw new InvalidOperationException($"Invalid memory region \"{memRegion}\".");
                         }
-
-                        // We use the first 2 operands above.
-                        argIndex++;
                     }
                     else
                     {
+                        VariableType dstType = GetSrcVarType(inst, argIndex);
+
                         args += GetSoureExpr(context, operation.GetSource(argIndex), dstType);
                     }
                 }
diff --git a/Ryujinx.Graphics.Shader/CodeGen/Glsl/Instructions/InstGenHelper.cs b/Ryujinx.Graphics.Shader/CodeGen/Glsl/Instructions/InstGenHelper.cs
index 1b1efe9da3..5f5574c318 100644
--- a/Ryujinx.Graphics.Shader/CodeGen/Glsl/Instructions/InstGenHelper.cs
+++ b/Ryujinx.Graphics.Shader/CodeGen/Glsl/Instructions/InstGenHelper.cs
@@ -16,9 +16,9 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl.Instructions
             Add(Instruction.AtomicAdd,                InstType.AtomicBinary,   "atomicAdd");
             Add(Instruction.AtomicAnd,                InstType.AtomicBinary,   "atomicAnd");
             Add(Instruction.AtomicCompareAndSwap,     InstType.AtomicTernary,  "atomicCompSwap");
-            Add(Instruction.AtomicMaxS32,             InstType.AtomicBinary,   "atomicMax");
+            Add(Instruction.AtomicMaxS32,             InstType.CallTernary,    HelperFunctionNames.AtomicMaxS32);
             Add(Instruction.AtomicMaxU32,             InstType.AtomicBinary,   "atomicMax");
-            Add(Instruction.AtomicMinS32,             InstType.AtomicBinary,   "atomicMin");
+            Add(Instruction.AtomicMinS32,             InstType.CallTernary,    HelperFunctionNames.AtomicMinS32);
             Add(Instruction.AtomicMinU32,             InstType.AtomicBinary,   "atomicMin");
             Add(Instruction.AtomicOr,                 InstType.AtomicBinary,   "atomicOr");
             Add(Instruction.AtomicSwap,               InstType.AtomicBinary,   "atomicExchange");
diff --git a/Ryujinx.Graphics.Shader/Ryujinx.Graphics.Shader.csproj b/Ryujinx.Graphics.Shader/Ryujinx.Graphics.Shader.csproj
index 28a031a2f3..2fa70c265b 100644
--- a/Ryujinx.Graphics.Shader/Ryujinx.Graphics.Shader.csproj
+++ b/Ryujinx.Graphics.Shader/Ryujinx.Graphics.Shader.csproj
@@ -9,6 +9,8 @@
   </ItemGroup>
 
   <ItemGroup>
+    <EmbeddedResource Include="CodeGen\Glsl\HelperFunctions\AtomicMinMaxS32Shared.glsl" />
+    <EmbeddedResource Include="CodeGen\Glsl\HelperFunctions\AtomicMinMaxS32Storage.glsl" />
     <EmbeddedResource Include="CodeGen\Glsl\HelperFunctions\MultiplyHighS32.glsl" />
     <EmbeddedResource Include="CodeGen\Glsl\HelperFunctions\MultiplyHighU32.glsl" />
     <EmbeddedResource Include="CodeGen\Glsl\HelperFunctions\Shuffle.glsl" />
diff --git a/Ryujinx.Graphics.Shader/StructuredIr/HelperFunctionsMask.cs b/Ryujinx.Graphics.Shader/StructuredIr/HelperFunctionsMask.cs
index 53367fce14..af462a7f10 100644
--- a/Ryujinx.Graphics.Shader/StructuredIr/HelperFunctionsMask.cs
+++ b/Ryujinx.Graphics.Shader/StructuredIr/HelperFunctionsMask.cs
@@ -5,12 +5,14 @@ namespace Ryujinx.Graphics.Shader.StructuredIr
     [Flags]
     enum HelperFunctionsMask
     {
-        MultiplyHighS32 = 1 << 0,
-        MultiplyHighU32 = 1 << 1,
-        Shuffle         = 1 << 2,
-        ShuffleDown     = 1 << 3,
-        ShuffleUp       = 1 << 4,
-        ShuffleXor      = 1 << 5,
-        SwizzleAdd      = 1 << 6
+        AtomicMinMaxS32Shared  = 1 << 0,
+        AtomicMinMaxS32Storage = 1 << 1,
+        MultiplyHighS32        = 1 << 2,
+        MultiplyHighU32        = 1 << 3,
+        Shuffle                = 1 << 4,
+        ShuffleDown            = 1 << 5,
+        ShuffleUp              = 1 << 6,
+        ShuffleXor             = 1 << 7,
+        SwizzleAdd             = 1 << 8
     }
 }
\ No newline at end of file
diff --git a/Ryujinx.Graphics.Shader/StructuredIr/StructuredProgram.cs b/Ryujinx.Graphics.Shader/StructuredIr/StructuredProgram.cs
index 733805cde5..8c73e698e4 100644
--- a/Ryujinx.Graphics.Shader/StructuredIr/StructuredProgram.cs
+++ b/Ryujinx.Graphics.Shader/StructuredIr/StructuredProgram.cs
@@ -244,6 +244,14 @@ namespace Ryujinx.Graphics.Shader.StructuredIr
             // decide which helper functions are needed on the final generated code.
             switch (operation.Inst)
             {
+                case Instruction.AtomicMaxS32 | Instruction.MrShared:
+                case Instruction.AtomicMinS32 | Instruction.MrShared:
+                    context.Info.HelperFunctionsMask |= HelperFunctionsMask.AtomicMinMaxS32Shared;
+                    break;
+                case Instruction.AtomicMaxS32 | Instruction.MrStorage:
+                case Instruction.AtomicMinS32 | Instruction.MrStorage:
+                    context.Info.HelperFunctionsMask |= HelperFunctionsMask.AtomicMinMaxS32Storage;
+                    break;
                 case Instruction.MultiplyHighS32:
                     context.Info.HelperFunctionsMask |= HelperFunctionsMask.MultiplyHighS32;
                     break;

From 9551bfdeebee663f119b4fbaa7196ce8d810f41a Mon Sep 17 00:00:00 2001
From: gdkchan <gab.dark.100@gmail.com>
Date: Tue, 26 Jan 2021 14:27:18 -0300
Subject: [PATCH 23/27] Fix compute shader code dumping (#1960)

---
 Ryujinx.Graphics.Gpu/Shader/ShaderCache.cs | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Ryujinx.Graphics.Gpu/Shader/ShaderCache.cs b/Ryujinx.Graphics.Gpu/Shader/ShaderCache.cs
index 1dbe1805aa..f3e4679b8f 100644
--- a/Ryujinx.Graphics.Gpu/Shader/ShaderCache.cs
+++ b/Ryujinx.Graphics.Gpu/Shader/ShaderCache.cs
@@ -759,7 +759,7 @@ namespace Ryujinx.Graphics.Gpu.Shader
             {
                 byte[] code = _context.MemoryManager.GetSpan(translatorContext.Address, translatorContext.Size).ToArray();
 
-                _dumper.Dump(code, compute: false, out string fullPath, out string codePath);
+                _dumper.Dump(code, translatorContext.Stage == ShaderStage.Compute, out string fullPath, out string codePath);
 
                 ShaderProgram program = translatorContext.Translate(out ShaderProgramInfo shaderProgramInfo);
 

From d1e24ba5c247bb9cfdeca7251bf5f8951c927576 Mon Sep 17 00:00:00 2001
From: mageven <62494521+mageven@users.noreply.github.com>
Date: Tue, 26 Jan 2021 23:15:07 +0530
Subject: [PATCH 24/27] Initial Setup: Reload keys before verifying firmware
 (#1955)

* Initial Setup: Reload keys before verifying firmware

Also, display the NoKeys dialog if keyset is empty when verifying
firmware.

* LoadApplications: Remove the lone debug log and print the error directly
---
 Ryujinx.HLE/FileSystem/Content/ContentManager.cs | 9 +++++++++
 Ryujinx/Ui/App/ApplicationLibrary.cs             | 3 +--
 Ryujinx/Ui/MainWindow.cs                         | 5 +++++
 3 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/Ryujinx.HLE/FileSystem/Content/ContentManager.cs b/Ryujinx.HLE/FileSystem/Content/ContentManager.cs
index 4c4f3c8676..1630835d2c 100644
--- a/Ryujinx.HLE/FileSystem/Content/ContentManager.cs
+++ b/Ryujinx.HLE/FileSystem/Content/ContentManager.cs
@@ -653,6 +653,15 @@ namespace Ryujinx.HLE.FileSystem.Content
 
         public SystemVersion VerifyFirmwarePackage(string firmwarePackage)
         {
+            _virtualFileSystem.Reload();
+
+            // LibHac.NcaHeader's DecryptHeader doesn't check if HeaderKey is empty and throws InvalidDataException instead
+            // So, we check it early for a better user experience.
+            if (_virtualFileSystem.KeySet.HeaderKey.IsEmpty())
+            {
+                throw new MissingKeyException("HeaderKey is empty. Cannot decrypt NCA headers.");
+            }
+
             Dictionary<ulong, List<(NcaContentType type, string path)>> updateNcas = new Dictionary<ulong, List<(NcaContentType, string)>>();
 
             if (Directory.Exists(firmwarePackage))
diff --git a/Ryujinx/Ui/App/ApplicationLibrary.cs b/Ryujinx/Ui/App/ApplicationLibrary.cs
index fb0e066490..dcf49204b3 100644
--- a/Ryujinx/Ui/App/ApplicationLibrary.cs
+++ b/Ryujinx/Ui/App/ApplicationLibrary.cs
@@ -298,8 +298,7 @@ namespace Ryujinx.Ui.App
                             }
                             catch (Exception exception)
                             {
-                                Logger.Warning?.Print(LogClass.Application, $"The file encountered was not of a valid type. Errored File: {applicationPath}");
-                                Logger.Debug?.Print(LogClass.Application, exception.ToString());
+                                Logger.Warning?.Print(LogClass.Application, $"The file encountered was not of a valid type. File: '{applicationPath}' Error: {exception}");
 
                                 numApplicationsFound--;
                                 _loadingError = true;
diff --git a/Ryujinx/Ui/MainWindow.cs b/Ryujinx/Ui/MainWindow.cs
index 3f2c2fb8a5..7697376bd5 100644
--- a/Ryujinx/Ui/MainWindow.cs
+++ b/Ryujinx/Ui/MainWindow.cs
@@ -1035,6 +1035,11 @@ namespace Ryujinx.Ui
                         thread.Start();
                     }
                 }
+                catch (LibHac.MissingKeyException ex)
+                {
+                    Logger.Error?.Print(LogClass.Application, ex.ToString());
+                    UserErrorDialog.CreateUserErrorDialog(UserError.NoKeys);
+                }
                 catch (Exception ex)
                 {
                     GtkDialog.CreateErrorDialog(ex.Message);

From d6bd0470fb0507cc9c6069e577ae2814e614265b Mon Sep 17 00:00:00 2001
From: gdkchan <gab.dark.100@gmail.com>
Date: Tue, 26 Jan 2021 18:42:12 -0300
Subject: [PATCH 25/27] Fix conditional rendering without queries (#1965)

---
 .../Engine/MethodConditionalRendering.cs              | 11 +++++------
 1 file changed, 5 insertions(+), 6 deletions(-)

diff --git a/Ryujinx.Graphics.Gpu/Engine/MethodConditionalRendering.cs b/Ryujinx.Graphics.Gpu/Engine/MethodConditionalRendering.cs
index 7e7964c4bf..0d7c272c79 100644
--- a/Ryujinx.Graphics.Gpu/Engine/MethodConditionalRendering.cs
+++ b/Ryujinx.Graphics.Gpu/Engine/MethodConditionalRendering.cs
@@ -71,11 +71,6 @@ namespace Ryujinx.Graphics.Gpu.Engine
             ICounterEvent evt = FindEvent(gpuVa);
             ICounterEvent evt2 = FindEvent(gpuVa + 16);
 
-            if (evt == null && evt2 == null)
-            {
-                return ConditionalRenderEnabled.False;
-            }
-
             bool useHost;
 
             if (evt != null && evt2 == null)
@@ -86,10 +81,14 @@ namespace Ryujinx.Graphics.Gpu.Engine
             {
                 useHost = _context.Renderer.Pipeline.TryHostConditionalRendering(evt2, _context.MemoryManager.Read<ulong>(gpuVa), isEqual);
             }
-            else
+            else if (evt != null && evt2 != null)
             {
                 useHost = _context.Renderer.Pipeline.TryHostConditionalRendering(evt, evt2, isEqual);
             }
+            else
+            {
+                useHost = false;
+            }
 
             if (useHost)
             {

From caf049ed15f1c22d55aacfab79019538b2587e11 Mon Sep 17 00:00:00 2001
From: gdkchan <gab.dark.100@gmail.com>
Date: Tue, 26 Jan 2021 18:44:07 -0300
Subject: [PATCH 26/27] Avoid some redundant GL calls (#1958)

---
 Ryujinx.Graphics.GAL/IPipeline.cs             |  3 +-
 .../VertexAttribDescriptor.cs                 | 22 ++++-
 Ryujinx.Graphics.Gpu/Engine/Methods.cs        |  8 +-
 Ryujinx.Graphics.OpenGL/Framebuffer.cs        | 11 ++-
 Ryujinx.Graphics.OpenGL/Pipeline.cs           | 34 +++----
 Ryujinx.Graphics.OpenGL/VertexArray.cs        | 88 +++++++++++++------
 6 files changed, 115 insertions(+), 51 deletions(-)

diff --git a/Ryujinx.Graphics.GAL/IPipeline.cs b/Ryujinx.Graphics.GAL/IPipeline.cs
index 96ccfb2859..bb3a8dcac9 100644
--- a/Ryujinx.Graphics.GAL/IPipeline.cs
+++ b/Ryujinx.Graphics.GAL/IPipeline.cs
@@ -68,8 +68,7 @@ namespace Ryujinx.Graphics.GAL
 
         void SetSampler(int binding, ISampler sampler);
 
-        void SetScissorEnable(int index, bool enable);
-        void SetScissor(int index, int x, int y, int width, int height);
+        void SetScissor(int index, bool enable, int x, int y, int width, int height);
 
         void SetStencilTest(StencilTestDescriptor stencilTest);
 
diff --git a/Ryujinx.Graphics.GAL/VertexAttribDescriptor.cs b/Ryujinx.Graphics.GAL/VertexAttribDescriptor.cs
index 1547658e47..b3248b621f 100644
--- a/Ryujinx.Graphics.GAL/VertexAttribDescriptor.cs
+++ b/Ryujinx.Graphics.GAL/VertexAttribDescriptor.cs
@@ -1,6 +1,8 @@
+using System;
+
 namespace Ryujinx.Graphics.GAL
 {
-    public struct VertexAttribDescriptor
+    public struct VertexAttribDescriptor : IEquatable<VertexAttribDescriptor>
     {
         public int BufferIndex { get; }
         public int Offset      { get; }
@@ -16,5 +18,23 @@ namespace Ryujinx.Graphics.GAL
             IsZero      = isZero;
             Format      = format;
         }
+
+        public override bool Equals(object obj)
+        {
+            return obj is VertexAttribDescriptor other && Equals(other);
+        }
+
+        public bool Equals(VertexAttribDescriptor other)
+        {
+            return BufferIndex == other.BufferIndex &&
+                   Offset      == other.Offset &&
+                   IsZero      == other.IsZero &&
+                   Format      == other.Format;
+        }
+
+        public override int GetHashCode()
+        {
+            return HashCode.Combine(BufferIndex, Offset, IsZero, Format);
+        }
     }
 }
diff --git a/Ryujinx.Graphics.Gpu/Engine/Methods.cs b/Ryujinx.Graphics.Gpu/Engine/Methods.cs
index d6bd51106c..a41fd5414d 100644
--- a/Ryujinx.Graphics.Gpu/Engine/Methods.cs
+++ b/Ryujinx.Graphics.Gpu/Engine/Methods.cs
@@ -436,8 +436,6 @@ namespace Ryujinx.Graphics.Gpu.Engine
 
                 bool enable = scissor.Enable && (scissor.X1 != 0 || scissor.Y1 != 0 || scissor.X2 != 0xffff || scissor.Y2 != 0xffff);
 
-                _context.Renderer.Pipeline.SetScissorEnable(index, enable);
-
                 if (enable)
                 {
                     int x = scissor.X1;
@@ -454,7 +452,11 @@ namespace Ryujinx.Graphics.Gpu.Engine
                         height = (int)Math.Ceiling(height * scale);
                     }
 
-                    _context.Renderer.Pipeline.SetScissor(index, x, y, width, height);
+                    _context.Renderer.Pipeline.SetScissor(index, true, x, y, width, height);
+                }
+                else
+                {
+                    _context.Renderer.Pipeline.SetScissor(index, false, 0, 0, 0, 0);
                 }
             }
         }
diff --git a/Ryujinx.Graphics.OpenGL/Framebuffer.cs b/Ryujinx.Graphics.OpenGL/Framebuffer.cs
index 015b0ec0ae..66bf892b31 100644
--- a/Ryujinx.Graphics.OpenGL/Framebuffer.cs
+++ b/Ryujinx.Graphics.OpenGL/Framebuffer.cs
@@ -2,6 +2,7 @@ using OpenTK.Graphics.OpenGL;
 using Ryujinx.Graphics.GAL;
 using Ryujinx.Graphics.OpenGL.Image;
 using System;
+using System.Runtime.CompilerServices;
 
 namespace Ryujinx.Graphics.OpenGL
 {
@@ -29,21 +30,27 @@ namespace Ryujinx.Graphics.OpenGL
             return Handle;
         }
 
+        [MethodImpl(MethodImplOptions.AggressiveInlining)]
         public void AttachColor(int index, TextureView color)
         {
+            if (_colors[index] == color)
+            {
+                return;
+            }
+
             FramebufferAttachment attachment = FramebufferAttachment.ColorAttachment0 + index;
 
             if (HwCapabilities.Vendor == HwCapabilities.GpuVendor.Amd ||
                 HwCapabilities.Vendor == HwCapabilities.GpuVendor.Intel)
             {
                 GL.FramebufferTexture(FramebufferTarget.Framebuffer, attachment, color?.GetIncompatibleFormatViewHandle() ?? 0, 0);
-
-                _colors[index] = color;
             }
             else
             {
                 GL.FramebufferTexture(FramebufferTarget.Framebuffer, attachment, color?.Handle ?? 0, 0);
             }
+
+            _colors[index] = color;
         }
 
         public void AttachDepthStencil(TextureView depthStencil)
diff --git a/Ryujinx.Graphics.OpenGL/Pipeline.cs b/Ryujinx.Graphics.OpenGL/Pipeline.cs
index b6a34e9cb8..f42187bdf7 100644
--- a/Ryujinx.Graphics.OpenGL/Pipeline.cs
+++ b/Ryujinx.Graphics.OpenGL/Pipeline.cs
@@ -43,7 +43,7 @@ namespace Ryujinx.Graphics.OpenGL
 
         private readonly uint[] _componentMasks;
 
-        private bool _scissor0Enable = false;
+        private uint _scissorEnables;
 
         private bool _tfEnabled;
         private TransformFeedbackPrimitiveType _tfTopology;
@@ -883,25 +883,27 @@ namespace Ryujinx.Graphics.OpenGL
             ((Sampler)sampler).Bind(binding);
         }
 
-        public void SetScissorEnable(int index, bool enable)
+        public void SetScissor(int index, bool enable, int x, int y, int width, int height)
         {
-            if (enable)
+            uint mask = 1u << index;
+
+            if (!enable)
             {
+                if ((_scissorEnables & mask) != 0)
+                {
+                    _scissorEnables &= ~mask;
+                    GL.Disable(IndexedEnableCap.ScissorTest, index);
+                }
+
+                return;
+            }
+
+            if ((_scissorEnables & mask) == 0)
+            {
+                _scissorEnables |= mask;
                 GL.Enable(IndexedEnableCap.ScissorTest, index);
             }
-            else
-            {
-                GL.Disable(IndexedEnableCap.ScissorTest, index);
-            }
 
-            if (index == 0)
-            {
-                _scissor0Enable = enable;
-            }
-        }
-
-        public void SetScissor(int index, int x, int y, int width, int height)
-        {
             GL.ScissorIndexed(index, x, y, width, height);
         }
 
@@ -1241,7 +1243,7 @@ namespace Ryujinx.Graphics.OpenGL
 
         public void RestoreScissor0Enable()
         {
-            if (_scissor0Enable)
+            if ((_scissorEnables & 1u) != 0)
             {
                 GL.Enable(IndexedEnableCap.ScissorTest, 0);
             }
diff --git a/Ryujinx.Graphics.OpenGL/VertexArray.cs b/Ryujinx.Graphics.OpenGL/VertexArray.cs
index 64c6a82198..17703cd129 100644
--- a/Ryujinx.Graphics.OpenGL/VertexArray.cs
+++ b/Ryujinx.Graphics.OpenGL/VertexArray.cs
@@ -1,6 +1,7 @@
 using OpenTK.Graphics.OpenGL;
 using Ryujinx.Graphics.GAL;
 using System;
+using System.Runtime.CompilerServices;
 
 namespace Ryujinx.Graphics.OpenGL
 {
@@ -16,6 +17,9 @@ namespace Ryujinx.Graphics.OpenGL
         private int _vertexAttribsCount;
         private int _vertexBuffersCount;
 
+        private uint _vertexAttribsInUse;
+        private uint _vertexBuffersInUse;
+
         public VertexArray()
         {
             Handle = GL.GenVertexArray();
@@ -31,30 +35,30 @@ namespace Ryujinx.Graphics.OpenGL
 
         public void SetVertexBuffers(ReadOnlySpan<VertexBufferDescriptor> vertexBuffers)
         {
-            int bindingIndex = 0;
-
-            for (int index = 0; index < vertexBuffers.Length; index++)
+            int bindingIndex;
+            for (bindingIndex = 0; bindingIndex < vertexBuffers.Length; bindingIndex++)
             {
-                VertexBufferDescriptor vb = vertexBuffers[index];
+                VertexBufferDescriptor vb = vertexBuffers[bindingIndex];
 
                 if (vb.Buffer.Handle != BufferHandle.Null)
                 {
                     GL.BindVertexBuffer(bindingIndex, vb.Buffer.Handle.ToInt32(), (IntPtr)vb.Buffer.Offset, vb.Stride);
-
                     GL.VertexBindingDivisor(bindingIndex, vb.Divisor);
+                    _vertexBuffersInUse |= 1u << bindingIndex;
                 }
                 else
                 {
-                    GL.BindVertexBuffer(bindingIndex, 0, IntPtr.Zero, 0);
+                    if ((_vertexBuffersInUse & (1u << bindingIndex)) != 0)
+                    {
+                        GL.BindVertexBuffer(bindingIndex, 0, IntPtr.Zero, 0);
+                        _vertexBuffersInUse &= ~(1u << bindingIndex);
+                    }
                 }
 
-                _vertexBuffers[index] = vb;
-
-                bindingIndex++;
+                _vertexBuffers[bindingIndex] = vb;
             }
 
             _vertexBuffersCount = bindingIndex;
-
             _needsAttribsUpdate = true;
         }
 
@@ -66,17 +70,22 @@ namespace Ryujinx.Graphics.OpenGL
             {
                 VertexAttribDescriptor attrib = vertexAttribs[index];
 
+                if (attrib.Equals(_vertexAttribs[index]))
+                {
+                    continue;
+                }
+
                 FormatInfo fmtInfo = FormatTable.GetFormatInfo(attrib.Format);
 
                 if (attrib.IsZero)
                 {
                     // Disabling the attribute causes the shader to read a constant value.
                     // The value is configurable, but by default is a vector of (0, 0, 0, 1).
-                    GL.DisableVertexAttribArray(index);
+                    DisableVertexAttrib(index);
                 }
                 else
                 {
-                    GL.EnableVertexAttribArray(index);
+                    EnableVertexAttrib(index);
                 }
 
                 int offset = attrib.Offset;
@@ -107,7 +116,7 @@ namespace Ryujinx.Graphics.OpenGL
 
             for (; index < Constants.MaxVertexAttribs; index++)
             {
-                GL.DisableVertexAttribArray(index);
+                DisableVertexAttrib(index);
             }
         }
 
@@ -122,29 +131,54 @@ namespace Ryujinx.Graphics.OpenGL
             {
                 VertexAttribDescriptor attrib = _vertexAttribs[attribIndex];
 
-                if ((uint)attrib.BufferIndex >= _vertexBuffersCount)
+                if (!attrib.IsZero)
                 {
-                    GL.DisableVertexAttribArray(attribIndex);
+                    if ((uint)attrib.BufferIndex >= _vertexBuffersCount)
+                    {
+                        DisableVertexAttrib(attribIndex);
+                        continue;
+                    }
 
-                    continue;
-                }
+                    if (_vertexBuffers[attrib.BufferIndex].Buffer.Handle == BufferHandle.Null)
+                    {
+                        DisableVertexAttrib(attribIndex);
+                        continue;
+                    }
 
-                if (_vertexBuffers[attrib.BufferIndex].Buffer.Handle == BufferHandle.Null)
-                {
-                    GL.DisableVertexAttribArray(attribIndex);
-
-                    continue;
-                }
-
-                if (_needsAttribsUpdate && !attrib.IsZero)
-                {
-                    GL.EnableVertexAttribArray(attribIndex);
+                    if (_needsAttribsUpdate)
+                    {
+                        EnableVertexAttrib(attribIndex);
+                    }
                 }
             }
 
             _needsAttribsUpdate = false;
         }
 
+        [MethodImpl(MethodImplOptions.AggressiveInlining)]
+        private void EnableVertexAttrib(int index)
+        {
+            uint mask = 1u << index;
+
+            if ((_vertexAttribsInUse & mask) == 0)
+            {
+                _vertexAttribsInUse |= mask;
+                GL.EnableVertexAttribArray(index);
+            }
+        }
+
+        [MethodImpl(MethodImplOptions.AggressiveInlining)]
+        private void DisableVertexAttrib(int index)
+        {
+            uint mask = 1u << index;
+
+            if ((_vertexAttribsInUse & mask) != 0)
+            {
+                _vertexAttribsInUse &= ~mask;
+                GL.DisableVertexAttribArray(index);
+            }
+        }
+
         public void Dispose()
         {
             if (Handle != 0)

From a8e9dd2f839bdcd20ec9b32b8647ce2a83e50ecb Mon Sep 17 00:00:00 2001
From: gdkchan <gab.dark.100@gmail.com>
Date: Tue, 26 Jan 2021 21:26:23 -0300
Subject: [PATCH 27/27] Fix regression on shader atomic SSBO operations (#1967)

* Fix regression on shader atomic SSBO operations

* Update comment
---
 Ryujinx.Graphics.Shader/CodeGen/Glsl/Instructions/InstGen.cs | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/Ryujinx.Graphics.Shader/CodeGen/Glsl/Instructions/InstGen.cs b/Ryujinx.Graphics.Shader/CodeGen/Glsl/Instructions/InstGen.cs
index 7d0f1aa583..622ac646ea 100644
--- a/Ryujinx.Graphics.Shader/CodeGen/Glsl/Instructions/InstGen.cs
+++ b/Ryujinx.Graphics.Shader/CodeGen/Glsl/Instructions/InstGen.cs
@@ -44,7 +44,8 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl.Instructions
                 {
                     // For shared memory access, the second argument is unused and should be ignored.
                     // It is there to make both storage and shared access have the same number of arguments.
-                    if (argIndex == 1 && (inst & Instruction.MrMask) == Instruction.MrShared)
+                    // For storage, both inputs are consumed when the argument index is 0, so we should skip it here.
+                    if (argIndex == 1 && (atomic || (inst & Instruction.MrMask) == Instruction.MrShared))
                     {
                         continue;
                     }