From 34f97f0cefe5ca4021ee0253dd5bdb200ece0ea3 Mon Sep 17 00:00:00 2001 From: Joe Byrne Date: Wed, 9 Nov 2016 14:28:56 +0000 Subject: [PATCH 001/113] #369 Allow configuration values to be evaluated from appSettings Added the ability to override config settings using appsettings with key format ImageProcessor.. e.g. ImageProcessor.CloudImageService.Host will be used instead of values from the config section/file. The key still needs to exist in the config section --- .../Configuration/ImageProcessorConfiguration.cs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/ImageProcessor.Web/Configuration/ImageProcessorConfiguration.cs b/src/ImageProcessor.Web/Configuration/ImageProcessorConfiguration.cs index 2bb998a5a..da85efd0a 100644 --- a/src/ImageProcessor.Web/Configuration/ImageProcessorConfiguration.cs +++ b/src/ImageProcessor.Web/Configuration/ImageProcessorConfiguration.cs @@ -325,7 +325,8 @@ private void LoadImageServices() } /// - /// Returns the for the given plugin. + /// Returns the for the given plugin. + /// Web.config appSettings can override settings in config section using the following format "ImageProcessor.<PluginName>.<settingKey> e.g. ImageProcessor.CloudImageService.Host. The key must exist in the config section for the appsetting to apply" /// /// /// The name of the plugin to get the settings for. @@ -347,6 +348,16 @@ private Dictionary GetServiceSettings(string name) settings = serviceElement.Settings .Cast() .ToDictionary(setting => setting.Key, setting => setting.Value); + + //override the settings discovered in the config sections with settings stored in appsettings of web.config if available + //This will allow the settings be controlled per deployment slot within Microsoft Azure and similar services, that only allow appsettings to be configured + Dictionary copyOfSettingsForEnumeration = new Dictionary(settings); + foreach (var setting in copyOfSettingsForEnumeration) { + string appSettingKeyName = "ImageProcessor." + name + "." + setting.Key; + if (!String.IsNullOrEmpty(System.Configuration.ConfigurationManager.AppSettings[appSettingKeyName])) { + settings[setting.Key] = System.Configuration.ConfigurationManager.AppSettings[appSettingKeyName]; + } + } } else { From ed9a8e98f90684e449fe97c584ea9dc11a37e62b Mon Sep 17 00:00:00 2001 From: Joe Byrne Date: Tue, 15 Nov 2016 14:34:52 +0000 Subject: [PATCH 002/113] Updated comments for overriding settings in appsettings --- .../Configuration/ImageProcessorConfiguration.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/ImageProcessor.Web/Configuration/ImageProcessorConfiguration.cs b/src/ImageProcessor.Web/Configuration/ImageProcessorConfiguration.cs index da85efd0a..bd6909eff 100644 --- a/src/ImageProcessor.Web/Configuration/ImageProcessorConfiguration.cs +++ b/src/ImageProcessor.Web/Configuration/ImageProcessorConfiguration.cs @@ -352,9 +352,12 @@ private Dictionary GetServiceSettings(string name) //override the settings discovered in the config sections with settings stored in appsettings of web.config if available //This will allow the settings be controlled per deployment slot within Microsoft Azure and similar services, that only allow appsettings to be configured Dictionary copyOfSettingsForEnumeration = new Dictionary(settings); + //for each setting found in the config file foreach (var setting in copyOfSettingsForEnumeration) { + //check the app settings for a key in the sepcified format string appSettingKeyName = "ImageProcessor." + name + "." + setting.Key; if (!String.IsNullOrEmpty(System.Configuration.ConfigurationManager.AppSettings[appSettingKeyName])) { + //if the key is found in app settings use the app settings value rather than the value in the config section settings[setting.Key] = System.Configuration.ConfigurationManager.AppSettings[appSettingKeyName]; } } @@ -432,4 +435,4 @@ private void LoadImageCache() #endregion #endregion } -} \ No newline at end of file +} From d52e5d45ed54926045ebcb59e10399ad62655b9d Mon Sep 17 00:00:00 2001 From: Owen Blacker Date: Mon, 8 May 2017 19:25:18 +0100 Subject: [PATCH 003/113] Implemented custom caching solution New cache.config param `caches/CacheElement[cachedRewritePathExpiry]` takes an Int32 of number of minutes of SlidingExpiration for a CachedImage. --- .../Caching/CacheIndexer.cs | 11 ++++++---- .../Caching/ImageCacheBase.cs | 6 ++++++ .../Configuration/ImageCacheSection.cs | 20 +++++++++++++++++++ .../ImageProcessorConfiguration.cs | 6 ++++++ 4 files changed, 39 insertions(+), 4 deletions(-) diff --git a/src/ImageProcessor.Web/Caching/CacheIndexer.cs b/src/ImageProcessor.Web/Caching/CacheIndexer.cs index d44a9f365..c4df31eb2 100644 --- a/src/ImageProcessor.Web/Caching/CacheIndexer.cs +++ b/src/ImageProcessor.Web/Caching/CacheIndexer.cs @@ -56,18 +56,21 @@ public static bool Remove(string cachedPath) } /// - /// Adds the specified key and value to the dictionary or returns the value if it exists. + /// Adds a to the cache. /// /// /// The cached image to add. /// + /// + /// The number of minutes to cache the image, defaults to 1. + /// /// /// The value of the item to add or get. /// - public static CachedImage Add(CachedImage cachedImage) + public static CachedImage Add(CachedImage cachedImage, int expiry = 1) { - // Add the CachedImage with a sliding expiration of 1 minutes. - CacheItemPolicy policy = new CacheItemPolicy { SlidingExpiration = new TimeSpan(0, 1, 0) }; + // Add the CachedImage with a sliding expiration of `expiry` minutes. + CacheItemPolicy policy = new CacheItemPolicy { SlidingExpiration = new TimeSpan(0, expiry, 0) }; if (new Uri(cachedImage.Path).IsFile) { diff --git a/src/ImageProcessor.Web/Caching/ImageCacheBase.cs b/src/ImageProcessor.Web/Caching/ImageCacheBase.cs index df40876d7..a76dff37c 100644 --- a/src/ImageProcessor.Web/Caching/ImageCacheBase.cs +++ b/src/ImageProcessor.Web/Caching/ImageCacheBase.cs @@ -65,6 +65,7 @@ protected ImageCacheBase(string requestPath, string fullPath, string querystring ImageProcessorConfiguration config = ImageProcessorConfiguration.Instance; this.Settings = this.AugmentSettingsCore(config.ImageCacheSettings); + this.CachedPathExpiry = config.ImageCacheRewritePathExpiry; this.MaxDays = config.ImageCacheMaxDays; this.BrowserMaxDays = config.BrowserCacheMaxDays; this.TrimCache = config.TrimCache; @@ -81,6 +82,11 @@ protected ImageCacheBase(string requestPath, string fullPath, string querystring /// public string CachedPath { get; set; } + /// + /// Gets or sets the expiry of the cached path to the cached image. + /// + public int CachedPathExpiry { get; set; } + /// /// Gets or sets the maximum number of days to store the image. /// diff --git a/src/ImageProcessor.Web/Configuration/ImageCacheSection.cs b/src/ImageProcessor.Web/Configuration/ImageCacheSection.cs index 8f485aae4..9e5151cd6 100644 --- a/src/ImageProcessor.Web/Configuration/ImageCacheSection.cs +++ b/src/ImageProcessor.Web/Configuration/ImageCacheSection.cs @@ -171,6 +171,26 @@ public int BrowserMaxDays } } + /// + /// Gets or sets the number of minutes to store the rewritten CDN path in the cache + /// + /// The number of minutes to store the rewritten CDN path in the cache + /// Defaults to 1 if not set. + [ConfigurationProperty("cachedRewritePathExpiry", DefaultValue = "1", IsRequired = false)] + [IntegerValidator(ExcludeRange = false, MinValue = 1, MaxValue = 20)] + public int CachedRewritePathExpiry + { + get + { + return (int)this["cachedRewritePathExpiry"]; + } + + set + { + this["cachedRewritePathExpiry"] = value; + } + } + /// /// Gets or sets a value indicating whether to periodically trim the cache. /// diff --git a/src/ImageProcessor.Web/Configuration/ImageProcessorConfiguration.cs b/src/ImageProcessor.Web/Configuration/ImageProcessorConfiguration.cs index 039bb6222..cd9f31acc 100644 --- a/src/ImageProcessor.Web/Configuration/ImageProcessorConfiguration.cs +++ b/src/ImageProcessor.Web/Configuration/ImageProcessorConfiguration.cs @@ -117,6 +117,11 @@ private ImageProcessorConfiguration() /// public Dictionary ImageCacheSettings { get; private set; } + /// + /// Gets the image cache rewrite path cache expiry. + /// + public int ImageCacheRewritePathExpiry { get; private set; } + /// /// Gets a value indicating whether to preserve exif meta data. /// @@ -407,6 +412,7 @@ private void LoadImageCache() this.BrowserCacheMaxDays = cache.BrowserMaxDays; this.TrimCache = cache.TrimCache; this.FolderDepth = cache.FolderDepth; + this.ImageCacheRewritePathExpiry = cache.CachedRewritePathExpiry; this.ImageCacheSettings = cache.Settings .Cast() .ToDictionary(setting => setting.Key, setting => setting.Value); From bdf9b5a2893a9430805c45ec573f6ff6c087c809 Mon Sep 17 00:00:00 2001 From: Joe Byrne Date: Sun, 13 Aug 2017 23:32:48 +0100 Subject: [PATCH 004/113] Appsettings can now be used to override settings stored in cache.config, processing.config or security.config Updated Test website with section showing current settings Updated Test website web.config with examples of settings being changed --- .../ImageProcessorConfiguration.cs | 52 ++++++++++++++----- .../Views/Shared/_Layout.cshtml | 51 +++++++++++++++++- tests/ImageProcessor.TestWebsite/Web.config | 5 ++ 3 files changed, 93 insertions(+), 15 deletions(-) diff --git a/src/ImageProcessor.Web/Configuration/ImageProcessorConfiguration.cs b/src/ImageProcessor.Web/Configuration/ImageProcessorConfiguration.cs index 0a2df2b1a..a4774fe53 100644 --- a/src/ImageProcessor.Web/Configuration/ImageProcessorConfiguration.cs +++ b/src/ImageProcessor.Web/Configuration/ImageProcessorConfiguration.cs @@ -250,7 +250,7 @@ private void LoadGraphicsProcessors() /// Returns the for the given plugin. /// /// - /// The name of the plugin to get the settings for. + /// The name of the plugin to get the settings for. Override settings by adding appsettings in web.config using the format ImageProcessor.<.pluginname.>.<settingKey> e.g. 'ImageProcessor.GaussianBlur.MaxSize'. The key must exist in the config section for the appsetting to apply" /// /// /// The for the given plugin. @@ -269,6 +269,10 @@ private Dictionary GetPluginSettings(string name) settings = pluginElement.Settings .Cast() .ToDictionary(setting => setting.Key, setting => setting.Value); + + //override the settings found in config section with values in the app.config / deployment slot settings + OverrideDefaultSettingsWithAppSettingsValue(settings, name); + } else { @@ -319,7 +323,7 @@ private void LoadImageServices() /// /// Returns the for the given plugin. - /// Web.config appSettings can override settings in config section using the following format "ImageProcessor.<PluginName>.<settingKey> e.g. ImageProcessor.CloudImageService.Host. The key must exist in the config section for the appsetting to apply" + /// Override the settings using appSettings using the following format "ImageProcessor.<PluginName>.<settingKey> e.g. 'ImageProcessor.CloudImageService.Host'. The key must exist in the config section for the appsetting to apply" /// /// /// The name of the plugin to get the settings for. @@ -342,18 +346,8 @@ private Dictionary GetServiceSettings(string name) .Cast() .ToDictionary(setting => setting.Key, setting => setting.Value); - //override the settings discovered in the config sections with settings stored in appsettings of web.config if available - //This will allow the settings be controlled per deployment slot within Microsoft Azure and similar services, that only allow appsettings to be configured - Dictionary copyOfSettingsForEnumeration = new Dictionary(settings); - //for each setting found in the config file - foreach (var setting in copyOfSettingsForEnumeration) { - //check the app settings for a key in the sepcified format - string appSettingKeyName = "ImageProcessor." + name + "." + setting.Key; - if (!String.IsNullOrEmpty(System.Configuration.ConfigurationManager.AppSettings[appSettingKeyName])) { - //if the key is found in app settings use the app settings value rather than the value in the config section - settings[setting.Key] = System.Configuration.ConfigurationManager.AppSettings[appSettingKeyName]; - } - } + //override the config section settings with values found in the app.config / deployment slot settings + OverrideDefaultSettingsWithAppSettingsValue(settings, name); } else { @@ -424,12 +418,42 @@ private void LoadImageCache() this.ImageCacheSettings = cache.Settings .Cast() .ToDictionary(setting => setting.Key, setting => setting.Value); + + //override the settings found with values found in the app.config / deployment slot settings + OverrideDefaultSettingsWithAppSettingsValue(this.ImageCacheSettings, currentCache); + break; } } } } #endregion + + /// + /// Override the default settings discovered in the config sections, with settings stored in appsettings of app.config or deployment slot settings (if available) + /// This will allow the settings to be controlled per deployment slot within Microsoft Azure and similar services + /// The setting must exist in the config section to be overwritten by the appconfig values + /// + /// The list of settings discovered in config section which will be modified with settings found in appSettings + /// The name of the section, used to construct the appSetting key name + private void OverrideDefaultSettingsWithAppSettingsValue(Dictionary defaultSettings, string serviceOrPluginName) + { + + Dictionary copyOfSettingsForEnumeration = new Dictionary(defaultSettings); + //for each default setting found in the config section + foreach (var setting in copyOfSettingsForEnumeration) + { + //check the app settings for a key in the sepcified format + string appSettingKeyName = "ImageProcessor." + serviceOrPluginName + "." + setting.Key; + if (!String.IsNullOrEmpty(System.Configuration.ConfigurationManager.AppSettings[appSettingKeyName])) + { + //if the key is found in app settings use the app settings value rather than the value in the config section + defaultSettings[setting.Key] = System.Configuration.ConfigurationManager.AppSettings[appSettingKeyName]; + } + } + + } + #endregion } } diff --git a/tests/ImageProcessor.TestWebsite/Views/Shared/_Layout.cshtml b/tests/ImageProcessor.TestWebsite/Views/Shared/_Layout.cshtml index cb37c2f49..8db64dc0c 100644 --- a/tests/ImageProcessor.TestWebsite/Views/Shared/_Layout.cshtml +++ b/tests/ImageProcessor.TestWebsite/Views/Shared/_Layout.cshtml @@ -58,7 +58,7 @@ null, null, null); - + } @@ -177,6 +177,55 @@
  • _dirMonSubdirs._dirMonCompletion = @dirMonSubdirsDirMonCompletion
  • + + +

    Current settings

    + You can override the default values in the appSettings section of web.config. This also allows the values to be configured per deployment slot in Microsoft Azure + + + + + + + + + @{ + + //show the value used for a specific setting + ImageProcessor.Web.Configuration.ImageProcessorConfiguration ipc = ImageProcessor.Web.Configuration.ImageProcessorConfiguration.Instance; + + foreach (var service in ipc.ImageServices) + { + foreach (var key in service.Settings.Keys) { + + + + + } + } + + foreach (var processors in ipc.AvailableWebGraphicsProcessors) + { + foreach (var key in processors.Value.Keys) + { + + + + + } + + } + + foreach (var cacheSettingKey in ipc.ImageCacheSettings.Keys) + { + + + + + + } + } +
    SettingValue
    @service.GetType().ToString().@key@service.Settings[key]
    @processors.Key.@key@processors.Value[key]
    @cacheSettingKey@ipc.ImageCacheSettings[cacheSettingKey]
    diff --git a/tests/ImageProcessor.TestWebsite/Web.config b/tests/ImageProcessor.TestWebsite/Web.config index 39cef5fda..a763231ad 100644 --- a/tests/ImageProcessor.TestWebsite/Web.config +++ b/tests/ImageProcessor.TestWebsite/Web.config @@ -21,6 +21,11 @@ + + + + + From 073f8fbfaf8c3ff46642d3f9b6d5c05a82e2d3d5 Mon Sep 17 00:00:00 2001 From: Ronald Barendse Date: Tue, 19 Sep 2017 11:36:24 +0200 Subject: [PATCH 005/113] Added background processor The new Background processor is a combination of the existing BackgroundColor and Overlay processors. --- .../ImageProcessor.Web.csproj | 1 + .../Processors/Background.cs | 140 +++++++++++++++++ src/ImageProcessor/ImageProcessor.csproj | 1 + src/ImageProcessor/Processors/Background.cs | 146 ++++++++++++++++++ 4 files changed, 288 insertions(+) create mode 100644 src/ImageProcessor.Web/Processors/Background.cs create mode 100644 src/ImageProcessor/Processors/Background.cs diff --git a/src/ImageProcessor.Web/ImageProcessor.Web.csproj b/src/ImageProcessor.Web/ImageProcessor.Web.csproj index 0c438aba5..a54dec1cb 100644 --- a/src/ImageProcessor.Web/ImageProcessor.Web.csproj +++ b/src/ImageProcessor.Web/ImageProcessor.Web.csproj @@ -83,6 +83,7 @@ + diff --git a/src/ImageProcessor.Web/Processors/Background.cs b/src/ImageProcessor.Web/Processors/Background.cs new file mode 100644 index 000000000..f93312efe --- /dev/null +++ b/src/ImageProcessor.Web/Processors/Background.cs @@ -0,0 +1,140 @@ +// -------------------------------------------------------------------------------------------------------------------- +// +// Copyright (c) James Jackson-South. +// Licensed under the Apache License, Version 2.0. +// +// +// Adds an image background to the current image. +// If the background is larger than the image it will be scaled to match the image. +// +// -------------------------------------------------------------------------------------------------------------------- + +namespace ImageProcessor.Web.Processors +{ + using System.Collections.Specialized; + using System.Drawing; + using System.IO; + using System.Net; + using System.Text.RegularExpressions; + using System.Web; + using System.Web.Hosting; + + using ImageProcessor.Imaging; + using ImageProcessor.Processors; + using ImageProcessor.Web.Helpers; + + /// + /// Adds an image background to the current image. + /// If the background is larger than the image it will be scaled to match the image. + /// + public class Background : IWebGraphicsProcessor + { + /// + /// The regular expression to search strings for. + /// + private static readonly Regex QueryRegex = new Regex(@"background=[\w+-]+." + ImageHelpers.ExtensionRegexPattern); + + /// + /// Initializes a new instance of the class. + /// + public Background() + { + this.Processor = new ImageProcessor.Processors.Background(); + } + + /// + /// Gets the regular expression to search strings for. + /// + public Regex RegexPattern => QueryRegex; + + /// + /// Gets the order in which this processor is to be used in a chain. + /// + public int SortOrder { get; private set; } + + /// + /// Gets the associated graphics processor. + /// + public IGraphicsProcessor Processor { get; } + + /// + /// The position in the original string where the first character of the captured substring was found. + /// + /// The query string to search. + /// + /// The zero-based starting position in the original string where the captured substring was found. + /// + public int MatchRegexIndex(string queryString) + { + this.SortOrder = int.MaxValue; + Match match = this.RegexPattern.Match(queryString); + + if (match.Success) + { + this.SortOrder = match.Index; + NameValueCollection queryCollection = HttpUtility.ParseQueryString(queryString); + Image image = this.ParseImage(queryCollection["background"]); + + Point? position = queryCollection["background.position"] != null + ? QueryParamParser.Instance.ParseValue(queryCollection["background.position"]) + : (Point?)null; + + int opacity = queryCollection["background.opacity"] != null + ? QueryParamParser.Instance.ParseValue(queryCollection["background.opacity"]) + : 100; + Size size = QueryParamParser.Instance.ParseValue(queryCollection["background.size"]); + + this.Processor.DynamicParameter = new ImageLayer + { + Image = image, + Position = position, + Opacity = opacity, + Size = size + }; + } + + return this.SortOrder; + } + + /// + /// Returns an image from the given input path. + /// + /// + /// The input containing the value to parse. + /// + /// + /// The representing the given image path. + /// + public Image ParseImage(string input) + { + Image image = null; + + // Correctly parse the path. + string path; + this.Processor.Settings.TryGetValue("VirtualPath", out path); + + if (!string.IsNullOrWhiteSpace(path) && path.StartsWith("~/")) + { + string imagePath = HostingEnvironment.MapPath(path); + if (imagePath != null) + { + imagePath = Path.Combine(imagePath, input); + try + { + using (ImageFactory factory = new ImageFactory()) + { + factory.Load(imagePath); + image = new Bitmap(factory.Image); + } + } + catch + { + throw new HttpException((int)HttpStatusCode.NotFound, "No image exists at " + imagePath); + } + } + } + + return image; + } + } +} diff --git a/src/ImageProcessor/ImageProcessor.csproj b/src/ImageProcessor/ImageProcessor.csproj index a284b7530..12a6f07c0 100644 --- a/src/ImageProcessor/ImageProcessor.csproj +++ b/src/ImageProcessor/ImageProcessor.csproj @@ -241,6 +241,7 @@ + diff --git a/src/ImageProcessor/Processors/Background.cs b/src/ImageProcessor/Processors/Background.cs new file mode 100644 index 000000000..64249ef8c --- /dev/null +++ b/src/ImageProcessor/Processors/Background.cs @@ -0,0 +1,146 @@ +// -------------------------------------------------------------------------------------------------------------------- +// +// Copyright (c) James Jackson-South. +// Licensed under the Apache License, Version 2.0. +// +// +// Adds an image background to the current image. +// +// -------------------------------------------------------------------------------------------------------------------- + +namespace ImageProcessor.Processors +{ + using System; + using System.Collections.Generic; + using System.Drawing; + using System.Drawing.Imaging; + + using ImageProcessor.Common.Exceptions; + using ImageProcessor.Imaging; + using ImageProcessor.Imaging.Helpers; + + /// + /// Adds an image background to the current image. + /// If the background is larger than the image it will be scaled to match the image. + /// + public class Background : IGraphicsProcessor + { + /// + /// Initializes a new instance of the class. + /// + public Background() + { + this.Settings = new Dictionary(); + } + + /// + /// Gets or sets the dynamic parameter. + /// + public dynamic DynamicParameter + { + get; + set; + } + + /// + /// Gets or sets any additional settings required by the processor. + /// + public Dictionary Settings + { + get; + set; + } + + /// + /// Processes the image. + /// + /// + /// The current instance of the class containing + /// the image to process. + /// + /// + /// The processed image from the current instance of the class. + /// + public Image ProcessImage(ImageFactory factory) + { + Image image = factory.Image; + Bitmap background = null; + Bitmap newImage = null; + + try + { + ImageLayer imageLayer = this.DynamicParameter; + background = new Bitmap(imageLayer.Image); + + // Set the resolution of the background and the image to match. + background.SetResolution(image.HorizontalResolution, image.VerticalResolution); + + Size size = imageLayer.Size; + int width = image.Width; + int height = image.Height; + int backgroundWidth = size != Size.Empty ? Math.Min(width, size.Width) : Math.Min(width, background.Width); + int backgroundHeight = size != Size.Empty ? Math.Min(height, size.Height) : Math.Min(height, background.Height); + + Point? position = imageLayer.Position; + int opacity = imageLayer.Opacity; + + if (image.Size != background.Size || image.Size != new Size(backgroundWidth, backgroundHeight)) + { + // Find the maximum possible dimensions and resize the image. + ResizeLayer layer = new ResizeLayer(new Size(backgroundWidth, backgroundHeight), ResizeMode.Max); + Resizer resizer = new Resizer(layer) { AnimationProcessMode = factory.AnimationProcessMode }; + background = resizer.ResizeImage(background, factory.FixGamma); + backgroundWidth = background.Width; + backgroundHeight = background.Height; + } + + // Figure out bounds. + Rectangle parent = new Rectangle(0, 0, width, height); + Rectangle child = new Rectangle(0, 0, backgroundWidth, backgroundHeight); + + // Apply opacity. + if (opacity < 100) + { + background = Adjustments.Alpha(background, opacity); + } + + newImage = new Bitmap(width, height, PixelFormat.Format32bppPArgb); + newImage.SetResolution(image.HorizontalResolution, image.VerticalResolution); + + using (Graphics graphics = Graphics.FromImage(newImage)) + { + GraphicsHelper.SetGraphicsOptions(graphics, true); + + if (position != null) + { + // Draw the image in position catering for overflow. + graphics.DrawImage(background, new Point(Math.Min(position.Value.X, width - backgroundWidth), Math.Min(position.Value.Y, height - backgroundHeight))); + } + else + { + RectangleF centered = ImageMaths.CenteredRectangle(parent, child); + graphics.DrawImage(background, new PointF(centered.X, centered.Y)); + } + + // Draw passed in image onto graphics object. + graphics.DrawImage(image, 0, 0, width, height); + } + + image.Dispose(); + image = newImage; + } + catch (Exception ex) + { + newImage?.Dispose(); + + throw new ImageProcessingException("Error processing image with " + this.GetType().Name, ex); + } + finally + { + background?.Dispose(); + } + + return image; + } + } +} From 356ba4b1afccb91c50d951d687126c603c99d76a Mon Sep 17 00:00:00 2001 From: Per Osbeck Date: Tue, 19 Sep 2017 18:41:41 +0200 Subject: [PATCH 006/113] Update libwebp to 0.6 --- .../Resources/Unmanaged/x64/libwebp.dll | Bin 382464 -> 479744 bytes .../Resources/Unmanaged/x86/libwebp.dll | Bin 326656 -> 399872 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/src/ImageProcessor.Plugins.WebP/Resources/Unmanaged/x64/libwebp.dll b/src/ImageProcessor.Plugins.WebP/Resources/Unmanaged/x64/libwebp.dll index d7c1ee7a319f5c4e6cfb3045514274620b46adf7..43ffa6a603f6a2f631f21c4364b63f6db468e8d7 100644 GIT binary patch literal 479744 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

    rqgTG4~%hF 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

    dEyP#?$*d^Ezcz*3+uP#wqte1euf53B)30L_6i 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 literal 382464 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[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

    h-YdV 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É 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 diff --git a/src/ImageProcessor.Plugins.WebP/Resources/Unmanaged/x86/libwebp.dll b/src/ImageProcessor.Plugins.WebP/Resources/Unmanaged/x86/libwebp.dll index 928a112e255a101912d567488b7ab0c46fedb862..1b51c69adaace92d9a22d6e86942925581905ec7 100644 GIT binary patch literal 399872 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%0DKjyvEp&(*!J6!m@X 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

    Nb>^N>dcPFw$Ry_L^9msUgckB<6T=bomz zqkqKF94)hLo}qvAD{`B8jjPc=j;M`KYpxwc{|NK=H?M#E7w>;m_#5YcWc_m?c>N>e zul~z_dGn8>e}B>BA6ftG2wwC*F=4%2$p6XbfkJ3mZeoIB|KdjIGR;n`|Hu-ibSU?a z49Exad9oyqe>B~lpLPDQn9l>`;2@;!m>&CMX9WBrq;-5Hq|1E2(pb$QeRfoE0Hs<8knp9RY1>1pe{8z>r;FSJEM5Hfex%+6;ba6=2zV zu-mN$E|n#uH!J~Omms8VUI6;L0O+K7pigsyUd=|x7@qt=;_>1qA>;B_(9~z({2@YG zPe177E<&bzE6}(B?26Su-ZDbQhXT;$xuBnA64CIcl4MGOq47ytd{4@52qu zV*`#)!S9PI|0ZPEekY{A7y=4(#irLEnu4|8xlGleY<(4ZdL4@CJK|2iTV~fFaJ{ zpXW$O_qa$%n?3`6r&HknX%2KWC1m~ll8|=Qh>*#)59~hrU>Dv=$cWko_B9%W%$&`j z^;N;&w}Fu6xDM=m@?d|w0;stZ*s~aTZ6P6DN`#P>KcA3kIS=f-vq8UP2fyjew?F%e zHgAHEo;3#A`YRz*e3+0?^B(M;Zwcv}`@sIA6PVlz_A`xywAHm>|5QQ9d|m=}+XA2( z20JaAkY4_ZkP(~;_T$e%uYUr5wnt!Zj3J~YM1tKV475=&AwwaMkU7^E?C-rmmv|7; z;~AiRt^m(oB4q5hBcyFUPe@;W8aV$XA#?Hs=#M7Aj>CksDkDM$a~~n|EdX{1f&U{vA#G|d z*!gFJU4{enCK_mi$*+In&b0YONW1Z!kP$ly_PkG^`-VWXy#+4sBc$)_0{{6o(4kGB z^Xfo+p>VX>4Xfe7oaaE5z=2g1^eg6z?E^}w~Pk;@E+*5 zp+MPSLYhq==pbwLm4fYzo6=}+iD{w-j)S0iL}Z3L~Y2s&jgaIrig z?WQbnd>J9#S{ihx1aS94LPmiI_|*hKC-Z?`ITskqO~{nw0DlAxxNr(Se<18PA#>pv z=zCv5ON|gR;y!|2H3T|!0I1#v_M$G(d)tBC&0s&>KuDjg0s2;gU#blBiz49md|-Dj zAf+$Z%T(_Ja!unQMiCTmrxzUSQ@NLV7Sa=nEW#jNP-qzIGbE2Y_z^ zIP#N_QTH95%U*r~9X1Spmyck#90KaU1*-Iee@PD^V_qlNf434c2b;j(R1Ykw0lumP z#+LyjiU}G11%xzDCTQo^pl!1VnKtQQw@4$To2CGdJO>&-1;0@|A@jgPLYmP7upf*9 z`=NWFkA;E%LFZdZgK%X1HU=Lu7D)HDHc2A*13FA+y7tkoNf^ z*k{gxUGNMcUDg`(W-HM9%t2e5fp$MeNQ*p7$Vfj3_69?+j~alTcMsTC>w$gOPD18s z9q{{6;7`#2f74d*|5gV|sSz@?l?mx*HxSb9DuAE42K*mafq#J<_^IXKzpxbi(Nf^A zl>j?!5!e+MfZakE?4bf+ui_)5vCjjo#sm5S7w80b&~M=91&mFTM9Ac}1D$vl{QFM1Odj-B?1V@_q2jgaL(u2pR1D;Q!$beD6U>?{NWt^JQR-Jt3|9Jot-kfQ6QX%mOp; z7aajzVg&w5142f<9{Ah0gMOn09Nr4{2{l4G&qm-v1w!U3dEk~6gbafvpifGGW-K72 zg$okWU-E*#ZZ_CQ*@5$C$me{}*N+4D|A5c^a2f?heI#TS4}yQR5A5PygbbZlpnU__ zA65gK%LtjXi$HH-g1(py`pGNM{VAXqCjyP*2^k@=g!HESgiMiepiwZ`BLaZEH^IK* z1|jX78zCd(Dv;d??0f78>G#hOGCx}bw_1Wd&wUdzb90;7G z6EY8N24<-c(j+#3zP1+ho0Wu&?aRTQBuz*clK{HG=dCb53xfX;A0e%b2ec|D=qEHn zhQ#D2@;ngmlaR*s4S02!kpAO6=yPvDf9NG-T6O{lTEK4JKuCLA4ce+4{2z*d=kmZl zmP1IpmI0bO4g7&gz{O9&|MU@PwFkhmNJ9GIFz^otfp!Z3|AJe<=QqHw;|{v_8qoPN z*u@+`zq|n4e}<6$<0Sa+ngchP5;D3EgWtmlwER9oW`jQP>Q11XHX*%9gOKLF1*oV7 z_I@SMK?*>f)r5=*SC)na%r;SAkRWgmANcv^5VAf87w9_+?D|t5$#cEH zZ$f6{chKRZgbdS9gmk$f;FmXG&+Z|l-RK}>?rQ&ZiomO zd(^?Mr$WfwxdFIi-CxQR(sgAC8G6e=@0B8?9S{c|SpYmCM98q=CuG{q1?|F3NWaMr z44on0r$v7>LCARd6TV-o_#5b!5%7Qb2=?iBK%oKP%3ko(I|-QwTR~rJ1bwR(7+*=q zC@KZMDFi!P9wBYnYp_$9psikl_DKOIB@)t`5`dErfie%kuXmr2=@<_7*bvY)x4}Q< z2lmxB328@efd7^|FxLg_U!4i*D=rZ-4%>l0@I2VdPJ^Cx3beWfA?ubH8N8}vjC)7b}s)F`b0$r~FT6_&5!*V4dEp<8ArfJV!~|8WVBAxTIR6$k&b z1z@Ly37MVqK|An*fBqb>Kjk81eMU0)-_8vE$sfA=Byj0(LR$V0;EAt<42}`-KmJI_ z+&Kh#WB~j@ePG|z4eVGyFVbLsYe07MS%TjC?Ufln2;`g8|)o^gtX9`U^nz4 zWC(eJu6G6AzDCG2a0b8dCD6@wgtYJrg!E%)fy->b{@#j^nPd)jM>9eOItKRHhY4v7 zMxZ12ga6cCLb|d(*x7XnY4tk57z%hn1E{%`kRhZFdQgRso~Zw1kAf5~M`?Cq@*Eqp`jE#^+pMk%xUpfio z{7uLl`awvq`bx-19RY@Z0=m2hzttcibN3t2YQ4Z^T|mBeLfUvUA!D$Ckl9cR%&P(> zmxDjLgpd|kNJw|f1KQ<+-71@qc_;()?w8=FQh}S2z`p(&Aww>KkSYBLxG)wd6irCy ziv-ORPDtar3z{v6kUjaR(vewKgHM zS_|xbbkN_n5YoBT2^r$5K!uHjG;KxDN7fNCZC8W7xss3`w*vI*W#Dg-2K{w0A&pO* zkiJR`s3QXQKYu6oKYH~E8lfA;SJpik;$waD4(oHq`K{1O`zbBcz6C@(?zn*N3D{hp zxWA0(Y#v9%yc#zA_?S4+PfD*KU&(C;>c-a+&8FpwhK>be`yJ9mvoG;L;b_CY69(Wv zIDH*0w+L-3%3eeKz3txU*ZBt7zC}xj&U$qVIZjKn{#tPr(Sw2hsAQr|;+(>&tb{f_lW?AQ6L%Osn-Hyf+cO zvMvUV-|`IO=QSbvkmmyw=h)`0pLvkzqiV4z#OkMw%PN@f`p>cG)sx=XHA-8FzdJe( z+3aZA^}Za+8}5II6zP$z=ADT66S*HD84VHsh8~ztQ`RH&CfRg>RGVhfFSkmDXzZDQ_&;gqx$hj`@+V&eRiB`-14AYQ zS2q*?#t%=B+|Iz!gKjWhg?mp?Z;xEDcQA}+T<;l@it4s8Tw+AZ-{|%ue zC`@i~Pk^`$@lV`NMj<0ZopRgH5v}$y8D05&fgV2u{hMi}pf`Iawa-2{OZ@f`DQLgF ziovG_bE40GOF_J0JgyfXY7=d&n~I`W_szG_g!b3QrlJyU@he%`#>D@5JQXGFzN8xR z+luIW1}~7At7pg;14*J4p1eSV3rEgO$ALe2RvPMz9b6I1#!mc;jnmK$6Rox44`93w z$!W;y)bYK?G$6j2+%Hj~hVkhw?2tc$$6g|vmHV$~mu?{SXT5rfjt;Ji`N0P9<>GyX zcw6qDDXoF|jh%RfG8|&>QmNo?%zB0R)A}#Elt8{l2&AL?tp>-gem+Us(>s}tBAgl$ zu8nIE{V6vcb)5exENo;-w3A2%dUJNYOKl01AGOIqpPWmiznh*Q{yq5_D2BgDr!4Rc z(XnEgXn&o0g7`9BqTA1AqOPeh#;pc3qS=cw(KEYQ5g)I?`Ur?;pBN zEadGd?-5{moapi5EVRBTSRqpZ)~8k?8?EN`+Z!f-g!u1V%tq46Zh;Z9mPAvf*{Jdw zXIWCB0?}QIbI_`jrwj%pAigJTbC5&-I+GD<5Aipb=Ad`GmNj*}&?j11@-wKx|gTx^=yOu_#Ccrh0x(r!h6UkB^+ zp(Gd0y>Vpsoy9Q!Ith%XNF!op~rXjQ!HX501p2#+8pIQx5$;cG`hxe}#PH zVcOATu<1O}#}DPBFJo?3&s^F|^eT^hlwtaL%?AyL=TKrk`g!s3hlwsYFCtp<5r-sK z&O{ZAfBUQgB)Pg1!&HP)vK~aok)4%x&l-o@WkiAAjHROyZ}l6K3QHJ3;N5lLiG7pdFk?lFn$BQ zLZp)X{ld95aNay|C`3E5%fC&T!v6UgRfwKg`4t-eg8i|ztPpu`DYeq^1i$0gLiAGgl{Su;^s3IggtKBjn1NO)FGet;^3voSNe~I|#-Yr6F>EG|p z#6mubGmDUn;3Ml#Q?Ngz-xr|>TaDN-4EtfBU@`g`&UJ*%+n&^)r(TR4T=RKL-q{j8 zcA^;F{%mNlbRp=LTg7O_;O+Zii!Ty?(#vAxBO$Ok>jUKDweDin>+oR0pAPZR;4VS6 z{1uA5kIm zy9xTcTVI0AvFVBy4`^R*q6D?`M}PfYy^pk?xU3ZMS=wH6Q-*wz-&KlCjs;XR=R!V4 z+m)i-;ty6g&<~UHypg5ILtAjq^$>{vxuQ~(uUGWFOa}6`{BtSVobu+yPG30x#YM}| zvFY|28zb0n7F){@I<0a`S`pUgk!2bBxTe&-*ZvE+UUvGGA%&|?1gb|MpXQ~PAx~r0 z@76wt_$c<2p-!X4vxRQKe$?kKN6tKESS}gz;rP08VSPoORU)D5KVtj*;JmooP>Cc0_VLx0Kt2ghR3iKJdxQ%z;Jox$T7@D6 zJx-a^p}*lBRcNz(!FJv2FhBhZRcQFjQhuFIXfGkO3O(bzn4zU0Lh|7ku0nOs51-@d zhy6!?SB0Y2@~N+U1?3rh)u=W;RFU}>#`|((H99@JEiuj*;y-Yt8qJ-nIPfSN)_0yq zHClj8tu{V}^^$*Djh-}K*wrNn*AG-*jm&pP4&wZ+c{jguU26d=h zTO242*U#NLHOMn*=ey^(;e6Y6wg&x>SRQOU^Pc3JVsH&A;J>h~#$SWXM>MAfiQ7}N z^rT__U;As2Uu09-@i92B-*D8TC6UPsOzI(iJH=|z!z0^0G&$gY=&5`yT3w-75}m*x z?eU;mw2^B^olk-{(I*UQk&D}^0|y*IXIj*vlPXo!b(%2$IZn0ce01XJdX%HXf6?JI#!}GLn_ji!` zCTevkqJ5|>`Lh|(9=qz0dA`B=XUqJFeq>UI5(U#Y z4^V#D+d6b~bPN4WCX9diuR64oKiX=U1LT9u+^`IFVkG%?{_C z@cMdG)@SuIQx(>qo2o}P3NiysGj~#c>_9#G@%9Awp}u`Y_noRoPc;qs&niJYO0U$T zw?kvhtYz1U|EYgHGGDm&gL$(X(KjE|qrM%Y_OjdI`M~03JzDO*%Jw)H#AkD9J>opA zHpPlUVg1e>Ye0dM*;;#kL;Erp z8jy%XRBBiwga+#%+Dzyjh#T`d)}7e5(ZvAfFnt8&Jz3 zN%zhecs{bPZa^Mx?}X+bh4m2bYd|U1pMS}ogY!MBK5CrQ_^~{|5OJW(X4B6m!%fN`0tN3qL*9LvrOe6 zpV@et&~yaP0*NG8&*S1vC@sdW`?m?)kL0dtLj3VbHOucnd_?I@=<=4Il{%;3dSz|U zgj&Konq*ud-r43&=)sHQ5`n2OKOV;>6gYI>K4+m78NY#d6UsS%XN_Vw_(LO_P(NKO z!TT21wQVF{PZ1YLbdDi?yVYw z_~wl@Ar0+IRO)-U-hY|hj2u%v1Ppv2-z3GG(FG+%TR9HsUuR7-s&P(ZT+M;?ID?we zfydXl-B!c={P#Aa@2uzfkxEa}|ML^g$Y1i;;?@t^M3>n&BhTh}U)Z}KpZabzqj^#} zXI2MnCH@~_%_z07EGv9H#Ea`$GZN9wx7^DK_b-CE&B*Q2Zs%Tgh`)GkGdgt&SLg7))j$u`MZ zkp9+Hv>-96D86(I)`PRF1#QSveW*(}A^w)(7W7+Dd$vz4?7xS!RutlE6j9I*<}fDtg>h)>|fpJR-`+zW3giu ztpBf+RbUc#--Xo^5EWRQkf= zBDg+zgtQ@illKG338x zC#%0x*%x2u!Tmt<=QcFRaCR(P0q3FSOdF!6*^|erV7!U*+flobfywFRiex;3OWRSc zrSME_8uah5p&hN0uiBoB;QVN&+L6%a_Q#_Xtmpaz?Wj-XaQmYQ$iJIb?P!fNb=Gw` zbI9xCV{cBivpw967D@4pWN&lA49q2;8qH%8r&4y5{Fch8b(SdaL~ z4m7x$w{MzLOi-~2ckWm!zo@3`dcllzB^@H`VH2HqrU^G`B*u* zOu~4DzjdGxyWBF#oe=*e9G%GR3+Eacld<4!bhWX^@eAh_RJY2Aqy@;v04w-WMC%DEG5 zzdv8&!%8SGc&ihgzM<70Jxt%EOg#Ek= zDiCjGO($9}v@nA+9nPP)-cIy={j`Lx4xAsJUpkTcnm1=#OW}HTf~^a!FI^BeO9b+9 zi%=IjA4^|+>mkHXSf&f*JLR}e=Knokl)8}B%S2A4EEsRrwl0)u^Yv3g$59dwuLE6( zfB&AL-;!I1-e=W?s(H(mj&i|#BrbKKI^H$C8(Kj3d3B+C{yc}r_#j@fVO>bUw4cqa z6wYU}Ctaw)b=OE41Lh~0-G!E?rQYki4bMZ(6cUkEu0VXWrMgj#@QFL2?XVu7*L9;C z9{SG)1hR4AWu$eZp^ay59j-e- z`lE`vkx;lUkMB8H|Ei{LG&&O3S+oq=+c(&aWEo3F)wSWgY93?FuXm5Bgaz!s1Kd5V zpPyvhd8}ggPy+1$qj9R_-xwIgMOBM zuOF;}^?YjFgGzs!tTMX3m$bLYx(9KW1zOM|;eOQfau0GU+xpIQA?%M~pB^;jBy12r z=L9LgFQNwpMQYx=eiP!G{!{syXhe&&Gxq8uxZb~_RGMs2${$6yl z(J3IZa39f%3wqI7uM_WV-htmpsu#H)>GxE0g6rXB*cjm3 zM_w?|?!dYEaBbxVri-(JiWdh<%mS#}Pa5m(%;u`uiDU`z2Qqf7bRs zBr~<}ylr9t(FuE4TJEacy%R9Ly9fKw>-H^OuY!Y!-@~*I)xKOmJ+cb&@7&2g6jf<( zMAaFtSH|c2&qS(o@-p{Lu@PfR{I&fTUhq`*cCAT@i z`SQ)b4;?whQ6=PgoRn|A+lPL29X4%Gh4U*tst<_`pKvoDhWX!p+=mVbmMtO)llHy0cdIZEp9Pwzt-&X(QpC!oLem^Gg$Z~md3aK6kd=|g2srC-jq!TJ5Rx(_9< zXKZ=UtI%jzn&I@{`>mT%Cy+) z6(1npdk^=cMRD`>YyLh@37qIh8iQR@4{V{mI_rL&}ahrdpWQl<=4CFh%5)cVpu;~ z&N~<^;sonI6y1*wpJ>w9b=Z`&7a8A=LOcv;E8m|adQWmca(ys%RQNpP-*5kR{D!y3 zaEZe8+&_PR8^UPEwc`$E>*alkR=LoQLq0wmOVx8Dy4|cDD?QL-To$k*+Qpz9J2QUp zkKJ`4T2`wa%RNb?jzltuuHVp()l0*>OZv}4d6{-hpD7)>qOeIXjIZ?W)QU3 z$Jvf&ANGDf*5ye2A!BVge#>*i@6TqPZj5@a5Ux4NvHvAiC;i8`c_G zXOtFnn&^-#ZP-fl{o;$-2Z=U2(}u03x~q1kdl9|vSQ}=fj^2p1Pom=$+OUOnve%23M~P-EX~T_gnI~1soQOUo$QsYjC$;ZKWr{F&Qdwa75^SXMy;tx7U z%Fnvmf_3er5`S)i{E|M~g3IJ*CvHfF{iI>ig4;dB1ShRweinOLu!q={GwE&V;Nt@pmn2!8Qj1&ifWazReYB!GS4!t5(VHBz`rn7Obv1 z=sPw6?c4lp#_`8E?u>Rp|4~ED_^dtih}NxJq<|8mX6zMt1`Q~l zB>tT_&DiCJnNY?Rn7>zIGycZ>GW#Gq?EljH&3NgljxeDa2U31cKr?RGa(#VT6~tTL zwHdc%ObBf`1^F0qk>wv(4oKB^C*^xiG~>0^g4Ww2V1Dw3&DcAS{h`l&z8C--08k||L`lwhv@t! zR(^!%ulNM}g)^-Qf3A4ro^TZQ!tX1BsZA3W;pY`gQik{iA8EpsM&%bbc*1z*>NnxS>r^javNKr^ zchrR29aN-8DxX?n%&-rlM_^A%j97FZ&x(pmoKeu za2K2*-eq8N& zYOL=xX`hF!5qpo=?g$8l_FsN$z^!}Tp4MCKApYZT8}RHcXLqcTf&3P1X~2c%3E6jI zVZDk<8!-M^U4Gtv4=L}I)qq37$Kv>>;rv#3)_|`+=(V+V(9zVLd_MpaVZW>y34czvp6ehsv@^;tB`!>Xd4)f1ZugB~Us%|>1hxQWJ)Z;3_AO4n+5T6*S zddxeV`@Y;sgS3BFpdPO&@|(YD9QL0ddp(x$nP?u$g8l0CqYj_?ls^#Q0{QRpt`0Bk zdwO_X4xA5eZFN{e>RoGGmIrCit)dRg&t)sw{Q&y&d|ih(s!Xp5WrO|aom7X%c@(RM zl_9?aV(Rb`u^W})fpoW>*FzAi@V+&y%-_~ z^&fqz#YO`HKDYJYd@S#-#rB3xnaZ1BeMW0pdU~O+^jEka6f3C3Oe)rOS{M4$d|8VZ zA0PW7Is@0sbB}BB6E6AGOZQ=YBExEN_$L!(-9c!t>SisTxfZI1Qz1WS*J?4HZT&gE zQOJjl=WDU~Lu(#MgUSk_*e>$ZGFPahGb}S3dpSvM7xKCm-&htK; zAIi=(IN5jQ)7LI=9=4j)U^5ZvBuRI;AHGJ_V9&B>xyrk69O=QCPReITSL1%Q zn8|r67DQk5tj0b()IFXE7_XLfHMScW|61Mz03S{&a1q#-;;`72hk( zN&O_TYHX&hzq+sx^o^-1+`ZDMcX0+hZ>(4j)D%^a?WapV((Egi4RakiW^pdU+*zb*~3fJtm ze!D6G)~iB>RlkAntVbv0cQH>DK6L&0o0}PMJuDio#0n<`E=Ct4(tmM7B{o=nK=}9~ zC|{LPiCdK|%K}%!`PCX(iSO3zy`ENJO3DwqRpO2_4jaE(8Wa7?suIU{zWpFv4f(>S zSBZBXQQzpaAJ$t=u@dJWl5^g);S4FiZ9ydtS3EkM<(d9TyGFz(Z62!aBvm9G# zUwyM6K!CKbWK)i{rGoEfc$g6#w5J?1r7Ze(?1TCL+*ppgoVW^}mBRJRM7$iUgkm?* zPq1F)v~nD4KAWmx0x zvbgtmARjghmf?73eox=Mo5_5tewN~S66Z=?oMHWsca`F)D+1AsdKm9`eku09U2Nyd z4dV-qFU2ZNmFAaSHj?_Pex-P&|5~Z4rLex8wxyUFb6L6Opak)I7?2Q7SktxMA4h{ZQ#^Ap*rxZW5xnZ|n3D#%FXbI-iQpo%r2l3@-F2Qqc z=BjsD?IZ2yXP02V%bhV6$6>#C#+2Yf4Y$~57hpf=-YCH~<~M%3o`CfbIa7j9nR4cE z9EAPcZ%~4Zvki^64#D}6s#=0wC9irdybS$&NtWPXv9o%dbbgViy^Ioog{Z zcUmrf?-H0l)2bLR`+RTf+DTZSRJ~$s@b&()>mOk}@f(V98Gr7go;~n98MCk$`_H>G z{rnr$kD4jMi-pCR3Z2(T`%!O;u$<`h`p>f=UmjKzVgKU6^C|9-Ux_J2_=0VAm*zg$ zFIjhs@S`;q_tn3wC-uv&7Gas3b*297aR1YJq6oV$n4S0o!FayyD8lv!FFaZ%3+u_N zP=tLPlFF_)L%ifgi!iT-ylCAeDbk+aWFek)Qqjrb1@w2ZzYxzgJ|8r00qb|Kv=FOA zf8M~h3HE2{b5?mLZ$tVleNz8-P$5qFme1asv72al=R*A9Y~;caZ)nfltPlt3N|w$| z;wSz{okHw>3-B7{yh;@1UdqGM0t{#a;D0d|s$R(cU9PsV>)r~tF`zPa0f z6Ru}(e&^$*yUb&z4#WNA?%sUNTy!%iR~^nvW^q3L+MBG2tY?w>N{RXStae%}>noCp zetIV#`xi7kQMv@>WiRLBB^=G&=}4FOADQOk9aZZ7vx<)pEvu7{O}C5X7^}nik+>!w zw?t0{TN=W7sVtn2(^oe+Y}11MP&l54^&ekTDG!13aerSPjx_YV<@6KsW2ht#dz>-} zQR;^Nu0GGhgVF5gpANwOSQwm#pJj!=5txGKrwr#jd^j)oW?K3IG9KgOdDx8WZ;^HS;(%z7R?KOUMRm%1A6=-kf(QE8B%kXud z2*hj3?lopVdQmG{55_~&dX3G?*F4$b1LK`5@EU*7Z{4)t66Uw4CkHQ#;yb^E8~WRr zn1hX54z}ET0QXOOopW$xj?Goa49Jg5J96-V%l7X#5bUqG1vyySvN-MZ-=FujzRkw5 z3)l}`It%6Jr)6WhbMUO-fn#L+d)%_|O}ic2d&c0r3Eq>IY|MVV>0oYprDt6aCXW3tLLLE|FC+B>L#VEc_#h-l*=TUA!CceMSfBPd_=wI`8Cf0wew!A|X`Y$)l z#2<7%jyi0F^*+2V6Sum(yJQgq`(bn{19Jr3;_SKr>+4sUfd$oUZeMhT^HV7z1GhwB*dN=tGjKP@%ch)Sxc}j7PRBn5rviVr z!Frd+rDN=MPUmI{jQ@^pI$oP4-m*#@+OyD1$3rJy%WJNL_#uIG{QT3vy3IGCeW~78 z`2E4pO`n5h$#~e3Ug2?}%M|x6h{wp)S6Fh0?*4Esoc9B}Ug5YYe;+k=O;WyH{1twp zFPNyKv4-f*4==G*=wWxudoZ4!%$L|S^ibWm1@uD=malstNgG#W!eS^|)L|W;~Wo|Iu z{1a(dQ(B=vkQeGtD5l|ap?X{{X>dNOv87=x$1O< zGX9jrRJ>;BKwggzir}kKTHm#;P)*OlKRgfKWVE{a8ro2 zsG%Ih@8R!cth3^jR!Jq~_x`eE96fwzCLDBckLzM zJh-NsjGL#z^7j0O_1rc)8NU@c^zgM3=w-=CIB(nIj*WH@|KiR()+&Ho}9glwD;`!Gwii=y}4lR2BK5-pWz$%0^*xmVE_0ulcEnCtv|(0|t0L)`pX!hCkkJiuSNu|-rg+}{RAKfq?^t*5gBp#KjV53s9-dg0!^ zf9Llm2Cp|aXLhv0{l!a<7#w-)isQ3TD6h041|MP{YWe*DuE(!RqOn&kzvZr+xnz90 zr=qbCZ*aO@!DgaA&WXkrY@N>zMjs+t+Bga`zaG7&7a>fv|GoP-w&Uiz$B&^sk={uB zCDr%t;#Iw`|NMPx%Cbo8$93a@>}|*o3#)th*BvV!Gf&X#pGM%NQ45y#o#Y|y35|r~ z-48mL79NU3&)X1==eG2&m*j-~u-GvShi{s(ug_2=e#7igyj;!8yF*@(=%AUqxMF(G z(O(nFM1Rz}i>YUoepy$3k@1}L3c=@Dzh8T`NtgJCD}(Xc<^!sC`qhcPDG-dEbHDUT z|NVK;?gK$sAmez=a;?Al9&raVms=;j?_Nd9(|T{?vJ?LG+SSrT&s}~S&z*i1^<)gz zU(z}di<=sS(KVpHaZ&(IJgEHW?LN?I@BQ)B$m4qT-LSt$Z2hpj^3@OZD`Efqn7)NA z9`BrXS}RG~pW|~A+bp@v=6M6k?-B9ApI^r}*~O?3e{r-Iu5MBDAL`mj^y$?%u;*h6 zeb9h-p2+aTYreP4oZ7XJ_^l}qtd=ChtA7mgH>TDNi>aReC?E>!%X8Ef-}qg0uf1st zDZj131@jpv_cC5DCpzrY6+HjpaI*7&1krw6m$AM54O(Bv3Ze(49r3fiOyRM(aI*d; z>ULQ3(#MpLMX-OJ4_v^!7dUBSV#`Q*yEmut@dfgN`j_Vstt@VZ>xApy)OkYtXrCG0 zFZIMs-HDI*CB%&Ir6j{`)+=Wb?I)^(CB{E0o#XvR`umfE|LHaT?|UTvlI^eeAOC)j z#2@R%4HF4lL`PA2RYv$qvxv=R49BhEt4Gn%*@ySJ2VBVUbU8aDqBV-nmN_nzhz-cG z^Au@FHXcP5Y4&mbw!WLY$GTS9oF7FiHmCIW1m4Oijj$Knc4HL%U+sN&R25gW{!rCK z4fbwGY>5S@_nBis0fUN)*ri^I(!79OgNnUji4}|*OEif=V~sbq#1b`%vBut`#)67s z_kD8#gC_6&@z#24{nqcj>-v~EWzL+k&)(nObG`FAW8G)l#)a!+9`4z1F3KZ9I8%MF z{|xg`aKbvtpiJ;Ad|#^I#qs(D8EBvvo7|rALmkx3A=p&ck*$s;0Kk zYaM;{ef0A@GVG@gzuZ~a-_fa8#ax$4_ldI5SMl0C$8nH}-|-WE2X^oB_#Y~7=;XNA zY}J|tt?rXW;{65No6mA|nznr3Jp4XwnQ!iH>DOYkKCIISeY5>ONt<+XOUukrj$2cw z$WJHTC;dN|d!(M%3`g35q`!LM_jj+x1`G@AHBCR(+dbnVe#f`eV;^B$m-&v>TVk2< z$L9>; zxwCxs?2)TR>vBX|;!ybkv3u;@I5KCxPFAezc&O6@vMfJ;Ti2bF^mD^6+uHPhK>oPd zVm|lNXnj=Vqe~Yu9*_~`$P_hjf#cHo49ATMzi$$U(O8O9rBQT(zZkIyS*nn z4y;n8l>;7QSjw8{>;jU6p(k4H>CnKvZ#%DKIx9L*+%hn2?f(;rU1=RS0yzut|ibEjp$ zd@^uS)RE6-XX&~6&J9b)<&(UK%#B~|OwrFDJ(<_|t9%l&?a0H31M~Gpjm6`qx95|~ zt!{rmxAh3U9R8#Fy0iI&8{E%v=Jq^&Wz+0|>+qg{E8TkhUgn3{j#kl!m!7Wrh}@m^ zQ{32r(;cHbW`{K4ACYhMwRN@)O?P}Sv(NrzogR?|*Y4cQik<2>-Drd8mxS_JbzGWm zov**#JNH<{sgKB?br$rx^u=iX(_sH|rM^MAUt5nrc8oZ;V z|LD6aNq;`V|MyR)pRQP_mpMCd%O#J;#P58_!d91OImUKXb4J#GOy;a_F>>daSq|@? z5AtnWKPK$N>@?kfilf2DT}R6ij|o@1$M`ZE7dlc_1s>}<>M@Bj3w+neVft^{=h2H6 zKPFwH)>Y!qEp%)@{eD`-9gj)b_g}|^Otd?i*R<*DE<7fyC+M;2w*HQc*`1z_c>S0> zEgg9Ihw$9 z>rp?`LHeBU7?)l^npSmvZ*%lKeZ0$GDV3KLkmmEtE_ZeokmK#E9to`Y zr5@4Yu=wzD0U0@@%8#ynlJ$x;&EQ7vPe|jr2@&Il&vaBe6gYokgD2!9Tjf}tz--5N zd+W8W>Gy;@|E=X$87C$RysIV-}8FL z`@JeZCG{F~_Ze~`+i`98Z#k0mlx!WjVbtEx7{>>l_Z{%<`IIPm%jXRLY@j2k!}%{q zk9bOQ$JQF&t9rKM$5Q)~?=OBz*z1R8{FE}ok(u|^=o!B}CEFeh$Z0!#xL&W`l^T&Z zo|44C>x1{#AFSK1^%)jj_8DQ1*X|S0W0r$!*6#K~`Wg8~JUgN{JxA};z+C6n^%=R; za_X7H=Gl(!KhTvH4S7cPMDE@{^1woU`^zC+`!9M%n3o0Re|?sz55=?Z{y#q>x$%GQ z=VwlLe0Q|x{4Z}jBcl%X;eT5)SC8H}_0v-2pOgAm(*qx!U+8#VrQ_zM+;dXuWCq(FmnyddxG8FNu;vrzx+NH?GRF)y&c{9m`9FjL>~r|0a1=`VG929 zl0jp$2MqJic8p*4{A~5^FNvqr>!j}ltWUD4 z)yrDsxF0jEng8KeWXg9H)<2w;@PKG@S3!qR&M+9 zCA0JvZ4!G840=r_EjiWf($V>PRL5;h;-bP+!|MxH9{NGym0gq%O-Dw@P*iSlx^?H^`rTVQ-=lTx?Yy4Wb*J9S z3vkvu`*xnQ-o>}_f}HiPzMbc+cjK+RU}wGCZ|6DdAX+aTX{X5_lYW*7hG5`7J1ft<9+P7 zHn^}}GV;=`Jm-z;55_5#hrGdMkY_9GOstzHWfc_7J8RXsh`h>w=W$kEKJrSe4{zn| zaQCD-V}M21idG)wD zvOdk=6mQh>q;@#x$C>Bsla>GO=M~=4W##1-9gEZLZn-<W+5o$|x~MftM7+`WDV ztagj9KUL!TLoOa(mjJ8W`k=_!hp?9(c*iV71s9?EGY=~Exd*lRg$H%fPEqcdhn%4l zmAn`gR-n%_-Kd;7ZdC4ZS1S3WD|K;*E9Es5=ig%r*J7H0ARrmY1ag2}AP?|bhjJhY zxCnSPaHn#8@nW(zZWIlK0hz!KAP?|v>qZ5kZK^ir7RU7A&?rFO50KIIILEy&YPgqy z_JGAEewYy&X9v)t1?~gn0$z~F9j$P0w6g=(1)*IpKR3MO4DF9_qmqFzoO@3JrXoEK z=|J=a`P4}C4G04=fgL~|a1rI+({VlE{dpmBXW&|#=S~2IxjOq!4|k<9(a#*rRXpZ; zBrpY-3#lDAJ7ws1qK0=fGl7&umv~>oCj_LuYfYIJ*a9x zLqG?*0C7M%Fb&8CRsfrUgTQ6r3E)L}VwycE4j@1WpfAu57zT_7<^o><-vbU{A8;9< zTs$c+pdp|Eoq!}D9moV00~>)oz$M@@P}bFx`WTRa_CO>s444Wm2DSnxfa|~uzzh5M zL!c?30iA(2Z%3v)(2G*gBW0-fsQ0O|urlTGic2r50#%W!1f5WYs!CO(s#7(nnp7=} zvkq04`Vjm1BkE(S9#x-eKsBTqQJ+wsQjMu5R8y)MbmDoPcf2L7{dASyeHyV)XwTE*KE zqguu%$A(i@vUR*IJTWaf*dCskk{oWgC8oBt+lq>k5~Jf{0utkJajMOp7#?4Eg)=)a zDJ3P|mXZ==x24!piwcs51jP-u#i#t8j1Nz=Ia9v2$fT%}r!71CwJK3!C2^ai5?QVM zI=`K2`A+hm_20>P`xZ!*Y{5$Yv;I3dJ-UXJxG7R^%G)Hq8BpPAad+RO3U5}JES|2n zE0xIox5~xcf4hk{!zj#tyV9G&wsu?LY+EOo{8nkv(KfqtESBgb#V6T=!sBhJsfD$W zSGYp<5Su+EE-A6NX5mfV&24LQ3StUo<8Q$zDP=hCmSpd5vpZ` zcmQsQYQ_C8N@9u&r@~4XOH9#u)Em)62KrvqW(V7#qP`cli}agDabCQH0fpy9t#?g^ z)h=oP5{?E6XXvdFS+ZZ$bnBwcP-498Z3#*CA>Hh8MeUSG+pTR?INK$2t@fOK42p}i zHnJu3!AWn1{EuAUxYSsi-BvhX#ijA_Ns%QRX`Pfj1~LQgD)0x3FzXvAr|1UBaVn zt;63ekCl8g%T}U&iL!s+9wFiJmQP?S6gC(uCl|Gj*5`yL>=$@<5V&aZM=#|`^+sN1 ziM(m0J*h0@#g@p+L0&5I2A9aoMP3H-HkZiDL*6gQ`?rt9fe!)Kfmc9n4^N5*Is^TH zalj&A9dHP^1(ZggYXdaU4hRDV0-3g%*+$L&EKG z;SuOVu1B}<{?^LBlb`6(CEjLB{zpOUE_g38u8B)+n`G}2mlzXo>lo1wJx32ZdUUa+ z2FJpXM+MpAk}#|x)Cji#80(}+*z6>Gk^XiX@5EFp+oNk@taB=&+6<1gC0iY98yAl$ zp{TxATmNZsC0D5M)@gQ&I25%`4fhDP*%RWxRcyssR15b`X*TSXl zS#wTR{$~pTQB?I3xrGBkCUx1$?J^`K)s_$(mtbp|f==43Gpd#gHlsC_b!3ZhW?lrY9Qvr*A|f$6JxU%&%@a+Xq& zwzznTilK0;h=kCT6dM~FpA^H;p~-ezWLyer$CWHgP8#%gNo>gyT=jQJ4Qc>HBNZIA zsOJpgE)>QV2bN$@0F!-l9%=)R4NbAdhDJNZB-G-mH7JbGqKvR?p^4#kJ8m0pj~VEk z3#*mF4O3iXOB@(yPfARH zq7WVUpS~^P$({l=J0^xJVxLzg;-8G5^ zBnd5Atu;lo$Z9bXks<5T0#PQHH}~>IjTDqweMm-M;&5HzvJ1q6(%0&5 z`bs0gtWUD7jpt2K-En9^htTo#IQl&OjP_<^CWINlWHMhfFPKx@CSklZL;6A5A?=rH z$W7(Wa;O|950m%ExpJQTM6RxQD=#!3eVVz&ylQ?xz9*-MCD>)r?lQ#ev6&!qc(%gN z=hyOk`Gfok{-E$os4Nvoj5bS8HJ6!LR$qcF8K9^>%yMQkbA%bj<#0`SmRI;W!Vkg` z;ek+JB;rV|oW4oVu=&*I6-8NWBK4IOWt?KFQL2kxSEqG9{WHCb-c1j{a|bHD za4gf9M+%imLC;WBHvNqC<0JWL{6@a9&{Y^NY!V8@SK=VdRFs@9Pn7Gcw^T+OZryY- z<$P{ci^~-DiYt}d#vnrFIEPCGvwyPn`EAN|JDf zWUI2ZS#P!>+nA+Uo>f_s^=19pKCF!$#ExXgvW>aUTnNYUoVZrotLN#JjYfuQv^T2uD66eaQflPG*v|I zJE^ynAPtkoNZ&|5N&BRZYPvd3{a)RUk$Y*qwFqspwoqFQX_K)+o%D2lw%*hbjR2#g zG18c6Tr;MbcdhxjSZK4{x!Rn>b>gD9ATd&Wq*T&0v@t*%r)6vFwV$;E+GEW_uZnh# z8&8a~W&=|;1I#YwP;ZOEa~YdQ1=#i9K?FEnsVL zG}ngf!=-X#xXIiWZXb7y>%UBYSMFX5F?Q)D2!gQP6%ql40A>Av(-Y9xzt zD>+<=Q3fd^lu^ofWwJ6u`9fK!e5ou~Rw>^rKPX$2pOl}Ky~=OO5#^+EM!BS1Q~px! zDUXz=%4@|rjAm_ zs*}~}>KE#K^-J|Db(Q*^`h&Vj{Yl-a?o|({N7Uo$8TEpCO}(k!Qy;2N)t9Q9R!S?U zRnV$wwX~1423kw4v(`-;V;r^S85)?z-|ehB*Pk26WpQ6~-*Y>-L)>$&CU5f5>M*r} zR!38`PFj}s8^MDlCzq&5_oLJ3h4e=HC;AY5jV{A{!UQrw;tMdpFyudEBhezq0A$u3|o^WY*+RHr}15( zZSL?-csJoAAzj=qb(fdQKg#!HH>HyDkrJ+K(avhs^j3O%eYL*KRLDAVh}dj4We?vD(Nn)*C+>+l-UOS%Yd(xK@>TSJhK3t9q$b)taieT3>Cf z`lvkg&s5`rQOj&%>SmC&wm~jVz1^F$aY@_|E`yuO9n_9%=dt^u^ohpLU?;Fs*i3ddJCDs` z7qiRQui3TiCUzIQk3Go#&Yob;vKQIw>@7Br&1avnuOM5cx$;~^t~z$}$6Q0MDR!L5 zsay-rmuts$;DWjCTwgANi{;`uJEU+pm(GpjCUKeEY;FO!h+77!T*Iy7HggVc7q^Ey z$mMb;xYOK4?kabSyUXQsPq&*K;IOZl()Z~1kw2o8P+zlYz?=kmw+)BJhfB~%q^3f@9}p|Rj2@PaIuLMzy$K%uh`BJ>u*glM6kkSwGMLxqt- zhA=^x27NM5$PzXPKSHh^3%A4+dA&SX8Lp%&8Ok^6I<>Z*t^cYwGNQ5WXN}uNQ!~!| z$!tV?h(M@h7w7jW=F*GkS8Ow`H#dd*ihF@QQc7qh_LFYPiAovhg^5~ky{s|aa2Ukw zWk!%_5>JxJKr$4XKZ8sn)5vTxk1Qff$=Bpt?3aziL3WTmWIulI{}?$<&XcRyL3d$u zpO6>UK1z47OeW<@d(vfTFS;sSllG?T(~W5#nx|#jq+8McbRgXs{G&G=hTYtcPKFE( zrAN{k^aSi}tH;aeud&D1(VJ-py^G!h3wIS-_*14M*Of~Y1`DMnQA(BONE@W#%66p` zbYU}SuczuU!L7KNy2FY^NYPTflq^k@rb$brmC`zCv*eI=NqeCGbEOl~Y3ZVLRk|hJmGY%0 z(ksbTE-japE6P>n+OoH-$fkV6(nPt1d+-A~hW-_@TAE+QABH6PDPy6tw&_X6JY&1X zQ7*cG?^4vCOeevzJQ_4ey0}uUVyb2b^R@X2=?GiqV$nTnC6_POkeW&7rBbqw+)dwr zbt` z%?LBvj5m|bfv}vT&2i=wGt-;{3%VHGj`DJ)hU31$%miizvw*qEXHxI_=+O<%V)wd7wO2Uf@x^r}`dr zSY_z2y3k>tK!>r=VY=E%ZL0>VL28_us8Zgp@UJMUic#0}Gh@)VN#;WHD|3^%-8^WX zG5<0jny#cgBtr$m=|f`4T=Jz;|GQeWjXDKMdrZHg%P}7_K1>hB2A#HndCa_KN~8Y~ zU{KrH1JG4{xE=ga{sR9O|BQc6s3XvVj@{f>ND|74gQX0}<|64k>9}-GDlJ!*8_08& zua#rUE!c5NtqyzLPVK6Osj+G@Ec8TmrMg+&t)5o>v<_NVEk&CM+xfkASi7Y?)b8M$ zvglZg!a42A9N=VrD!+wq3J$tfc#W0sDUJ}YiM^D4N*%BOhgudEdpelTEimUay^7%j zzLaKkH7}bVlZK=zp^1pmw;;Zx9qB;+ZO<8$owz4g)P1(ojVXwUiRq553Y`ZAd1e_W(1 zf(IUhl`6+Eybjy2O}Hf76t>7-S`)3kmWl5$QMs$b>T4;N5Gu?c5DmvI=}7NaAq85LbY4c9na}^X1j@Hu0lCgPnLE()E%r3$C+J*dbh&9!mA(9`Zc- ziu_3SQCcbi(7AP0L+!0zQRhKY7i-J3ueEQr9LStzY%=l51&WNtFe*sE+4cnV3}AlU5Lu-B`>AD?h;d|g;!AKnjEcQjue)-q7&A*4adcY{;c z5}QMZw*zPD3(Y+Z+-L(B(Md>66=-A?TK0nUzO2a|vDno zS{9UcN>6B$*Gdz$mzo66Ymz!!T?BvYkop*`v$j@WYpS);dTMjDJ=$sQvi3-Ot(DQM z=!$OBll95^EPbKA9v1fkZ0MQjCxQWNyEvQnUksvX|hH0Z0f>Q?v^Xz6tvFqTyjy zH`~CIjW<(Zi?hrPro+5s-ZM*+58%mDVfYRs#@LDOL)+=k={a;Zy@Sq$Csu%cS%ndq zwoG>>m6^=U1bctTlw~Wi66?o?u`yuoOWCbp>nFHt+$cUsh{T?pk8y9us2>S0godI9 zMinQH7AK0|i9d-a#B<_Hv7FQ#EbRukjfxH$x{qke|vm6;@G{PLTR! zr7^tN4zP%W5er$OeytuO zuEBdBchWoIc^qTTf^R77XKWlh7k1U9%3V{ns}U}d(dd(`e)IC_!}O}AFFJfc6b?>>Z#2kPPa z2z{EqM&EA5ebU{Wv7#(yEIg2w(4zV98%Ke^AA)Q=5iI@XFZP19zK8L@k{cP_V0#K> z(--6Kr)H?FVLuYJsoDxH%3w@*zKh+Q{&PNEimAx#WlmvrX0YSAmtY;ug$`JYkbrQi|^F>hP6ME!GpyiVodd#~uCAG?+BFSe2G*wK5HP&HNk z9QsAl{;#}cSMl?UIG~~9QJ`g(U6XU3H-necYGH;vj zA?g&=BKs{+(GH;p-QN!IiXA2MqIz*qK9ZVX_!`sZ@zTnq`&-3bd zb2<3|mh><=XSL_$?)0DQ(VO98`tu#(1HO-lV<{y_FEHDZ6!JOQ3qOhScDF)|lsnxL zdvPeNZ%wex-pp7AzjDT(*tNZ9( zq48Hj`qt~4;T!DI&*&GyzXFV8W392pxCser2M+wZdBQwvUNpy(E99xwPukrXpY#QL z%aE^{oTVRHxH~x-hq0z3y4wX2hFR7=3vze*bBWknrPvwVCh>)M3;VT#S!Y!8-a zGy9uKW*V&h=jIr5BDlpYbFP^U_P5gf22q?1=2md;-R7_6Ve_c@hk4GtV*Y8~G4GoN z=5y19c#!v@p{kG?-AdLOLeE2b~EYG>dEi8>PbB@yvyy+~^qY z2d*st5noBF1^X{ZhSWwH559O1KGp-o+GZkp_DG3Qr>gT1_u8pG)ju=RjaFt;_{Q!| z9_Jwh3p0c+;s9wawA4DtR{-?S0$5hcP>kMSUbs=ZJ2ejn%clGZjx?RUz;>2Hz^}sO zXz+|=Xtkl>8X58gd73;EEGY{yrxo(I&~zISd)fg8vL9Uan0yL5?y`IXGWgc%T}PS|%o!%N*d5;w$Nw|n zOA8f*TEac;i6-kE^p;?H-ON5_IOMFqIRN#CK@P@34yHp6=A+kNK@Pry9BhId?1UT~ zfE*l$99)1L+=LuFgdDtt9F&3_RDc}Rf*dq}95jb^P>4ZV6F<_PbRykIFA`2{q(4a_ zX=DiY(ik$4OeM46!DW*rWF`3qbF+bLCELkvcrAy?QSt}&Nxi!F2p zvw)q#jo|O`BZV5`mtwAH!|Y3ts0(sgWjcIc0-Li-U8il-9B6NkwqMKDj)9S$*RE4_^Rrl1(>RynSn!2}MUvCV3z#~d-BEIPl%hXv9(R=G*dNed|vYx6B)ki}A zPJp$V3I33!|6#DEXi~X_I;#uUllzXV#3%5)U5RQ5YwEGSmssn zBPmo`C~ZePjYRx#7NXgkx!v$ZPQa(~LNqysPvJl3C-Zap zulNJ7xB+pQX5 zbHRfa`SA8|+L#u!uQLW{MO$SsYbw34&SuCvmFMAncIgmzi2K9|@Qr_gg};h85U$7n pU9z6V!G6)Dozcb0balG6Grsr<-4wBCE5fML#q9@K_xxY@`47|UbRqx% literal 326656 zcmeFadtg-6wLg9)=Oh_msMT8l^ znoI~M6LQ!bq`kG(-umdb_Itf;Z?U}^Q7dLLkO}w-#H%Q6MSL9ywDD04pv>>H_L)fn zK3cr@_xtM?WzIhPx%OIXueJ8xYwt7rmaT#)2!e!v$)q4`$CLg%{P)X$29Z4e(x=7? zkBxa@>ULA*3sY+vmaTTKTy^{RR(<>X&hLJE#fsZQ&hOmnToqp7T(-hlHn-aO{o9w^ zdi8ndjdi7}ezxJ|Rj0;0H8uV3isN@oJ;C3fp87JL#}|BW>JWe4I(3jgZ<%_WKNs+P zbAEcu)F<&i=ch}jp5)IZ{5fygcN?hAvwPq#7lcYvrm*|ww`?7v@rx2i;;pF9GxEye+&TLFtnk<i1mUH{qF7zo@T7^ih9KL0EkCswLkJ zeOnN^&qr6N?-TIs<~SJ6=>dCOZDbQ3%|-MeDw=>NU>g1B5rnS#d1WOvC4%6j1SfC> z918D#CZFf(Rktp`{kwwEci=#*=qwV?ab~RjqMZl{?J>E0NgO)iRfjl~|Y*)m@SmZ;tRnwu`+WZ;Q*@Uh=c{A(Zoo zF~25__3I7)CJM?<3q!VOSLpm?$Yre#*5cu+P4+1}?eY_IuGXYW-Ldf4M7w~tz-U5! z-JxcX{II zcaG*Y)uKZuRO*lwX^Z0cp%zC#Bw|=NF|0wtko-g>Ppx#>(9*4JIZ$~lvPhG1-LaMc z+6XsvpsUr5CcRM1AZ)AcL_6TSDA`H$L$mf^vhx!}COe5de*NU>WD@8HJ}*voQf_@a zkCD^|=nXh7=vokGydq_t)fBQM+Rdnn{stt#U{iJwxrA_CZFN9@`qN~R>1aB7EOZs) zIip>X3;d~;2?+h)hfLICrX$aoRB2GmX#HD8>j~Z{_H<-_?E_Yd?$K@>>!8g$^c}okP%BL22;~EOIScGahdJ7Nw1v%%gjJ9Hl#WP8{yR8ketzk?!5lgnyBwhzKz zLwio;GZOKry1g?(nz;^>tc_X_2xsCr&I*qfeddSLa%lljEBFsMV(WoSHOF_1VBiVoa^i zSJ%4K+Y42nU0s`_-d?1fw1mx?bQ{uq4wNreeZ_d#gQ_o2zaBVIc1mc4H-TEzdV5g6 z;>_s!y6q(9d6p5@<{{;%tGbqVY>~ibo0U_RHMW8S1-qjMj3RP*3`5)%4+ND{xBP>t{lSu5c>eITLbq6f!~8a z0nvaE#1sWUJqM57W5l{xxfyXzUM9feJneTzT0TnHs6;-Gy%(|3eQU?B%5<0Kug!iM zFbV@11qYP3OdzmbSUX|W7?g0h%L~_Lb8&{$u4(&`=u9WN+~q}Uv!6{BO|r0L@KC|N zy+hLhpL~CJ!EOYs^8GQC-8&tWlke}E)>qIqz1%L}lM2~}LslM|_Ug3Pm1e;rM;`}J z$O|^1V$^n?ur{9qmhUbvUVC{#*OS!x^m0c%6^#|_p0=OUpe}k~QJM?|U4SB;<8#tk zxeW*_IGKBrB@AvaHyiA}`koOa+1F%+Te;*OlJAdGk2v)Er@aOg z*4Gv6=5UMxV}yyS_~3U$lXBaAfS!0fx=-E$!7mVVlOSlNaHY#$T^rpU`VMKY(DiJY zg_YQpcTTgL?HHR@w#J4Pw91p5NNnLB!zkP}XtAv!go8!Z&BcSsT0G6WrLh}Hi z8Q{(QP`*9mL%GF-XQ>r|68zj=>ZA~UZZFNJ5Pohi^-##eO8shyU-^Mw2#rsaScrm& z5O=G8u>6zPlVuhX3%cT9T?rcG?~OH$ zP#16T(iYCfXkvK$790R2GzS1+@3VXQpgGtx_X3RAyP0Z}%cV&~5*luhGqXt=K!Q0` zs3SyyWD)E1`?n%ielR{m-u7DTEsPN58H&k}f86Dfx5ebnP0qcdby=4a)+Y)%St52& z5_>i2CX%&7d!ZmsE6|;>JR*)1SnkOd350zI11g-QKq@NGy=lzM$J*_?U01B_}<8t&--~jv> zeFV?7X7}S=fM`us^6@|7sV@Wojiz8A5v6GQ(@&h@+E9&B2B=|s!%_6J(NwFqEFkG> zG0Yqn5yDOosk}<2QGWI~;YiiCA}sDvwR`E=n~46L*DVNINrqVIvZ~RaBcY%xdH^F? ziCwBjAHusDeFWK}$0KI3+X#!#!QOBvZyr>&hmoN*<{@Nj&r@dYx5%uV&IpfR7AG1& zAw(&PMLD%knJQh**n1LtNqy!q1iAXf7uEZ> zQ{HV0T`pC71i?h~$7#@|69m?85vfW0DflRYKtj$q5GiCvC|~R$Q3|Dr9&*!w_fyd` zh*b-JCEIlkMlGJOa!ApfH9o6=aBdM>NlQ5bL0AG- zvUaqGT?A*rahAa!uN%?_vT{t^Y z%BL}!G)C^UOoLYlD(ZC1ESp7)gevsDyPj& zTg8PgXA&e0w-N9+p9QdTlvu=3&3@(r`$6rQ-9O7iNY?%ZzssH@!ogqyi`xf8?IwY3 z;3WJ5Q2_+Su)>&hZ0c|z-})1hyy4FPfc40ohvjV>h^f;37vt<_M32}(QQVJqT8&r=Te`N1a`n-4)HI9A33@XVhl{;lsnf` zcl-hHN!~pD>o72ZqhbXX=t7tfK*fyK7?&z|CCsEyw)qX@G&sbbMzeC%iL$OBdy4SO zHavtra;#y};C{-$^jk=&t_>LY{WXmR_IG*P9|(JF1C2Pj)3IHXw#%IrCX}^{AEQxg z>|IIx1C0QT(YDQ~LV1eDl_^{oO-3eaGbDd)AUUbw;!HB)To4QE*JTJH3mQsJT8vo4 zaHSrR(|MO0v4GdU{s$R?+;*)2SaQ-5BjxZ^-Up&R+eFj@G>#OVMMzgs>;+^lwuuNW z_M%-o-krdhRqphN$ZZ2`*ZHfoyQCn&F(35;$vN~dh@WB@<`sCB1(TEfNJ9-CWhV(* zE2a)47*eo>uJBj!o>Yvgfo$;NRA~=~IM3+ewTQH#O?vQl7mg~$+oe+YSDBntV-zIV zIl`_&vo^|Orkh3s%m$)%SH5c1RG(rrG;T$gLe+*j?uz+<1sxMY*Si1Qd^OvZ8~0ZS^>+sePK)Yo;QI1j(wAaT zpIb9ZUt+@Jt#R*fzLE9i_OtzLBd5b2d0Y416D9(NPz<}mM6jg7Y)*s8>wq0LmSrI$ zkm+qeyQOSSC5xHnUzMD*=@U2Fl>r$|R_+-&QVpaJK#O22Pdj2MuEF3@-&9Bv@7!nDQ zxx4)O#LGtobGE_F~qD z*n9HHF=#ON1@~Tg?q21jiO)*p%DtOt29mcdH8habL)}q^Bzf~S zh#}dL*4vODoUAkj4q#Oc8O@BeLJo_P1s2r&IokFLG!KK-u01-RLYOxebdjE>YNtoZ z=$5xMV+p!iyTt=(QaE5vnI~J9?dPW2%~nKXjYr<{U+9B2^G{EoPfzIo603HTQ!P0- zEBq1jy{-EG#Jq2--ala}LiK&Zyprnug!x=F_4m4Hr25Ke{_ibQy~WJ8gq8|b-$LeH zqIwsyjcuq@^)<0}9`H7?jSo}IMy~qWdAOa2H}2%|f5b0q=izo9-uO0;{}Yer;dTlS zgtgM-lU9U!gjUVtyea%~k1yHU??ycF&sUEp{`p$)#J`OXqF8HByYblg ztnp?%HojrJ@yB#%rHG}+`v%J5U+EjI5NkHp8+$WTGC4eFb%^* zt)=uJu&Da*i^Y_;S&3csBJ5DTZx47dii(%Yw`V%{i8P%neIrr&w-)^Mlz!Nf@V!C7 zgzqhS^!VOuNqFC&V8Uy}c;9PT|FnSSAa|d@F9#rU1;8q1>xt?W(*a?VEO*`{FWYUx zpE`4JAd8ha)zU#$I#_UA-LMkb*eP|xAj+$yD>cPL;Df&m`%LbX@|olD`55Qo>(yAw zUHO)1h2+`=2@un#RD|&V`4!=5kh;l9ZCoi@1}4$Vdb|vnDYTA9o1x1cUci>4B%HB# zGL+NSre7TX5dq)H8wDz+61?H_kjeV-{)-_jvIfRu-9bVoq*&#$7$7JD1oI3LbS(63 zhzG|G0xxAxj%T|7m-x~MWL4FpAfp!pG76<2!*C>k;?CC7q$--8BDO`vEZmoYX}4%1TZO8Q6*qm|J(PPh|?!etsrMg<=+UrYLP~E&}EpkQaI2 zy!8hW4VE&ojR%20wZzJd(Nkh$?M959wevAl;$ZjiDcLqGSuxE}c2Fj$%_jE2&WjzA z#Cym9fo-8V%;NprtRN)aPs&8xFTTblAcROBx;IL`0FW77TFGg7Ta;SR{%t*A0aTJz zE5QtpM}JcN0nwW2(Yr5=_oIvW|1^2nxei#1C%#X{OqEJq~UNImAzNt;pvMsU#`h7Ejzbu$@b#Wz9MyNE0#wIp!ivX}P9+Epd z$Z}SOGQyU`2AX@(-#`KLR_4YqZ&rC6EI$6G@Y$K5ZpcB#W>l6g5bdHjilsm1ov(Ds zqEViVWLR(%(aScFbd8;m+`aN#ywM0$H__~F`Uc7u$x``qo?iShx0nmMQtN1ZDqz`x zJc40s3z3PsPd5qL+;vsVW9BHpHUOj@t0;t}ndMLJ1y<@=53d0Uu)IQ(m328nXku#R zvlS*1$rHIUhSkyZRFosy$S=2@hZdP94;sEB13_hINhJHpB%m0$bXhMww_h3^sQUPD z>|`d}6FYpVxF@<>-tsCE3<|Y>g8G#qOY=nq`%pCWdo^*(BHt#mP84y=>P~m3nK~2 zC1438C<#Cn611J{f_}T1M8um8ZEm4x_>vb{TnVtJQKzoo&_+0CG%89o6~|-zSi*wB{4gRiLGz+r2z)j{w^>s$Y zppnzBD@`IcRtYkF6@nO@g&-MrVG%=PUgfPKWK-J-a+QOF%~gcOb^?voAzXg_TU44y zn;xL(+=R#r_yhWG82ZXi8=p?4n;#asU}h50X4QmWi>Z|wVXeG+9#&ha9BbuureYpL zOj@Y$t!7J*{Vqh=njN{#_Hef56ETU5D?8psq^UZ5U9b_0*t!Sw$A%|18V_KHaE6IA zKs=ZX+pG1v?!wmE12jZ6$xY~51m1I)b`Urq1!Xiq#^MR6Zw)fudF_F9$dJo>%64!N zR+!ym%20ObPe9MNzywG^?gjDM#A0jn|`eowt9@P6F-7dGAmP+j83;k-O!>$7-;OL z42?ayCSo>fk|~5%U=b)sa4BI3#oPx7?IIs+%Bit5a*TmKIX6S@^qFFBn#c9Zo!PB#f}%o9&%_L3T(7!gJ0MVE zW7P*9L!e&WGK2?~i?YzBK;_eY;QBc=`bUp@cRPW%+FZ{euZsuuYnKtnNq}>*a$_cT zRkDeOG~9-elaF|;Hf0f-hOM#ZpC6VlTZp*Y4(b)-b?0s&EU^bd^t%H7JfgdIw2%o_ z>wo(muNX~QlLY~NYr37ZWLYaEuhV~ko|D6iRm~ldEOWVJ34T_x078;sfY9(@!Tu?s zAdl}WApts&gJoz0TFf;Yq7f^L5a=MC*{}cm50GyN$WW5m;W3);bbTGx`Qp)J=<8oX zLY6RSXk-Q}I#rGcgmTn&(zxiTPk-tLRNhOzBlSc?fme+@c9m;qwUx9i-W_V|CkR1Z z*&0m&UEw0oQqW~ouZtiT2Hw+@uC^1B8>N80=*(Q;U+O*d4ezzMg`|cd_|+}cdaCb+ zu52e>qMd%4)TV3%IeGvuhRYh;R)`FAU$w)?bY>`DIh`HKHC9t^q+xtFAI2Mr;YX$!iEOln{k;0Rcxqs! z2V&~U$K#hV5tz_mBg4Yx`3(Vf1N;jDdakjBFaW=<5SkW3UgZW;cuYW_XY3>>H)PP8 z#AUcdE#d8W`c0y@icd(sBQ2BOUN_3640^I}_#Df|e*Y2bXFue!?gRIeWX`Q7hrK%5 zD7WUmBKE1=@R?Vo@X+MSGd9(R+_r^YiZbLaQ3Q;(B514W&M#=oHo7eX3Y*cegQwVy7Xu{PK1qRu zogw4J$+NkP7Z+Y2atvVeMgt345WK`wRwTPpy>);dQybvWCSPKs33&NoeU1QnEB}6V2UX!*s^#0{PoaRGu>MJy!WvMufnn3R2zAN)Wxs zXNWi;^@jE?A;92Lgzi;H>Ua_z{AH$H9S^3%>}@1F-Uvm9jjBetjE@(T3LA4BWGPI` zkIQHISylQc-=W@1DN{T=IW^hHTuJi|vbXh>AwOL+A}1JcojkYqwCO4*c{L=4gu4g9fETC z{(w3~KMZ$wWv7Gf!qh4~O&A`f)ddI05yJ|n(0k%o54VhK%H+m$Ac$E=Rzb4h_<$9Z zaRSHJ)7mkV;x`-NIS%NFFS(4(A%;7%_@%(@EPp2IgWoP~f?Wr2<_n-?{Ue2#Y2RP9A1;=Oy82?<_Y6~8Yf+T)z z_(#sAPW-duAMN1e9DWRyqFWWD25$g5fr}b)kfp7Cppmc2kqLd7@m>j|!9nljwvY7r z#=KQ-qeUXTm*E{lNpAaq>Me8m@ouO0L&p0;ygTWAAH7$)7GwN0Am0+qg~^2~59#?} zVqVAZkO$6pZT}Zf>_G2^8==xQ4mk?hAV|<^Xa=gS&8V$d?I6U{$Wc3-M#!diOdy1pSa=U z{fUk90R#PA+?C*fhZR+dqRLSlcRXXY4K%baL?H}6 zXEj@7VYH2B=D&9AEr-raz&0adC_`hyW_lrN5SCcE6~5K*`huJdT?5lTyMlrP(oMOw zJTY7&_K4+X);!;x2wSii*2AY8$brUkNFB3?P2P5*V7C~t?x5vlY?j)v#O8RGCSh{< z36Vr?S7askSGSY@N#p`;i3|H`7HfxPfZTB{59x1Od7 zL*Jx+(ISql3=x+M5tj^&g@XwSBv;xntnz4a%t?Xdqe0Lm3isvS{4?1}=p#+4ojnxB5uZ#60s-4q;3E3Zsn95x(bO7 z}IA?U=|@FW8{HabfK#Qc~e##+A!h{4>A5W^oSd=Se3C+K+&ySV|!cYqqR zye*u^Y8^p#C-vSgegGc+8eF?(ZuR3x$M3$!S2CR#PhvPvB;f3G!|$XNB&?}v$a<+U zzw$Q_F$4N`ltE?`F>=3`%B>uwBMgOzECL8OgMC?*6(HDHgN^tzkDZdYeG1RU0dBK1d=u6mgX9`JP6iDaX-q})Dp9i^BVjHS4ycYNuo6I zP7SuX;p&2*ySsTQqVm|^5n0Agp@fT7*bwCqZ*hr@E;i2z!Gx>?tzDD+2oeq*@D}pp z$P7TtV?Dv#?tq_KK}s2bIirQ92f$wBRaM4HYQ#I7Vz;|we)Du{ii-P_Yb4#g6jXv` z5UftFG3zI9716!q8jC)N5bDG_w5tL{fZofGAMZAWr*J@_z8kS|WD^qrWi&ES#G1}N zYD{r`r9>Kpke|)5a%F?_8bP>w-ecyHHgXNi%6-W%Z%c^Y27lE&{mNdGAP%u8>4s_? z^+GWtud>rF?suPPddXl_;?wx^#G9-NvMw~AS8l~*FO0P}s@$Kv19Hg8>hk1m&Dfb* zWKCW(4+2T7bLdOPkj8)+5}Dj+@+TiJM*id)2#ht(pdQ5BUD@eKvEUgyXv6ET1qV_# zmYLOB!DSB2$oCF`RM-)~uZ2z(Oh%=gTtRJ)U5hl3|4g|PeT|FdHb3izb6S=DEtvf1 zMKO-`z<|poE-rB)53yv4oxIoVMvh9HMoFa2MZ5FJto1l+*MIQDEy?Tr$+b?{7y8||aXM<{c8p0QYB|<3wAl@85bhppUCFg}{T7Oe5-R;h zltcF+3W%g-4`bDBgrU(lGv{e$g{$&RTe2|ffox%3b8-z>EQS$OC6;2jbd8Jl64u~c zp_7glJ{$p+y>PnCIa6ap*Pu!VEj#kllR0dblU3*7AQ(^~Z|mI)n)N|2<%zSb5Lz}i z%OzIZk-&T;x$GXWp7TC&mMs^@$GA=7HQ@wV!ExxC!1m%P}?Wi-SX$SMAKy0jF|>Ih5MiSP4hZn#B)vb8^!|9# z`(tR0lXO4f!Ad}KQ)Bw?I0nA2wG#%o|M~Dh$8nmS=IN*@@(plS7^>>)=p!q0fA*etj2PQ58`p6Km8!yTh2)d1eY$eZ{SOGPa#K4t#Bm8)=JYA#L8-X`J9V zFJWxK6b9K1v{QR7^iEGhp==6)dkE4cY}R57mcr7#C-Ep^)fR1;sdVqB{MEs#t)(O( z_?u0$jnOQ8)gEk17GjQOnHhUC0|iO+!dE6FYL*{X@fo88oy!-))ZcL?IF@DtXPnKj zlJ;Y>EHu=M{PRG4(mt@e<|Wr!!2n(`z%OxjlNbQxtU&fkO`^qB0kRkwS0ZJ8)jU5H zbR{2ibsz<0ZB>4#X21SDqwG5H07yepn)EG9#ZgrhqY7853OZj=gYtHi=jzVBAhOif211ey>@;0(yTHpS7x)`ihQBU8H*h(Ka49yMH@=Mm*i$b3h+aNQy-0_jLpk=GCVf5H#SfL4 zm7x}SE}FqHlp^>etEC@Bck>iXCR@c>xVS}pUapq%y_N#tI z1eMs;>{Xe2*zRI;%>8=oh}qq}=0c@6ncFQ6VLH)&@F^0Uxw?8atcjBa`;=s4?L@hA zsJBjwVxX7Hig9j(6U#5hz|ZwAd2n-_Hf9$BPsx-Hmtes1Dk#&&~7*jH1dA@ zpMVA+jIq$Bp{8>r-0y#q#*;y~*r99;$$lM!a)kFmFXO%j8juIRXh6az_JI83Zp~Ip z1NiWUa|gyX42(gvUyj1eC}@n4_zzg<;y#;m8bepyb0#VNhhs?I@w2Xez(QkL-au ze19^~pggOWvO?^Ar9pb%zov;{u;P|ctoS+F>K{rpK0?Fe>+3r1p(8Xj+jHRL zs`(swB;yRQZhLiAT5z1}@G#(!>+5==1W(3S1?Y|+orxzpf%R2k!q_66UJo%_r%B}` zMLIZi25>3k77uRPVvT0{6AomGT*Phc0DRFV;-CRv(BTP9N3ps;-RI;Lj<%?={#3Br zm~pv+Sf5N_JdhnZJl}`;mx;A`@{@*fhh#fm$RM)u^#a_((z$u^`U9eM*c>|75j6dW z|H~tYqYgGZyaoQOVS<5OBiPRa76c&V+9vOZETBb-4(Xy9{Fb2UwAmjUr*x0QMF2GO zqXk`?9K96rh;hi#zheNko^Zl%RNnj=!esWhQr(y$k!`M!@xUhvXtV(di0n|vhA`H4 zhS$6>LM3H)a;a+WsK@{z@NO}@(E>qDnlHw0)5nRJek!M|vNi`Kg;|PY;8+>uG8U&Q z;SqcehSQ(!HjtZT*qV+}!fDcHEX}WHeYq{d5i7S%!;B%#9{|nt6+tWcUk5FGB@Wj; z{Dx?q!4Jv1V((-UE=8TN8La{_L5=M+Z^H#;MozXr_EsjY$iUVDxSB< zpxil|RIcMIsillm-(Y9cEXu*H+qAs>%6dtT(lRjslK>RKc8*$UIcBjmxBFbEzM5vj zX_Q4;X$G920g~ML{mgR&=`}VC5;4N)3CULg2vb|YL%`5XZc)}bNuxO_P}0-5H$ble zvpWt0`xFj@oHdO*^~KXTLlQ+VgCsJLl6{Uy*}3U|4JpJZ#sqvLhU+=PQ9KNXVO%|k zD$-2+m8g?xQ0E-Mcw9}R!vNz~pAQCB=b-zI>Bg}yn*0DCTHg1e`UFDDxf%XfrQpCk z_c@kz=3I4@Fy#x%Tvv6aptyVVn#gM^Cy5A;z!6S8H@*3Ahk=lPnp0shIKBiUK!x17 z{K_%sh>uHBV0_ME!ntw>EDZ;C&0t2rV^EVySzc6v6o^I=y5XTwv(M&-+!=9=@J)-apRB( zIX}Tg1!n}vMEi?^wcf0NT3)F4Q&2>(NbjYf3Bh9h83dJ`PPN8a5wa<^9oc!g+KGx!QPDvz3H2EBqI&xn?+L!|BCJ|EhZUxYT@ zYpa8qzbMYi3yn(-GK>Tm?CGQt{b`u$R@}&vPh&CBP6tKl&$y`r7_)0DEF<@Mu=Yaa ztC+^~;ow#PcfNSE;vPNzA$J!Z_T6mf2fx~B7SVh~Frfbz>V@e+>9l;2QPt7lrgocBNVgElzR}82@#*6ZG=tI*>ATw@hS`?*9#l z(X(#&j4EjGU5sEp*cZfcb|P#ujuIri=Fpp>HQ^=Nq`dvo>2#h4>Gyt7I>CtaiqE7Q zIIhAlv8K;RHNh-Q&?H*(S{gI_`rWOxUBNB6{zE_x%`DWP5Q1^ti01Gis|7A9&+!vf z)DUd9PqBB+;|6gcD#-)lhwk@f-}`~;TK(b;e8!TawTRee zRCd`h0dcawgcAf9_}Y%^dp%W}=WCkO1K*FM015frpgZozICu)DX}U6vp};$&99{ei z4_rD5b^?Tj0C-8kKGf8}{VqbO2kgK9){j*dXZqEHr{1$Z4 z1&T}8V3qsq;_xv)`5p|!W6lP$_C-lveLLf1D&vA(+g9VYvpGvU6o2qjGYh*0FK3{ zbXl(#kk<48&p}xSEE>P)1HRQ@0D=1eM2-6| z_9}0h3Jz$uNql}Bpv%Gv<<4##xQ5FFUT8C}QkMY#rW)6kxcqcC;CG{L`N3Gmmmt^+iDiuIBVHgjCrl_wOmgV{Yr+D?Vg+i-=WA`Q4q8zt zRDWUvq0}w3M)Gm&*T06FDmh1IBR@{LI>znk;8!Ai{966RyJ4EZ$q+RxEO=hubps8S z#qsC4=&=Mz6HRUA>kAGD8dW4YOovw~!HfjbUo#~A(qr2{M-Wo|HkQfk^iI{zc1@TW@N_!KU*Tq+6@3)|3Uan;2@n6$p={_uqL>rAFF zU0rx(IEyO+xc!Y@zamvn_YK^vPxuvX7nnnrX4sN_sk_0a{2x%h^N)~9BiDoLW3Cqk zh@nI~#nWG+y(<-hyn-z9S|EzNj+A;ia|1fno^hy)+?K4-WO(xQ8^TuOtSVH?BTy|c zTDYIR5|M=Pc&O7FNEfb7L+`;)U!U|e*Ndd@J)!Fm(e@0u3TNZ73L3KD-DaFwX8RG| zZ)BdfKXe|8r=TKF{(ycOyolK*KOt{m_xu(_v%B9cH4F|~mxzW9e=59eb6ixgEs{a)kb0>C$} zWrIuS-E`qY^Z@%QK_GYX>p(Qy59Q7+q(0!@%Gx%*j3kwA>ou2V09n(^ZFP${XN*`o zsr%lYvy&_F+-Tn#b|)Bfyp%l!QErWo6Mybs>kF4Ou$CWwAphu6hodv#ZK z>~Lm>_wtUw73!RvVsVW#Wwj6jQFX&e)o7C(Sljl6CpB~+nmi21IUX#CBwTHi5S0OO zJ*2xJw@oDOIhDP7Qo}=(6@&Q4qq4$9bQeDY32P0t{gJYW0sW3qSh=)t@>SUZ^1@O%m>Ezk>T{D}$J!Tw;azGof$i6c3P z&#lW@A93L-Zn`TuzLtb&ZHM<-eLI2>q8;9X6p)&CiN99ABYnXDaQb!%rcmx!EQ(qjf%h^-delxB?^g5`>U zx%EBbt8s%Y_Hke9yA*!J6mqkea&UZc*4k^2$E=~NFe=>GmRjw?={h=T$35Gjk22IE z0EvSj2<4}aj~fS+(o&xK@cH+PpVzn??rD0h>3}NQ$cuLsSk3KA7lM|)JD#u39?-wys)YbEQ1B?YU|60QCs`)t91GO^J)Xt zjS`$&1Gq;Rp8Lt)Q@TEdyHyk#Yy^V@_6JnDnH(->lo|K&&+r&Gp}+M_?$B$8oBB!l ziP(J{>JM1#J^&^)O2$Q`_KB~EyC%L0AZq}maiVG#ymV=|Z;?8~o)8I8fC;$y>Wn6} zBAT~vtQ7P8EV`A`Xx*1;{Z_QzXqx9w__&vp{&x@rl*0ETfQB)NY^s*dw(*)qYiwh^ z+0LuAGhYR(x3jhD06h88(tVhS^vG~P!&RyoK#cx=A?GK!N?oBzom%lmCDDXq2=Lie z{$`tlrz5C8@fyh)8ykR^+FQmNQ+oW-`2e8MMXD%25X5!g&2X`9auveuo;II<0Z2il zJmr*G-cW%T<@!f1fT=BScH>2xk<_Y_K#KUPdkA;I@0Ar=j%M-8!Mf}3%&bs)hwv$p z+pp?6ge|OogudB_P;MVWmpp_JUlUm>uNdOH90(j_xHIo|v*vLk%U=A8EtU7}#J^XU z$_L_0)?0CpIZ*_@XC2ZFUiXJhPlG)RiE^$dsTNj? zPl3qW@P8kRb3b91irotwc@S&u{4f!g{$QVP2@|PkGyVwXJ76t*alkn7g~&WsIViCc z%r?m0kNs69nB>-XPou=;^b`AAwut3`*I0M!d;DF`=J7bP(b+BTUzSj30`LReNi)29 z*>mfm26KCt^?ZCeJ<$yzBO`WV!pAZC6hmly!9H$xV^)ld+2|f_oT4_mf@>L86bPfSW8+)jp-j0$%XV>G4jl&pP2m+RffCkC z-pQc}C}aH(-cLHWXJxTy@>w87pu6mvTz2pc)yUENDaX?g-fbMgL%b&XA{i(&G{LB4 z3>;!{5#CFTIL|Qcm%SYvWY{b6fxQVPoz;vi~( zu=)++xS;wG0@|#k7D;NBP2wr{`)eil$<;0Fxz;xg!E}?dd#Hq+%02NU$!Ex&-E0qE z|A06!;lf}DoERiW*Oy3+EMzT#dmQ9r##12b7ofiFwBr(=f zMyvOf|1Y>Fhi=TVgFj$3R%#Ka3X-r-O%ZlC*3X*a!B){cKxP(G?6e}%uS}MWr`eG#071J&``g>wV_>Q~# zWDRpuA^HLiP0m^JrH%CRM&{6!)wsXf=4`^1>bqBvu9MhY8=a6Lhtp#HS64$D)4;Z| zy~?2$&@=-lAX-X6;9?PHgRJUYo7-mzPf<>IB9pmR#0Q!vzx-^Qe?72pcpZMQ27PAi zz^ydUkSDO7p#RBw*t>`+)@nf01 zgbxzUb;v)a8}aELl9@z1wC|GJs!67xk%8PJICT59&u>7Ju1wWlm8zWRN?S($Sittr^UI^i{#kyZ*b#ntbR6-^qZlLqFYpTu1;PXkho^2chQsG0W;3RV zXCX$}Y3@H%Dt0SF>mr#-SI59Kc#z95XJDTmlyPY*jpM@HUOq~cm>GAt&W_Q*r4})G zH`9SBP|=aw?FLrm&17wp*vD7Ll9Ak8T7?FUadM5EA@ive8{Cwk%`-vbmbhPP`j8I@ zR0uXJ6kiqp#@YOE(=D)9X5=0|i_eRR1yALkq`JR|1;3SI!58Cz1P4fzoi>97-G`h1 zlRzg%clR|{MVGr=xbuKZoeK-Pz$s_QvBLvcH(>pU?mvmI!<`}UsG2h~??7f`J^U1& z1-lQQ2X7A=O!%4@J~5_QWd?72X(H^0}2SAD-Uoy4Q`Lsl;L@;!%)!VeYJ-uX18n$6Uv^6|TVd5K-@?Z=+$${Mi%I%k@Fd~d z_|AqE!o6fYUI)I1&wcPuZ;V9MP;FT0L7q}l0GbV^1+?COlh|*R$i9yG4B@|vEjNV! zF$jNr!y>|)vna_kggw5MLAyczl)w)FYTOKw>V^Ks*HV(nn$luz8Jm%VBvTPK-n^+E z450^v4nvK3?SQV<0%jZd9>qe3jf$$_cuSC;;@L3oX7^ZNeWk$teE8>B0RQwk*6>(@ zKNBYk`1MYxoxVJhL3BVba)=i0?|p_A_k#BN#LxD{j%KMZZs6yv?xec{?jY>@??u*u zrMxR=L{-z9K@k7FSlB#^AT0U${rOUQ7z7BAipXPG`Yl&{h6oR%L!U>4v!QlDa}9j= z45)dO|4bsdaMqsPQ3Pj)p09(=};+3(3=5e5d@$eguyu+u!Gbz2f6+!J0Qk?i| zN3&Qy;Lw_(G_ee~dMW7kjtL5LR|aW>cgjVbkUNZxh4~(aTM4$}Cods2=DHQq+}X!_n40(+l?H4k-9i(yp;@8>W)-Ufbfx=;=rs2KfeX=S4Q}wr##!)v28DAdNr^aw@HbKR8Y&ygLbqJ2E=Oh$ zdnp%po5W6Js52`mHhcxFjzlRpq+xvI(E_6fw#gi_P12SL&hs0#N#3X#ViiA*j_kOG zfTR{*D0J-rdC3qUt#8%poiaa9MD%GiRqHw5p`nJ&me8sooDBE{xwvMtYCL$tSU(Q$ zH*T9PI3Cb{hK;x6+U5F>_;Y1)ZAka6!E&;1zF&U;HDN0f<{P#heKiGL^jMPc@!bst z*K&@V?kmELg4s|H+>;#sB*#O)B+3#X4}Loh$VH7(wZ0Xv1b|talf+^FHQ9&h+T?=c zw0KG1vUAl2bq87gJF#jiw~-$emN|3Si(G#7A5?ucfC^s({#v?&;R(jl>fr+9P55d6 zg}~-6G2{g-;{HRbuS~t&1NRqkSHG_M8esZlDtnRxrkS9!Qw=T#GmT65$ZG>XRI@v1Mn+i$KfY!c)PKkKQuu{)zeJL97frbC zqfF!^V=x+a5)wYXp9EM62=jI{kX*|#|3V0upF6)wcL7%%^YoP+U(IN|gGo3-xEGCr z`v+(}w_qP__BvoP;d2vQMEK}(3Q(UGO7;_8VCG_B{|I|u-Ui2t+}Gu8gVo6=Xq_ES z==t~(Xt918MimyPpm=ea5L-`a$(4B^ji*-s!xj9Xenl;{SDE}TO4KiDMS*{#Ah;Tw zZxvsKLkgLEGYZ*lCMRu%*9#H75dZRP^^bON2p1|l zT|RM8xyvp@o}>EUL<#W(^wF)h`Ql6Hqzm1%yZhzM`5=1TqI!NMg*7#1l%phoG4)X` z#)p_~Y>}T9Kf3^9Ah?wc=Dr_DKF)!+8oiCu3;JvHvANoHo%P_wlg@q(WykVC z!Ex~=^p<}JlrW9^Y@F;Fs)YFp@l`I~>9zKj>-l&@y`Swk(IUAL*BVSAj~jIVR=#cK z^3sGH9VZbFZV~^2k>tR9Z*w`i3cB;}o|#992iyluQh_h42f1%hqr_%Q{X?v`|2=%N z7<}8<4zRIvPq*4jxS9w@-ow_XXupSlb_NvEEK$4(?mZEgR`p5lhuTaDpIjs?v*adA zmgX^KRGjLlNX`tu50c4cnu1AFUZgc4H!y0<$U5uGI7C_Ac zkko9lyzLDZ!L(_*cqb0)MJAP|&c|&U3;o?;DWV0o57iZZbw$Of+xYqU6-g-)B5Ev9yD_VRorc7A5XZ1uA$BOk z9iGp^HS*l%`4})Z_lwQgWy_7R7ujk%R*NW~IEXL8t+u;glC@L7I9S4(TVBIvSLR}o zS1mWQa{54DGcMQIqLy25Edp52&gfDZT&6Nk)^M#hfU>gN=qhG;n~r3sxQwg^hjJ%w zDZI>I8=Qw5q@RG6R(9Iikm)Wz8p%^|E<`YquOutk7@wGp$&Z1z&f`UTh9ye zU4vBZ$ZIc;CR^S{0V-FIQYom?yIFKU&yrsZ`wuQgwh$i?aMHwuBy<6rgSGMNDX=g= ztMm9)F(FBp7Nk^@;XaCJ{ry{L$33XcH|g&p80~tJ^fjlyT-FOel0L+uFb-7N6Bsr~ zqzy6n5-6uK!c!W}kpIX5{YH334m&B8L^awTQAAKr?5 zjTK19L#Z69mv)ZJCu2`h3hFoWN^RPFe1mVId^e3%^m85U2R7n+z*CS7;{?|r9f&x# z(q|)cPyn7RpJ1mRz`{pJ*{L)SKn)%qB`;>;q7;`SK*)O_Auts(wWL3IA*N}4 z?4|lC4R-Y>yXyjC+reZtRs1!I!%s3s&3QvuH+knpOgV{45St2xF6%FX<0@m zUhug%XaOui$>0E+R{S4W=)dMlbk7R&EFhC#T6q4Zcl=|2K z&LVGi4WTz+F=C(k3q+xHCoxQ%iWVF*=rGVV!cQcBNryQ3DR*pO(?%5EbH|h4JOYPE zEBMAX9p5pR+inNes&XCABTNw1KZocKL!$UT>f)bb^`nRCl=&=c3g z${S$VjBKL+9xtrttljd&K2lE8&iM6xNG{uoP49iQd)|X|yeZvgq+@Tr==%Ncy-kl(fVSwn zm&&X6BMHUQZ&Ku_TbwAf6YB!ro-LEvgN!h12 z7t2w8G<2b>a0dxNNT!K=%EF%Of48-VN8uywt)~SfHfQgk$H3U_B>CKfa^)c8kX667 zkxN@ATu&HwOyP4B)UPJbQUo9*YV;rC1uRztYJgjc5Qmwe-1Y)$q1&W)(G$cbV}(zm zz#vY9g-A0yJbb<$HoqlhO7Q(a`3YNi5d6RFG+6@Tr_tl#i2z^bLlfX13GPaBT z+;@7OzK;7BV$Kp;K*I{3HP38%0+2adcaasruV2F|thMP!VB8$Po-+}5S?ZVJm#~Qu zhP-yQd?ns+r=waPGUUMQ<+M<3i-XO8AG##VrXQO?Mc>0OUY+`1i~y}KIxq zRvJ!J62pf3AJR$ViSY15Q_9dc$mO>#-Z&ooU(GRS^Wa4_>4V0r(?ia?CjCw0HIGiE znDlBv1C8q=gsD7Tl`&tzwSvT82v`z6D^V*sV;!j4(TgCw=H)FNJRr)^P6QgwwfeU> zU}kNl318@p&<%VS;#M7eEsl^jFb9kWNnxcX5b!WZLYPd znp~^`y2d}mOr*RBR_KF#tkXo=_yQh%)DDJh!SPg}QLNRUo`(*;LgK?`spvl>_VvGu zb}IUhh&`yfUr$vIL;Mw9PLR=jAkZwegJ^u z{>SC|5$o`5@jdYW4_9~}w^zUw)9cqorUkSoHlsq8O#X|0 zA2Jy3WZD|r3}`TS{ko?2>XJ|NAxFYT`>;Y{Bax8)^hRVyro=`{roR-S7St2JRR1Lk3OuX&nmzt_tR)8F#V^ORN}TaUKjjqpCvei&?NNIIxmpC!&apy-k_G@Sr>2EdbeOjiY=9L z70hR4Crq|<{g@A@y}+{}7yt!ai{TZI$>8_}iEN@mDmtLnTeP)K19{2S#mUtkz&{rp z2C+m&7XQhE3Vei57aVoaffoi16|K|JYTyVx<86RGB-L!df1@cyZNEAWM*^x+^w2Lm z#yf#Z&JXI7&MdybKqNt%!c+ReD3%j&@ks@IxaZPPEu#|nt? z;BRa=RtNMy@Hq&|)i0=v(`S}`|0)4M^gE=qU^ZmKi2wAJbli&+7seM?`Q3rpXW!zT zsb4z@yz4D%@NX5Ye%z<(NqJr3Hr0UstGB2g7)haae1j85A)wEU_ERj9CQzzB+ifoCJe%GzS%}0zUJV6Pc@)k)T+@1w|b$%)_M6uirD9)5&VQBF;l0*j%4* z-2`(bbS=skVzn!a#t#2}NfF*MnMB_&!LmjwNm5N5Lwt&QG9G-C6k+}pg|3^1L+ zVKBHu=cfRJ>%&PbYJ#m$Y%?;#!0p2$W#C4}k%3DXNb_~;(I2BCWd48Hd;9n(%RApc zlY5YeqxWb>jcvB3b-Einw2g+=Xwo_fAw)$83Ir=kP?iNt32LJDl&5rHO?q>S`#N^F z-JiQhcl&#tJ-^d)boW^LxHba{h>8hR2%;G9X)w`5wDKU3-}`f2_e>^$*4?we*X#W8 zvn6xg*YowgzR%Z_u9ouI98G~A6TIOLeaVv-A*lcHUL)f`i5XAvf~+!=`R|Z0a+wL{ zcKNYw=cTIIK^`$rJGVcjx;LT(t(ig@9zswImBGAIFo6 z?Q|IyC+VH7Uid5w9>M3|@|BOcntXLgIT$rHnJEE z^K8r{$w?N2fltIAA}2E=pGKd8Hi54p`y~|T>jV4sFh2mGL`W+F+H7fn5Yj6J$aJa= zP`Z=eqie!Sjg9W@!VV6)2WQZ;Ay=U;>7Aj=LCcybsz#$<6X9PG|H6&anYdDvkC0wi ztikNqSyP%}_ofijJ`I&cclRUS(Rgvh8I2}2nW;l)2>YOo z|BHdM23CC|MHYT;54jc|+M~>RrN;PciuGke%?dR)X4cSI!{6OCIFh8tFZ8y^E-k?p zXQw>vE$tahy%j>v7O^0==BvszCq5sJ!qa?VZNPO@3Y4^m3>FhQW3&2itOEKHC0#qf zWAG%M;tDel93^vC&!;Y^ad!Cbale#Sb>KQ1!3)c0U|gTqU&-GIl%COESu>@vp{H@OWV#tW&crEva=BPz1ADKEtbWOt2pd&cadK+_Q2n2lpNRfQ4yw_KeQwA ze#MY?3#mxF4ELF;{1?N=PmS zbEd;c<^)1AYDA{ijwDTaPRw5Uub!Gtnm!wqg+e-vs+T!Jzqx=B3Hy1N;wmdHC7x`k zGt_xiY8Zb(O0WTu?0wem`o^&wIX)x3zv!$U0%Nj)unDA&et7Q!|E@DrZ=P`W((iE9 zEBDT7ubkCbS=u_;{7z}Ty6VJTmj##*lk3E9DC)dk1;}zFoP=YypnF* zeLoV*3?=t)lp-`GIn~vUPh$hIW7vS3m0ZA*|MAFOcQ8va?~3+s-Ed8PecPP&6-7;x zY8zY4qqnvecl}gGR)2;$v_pWGHqFzU^2TGSdrSpF z`kOa)o|PIKNfl~a?TA9Hz7+jB#*Tj(r4@MMLRE#WC07-;mHe^u5(jeA7lq)Az}wQ)(rIC4%OLNlyZtvW3?hz zrux}TG#dQR+4}$(bTr@{pGh4py1U3u-A%j?y;x7dEH7xkno-SW_a~s^5FL=8oQ3@4 zEaWF=AwRC|&r?Uwt|Gg9Cj3Y;Cx(Bw!q5S4F(9o*B-&BnMUP&3QZ{?%x1 zE!D21UR~(${N~ZnUD11yv3HG|8(9@aT!e>YrkzDgchO$U^PqekS4=EbQ-rb^F^a+t8?7*KDMoKuA!D})mfn) zkx>5*7gzGepLjd_fcX)FHo9d8t>fRZ%gA%Hh2``{g$#OW=q~%mT*EHKDfjP=aOQ7} z-@~Pcn)1-$ozZgkBZT+FlpJ(eoZF)gwQZ_v`Fz3^{?2eA5_nElLHam-QhKD?e@^Imiaz61ez3bXno z>Y&t0_IYJ>%0P?!DY4#aYjd#@W4{8OGSDz(J9Vy(|C3ESY`=bKzY4%s(xiP-i|jzY zerCU99P%YK7?d}fX@)SynzA?1CH?aMg3Nwc?8hmn-(VEMc(a5M`~vW3-g(S34C!dQ z4ZeWZgHmfE`j?3t5{qnP|L@5BYr4uc)k*nGl9c!kEPz!Fv`Z-)CFTl{audw^LxtL) zAr;a5RAw$PwZjYAzKn4w9ifP~)p@^D9qBwH@a+gez<@=^g#qjdLY~NXOVq3&%B)|X ze7;m2L=UtskcCeHE8cF%Tu2eR30o0kGUkL~PK}m3eXvjj8PgQ;a_b1tXf#~0-QL<0 zV>N|~;g(3z9CzjPBJD9Y8%;aw8-T^tl22!OH^sa~#oqJ?Z)+_(BenlT>a7!Nw%_-; zHN*E^C_g`Y>|8(mnW{5Z7Wv_?Rn_B(4Fq)OtSKaP*0ZzuYn>}*bk@)AyfxCfM30P~ zo%&u$!HTiQJ1bScbJiRv=mM_>5U%J-eJ@_H;@6$^%{(vES4QvLyvc8#T1o0D&ikrVYX6IyceI)?m1Vo*2 z^s;rguCu<90T{p`dnIp+{79UoS3R`A|9DJmGpMX$!{wP0!S&3 zOA=8W(bpO^@<6g+F1thVBV?yU0vmwxzt z(}m`ApzQTh?KipJtOGaZ);G8{_!sR*bWE@{v8bngm85^e367!fETI5*g;@2*>7x6d$t2EMDd4uhs&w;+X@N=5F$eX$%YTXFUeBlmM?>x(^R zSBZmK$d-h%>)ZC5*ZEc*9o9V%cE(gkWR`&LKJYWTZWXS)^|~oPFK9nP!myia=ZCpq z+3enNo9lkg7Yh_E-jVcRu~q%f{v|QP726LT@(%Z(v1mAiP3EOJ9qO*{7C6?Yd4{Zg z1BZ?Z+V@k<@E8S2XB~xX(e`~R&w)a+aW%L})xpx?v$zZb`=N8j&kHy}>aJZNc(9jZ z<8y&?c*VDcWg3im0HY+adsf!|m~d9`pkX;YXUryEl>9Rcjk7tzsm2a{=ylW8o$9K) zK7{u==u>e=sAgK5o`pB-0$GmpXu(i8S~Vuj-`1Ir>Syy9Z3S!o7aq$P(?O{8e<`Hb zhaP`iA-(_C{LczKNGM7^=;wUs4mm4Q8k1>&shO(&QI%&Y$+l=_R-0Hfwi3-wvG^y8 z$g}JoG`ra(GOg_$(^ZoV6!?m=n#br+pW%Dj8&SqeEAgF|(#S%e*%UF@;y$39e!bF4G|a?*$Caq7|28mY&IhM1FMG zaL=>+eqpeP3B7~5QN2$|^s*uP7}J|o zTsTzH_LI2_+}7W7rIfpC>m}PPThL`Uc`CAn^3o>?0ywh2u;LlR{BCsrVU~~N>68#F z>AW?pw-aW`#V$uhES>r6t#~z9cZ_1KhuY32GMX1t$mO?2HWw5We-q3pZkt*0j2r4s z_3T5Q*|GKsTAccZ4H7f;O&cU;>RUGW=5=ikXZxZdYyacf z8m6ITcm2dyv4j2Z_en&_(U#caPcD>cmiP!1j6LYCzY#yI)8lRYS4k%I6*!Yi`d8M5E z(DH9giKY9R{QEAhc*maz`^@sMsl)!tq`SW95&xb-XEz-`;k@J=Afn58yP@q>=M{gc zMc|LdupjV;I}A2#w+-gEH?_@NrI1Ce0KZK8vwoxbulTUZZ@ifIKG$E{=iiW2Ti13u z?@eoa*V*ge8%=+t^GScC{t-sUyT5kGvFlTK~oqLyi|*{HMq@N{RB z4a=MGy0bxrvL)n0iFA(boLtJ%Z|CIZUBT~3cl~w4&IWh=_pf%>-#s^1 zeo>dugC!cSrVdYb(zFspO)T{%6IXAPzieF658q4QOmA!)+b$+H3;1?EpA;>i8_`PR zTzCEKVMo5VK8{hCz&`W$V)J*u`TLsFsf{*v zVn^*4xuDPwUoUKMo_02B#%eF=sMVc2uQ}jK6-rctC{f6>ltSo ztZX?v?3Oq3#`jj<`113H1kBf5WW?ls z8k4)eWj|uY!Clrg%#9rDr(Nu>U-_DLouYA+bkx^$NOVS%4!3l4)Yo>@>mo@$b=N`t z#E$wx&h?p#5b7NdqDo$U5=1b7s0*k76QlK)Xl^v&cb`1rjFQ>DiP;Y3mGONcH|9yf ztbzhx^usN4Z#5Ldh%Y&1#G~f3jk#RTJYLV3XELX^FrSkUM&Er?<41V2cP>C!m;s|= z4r@csCWVq6lR|=yE_#?$(=n+Kx-@{8RNFC$DLQqkv-7N34)B;cWfXan%s3fA9{w`U zQ|5LenETerm>Wzki=xuMm@Me8i3z*+YUXq%s%e5bx+ZmpBi92wq&5~AF|gA7oooJHZT|L|zo!)#NR-!2>Ko?oo96FZMv#0I9?@Tx6>GOj`` zsW!XQBY(x#&Qf>X-(iGO!3i=)6TD&-xvc70cisKOQqA+ymG#XfdHQ}q)##hU+A1|h zPK%LJ)0K+`v!!bEt&Y&CY@FGM{=BK_GJ247*L8u2-qwWfd{OHrPA&=W`NUT5{KsYb zJUKy&eU;9^#0!4p8u!WAW#4(}bADudYQtE6!u3}xvoRjhC&s2WUY-7EtY5ud14<8% zHP+EMKlW8rew&F_#*tXkQRM6x6;s*K5K4@Wit(CEV&|w_#T^Y!V%JDiM?<)Orgygb znRwef{|VFI>PyvMX+VkR>9KRfpBCm;WDUfhru&iICnM)Nrq6Um1HY8UZKVnPO0rN2 zEmGhMnm}b`@&|p$<_Bw_l#J4DWj|?wxRT1uoe=rxqzih=v{IMaa01jCZ|p}-wHn+5 zPb%^2!w_bNgr=UnE4@H>T!hC#ja`=K*$9)o9p*oB0 zrU##lFNt^6Car@a0mkrQ+Ay;YzUc8=w#>Qf{#1tMVg(IS_hSdl=NjCxCR-4b>~NeH@*~PRCWaED zVkUGl5`iKFzToMy8Xj-^2ZM4olheN^LxVg1^{HYZ;BYpEvSijd)25JNb^w8Po1 z(^EtM`noX40M*#4gXFIsLaQJ z@&7RxP;x2;Of|EgI5=wl*;aKb2AJ886q)JfJ>aB4fY8Sx0F%j5&bqU5+@v&LBz*!u z35%Z;=lDq>{G>`~foJ3ds3CrGJddB03Z*EKgr6iqn5f|=6HekM$y51BiMvkQ#3+7@ zNiQ9l^vRm!JbrS8{kH7D@Ds5D$~hoaj-Q;XT$Z0CNAZ)x!UoGv#Aw7%CWxQ(DL#*% ztXv7vL`U#wWs98?Lys}e`dezO=Akl&x$t?<0@5_oLBV*>i5$Ox^iPcD7qExn(d;4G zF`5^I`U6a81%iKs7o5ZgXdU_u7tzKDFK|v_1?3VpBdj2-d4v_*4Ns^F=2fH*@UGL_ z@1@MS)YnQ&yTnW|te`AVAo5rNGbzxy`lDPM*by5QlLamu{i0qqE2AD_| z_?F^NUw9(%o*drNVeHJtt_0lQvWz^sGEk3m%CR<;CylKv7@LNmbGsZ8Bq&k{2AmpMEt3APsVN4j8E-IL@mVfO(3#m19z5_e zzcVW-FF|0j!~vS83vEzURI_&$O_Z7Gi+bk^I!2#A+lC_N*r_aD*%atLSvyBl8BI|1 zR4Yeo(FzVx)Ck1={K zhCA8DWAw!*k6u%*(Z^0R`tiZ&i|y!TESx?nEj+rY`}>@2C9!bP7KIjNlx`E5rYO@N@xz}@AJ=6JB|b_m zG@3q&k{@!qMby6@7E1)e_Nv{pxX5|Km94PxDVx;U4sIX_e-+6=akRXeP>5f$$4Bn> zjeA^aDxF&Q`{EEsfqr_VK;h^DXH#jM>wIa&-Ub})!0$)%x*JQ4z#D2D%E)dB`XqN_ zDUE!nv&%HHsiVdrHRfzoekUlX-j#l0W7LAne$;TjFuH)QD?VvBUl=`{FODv7y5W5B zH?=aLlZTW1#Kz2UQ26p@r)G44(+sC(^l)lN7dYK;YEK@{#6L2e1b(TG z8kR4rMrO46kCf@CY4*d3k^J-iX#RPCEI>1%%x$9!XdtCrkzmm5>BOrYHMf!Jc3g~3 z@7zNhb>m&zxLa@OxJiEZ2q(+d?77u#=)R?6x{a{ZXV>4Ln4%k@zw*?ka8vq(^Sdxu z$by3S5ial(&d%JW-g|PFdT;c)JEo%|O&|XFWTer#ADenEWkVmEIz5z1mriS2mA}@m zKAX*WW(i>dPpPz?r7a@&u|-yqF2gRHGlCfML zo;J+t8N;kjM7c~pF$A|-w83(-nd69Yw)o+T61yq+SqOuh^1j8H00^FH&oj#8@0J(h zr7HV3R2vyptxmIy&sJMbwK1xlK#%q2W96r-9SL4(E44#b1glf&r` z&7JY+k`3EDWg6~iI^oC4J~5MPNR!p4reP~5xMJT{!!_<(k=0@m+VmeX6ln>Pd-#J( z@%QLb{9Yqb=Z0`;rZ$%f6zt^SUFwUVT}X0{d|m8K{q=TjSZoZ8RN;R__#feVhPgN~ zKzy^+sWqz2@;Z*4X|T}-g-7yp++J5>K`VEJ{J%7W;7{g&l8H)X&oHM3bdafx+D>aSLdEw*Q(KV1>GX@R`rQr^@JboFPf0=D-l0V4U_}IO5u#zXHo6FIAXLE zOK)dB$`d`9GM57X2wzF>6;!S>z2oc(3tvO&x`ZCvD}mCBA9UBFxn1n8zls%agwL7e z*Dmn}d586gA7g7I4!hn|Y>au44slbM{V85|qKB#Fc@5r_L^r46YMDNKqd!G1vi1Pp zWV1mY^VoYay{|9<-OK-hAwi~4)wZ1T_F1XE`VO48^0-~3@5Mlb5?bPDAWo(2DuF2t z6Ot;gCQa#Y+1#dE*|;w&?pfo_m!UqxUAF~rF~FGh5*p7fvHzl2>$&B+`@|vR_zd3z zL;I9ITQF_JXUjfOKl0hEKSW+!RN$<$rrI&yLL#FhkumG~A#yw$3tQ^zU3W- zc_u&ECUk`Q8?DvP35QJYaQsM75FJRdlT7W)|rG?eu)pbp{+BiyPO#0 z=QZX6oI11qMB}ra9meGLj)Gvbxw-X7LU{0e0y+r#p(_(hZT{Byoa?Bn(Ov&pCjK%O z^x$?RC*AcE%H8#@!C11qD`n z)2t2f@fu-fEjZdZSyRuXiSv}OOMTr@tu(NZEMG{u@rBF@kj!28KXZs$7a(eCpc;6C zn-bhJ0#+({-{|cEB`R6)+X=po*RqADhXaZcxWW}b{EfsG0(E})9$G3(WcX;X{BdzS zKC&Kv3vBgL5KlM;ii<2^tdfW7HUs?}(Q_2->?H)JRRoTh#BPH#bI4gu3@8@kW!K21 zWNpr|)fd1EKVtUUbLDfuRLJ4#hZnEoO`A`ZymeqdMqx^0lKAHiZM)<_+KgB zGTEmSyo{V^1r)fkwK#Uqr)9L|`HVI$M*HP_Mq4(*Q_(j91co1Hxo>Gg*R3*WgV}RB z#*Xk>h%Z3*)9~7v7O@vIYgq?*nYS2O`Siyum`Rh#L-4l&8$`^aS#Hg&tYa(?nr+aB zs^a3eW#*_y%`nJT3)3AhrrU@zCT3SAOmx@%y>MNM`!0i}rFmEyxxzaHQ0o$lxmAE^ zGV30T#c9rDV;ea64G_{@|1}AD(#2S2vzjApE1~kn#ETXg&lI|WdRnE^juD|QFYjuG zb4d6Li$b%#U3s!SyLtv%{EgDHD{*|^uWwZ)gfoa{p6;@UHk-J7=}!J8Q(o*ZKrP}X z+B&uK#MEFo>PVdi`L+tlwhH;PXs0tBxm8)aA}91~{Pb(Gi9sMWAs_Mb(5xZHC&9)n znl+kReP;w1m4|<3G-0MbA8F?p23u~TEWywoY%nX~^B3q$*FQ$SM~axu#>CtCb!XeA zD{56fTac}6GN>0f$W{-s&Cw%9oGRk)958N%)PI9K2IKxU$3d$N2TcuVfkZOC!RVuP zfiu$ShieuK9|N8WHkpfRyysC(zwG@1ZV9_Rk6UsRLy4m_fIWT#?P)jC?8LKRn=b#J z0QLbn5cL~ER62eUF`x+S6cH{4t=liGCNhOu;F4kETC}6Vv}1k+r~PcU`Aq$Q1~4Zs%C}y-zL9DVWS# zP|8YEqNn6AHD(a5&LUivOGZzT=(9&8I;=X!_&#Qrz-Wdii4LrcM5nndN=l;JX=1V` zfrKRz>#=%az~owCfYmig5MnUPvxAKUa6<=XND)|{Hwdc5glZVI*m)pqqaV3~^0WQO zH!wwCNQh~HzC@J(?aM4uU2aXDuMw+_Ftb50wJ`c_yJh8{|hIN69 zSq=#9EVKwvLf6shvZ^2xI*o*2<&iHVAH}4EIR-<%W(x{)u2eU(@fX^7-8r6Jk)}L{ z&;o{LOPkfmk@~p5)?L>jgc)Ia%`5*?fG*+|Q%?iRt;Y;JGOOdt{r|c>*_+nVrl+i3J+e|*oViqR@m*N_jS7R+m5Ss+wnvHK3 zd@vYbWmvH=0b0wgSXOR)?$IKS(Ao2O?&_BTRp!fs!RflqW0vBq>DsNMcyik`o6s^s z51NqNo{zt%)K;bLRA?2U^6d)EAvCl{q1lA`(hAKWl-#FKBcY|66q-Wlk-Z8v5GsF4 zp*ljV-c%?_sB5c2iqG4W zy~2t~5%2nKi8u_OzE)-yRB`8Ii*kl#FSCw5wX|7sb6220w;Xc}JBxRz>J&P-?g0RH>;xzvktf63kZI!YRTuZ>sQ?Z$vh5G3M_&{3o0F{0>ME*V4yk_)UgC1Q_}V)3e2t`mSn%tC;R33DfglAPi8btz{Qq)YRWin2UIo(sF`t`rQkV zmAj>%@FwC86J8y_v=<=sBFTsrI810S(5IH1<@HdpS>9yZ|6mzM!I-7*!J1}Vaz)J`sMFJR~eJoXS8b$>)y;G@7G ztln+fLx9V*=mbeCABsO>uuyph0rkqY@yD}hNuHKI{?#e>AhXw!&7IMNf4%!XJqw(n zRLj|YCOkkb`nPhv;H*#!Q}(LvP-emhhWJN6_8d3ubeVScK$Uutc)qISHsxmKyydk8 z?i=S1nJVYg?n1EWjX$y9E#K7XI{JfkNHweD-M0U4FK~~4rOOmib&%JCCgJ#)AW|4e z<9EIR@f}~AO$B@J>?7v(49RpMmy)5AgF#y+2ee6pEdcGf3hkp1IKPzOTLkZXO_c}- z@m~X!&3wUI2F+POVnLFD-v+R5evbZ`Yzsdi>8EiE31Rb{`y4=!9n`{~2BW*PkLWvJ z*Pl1}b2~Y2r^bu`{B;YD46qx>PM&aU&|v)lWZIHtH3LkN}@YJ@0I$q$nLS(Cm;>GWg1nFdIq*$}hgb%sb=fcHXB zJm}-X`RH#mi|93@Tf|7jbLIiLMIdZ`o%FfdHtMh+#&K&#z80$`71jDvI;LjT0zcezg&&iNk#0RFW%2c2cn^Y%7Y@pm~*174x{{Ov23f z60Gl4LG9rSsGg>mL<)%koJ&|$k!vGnGt6UNh@x?jY0-W^LO+bCYGz87L`bl*>Oyn* zhAoqoAy%v+F+>XB-W@_%@KBQEHt~39e=%);_dR}T`n!iA9wQxAJ`rC9jNsr-H~jHZ zbadcVLW|{9tFZtCH*IKev9#_@~<{OjG6VlgPp$Gd#Mv-&f%H?|qe_l!BRMWZB4`FxC{w@CRav**ny!j4d2eC3eXd$iJC-i}~n8=ta5R#wpQ-z0M%hAxgO)n@ zpnJU!2clI|#C^ZWHR2REn&$q<3V= zj`J8b^ik8{vkMFi_N)zt+Cn!nN62V8KFG8WyhtV8#5_gA%;3V;2pbVkLq>i|bPh;5 z20(0PYztLFIqAYeX1N&<%mdJiNHao%_(eS<@+x1RW#x?@`++?Vd5UZ)H{<3C5xagw zdY-(40)lje8Mcr&OnRRDpabX_)A-@eJc~PcODR>yeC2aNZroeeW|@P`tzJws5DaUpRGiU> zYf>5f$#$B_)M(jfU{sCdB9w2SffOT+N%|{s#CZCY1{!m(vbl2q=No9Fjk1#svz+-h z1apMj%0QD{hB4S>nU0t}{8UDo4799qCax*tOh(%OZ=j7f&}5v+Nc;C1Xfn*2`+zS} zNQT;I0}UYybyy=U5Uh*HY^^jn->cd6;gjr{KVqMms{E#7BloYJB(HL|(%2Ds`2W3q zW^FLD|6=rb%rlHcjdc#|5vK69n2>krzUXM)`19oHDdI8kU#14`Ll~ldbJvp`l@f}^ zQ+cU%K1M>$hp^U+QcjVDG2@$SK7a_+ocsZiDCv;TpS?T@;4KfVHgRcdI^9q9KjR-) zM_D(iieH$^Xtd)+Zxb1-J+14HR$m_B{PPfJlAl6`+mJFcr;LJ(c67%d_(qwMPf`xK z#Zd5KNM6$DyYIsfH$nE+#NJEDD5|~GEti`yVBi2NQ9;N_E&Y7$RSKnhQTTd)pPEz@ zCVqply!ZB|HuFXP($3`(w`n-vi8(Unz>oxe17D{C7a-j&l1p$J7iSnnqGf-{ z7z#4sza){tp09137YXv6q?ag=YGJl=QDwM8_aqYRTFPKx=TZ z>CO>CIKN3#M~$496@redu>v94B`4b?W;|JgBrC*>VM4bC0Ou7~Q!|}0h6oK< zMZ!4StPP@R491uN^n(n&DBF)?Jy=4i&9LLX?o^te!{^Ho@hG#0?q$uI4d}{%OFp)Y zWT*9-GA?FH<6_)0Nd_6SapwtrWS@*SOMnuS%>=2t3xS=?mr;fZLt8|eU^0)~i>Pmu zH;Z0aE*@*wet%N)_@B2c=x)9dl5@HR{;w}P)PMIYpX9&Ns=Qt7IZ#Mn0zYYX(FdkU z&vJ`C8Ous@i#|oz8#pks>paVg5=@C;;Da!GJWJV?MM+0=B~fb zklUUwS)ah2zYiI1`!dLMDhX0S%b!>iT^dB|8&qg?>I}m$G$K0TpYUeng7;F{m+9exY&cHkF6f&z}Ey z{b07$59p6UcK6AyS^k|T*ccFZP?4JeeV6g5<}pD3KA43(E!?^iGyYsZl9pu(7fEzG zTHDkvJr+EZ&NBqqcWzy^avEw&TpWM2gd=V~1Sx7osqykz<95kc{RyjRR?CA+T>izz zf~Nq?tbmF>kbcAfMsyZxgE=)bi%TMt83g!ivc#{%zeyX#BnISU6pipzu<`#f1qJ?ZTwXwS$Z4ouL{z^r)>E=dZblD9@B8!$bGF{ zf97@-`KK;3Tf0tL5V8KL6t@P=L__?Lx7CZhZS31hY=Pjo+4KS^ji2!s@aIbHT(Sd` zbGP>m;?Cq3&Y{I0FF-9IUlqBlo}}Wu8&Z~m!#MsKG-vN=9A)N_yvoAJW$6H zGF#^@07ea5Pz>xprXY5evumm+>OIB|Al14-Gd7Mt<=%!wn%|<)vm`<_GX-xSR6$@x zou!1j$@vDqKv1@bC1pc#IZ6hfp=1kr$e8)ecZ-{qZc1lqRsq-e;D!cB-D8H#G~j zVERPUCVv!7n~Kh^2bf)aGb5JYa(wGY(0+k;0=By;aS&A_0@a@DM|hB~PbH?0ya_IBqk04C%0W#-uK*wJ*dK1E!sf=1gg%Y%%me~ULMmW|Y) zTF$ptvd9bfHTM|s`&6!@dw07{^i6tVG4n~CBZe|2yV{_VJ)#-YO?B_2T+}zjNXF8* z5HHw)qhgwuL3lt5L$H#~tb=7GApphPSW3RH*gnE-n<+5>Z)7Mde->ZG^plLO`#L|t zex3|W#5jw|r(Y8WvtDI#_P|WEt7i`cE2r_m5aqyFT2B%J`pt%fhwL_q~!*y_8G z=a+08eP|@77|J(;O*)hUiK4`0x9z+|4r(`>Y>pdC==grNLVzhUymdu?VTe>h;p2pH8M(rP6e8C5?6MeLR;k}nn+Ng6ws zAhfvq6qon0+Y!2 zUquyWpR*XK08& z)s6g#nMb4=46I7E49;C+7wu#O|XX$ARG=P4FyyUe0a-3IIU~ZOryCRCvOd~84 z?;$zsh$!#?K&q`DR}frE>8Qk$2(v%#(ydVk#1YlXeG^xpXzgY0*rbDJXDY>nh{V7nUy@xjoI+4+CiRy>{c(f z?pg@l4us^%u|}b(6|H3owfr>5!LHmcfN9L|on<7}$?0B15$*FeF%6cnWi(foMWXfX z)O~VEpz$YGle_yR%9zMXev3$~)^1!y78yNeXEEP<^nDTk!i?zdUVWJjn`V__CoIaw z@zmVM_-F8c%2?1_sNw_#e(W25RJhn&M9ahQG#1Ac_f#*{F8gi2#HWj1q&d63xh zERiKw@nLw`6{2Zks9w2XEK$C`M!Ok)P4{3@wnyq7yukL=a51WT%J3MO6ygn(Z!{EA zYP*6y2qe{^y~fH9aD@?DiKO9b+e#N1Bo67MQEM~`no^aD7YmU=BbBR{{){jjF;YaX zWjo#Eq9Zbj(Bo;CM#^n1*~J$v6ltZ_@KU-Z{%U+IgAi}9eGocL=GdH?%r%FyVL9k- zYA^$mmU1eCquaehRJ_e-1Fd{!mp1@Fsp*&g($7JSn2`-??NUYsbVirO7*ItBNfn_` zBi{_%kP!fpCbGvMyY!KkKj}8+g9!&liS!cVy`g~t25lDj;3o1;H23k1*|Ct0+3gtG zP=EVA>+E7mnyodr@FfXofY_J-R64?7Tmi@4BA^m|)HApXJ>^Tmp2PWOaI|;*b9RWcKUaQ~fX0tto;EvEGw5GE1W?Ur=U<)Z{_g+?(hc9vW= ziUfnBVs3~-SvmsNeXc?}0#-VpgIYQQR&bHxbOfyHh~jhv?D6vzrz2pE?<-D6zzROE zI2{4&D^N&Bz?vfp=?GZ#425(Atov+*bOfy6%uwznFlj^2J*NZC!+AT};Wy#D&*%6q z^6XO)CcpVkj%2al$8tsVJ)E!mvap~AqOONp~ zcGNpsabLIsL;sS-@Fn<6dJgmqw(m22-PZn=`912TD>h&9LeS1!Cq42sMh-r@9HQZv zcfc#~-a}2~DYzoNI>6&tu}W=K)RiKl}v-a{l`EU_^!HJV=lpG;l>XNUqp zW@iXT=2RMCsVe62sL?HY{E7brf4vD4^|pGmk9iweN{P~D`arQc%op=E^W|*eNykt@ z!Chkx^^n2?l-@=?zqnsxupQ`DM%x*uyZva8dwcrrVr?W<_9DPz@>&=%I7-+UXQ=%| zP-18L-C_aEU4PhJzcF!`FbAT$oWt$IL5^KKAF0Q&x9ZO}{doZ?m=4CH`)BpKj929C zu9y>#fuAw3r>DRDHO((;coAneV|`!aps7t9|1M6Xf6|oL;2rK6c210H$3qH{_1&oV zyzMm)bGGl(sAWO?gfhK7A31y5KMMM`Bi*m@mUz$Sa3Ou5Xmp88&vED7_Txc`7eN!c z%rWF4J5)LJRCCW^XVW)>Ox>E1w~EgCNPmv&&t}b_ZmzZWw?@r1>YB%;VGw2efcu;)+}iocJ#^B)v#m#wcxIl6La+$i$C$I4X*ELY%HfGy45Q^3RzAy z(TWc%w(~S?*@J6XacbjYwR=M>aeA9-FX0@+j(5Fqig%tpapNbHr=&mO?8~pnIA@?uNyw(QSM*?KO2R9T7?n^=fM0 z*u?JsvjS|@ej=P`g{e*SrLtg5UqKk1dZprOqp1xjej|}d?sO~#4PWRN4Hw^Bb?ELG zJYd+16!JW#`%Haj!?CJEcMWl=VY;tS?}``kFP6EXebjT#@FP8(QD(Uf97Jz|m}h0p zo5STh-b!rVv46*F-qxyaIIo^>D0ioc=WP_HV%*cjcq*Z~2+v~cUa#<)0yG=2kc+I{ z2g<-mG9y<042_|v<3}#P*=>J@9;J{uh38u@%O+^0bC4CWbr)i znQF3nPxCq6FG-~~9%KK8AHIqgUfnhCw2d{YQ~w2?(|;bHVK3A_Zu)S=Ff^Nbs>u6( zm^+faL*5o1A?9V`_BZ)kfFR#R403UJSX_U&p#3eSCVJZ64UrCL#`B&rp^AgN+FqbX zRw@&R+c%r6=nlgL6^A%JCJsDF{p!2|)PqKX>gIGFk3>(tXdyKXw?Y!9%WX5p(D*wdn*$dLT<+-c=qvPIFULW zcGvzCu=zK}{O=X|w;uP>bdQ(W9;-cuy|E>ox%hqe&1Vj}vm;LrfnNS(y#)AJArZz} zBC(4+e1=WB$8&g;4HJP`umt)Toz5e94A|r;N^O9ToIac4xgKS$-nsT}DKdSJR&85e z;ZNu6+<*4cHKrHl6yB+gn9|#p?Y6~Ufqf!o0y{bjpO}Q{^60M%89bW_vjEbSnI%<6 zM_@GB!ss6aqshm4*$5`!f4>+L*#CB+IZhbWd#l_rvcWlr{-|GD{E0w`;Xi}ia;6<4 z#@i?`n#eTW>+z-*Ij+gcLgbrWJ%>TI02pa+Y9zHO>P%yk5#;+~$q>n|1s3*r@v?0{@w&K1VSWNFdzD+|55u~^^QJiYh~UR_c5@*>vbPP_L`fTo8Z(* zcta__)qX4lKP;Q>J-1*pk4sm*xM^}>!E|@pi%zc?Z`B+eTfA0S7r)A#Mp&1p%Sf0o z^Tr!g+@{ql2*;@=IrHCGluA8SMy9xFNv-j30!>W!en0a@g>A8Gm1M7DZvgP-b3tce z$F+r-nCR@O@!n=6sI^S&INJv*xpw%`;0ox~@da94}5CzG(T_UzO5MzgzK4>hR_6-?Ikrd=U}9O!5Z+75(JU5!nt;#HUc~ zSAB37zfo_GSRLuH?M>cq<1pxD4_mCM?u(WSRqNi@ld19UIGV2KO666=CtuEic~2LnhM6L_MNA%$+pz?5D_JSr;*-Js?L8XUQH0?>-@)= ziC-a{_3@=2^Wle+AV2QJH}`mTYwMiauxNo`gTwRJZ+7v8X}ordQ+o`AXA6=D{HEVS zYa986$W7P~5ZM}?S~k&$FWs~uNWyz#YM7Bqk8x^0NWG2b_9kAmCB515e51?GhH2dN zQc!4j>PXaG`yHl9XvxepKzyhujhTZV3=h+HF584Nkb6uQgAiQ7v$KCmIH%8*vi4Cb z)??Jv=v8au^8i8{^gbue$DfaUJRH9*|6@V!gV*0p_BDI#FEyc*xL@0HkDjZjta!&L zj%B>m)-k)VKQxKRVhA)qH(^-nqf+;QAF&L^##B0)I>KigpCDEp%>aLc->OEYarLbd*;3%E7?PSXrdO!(KN0w^5bX8NG_ zB6Zo;c#;4bGzWlCD$1qEo{>ikNr<7El7<+j(L-8PI}ihSCrq!}1wD}==zupUEz%F0 z{cY5av&VfbO=6O~PCD^6>KhP>qQ9X8Bng&zJKQG^C*FI|8|U8;hL;}z|1B-xb;x0V z<QShk{B)=eseBx& z^XB-!6V*#W^=gCaC5@S}2Ln`>CYwd|Q_#E^G%wCW^M?(VWbswgd)32+zqYY;a1P>A zQ6O~Q7j-iK6~h2gW?k+r{6GBLPEk}b$kgCM%oNNVOS$ki-`)pY@WM_ zm=(m3Hwb0^jA)u-rjSE{{m9`i&`e^5Bw-=XKj2nzzt(-vgwPmx8v@*uZqZYKPu3fduvAs{1I}PyW$^c6}gGRvNFu- zlfRsSo|7rPr!bH58i``ThXX^bQ)g*UoR&q+8%09D5t(_DN>S8xy>=a%+m1IAn|8dm zV}BK|@_f`eGwMz|+}UP0hHptVu>l2jd=*@m$%q4hG6BGy)?3kaDfSfuN>Wwn$az7J zn@cdSz>e8qe8WO1WXLG3b7!8oyRe|53#z0@1R{Q5f{ZWR7{N|cnqm(m&v`oC&Z`)< zN%4Xyw9)83a8!L?9)&T$C$Lqg!654V>fg{vk{so0wqs;N{nkG~VJmDzc0rF~NY;|5f$34Xha|09rr zfQ7@$gkC|A8o3*7Jo1t0{+MJjas?4O%l{Ww zQwWZ;wei_t@vVBi;rLRdOa7HU?E{*I5&2i7d0uTO*eHHdXN=Ou42mj>AqM8IgsCgY z{G)1nC@z_qLRS4O9w$`wqU%d5qZTFH*yKlyl149as>`-p9WN!p*^+o0jN^WQ2k4=) zN?uf@m)B9Hn)SF@{w1#mugf`7-|}TvzQ$I3Ei%hi8Pua%ouk*c{ja$<1IRJb#OQex zvj%vE<99fXng82i4sc8pABRCA1Dt{3Vd*hcHHF4gPZa}kqvw!bWVmV3t+!mY+KjR7 z%z(p(4)j;Hh#d;xS$2qjNN-IUPouZ)r%)0O;4}YKoNmV( z{e>0pKtbc%pDwnHrVJZ@b%b!mhil$hQDWrlSno_P_P7)KXHRcOly$})udn*UvW&Nx zS&BlV1qqm*|BEP9Glen#KNpEy7i$edDedX7O(|xfZzHYgR@oBoaQ6JM7rxZLCg#)( z_&30G&l>QhkX<<7)C_gj4tO;mIQ5y%+99vzuv0(KS^I&AuzpD1?#|l7Z5zPHxc3V4 zF}{6sn9it&?Hj@XfF2aXbe@z))eB$bUjrE*LpABFyY!g9Qa(4XJ}f-uw98=VtUczn zAHzCxCLinkfnuh%ZIwos!ik6@{+$))dX67?&>QQ8AFK_9s$N_+=neXR6Jcn+rvWDV z&71G|@632YW;|YPCR8)z)eeMeKJaRXLN$lI+7CiC$ELRJ_WwrRHNEq%3!6e=QlvZm z;28ImgiOD@+G7Oh*VML`v)vhOj>=Sw!tRWZKGHC&Vvp#k;zQhylL}ZZofKsi;oAU+ zHx`5hC5acHlTscG%6izV|7D`b@$LJLIYm`RT1y%2u=}G87;GOo?te*#ru>NO&8JgA zacGWTRIvvLm)5g%P=zyc*@n3^AH#NMp=+WSe%uNF^O`R2>03{&K!uH=NmjOocgal| zxkd(bq@rt9#fKu^ygom(qOK|MCswEGtCpq0tzW5lMmJ0Dw&eE6dx0Yt7ny-29}Aax+-)Z&KwR3c%j6$wTd z7~jmxXUl-P6>gI6y5J;>%n7!}Y5J4ik|K1jD3DyUPCRr*yuqIv^2T{-N&JE_{41zP zTNkSp_6I`4I7!o;g;o74ri0(h{`MH2?+Jfv6#{Rk`-{y+5y10G#$l%$<$+)8pv72n z4uK;L6+OmDTTrpHGxp<&UU$_i%YII$s*U33kN?n=i+XVgRxBs#Ytn9-yX+Mof8|o##zw3?qDS`f%&dj}7nedZmEX{k*_CZ2DB- z{^D8Zh}Z2so9EmfMxzpld#o!PqN_OSY}Cp&3K#8FaEIN`dB`kWPe+Pjk|k}An10gB zitSKr++90WY6Qe4FGz>_hMD3O*zS9r!bCTvyJ?_YmUVtS4NIwJ1%iHV|8)H{{d0P3 zchyJmtjzYa;;>pY{p_Njgy~mw*(1az$u&Mn=VH#=BqZ11Tw-~RCmH<6Pt5G1l)G!c zlDkg03@In9hJ{F5jxmjfudsgO{@^(c?uGV!aL-lW8*@$SnZq^gO!?9y`#I0W&J~Uk zg~CyuD&j<50cX6-gX)m+?q8wGz&V#3@Sc_Y(~jv>SCM}WYLWI^Z`b}C_PJ=++d+1= zXrq$i_ncoqef+YCO!x zfOWp`YrckeymlR!UcBNjyba#AOP+P>v_=$jAJawtXQa|aENQ=R7KFaza6Qvi+8Jv% zYd6ef@v?0aRGRQ&W@Y;d-JGYj=vW|cxL>=n{TbRAW+y>s+1b-lI*jtj-K|jH{j6HUxZFSMSTMtG5q4gy4TP=U;u0FI2*x>St~I5q=QmKQjSn zU>Qk|6DJqxKk@6|q8GO35c^BMnh3`Y2i@@&PH|_mOzRyP=T)mvua1lP_^adp#Ltd? zYh_O9TpNFwZy4@hk@<-tt8Wbdjv4XKK&B;E+TEV+0}Y^-$9)B6ZQp(DP(>FVF5}+}%-#FELx=Wu zJ`rC_)!>NU1=nL&ab7^5LDzWq$NR&fz3Dd#)B6iMA2J;!VFC$r`o{&x1iWdwQN82k znFrS4^8()Uoz0knNq|x3P9uPJQ5SFZHXrJxaCPVE_>a{jpd(sKcuW0~Z&khGPJ0ED zx}*SOd3Ngs-nrfem|_QLj4PKd0T(gW325}q!1Jd-q%nZ2R%WLxptiD^ct=!o*2D4? z-;eX%F}-jBy{aT*azSU&52wVd2;SGxP)HS9$k3SiuZYgnQ{_KwBqtAqY=uCe_yvrB zeK~dU^R?+_i$1xw9#DIOCW6j=hK4I8^axLNr!it+w79c~_GXaO>}=EWq<4@}Hn`J( zu-&Lo?j2t9;fgQATF0kfE1c;A!>LVdCCIQH07J|9Xw8Q!4^UoDoi&haHnke(9JRH& z{&vBSjrKmf#K1;gYy&Q-O}gW5nZW0Vf9VX7(wfk8x5gI&=<;C7*bH=}>e=OYcpC!! zt}&b%E?jnIRpYU?a8l6P8&fqa+*;yo&FuynUcL4a zIsvE@VmccXkL2&im@72Gx-5n!9F!m5O!F z+AMPDZG-A0qg?D9;#Psmu=jAhgK7*8;=rJlrAS&vCf`l9(5PyoyY`>utYXw8mr%nT zNLdJ86I!fyZP9P;BQ(PwZ%D#6~lh`FL`%kZ)&5H?k}twawqRzv#0e^GG*V>X6Yj7 zbTl591-x}KY)k0gaH6Aexay<3_QSSLY9Oc|_!Z4;s(8l_r`SdDQLu}m*X*Kby+*B< z1oQhD|DHl`tABHt$rDYTJ?Zi--iB5C#9@zM+IR8gTRWx> zR}J2^@z#?Tr$)wS_Rd7r{{4*a)nI&w?f8=U?O$lyUzu$`V%n$iRr_4EpU#wAu1>^V ze(Hy-`tN!!zu8X%&&y7NCy)f3jCXPe+ZGvIQAfk^j>Z#g&a-fRX#}pHrvAi9^*ed> z9}nseW=w)+)QnLyk~%!jz5lOZj;yf{$JZpMg`#kv68;sNf9LmEx>woJ2``T%KnlX> z7!S~@-1$nnqku;??DQfs1Wxg>Mj%VK)k3ZPAprtUjJ zruLFdJ!vOb9yd90yXe8ox;`sc+32GD1?b%H{-}Y;d!Ik`*%m$t< zW&=+>?^?c^>KmKr&6g*q*}sE@ck2F~nrJF*_U}|3a#NSnUZN-1uQd)|gS(}^vnJTT zW0WCGa!4j7gBS0%AO73Xdyh`2*X=M0^?F{m*Rz9O-(q^5F}+UadTr_J-`roiQOste z3qPj6g8GejgxH>Cr!*$L=OnD?9huYY%w@4cNoL}}iH8hMl$=`r_ao&W{Kb?|w3~nD zT_1`j_}9X}H>ZZ8e+rTwAbt|xalVK7XEnr6{`+Vo?|l)6c>zFU8rUE3Xqbe}V}@w^ z@fq5`JwRyHM1>^wmd;X0n*@huDkPFf(*EW#LiE1t6w=_9nvg~?bgklq-w&G5b4vZH z;=Ze_{pH@V74pd_ZOc)&%XxtG2Yw^xDEGDO17M z61LGUix(TW0H()|hQuyb>glCef{Za?||@f5l$K$GaV|xbj&yHqFdj z^LsS_Z=wO-!nTdaXJ#%l@i7zs;80^II)Tw|=XWZkc!Y(qUxz1iPk$ASa6Na*DMowFMi?=||E>cf5l}vKVD*ym1fk zHrI}K&8iTIQ_##7N^i&g!DQ(Tx!L4x%>3{s9OEc6+0`PmRqrFPU0VlAX=nxy2-sH% zDJvy+j`!@L-TXFFEXoGp$KFS^R((vSloto_GieVW9D?mttKWpurX#W-P!9GYYpI7zn@*DU{dhaKmwi`H*)WySf zYv+$vH0PsU8X+qi8^d+=+WF{RR`r}8DJW=YO9O)>Gpl)b*uyg!jl6N$k7&7(2F3^E zfEHOCPKFR#PCv`;%FJYq2jElOwFhu&ARBZQzBcyg5w^-CFq*?fL(LA;M7i=1+YpE| zdo#_nl9}Sw?%H}4XNL=Q3Z2mqTbraI3VHLXAN!wP$zK9=zR1KF4{Yiq{3YFj)w3u2 zOTO8SPtoJVkoBA-da{0!16e=Gd!Fv8xG3i%(fJ?pZ^t*Xhl5-?s(28e$WgW*>WJE& zKe2w2qr~sQ4{<^L~xUjrXib>=;jdjlhk z+)+mz>r`jku^T(7O`B{RoY)Q!k`W>d0tqdjyDy~)T0u+{+mJwSqBC4Bb>DuvYrl5e zUH9GH7kAgC*ljUGAmO8YL>7#)YSe8z7|@6n0!Zfl|IfMel}sSmc0bW|F5=iYnH zd7kr}=XuWaJm)!|rSGHNhLaKBa2RK391)}Wstci`2LpTIw}kObj;u5WPJDafnOI}H zEfnl*-X(ZLiWP`o=+u+paBR6pFjDMyCa2tv^BlL|RbZ5DGrC0B18gJOmKUL9#`_DE zUOGZSG21)goYJ;Ww}WNHUw1+0RSrnMDIz2kPBRZ|k2c%H&WT+y^%+u;xB2@R&TIqD z{L+(???wCf<8>GevG)Q1Ry=8RYuoQEFkV6HbZZ@wu*Cb3sEDniEwSgtt!NqihWG76e3l7&4;EX%dcf6I}haUL^3DEOEH&RgM5FsJzH%rBQ1M{(2~&tmg} z&u|6ozmsp^6QEk1k}?@Q7&1d4vo(Z{E-L82Q*1e375)MKR6mA4^-s}$hl@HEt%hZP z2uVJMUdGMZL-_N>4s?4Ki+_!aS`@X)YT&|aU4A<&blutX_|hfdj|77lg1NnAH4(>d zyUd8soW-NptCNUX44HR_%sbhe8EkM0`>-`gMc1M2RbR$r5#9M?+_m2M znAH=$+A7{?{o{^s)88zykVq2YX!(S7a@8#%{GyL4yW%v%A3zqX)yh!t;6wMM^~o7< zqv~%0o>g{phKyTh+Noolz1Ru(z;hfy6mU#AeUG|O$YJF`i#>ZB-=mRn_!C0oa_em9 zYQ4jQ27?D5{PRfd-HEwxbF7_+Z_k-uL=&pMWwq?@#~zcve-yF$E%2!iIap24grn+0`-{|#J^dCQ0$<7-G5w?pOL5QhbRpKNZ+%LoKNb;n5Z0h8>KD6n6 z2{16%J%PLbP$7WA=I;C7R&W6>){nQvUg7%>vjqIDAMYF`#Q_PJ zgex`d4tCs)jyFGS9E!hzC7kFphr7yUAj<&yJIkea`3xA2FT1nc(n%m_&W16%0r!85 z2_c9CL>xbdF`O7&tW`BQc{NCRK&Ojs+fy6J7 zNQ4VYS%%rydc~}!ZwhQWbFeAw*PKLk#^xVE_R^VcsfBQ6cR;pz3xzNHUg2kU*VFx* zEDiQI{;y<{E%~X$-@~^m3e9P1#GHNh?e%5_H>tj*3Rq5+l<=M6E6Sb8*%br8hxLdBLvOdXhZ!;9d z{Y=cgje^15d|Yg$bKeRZp}C#j_rNacdpAuwq@h}PpisC2@B9mDhYK7ojI^8m))Qtc z-0at7x!J2zZuaVwo4pzycsgr5Gnsl+^c7ci>JFtzTh z^y9I}yvJi$m}v~B0N?^tDiXJR5s3#|dOL-^3frH_jvRIP4kpENNyPUdJ%C7Eh~4Sw zqkynwm@{_S36!C^UJ!aeewh~RYyveVv}eJYcI~o%M-jgT+OxZPD%7t1iuUXtrKkNl zZPuBkMpv5akp5-fDcNIC;eB8ioJmZVc3+6Vp^$mtm{Y9f&`5rj=llB>@H?v#9!GKi zbAX<6^DMgm1z?N6_xBMcC}ifcmJZgOuRjr@GSwkqT-3!*v4`R&)3dzaXZ2;+>v`MD zf`9nyS?@KTj@DPfzz5hGWF9s=^=j7@aNrW8hx%!2O7aY(}c(5xBDP`)k ztq@z-La?<8L$i8-^v#mdeQN|>FpJh4CMqbefr=Cgh!UL~53U{)S6*Coh$~ua2E>&gSH7iuuZU%fcvXz6&|+TEiqj#k%5Y^9U(i++5ns>( zGaxKfv{iM8GGVJ)#&2n%@_n9Hv`}@3D_W=`pJN#9*(&#>7V;Xzy^MsEPU#XpC*;gzp>gIoYX(5^w=|O2RW<4`^27JPgN9qM-)KjLlos5 z7*DRKxRqP{clq!aTkuax!OzZM$pQF9cg6xg;l>w)ykQp+ahdQF<%C}#{C5QZiT{7c zpM&2u)t^;H*9lLM|dbYFl?S93n^Pf;9@WnY>`{$k_~wR2DCA30_bnc)_gX zFkX=7>yey9@`6c{73|1i1<$2f!CtTebiO)TWruNs=$NUse}cRn%plDR$Png81CLkR zd@2hcGK7wd@MsDVmOa7Zhd9grHVM7thvuIN_oDRC`^k7V><~<+=gbbPp>t${Cne<1Y2p1w4^1KKUmu7M zs_XY^6FRG+>chl9bl$^uaf~~b6Ghsl((G9wd85FGG&lhtbQ0h@nkKoK8FqdP9o{d+u`G&6bqMukAtJ*Bbmm>LEvL|{G77>^}+brLjQXcxP{$c)zPO+*g+DB zR^G$Sn7*j<9-6*@n2!oFS-4n|iGHFCj~9e{20;kiyHW|-(6-WOTND4K3;LsNVgfgd zw5=ZVn*}x)%kes_YJAWOBfiH}??IR$Vj|;j6lhz|ZKM@%Sr@jZ!xfFU2Cz@i!d#b- ztgwo2r${q5jufxg2=VI2Qv?}mkga}^{$?5Wu{8h)L0A?dE%}-=r$+z0z}!f>YUn0T zb4B_@#QSz3H9&ZWYztVciG~%dtlEApNu4s2L#1JA4Eb{vHA; z0nW!XM(N`6-wr~2o*zONw4vpM2+B)zw$jgY9G4>|dJoY{0;w@}vz!?NmcuYvWXII> z+5xw=X%Za;hzBv3j>FSsx5AU6cNgMkks0QuR-ZY8KQv&51A9qqxZ_69sxyu}BuiM!cwp~L17nusE9l^x1nWxt8j zi@`k%3aCg7p?plh&jZTQezLcDOwq26qMTyW0Y?ei5bH`X1z-@F+xdZ^p zMF0RdPEDt>EC6P!mxdts)9CC%i%G`?lg^oY+0zJwRAYSmMhqTilw=m8jL)?E0$7fZ*a<4R1&(7zouR0+yaD5!Erv!Pq}y&V{&d`~wRg#34VxHWJ7eeSP4`^o z2$^Gzg8^g9x+=H5ml6RSRm^{K$9bG}V4b5g$cYGt5$w3rV#ka8_0gK|T)>FV8yo+h zm!bE0vJQMdbXfwR9zxU;t$B>0}*3u|U$c zD%o&Y&|L;N%cH*yI8+z%g2NmP%LxMI{mcT$d)#C9+aBzA2XusOH_KI)gH8LhGoH_;JNl zKMp2UgbtJ|HI(x`$BjYUm66!M%5Yf{e+#6h7BwWKNrz0)G)I~v z<#gNFx-EsXXd7}J^g8x#=YDE+dzNykeoMJNOV!$%DFCo#2m?UH%>$uco^K$^#XyV^ zASulRK#=6onY1aDk8K=sKShtA1e8c{By__k{P4kuPRvk`>~zRJwqeL^8VbSt?X@)w zGYc*?3{VY7F?!cH3_)6a-%IgLO+7;H3z18bqWH!RuP;)3LqeSHgz)}8#xBjNP3J=F zvw&buaW>RUX1z!->q<{Do6Y6pZxgZSR?zh>LD%y@)ytwaMHhgDMPp;ui!#%1k*ovX z59MWV!Uj7Lv8QQn4Mv3xvj8|+<4H^FpO0YL#(=i97ogQku<3axyRTMtqf#I z<E@&1<{CtOnhxGae&o(OjD>E2nWgr z48ELffI!S%bL>E63+BrQN(knBKwZNHHh~Ze@q%cb(tk6HvSl;Z;&lp^ed*ie`yu}9f~TzMOvrGPt14dar1&;7JP_I;L`&pDOd zc}r9mMr*MOk4kAxb%{K~T7r)@Cgo#R(uaw@*%^U-Nw9K1MW=+o79%2I94@dkOf|~W zO|yr@9j${F#UVl0A+{|)o?z{Hd{}Zwayx)Yhar*5#%1>18j{({rG_LrTaDJqg?CrZ z!kdyCOL2tPj+ERHNbb{+TaerT$Wg>5FpI-;_T@4@V38ahbGx!6nau+8vAKdy4=jhRw22c8j8+)DoO50=FT95k<9&twA88x zeB)B^NdcaRy$^%0p4<@2>h~H1Qy(V4bD+zfMpT+Cy{zWD7o-61k^ErVI7^8 z;^Kx2Y$3|OJ2Y&8JyM<{Z--@cFTqt!{8v(*bJaX@ecdG2*9yXN3y`T%IIWoECXC%# zoVHS{5iV@=`#CO~E8^!T!Cdd^zgDJ)0jE7=Yrx#T&fg}aSj$hu`leEo92YjFLm@5Rq69j_|!!NLjqCdkHXqT{2p?Obuc znx(u|i4}JmP_DWKgn-uaOZ`^^a(Nbz01v=L$0Jd_fLHitpvBlB-z&xPyO_&wALcd8 z?S7iuv7XgC3U7t(JPo75kzJ;DC>S?p@QRoZ)0YztfJ|^pa#@b+Ww;LEdLGgoz=DsD z7ocRGjDO|+bZzVS_^YmoTxKqcK?JZ2*9%Yx@mr3e@l4!}2i^^FTHKX`U@Zr*$~G&w z{6>bR_*)8UPA|Vdjdz7C;ffE}SbZYhK3**mRH%9yUZ8}P9B4zQAj6j}!pM*zAQwKs zc5rr*AzcF))jUS8QD-Y?e(AiXY-9=BX%NKcMRYDA({G*^~^{KHWs zh>~#lBplOHJXDzPzIU|FGegPmvFhI}{xb7VW1LXY}fRIctTju}1fx%#9fJu+i^knod8rgizONUt`l?e;@wVcQc#w-)CUkbwx$pB1&2o?>>v0oIetQ&$y=)5A# z&_JHWIcuu94XW)BnljbBIO%pW&=o)rA1vHsz&1G_+Q3?DC zu_-Bh2woFx+p6VMSV6f6hC0`=7iRE$ zDyx+7J|aerXU6_6Y#*RdZ^MBc`$tZY+o<2ehkrouYw4ZJ`6$Px11mMGnUICT_42Ri zNUjAw4HO*7QrQP&(#&!h0CA!J+W;h7_W1ys1Pm=Rdf$fyzAv@J|Ie_%Lp->I$KCR_ zU%~=Uo+QI!l%r1?4d4e(-Z0ftu6kQ=3v z$8#|JW2HgH`^d?W^Fg-jAY+1GPa$ua-Z58%DZVFxLx_&cDNhy84R|mT@QkEP@RtB7 zTS7_`dg9}4kpIZU(7@G17T2uP7UJ7b0)m1_@M?q+8S4R5lbJxq^{=6zkc^YSNr|0-=UAL z-=|?h&GQe$&#Du+nyimHq6_TI^}!TMDIq;#(QXL=fOxS*`+p{6xnSK3Km}xAw%IH6 z@p6TJFCbrlMC!L<`3>gkHfP)MeLXH0mhBtX-)!u>B6w3+EL+L#EiDl>|D z$6JJ>UK*v+y|>1fP@ku?(Nq?;2voQ!&e z0gj<8);hds3KrlC3Z`-O&1ArgW91?oFL2Uw%8Kbqzt!fMQi`t@&h#fnU4$<~gOaU} zX%W6$%(3Mh&D0!Qj`3U$x?eWdMfkD|Eg;TkjD}gXAsPGX%=p$v7p-N$09@W{hq&bC zF=^%_TyL9decC8Xo8M|7xhj>5Ex9d|90LVtM>0}-1TH$-~Auvjg16sbU2MaXmJV zI(fqKydL$e^Dv+SLa6?>q3##=tz$&;`PDnHdkO5S7>}t_!o{vK7)eID_cFx88nqnL zOWtKPYRJC=zx1c66?h)c>oCt+nK&^c69T7g?Z@N|!@&;5OY1?}yDse0dEE8+*5RNv z%X%<8fI3g#b64S3^f$fh!W5rlsmSiUwF;Ns^-YxOmPZ6=&-SjDTM-YOL)MURf0-DO zw3mJKLCIEGz|T{I0zZ4MStJi&xu2q2T#HMvB$T-vDH}N9U%yz-g}XiFXTSX37hG=d ztzn^u{o=!N`5tzJw$I3T*q^2_m+@0s-u1H>To{<)E8{TEBeRDG+QBGM5za2vwR{Y5 z*xHreZs}u3HJ9>pNz$H|k?1)-_B{M>WNh4J``9JJ?*)YQIX-qV{X|sLaH`1&X?{fh zD17YsLf3OdMK--*&Syf`FXV{%%lEM-ZUn{>e>GWfcJ)l}jU6}u_AzV}w={qsy0Y>q z{wdzI@+hvyE9+z2Ro;fHzVGlViYwb1UTwnFV-NF+RSh)o>KnN7{VA`$gR5m5c=ZIX zt#s{t|syp7BZ zPCqUV$rKHEw2Zkuad;?F1oYw9%+}@p5?mpvNGnpUtq;GlL@@_ChnPY;br_o z?u|ZVALwV|049Ooh2LM|Utym}xiH9t1V|*X>O8(dGJ?KyxW;x7yooPUZ!tx|Tc~Yt z5ar1F(02gOK4{gzj5uC&wh!4g`mC%c^=OhQRZtZ=$0w~wys!$qAAi{lvK+K7Kr2kg zQP0Pr5dK6WSvedwoS^&shw1#|+`EPhVr^Ksi=;7LT!!Q&Pj;-7mle1S%S*pm>Hi9H z&GBq1y>EbL>EH_a$;;()_}_h)_BG5c2<^vOSVy$2S3u({(zbp|+j_M!&@-g;RP~%w zx^NJxvKQ}HVm^3#&O(sE2xLQkyb@H`&_N-Ll|+b)q#@3=Fqq4{4bteFBW`4-fqKsW zbf$rN5guD1^r=e0Kv2D0dZW2{g<`Aim}?PxDl0j+WgkWw=P%ZWZ~^T;*riJ&H1JT4 zpAzL<54OR$a2ZmL_MD@L+bu#%#exmUsLu!Lq|(y@#LNy1f5Q%;eoT@^XPQ^?2iuO) z!v>*$L$fgRSQICfK9_C|dp_xE!l{869wb&r@=$! z=!F1aMF8R$w*HEfT7vnF81WSOK0oZwEEZ!yC)-6bwT020YL*{J{d-eLFBh?9}72 zO4e9hfJb0veedEQfP4$Nm{z@xe@OB4*01o74Dl$Q0YL%*yJSNG5zMS&F+`@h83ZE9 zrB;C%z6IvkcODJk&|#jSaqLQq?VZJQ*3CM>4*S7;`(D9&ZrTZJ@Z!hhi{!3@;Jk#F zEV2GYzH~eL4zTR8SFftl8nqrd|5stPgV}53cr9tWJ-Mu@1kaMa<;&C zB8ek|=nRYzN}EVQFWR0bp1fTk+HTf&h84`KtX@5jC+GkrMy3&4rdOH5e!K}htwwXA z@A##Vh$NP9xle2z=MObx^Ex^5vp9o%rK^U%7$x2Z|xq(WTOI;}s!w&;T8L<%-YlnKlQAMJb zNLpqrA5~`Lt%AY=d0GI}a!cPGOXJZA)%aooxEyzoEeH;2o32F?0-_7Bgil_}i4U*QZtMPCV^q-72#4{#@fRm~a9LrZIJrwkxno1?8 zO6kG@^KC;1RW-=4rH&7xGsVk zAk+b<04a4~O;$@4>3Sh z=tJdceW-@|P$WwqDi`|D;$iyGJWKUqGS^6A@i`<-p!kt(N&hBr%gMXH+7tgWkrmSYmx8G^3mG8oIU!ltfE4 z)B-BA3~Fc4=`vhyo{M<;}=ByNC9Xhm01*aKsDTtcnrdZ3D0 zkw%n34j`#|GXye}A}~=P3Gar1z5rd6xFr7rrZi$oU`WHyytF=aX(TNJjxtE13-Pj% zl(&kJNE)dRi4W8I5cY}?IOs#bMFr6mLb5x84V}m{Oeb1!#-7%RE~*cW(0s;b9il#j zQGu?LQH1iDg@irmYNZF-5R{>FQ(+X^TP18jm6q~jI!geLWf!6y2t#EVg@i%KQbb@7 zx;$fy0|T|(Qidwi%KiH@2)$pU)a4n3gn@=snh(@r8VNKB%OHeFP#?97LTQ6gP8y<7 z6d)@#3JgLb4_K}ldzi*`af8qY|BD)gto0BW#Q)fX>U&12Jt+AfdyupTIX*m0{~2iy z`sIgG`p@sf9<=yvq5tICgTg2@N3jR3l+SYQLGw{KnmuS2(ldb5=CKF8Iw0E4V-M=a z6LcWg9yA~e-H^Z;<>wd*^V)-EvDu9B^SiYN(YOH#$W`Sqdl1D2cqvquQ4$vCGv-7x zhK~BQ$QWJw$yY@^WkuQ^G}1RKnem7({{!qnz?Eed%CZMt5>5GxIhTp1d{yK@(@6d2 zecFQ-y_wN{=rFvf{sZdC(s=%3?LjyZCv6X^p%OHjJ;)j*SaL=o=KQu8sz73_8emvY z(=%$JjUu+=~2EO-5$iHg^&79+8)$_(SUC-Z4)Bg`GUoUX(wC< z090Y7gs@*8oiJ=;#+dCvgwldA=bK^L*ZL693}RUU0~rS)$PreS|K9eXdc=%? z8!dv2m;SMl_Mqu_Mf%5nANHWT5_#-FDrela|LtjLp!A7kfoJ3P1a*ktTpXt@(4<`So4 zGSxjY|MQ#_W`5!6r6n*#*GA?iu~A*Q7ZCtE-PqgEsN$SXzk)4L)2OZmv16$DFtgd@ zG@zeg(14%XjsEHo4`1+zL!nJ)6vXDP6{+6YR&g+{wLJlzfz1>pIC5dWZR3qHX_E_Q zk2WBh%pym(wsl{_3yc~`#6AW+Mnyj5{R^E9N^&r9;2rLo0r9UCSpfb zZlVA6;A1L(m;5*yDd0y!ACkupNUw6ad2#{|G_0RVVX z0EE=bfxs;xC?qm27lLv8Xsi%Sk4DBb=|l&QOfIQL-U+YPUXL?Zk!h;TuC@IWPzw-m z#30EbDnpWMKn3W_8V(c8hO@Z?^!&&HlA+aNfXa-XCX8)MBU7iywIha+x#Ua4j;vJZMF~+%!p`GpkP*9*E|FcI?h6{wC0){QD>A+b zCxbiBvLrhWUwkgJ&5LOP|1D;jJD;sI-)B(SB@Cd<6bzYla0&+3*kO>AIU}96P5|K= zI}l=OL}#b~!Zmgv3iVw$>S)}w>fk&Q=oc~s`eP6%Ak?-_#0Y^nv1iWOIctqiN&W-? zS*gWA%2+yCgCcWnr!C4UTC+l`Ps)VkNO0O9Hc4VMa#DGcBnLr~QwtKDz8pcC9!W&CNH^Xj@jSyQ0FhOznx(dMc|hn@=Nl{A|5&IFO!G1sMR1-UvLmF z6>DujqddP?BqwvlaAbvnQN9ZlTcm9*xYThu*NE+_IqWjEFEDp^OOAghFOwBpj;xb| z4rNOsZoufG=-y=<0wiv1#~CcdQ8^Pjab!+(Jd*GL4i^*g?8P2kZL0&fU?+>Iq%e=T zSLBmCBtn?w{^&gCAms%Fb6H3`YiD$xV}Gs@#~|gXF+3r`D}=Z-Jms8%B-I`-Xv|W3 zyw=e_{`YY54-WhxTsyG;5#umDTCGUGx(k^tLwdK$(ZR^MI9fO$$)~m7EeW?A^8OzM z;a=Xrm5YuDK~y#)XK>umlBjfDIY1gMaU zrn1iqD4_tE-xW)tob-TsS&z(Xu$OAK`Ax2X0yr`_mn-7ILxdD*XQy~M&^L{us3i_JX10=!9%>@A<&q|#4~evAbF--x{Z-% z^4z%B2PSml@Hnn#z$y!{79xB|zAacKN^@D|7c;C`a!1PdQTXE} z^w0m^+%cnn{*E~$_0QjiLt6UhSUKdy^-oEg|Jhvf^7PJJ=}r19|Dm;+4_q7Cc?BZU z{}4J&7*SX>T~$&UtwHRRJ1_)p;|(0ZT=n4acpSLC{U*o>XgZ9^bf)v)jyFU0_^YaU zx3VGbgMkc@AXjKx!%38Fh!0#P3b?#>@(^lmD^7BfPq6h7uVU{F&sSda>LeWh9LL_8 zdphL#=0~SqnAP+HeCI%i+%&3DX~qVYo8oduhU$Ng$h;LH*5>{8z#uGd4yNr5^kn0=fcSk7rWy-u z;&(`3(Skb%zw!yYi=IO3uKA=@g0aZ%cTX3dXND?Om9}+OrUt&xTF_}<_P1iB5ZTO= zFu690094v&H$Yo4~9RNnqFjxaRdq7HwU~ zsRgu^`8Y*eImDbrWcR#)I=IggD%+j8>;(15imgd`h%}mJI&umRfjrl|Ci=lTu({5q zBF0qoC&iXVqji6FH?U#gi`XyNdV?N!S!C|l+B>1Nkj$MqEVjFlo{H7Kq_=^diXZ%% zSM*do^(wFEsTg>jSM*f)`i46|$P~yUaA+=RQ8*LGkv;lgfwt*u7_e;xWDh$qq)zir z5aIahEPe<~*{7tq7;u8;1>&*fT|^U#rrNQ1MKOTfQ7AFErjPu0_t*IX`ruTs0b&UM zWO>Ke!I#0M#blYJcR6_MQHzcj{ZC?j+ld}+w8Nr(wcMNJ&pHB>{lrnvB3F-GSagj` z9oCp*2b2phlBAUv*CAFGR-P1l0|;4Iwo@m+=lM7{<4*%x7VD&01v$$MCya?pqg9Gv zQJHLnRj_YcOiN@2kbmTSVh%$3VLaj-V;uPmsQlRISya&SCG6D78URdedp7=wBIKYJ z^n}oq)K~~KcUS9uLi{NMf>9{D&1!5I$(4dUj2_r7YW_B>lA-4qiGq9@A+ozMO(8<9jHKttLm5J8auO)R#3 zW22z#k0oGgjzL;d(9}XP`!mNqPAweC572)xpQX&V=qJy7=5~zy^LboVHa%J7mBscj zpQqUMc>eiJ2`}d}HV9?SXX;t0`8)x}*4+90EXD(5t!@1@=^Ra37J*y}8+{0znQ?Yz zO=8+?Eb0P{&~=z+4oe0gM!;eK7HQ>-fJ@BbsbVLcHIIjzUgccA3t&=!I(}pmS{fjd>?J^tHnlu7KnYk;D?-Ztb&!}_Pml+&PLd*|g5tVb- zGdjn}{cM!EE9NWr3Sz#d=P@9M!6G~JYM!JKqs(0inwYyqmp^wcD_I`yKkD2ClXvJR zJhi2#0b+?N{Fd4#1$HEeWdAl~G_zzchO`8;0}B$n-lgVBfbqFAHZ?shMNlZz_zovZ zbPM5ZDc+cJ*|NG9Qx}YWst_mEe1|3?H5$A-HTz}EZXv1fp@fGFnhNu@?35Jz*l>vz zmc0xM;SYXLrfv2?lgDz;EfN4?6FpE+LQ*E>29cUT zGlzf=?vU!jr*64F3hQIF1aI&tG}!kks9b3>_i!?!#F>Y>Wi+#(?)08<$pVDgN(K&P zY`&;sl+e?BRS4g`45fBjL_RVmMtqo#iE$WlY>(=KjOP9*J0^-kw~V_As1?v}(yWz^ zC!+!aXjOmM?P&f?o$;`<_A%prSMbaOA2;TxhF$x+Lynl;nBs`P;fT#qi6?!Ed+_mi zpXZ7xs##^{hp{QHb$gdAHKw?NQ=CncP!wu$bWh>_L0cz&@ndaG7Ya%p!b_a|m%xq! z+e$kw-Nse4_@Su&&5h~t!k`x+|_>i z;YG#*rx9_PGu7bUhi){kF=r~Vu+wm8d(rdwtDcEHdY32W>i@jEBV=lbjf1SS8ZEJGHeGa_P9b$;T4euE)|0$wR7asm|C0yuc;-l1^NRSKfZ$N=S`Z0fr1OpxmlQfVd>52c!p~ z%wxF~oa2g3aopGuo8vsw8=K;7x@PhmSJOBSaVv+Ib#sWtP+K}E`|YSRT3lweBUt5p z;17*)|KKxf)x_avvEZw6_r=B;RgPG#YN+K`RHe)tE$lv^0T}KdEW3Hi&3%?u*B-Y~8st3Eru}j@mhgxHeGq}d}fXA4iPj!HB$HiZDOx(@U zoFK+i|1t=7Qv5>>J_cQ|E(?u{*W~k}P(SQ9!5!$Ul zH%jCO}KS`$wlFqm`4Bvzi7Vr7LNi3WHdf z_n^kCxD{ydYMa*p%jRl(AYpXFDO(YUn@e2*yr8@t7T#xEZX3Y7M{Wen2FNc4*;VqS zipq`SIW0b_-fULfR(dR2l|+qY#OCP~Hn$T^I3d)Wl~mqT_L|d)!U5oPzovhWIIT_< z9Mp7kBu@7lM+46zS2>eUbQ?!7H+%rX9e5rk#c;|t`ilZb(0~seDMndIDjyY*TMlHE z=$-kHTapL4S4rf)1mprxR7kULIQZha0DfzXH&@Byu5oYo~2Jvb{% z+wxLv9nc(7kc^acYMkeYVVHn=aP#)7Fmh3O1E-AARo9E$e)^2Iz<5pdKBaz7RV2SlAos#0ray;+8%-XaNzkAF{2-qK$$xW z|F&$pu2De5?+L;lmxFs*ru7BE#G3b@3eFE7Kmt{NAn*$KSKv(G$YYY83rNqO5ctOA z2HOAvfEb{YAd0)5m~c=!^#=YlA-}ecpAQP1?hHBCl%#R$$%9it&*9(&LCaeL!#(2Wm!1gvei$LE6r0;TzzQg>S2m+zHK;uA> z@&fWB09|(xf5ap>NJwknktT3oioi+VSQwDL%SqoQ8w+a92kcSByeo+se03NuV8T;+ z45%+cEam2319SRWaO9s5ry$ihNcBpvW?byh^dGVm+#{>BThk4qJD$Uq-wf;yyhX-= zzIn|VF5?ZO8wK}5fWL`}?hd?xj(KtKLbrGbq07RzIxau&D9FLJWY(Zx3?Aqgp~`@W zSVXO5!57wj*mPbKI2Sl&&QAsoZ&bAuSC&-F*?U(K%(+4&uQw|S0KQAx{CNs|baakHNYEEmhFy1>nq5SBuQKF2QiGBLX$yv5wqL}D=+aETrl)OxoMcNxi+A=asB$##1mlHFGb1bW#uRL20Y5TLCL?q64e zU!>ofY`htGCGb|D=dq0rvR|CFp5niJpG{leD1%C`GC*X`0ByPjzEG9cet0BpQiYWC z$vj|XOwT3)&WeTC2~@3ZL5c*{tTclYgUcCbP+{138C6%p?cIJChHK+^3~_WE55IFfdfk7V#=K${f#$j^_9g#(bbWlNLN>!s~LLY4XP&^j;Qmk1c zY2QhmV_KTE+|&o64o}9!ZhjVRlo>-9i(=zts2SDNC_=%#>m~=f6#74lp&R0z;y_nm z9x&F6qOkPOZB%asKoN|h&C1U%>1zsd-QM(J_`X+OzLJr~1 zh+FvuB)tnggY^Cs(K0&fAcJOVTn=*i;0o*aCE9Pw6#a!PqoIY(qsHK-JrBc-;#J{o;{flW>$ zzYM0F0k_xvLLc5Z-Da+{Lw~cQIzMVEBE=pAMuoV;DZ>J_kakpvE#>X&EX`KlzKVij z)VUX}m4N$FS@S?`q4IXryvrq6h6mFakMW59Y8Q~=1x`ofxkZ=Yxf~UcQwg-S8v++_ z?0ewdJlqy+7HyS7rywoq=a4Y+=j`?irux~yOU7|1TA@H9fO?eUz-nj)NPs;ohrVb3 z=yV(SbQwfe%YA?xEiyXC4m;!d66rwk~+{0BrpcL4B8}gP2(W`mSe!%Zy^s;s4Rg- zV4Ro{9bekP;Q>s1Ve?6JJFNh*kldFKiDC{8?> zZ|FZk;#4LE%livT_kdyf&3o)f^!XNaOA^GLwk-Z6B{RPOmXr(1OPCVn!r~$k7Cfp6 zo)*|2IK@FBG9TNh6xeaXG6+H+w72}pU1$`bcunNm?Kc-BF||S97ExTEhbV-VAWalr zNfZSnikTn^bU+XU2Q1aGmyjC%0(&$|bONuiBU<~KG*M*lK-qAj4C9*$X=xK_pg|me zC-Rpfw57Zjnt?3$GM%5*J1(Go zkGVLh9Kf-ESULTaR-V8SbWJ29rb=55a)FI@vVI;P3Z}j5J#$KdvbX0Xo_MFDh9Yfi ziMG{ygV7b}1|aUoOLqizAVv<)i;XUA>n8%8^lm>Mc%gKM@^b1?88Ge+bY;Cr9)gQxQwg%4wrt`)qF76y-qa- zjhCzRA+`DENGwI@j81X|gwu5W9d{sdBFzJ zKiAR-WB5^H-{IGoi`qZ&$cosey7hP~>b*TU(ERT}jk`Yrq!gJm&mJB!4)hG6I@5iH zae&nhP3*BQl;sho9J8%5p5)A2BAd>jVY|Q?|Hb~_;wT^1;0(e z8oy$EjbNJY9%FA{cl<1@wyORpUnqd-6Qcnmr;|VZ1&y-_HsCm?zh+k=DpvC@Q$5sl zjj=l*D#6zPZPj|aLFdO9bccjVFeXh|SnxYJGBCICs_8e@TiK5#_lErq zc2HsE5{5EUozCv8bi^JZ0FT2SHWOAx+QJ?oBzUu6NoPIrTTiDp+U5JT-H#9`l5Jwk z|FO$CZ9c-jVrD0vK#{)FBh;^4>*p_i!8Mwr{bb`JQi%(Ay%YMvKMSn=IjXZgTZliX z3dU2|_-=v~Z-S`Jvf_28Y@xysyrF9ox-q-y;LN7(rAy`~Uilkg@LRYzLzRG6eZ2l> z@Q4Doj6rIifbBcTf( zOThmUrI;#I8UcUlb4Znp1t+yd{j6in3jK~JuPbyFG%vRed@Ho_JE&QQ5S&nc$D!c4W+d`1zXRE}nYsIcUWa%gb%$6IyuLzf*&95& z&Nk_kt37zz+ zEM44*e$}?0Y?+NA^)XO->lM!Kb>GEJTAiek$GL8Z`nQk6f?l6_0`gPd9o)!Fcm2tgYKl zu|WtXQ~eUrl|2`qb>+-Ot*s01UUWA80eUGUY-To25*_#G7wlR)jdAVA*4EOfur6Y3 zCS;`@{S&Ok55{*z?1`%Nc&ke-v4!s7Rr3jBirU`s@HH5=*bQO;yQc{Dv#_(NJX5%^ zGr3h@>T`c3&F+GOpaNUBU@r2C7~_AEU3FqiXm0kJ>ff_8veGs;u^8Xa#pwUB@F{q} z24(=O-qK^x;_z#X2d!NfNtR8XTbnS?((gb&+ei4$H0%VznEsm~_)}1{+vJ3&1}FxH zfNMhbu{4?ZrytAl+|EA7wsSnOl-SPxi5IQ$O!*UvE#R8vXWbVCE{o~SA;YDoz*BnK z2$vX4SiQVrkO$vn$x^wto)Oj08t}6IW^VX&I1unpt77yQ4ff;~gOZ>@Wl1*OknF>))Eg+gO6 zR#hI{(Nbs}id9ui>8ey+_TawezNJQ0g}yf#s49*x&qpgBHe=UMj0(*nA zLhF>+tdMaibO(Ef(c9#A;zFt#3(=DeI|+nf+l(gxQzAy|-Nx!7crzDZck|j3tSP_~ zfK}QGJ?$sg7Mt$-%r!$Rj0xu5Lo1X?h~L$IvPavp4+r|Kh&ii6!Cft{K?u9ZOCYcJ zgSgzm_&OXiT4cIsp=z&DOF<$deVZ zf?Q%lr`R92knQuKT(DoYZ~~!4Cz>AupQcwr(sngCGkCz}cd z{SqcY`&&9G3X0~ew8d6=W2=0ql3>MF`ITL<>Y_kA600sw6#oT?6~;B?%~&;!dtPlz z2R`RI%OAU0+d>PzcbmCu5a3agz)eX$WK0xj}%O(z8?dkhNoLsZ@c zqi`H{3sA`l5*L@jh_Wj+%Whwx95-9J1n^ALe&U?8LfNnVq-TY(cST_K(2Ce364Q!U z9c^UZU~ltYbh5|@`$=m{m&C%wrgP5XSlGWX7%plWXM}yYHX;tpu`8iD-Wlw{1a;WM zPJQQy{ePz@m2>*ga_v#!nrQUTL$cns|BDx3 zuvlQzHvgr(T!hQ-;1Y@AHRie zK&I}1#CERxtdYdqj!5FKfNwzPhQP%GZ}W|^I0-4vsw0UXpA#>5^qmeS3wH7I=1w%= zPrUej!Pu8d^;6#&?p#{hff%*0#XnpmDUUJR1L6F&7tmd!x&l==jOy@QV`(L6#i(}7 zH&&HtTUM#smN-#Ubf!1>u3Vl!ZhHTTO&S~nf1tXOLJ0+y|6TR)q!Kq(>1F6i@*%ge z+fb4ZAuj;h^6Agnw7=`QDSqyzKpgMj+oD7{-ZKzZoBRAs+*)tuoaRHU;H0}M{E7gd zn4)*8>`3t4X5Fav+CkgZA$xTNCel(J2_#aC!ukdO4T-wguXI>5*jk%vRy3X9=gb51(Y}l0s^$1Zxj-xQ5+Kq8^HUDY<=U5>; zqav&cfqM`xP_+^C<61Wrqv6KNYm#yb&bgVij3MCRGuZz;%^!GP+tRIV=}~YKW|OS< zjlfJsv-*T1u#01fPPu~buJh0zV@w0Te+sV~>Ql-oyB%mek6(XL%QKh$fY%M33LPJas1L||k$7;8u zrBaLoiP2RnUMyxUYRh%Cb5X^5R8ghxbOs+%o8QDoAXwjYnAm)`&h`Wo%?Fk&U1;oD z+{u4ABh322M5HkmIunVvEVzr!xV0xb!7lNJH&)F!vZ7cu{TjYlH9hymvFZ?hN@6$1 zR+Yu7)%IhJh46~O^BIShUG2xca%X>maR4t>fQ81Y$y05i$IlGKW-}-v6svYxC1+!^ zQL6)QdRdLOrK=x*z*iqP22faZ_v6}+cHC5Zcf9YWNFw$rg?FJcuLGq^ISWS6_dA*kK^xC}8a*R^9f+;bJ|4#!^DB<+ zgNRmn=f~X;V9-gYsfe+#J%~N8-TJ??1ph7U)INUYzuuy{vWg+X7Iwa)eeTL$lxs!t z#71-%ELVKAuv6%VhyVgRyC(UdEBT-^c?d(#gZV;NRJk()Z;cWFRM95{V%V_nCFHVJ z^65bo^{uqmCUi86ib^{sSGl!sbfhYp%aL^c3m$@Rsom8gCJ6pFlMxXsi>N=}0OcH% z6N8?twfzN(Bgtzk4=FBVyx!p&i){0f#;J3S50>DrR@jpT z_Uxi&d~;K6^2o|0YZv{Xx+B^{zgUyrs@j|OBW?~{50y1ug=uFYN=+dud1P@WdJy`R z)!KaHV}uNGvc!M~%-SW|PmQ9eda{um(H}7~vQJ0y^`~(^IED+f1!HW}ham|CWk2Lf zK9o(_)oyF7`zN(`2uZ6|4zLq!kI)|hwlNz3cp19M_Pog>DZ*e2R3&C(O@pb8!T;P2 z)h1@hHXkN-)_`-qpa)a+a$Dma`dZc2_-TEu!`Ao-eJ$1z0e!8@)_4m89UE_^>kRX% zkTtxcwS-)vUzlZuC9JcwgVoNhHU5aiK&-jYpQFi#c#7t+GspDT?Yt9H_e}4Hdy_}c z^e(-z1DBm=dY5223p&K-K7LNriP>?K^D%W78=pMNQvQ#zOkP`rcMT1!uzgRXhB2`< zUIAzdsgZQbj?58V5G^NiN#R|Zf`b zKathmV4n80EoU%&o)9e}x^h^H;yls84JZB`jOd3UjC<+MSew5Ocg9^sIAauXw#g>H zvCb_}nrxz$UX*Nd8Fv*Yn;1D?X53X0fl^V7>k?43FY)j=eB9d&sYm+^^v@8P=>GzP z)^~b?FU!M`KoGSF#v_ySVmf1pu4P2*Ceb#`U0?quApRwcN(^Sh%3o_^s2}stHJY15 z2Ff`R^eoxrLkB(R5xN6bSDrX0I05w>Mm>HUH8Nc#+)zaid20uqvo+(Fd=F?)~ zY%)xO+bKQ$SDJ02D3Z7aFJUrKrN+=Zt9$xIKTd1ytI=!NF28~2Fv;S1|3^@75f*2% zKm5(^P=oA{(F>MOjlqjAt8A1 ztGL_bN7`{p2k|OUw#<4bO}w}e3l%P_garz}uN#0+QyuZ9Q!9HTlC!f$Cz9ti_dFG-O#&5Whh^qKNu3A;vR>#d*2Fk(UwMVbR4L2;I z#frPje@_=pIbL8ap8a4VTeW0 z)=sB#q5X908>kL;GOg_&hzocl^|Mv2*KYgbiWMu)9Pc@2?2RA489pUtFU%Ou{e4(~ zfdt%Qkhxg#%&$#UZo&xk>N`Q1jg&`>8~;iP_2bDKCG zaxM&nbOF+W7{)K)bFi^`oF)nXE*6=I`@SXKu9Q!C6tRa7{J;=xj@&KTm}o%E2Pm0{ z9zYpJn&$mVtdi(6uE2Y+H!?g8q0F2-&$S>ci#j>p=ZLABr?5P@xA`PKBhQIUSHND) zvPXjb&4)!#=5(umo9$au%{KopP(69~PjDJ2fLMU4@tF?-f??WoS7`Tjpo_)Y!j1^u zW?8rVVP7Ly1Qh<;E!@<9Rh$3cQIc4CyWIwca~dC&MG|wqNjQ8<7gsfYNdF2V*u6^x zhROAaHgL4fU!yUT810;!_=k0pI5vs1oS_lWvwCml4KV8%nZte1${ib$9r&b0(RU+{ z%EHd}J=^Mgf^UrKvHM;M-A>U_2%(slYaqz=FSJ> z@ckTDHdtALyK1$X1XeX*4IXofLti^+Ybw*%zGrK?6>ET|o4E#Pa>IAW{c?C`!w~%t zEzkFBdY95aPVXw{w^#9jh|*xy!GU#}Ua`T}R2U9+wUQ0{jKR`9fgv~({fN-AY~?8T zV!hN2{^5Q6%z4_LHWg0^?r%OpZp9&|y$IjjY`TTBsm1Bl=@1O#>+6CeXW^LZSvOxI@A3RCJ!>3hmdSp0{y^md=hSN<@nQig8n_(VdsU@#wRlrQ08?a3P3gOQ*f^XEpZ5pV5xvL-IzI ztps~peu%w62nL}df;~c5@u2(FM)T7ZaBP0k=zct~1IEe9r)zr7(zulrH^tbHQS)@M zXcU|7+y*Raaa_2RSE^tgi-RM%AyZvOCqBn%@ZCTbn9te5=IhWpS+|EKS+71gPTRDf zhFq#or;TaF+LmcWFnpC5`T|Tu(>+jyjgkngZ^P-Z@xH>+0=;k9Cki$K?NJoV_Yu=^ z2(C-ShA5{)mG;If<|bZ%?;qq?2kuh>8F@P_2o{PlZ79sZ2X5I&K0wk-Q=*h-dQScw zE`~y!vf0NNXau7pg6fgQd-bVi;rr4@1qnWwTZ`|!SlBszqN^f z#5C4-`k_QU8v=NR&DhhI*e`TthtXS`C_rZn&LdO(JQ8v#o&Q3@g@eV|7ufwUxppA} z`)BV$cT!}+OIf!R&UE-EDTtdns zSZhmF5f+fY(HTmHkId=9rd1Rrphey7L>d1p?dWbN;`m?tv1e!}TMB)9NvxfSOs^U@ zoY;gX8UDmY8J#&#`=7v-zCVdhVXlD%cyMn^ymwYm2?DHs8<#Tg_Ke0?KZT8jtYA7SoG#u>53Rtu0k98_+N)?LG`0`C_Ud$XE;1C!b*GwccsY~#F_@iyk&)&|I_ zjOM))QC8gk-+JdE#`;cT8FxX-vc7QBp_H9nN(<asrC~y4P1& zS96Rj^tiiwz4J=>WKMFm+P&Uo-6g&h%vLS|PIAj$y;n2|IU?JLixskiZR0A*)_wLL;c=xO_DoKS3ic zWsQh$n~dSe3UZr_#8u^Y^aYPJzrYI|M18SHxAMt2(3$5%w;+R<42NTVEP0@p;c&cb zc|Le}-PMNrt>BvF|H}rDa{omAeCtnJ@rE}0#n@u-amewG{wwd`n1w9G%}H5o8&gFdq7evJ`WLdPC}~m=9KGJb++j;~o&n zE({U3oVn;>{@xp4O}nA?K*RIFpWXI6$YK@*mcLFP!T{1w#2s44xr{Vxk;6-YX6Od= zB1*=5*a4-`n;ripj0%Wx-TX^{U{0amwK)5^@pV!sEn(<_@;vlitrZxwaDFrFyX`xL|imKgS|YouSuJeZpO*3|4LXxC6(S+DM*#$Y<>I))gyD(gw* zRaqaFcIeG*C57u8A$?G7eg_WAUV@95%Bc6YD&W(H{R2?VH+_;4h>Pj7${UEj<69}hf@_c{S%~{KQTdCZkAGolge#a zl#~gKgLZDoTCsk`vOEk1x30cksxJ^$M ztaI=N*S5r`kee5V3KvX@l%ZPNpQ02da%ddqu@IhLXSVsvp@!kUp9|wQe~5R+G^{kK z-TIM6&0i#ov2y?Lpp<>naINoj;Wqt|TdrD@jd!pQwCMQx zS>jg2jzHPz|HypNp_S|aER|N}pgUaACV+l;&=2vkF)dx&Cyh2FrXf>+p(*wV87)f6 zG9_fT_^1TH4MEYRUbV?z#IfjJx_IFdAo)>Pek>%*cs4{#g&aUAooy2lu!B3(8}El^ zE*5Vp+*yzlaAn~yr#YRZLMVY*qZjKxQ_!@)xKA~9u~R>=vWSe`Z z>00Bn?a8Kb*iCS({|W;Rr)u=DtNnD7P96phWT`p&i3ON$i>&aH)y9tY)1V3;`paNq zXEdqVwC~4p=^)i;TX51JSEneb$9!a7x7D!ee#nILrFKqY)^^N9goZgVCwvGG8@FV! zzH23yxor_}4E(d2aKs$9?>bNqD6US2hDJV3Mkj#nfj&r0ZE!>0hgN48gi)gm29l@|_;p!+K&hpg zAlrsOm;^FD4ANcOO1rJ@*59t%_P5xr1+-NX0wkzaURqzOw%FGPqZVl^FCz2*e9tqJ z42o^{+W-H${<*HqbDnd~b6)OqpZnbReeQFg@OIGBV_oM^M?7EjcM(4~j1_;KeLEZ0 z9hceOlyA46-o#mxozSnqP6Pu#Nrj1PeR(6FNHzGGG9v|cAxLP?@Fy#hxBHW~2eY1B ziuu;#HjbvmlRjfamaH?4G$3mK7&@Adkl4;zRgx;-Zg+T6pG8ZOf!H$!Vy`4CH(lHD zYvw?Y3Uqt6vTR6WFT{>jJ67Xvx>nA%Q`b_8sz_D3IyQ$v0CmPN#;%*<8}FYIpY3c} zIf^8y6~43LN!_`pQoia8uFOdKzJ$5;f95p9`}W}y8o-oVLo?h#S6_nLb4LBB>BH;O zf)A#A4~~s`s~Pp1=zDAKs4p<1{%QLt2@C9|pa!h>03$zLBY&OU6zDyWJ2W>iG`%k~ zG%N^ylH8$*rf?-RT|<+f8Ja+{$)9WrW}OGQLo>bD<{F=6V0QUHrW48b0bhE0F(>aZ zKwG)$`tl+b1&ZD&kK0!*qlQmTH&wWd)PW)7|e*yt<6N?Wud&B_-94uWl~^}rl2E-uDqa2%xP$b6@+C zA(?QmDrRpQ2B5yUY@fUSpV0dMvajrMYwP#4{x^)gA9P9dAFtlmRgySSv}zKsnG9$+ z7}SOlZ(`3%njPvs?P0lDRl3Obb=-5(i|IUDlh$MV=wZ!(Q*1ppJTe){!g^Hpn{^E|J+OODQ-0$tN!__t8F|(ne%$~Tuh0_dSlmp4O;j$I`wzA(W$$} zXyHN{0H^U))1$A>sQ!89F2Km1clz)eQnGDN2G^;Jk5i}L-pNso0jH$+8AB{D){aJ2h6Zf%8a+~9x!jn zXa_}|f-^G1r;ytN@D#b14x8zx(Qm?8qcn8)m=x5k~jzb~TYV^;c|#h*8K!-kys z1jOzeQx}X|j67ebO@>Arw@Vs8L`CNr$WuDU^~3Rb=sFB}jVEXnY~A^4Ga%UqhiGI^!* z8Q2+iX2qiAlEsTMJnUbhj(_-$(VvvV=qMqW=b;CUM#u}Q&z(%lx5*h0)`?xR$M*4qY-wW z{m94|LnaeEXXEo46-)_6`LURvGq^1J#mQ>}Kqr}(gejX5WHXh&p{Tp)FZXd)f_B#= z{m&#jpYf%m#o%9?S&iGv;m0Ci(t=dYgR-Y|r;7}yD|4pHbsfLaC$w347ni+$UG;8l zWTyH0?--i4f#2qfozoH=2#%-2Ug$Ap1Z8s)q~YT_7&ZaA+?Xl46Mv0ZO>K4eB* zl~N%-X$T$u5CC?YJ(Ji4HXK&@gM1^`IhENtHZ8cm<06;!&NAF}hP3KbLEXXMk3_OL zlfm_-m>Lz6&D&`BvFk}_bh)v`e~BAA_NkJns04 zteR%mi=1BP86!YYp2MF7kjujDEKa|WN&4@l|$;6 zTN^&kMuK6s>Lm zL1Jn{aS8!Nt`!Y$byn`Af4J7@~CflAh zNXqWB85Jt1Vg}+e_8Bn(jCZPZz3qjNaWdwvQyqo%hdD*|6yA~XSRjPxm@qUEYe5JhI@$b@&b;>y%}KqPrZ z@^i&@77`I^PqrZja%zH61vXVtjVc&fX>IrrEJSwjzWH8*=k7aBPt7!q37f`zU<`DvF6b)HM5Y4=#~L$H$TY2i3C0X$c?%7`7ZlHq zSK%|;r9%`sW#!J-*%<@n7g(9)^~Ct(DqZSYc@9Zj`ncNVO8M=#%A`u{_*wtwI=3Fx z`h#@RUZ(|Dt1e4zv$GED=c~HRe+AES{$*{L{g2Ic_8rsLmF6@j0#5z&?9VO{M`0{t z-JJqsUu0h&=-rz;8D}#Y|M39r9M)vq>rO^&i)#JJT202h%w#OaDGr3@`k<@*8mcwZ zF?Y`ka_FEzs>0Tvhrt*gu^~02M)j6x3HZ8@&@2z zvYY^~#W0=CEk;_3y6R4u?2flteNlJ%_Mq;>R|(5lg;94_$n*kN+0QTooPs7p2#GOv zg6srqB}MRWmr-G)DeheQZ5MsCqY>sLV$Y|Qhx{fVhYiltdmB~}at2w!P=`hep?Bn1 z^C?fq9E!RcDafwugM8|cR3y8)PpjP2ak-%bZj2SnRyXS9I# z(psdEQnWtSwwd|W!?(#nW=LJrdtyl3ONrO`RAFTdc3fm%s2*bLSBL>nKPuZVVo?K> z<>WI6czV5(XKpE>p?>G9G!j8+5KJ@70|HY&9CX2&tau-NksiK;f2j8J1@5@>J{X4gs zO_|Wh1-w<53<~Jq`IaMyW4mtkJV3jeoTIaVB8#t2$o^$TVOjH8=81jR{qWF+5Okem z_M;B|5_6CPv@@7mr)55#zACl01o+0CHdYoQp#yPzSI5mM3}>c^lpGaLt@pu$Wa6(N zzL^;1c5`0j=0vhrPO6PBjX1?bCU&`QR9l>H$IaArZA)Z`ns~FfK_JcNOz2O;%tEz;rA0QaT6FCDJC+cNPtqSU?_fpY zykSM{ny+ey(cDeDp%vKEIf)8Vq08xUFe6VlLQZ^Fr2O5aHL{`nw{QS)Yr_Zl0*4Rl zFXnmMx!ufhRuqqwIG1;Q-e}jJs;>LaDXaHowJxvP_Z_SE8G;y0zu8qvVNvZAr0x7_ zpWRVhDH zf_-%V>(!@M6yg*57#d9gkw_Qa0n6L}i1Z-VmbCZyb^@NVXD{sc$_r|E(mvE$Jb^{& zG^)H~>TQL1ehl7TCP3SA73*$$O7ec{_8P1Y+6!?~Qqyr>_lY$Wb^B%J_JbI6y@VEO zv@2~A*u1FOJ_^^=V_+UhbJ!+fc*{AaDSU`0BNz7H5@lL**noA&&?0}TlC2%Y(cmXj z(@#|o-8R|fpNbQ&_>$v};kvJ{dg%5e0oSy0F|Hvcp0@jH2YCOs2A z>$06OV)S6*TQ*^p6Su3Jk0J>(b@9Ot>pYUUL z}WE zji+z-$rAZ13&7qP#ZVGl#M>9LnA|fzW70mDnB~KALdN4`uuw?zo5}Tvs5hnod6@9B zgxBJD-!IVPVYhK-GH>joEdLP9@(<>K7D_=w&(U_4n6s|tErj}$$yp+8F6VjOGg8i- z?7|qrC{>7Abh1TheE~QhB!6k?5ta=CKH8L28yu`B#)CC!$rYRLE6hZ2hCDE-lqnS`%vYKiB!kUuOF~4ms5L z{t66=@i6PfT<5kolrDAtp(bbd)mi>2O2pGmsNJVuXL!;^XEOoSIj5xwxKuiq>D@`V z$qN)^`dT^l1=G_S>#Kv#Pp?sVIuqUu*eWjQoJ|3hu97SA3C~G1#yX@GRgZCBCbAhN z$N}B2v)!&%)~PGfYU{sM5p$i-VOp+Ixi!N+M!B5%9M?S8dCr_*DAqZ8Z8hf}4}H?i zzw}m70_V^zW>O8UlVV?gL+cc;ztJhH{C;~+i|hP<-VieczCY#}{_veM&uj|GQBi3cqj+Lt+S1h{R~IJ(DgWciSn=Q) zny10ceF&I4S1^CaB|nn9tvGp`kL9bum(15jAy3{@zTxC_`5d6&!23P4i^$U65??mimbhuLf#s&%(~YO59!n-wi!22@DgeHgX&P;IN;FwC*mqv7_X!@ZGs zeqc6@QnsO5bE=QFU25J;jgGv0LMjJyaCB&%^_I2)_l^=M7|3my2(#AATL*E!!@n9{$24KfT?AS`M z);AD=_kc~X%+~s8yy$4Mwc!dA9pxP0`w4*=Y$5f%Pst|=t-B_gIJRK&tPKSw(r4Xu zidNXMQe`w+`x6VTyBrfI6R*CP)JVns#KeUaC%4?}<5+j~n>hJ7@B4v?gUFb*UABc* z-@jzz?lJjlOvM{ax!V49iZ^s%5x6+8! zO^KBip3dtMD=R&nGwoOv@lnNB+jMm0M^#J(C$)W?Yly{(xl}P1+p#%>&sX?7JKBoJ zw(+QkR~H(dkjXc;Jec_*;)FXmyW0K?v*-)nr#~|=9&@V5lEZzp7!n-tex?Lf_+)GA z@b<4%VII5}PpI39k(f9P2K#S_{+Ydi!Jmh_pzG8R@BVr7Z?Sitxgx`L6`R9dq7oS=l#3EIwVsZm*gw3P zyry`NO>sRk%Qy{2e;G(@zkjAWWjxNwzB_f#{Xh{|8rqOr>C4Egf^M-O^%|U9z?Qmu zqP5k^8HNgEk2kHYv+{D{JjSyNu8;8a%{rGI3GW_bez+*f0XOH<1#-WX*j2nJ>AM{_ zq%*o+Auon}z7S7p^DV{4VRlxB|>j08-)>iTh25cGjGQU1|liR zm|rIzAjO;LQF?lENbz@-PcQ{&|Gg$PV`1v9MmBCKrHV`*BBQBWW2w8I{2LQ#icahb z5-+tv(CsF<13q$R54gsl}q&L}cs^d}NC{Bck33S{C%s`>Uu5bn+60gc1Sg2X8Fk~0}P}}WmLaFXL z78o@&)&1RzOsFK)?T;yO0ns=c=5$NqWv~6vT8$SC^?BRxTqtq3e6+QGHs?)iX(V2n z-sx~U@oKp_UciA_of|NO+P)*?+z)#KS%{_9)mWzL%G4GSwbZ%|kbiPkXj0OOsstx) z)-_g}$PjTRvU@N_I@!!}Fmg^-`;t!8zesE_^Kt1WTksC(H3RQe>PN`?$#~Of7dVfS z0l2o40XSMX0i59l;9&uLPyi2L1}upG5Qvv1b_?Rcj&Jf?($Ocl4*>V_>_p7W$Dslt z(u1?Jo^CXsnachpJ7qv8ZYEeDB!kE_!=?w8?9@q`0-+gE4Z$Tl`&oz!gkgG@0aS6a zaFiVqKj9Ov$pu~58Tpob_k3o!+^+X|uM0vgFS7GK!7`n`tvI^hd4GC!dNq?W&oeIx z?|%#4@2$ITpcPFmKNNsm`RQFBq_P9%TyM8yi zIUEGA&Z*shm_6$(w19j5OyuqTZ*}aU0B#;MtuQcidzu(%rI*zmK5OHTkYMNEoH!j= zRdRONqs%bNWXA8)zxcQ=eW*ZG=*SKE;`T2>W3|topcqiUxBrp;uX+Pk{o_d!^$zqh z@*0j+TOh$H_1M~0lTv>v=o1FJI8gaOUi)QtPO+apw*Sq6ymqc$dpx`3jBwfDfrrhK zdjRW_ZRdEO-=A*Sf4t*KZqPH1dvw0Q?<&cH_Rm`Eh7fZyV8h_RxXAd#hj!Hviqjj1dA>N0pFi^Q+%06J9XAvH<05PFuZedEA3|t`0U@;S zsMYo|PhwHPB3Iu?A#Kk9AEe7&1fN)ep>yOAZ#!3btqA#B+hzM4d7IEr$p484ArU-3 zyxlxoj}iY<-k(`yUB2($H+R*2@p9fKJmBWK$bGi{m|VXg{)wa3yvNz#!PY(*a52 zG3kA?#frU=ig`(>h;hJ)GrI5`QxBwC-%hRc_P)SdxfS~vWH_iBT_WZnl+KJ(5Q@`s z?>_e>q!rF9Q-IRyH>|r}rkh~m1X+QWJq2y7)CN?=rs`iu=qejbV~ZYzPq3Z<{#t zQENkqwFTS3i4AN6-rAqd8&XUt_v?saBC|Ty0+H->G`b2W0-Z1SB29TYK5(@! z*}s=7MB_chi}@i9m+VkthUK_*mrmrB4MnLcV}DnD&>atY8cdab2w#mS%XZHsy@DY@ z|M~xe@u01&CvuCdJBWgGD@M2Cv24H88FxI$W<1)~!V}BWXcgmWKxp-D%V_q=QcgQ*mp?74?_B<#B-hW0&n|!d@Jl|F-^IC$pD!CHLX-KUv*-iV)d(&6@Fv#0 z6|2=vMJ-ULF}ef{{KV9A-fsL2|17sR9;7p@;}Pn(k$-Ko8ra^rn~2wF(91;Xg93Mr zZWBZ@cIWeyM@+!`Gb?jAyrL-6$ZO!0QEx-+Do= zz>+;$D%p@Lwg0(T3!OF*2u2CoBgbCiHEa()%$uidH@*!Fb?3vNb=?U_WC&h(HF(7( zVPS7gUPr;31A&fP)3*f&etS;(wt#cNn?~Khc69NJzQUJE3#&&~&jLqFyf5L;ct$#L z{F8TlRNC$e=XDg^K(vzC8Xovvq4%xy@)G+&Ehg#Z_&Y!~{-W=6Vprg$($i!K>3SyI z)`q(tcF~)At`o1;x!iQ?)B`Qe_=&LRg+$hEOgq#%>u!u@3lO@Q9wBB}mGgy9(o2lp zroNWIkYrY|cUF+?pTt1k=1H$v_y5?-nNaUAykJ#)(kpyW&I%b4?W$~QpQAJOPLhoT zCgO7P#Nw%XOf|Dgk9gc(*8|kN>mJ~j!|+|KSV{B3g(5`pNn5XU#2ze3R+tRRj<>h9Duz7=XTw$M0_Gpusi`yeA1=P)Y_bavFqqN~ZRSYsEA|uP zf82h#z3wM-DEo=cWyALFrS2sJ7w*J}Q+GzqZNmI&Zw6Krk8ZwT_KtMIk998Yz7U^KnvP6!ba z+PmFD7ijdTD%4Ow-S-S24a+t4wQSuj1=50PeI=#>)Enjhc`w)EpOptdW_de{z{HyT zHkVO-Y12Fe?X8=a-z0f^&%o>2MwEs@S8s~iOvxTQKWz??b9;cgZ#3Cy$|=LRDAUD* z-UHCJN=|le`$y@3t!>iq-~eBiY+Ho`L2ugHa@5-PRih$4YHi);JzzdAo&OLWjmbKv@waO>IB7LsC+n`s((0|tep}jwfW`plhr0rg-?>r0HZS16Mg_BiZ=nN zDrYZKimj%4HsU!5OcR@&uSiM)^XLjAQVMmJTE+DU1uBswm-ZS#UEZeS>ER52o++A> z&(4(}W!b^c4NZflHpWTXu3DYN-!o(gL@Z1vG@nS0D*3x6`9{P+YHd~J*jm_6!O^wS zo3=bC6F?5;Q6(wiNz1}>K%1zVIEf8jHN);P6>2f2{0qiP9YiHgiP~HHN6nQC2%NHy zn-{n0d4{@>sr{T;aMX9{f+2fGhzjJdvV61m$fQ>it0SKF)+T2ywp2uxY?c$NR3ZYU zh)+7{lyRtIGZlIFO!_H}3ru>pzyp36zx?~g54!ln1!ksvgS2bOtS=fssq` zbbVmtZ?udP8RA(LC%_TCf52S)rTHkFaK**Z>kZ*PASwdLN$+obN+-RABN;ivC5D+h z2yP9@cB`N6a>nGA%B~NjI@(hWzm7Z4uoZyVup-2ePir`Y5$udhk5}JP$ps_r#(dA5 z0JrOXiIuIM_S;fl8Kw+0K65>uABy_e*Ep#gitXvYPJK3z7${2Yw4(XP zey(jRiot{RmsQHcqoush+S)7qHG>qgj}QE=z#L(#E-^ z`m&#Pe40`PmBi^nH|g+)vru^-af|N-pFlv$+vg@6J}QJI|2d2QkJ1b%A0qA8GmF1O z1Q+KuH#y%jnM)4uR+ghO4bzm&C_@4Q_VB>V z1>WH%?+NETQ*JRR)PAXpXVtg*tZxc%Uv&!;*%F3r_$CxX90%j#d6)ke_PeOAs<~yZ zeT!K8kh2|&4bGuyc6r3(Lykl7rVftp!by+(1~P}OA(0i@q8#JSp-;UJP=mL(hu^p} z5vLqU6O%MChN`>F`M*&}Vpm0mIlm`UBor-GZw{+zbin_T)Vx^t?mk{d^=a+gc+EItyu$Ih9n0Io zh>MK`jimL2oD^{WOi<(iBmJvOeJ;kJxe`}wVS&aIVMlk^U_X6=q+srNdMhZK_PbJ_ z+Le3w0mq5c+?G{vwyub*b+qW;R4L2{L!8(Zaiy_f$M$K)$Ym(S|aHZRR@an^6A$Mv3Mp=oZ5bIh31ML+;| zqqd}DJFQ0ub+>50E^O`K{7Sga`R<3zFo2YJdYV=nWEw*p5gRJp1>P87aqGxlRQh*J z;LWuN;;=DF9qu7v4E(bV7uVt(`41VyeL(}cP3%dt)Ae(%2wnGGSX})9hoSY)!GGy* zX#I<$p+lpgUyp{I(a@`-q2r^WQ<+eXrK!6_V-N8!88`X#m;s8wv5HCgJj?RuBgVUv zypLaCe@TvvHre?w7NfqGO0VyDosC%-X!-pNfoEatd6={jXx+uhc$*TVt;yvJGJ)2G znZV-3iGL{J6!>SLf!>!|QZ-Xj<<)q2DKc(bN2b`jmmHI<`#&aoI-xBY?2Hk18ulqyf z?wGLVB-W)L-`OEYUIm6iCu>W0Xp8gChgI>Nrc`U|(4Cw0K~|;|@!&Oi63odEO($lt?sFOvrmA<@>lo<@3EqlAjO3(=ehT_|VB8)p8adoHuIn76N8Q zV`BK!KViYAbo5K^8Ra&6Ta@v(*T?y#rEwe-6eLc2J7m_0JY?*dC6UHVIhI{3iDQl# zE<72_578VVYV7sP$xI9{ReX;tUQT^WY_8LX?J5FMpPFWZa5E(ff;556_AsI7_{Z^z zpj5fDv@NDnL6qg1`GXushDKs)5sCs=%UWOiUPww3LCmk%H46YlonK>+2c#NDreLBM zpoA3#9QhxS4znP_>*6)=36xivS})59BP*6O5fGD9T-ez=l>#`p3`;=!IR<{YU@@ut z#4uHM`Sza}x!~c2YA5#UCaPfIME*#@!?Lx6wzg6E9BmYQpC(f2Js51> zG(i1xNSjbX+#+iZe(bIozI`Hnn2^{JV-!5?9FQ6*aCda+t?X!`Iz)})twZ`W%ua&i zAIDuimDqRb6SmkdLJ%&(Dx&{WxI3VR=>8K)lXiFl+2CP&FX1_jQmme1R01%W60`#a zCb7lsm(UIrjKm`%uPCxwCM=+V0ynumBUh0X)I<6FoY{N5mUpNKnq8@UrEVVPQ!^xO zJI!$$?HJ#LQ-(l6OudIR7NA2PnXH&P6ElpvG-AAvQ3euq0wDT>)ru<#HjyQ!!xc$A zK8{w1!SjqC!QgDWR16iKj>#>~2VP^vT`zJFcYa0~DJA>*!{?MFq&MRu*WJet8(Kae^QL&_ zGP-z195nVfviDyev{!PKWk|QF_%PkroR<*g=V*>fn)pv5{-YKNr|=?61}y`rb;5cw zXeDsX65s%pA+Zb5H=$)=;y-Cg=uVjBfZX#F|76w!8Sg{tjSDe*e#pKfY=6d=ScOD6 zt;P8}L~9l~R!VLuDfF_)P2HQ9s1!{obQR45d3Kd~9dLX&-N;MS=&fFO-m{ml>?Yh5 zwqSl{*T=o*bGdt=wf;Ye$LhDHGe2-AGFRApOJDxYgEm3dl+ibLeOb~kwLJ^$ojoN{ zI1)FfQNd4uT4?3nY9g_q7g^6KDnDD)UD8iJrd01;(q-D~rKp^=UiwcY+xcU1ZS_;u z)&Xl4Cg!T=PMsGuAzT^|x>+{CcYZNH@MZqL#s3ce5Apvx{~x3`S%G(ZBM9jX#ueLUFW+<}KWSd(HV_LJ{tSiy4qtK-rr zu`7U!pKWyjnn*udgL|d-6q&kv&{=RPJVdG|e4JhIIO(Nv=NtD5^)TgX{~!zDrQmvn zD?<>f=@_3ZN&a*AA)qtzH{Br~d0Z#a6Mi-GJ%%-?`<&$ORIy(b#+@e-UEKDpMVuhS zeHz7oYnoHCl<=t!0OTXYhvLrih$?4`x_z?y@x62goB~05uL8Xk$w7p}Xc7QK8+~UU zaqAY~_dt5lE1?r@s!{A#dZU0Nkarbrsfj%#_&RW zR!zzmg%U5YH)=&Qnl|zL8#RfcycISFYgj7mjRLONht0f}*uz?a9tK;q1c_+P*K(6t zg#xo=tJw$@G6wKw(OJfC8~5+%x7FDH4?BO)>S5ND@JQ*|7a%v)YB|tM2#YCam#ba@ zOU|D!_l)WzaJdd4vwN3dV4UD>UqHjM?crQpqZprsP_6~`z}4!l)||_kJCHWBu0Z*<-ZFq?@3xql~RrUi!=BAk~WS^dy95iDt z&2Y>3EK>{4TC${O&1u#ms$8tKNkYFJ4Q)23e%mG;rT#{3a?WX&YnP}qooP$HI(EJ` zi%W=brNBw&NsKp$U5r~_E)SAEf6k<5y~C59=^ii&5pzAMQG*U#EG6i-EAl)j!S{{) zZ{W(c0bKqC|6|nb0a{W4cfk#C9pkiiO3gkp!ya}z_-ItQ{w&qS41Sk7Z6*Q!0Jl6D z<@)WAN>xDq$x^VZYvM}&7W9xkW&fw#TayfUY3^dHmt#JHcF;w^Wqh#!Hh!ViQv`7$ zq0-ZS0m#jHL$NCb8FrRg`tO#l%WxL%H^My7hHyWGgt@|P&QCf=Bcr6npi+mGTIX^&$I&l0(?6)zVGo(+abf$L-o<9{nR1tUjlPTDLdZ=9C$a;;_y`_1u%r~WPX=(H8t?GD?jeNs{ID< z&+Bpi2DIF>^gj?>Mm~VG{^$UNGyqyV(T`*X0?7+#1{nYts>Y|N5D;WWpcJ2KqUseL z-aqr&`rxk~iVMpC{ht{M`lwYKu>0M{7!c>Yk1{c?Elt5aj5LsQ zw;TKU-Ge5_{X2IstMTx_G00F>F3C2S?~Ohh&mDG3egzOI&oPHw5B>^{=moGQ z)IBIJyUD)FUd1M-lcb8KW*xC@aV~O8mN8cyw5n=p3GqxA%{UO*YZsc`w>a?f+Vvjy zB|W(xjCj$T*cDbYO>S{3Om5{{F?!w=FAZHj)q~Uze1O$_+C8Koh3$mA<`#CtUoOmA|7mSVx&K@n2@71on9ekz{H?9xZ;or z9g0>Db$-irC$a?+M%IEgX703MKNm-?&E*>41e}>exQ%n zs(obM!$iXdZyvgf@?piRZN$qOP4O@Z<^76RyNKVF^7jqAoKI@TS;{;JMR`BR4|fcw zX69L2h8LxM*Wx?#+IzeMi;|Ty5vOr1kW3(iX>d} z`B2dQn^rd_REAKP^ZWgYSKB$QBRxiy+ufaA2Dj9(>!DNgbBpoVA>Vb=l~9iFBK5x(M{fiwSx};~ z&AnMHGWIvd`{{IEU`yG-V_iUYsbbQktwxH4vmEwfV-J(DeCi7%HA1NjU$4dQm%J=_ z^WSST_kO~5)*Zo5%ARA#a6oyGCR1B%dg7$_wu{_ssaa_=Qe!#a0MM~iZJrl989tK} z)K;vpdw%Y&t4s){#bP_S7T}k&xX!VCeJS|w*$`Ip#=)gE4;Wl(UF$w4x{?Wq>M{=4 zKuI4!M&t$-I=4g^q-mf>1^+rc-8Q-OI zW}9&?b@_!XimY=#XqgZ)^bM?*UR|Suwr3P$(5cjO8J`(j_*!8M#ey+Y!4%UCZWDF! z1%w1-CMWeyywl*yI)f`~Gq^HG(p#J1BW|RwQ2=NH74NF^y9p@9_EnVxsBaNRc4zVpdgRD4$)oN~`w?iM%qp0lZwY8k&`bwbi?c zBzjcmoX=1|oupu`dItmJ-fsh8`Z$E?reawQZNy6}c3FGpRv)wOY8Kpw%J%5C5NpHN zD2NLLQvUB{?f1CH1g!4)E(t)%v=iBJK&o!b{tB`9-BE@Y&YEGjGUO>84;5!A;6A0- zBHFi0ZGJ}SUz`S(rDndJ7zl8dWn(*CReS$UU--Vy7mW8iz8J^i()G)c4=46`tBc$0lvM z@`rPsf53?W1BeXfXDbzOjumQc__hWOoMQ>ZpH?ytBL{+n^50?ZVD#S{?T@%VGXnO? zVos2^ls(G7i(~z`sL2V42Ed`lr zXeJ-GZMl=u7fxRpcLp)_CM!jl4V&yVES`2%*DbW5f|(weP4glYjjYNf@bld}3uk>` zYKNT;w={yLAd1yQ99}U&q?%blHliA;uj>33lv8J5M4Lk#ou4fqbLB*YQ3TOP9e)W| zOI)k4He3u=aZs7|Pb=!WN$aUyxi$yLVKU=%;;ewym2Cf2VjvBXk(<4Wq@f&wubJGX zQI%X>)cI{SVd|UHD!M+zG!`>c$)@OX+qWJIa+;a0d@w_gAS(?NR$bBgGtK6Z#)~N) zffMoTiTM8`);VsG;=e13Q~>XT8Kryc6Rvo=;2&>=zwGKq`om$(t^JVGi=Klulr$(l z?LNaMwvuP`s;I7hGD5!GEUgzEH(72h=;uia3Yy>Qj;Ws&^Zf+JM0V{HC#mu?AED2= zvEa~X*%TMf)_5cn%OK&%LPBC<^qjZbzw%7~k6dyOa-~DP8B710V-~2bYnyIV%ZsXbT*S0H4wAw0^8nx+yqB3pgIwLn9*2LYKj!QW92`oUAH zB&VPQ>?mM97wddhpb3J1oSUrs{W@KfoLQWl(Y#S#p|#29`*k0;OhrRMv4r% zw|{PJ`8ocBna<5i^PN55ce4(yS2;fBIy?U&DOcEap3 zikLJxcY>63jnZB!MMPrC%tcO2SF|`Gvtv`Df|Rwzxq`hALMrViZfWW@!{M3hB+koY z-mc=892HJG0RfdJNgy1(#E$XxF^pD*eaMUhK7F#G9M~#o(D}~7p8k#xTU#57SVfA{ zJ!?fIcr8rVt;HwA_1xK#_Vp3ro2Nt&ZIE+V+OsdVulLR47TKP@1&Xz{HRt0w6mf9X zIO{S0TwPc(GU*!kati7O^3iy~|i7!S2l9?n=pD{<7YR%3HoIjb7Oq$%ui=8;_W_dqj z#&P~c^s@paG}6?2Q@DTC4wy^fh8R3UPDd%3{JM3MAxm?isQ>C_DnEmcAsab2=H#nt zcD~@|t8q!UDL~}8&ABosA7+3zxcM3ryP{b#PBsYUIpi~B9NPQgOv}zjdksBAU~UCP zA@e4H7|Uy;`6UTnsF98}QZN#4W(lCi5HMp2FzXGc^_dYt*9)q^l|e;`odsGA@P6ua zusMdm(=0gHjr%)dD7wUTcxn=~E`*$G+=P(p_jEKN;#}z_L{i(v7Oe{BLN~U;F3MS5 zszw`Iq5NT6c&zKi3|-%tZdQ2LU@o&XYLq~pgF z8NQ`@2!|@aD0{9Y)o_G9{?ILgJlA%-nhP`mAuzSyv>Cu(1VQqvE5X$LVd$Xe&T-y@ zef|omAOCnWiKW#$SNZR3yee%XcXs~q9Tt{kL30K3RuHZC1*UPg)Y=+wkZYMz{_9p# zU|%e4udO1=1Y}1r8o>CHV|Pj$@^tez6!q!hmT*SY(Ao#oIR4H6CgVZpeRf|DDc-%~ z`_{P6Sf^g@;|1O2_}EI`V(p5O!L5l}uBc`DS*)LhO59`;edGH!WCMK!>}Z8<70qrr zu-_zbG3Z|m*+q$!QIFNLP1(3)W=7B+Z#VhortZIr|xxjWU#vFnqL8hkx-ClIUUg0l0 z>fZEv1lJYx9rbwA-1PFGvk+d4c7+>e?mykU9}kqbORkXDyLdgQc@}RGtiNU-BQZgMs)(m2Z!xhCEh`G zV8osu^bUKUBWF;}vS;CT!pCK)W1XoU=KHYKIDpevAW=@XQj^DYHE|-KBou3;X-b!% zbliV@Hn)mrGKZr#>_0x2mzc9nGq@qJR9iod<`QW2GoHQ!hi6~UNn2>(Pud)%>FIPT zxlM}37;4s@X^fB95l_dt%}#}Zitq4)fS$+_Pe;gJCv4smO|Q1s2~pjUuvnpykJ}p+ zws)7!#5y*b?yD8;2$jtY*&CI8EG}T;%+zr6E!Fl^376NVx2lNr9auBXcPUe)=~yh5 z-l{TaIsB2EQe{%wNKr{9Md!U3O4HsHcSL?ON=kB_Y)(6{68Ky}=zupce;#wqdka4^ z0*rX+VAUOFGFUZ0ZiwLhl8=v;*oAhUK28=(53kGG=WfZx<9q{UfPv7bOeX{1#8sM>A}piB=an_yO+sA z$sAI*yO%4|+6sPCYg;qlt`)!%{h_3x9eAKg8k*zu6FthPWpG+;!H~V1&3_MvRR)FH zI2{e83lk0HzC;6rzM;aGSSP3j5(aDm``qeSq{B)#$V+gulZ1m}tw?WF8I-k7&v~3B z(!9x(SHb!8_$eI1Iett9lMM?MoM3{B6+G7jmnmqO;Bp1eGr@KRCz;?%1*e!`r-J7b z95`H(T(?Fj`Ep)zqbQy3hVm-YIzym%D>84QTS^;m-bBvyX6jpK)YiOBG-;xPN;9>t z!*0mDO&)kf6()X3$@dY*VN`zKv3>zhjWJBf=R^1{ zPp%jE?S=?<4ab+RPH$ZZwm9b$!LBPVAKo*)b%EmkRG5c!bn^)?ctL8tCbbN!enBjv z`_TF@#pv(M1x@Q2t`-*9*R_o%N3SAM*4D)NdaWHxmf5v=&!m6QyyuU8j)^1byl2v{GVk8e^iO5qGwCzU zJ1Wvl^|P|?nRI!q?W-*qO`o5A&!qov^IkZb{<-XXCjAccUNoA%I`h6xq`{^0kaJ5T zZpcKo;Za6%G%7>jO|JU#*fd6GRoFH~pwmknVMGnrV@gnrCWB&Rf~)a`%4++nIN4{A zy-&!VivyXt2XCPn;@%FE&BckGBOEL)${?iOr%LeJGmhl?>|5iwJYE~dUh{dK zIri%1HHM49#K}PCqqP6(X~nCiW|OZD^u^|mzD(?62Pjj?)#vraT1H5lxY|!8H;If79QGws&)s|EZK6pt zM4UHMYo8(FPYt|&{=nhMoKRJc2SvV0{LUw=t$Ua3&EqdQ z&Yl_a#w)Jxc*UL-MsBe45{KSS4Cjryv>(GiJKw&e96dN6EU(~-=CL3SIEfWJxsuj* zu04~I5}{LL_#M-s1Q^8psTA+OGRIxMi~rg50;Ml_?{uHi181af2fK17O!uo=ivA^Y z1gyunx5WUf$DHv=^@M*!cKI@hkxMq#n!vJUZ{xW*ABBZ`m`y9k|N53D1Ezph&#Qd3 z_`CcdcZQ7pugBQ`N{hDK^PT*F;s!Wdfd7F7lw_{O=?wj6eqdTpSW~{41J2})P=qJh z6aKXxXwPiya!Dl^CAiQH>Z+v(nS?V0tKxiEp$~Z)qtEm~Gz3VvAyRSU+Y^40#JKZ$ z_T=DONN{y_Ce3>Hyg!>gv66VWr-1&WhS&{M79)UOXJD($k>7Tp`1IqrJ zv8NPG!j$sgiSOPe!0NsUKMA6tXdEGTAPqTs$8w0Ojs1z~H3o1cOEaKd9Qa+nSW)rk zqyJ7FYD9W9c$WOpv*izt z@11|&+48rZng5;eIcpu^%r|F&&sppEqY)F#{UEr)UEatT7jXCMJaeyR0Hcs6yx05Y zPC6jfKv!|~zS|bx;j4an#iy#`XU4gSB=|IV00gFDIlOfp8nWe=L2sW^h$rsnPNh|oNF0*T-;m0|VF|)~@=Wj`GHDs}? z*t!1{2*33{K5#Y@Y<9fxmT;emPvYLUxx?=alEnLb^fj6Nb`ySQ1Dd2c@u#<$l4eno zbSKP_q4kQ<-_T4mDTiiO>5XfX&=oTAYQWImYIeLh@(LTo#!xmr^N` ziXuigLs81nkaKai&pwv^!9UZo{l^o(Gn)`j-&?B9H`J?W{SDPKd-N!AA3^sKa33M} zQR+Sn3BwUt`=q75xz3L{>Y#=j8>&*&;@Bh9L#C)7X+VyVPSU)}md$c~6rx@dGZ_yGWt31}mdkE6?3S@hu#vxj_ z6m%=P6D7uwb^o5crFq_d@4%#^I#-I{mN51tA6;k$0QgUmKwNlcH(sSsK5kwG|2NN_&&&&c(4s->yKfk7idvDJ3?x{xA=zXF$z4}*X?ZJVS zY5o~|buPY#GCNo`=$vr;hKJe2Z%?Pm9?0$Gz{uo9y?fzVLTZaS(P+hZ>+_wz1d3HT4_n0_t7OW9;b}bYuPAZC z)YnWw6l}$I_vI({6i&a^>b({?Fx_i_lk7%~zbr2VQ3i3kVJU!7T&cA|(*7mkA62|)j#9iPh#mb4A0sNQng;~ z!ceUUUR_h7+GBsF*uGuYt<}h`tK%}b9>be3%lU-=c>D%5ovfXoX0Q^wL^9COg$A9E zptyi4gCZGn8iJfstTt9Rev`J?&(egTeJv)b*x}kUDkbLuNeqnsH%+Kh&&z%RzLb{z zzD)Nb;W0EaNC=A(!(6XAoeMVda$b*<<1*ZGg>vFfUf&^ick*3-K853T?B9HZaiwDO6z8gM7K;po2JS7h3Y2TvF zqA0naR4U=cgnyzOgqPd({&>^u@3Wnc0-U*auaX91>qtHuu@6;QPP@Z|1<*;r&502_*?_8(q@MIa+t;b|{$ zzV_DJ>BNuR%$$7sIwYE5SqSoiUG38M&vDjWqUvNKxzl`x;+qoEu=yQf!~l``re*?a zdV2CE*U|go$>hP<*@#O52)&GP$0?6iyIxM$s&sq&Yt|J70W5%cF9*+;ulSqUsh;qQ zl*BnMA5z8DE$l@CQet2Yl*Re&6a#KmH?@ENi63f5ThvBmc*_LRKtINCf%nqv9gVeh+3VMv_z6X%JwI0$jJDtK7<#LxneH6e1-h`Fs&;t zr*IC@C3Xe4xn8K}J=*89W(pz{6s|teIh?JuD3il(D4m*yp^2#ms+SGk;xh1nkD_Hd zAq=S@tTH|#BZCdr#s?Wh3amkp*LX30%IbZd(TJ3dP)3z~lu^4+X@|>3I28U} z1%F1IW@4H9PISMb|Ji(PkCYvzxtgt-A7zhwUBSBSXUy>*DIY^rrt`db#MA2rcgkaO z%x3|L-bE~BKBz~d8F&0QZ3w>zIA~!%(W&6M*4FnyB`P7Foz~XUh(Rj%%(}JpV$lz4 z>rFluuS)*gy>3ePTc^Ab?w+S8NxN8kc(O^Hhl0BET%TR~jn;Z!fGX~z3NHAlFUc#w zrHX6MjxR90x?`mzw=HhM5Uk2pwA-T*9HCTH-ou)gW6?e4C_O1#4i3CB(canp%QO`a z96yJvF}C=7H+dLUU+>*K*y2nKM7;y_R=poMUgVXJ^-eE`*m(y&jeu3~5$ zT1t0{ePdPAL`G3}$Zd=ZNYjoj&#Ec! zZi9voz%d!x#u78&ECd2`a$_qEC=Kxgo`+}CcW_Ub=|v@1H;w*h#%`-`TJ}S}*;-eP zfipv6KQR{Tf+spUiU91-4-kYylO#J%g1p8_B&v}r&d;gcG{wahRqva2M#VTN(0D*i za$57}>vk(;!g}55Fa~Z-H71%Ub7sC#aMc(f-qnw`Zab`j{bF;6k z!xD4)@@1CHR*uZB>#)-ZQ*6NMeOo)N4;eIvh6b6#%L*w1eiwPsAb79>uOD8V*mj?E zC%N`L5DR)fCG@ELvYFZ&44DH_Ycd$>eHzRQ&~D0{D|4-`_ig2k%5iFQ0qh2jrOomJ+=?mEL zj{dom(CuTkhliy!q6=Cc1UK)~e0gQI98KArx#T_Y7v@glYykP67f8FZ;8izsn>U8$ zG)`RjPN+%vOx(7))X5NEmlj)FewG-FdY>P7s|XdBbKBnn08VCsujN=PHTU_(Ij7yY zn!_)$o@DTnV=6Aw0ah-Yy4Nhd@C~fHjlfPTS^G41sk1h&f(Wr!$&#G%oyTXIy&5Av zm75E#o#Mc_7zT!%h&ecA?r~YF9(U2iKiFlgm}9Y`?cDOPlX+9=-2=ze6Yf_OO(2qD z*xquNj!aZf_&%jm5bhq1k|qMGSArr;WNR&R+ar1|_K}uoJ~mogXe)ts;>{BN1Y1LA ztVb%#jmnb0Ox80a;oZgt=JbMf)%56X4$kq^p2RZrSmbf z3_SIhDz7n!K@AU?%1?^^o?uL>2GXjnIHwI6T253>k2S7tzR^gasu-@09LsoCqF0Eje*lem@GNJK_JP{RuL71l_ufitsxV=5Go3KSDHnR{r3nYwX!cy*Jg-&u0z6? zl`)u@A)+4?ZG^?opiu^sy~7&L+*x$?NnZ9iE5zu+kex*CJGpt)qc++&*ZYs3ezv)dxhq@kvKp4IcqVs&v3#3D!~$Xa|R{q6$qn-Y~Ucbv!DLIfh05=F~~@%~OTkn^-KxA+U(O50Ou+enl@Y60t8*SYy5oP_tNo8HpC_9^h!DtcUwa!km z$7C6^+~;&0$mW!o)9b&su(3XtpHUPfS_na3-_gD^SNc(6b!HPORr(&SZ6TfuoUZqQ z87>QZH^qvD)y{4uw3f$m=d_zX#=kCuNC-_Kw!kSO{uO$g;a?+G?`PR|Bw+z#p!rzx z0CWCzAC>fk*H8g!@~y$5fnRb+!9~#{M2dNJcxrlTL=fQC@ao+|FN?BVY07uGUb77D zGcc&u7C2PO`fnnp>`xgV6`f%c!2quq#Ue3^Tb}uAij=g;$oPs9JEPwH11F0#`Lb=b zcMGXpE>nfl(x}Ai-wcS<8+EQxdc5BOt#8A}x7Ryn~4b4tNiNTx2C~KF^l^(IG z&o{o=dD@L`<>m07MEqP1QRKdqj(Z@SQE)F#`~rL5{*z!*4E$LJ@VMjD+9-VmU|Wpu zpJaw@BX`*zP_zp92Xj=SMgJ&(Xg<|sm!@$gMZjZTUWSH?oG!bTdDlRYP2Y-v;@j4; z0bU;9g__VsP{6X0ab~~6tb2kj_nc+H`&Z3hmo1?1&i7#6`lv3$yuFJndoKzz${IY$ z$2qJ)#k=`3u}QT142J8yiajfPaGP|l@|tnC;eoRp!dq^1l!-4OqM^Bunlg*K%X7&I zpr`^@mpm%I%bou*3R`C8zuPjGH?p77aEyZXJu!C_oXaJqfcejhPPyOI9L&F0?B34L?TvD-b_ z^RtV2cW(TZj$U(B7%vmtciK-KUEiCZ zI2~GjbA-75ECfu%WbRnqYe6=HjI6HmNuOEEm}UlZ@hX@ zvcYEv0;@~_*Ek#RVNjtJ@BoZnW0~0>wtrf-KXq%NxCn9SWzWnYSRsm%D!mCUe*~XR z{||F-10Gd%E&NY%CNRL@8DO;2I;~S3+i237HfaqeeND(G5@2GINh}e#@8$A_h#DmW zcnN`c5@dQfsJ*sV?yar8S9|TPx3;$m_=On)3E&qWexO#1+Umie;zuEXX8ymm&rA}~ z-oF3$f1l_7@;qer+24EZwbx#I?X}kaX9Z_D-fr>F$UnwxlP6c-GHu_G6E3j)0&gF8 zU!=&k7`B47%H2&lnhj5AR&j~t{x(MpzvZvsx-r>4o&W+y!Ihx?gm-|n1&iQ2;eS1OQ{ieLqTg}sEase2q6#NwrOAOuE znQ07X>Kju&L*)&P>=Ky~Ne8eqWj+M7MG1Ywy|Qn~ow!<81*LFjHLN8dEqty|LDQwJoO66tlztTG|u4>d8>>txBakMzntIt+51~ufgU%!B&^QC#Ws7qw`@RT=HSb@EiF>w#5w3SU8jyq{N24K=Nx(Y$o|JXPL2NDWxX*V8eLsGX8+asxnE4A$r`_11AJW-8_eT!(xfL-UAMf%f4w0@Kpf8!Jx zETt30{P#E5efxw9alpdtoC&eN2;6qWhUnsH$ISyw;l_WWd6p7yt3e`5Ke>W({vKh} z_!|BQC#^)dQxO?P0@uG+?ZDIT-jQe`5_8CYY^^w;8kGh#9 z$n}5LPkFTA`#7=t+&;=N_(dW9z|n7hV7bdchDH1@7c~8Xb9(k!t21+KtI0EBAER$6 z8`87i*0;F1Lv#43hp#}lG2AhuN?#_voc4jM)H<3^6|gX&P%Cwg6VcXq4dGe zYo{s`P?e9=&44^3AJUMX{USgA)tK-uEok>7Ka(BWaTRFmpw(VI8x*}N%b_h`S+-zZ zdiDWLGZ1N}x6Ra&y93K)m|Q}ADpU#pazz&7#=6GF>D~Gk7B{DvE26; z6#Lu+j-u`;3L9|HP3&9fv!TQFNAA}PAIHO5Z2)s&f&ux=1-$))<1N{61!8B5RRe%|^ogPxr=vf`mg z|DWhtQ@U zLFvM#dwVY1Oc(8V|bI!^I6H3skf46fkD=`dFD9@4mF&t+A z>tzViFU#4bZ^_h7qnFMxW9ey4EQL^38rw6A{@k&X;<>W01??V}rOZtR{=v8w6vTsf z-s#pK7_jEMp;b`M60KJ|Xn8YpUVy$tgxlkd8+}WLHE-PFoQhAZYsW3lC_AQaDgV+C z-$Q&1$;U}PPV#Y5-?EB`Wyfe>ss6;kl3kUs8~PLdOE^g(>)wUb;N+6tOTLWYFX38C zjJU6eB!=Lc#x1_6>}1Z-oT0_>WyiQZX<8g#H6*>zdsYbpBLjivaZ*KMx#%xZU?H zHMPG$?@`SqIba^OZ$ee3&R)h}B696kCs1$yO**E@2`sedI)QAvl7LX%en)$~W%TGH zWC8n+iA(S^Bg*}Qjb?^f-{px~1zos>Xfz-GBR$9==B9C7?+{!Yk9v|B#`H^L;|4@J z=1Q{L-sHYCHh!R#izbW&5I#svT=t#hLhwbNRyyg?_7d$8YlI~@C{Wf2dvo@Q-9=_* z;^frh+eOzurkUG0C@PBqc**Jn-5k?D_kUae)JQ+4f6B%Iy?15X@c*)Z3~Qhi_%;1E zz|Si+S>CA$oUT0ZEC4*=(ZuM&E5^W1Nf|52^MmvIFuscgP!|RhmwS`TJ;~)^`^hH-J^l0h%sB(AA(Xq)9eI!3tVy*7c{C|8}9nb!9eyM*<{s;ehe%ILkbpN&d zI2{~YfBj#}kKV)B{NcZlAA3QWk}&q57#7TD5%(FL+*fpq=Rc!UG!(@|!swI}{x1k& z(0QM`eWKABCgMj#+^4nsT5*%If0ZI4stRX1qxLiXiqpGB$3&KEePPRpuxOO zI0Ua*iG%%4u__=I=ZXV3=zs_0G%8W{;FjSe@4lKMZVbxJVs@l4(x{X=3WcI3#iMsI zA|R4{+MFOK_7L$>pO4o|I&U1{=njvPe!sUe#Ia0R&>{3(p0voTe3o=U_(w{7;VkZ`PkWczX_LuY?^_~UeW0*k00R<*5 zGcqcab2S;d-s1u0uYxQKLn9Z$onsDYH;)Zf-fsiUGaS;X=JV>&~-#+<>w>*3;Z%i-C=PHB5n&p{K|;L zW=Y~2MF6)M_;Y;d{x!emDo@dBkKXeyD(o#D`t5nwl|${znzTBCeHs{)fa>;67)WJMms-!p;;w6x>y?3E<+p z=Ugdztle*{64Ei5FJrZY#1gyZsH{)~ZQ?kg_zCJM^Hl9)BM=v=0joM=-wAA-3K(Ig zEI56GNiew#yYg5N6QxLUS1{Pr+6W5ibz z(Ja3t21p3le@I2Ps23Om@<-DmYrM{wzrXu#B8<8;pQ(OZ+P~aWnSFI z!g_MI2b!qFT#$5^K93jm<|nuf1Owb*`&oJiMuzkUI>JGfEe{?q{LX2rjN(;7@3=Nt&qOILf% zSrnLsh>-7G-h;B-H!(S;u=}Us102Gn5YfN5{I)Ge3JxO(fPe(BK7jo)HG3G z0}|scuUU@gvddhtaYks^`08-f%mowLu#%eM|Z)#FllHP*Z3a6@l>LZM$HTr`LQ7r)WQ zhjS$9&*rI*?ya-0>E(4P`#X;-^jUyM2pBMujn#_Y#X1E4mj#o{d{Dk*%xC{fPTXbQ zl6^xFNPzq}i_2MP_J+?-4mc~#zE&jz@M?Ipvefcgh8udd#OygFL**3W;-HEK1RcyW zVdZG2z^rgWu>$p86IoOK4*IUfVT_WcRb@wY%bXjTLxav>DfD#Uq2 zcEmm|yG@1P9Ht@J__RK2O~$^YwLGH{@12xt;y-f$em$kK1{x){O%r!GOI7@X62Czy z%gN;JZvQ@LF8#+DTq;D~>e_V6VQG0V*K9!Q`Z(DXU)rRmk>)J-k0eg1*G9~W0_}k1 zzAa+Ur4i<|!H$BC3S^c@d_RSPesr%wiqur5l%Q_K6KZOn9PC%;YmR#K?+ep2+9yu$ zx?7sLqqlE**H2QRbWZ2D>qsy0qxb>^REQ#bgdmFia);+1gCvp#B$=uj@8zQpQ*4+b z9Jyn_%{Pp$*k<{;Tl>N$^I4gqXK?9|kVo8oYUZ%1k9|qZp?0Zp#ymLaLMmb=K z9%aRez3@2PMQ2O>ycevH4X6QJ8Ey)=-`*_1RpS%BsXg1i`|(ecc#9ESiHdBeNmecB z%KrikyY0P*evBR2t#~(YAn0VRQCVw*dPp|8IfRPbOFFGb#OLQlgu&)|>$(hRVU4va z1F}`k8J)|3eV>A);MZFE1;WnDKsz+`bt>5w+Bb|DIo@cas^x{MjI@J)wxxKKB}Bs^ z^27r6x1|~M;_2bw0$`#g4ru`8S6@j1MKs$7p+EM+k1C-DyaIlg8bjtR*?SAkGLDb^T0$FGfZG|q=Ep0tN67XpOyt-%aS?&IF(AjwiUNpu zyaLbMXAo@BJ>wQzz>vo?2DZL=uQ`->*Oz$T)Ac7&K`s8)u;<+eMGKfHv9GO+JhncJ;*@1(2FVdPOlc!{YG2d39~^^N!Qnc^SKYp|;~X93-J zaF?iEM*#WZ@8Sa z^vI!KBH3X!L>$w-ijlAs8E|56JDnOA$ z?rSfT(#iaH0i9A)6$#M~$z#qdl$}!S`9*N0J&k+x{3P#0qU11>qswvkI&vjr)jT=o z>G+_^D)_09^mM$1N|4Xh?lGr0UTmy_yU6C+>fuj(O1#z`ul2-hz42OKyw)GD4a94M z+B4O$KMs1*9RQPp6}0MSe1%2t>l-*?$!$oeQo1ZYlI9ZOaN%Ki)i6hM0Tbnw3affc zDOYIq0wzl>cdjP%jbe8{qJNRUo9wbn3sjU;>;gX2Smy=JQz)B@>s>rtpn3&G*sh)6 zAfX*bO8zHNUkD@W@+QXUPv`gI(F)m!Fs}+AM`viy7$+Tg_+_;fwtw9$^?~<=bT->8 z70VAXO3gJ(FvvGOoHd8D0p#;&pJOM5bgQX z^XI1XYcI};y=T@1oV=3pHpm6&oN@-L(g)?u!ooCE=x{(LLZ0Fl*=L~WS$)H+tUg(b zz9O-b*|3$*^fVYpa?{Klqf@7$;{4sp*-r^|2AQ!Wzky_uw*acbrYo!!XXtk%sM-gQ z=Vo)8Z#;?DrAdR1Jkb46cB9*;RRwYB?n|ES=9#2T?Blc?SaVi~yJ+V!kNKL=1=B|J z+THO?T_c-S*w%gpvdH~39x>mIO@xkOjxT3~Mw$=btt-zWe!g9H;FoI8cG|02Nb|`R z%}ytiNjTv(;;kL~0p%UK$|rM`JljV{s2kNr_d|v09d`Bto`swJzjsdf3;rbf4Y`-C(?8CPgp=nPGB=A=iSaWg5INU1*mz~eR8|}J# zQ~agg(*z7*NDz$MSO2?;6|_pRji-JE)gF0{OYXbe;9{n06Z(hxmTw&&1}J`1T0)Ia zB(V)b)O_vHtC0H+B;J@1uPuRD-f}~Tw?B`?yVe36RhFpCO~-M7?Z5T|@{*GZ&c}kW zwj4e2EjOGm`IWyc>$mGE6z}ThuYxD~7MT{pS{`mAcs^>HwV@eiX?eWzF;nG=SAHU1 zeqZFt^kdKytN6Q2*SRR_>iXt&L$oGT_2i_*@jLWhsdOSw^TxYXn5$*IQafl2`#N?l zm~WMNu11|$okE?nh5VJ*=pbm2hQ<0ccUXLULE5hY2w_2MP+c6;`9|nLwM>Fyq#Sv` zVxzdq)jmPqaDs#kPH`%tM%IHUruwuGroD_nK6}mAnCm~U2(jpW9lK>xjRBmruK9JE z<;vgBZsozT9cSHCnErJg5t(dy$zbQi7pvwc;hzv-**q4$n*ijSSE5)g2|Ekt<4bn^ zUWj#7DC` zZxZdW(FzITS(nuM61&=fNSgD=U(g#d3n4qQVXsXLdBh3YCMnO1 zTzmg?x3~r?mWUE*Cep}fjeTWpGAS$99KvcJ2SO0>8ZJC?xVM^UIU>VWB)VehZS3$( z+TK2;YoHhMCwYw*Wc#k6{jm8gJZ(9l5Uw0+qP6y(`y6_W>Qf#QQap`aTEFK5k8HF3 z^dWcJKK_b606IbK{-V0De(OeNvtvRLT()5lWVZ4+>8`{M}JI?^)Wj=n&Ke`ueLRoK3S$3RfL1#ly_}lvPe^1VyP5Ik%wzJ31{h+9yr$>q&`VB=p$Hmnz z2h}@iG(~aZbf{~GpfLiVt|J}e$Kvx!zU1oZvG4{$;Pq|%aA+1K-fEz%Hi5Yzd@2da zPzY|_E?6yS-YaOX?KK{*ZXl5v>@aT@>^A@NG5#{EEx1nPr(FQaJjK40c3dpYA|rV3 z7t%H9QJ;CUK#}Fk9o?pu1JrkA1d`Al_PNCvh(I76$R>b0wl<2%KY}4*qzJ(ilc(nnvn2ig~m(34>L9VRJ#BiqR z{*l^V#Prco2NsvwEqTV9T1+>qa&bKHz|(Bj8OgycekLZ7U`!%DM+{v9gA>5A7A%W1 zKVj>#+-s@1PvS>%o*D6|0~IYi$t1z0Wwr7D7X1n+TzA%b^1!EAye zC?bP66S-4@5LrG8Q}S6ywZ-ZVw=g}Bb4Zx&0VU=xJaDKX%6O#A$R-?wjxCki+QFW- z_Ae_s*1&7QAE$`e%Fht7Cfe*_cM#%Ga!t7r;#OoTmX)(s(M3ZI_`vs8+gmH14zvxct*zMkpxjAJ1-5s;G(mzNART2s^|6idHVPLIHtE`-zkBl}3vuJ%bN8k~Iu9F(;}28WptNnY{#4L%_s z`MdGyT1cAyBeC{tjBmI_Y9|897_YfykzM-FBOKvcXNr6Bl zUg{+z0Ew3d2njsmrLr~!B=J%oApu9cRB91u#Jgm#vbv-%nk@>`-2Yz%HhECblwX??n1)3{-z~uX2xy@-o%Q%bSqoc|RW^$-X8m78aRRio`GZAF4e?3zXA{@Oco@y!MZG#vIPnBswUs+zQ z9_}A_ZFz*JS}2nYRdfha8y$!!o~ngV4Wy_IQndVM00*kXY80c#g{;P=k!46{+F>#3 z!z*#+J{5Z8*Kb`*Z`5(cw`?T^>cNhm$QBKa;8P$eG)J6K%GymsDh<&z1RaQS4Fojk zV!(R5+NmV>;Sw5v$$|nr93lw2R1?2Tz)Nq0-Sn%(P#Fm&I91g*{0OR(d`NOc?G<-{ zvMf9>HKRgSYxa~1xm7L9nC;;wZ^~>hKY@(dGOfi^l#B0R#%v#7;VH9)&Ci`+$zq_W zF9RVgXfy?}D}Et~OtC>XXIXkpXSOkiNP=Vmbk2_XtlQ2urUm>_+xL=T73MuaCAoN*| zIcfjaXEj>xFXA}$BA#Uq$QicZEnDC~sB1Vta~-dNXN4l~ZYG1D3=B35+(TK1fP2KM z%$CGz68{MKk{!o9XzcJO-V7Lzhv|w-@BSTs8|?jeh;wRIoX{MXwOS@QS9l`!v96th zzG7c(CS+|&4mKdGp51S+(O=DkB1BZ_vbM%+6|UrO_X3n!^hKgq3Z~jqJ;11*BgPsY zBt)Y*UiFEwJ+wG}ma#)tW46&BI&i3Tk{rCVQ3Mhs3CDiJNCL)AHxYhNMft_ndscud zgO|#VC4k1`^Ui9T2aqn(^OUlv9dXfz2(c#rPv zHgR;i6l=2%Y&(#mfN*NgOuYO9cJ1j%BXmEgz|M=4K4YLH1@>1#CN=9oBZW}kf)VQ4 zA?Py(p-z{tFgL~W46mG0%GEP|LZHMGbV(x~KSVA8u{5J0ty2zueuuyQr_=fCgLFQi zI;QXeWZ0%Avc15Zv(QW=fA<_+U<)!{*Xmj|vwNM)omReaQKW&AJnta4s zO8rTejc7kHavwo?r9}1&OpX}vwv{XrbB0g*elSaDyILnM9Xlv5h`OH5B4_s36rD zS-4Jz;ieV7D@?hF1^UHCfOrO~sMdcEs>tZ+L<&_BhkUjMOW3tTfHwwP)cawgBjJBk zmY6x-+EPrwnzhO-30b*od5^l%-P3y$myd(vjG;C9+ypFd#ZkbBI+sY??0?3&y2+aI zV0xO`ERUZshB8-6nMuabydlXL+xT_iQ7~<9~SZ>e)`vaz9U}TshklC**l*?sl|z&wiEg-MA%E zJOx?HyC&ZA0$+(_X589LApZC>{MENq3=j1Dnvndn+-tSoc+Y?G*|k&VT?nh*vzX0S zs2FH-8a6ubk3)m~B83e|4MLwfg-P={vS9T4DsyFd;AND-Zj;MXj zKL{`5Hlqv8J;~+G=6s*IJ-IxXIFSiotUoX}58YyIm%JjlIX5GHsy?U%KBvpe%d(?=kHGg629+S=IT$ZE?IR&D?f>i zH)p$wJnh~YSu!ywD!-%dR)nGo|0El`-x2fGKNyaMi(YF#+j^+}Q#3!&tZg`lqc36o=VM@#>XRDCNB7Q- z@y;@PNUl0iO#G2-9@!~8>pD`+_|hQn4wv)A77>x3JJc&*P|q5^fV8k&^-i#9$#xGR zMO_}wWo>foXdyxyTC%;@s|LR`>#45_nSj}VIqKPOId(T?exX`aFce-JV}gC4j%a9*m&o6*(?*xZHRNY-T4m+Ff~v7xDZB@LkqI_324yZ z^)f?_auf<|l9J@TlDtdUF@+n5r(ofDPUeK(jP|a;Ph9DXJSR3j2W!9aXV!6+w0FPb z!4<3+7Nz$NXvV8%zc}_`9B2~OqT!~dX~qV0Q#07 zo@+W{Ax7H4hQ@nWJiT(Ke&=?^)P~Vp=JA92miuG9(im)!W}AN&?o@x^_|~Mz0fgOt znvRKdhV@m#k1O%s6kIZq>b%6fh`P)9k5|;2UuPNt;Ua9%h-tUnu{+T_C0K0s9Y4rm z1V(a$*q5`5b_&PzAD1RHP#_IF%orut+=RMw0>RrsBW+jwyd?<*_qEdY9csY( z1N&v3Wtv5GDzVAjqu-N26A+zOF=}t#T1IAp7edLoyTG_|Z8rj3k!#_@i0>LI6qy(A zvC|okwq0=Re5d(xEn`}(45WS<40+M>Yo^Hq7-%Az2h)Jy!D&Pkj{E6!PgFgQBvmSV zo|$1RdD=|)F=o`n2L=5=J9jc#}(C{dL?$Vmb4f3}6D3kMN z?O4=uw}^uLxiVT1E85D2+Y+%S@y(8JoJxva)!+@(Rn0|YeR!eezH0p)-Oo|J=+%xZ z#r|>gqq07Tw;UD8wH-I}bfN!d{fQZw<}OykOElXu>1c{vEsob*?V1G}vU0IF3*~Uk z)!j|{wuy4bwfeWH_8sFXLncQEXX>D`{#IcVg#6XTkYd7tog&a&NN+GBL$6?60SyX{8=Y?X-dN&% z@2-Vy;F`)Srz{RLDzkcYmdv|Tnbmu&QW!a$WcJ8Gml0BcA->Xig>g!2)bHwz#@ETw z!*2MalC>G1W_C=(xAr-2t4~73?>Y&mGGpIpj1H*W6mZ$oj;n;hFHnYxU^8Angi2b} zKB?YV^A0Fg6HmZ{Q}Qabtzbm)}M~xepTGEoLvYbqt2f} zbDViyz*reUVs~9NMh|c8#wunHW-^nj$wPRuNBvHL+rjpLZA$+>S)AnddP=SHvj3*6 z50tw(v9`&h&~nvO04o|j8$*RXgICe?mwlv=BGgvD=L&wQmwdZL(Rm;9 z^tpSE|3Q^Yyq$Uc{RNVl$HdRmwi`nqtRBDh11GbvD@EJ&x!YL=awwC31MB2$<%Hz; zB>&>;nZmI1SZ#Dpz@lk14|u!4!!FHZDuShHxuixNG5DgW#TY$m(cpm^;cvV+qI&PI$n`| zpn-Ffh;exMzM?w0m(?Uo5ds)MK=F$o2*Jh7ZhV9N@(c;9H@Z@(>r<(GIy#ssy4aSA z7ddzOAL~U#6)?}p8|Ig2^D#C=@(k-SC)?=DXtX*DH%)t2zvopg@ur43yZdPcGSn2N zy_1s=Z7y~n)IvG6ar5=-6{;_sPRuxF0^rzlCf#pEBZZ8YEcx$;9lT&xI@7r%U;M6Z;kez<>bF!@?XzGnz>SB zr&DB5OZ-WL7prtnd)X|J3#%Yj3L=2^<%qlvzW7`w$ViMg_PX@@6I#OND8X}Q2vN>$ zMjv74_&84qSGtV@Bm==gO{!_hCd#aCGS_u5;&_+3jaw5$No$vLOx;Sfi?ga=8uK%X zUtWb-LHH79TPhEGOKT$4=B-kZxdJ~#iS?wR0Rc`CngafK*VlxnMzOGN^$^oKb)xOLLq{iDlZ#8+gGNF^$>f0t6N^3+?T4u8@0bHK}{kbQ@P|RX=m9=^B!s3 z*E&AAMJQR+zEg6$lUsyHuph2;zJyRj?IWo#Ar?{lwbYjojHtag^(BNOYH#Pu*ik*^ zt#TQ%q6j{D)s`lW)qxD_F2Pg%XT6~6<*Eon(7XSQDMu|m*l1rYwekk*`6`hoBiozg zbDERadPwN3lAbAg!YIDmXjiI4ueDi-?yT55)i|#G4#+Ih8}{qXb#Vi-*M&)56Dc2S0ZM3`StLm zH!)WdoD34WTPK3)5pza0xP4Y~FHLd%=M~@j`A->#hKyd1{r9PM9RxIv1V-1BEa4#9 zfQrFQuPW}lq+?K#>Fd=YHR9GQo>9u1oE{R+%92%emaMZA(!0rg>6CFtBZW=;dL}ZP z<`tfqV;1BIwIInj)x5%+N|=@!ifBJkm9KRw>0g%NsG)>YLt!ASC>hJIy9I`UQShHZ z9~gf~Fg!rRjdaXwcDkjPiW&&Oga(||DAd3!`1*`(0v=cU`BD295H5C2Xvz)K*GX*qWbD6{97-aaDH*0qG^Lnq z=^5P;$f=PZ_B9G%S_Pca1@id;Wr)agQ`ATAzE(JH_9>h+G}=9|6+nl@aV|Z4vFP+3 z-eNeYMzhX6u%bveq+(N)$oWzB7E!CLFoL}&x7^1V#`I+conLCSRyA>6X|yjRx{_G- z=%Qr>9q)~h5>E5N2wPW( zv6_&FuNw(vY(S7SwH53#Ue7@2$P9xunpi9N%w5Kb;pNj>C)C;ZU8cY#7vQP~E2?X+ zY-qH9t6(ZMV!%-iSCA(BXV*2_e&_f=;^<@URuxb?w+*PhD^R<>ptHpoSZaRU zLde&b<$@;{3X-cfqf~3=(c`b3d+hjYU;yrLJn>sy9Q!DAp))CRM-;BJpO`K^kcK7$ zjP$na@8bjeKY`6tYQGRa6!?a)+!at&SM1w7KvEmwjpzqo~6$Cp(TT z3~5}Jd6jhU74s%gP0-#~bgHuzyPYldtB2?E*f=i@(MZhsxj0N`97ocCJt$8AC{XN#Mvm9T3(TC;5egNOI&ks5^M#llVh>biD3pT5KrQDebSSQ<6e1LJ%}t(RA`a0W9#kHtqVA$kUv|0qPQi$ zx1uKrq(b_gy;KXJ5pev06TNJ}_4jx{Crbh}R2Va7*PG-Q5{Kf7xI^Fr<+v)Czwt5@6JjWZvX0N!3kUM zm4bJjQ83-$KCZ2VoI2W zVY+y`PXIj2$ucB*b^RGxCXC7Q{v`F1?xP=r>xaJvk{QVhR?kmY{+%;Qeop06 zN3xuw+Ly|^b_?-Juc!B?JuafcM~9?|K0-#aZ1uc!6Z@5hrC_X6UYa<)d}JvCI)s!#93`(=;2SbLAUky^?9zBHk4))dXF zI-L&bJ%0-royGs7H&csW@18^CUnc-h)A9w+9)IcF-N#=_;n`MK33ES!Z)N*FjdelB zLr;JS4&s%a*@5>+aXR21?Z8V!er^Zmc-eEAJJx6*g?ex3U3=C_vvGg5zS&ZQ5SGAl z&sB6Eg5ACxrxZ(JPk)-GfT1;K66EDhA8vaiO#%PzbK9@*iz!)}K<*gBu?nl{=}ER%DK={wem5d^wK|@;&3<&S z-=B{P`opdeqOU|+vOOMvx%8Sue2sgcN-^MQJfvjWXL<>j{r(Xt&QLr^&uX?0lsfWp zrX6X;OuWE3Rh0S$N|jjrwEfoMr`ckC(o+n`#z#^zdd!vIZ(*W^-*P-q=$orDNHvBt zJ4vGYGp~p@qU)^w#J&3HrewSe1rX?|CNGldqx>%vl+(Q8Ii^YyOU_S2?FR; z=rpd-_P-^YzW&WwyZL zVXa+mda@J>x5$ku8GR!eQB@;f%UY@94yohMi&g&)cM&6LnJxc1lJ=65HrQg8Zg0>H79lu z*agkk&=(CUr(1l*9t09T0fTv|8X`WTjJLEFQCD{c8gV)T1;0e~vGqnLzHlV|3lguj zh(3ao^kpZBndG7Q(9-k<*fX7_%%zkYAg6?{AGOP+lpw=t>xE_JHg+eYjoaFg#1E`h z6GZjaR=M?G9A7U}zJC41{C!w70zSHT!NA(5m_=ERc&6d}DQxgo5s-_MgJ4cVIpFtN zH@VY5tQ&JbAaNdwru`4|?T2yU;EUNmp#MSe()`_*{UlF%qi^ocyKTNen5EKSf9vnk zIHtF9uiFRE=R3m}vWIYJQb&Ri!t6<+brZW^ARqfFe}l30%tvl=^L7xU0i88X!>^pEsZbtq3 z1N7yf25I@>&HRme4Fn5S9W!~O%d)sWznqX*3ZRnfIHmZ{(d;g zDH-~-J2r`aSfv@90X==RA6yWx_E_HE#;d)SchmfMi~s6)wNIT9Pd{!vwbc(zv^O)^ zqifzrl-V5)@uPgE@hh%G{^;)Xj+ZxF|gb@G-L*SIF;nHYt5Q_dgaT+RII>=^y{M?|da;pR@KccStH~ z|B|Fnujvl8Us!UXw3<$dy;B({y1!dx%;*{xA4@zu*70`cUQO=vQQP&!^Azo2kqI1Ai)o%fr|co zHzsQ4VNBBX2W-I_1Sr`c2)7tI*6CJd0gun1QCwKXc9JhEn7abt9n0+-X)Q`-MxL7jQEhxf0Jnde4ZGi8UdyXG$cpXqvCLOh+WlDiV}o4>Dp z5hpgktKD66Y5P^m4z{1w1F5VDpKppLY=|BxA2=-efJ9$RhHP~vC#8^?%Hz^P9!4)o z=Gm__E92!7iAuJ)?I-yLdejp%21G9#hlQ6yTxGOq;5W!d>NAgO12bhE;!`C)8$<5n zf-RzAQ01Y{7w1dRkQlSxu%h!ws`-}7C!k{&?!PW`U@nWNQIMS*$*vYH;Mi;}X z6v=6`xKwo=cthKMz>ZjDN%Y(c4f29w-!O?t% zyAjaK&n2fkv;=6 zQIeBU0JtFZy|;4)QyVtDw--I#ejaX6?@^T%d2eZ-Byc+>se|Jv7>2}AX1#mbjG{YK z71)0}bukoQYFLmsmop}zrW6i|ZywZw#PO(@T&3HN-F#S-T~Y{2Mz;{u7I7Yg@5(me zsPMEWZuj72?cYxUPIzMx)U2~R=Yg8o{?ys+gscid%R0M-u;8QlG>CZ`Qda#JNLgp! z26}>&0^&4ze~QV#+#)I$Y~Kbw{N~@g*A|a=wT~-BvuVxO1Tycd89z6r|2e~*f2`k~ zfgU$PvV!W;qKO@YWA5x^e5SA*o+8h=y~d&8l98qq1dJoaG`TRpSJo&hzru4h$vc8Q zuhb#65z@&NWY1O${JSS8Mt5nbJW(OqCnjkl?X}}@L#+d zh3&6B2NZ33(MGxQWS)f%Tf}xvgp8n^XYAk}TJLUV3m4~5_52DrkL!iYZ+u_qo-r((u{xSDGka)4VO!(^tapGQoctx*XzW>cE`%(?*~$^5hDT_qWP z&~$u?>Eu}2>aMdZR4n(zN;cV7r#yKz+23@c#ktH4EDh)0_r!jHbr7POpM=0Hl0=(C znRUJUByAYO9{uKLB=Eia&dKs+>KhV#pcM(xPHH=?XwvfkL(#z%o}%Y<;};~M5`E#q z#cm8j2z}?aH#DBS8*dKljr;MauV4SNx*0PMplf5BJ3rDpT~-O3cws)SO0Q2?S7L@d zxC3=+E)752N&NSC(PhnyL)=4=J5fU`beuU|5&tjx_$G$ z^t^*w?Z3B*pTO1U6k7C|FBawLHF;Kv_lnq`&3@;-t~#=tM}?aL(YT5E6}c~@A6!91 z)w|GjcAL0p~vsgZgb>`WDKn*$EdRNROEL278Q537?2 z3MlD>^jKk*KpKYA>JG03h9Vb{q%hy>`EJeQ zLvDbJqY+?J$p2#gm)H-{E((FI8H>qKV84OCidG+x=c~|m?-l3^tK*vvA=bMKm^)d2 z!aFvwUS!(}i&k|p|I2OnctF76Cd76U=72MS4*Cu&cTh`VTPk2%YVAuJ6~qcSjum97 zWeK=m5CSh3UXAtxT%s|c!XC76#0dkA_4FG45U7_xJ%NQ1SV&;01eP-W9Ic|yGWkno z_Y~@={ME_OEe?f`(vT|};r{W43DkZLbCkauk6o1u7g_(u_IaxNMKuUjoYn5#>_HkD~%RzgMha z;4@r*2k7jRixeV->{{ z#tIm02!if6s|(DC$1IU6Tk%;Zy4XP`ITtz9no07Eo5{^05Kf|S$7WUy6L0{zT-Ocee5AR z?sDPKzWuIGQcQlo`K)5#9Tp!}|7~I7&Hgd0e%D(Pm9r~n*kSm)1{}`b;q>!gjMv}g znneq%{{@^Wghu2F0ivVDR*!J1Aa}&-QOv4x>1eM|BqL}ZMfcemV!+P-Tj@GNQD@bL zQrkFi;6Br5tjvQ!)q9RH@w|e_ZLT&45P%kLgs2m&$_z)Ft zgpFvz_RZkb0-}_!bL*QE$?kP-ItJj zj{*H3d*fxIA|*66Pv$XdyRHOQnOJDq$7-QF;<@+iqe=@oG*520KcmbDJxl3F&2gLK z#0B$895J(N`AXc$cM4=Rvws#P z7GOP)zgv3fiB|@lO%PDaaue!dte61P zA3%Cz1+SJ$a!3aI1Ll(wf8Z@lQnY^Ug#)%D*I_l3{SEYRe{B5s$eppgSk+}dd7xkN z@9QVO1hjstEYn^fVYK7~RdU4(H#%ikJk2u>tL5;%6-LH2uWu`K%2jl5!F+x0!K=-_ zQC`&94+8Lq$UhmFV>ur%xgJ+$@~9dyIYGQ5v1Vaagc|r2hOwqMqO>mlKJ#E@b_Pb| zDX^)gd%d~-9t4LdhD=D&1-89jNKzmx040c5*qgMY0~H^O+-9Ic$p)vL9H{WhH@(Tl zoux_%2+L)>h)JY;j|~|8*?g87JB#U4pyXUvVgU8i&=W>XoX51M_r z`B8Qp8Ld98S35dwA5WKFB26jf1iYuoyPVquCe5N~!1JDjmG^@n9NtF7jleD&1LCX* zib{`ivF|Vo)>~C}q~Xd|J^5X`vk8J#^>IWPj9jbI-Kt0IR^l2ZqQp{*R^p;6pI7Cp zC)&fpA^LKnjU5rIDxgvVq%aMVav>>d%sc$0#()4VSoEa6VHrEd0K)@9BEb*fdW63+ zf(H9vIGod}-`*sr^rhmiN<6`RrO{q55l^BQm&2dTTIpM{y@f~?8Cq96MTC>q`RY3I zAa$o%j_&Ypq$TYB`2pQvDYg<~N4h_}i$GL5mcLuh+|Tj37^|2&`Q_&kek_boVB;^9 zOx6Zv7ll5jOiw>{O5zo&JiK}_K8DmuSH8Q$!X7ii&@_Hk#Ad0FUCsXCY}#WRzbp!f zs+ILj32Ac6Q7)(Ww-81cJHp5{yCqtw*>#71Bw^-N)zw3gWBge-4w~&MO_q0u!Nd=# zz^@c`EXUqPHub#L@e%uOS|U!Wlk{x+JUN{}{)`=>g&0tL#IepPYm0IG=o|=hMh}D` zr9av4p2D?1$P<(+!crXF`B#sV!h?Sz`jq(*{o(SbCN?|=SAY|Z6I0r=j1yC1U!jlQ zwz=9~Vq#h7Z4YA0J2j>m+s9))_zcIEPOov&+c~Pi6jf)K0Ed!_KiGd)Bf#*&2UlBj zlRV&heD4Jb{qcRcV#$~R*~+qR%-{*a85!c+`{=%5YfiG(d9KI4n4(tIa0I(D1r_^? zsxILm{gFCBo}k??OLT+sMy_y3dGo)aS!5D|K4XrwB41aaLcgccybPX1VP?eLv@CW;SXbH9j|%NQ(0Q{Y{#2&z!Kc3BYw?F(A?W~N+`?frCkWgROo-o z0+8(p{%#f>7fyok-w_6>+2q&g4sTgU3~cM*WG8dE`t&r~MX8*_nK3yX`dW$mx{C9% ziLr+IoFCz;4!;H?KzVsVAZTYextvTwo8_PEH`1kTg1`@7!6wB-e(T+}#f7fe96bDe zml*X?!pC>gAK&DoApLbPJ+c+bim0*2 zI|Dpy5Yycoi$D{~AFTo8#!k06$!w%FDnQzScN~Tb_(iCM3uo@SqV{h18>7!{UF&5| zx=slrg8&WGV+O*9<&3OvY0T_8i4#lL>Kshd8ty!)VRFyR=-YP51fj*OZ|fC8iZSM$ z!bqgV;dcK(#h|^!6#GW+X$gsRKQiGI+(u0&m z_CSwxxy6I zfHyr)bIS{?%GF_fdZ~XN*RaNpywMfIc}&)KE}(`XXFK5@gUoUUk`<)<5+4SJ#+m{b ze$@$K@PPuZU?yH9cjB2@i?(NKy@JTRwQ&S?N;c}=n8#|%ID8`oNbo5lwiXK`A>y36 z8>FHYP0;iF7TJr%^x)5IPb3di(vkid1C<`<2M$8MxbBi4uB!THaBE<$@K&oP=d_*` zu`4UtO9cq>F`W;fh%6=-608{6!|%{WqkYNk$)pqtiHEnTWWyd4Hb|b7cdJ6;Zf>;D zLlkm4pVeshoi);VVF`%G=SrP@gs>9RK--mCom1fZjrI@I1=_D6PPya>qI><%NFP%L zV&X{(&@6(!k7WKIW>pi%5}jEq%)qx;Q+)k>(ne!Fil$#9)^AnlMncC`YT^X%XYRtK z&XxAVNE(3MVAi&YWLBe)9;(aVh+grL{al%3a076(W$hP~I0zAq5Hp$U`NEj15In5C zC7tXN*hEJ;Qe(YG?HfOoXt%oZJC6nKi#FIB-v|AL7nim0d%-!xrktjXPLC@Vlf!TT z`gLebrY&S*0||GE1i;TAadZH6Ww&(rA9EHDJ(m?=bcb7hxdYR93;t8i`OHkH3f6$t z=N)_35i0t$V-NLYOMUT5zc3uxxT%QRKSxF(o%2cOE|+#IbKB38bUC}{syvTls498n z4b`4=$s_OhotbF}H{z0%X>?}0+EX9Se5F1-ye$~-lI6ti835>y% z9B^E)rAwAbYGC$F9}lN)dL#C`M;#v_zPUq;!AIeB+6Y46Tmrc ze+g}MV#Y9D_8xq&=X83sPA{neYi@@5lC{KZyqQs}4K_q=C>NC>ERB_mHJBh)D5b@( zuCbK>d|n^^)|4%noEL)35%@Er?Eez@5wvD|;wiytsz0aOOM+zbIB#ggu7+E^@VF7X znk>G?lP7!Bjz%nh&W04Y#ipeud`|1x%4TFnH3Z+AGH3CNISbzbY)ES8TIdpTo_Cr_ z&4_hSGm;VTWMl)8%|rC-E`X|p`edzJw=^;15&PzY@`A_jBa+{XZr6f7#SV?(orI#G zZy?sU^0b}<`f#JM?f3OE&lvsvbcm4o>rdqGwuAClnH6TQaMPsn3(gxc<9He{F*wV7 z-h9$FnF&!7kSG1jXU!i=P09?|Z?~x=43=qdJ~t293Huhr`;t2(x!FC^J^7Fq;CK#1 zpHkvB`}F&VG86A-8r%LzU2@UrTQR}dc1S*!GxFF(X5Hz+Tm*Z&Y|q#({8$Q^8zpzD z8;7CPv@^CFuG70AR?-R}GLzC3I#TK}wjGfsrEU9j+McD_-k>T^4gbedz}zUgQ*B@S z*|xh=y%i9Qv@87Q(+UWu%;yCRUchiqf>&^~A#Vo)x71|4 zoEqDiJxxKV#Aj|hN-1;m$NXjQ5EPk(z`)I_D^tjE-PrbCFrQUW3EGXHZR@%*Z3$w4 zExR~?FQBaiTc&^n+gHq8z~7MUhuIvHj8!4mnu*4$To)eg-W|+(TnHb_qp&qY7?!zS zqgQrq_HJ`8TX*6OH@iyE^7qKmN;XRo+gSxYs@Oi@7RGft?4Ag~^HN@)%(`5179M|@ zEk^R4i>S4~>kS=ViCmJVZ1gN|g;;av_i{(=pVq7G!Qhr)q4N{qrz^3BF%pQ>+V8lk8FB?W6Xb*^Fvdb?R&*Ya29;^CBwq7O#|TE)>TDRJm-l zc_r~};y*~^vQ``5uP?r?nQyB~=fiItIx0pm>lPBl*5M(VD3R60*DaN7r8-)6Um-5O zZjn?2jf$^pk=*aLV}xR?$`(~v)GFZsTygw60h=i1L<8%@luZ8Fzmh-4z9uBU_eFNB zaom2JB>`T-L>@a(8Inx;&l2%DK{!q+G*Ai0DL-(W^5d5uTh42C^4M_F{?duzWYqo` zz6P=FEM&J=O>XDN0~CspM)Ba|ci{H*8ebHX^C$tCwJlv-|=@6C%q{<|G4sJYgX3ByK1B^UJPC%FGp7Tan0ak>8}{o zPK|d(RF)=J?2CZ-R0bNe@veH}Sj0T)Ef;65w0W@Oe_{{%nC5z!SYFs^%d>7un$_6= zqi9d3-tYdlYewpGAIc}yx%vA^LN7ZNiq+PX-X5IKyYf!8c2 zgE5*L4gdvy!kaVy^ZR5o=lq4-i^)#LybA~m#;G*>_IHIvq%Bw)5&$s@wVlVS*|1aJ!MyStJp(yop8d9lA}_NHonw}FJfzs+yVAf?>U=vd0%|0AZNQ*EF0R# z$urimI4geRJhqRkh4mSG(EC`N?Wy5%Nper&irZcx3*B+hiTMV$&H0 z_BB5Xs3QjunVt_#Xj3ZH>^m`BVI0_@(xUdu+!a#k1w+DW_EGS;sNMg?RKfNE&NGjs z8+s&a|K2G^w*OFvo5B0gpmfD(EVDaZ<{Wxot}ZxvjDb3tj4XP!K&A-_D4uaW@#<#v zRQgtpc^b25NcTpm{US1X@hPjtv5O&0GEth<|t*g${pD3^KtJexR{24>% z>2v#%?pq}GoX?F7d~WQQPLJhkg-VPQzK**Yu&+|}XG0t38irjUdmA1XZdXVCwBxxH zJt4bCIcQOYCFiK=9fz_?y!z-Bv5y4^0^7Q%(yr&VsZV%9>Xg3ui`rg3K1B$o0-E|e zto~-IzgQv*;I)@=Y4L*tRH$#>zhr*~|KgFOb7DtE$SLp@kH)Ah)HmORGU7~(F)Ca+2l<=9(_EV?GIIc5g_g6+D!44?B%V`q zUNZMCdD3R*wcO|Ayns1sSHdrpnISA0_$ACv;tfr>B`vY!N%c82fwY1p15zeu7q#IS z{Fjif#EA(oQsT2ZqHn$mu-`OA8m^s6mML^)n(Dw*)q!dMTOG(9+kw#O9pGI&rvqaf zuTC|N2>Pb4(k#EV=d024HS+@1f%8=dE=YGE7YJDHZ#p1g^f}_2wwM)G?=DtCd-yyxaT`~R@_CU8+5 z+5Y%#x`7rNZ=--{P&*0+(=J5RU=Y2+MQ}lJ1rirDg1AChG#bU$#)P(QV-k}w+l-0X z&0;2rTNWEo!5t(jiVH5$MqI!R5TXCyQ@6VTlg#|yd!P5_^Z(4C)wkADRp*@APF0;k zw?Jpd{j|h{gI5+X$~3ewc?D`Mrf^sJK1_?Dp>@uFN{h&TbM{ht=ZZd<^A!b~q3Qu+ z`C);db*0HHsQMHG?* zdlyapL$q}!FRCDkkB7UGHXZ;Q<}~LhD?H15W!^u}-3__7bL6gZP@uq-xq_uc_UF2dOCpy2lgXeB;IO; z^cyXZo@^M^R${I>hY8Cl#PnoChR-x@kps12AKytJpS^Q8rzNfo56#!JT~b)^b)GI=a6!6 zNkg(Bp1N%)Ka7Qz)jryLXkA_=RafnKa6DFs0HZB|Mr7zC?NahUd#9uhv3tRTE}!77 z*JMLhJ3#U^sX~$slR8l&=)z#5GWN6zlOhyp&m%2Xu9Rma-J|hOHcX|m2uO$}>kw^| zN#(1BdMi(D2^BWd#iZz}Z78uO8jvKCsULRPphE^L4h=QrW6%GCA@N@+U2s2K#=bn zUQ(AE)h#!Qgg6)tsgC5+FBebnz(cqIA!V@|4o)_c`GmK>`$<8})dz5?BfNQ_@gs7c91z zUqAs0Du(CS(lCFB$NV9-5p`4J{*)Z=isrgv8(Y3FcX}`tTAdq(G64g*)BBNIgL)&} zq!^w%{V91~?(`s502wP$MDFx%^8DQC-I<>!t01ZzZ!7uZxl!%u+NP~2?DM?6k1trX*iqE-CwVkt{ zehbkl(3%L)fDdgoFd|_GbKek*lK%E=FuTE-A!HVh%m8?nwh1jO4IWcWFVF@`BD6NZ z<%K8gNfnL8_-r-w;nNl?wK=p4wQ;1z*lx}Pmbp}rO0pAc=UEvc>hc?PD4X?#WSYzA}C{_A~>SZTffF4YKu^}nmfix zpRdsGW3N8YjYyycddY7?f{)FuW!Q@R9O4f|&O}+$AVfk}$d1bD_bQ+n6`ZwH!|xs$ z!tWj*C=p5GD+yVQUc|J-u?{*Bv}PJ1^)oq0NTvJ67x!o8$J-Ad!R}~0KSg{G-%IueI4xl$B3~pux~SR zz-V5`j2M`;=qZeAm&;7UYU4;X5h$Hl_8PIN$xk-t80$as<{V-D zN25CL0d*nT$~i|EBV#~@Q(l7W%#CO}YI!NKZAmM()u6F)JLv={AB{zgkzV%o%8eto z9Rz(f#AN>@fp%|h2f8p#9G>^NogEoS2nwPP81u9ke$o5$+g!lfE!cX$^gcD%Iu8%h zV{QOe&7ID8wvc$%7d%T__0Y9~O?g^%rr1`UkA;w2XNtWO)`x9s@2uvs2JVp2>eR|g zffuBUs#L+pnoE+K`>B_+S_o^x6eGL5(3uj!$`wePCOEnkhppXsyz4tzW=c@f>(Qq1 zcvl;iCVAZ`yc&x=TlrCl!kvkk;*Dh1th`4Ha7{Y8G;DC=&*s1{Fjo5nbSeHpuItHC^4rUy`d(pWF$ z7lapTkgaDf&^i{QHEhw~h_M*F$qGI2V=<8-s~mhjD(etoD-zwIAC43ePeO;qvQLTp z1;O_LzYFRtE&hjN^>2v1Yly9bWD`f(mtA17P(r^y!4C_kA2eNdToqp>RTd3SQTg2f zj%zu%!%mwMN?Ly7AtIBWbHR!ISj*Gc7B}e?l4GPh2%%R>js-Y}z;By``b44~#WczD z`EAQl(X0mOSB=)2X+lIVeM4}eS0M?TibSzlklovlylKKToYqy2*uBVGv6$veG(WP( z9!%bP0lzq(h$X&BFT##8(*0(WK3a10fPBlOA1yfsp^PTIPI7#CkECLPNly>hAlZ9N z+QziIvL+_A4|ZzU4;w-mq_TqF7UxQ0nJ8!W%Y-&jOlX61H{=g-4Mr(>F$nQA7R5*~ z1_~9sP;(mYEI-Y@3igX}41TPkVUkuPKcz2F<~1m)VoZMRY}Rl<8DxiI13`)Y5CA$F zOq%>+u)g95j`NQ?*r+A#CNI;Qbj5qkL9_s9`LaFx%-X=%tV-fIG%%oQC&fi=yBV=Z zk?jh8!=W;%eRZqyFiAHdrS@OQt-v2*6bg6AHX`eW=}jGApwwN0%h!XkgB|THLTYdN z2IaD=RlaOfyU=MR{t%-u{4Uv|S$Y(bq^e)BV(>Y7d{JZTPS)g#@Tw#xK*mav|J&db zx(`DWheDYfUQHB`tTnKreUa~NSTVUE>m69pBFTCeR;Y6$>pfUODYBxKMS);st);@g zLkO&z4QU#f`cLYk->a;ez^Vkq^>mykXZRaW_zSO&M*s9X{QbWEfCLb((g7{Hx+TZp z@c&!hlUPpTKG5s`nfH1~{PnNkztuV$|Gh6Y19bOetUoi}s|+qj4;&1B=eP0l%Xs@lUnuqLxe-CR5s&9aw9AbEq`C4!{az`- zQ@Ih{awFQC6yxN38H9eh5#3FSk;r+vJZ~DjrshTjw|IMp>NJimMKQl2c|3b{NR4@t z)zLorZ98AY{sPFlU6Cz45<0OX~DJ9M4_;0Fl-FYchn8XQqL}4U$O?-`{LPTA~Hreqg368+ibLNU{ z#8cx2HFQ;Jhv{O)3Yqg12Qv@8qVu!Geln%|BC z&D+HnHK+=5*T}_P0;|$Ltj=v5yN#iZ-1fGb@KkNkP`3*!GaD)4V25=hIZ)||F&mtsw4A=@1vRIou<|)WGOnBA; z$TTU^z=IO2kst@M3;5ya0b{j18>^Av1#%xx$V|X#dEhjfZxM4vK}^$*$!%=h76mDe z6GSW~MFg9dKsZ7TNB@ZaOPp_H^`lmSGabQnJw;7(Rc!&LSeo^6%;Aj1!8f#}#)C|O z4t#x$r(5u&%rpXZp6K4BrFAqI>6rWhdVwJ95Lrua5AMRY+V%k!A8>}5PtGa(+af~ z3%Id2slxg2xkb*=!Fcyfa#yophqDGw3W>?u)!e21S$@iv`K_S*nvm^(IlpaVYwV@D z%@W_XJMS>(9lP@`bKbQ(@4?B+%CBBZZG|THtbyC+n?KTM6UQ_x(!|G<-Ng1jywJt+ z+d8n}r>$uPbSp_?#!ZY+wgKoCtcXJ+Nj0pt0jMS>i`}!v{n`G=f;L*Cfm%eQNl{nK zXk|=}&cx2}Y;RKaq4l>-h^`_b`nEVvc%kzj+YWq&20LBdLUz7wY&W~$Tn({ze|}pk zS|-vFg9BoB;!U<|f*uf$v&B6Q()5x5_(8-C(C{7G&!l)#dkw))G3ooZ)F7lE%(jzY zK_iF?M!FybJ}M%=hGtI>pavmaZ5rHOTZ)WuX-`kJ9JcxL+uO*?Ah%$C$P$XND7G&= z2loWT!P>)^EsjQQsW84KKQ-Dhy*mX>Vf^-(c61L97$Mcm!MC-yS>81WaAR*R!P1G} zzJQMJ7ibGxX!6245^i=`P zCcl2Da)0e@<33~_Linb-+Ozk8y+5)Kc_jO`4$O||(z@O)>Ws2ZM>$*&SH4%ikM+E? zE5KM8&37@_KMLasFW(2|!K|Xigal+ZDbm?+01lH=_fBs$U>?CF?V>++bE6dU{OQw> z3^l_^ayH`-{oPSyr9p<*u?@pChGDq(&~p5W$COSf?LDNSC8fB6=rlKC6D1O4p@`2c+ zmqdhYp1TA|6BqQEEha8-{cg&FNe zeS_^OnwbUP=t)v$Ofy^PYc%zDW#T)c8_5@NRs}?O8rRe=LeBLzRW%={Vx%)MmQh)> zb*ctTUwxrKpjKK*R=8}3bdNZpfR4V{jpc6+5G*|vii*R>-KSm$s0avRh{?uP-)v8q z5x`I42^c8GsV~O&2s~+Z$2@Q%G+O}5XF}gi_K2W6eA?-6VH*dp-zN&PCqj-YDNS1b zx5yKEZ{`E^f-;E|jYKKZg#$XK!tb6(8p?#P_a^DV3UW&Rv zKs%K*kD;x4gs`(JCPfD=?b^qKE7;Bw8pwQ%2)oyq(Wv;{yL9-pfVHZEdB461pWi{$ zU|j9h5@H~-!B)>20n7$i#B(iSB{J{VHTe7vRuEueLe*Tl5WvE@hBamhmhKT)6%wpX zkHA7Afk9za7E#M+03MB6(i99_4I82$`&g-Km@W}GwHPEi3-fC-|DY140{+n2M8s`6 z2m^vYxK4Z|gXJ_V6|kiLMn9MEGp}eGeyV~Gfo{lSMT**@>`HBXG@~KYw^(hAR6*&8 zF~$pU2dHn$(b;5&z@#8Wb~L#XeQ{vi9~Npr^XtfhQ~L8QWC?<$h%6znQ1MVC;>X{- zH2?)W`13ck$j0;F+j_VU!R;Z1Q7fhD)FVyfZ!k7Diw|BW6;q9f-&hFy1;l#*J6N}# zcplYGJqmtDTbM)n-h&+|Nd>BA*1)d;_H$@JK-Cp)*33;+^cXS-vtEc z3j6_M0Wer!4L6#!qx?wsn=_#W{%Cux%8qtckMKscO;&ce?Qt9J)Bv?h zt(9sxAEjPU2RGFcu~#Vk;ZX&$d4o38Lo!0fYG8{Gs%noD^BhbxDzz|HgP-^yba_BW zBB2|_O#~Vnf!;~a9_WQ+ua699FBK%F2^C*p%_iaC?{ zZ15oKmsvlXoxnouy~m+L68{nNMXI5{%s5Gj8UQt^56}wY)uvoC+Bd9DsE{AZkyMQ^ z)cO{1Q-2NtBf*`iiO4jGIO`TdK<)ZlC>aKXRAk;*hVL*Gtr5(cO3a!{JOchajyfF& zt}mm)my0P-K)@v+93*L~0K%d1ELDib4@%X99MdloP$7}pmM5AO;-&&2*8&n**Es{s za|?__QRiHvm}$0{_2f%r1%8j`!SgptPDwjcQnX7{@D{ZX7^3xY1sdCma8l@raca+d zGz6d`X+_82jW-$73P1#S!DfDu#pJh-bV+PF^T9~5@}w;qEQ=9p=cE>8Z5+nV5>wljxux*iQsS=LGGF1293(l z_mqJ~_in&kh5>gGzcx`zxQ@6;lMQ!9nF*w@`>mAcIarIa7_P=P z*N^THgJqwBE-nQb zr=XZbtrS3K6uXZvpcA#4Fmb|fHPWD)BR!9VPYG6)3w+_yn+5$o0hoPtCk{*?7PU?y zBudE$n+;&(!4y1ZoKi_to<5Cz_d~q~>qYGJL;sB-soWT&GEPEH*?}2$o7%qG6%FB(Vsl1ogUxFF2B65aguZA_ZJZ+>v+(Ul1ha z5_)xDmIiE^Bv7wIgKR3AeIv-(h~Bmy>FNQG_3IV*+6PwPX$I99u;*aFnTa$rK}I&D zqU&J8DL8)a1;hcI1;~qrRiZ4FfhOTBZ@^&_2I}o7-v=|EV59HE&`*oN7b@^W%p$D>QLh&+!spgqu*FQZEhiA=7IL^po=?ILZfeW7 zRDg1ivWDXxipdxNMZN_Vq17UVH37X3YLEa$%?9}91`Q9XL7!{cplj@ewhb7P{30lq zqz5ENSpTYBj-Y;xY$VfAo5)5o4YPr4B-4mBl8vMmX|I!wWEJa~jpP?;Z;&68S};E* zwP0yUY7qpRy;s2sLFx}v!-0-0RQ)9QDHSg{*_~$hqFTIBm+8a*oM$Y;w3{9hQRH|cQGF+Q>g0l6yI zDC-y{g{`P2x1TFyG}ECk0q0e%!*QO&CSPaQa_|UG9lfU^-B_c``g`eMAiL>?T^(FX zQv-Q)b;T=|y;>{F#&uo05^+1}7zZ(UJ8_GT(~eO=mBwTX-Ts+uy98=!q{Cao)fgmf zH=taAu$bk>_uom>rNE1OXx?I1h;Soh&lOBE z^%_xfBh1DCi94chKC83`9L;fai!%s zW(A8Yak3rUYEozo!zE?^^q^ybJw3RISd7{x_T1=BVLh}|)Gx?1usR}LQ!^>7)Vu&js#7W8oxg~Vbki>&fc$&Guj;>fs7$!nC zboGK2{0*6)!Y~FX8^lo75wdUSuT&d{tMoT;nZ{Q?T;-HkMf;U%s-!6Zd=J!lLB~~v zdx60Pc7OR^v|j}iT&mEgFe-t4;E6k?63s}c$uzqJR_&Eon)*{|Pr%sEc!d83GFB+8 zprWGV)7Hqs6=Mwjs+q&QgVIqd*S5Rz%I##^2KW%&VjBIz5|k7oQltLfe-r$n7{zbyU}#&!ewPN#i?GaD=HrsKu?vt3^_ke`hDJjl z41V_WvI;lSv`9KX?*!B7d8wDjVQ5Mlyk9<11gQq#(5NWJX8x1rB!HB$p*ia$WTnOmu;F3HHI4j1I-RsT)&3EdgUI%fE_E)S0QcR z_nJiI;@2Ia?un$6AF;~o2e0HZWsyQ?!Lqy9q*ak7(JhEV{1al_3*B<^eW)~RzUW9) zrpfd$NMIa-`x_gfuvM`ReM?t*^9E;f`EdG%*A+SuWeUUDG)JGW9tP|kN0PxQn!n+# z8r*P|-m1Ykt8bL?>u#XLpu9Sm9s}^gTfTWsQ1@wiwnBbHpI=S$D}8}Rf6EEv@zY7dt|YuSucDB8w?t(?f@&i{7FbyX3|ss5A;T2Opbk3)-K z6&XDGmGmK0acFcI2o1KdLFZv!iABD*w#Hb@a@9YO@!`cddv${si!mU!HAOr$DYhE$ zB=kc(2_1aQ6a@|iJ9t5v-eX3u?~L=mQ{kMOeByTs7^VCgUJ1V8ROK03yWH8>>pLjd zxWSa=dJRK)edS)?QCbuyUBzh#w4tJr)FO?0*SMS(hE zNpTu&)%h}gjuBw736tc7c!#KjSZ0w5Jdt-rA+KeLmYfG)OwaWTocbI(JIuhrzH5NT zX}KzC2_n6RjE0Ceh6gcC$x3RT(g9$89i4#05cPt>GzpudetkkuF2{SqDxc7USz|mdw{;)by+*~(rUTB z(#6)PU#Zftj$AEudOQ|;&E z*l|BU<5Zfmpsn~>&f{D+H5wTI36|bav0%+2eWj$sF@!X<_qPOMl%Hgg-XjgNAH=Z@ zicB6*x1;~#=+|R`mFAHk2wuiWUtlLo8JF@<&gNf%rW}6(-M=&>^nxy55ia_(Oh!Ri zGz=P}f#YcMB}Khq6i`QJ*K_4E1CkG`%q-8nKvPcv_o} z!a{zuun1af@qswy3Iv5$AXXw>I9JRlJE}hom5whU^c*4ubM%JLIUrz6p|~N0P-@70 zF9g_Nt0tq>j#$x`X|c-j9}Ej&y%1^bfw34hTVS1>mQSS;2I}|V@Tl=YXes|H>CeNt z{Lmx3>F>x0hivlD$t=r8`AVsrv|kMJtUW}lI#{FvqO@4m_bujMrh~5Ve(z8;3y+7` zzHbTt@)@uWOGawupp1m7CneY=h2$KHmlD|EkP1jl4ot%vLyMNJ3q7*@36$UT_)Q$4mJGRM8@5LenMVhMyS4j%5!r;>Z)kC=0Rjx?)C-h-GiPJV^T@2? zA%Kfw9$4hViZ7L98W3TlF^eR$jzp_tFoP7yhVZqAqFYCbZW&3!I>eQ$;ozl43>&OJ#2bAf zK=y{UL>O4st{p5{7{?P=-R7s{>>*A!g+n@gWj|U$F&QErQV+I~3F6g-@2#cY#*qM_ z0z%6XyNC>8*og{>8uFx`$`PCL!b%3$CLhT`1U_t;lsIA|4)$uu#Gej5%CGBBgAbS> z^x%r2E$M5kUyi+g`-cG(wQ4g!t!4EB7*LT+d|BwhY$%RXV-AF0bWn&yZJ}s!SM)D_ z=-dhfa0P(9#tHki_FND5Gkf|Ar9wOBh5B$fcJ#H^(bP!*Q4l zWuFK4;xsjuO~k`EZ?a9{wkAhG!MT{JhaOD7ff)V>Z%esbMx!${$PE(|Y{r1)6z0n` z5@52t5|kw&vOZ5<`8vIjk>^yo2H#xA;=o=y)E^jL!lmYdLhf{ zPC;d<8>A?@dLhGGSFg!%;lC;_y;fkvq(gV1YpJDxrfUT>yamuBO&kF2sxz5xbE+tFxnFD5;mDN?YR|8TN#0L6$iEx)Wk;$(0&Ojj7jDh+WeW8`IHOtm5M z?#h}u3zJ3|Bd-rwn3*)+z@no%k(L2bNei#_lJU7;u_>vBBuaxw0cif@QlK>3F;1{dd0aLea(tq_k*9(A$-fUYLoFXo_0 zDn@@qQRvLxu>#4Y+E5Uu%dYtgN0d?&bj-FWpJ_7N>yKz8Z}5!Go1Ot_^$6iO z69fv{qQ}foNMB^!6Tm?)Q)p4Tn=vn8gOM{R{0n-c6x?dAs`8LE;7bRcZPSyM^!+%$ zw4wlK%gsdJixPbg#Z8_N%p@!B=H*_bUshdPR(o1sMi>6PFde1!hMzsmw>iuYVZQF> zEK+_>Dl9Nt#$1(-S*h_Ytr`Y9gmcnA8uKu`xrhy&^A3 zZySnuiD!mYwhXUGW}`pxoOkE#Zryf(18Zq+jkBcvfob71znW7 zw}zY^I|;$|Pze0ZBsW?S#&Nn8yq-Aq4%A)Zeb6jlMDh+n8gw4{i`;erg`6b}5#Zj- z>*;Mx#2BEKV(jBr(N-pQ5zt3w)X4BtB7>wM^BDpYBt<%~xK}a;G8#BCyT!hHYOsH@ z5l0d}S99@M?RHT)Eobl(Y^J9kbm+C>u!Gh22%qx_+?;$YXO9J@m2v13z(t&!{seI1wG9YB!i7B=g$F?M8}R={%1JwMZi91Thd zpK1i1qoCUbyOi*<(2u=NSo~AHaaG1&|3I0k%vm)Qb;t@l)jJVigO@+%T^OjSy6B^o z?3Y%{zLp3~Z_i?5K~wN3fhj()V<#{*6><{!QB|VHDJo8pozm5y^h{740TR;CYI3R?uEk=S4$Y*k*8{Yml#={buAHcD)#b_OO@61Dl9AY>y^ zm@Z>WDQV_Y*+I&`4EbcWqtsHd`<_lmnWunmv`d$97r4*(6+hV(?q)l_x3Z+fj2mF1 zv^HkU=U1&F*gs;a0+pxUxA`aY@+vWdSE~+JFcyl>D**ol#ItHH>^(*L4wxu?F-csA z;eBS_4h`zX|9n78J|Ov>e3SBl z_At;>Zh&iYiVhgCdh1|MFjhlGN)eh59TjHdfolF+cWC;nu5vAmd`K*ZtNTdfl<6_It3~ULd@5JL+d6>C zXZ7|%QSo$T7D~zIyhHUEKxMWClo_&AhN((Dz@JN>GAK0jUYu0BLGsLN)?g`CoUvN+ zG{~(dB)G-_1eaU{%n(^;J%K@RP>d=|Y0Od&id1HPX{<5CsF1I*43F(ry{~VArevUw zrYQ-wOc?g08dG5ntRjPO&wI5Q1r0X8BCp)eES2Bk1FXsT)zk}0h{1SN%M$-FdgQ_P zhYw;9=Q>T#Yy;%9#eP`TfRr;RLCPWg6gm^)2!)m~qE7aceJZoch$_n{l7TOI8($-#(Vg`VS{w?yb`C69KI}8Mw0yee?C`GYY00f0ueNfvc zkz@iDai>&ZW*>s&_MF<-B3O$d+(#kgS)=T^bU?J)vd7HbDW}Z-_7qxMI5c`!S3PEo zxo(tUY7$w2S4|hRBm5T_lPnNV+(9bT8|;n#%W8q_7;9vU73C-}W?e3HCR`xEN{z|t ztp=&)$~OOs4RK35;Eu|y##bLkUVxfK&&1UsbwWxT1!uO@lXWU3UU}Ug6M?xMEN+Mo z%EnJJAX;P13shQu#fPYywM!JHl!7+{xSi~0i!+`I?$Ep*<2Un+2+ z^G~o5n-)43*=%za@$<}Fq3#geG-Z(7MmA|TjCQVrJFkK>dWgg}aHphzJuHWSPj)=T z8n6~vv(NqLOOimcnR85k!PM1^S4lWd$QXhn>6{R;e1h>P9{A>} zSKtvqgyz*l66v+V-*~e0V%|lSdvTVxKF_`MYVAq9AczS}-mR`t*!RLTaynKt?xhu< zQyy8>wZ#D}*wR&iMs}*h^nw=aV`?y$>n6udz(oTLSuvPntBf_631HKjvgdU4rg@pM zZsiq%hbU0BhzA+0DeACO+gT(VL|k$In}wIe)*gl@D2KQ7Id(6&@U8(l_d*nV$&4&W&ZxV z$<2%Pbc`Fg*1#{&?#Bu_ls0DhoY_)xn$F;Xbt1}oZ4V3SLRKj8ZJ})yU@W< zx3HRC5<-MPSRa$DzF4EdhdNg&rMKk-Le4sK8m!42!14S@D2v9jM+UtgjUlD>!6X$@ zDG>e?rkRf9Qq`8*Ky;Sk_Wt9zQlR<|;G^<05vt@epTGx2b|DB=n5sgmisCYcJKHi} zMDvBZsE#sLZ8faK#ZdpvuYMO6OBDkCAS2{3k>!x}q#ZWWAT!8srW9q$p%5NhO9EZEwO)4G)pKvsm>_IpVb(N z3BSmv#~eqxX#s*b5IuIyeBX^RrbYCu$8q=$(yxI zMWq4VakIb1)?x!I`?c~{GXKH;l~#!So1?32(KVHa;Lm^ulb$f-%D^it--dsc9Q|!F zzX((0^gCU#IDiuA(~iFHBi5;`Pc-h)U#?zx-3+Q26#jT|H;B|<;cN?Tui}@K$vy}+ z|A_8rC{{+aIwDP2q*52Bc(c10qZCr_(bc_-&$*A~5c&*S^Hjl#4V;zN(4Xj5VzcEu zjym=uPtwtXbz{ac4OSR*2C+1NYvQ5D1&uJz;)cbb_j@^}5gog>Z4T4|Xs-aeZxX#rKZafZ#W|xux5dQSVas~OP!552> z6Yu%!fKCF9V2J)niWiT^6!A+1^482{g+m7Mcn})D-a*Yi-a-pI9*0AL6DX#4Vhej( z3%jn_PS9Dg@a1hqV}68Gsv`Wb$~&>ae?1Cl%<<2m&vZoq8*?tvue<;RT(9F_c@{$h zzz`O&s48a|Led=nO-O?P)Qh1Abxgn(M}h}xc}qp60wL~N_9P}icwg_A(Jv)N&1LT1YIAmTa~Oa8P0L@<#S45h)ZqY!zOi!l!4 z90@?8RRPb=)kp+Eh;tgqRhfX$^{vAyBgqe|TMwZXF4X@8TmWKA?j<5Q(BW@K2d=E6 zsMlafK+`*s!B6f@6iDV{_kIqVV08Ie;)dQf+*P5Ty=}Owa-f?$Z3tr#YzSj^8O_oC zg)|UklzZz?CzP9T4MA6VZ>kI2_YenVkH^_yYG zwLm-dxYU4Y;;iN}FcC@U%psQ@{ozR+b>-{mcN1~B2YI@J7z%&Ovb%Jgi@I_D8JK=6 zAZp8uzr!30)4EjXl8hTz=M;RJrplZyqmOZ#!e(^?Al5vpFmd2A zbCUTzW{!kHL+$OR%D*|bG-GOyn0(G;)TcSN5jc2sJT&fEdA%4JVo)^X_-}xXcBo;B zK{MxygT(tJC~b1ChMh#G^bk!NaxZ=o-5a`~y+x3v^~9D4tfg`kRT`+0c^}1LGmuQY zupYFh?kaFF8=DZb0QBiew_~J1PYyZh9}Ig)(d#gcX0YH4dryqk_Q4L6DPDOEa$_AN zd2E2|O^%fh&adEf{HtaRu3?h(2Uu};sTLbVUbx*Be?FPtch3nB!)Sy+@gR1caux9E zU@BmT{5Ia320nZd7I+C?G{-6QMJWQ&tr8I0`HC-uq4;~?57BJ`&>a|{VO?5a?;!R~ zAlSDM2PfX+0|e$5-#b={a|dDe@PI^HSX!%efjH?OAE1-`kbhb!gvRj@HnU6vq)Nnt zW>Wx+WXEa8=m-UAUo8W7& z!!(k@;&+%vQq%#RS>R!OL6n3Wi0-^ef)`+BUkYbo^z|r~{PJN3HEEDefIOIpNe2<) z$-l4?5&|HIT3%onjf}~BekLAE#RtnGXLMl5rW{vt7WG0KN^ATUuA4Amvy;cA2HJBz zyXTwsIZpg?S+sMn@W&76W~oIdg}FYuT+k`)a}F`GJQ2qB1Q5g5avU)L90lxvCUTpnOFtz z<~F5l!ty3%Cj`K=K0xKTSZMt~1|QJY>Qj+*!Fyv(k=3&{Q;;Fa0(lqNQef1UW%$)I zT@w>guHNJqD}{_lU#VyJ8lEu<{y39UTdc2;*@R`-Ih|$jKx{5Sl06n+|I~<$*Oej8 z9B1Y?)Zgm)maJfu5o_m=*S20&(^_~LUCj6Pee6DXi6PS}we6ClD8JMzA3)d%|vB|FO zGG;^MWqq9_FSUBlBA8W4bCnhnASCFM9@-_{ClJpj+lIBm6j=f6UXF!0&^UnP_0|)y z7Lt`g+-j^dEI(t-x@sq}Pa6UyArDQQhUPmMqMT)65MLrCUxgH$zFt{l6XqM~Fv4CBrUVS7B z=l?uBqp&=yz(&7;N&jj~3{2`LNn%KhMsnwN`Y;j@b6JquLP$Lta3NzRvGe4(Us8bk z-SkuCZghbd)Cp=%_9;SZ(`#^t1>tEFPCtJXjy;lPfMyMN5x*&AB!%5d>}NmdE3wld zsTEiU5No0_lWHfm2}WDd+#nvJL7*L2v+9hIcIhv+794G)pe3_P>^)8*i5Dcx5{IOy zzeF*pfm!+@EBzkdsRh=6Ojg1)_M6ClC$iso_Pc}qrm)}n?AH&!RMLN+zw8SNE(K;h zObCoWj2Dao#!{i+euXi^Y=wCT=4F_rFf(CB!t{gjfll^g{XF8rd<3%;#td@+ z<|a%c%t)BQFhMZgV7y?QVD6t&a1}87V7`Fa1hWxl9n3PAnK1D%V_^P{_#(cK{`q|; zR}Td%3_BoE^5;(nbiw+JqnP$D+0h{|Lw36%KQwn{C>^Ybq~w(N(1wi*Ov|`-81^*w zuRSfrrL+)9aXOeBm|PfID^Mm17<%$g1*3z>fysrT?k6HOYyK?F!qiO7tfc2tXC-N7 z%uh?1p_w%!b4DLZK0JNKf+S5wQf5|~CV9r3`AM^I03{_oX~rzgoP~2T=ggQtXX%X0 zIjIY6p_FK0s%Ambg4FaSnps)ta~96lBr_nb<1^@#gY-u_d0YNb-N-1MU0juI+}zw% z9&LHGr)RtNUS8hbK0X~f_;&2r=`p{~UAk%>@7CQvAfU$+fjytp_UhfIPv4-Y`UUqN zF!1S+LC=H^4jVF57#1EOMh=gP9x-y%=+QA_#>S2tKVc%2>%=EKH+6dA%vnjvDRbv9 zOiRyPv~*dvZdK09xog(G`r3xSyz{;S@+lWkMai|{+&FjO*n?|}iGrH*(2Re0bCF62`-T9$vw$wxn5jvt`FCj3*w&Q z`f z-*P{2JGq~^JZ>+ypF7NzaL2h*+*$4d_ZxSOyT#q(>T%ysE>p@pWbI@fWPUO`k8v`q zQ_eHRd*1FPF1eKd-!Py>#44j=9;F9-hEKa9CwC>#WzY z;Dq&u)i;~YUbDUf>zJ1h)b9J9#g*->x89*(oo>flwbttu%o?+>%zFI_v&xbhtTj@E zFN`%0uS;+PGWXoMjDZwUWZ0OxCq+2A>4EhoOQlPmebrjJMS`&Lp|x6y@a-#itk*6u z-`JI<*8B=7f=mj9<9@T%;iuE>>we>W-j5${dhOjI`riA_e!2C``w!2`#J;Z=zxnCe z53T2QvNvn2XDe87c9^a;o;zbL1h8?>|8RTjFZBoDFI#D8JhAuo9$24Wa_qtWebxhr z(BZkwx4-zY_83Jdx^KNEWx3$*HP)-p2#yH7R_$**Y-Uzj&aH;>66?qCotAr{;q))e z*Jsw(_jY~2a+7VVw_2(YtkW%fwZ?ks8nbqf`Jo}N)Or{W+55mRHtAqpVyd!Uz=jvB zy`TT7q2QFYf+ENotjDD?9F*Y_D7^4zkbP^dknD|Z>Kcv~Tg~wO#-rj+-p=}ch&94< z%h?aUyZ)*5noc&ow(-~PEak0d?>;D%i1ltvLETRU%va`ntKoDxE6)Dla_gR5l!Gp^ z&o8(3pSE6xRkj;KZsw^w|8c#&IHqNe;>gqv>o5LStkiwPtkpV) zRrWH(@lqDYhd|IFS)ZQjh#-0VgWm(b$E$YjKC`L%8*6rtZI;h>T>jenqb{t^n)1K= zz4{AlnNF5=We`M885uJF>T{_LiQJn`V61`P2{Vw zlg3BCJ3HhVw=JiC_Vn18-pO-wuL5tkua@}67IYfYOPI7i%B{zim@xIp*BZ4*1I{a@amV3?US_u~!GKh9e9eyV0vY5~Ta3kuFl>i)NrsR?~j2XE;5W%*_AcByGE#7z3m+T+Faz$ayU?v=Q8ToAAAy!Mmh z0or%MhIV;3qPHk3nH8(lz9S3n6t!;57`0W`ZSR(zfzHXL+ZD32!TmfxD=~NIIDSo6 z|1FPw(xcaJ5pmCaK0c#U=yyXypZz}clc^)#2@Leke6^(86W{dZ)!VzBf2#NPKAw+n zcbUm+wh!v#!3RvC~uPyY;NarJ}#h5Mre%S-8bdwUZ>j(9I)!5 z@a*uzfjv8P8Z>ZF+79QQJw7?!rCX=f8#CQBFF(;bS8<8yQHgoyRC*xBlWqmV#`osYVx>+wI z^&U0$rM|(saa&}AJe{MG2My@?RFB6!mJAxvNj9mcTf~}}h0pd)&+v9~OSXQ}!6m7) z+HI09X-}s??c9=+k9YIZW_j`cn{}eBQ*u~TK(_&1@0cS8NA(!7*za6`*jv|4*4O>s zmLZ<)hrd4Q=^?`dv;ptT+B|8KY-pP)xqgCX|D;iTn>K=V$71zl7e8mg+ObX+qV&u$ zSf9?+J;QsAe`QdoC4nFH>uPvsb;s_fgJ<{B>tE{X^4H0M!YdmpdT-bHbn?_!ztdJ$ z(p&BQoN&%nwl~E4iFXID>5zPUg34o{*(&z+o78F2B%Mz4`j&R?u0z*vQ7G3)gr{`~i`*#mn|%I+JtHMpmjCTWz;xajpv-K3D7{MPG}0@@6T>f*V0k=3)^ znxr0s*E~I3+iBhF{_VSLvCeqRYfbO4A?31hKM9(iURi%x=jFXQt-UI&Ko_L&r7;`> z;XnS{dfyR#z6QOY^jF`AeN5ZmU5D?rCLHvT{+ffW^lG&2?-uD3kp7yi4y(1!VQpyP zYmbRv{Jw=+E@ zZV|%)!9i9B^hYc$6151S**unmY^_S`SNj?iQaxrT_n#SBv(n#J8`g4L-(C9(*}s3^ z^ztfvo0{%i+4Jq&YgeyY$z48=Lys`kFm*7TOrdmklDo7~dAPZ{x8$E^AD zHIrjQMx<)eW@Ka}&C+D1k~=CXGa3uer1Xryo|MPL^sI%?&&Wi03iGBV<%osPr>3VT zJ)fzWm$XD$cc#stigh*A5*6U7qOa)2YXkA zuCwNck6E>i2nahTaRcmH049ZwOZn}`3JtH;tg%ycu_Vq0BdP_rh zQd=6YjvUw06b{3wyB4PVN{(x3NX1`E!|8yX7RCzbE&owDfKv^!WqD}j z#HrJMM7*Cl^`>6{1ICUIwg_nP^HZf<9duK!{`8hyz56ocuT70u_}ACf-iP|D+cnj< zZr-?Fb*<8J^~!ITFI~J)asJ%dGv%jGm7P3s{MXWBCB;XN96ogL!2Y7beS7y5#x4t^2O($efr7AA8r2dgH3-+D$`_9`N|MJ$G z8{T;Rwe_#AGp#kQG337T^6DJ@s+GDG*~^!`v~9IwWjx=re;to*p=$ ze{jF2g8KI9-Ansq&%h^o1o(IF_PC~Nm(G5Vb?WHb!N=RHeLGJz-_}Fr?$$=>>f)@B zJAsjjft&ePO@b(I9|)mZ%Agz~sDCVhY9)Yr_PHrjr%g|sG4pvyp=PJdnLBU(f`wQX zq-SJiEn58IlBF*#Tb{i_w{n#}XZ6dkX#atO zhYlY(T3m9h^w;AjPL`cIU4G{5x$_klE?&C)+m)-9%4=2EZ`{09U32@+-Fx?I>*^mg z(3r%vV2%G+|AT@5VBr4}1OMvA|1a+RTJ8({$NnD-{09U7cNnnGN2~w0{~n!iJksaz z|I2^&dj7kAA3^)S+dS944Es0za-4lVh?5zu{te|?|C2xRr+DNK+vTnP36K1}G^X{x zwQE}cgGjN}AFb8tPu)$X*1!b82r#iQi7@M7w!##{RKuvd!yhKdU#8{);3hwqVD={$ z?DdqO(ywl)N5z4mum~@{<0ZJJ1qk172^QcKJSs-QZ=x`9_Eh*M39?`3BP>H$;kFdv zI$_13Rq$UexZHY07#y=kIBQxfeDU2n!8vceAm8yi(ryrBbKer&0yhe$kH0Ovnfb0T z)cJj(F!!%Wze)IN-Uop3q2SZ~Bf$AsDEsac!1`2Bbo(6ez7RZL*aDbe3imgE1-M@e z5kG$e*jt6Cc7F@_e@9uqLmuA?t8#uoKHCJ%sO`vWhj4}4iTrj7Z9d(FJbx74AMz9O z{aJXY=x5~pi*O-wH}W?NVcX3pL!L0Zb3V$EFDRE3pe%cYT?h7{JbMNA_WMw#eZsQw zg(z2{kYgx9+4c*s@7Ry>9RPj~po|BF3EUx+^N{dk$HOS=VPRvhBPj0?VZflHDDzRF zd}uMsT`U|BN>KI^A$;&Ll>eBptY0bWP%3Qg{wwP7tI$q;9CbM^6xSX{eNG4+%TJ(A zCxwo?PNH6ALhXh!)a{f|KJOIjcS^7fIgL7=7KXJgM?K30*VE;w>lq>8!!xMwSU>u4>Uj?JJ|}#C^&IMcUKq3aJnCN|)IV1N98?I0Jud(c7levE7l4b4!tkt%z{f?w ztNSJ3P~tH9M&LH@y2 z;OnZedawmJvk3AN7T~Q?$X!qg+*JzQ<=23}Yr^@rt^tSFgrdMI;IT@m+))KwUKhqh zT?am|gWs+Lr#A%E^c%qI4PlAp25@^*7@u|%_`NA?x_=Wmz9r0i=@#&OOZd6z7I0lH zysxVUzN-Z22Wuwvck~HfV515K`}e4tIo8SMPup zcZJaDcR`Q4!rbF`L6dtz>d1Sb%RM3HmwTYiJwf%$EA*?W1-{or$@jt_+V z(+@z)2H}-q4WMU(F!$32(6m8Vpn3?pJ`~Tfu@Q7` z6sqeQLF*>LC7}uQZW1Q%XadcfgiAhF(A_G0lW7I*t->!QR?y$^$J!@c!+i1v4RZ^8 zaah>E_aX5!590@49%igigu6ZM8}97YD}2~|Av|p0r0|n-=7yvFhey?~33u)CR`|(z zAA}n#z6|fTbO++@31948jQD55r#xjrn!DjeGq{MZ@47^MdO;OY)xUj&ZbQcij?+ZA zFYXZ$Ro^Qj@#WwM*DlXQ)a(`_PR@&p$a;KCgt1~`#JSI&i|Ds>X2gVvb0XZHPK)T# zZE?h6@9c<_+*J`yZZAhHdeso|wXZ2+nSW`-@-u z_7K1B5-4sAcv76xyO*dL*hlN&Us583V=gg(2d;WzUGY#=&COcZZ0E zErPh`r*QG;5mEf~!fldU>kIaf#x$elx{R&&(1-;*&-9#VO+Yx8{mP+vbZ~Pc9Ur>eIxvk7bC=KK9M$V$$I+#OkUo!1q^TVb8C{_9MO#|C+K@Ov(LLeBradi#vlg9^$;L)95k<#kTnGx)stO;Uw;blnB< z@f{aI&r9NT_us@(1FncE)31s<3>Go;`%3ZFxohIDZLWj9H^lylH^r}vx5W7E)ndO( zHR2Hdj<_WBuK3&Rd!YAyadcj-IQ(XvnD*EMaes7!IBwBH(eK^$s&y=anvtXWwNrFknT6(rjU6Eq*Z{f$v_sEazk-x2r8?1K2nTK)% z@*AvnL+)LwhgQ2G_t3b9R=Xkho(~>c?S|YVu0OQe4Y`jDY_!@9xhJe_wAu~1%MLbL z?S|Y_eVVLxL+*=-O;)=h_v|fAR=Xkh^?OZLyCL@rg4Jp_Ve!IENwktDv>rklSmd%wfp=_6C{5kh{xynZuBKb5AFSA$MS= zlf#hvt6!WPhTQ$y$Q_2<+b75!hTMbyDt8!i=ULObu z4nyu$-?};sxm_Q+It;nj4p%x1xjkP~It;nrDpxuTxgYD%#$m|4DXopekUQYVHV#AX zFPz;RhTMH)-5iG8-@oJLFytQeo14Rs`J4nyu3Uga?4K9-e@OCxfKz-!;srx;vI(EZOeFvA@>{I)DA;#-vw%iA@}>+)eb}MZcd&KL+(#UdpZoc zd;P`JVaWaM1y6?|_rPB59ERLKE^6m6>2a*v$c-eJgnbW?kWA@{_p z_6|etQvG+- z%hvcf47p$a)yHAT?cTM6!;pLZoDL2{Ztw3qI1IVpY3krGw||UkCnw?45OZ)Lgr-S8QfF?p~olDHK|uKq(YDKyjDiE=6D5b#Qlg*W#`(gS!@Y zcS?b_lv>V{wWb-~Z}0P+v(I&%>-=$c%H2D^^(2{OtW0Jlv55#da)3=l$cInZM1)*H zW)~6i=|*-DAy;2%7ZLK+_jVB>H!SH85%Rr}4iO=@y5JBI@(Z0)M95uQJ4J;2X_He# z$bG&$MTDGM-d{w>!zTHQ2s!trzle~>I|4+6EK3Lw5%SF40U|=yX9b7|d2!W15g|M0 z1d0fG?V~^uA%_$U5)pD@pCAz-7e5*#BIE;XJ`o|8tDjFq$S0TP6A^OUn|vZdz7!rT zBIJ6*f<=U!bS79t$j#OHMTGpcd43TgcU+%eM9A;I<`)riud)S1g#3M60TCe&zE(g) z$XS+xB0_d|EGQymZbv~8Ay4~NP(;X@${`{`UN9p>M98-LAtFLvm9LP9kn{H{BqHQ3 z2MdV^xft}s%tOd~Yln&mIcia;h>(xJ2o(`>rLe*xLOwsJu!xXrdkTvP`KG*xh>+vs zi--vM(dr^1LT>k|h=`EilnN6Oa`!P|B0^5S6ec3%0mh;tLe6MgR7A+5wiXo;GM!pf zM97mX784P&a%wRVAD2%;vzz>*uS`lkk1@1E+XU_(h?##ntC?O)``|nDK2)T8Mk|IKW zIijS9kQ2_A6cO@gZKQ~h`?iV{5pvqbND(0qPl*%}GGDHgh>#~tEF~gjzni5*ggnb$ zT13c(E~Q0;yku8t5h43$mKG86y0|hTLM}ABjEIo8KP)36ca(^b%O8mn z5weFVDM1=gISve6Q z|Fy21h>(ALDJLT2AyMT;gq%ILyoiv;UM(*oWQiq4M99-S#E1x4yFErk$P3eBM1*Xw zR6#_@tEX2G5psch6-0!*HK?M9ki&ac6cO^i0~JMtTo(Bd@`+kLgj{){4+VisU#xgx2r0N2)W0{N+Lr37Fk(D$OA`L77_CA ziJuZ&eW?3xj(q>;@TdQrL@uhrjwNkv-LyTQ*aoQiD8Vy?R9@s+aD|r3xxhw;`v* zdOkSm=C}-BR{vC>6~j)8^{j^qbTHGGKX?@A=7=+5{qAN3`jqXW7pId^ytX zheAv@#ClLyKjd2E%c^>QsHNqmSkElwhXyY3<@XLhG|P5Ntly#i(3WMseCneNop#(7 z>pO4C(32Iuy!?<1rTZs|^(m`lNW0pX2ThcrB0+b=ddFTe6t~uw>o=C6w!wGBdQ3SP z8oJ(>3+I!ec?Ir?b+b%{wr})h=9?6q54kVaQ|?O9i_O0L^tcpdhCUGMm)A>?ahoq6 znkGfzVGqUnhJI31W4kZUZ7xL}i#-zSqhqCLLc>$;T4(X0I;?o|d58$fsgmxmAL!2YmVWYzZn^=9yT3H&}w|9P;I)HWHLj_PJR1 z#7U6*h%fI5lb~hgUWoN&dI{Qp%$Fzs=Fs(+mtuY33l4oa;maN1^5t~wE3sa0Cx@IK zUoO9pLuD$x7VDuSIn>~^FPq>Jay_cN5$kj<4ox`g%ioG~XjRp>V*QDQLx<1%@}*oB z-LC#ltRH;KqAwSHdHq!uNou_p>vQ(8DCmkWk6Ol}a&Jx(1)bdVoKRj^FZS1|@#VU( z&+$>46tP||g+{5*e7Vql8mZfV7wbmYXBqm^m#K|3s@(C1SWli#qt>r|`Eh?54etC? ztY2(Fqd9MV`GAW?+Y(a6`np0iI{V(2XRB%StXrB`ADKp>jE}zD{RxHiJ=4W{(=!w* z`o)*4Y@<-MzkZ4J;&Um~KG~Q3hf-*GpA4}sZ%3g8DZc!xDus6T`z_Yr6s6F`AHICc zK%rLyGR6Aea8keQR9{YfiI914mRMhM5uxJ0e0kz7glY}V7VG^N!KE&K`*OQc2#p?| zBi8G{!H!Gd*wnng-_dYv=H8KTFpzf$DG8S_5e^RW4hA@8?%il!%z5p3{tBnkw~x(B z2t9)HO_YM~P4b2d`+2_JcwgSXoaei-!V!jKSUZmA$4&I*S>1Vl1zcAvZy3>l=MPTy z(5ueK+o#)HjVsiOA20yXBIDammyugZ_T>T}GWiN7m@txm%!Z}}d9sA9@s|AVmV(WhM%P#n`ed=$1e~o-%UE23IfBlj# zr#6Mt71atB>n|((=IN`xe7(SL-dQ)lSU;xt&6m0E%UgbA@D1u05bFycX7D|3`tmqW z20x);L9yOva|XZawlBAymBAlw93s}?+RFUxJHA||HJrIBzK~eYUnPT=-1lW|kqkbl zd8k;=f%6iTd+5ube*NN`w8V$9<7w_c`^EQu?8|4*{o<#zE+WpqXZtUH-BVv)HUAfX zylt3RpFaE-fA6_35AE=aPibFNtaqvLi84vmC>~^>HMQlzI-$x zolosqLacADo6f7h`tpKO>3nE!_#@*T#yZmZ%HMpsH=WM6?i-m`My=p)_2BQmT;paM zKc~NNQfxAmK9t69`{~QUtJ3(h1Mw*%@dTQQY5cP^U(W8C#%ByJlQ%p1*eH$HXZZ5H z=rq3Quqd&9CMb=smg&p8rD=To5oN{t%H&jjc(yN3gR{#n7!@tnha6Akcjo$X=k=-l z#WCf?dc$d{{3}#m%oY2k^1^br%0TAZ74+!(U2ZVWl0mA&_0bv=_0bx1w0byCo0bzOT0b!YmfUw+sfUxXifUx{C zfN&dE0O59$0O7VC1H$dS287%E3<$UT6A*4Y3lMI9EFi4IL_k=NserI9GXY_J<^sYx zEd+%1S_%m3wh|E5Z!I9K<3>PO&#i#4t~&r>efI#uIv)Up^*#a!>wW?d*8dbBY{NM~ z*p5qpur1dBVS8=?!ZzIngzb6=2;24)5Vr3nAZ+7XK-kWYfUvD!0bzT;1Hv|^0m63w z283$2TK5AQQ(Y@6nNWZHm7$?dwmy4q>bc=giWUpE)8e*U4SevGMS z%}mBvUzufZQc|&Wfb+`z5J}Y4J`aW*D_SIC@Svwx3wG|%WM2W(9+&=?719Qxo${k*3P2?zJ6{X&pOz{Uva0Ls$2QTrN;-z!WQHm>Hl7Y;vW%`=Wi#s6rMMN5TDrhc5NX6|rk&(81PE=LjobKcQ*G z@F1gH!b%mUd=atDy0@%Ws-RP^R%#6XA*HLg>fNbP<>L7RtY%waff7|3cOKBIZ5>z1 zqM^Zsi$zwd+wQNy{kpbp5EoOnOmu~+4cm09?^J*zPu%xa8aT=~5SBk60wc!RpWhZxn zOX6N}*_=X>Pf}b`Nzy=)AQ>c?Emi3u5P`}ZBll^A;ZSdRXx6kj0-&w!Qeo1~0{l5DB^vm|6)BuwtxYvSN;6kz$wPfZ}h(S;Y;-UBxrS8%2g9S0PoZlvZVcvXHWv za-$+qv0rgiaZYhXaYyk;k*r8nhZH9i=M`5KFBI<--xO(ZI$DWRqckatDoZNMD=R7MC>tqTDLW_!DMu(L zD5ohGDwiuaD7PukC@(2*D<3FdD?ciKC^M8wm0smg?^l~k2iRZ<;Mo>X2`UROR; zK39HFCM#)`Or=vWJ#3>Z0np z>aFUtDpi%K;?xSYQEgX;t4paXsH>>!shgi9PtLLg$sMo0z)qB+E)K}DZ z)Q{9})t}X=>P&Spb)-5*U0GdM-B{gP-BCRl=9ma`EP^>U!W?JSm(@w?hw3-#PwJoQ z-)fb{pmAz~HN`ZMnix%GO$$vsO*c(%%`nXv%@oZn%{t8%%^uAm&1ua=%`MG+O^PO6 z!)rLLR%_M9i^A*^?Iv5pT3a(nCg`3 zvg)SlvFfGjlPX2Us^w~f+NLg`E&}&Vw7QYHxw?b8tGd5>sCuk=vU<6Ct$Le!xB8g+ z6x=g6)$i3`)#>VNwN#_hnBkr&t|_C5)l}6q&@_d6rVCu3WrAj=X1->XW`kyjW}oJQ z=9=c7=85LL<}2JY*_wfx;hOQ9shS0vWt#Pxt(p^>Gn%WK+nT4E*Kp7L&?vMztz8?W z4bzs;meablO|&hwowVJx1GU59o|&p$qur$4r9Ghaz&&#V?wOC;Z`urPuGUYdfqN!E z7p1G9tEQ`?Yo=?XOVIVwxpk9tvvmt~Yjm67o;jfVpiS2P(&lJoINo3m z>ksNr=`ZMS>hI}4=~MK-^}Jqg&>C!pKtowWMMHH%T|;w2TSHgFUxu-U$%Z+GMTWJ8 z&4%5EgNAE{B*PQKE5ldAPeZnWHkyr2V?kq>v5YasSk+kD*xA^_IKVi}IKep0IN!L` zxWl;5c-(l}c+Hq(d}4fM%+}F*gVx%R`V#u8`r7&?`j+}G`kwlM`r-Qd`lb4H z`Yrl>`Xl<&`iuG}`d9kT`tSN|J#A1JbcRqvxFO0=!BE3c&(O@!#?a3&#NakeGR!qB zHmoshGMqG=Gh8>^F+4ZCH6$BS4KkzJXfgU5Lyh6aC}RcV0mCuFS;J++UBhF;8^b3< zu7NeGj0R(Xv4F9dG16Ga*vQz**umJ#*xxw9IM%q(xZJqGxXpOLc+7a#c-i>U_}-Xe zOgB;{sYz=xn~Iom}Z<_L3Hb47E!xs|!Ixrcd>d4zd_d762Zd4qX}d7t@j^I7vXbCUUs`G+~nOj(o` zy~Sb4XDMwdZ;7+ivcy|jSvp&KSYDYwn7^BUnQ4p6qO({mVU`k>au%1Rwxyw^rKP=P zm}QJ*ie;8%sb#fgi)E+fwB@4ZmgT76A)+*L!);87z zYcJ~%>nQ6a>kR8gYoc|(^{Dln^@{b5^^rB%nrh9lGB&l%X!Ez_xBd6)|G!`V|NZ*^ z|M&HO$aund-gwn`-}uz{&iDl`Dj+dwOeRy1DFogbOPlJMnwZ*{I+=Q#2AW2h#+w$K zR+=`Mwwn%_PQW|kRnu$JN7D~ehKVuznf36_Skzq7T;5#CT*ur9-WfZXhnwBzspi?{ zW#%>Jt>#_kGv-U?+vW%6*XED#&X{5DYaVPKW1eW9V_sxlZQf`;Vm@iUXufWKXnqdw zjLBxHMP)HtoR&hCVwN(N7)t|7Q%gHb7fWBuV0dSoXjx%dXGyf|u^fkY#w+m7_}22- zl4{Aca8?DpGuo|@)@W;GYYl5-YYS^fYd7mi>p1Il>s;#!>pFO6++%%X`DFQN`E6mX za;w2=vlfFnVqlKCFh^^cV}y0Ab((dKb-8t|b(?j!^{n->HOczW`o{Xn`qTQ`suuX@du=CdXKYt(w{7oiUudntQ4dlh?4dlP$0dnbE$ z`zZT(`waU$`%3$I`*!&ZJ}+IZG&x>?SSoX+gaNK+cVpH+gDqLE!QTstLz2rMeLFGXnUN!mc6mP zh5ax40Q*S$IQvZdeESOfI{PvEDf?ynP5Wc}OZz8#ik)@H9R`QZQNU5e5$T9_?6DuR zd+g`!x9s=rFYNE^nQ$o!KZnL)cLX^KJ0cu49Q7Q{9Bmxk9K9Vw9HSg_9g7`n9Ge__ z9EThp$9cz7$7{zI#}7x2gK;XIdS{5UsI#=QytA6Kjx*lb$~n+E+&SJk)w#gA%(>pV z)p^2s#(C9w+xgV_+WE!#!&%T7<}Bqb=d9|i?QG&~>Ff=2jDk64!5k}Lj^obL&MVGa z&L_@S&d<*8PR?K9Z}hkO7xWMFFXdm(zoCCK|Mva~{{8%i_`Cfl`7iTdXnp>NXXXb-)YPNdh+ z%jntkWY~)^gzimurQ6X>=>~Ky+C|6ErRWGcjLuK{(`H&r%V`8Z8B{8jOnsnUQ%|Xf zR1$TKx=fv=Jk&AjAhnlDq_$A&snygnY7sS`noUikCQ)wq8Ac7J`cu8B9#mJV6V;At zMKy(=22@?D7FCU^Lb<3Isw`ECDnW%)VN@tpkP4y#DFf<=Qs`aKTd>wk#6`Ig+`!ZaIKO-XaMSm z`oPsodZO;AD_qT_GhEfAJzU+SHEM-gz|~HgqQ-FDlLn|RTmz*Rs)?$js;CO8j9jn> zuLA4?kA`cel!2?KM8b7cBH)TDMd8{ih2bhIA#lZ&{BZ4+Ah-&PKU|N+23KY=!!=qA zaJ3e=C^lTZMG4n&@xu=}3lE>Lj}VUagbIhNkqY!h}QU6d^* zX(jE#3}#JKGxiMKh^xe|p{qzZiJwHl-9sv-ro_UvmmHAYqpffoiW6=-y=aN}5QDNP{IaBz?G4>H>9xdd;nu(413pkEtxHEL%g5 zr(1KisnU}1k{#SU=^LgObD7dGDt0#WioVFqWRtm8j31jpMKBrE0QL-fgMP(TU{m3z zE;X3m$lYgKNt>$!8KtDAv?)ECnm~V|D{?MrHSR9gg^rc}VtUhG=>u$gx(Ms$}UuE=DIF&o&{+-&*-b%l9D zy_bCEzDZiKzbHm>fO|tHGw+ylbYtc^8_gNv_HM!ZTnV-UZDK2PLl`qVoZZJBp}V8@ z%sTEnGfP@r`i*l-r%J*kX1WBml})63aRX&?X@WF`oyV4d^D+FzG-2m)vz2qXP&Sl% z1XDbrCrc^nE{9~5rCLcKyN{Vhg~KTv7QmJm;gR#>Mllvv3-7*fnC;9Sb_89GP4dgn z)ZH7@gwo4XK9ogAb2WBZ3&K760;n{nRyTERu>rxr? zW+p-MgVE8wCF3{`mncJYGL=kEVNbFh>3XoIy0v638$(Z`zfiNJhuKziQAurfFn2|& zXH2lQRq0IlI~glE#6E_-{d?(O%o@53TMhoct(2_dny?KOi22Eur|(K1v#F?(qBEBX zucouqct*udW&$~<@)i}y72=A)W4RiZSD&rNHDLEL4e7>QJR3oOg?En(W*)te&0%J+ zeQ1^~MLU_H(4Nk;W0ZcW>^3HwmQ!u%TI^MLgdVf|83}tHo|C<)n)F1b06T_z&h}z@ zvrQxc>{+Tb9YCLwT;MKn8O&g2xMDQir!F>!JIK`H#xRwcEZF~_LV4&2W-EJzxyHEZ zQ|u<03+~A^^i#G9-IeLdNZ@_)H_NaGm{53kp=BA8&XNwQqm)|Wl-;JAQumn8@aicG zKfUR)bd=Nyw-L%(;Su~q$8wQu39byA41bwtvmCdG?JDUisl;5DS-BkeTYiJ)=~~jK zl63YN8$#cfbd|lPX3_`gx7DRkvYY*f&ZOch3DA=`USm**}=4B{1y4&Vt8Tjepi+&&u)cxqib}Wq?+(} zz-zmg^eOj98Aa`8#z>bj^Qjbg1~rkLlblwSVvUqkrGWSLwp?AdE4`Lp<#(NNFc07- zKi!cHVT&^3xI@f9wl|&1PNz4bdrT5MGG*X@S0f}vBxjjAk_Pl9Y9&*j8NfDYdvdAL zHjIv)PgP}}&@`;uaLFsSFf)c5!?~FrOawcM3X&X^tmNj%UQi0w4UcXrBV)JI30yHr zIoTR`E(_0%NM;^$9_F9MErI`^E$3EKpWwTi1SXfwQqb^7N;x^bh@w;6*Pi-0`E9Hd!L%fOlAEfYVIfflkS7oGab3L>`ZB2 z$w>H%(NOB(7E!Ax3ClC^tqhls>mzx~*_fu3n~sI&(L=T>H638RiCk)o(txgu6|vVcwC9jv2;|X6=lYQ%kNf`PiFC$%b>W zTs27*RRpt(Yb3cyzd>u5;qXqHsM;lY#Z+JpOF}rr+@XWvuj+Fqk}bp)<+{<)ObK{i z)#Ju9k&;NsW9F>16bBs||K;=*|9ZNL|DDrC;Pas4lVRxeMw7*AclZYc<;!0nq)_1^ zMTXoS*lD_bh(%c|8eeEIFMDmeYNJl zzWT!aEC*L4gw2P`5&oA~|DW^!*H{0K`TvhrKla#(`wyRwd|ZKi^$FkEdvpJ@El0}5 z?@5she~(JrT_c1OV^pr|5_;VTJ=cUUxcva(J9Q2a{*y=p!u=|N^QL$Qp)6hx zh)@>>a$b#x-tT7%xNswiBla}M4)S~h2UWu7(LgDuglW8AFOSJHG`asI8iFv8^LPZi zW_~@e=GXb%74h~ApAbvD-|Ms9+rRGhi`Z@7Z`bXpeG{92hj*mi{mz?{WAW)ic7F3t z|C`v8O}vJ6;Tw0!UHJBYR(I`LYc7&>{dRTS4wqyghJFjT}{t`vrT9MCN;6zB-O3O0m5KaYa2OkiFCgp%_kR3A7Pj8HHz zFCSdb6c`r-w-1aBgy$nL7rG_}06YDmLjv%?iBLa44QzKHR1f%Jhd#|fCE$w<`n>=( zfZy=s-VSsCtiVkRLeqe%01cdiZl7a;$^ZvkG9fezhzI# zD;_}TdOIFS0BQhXfCl)XhCVjHF<=ca3Frkh0?Gn`fD}kpA#@M;8`uoY0fqq`fjU4L zAP7(Z=}PFM16&0T1918XGzS<7bO)LORe<6^004(>p-crrAAoznIba{K4wwgw1^NQ* zfd+sJC=TQU;IJx013%>my#ek47l6aSHedxX3vdJdfi6HZpcYU8C=TQYgs#+b01kUX z-vKz>2|WO=0v=#LuoYMd%mpR^BLFy+2kH#81nL8EKr|2m6aegi2H=1!cqx7d-UCm8 zB;YdO0pRc?v;)`xECb+_B4`RQ1{e(d1#|{l0dOc1ss&UAqJa`XC=di#0WAQBAHgq# zGT_}d1^58G03HChfJ?wB;3%*UNCY+jD}jZ;EMPL=28IFsfu2BTpbgLrXaLj%ssJ%S z86W~E3CnC!~+e1dH@{GgsKBo z02dGgL<41jl0XCy2803yfnXp2Z~#`o2%djuGH?mF0GtEP0H**C@HcQAI0_sA z4gm*%{lH#eH?R}f0VD!jfi1u$U<0roSPQ^mXb4U}g;oH|fu(@3H*yiM0GJ2N1!e=Y zfEmDaU@9OS{xb=f0E`F50&ZY5FbWs}395DAn3iUScqI8YP_1Bw8JfkHqCP!K2p1OxeiARrJ30GxmW zumd*00+<04U<3?+9?$|BKnC7=NO02v?!Bmf7n00U3}0(cspt3VEr4P*hCKnCy& zNC(n@RNyD@1NaWWVS?xzkPLhQJ_DbCkH81uJ@5{A3%mhd1FwLWzzg6x@CJ0at-5z-8bPa1powoCnSUXMr=oY2Xy# z0ZsyNC?h%n90!hhISM`k90m>n2Y~~?eqbN47uW;r_Oc7S6W9T42ND6{zx-Q)EnYT* zHvw>{B-#M12i5^=y{rMR237$pffc}VFU!D7fhE9VU=gs;%L4FxU>-2n%N+1*U=}bF znBiqQcp5MjnBrwJcoHBSzBj?kcy|e+h_RxlO~8%4Gy*sD(g0lFOFeL1FLl7Rz0?BN^il&{-AgraRWEViDqbps z1u6k9FR|c?UMhfNyp#tElmnu@lm!b!0cE_D2AA>@2^J^`l<-m?IUj$V&)Vpde7dOMb9Gu$O$`ATNPnfdDW5U;!uK@L~rG*t}T50v5pR#RL{G zdNF_n^j>se0WF~Mq6Q17yePo}3NLc7fS(r`SU~DU0v6!BuwVhk3k?>4|DFne_R-y; zA1lBsr{ZMu(u(Vk^#4q}| zU~%w9JexRom*C34KL!dC+`RBsj##Y=QEY?QJd+96{D<59*W1rq4>J7=@AP^0t`AD} zt|#Rp>r1)t^m*%<=e+gJGwd&_9RK}u(RMlyS$+X*;l6SKae(lV2|kLV8bBQ&1a=@8 zVUJc2av~jq^D)40Io!L#H^i`m9KJ<%z&F1N_-(}%1N>IPQWP+i3_lX&vB+Dl3zjL| zPTum}Fg^j80?YtBz**oTa20?X!T(Q1@PBMKfQLWtXn3$$Kn5rQ7XYVKz@KmGfZf0Z z03M8gTuaw`u}X5zVy#ZNT&2-uGMg=M$;y9Rv$CLgYT@vIf7Qx5|2VmCt2XW0cZ4fe zcI(lrci;X42M-@P+C6T))*LpZnq?kVV~4&S`1;Tv`>+<$tw zN1=-od@pZ-d)0=ZvkBb${%~Ih!sCz+1*81%Eq+0GYzo2m&xKJD_-?-_DhA*3N1)>H zeSb;#X1)|E4d4Gq!Fhh7Q8^TYD#9aN8SeRNaL?C*N46gH9cYA_KtF=!s3r6&Xp7pT zj?l{>0d+$?P%r3t&=>Vb1EDX%aOjobM&r>WG!-79+0bucA@pEaj#j}jP#fUbr)_Y| z(;n#Ua0HHRIt9lwU4q^ax8S&?htNafB^;mh364ifgX52K5ktu+74)vKP)x69+wk&VE;M{9?%c?>j2w~f5L!XHHcKF6fzqEE zL5-!RQgf-L)EelovYR?gweQ`&SMLGvybOqG3IAHcKRl2pxZ8Vv<)qknJlysAt@r)l zgSY-U_S#ip_~L#4`s%H>aN*^6+7Xk5{^Pg%e>LPx$>rZX##5ab`-6Xdmlr~h(XX@b z-Qsx|r8>gVy|3`-fr-hvPe1X?ptatl%fHU=$J0_re)B(tDc$bFi+=H6Uf|KXy&v#j z-r-RSjtBovCfGLpd-fNy+=2to{(J+wtzi=CYA&BfCb+RClTXHTxf8m+=aUl25|(81 zDP)2@lYjD`UgFjUW0UyPFUSNGsX|Eijf!n<_xb!^pPxFmZq3}~6~`Al|8)EACo8j` zQgIRUZZ6#XbRGZPO)dP+KYf8$=kUx=InSQ(7hquxJ01A3`|sbEp`9B0A?Mz?A7^2- z)3Do_m(KH-VFF95^*^>9`*mBG;9@%eiQMF0d%yGV)9}KIj=Pj|&4Wj&3E#3F-{LpI zY;C8!%zE@UZZ&t_nRaw7zBTF~9O(TS%5L|_+28rspYUk@x(BjOCGpoFP%Gj7eUE1w zHuE$8@--eU*6DcGnTPxfVFEaG{w`UED->MQ9WTH=mDd5c&FjY-m;?uSJzHH_{xv6%)a_$_$bAD@?nwdl%tmSpjWE?+(TPf?etVfUW>RgI^ z%%44qZ=-7X-`_4h;@?1^PG;rZ@bito^Hyi(NO5&2IR4waW`7rW$A2N?3w@6p^~zgz zyMKAa(G<5hN=nE&dMBe%ZNv#k!@v1`*?RZ$(UVWsr0n8HhaCK{_3)dW z{4sZh@M(`1?@igpKX6lh-(_An`D-;SeA8cVvXk!fJ7IB!>aP2+eSg|sXr)R$Nk4z# z_Y)W$S?lD_L#HyI!lS-9v`_JeD@@ML!O+VD=eS z1P$M1U%i4KixCO8ejPu{e}oB)?Uw%Bu!Fw>qtvqu{=r=sal5zdO3(fb=Lvz)h=KR{ zq&s+&8ulgU&OJOjv&r4;OPBErvPgq9DeI1qCyeh-P4$f?`$pjf`0t0^>06ca*l7@w-vvA)A|+*TOo#D z|C0&CX7Mf+XTc-B8}lveA5*~n;2q#qkvE7-&1?8KKAI)Y_$ezjZ_cc&pYRZn z_(rpGe0PLzCE?0-|JhCX8vm&K8vmT-KX3hWivLUF@D7zXWaeh)twu)fZ}ATHy#msG zquIH>CupwtAZGX;7I>cKEsW0+$I^VGa7X6dFc0S(@(#ka$MXi?7%$!e|2ywVFHH5v z6yg%Zhc$08|LQ+x`lIxIXz>;U`VC#ucga52=xu|;tF_xzb#{aJMm3gqEn7~W_~?XA zwWPmYx4!5ZlYGZ8YlAcPibY-VbE?Zj67S9lwr>lMGE7;M?|SuEqpW}bn@Yb|4MP>} z4>s}F7MOIX#ng^ndTd-!<5=f$EBgf1ZcsU4bEjGrLqE9-m-gHHeWqR3vsRdWUd>G< zEGsL8bYBx$DsX_iTYaVDA>T|VZ5CI(X#YsfQA|63YfhcI%(u-==OMXMAG0jV(L6g3SZ3TY|$j z)$Ca&$R0^G3=532^)R~<3%u+fY%nEEIIgWTvZB6TyZGpm#UoF3$-nx3pBCYLVip8$ zfBeRzhYQr#jo-(I4DBCUggTpcOK$tCd6@r+j7feu{D|&SRm1{DWvGzD$UAmZ8X4MeqU_)mix|4Qwc138khk~D%D0V1Zm+z3IqbBH3bhz2-rpo9FRtl;)!0EQQuZ1#x z10p?o$@69f{RWh;>oP@jiz@oauT1H2uUsvwT?;L2u}7DQ?t7Rk9J1+dK(Kw{l7aG| zNreohpW6Ee)#L;HDt)3g)Zm)6gOrgTeoa_p^T7O765^wd#+Nl&`jo#`te__$Q5}mk?-oC3SEF`KO1E%#?$@PQ?fN4kBHaxWsc0QnJt4Yu;SwSFRKucc+Nt=$ z@+#Bn_HG%`e}IXWC-9prk}m#QdAz&JS$nizo{(@i*cdj*s41}C9Y@&{DpW5RTsrWl zr)o^~keWlB&kDvBa|crqinPRvIzzR2@lh446$~r5tn>Q#HB_u$>nToG(53j=8b3c5 ze|U(tsl>^-cv}WlR;HUUm5&mZ(si|AVw5C?BXHx21SyQ3qG1DvwcN;5JWjuUbgfreAAMbVt%}dlP zq_J}nSvEbtLq2b3qSEgEyFva=`x}fdQ!IXTM6=zIg^fX7YP+Woo;T1PU$(Gj_m}vB zeif?+=!OjDb^2*tLSm*xRSUDvnpeOOkjQs%7^fAhQ1LO<@VG0euyN4hSw_?Pz6NE5 zGw$N7RXC@BPLH5x3Cn3E(CH@c3Ow*XePKU@FbMl1;L~&^p-0F+LGW2&jj)sAAD@eb zso^6xd^#ih0bJlX;D7t`I!r6f?*fGR@|Ke~|A=}NnlX)hx3LvgE)OGoFZw5CFTnn^ zKX?&Np+6yqCHQ^|pC|wP34~9OfBx{&fBt+hZk7Fs_48KQpZv2bO!;Tk`dNlD_&@o7 zem<8mC&#Ql`Fzam)w@pKc>Zn7K&W95!=WnT7M-K*|`>n&-T84d(ro7tU!S z4Bqw3eNVP0&tiWta{dfqN@00}%`@4KyzR;}a+CHv7xzBSd4`=lWXSWsOrQ5W$#aUZrw@ia z$6aFZ~RF#3nb#ad07QS5iLW zNlt7OV<9Vq}^Bx+r7FfX)jg@+jBgI zlJ<{N zNWL%u+qK0_^0bk}y@z7En+(K8F@3RJ1$z-|yJ35>JCXdk9r5E<*yvg_Y`3Q|w&y^7 zlDF5!c5SRq^6DxiFOS7WOUskIB+8p3u|3Nph*yUZZ!CoE+L0gIeK3&ZQw~zUW+8rT zAob50Y?PxQ?HU9 zQ&R8ykmMzINj`Opxnz8A?@r+Y_xSLwx`}A;lu-&zq5X&2q_A7O=3ma{yfbH&8j^r{?#8fHbYsIl$%Zg!px)mY0Y#~zjD?t1>h_vtY$99jillJBo zY)`n6SfV3-t|C4n$9650lH8BQcGss!dw4GX{N++-5r6xI?Y@;tK9?Q%PV&-ZQXlh~ zv?qKZuJ@KW>J_Qydyef^J|XSDA7Fdl-6i$Aw~5c)AU=4Nc*`Z?<>#^8v(I3oi5`+i zoFI9?QEX4oL!`aSer#9!J;bed61PYs^=4bJJxw=aqh{+!d-K(#z2yp$+b$*bPK!u; zxA~;K&m3&mkeQ_Jo<=-vGV#I*#B0Z5yLOHyK0X55ePt-N=kXwH^tC@}=lhU${a@Iw zLOn>1=}L0r&LsEfK=Syu*l1-dZ1y zdn%Fo-HN3CyF77VG`7218EjYYNNlvYIH`Mzk^1K%q;3f%^|*qh-Y=Nc*94OKO($tb zcG6zbLfX3+N&6BVX}_k%MvRi=Xg`wsNl4zxko=nLH*lBB#>Ypw_M~Hb3V+9j_d}9{ z-jVw17oCtk*OMV`Y(Cr*;~8b?XKx1ZFz>>};yTZyM`AngIGvC)C0 z*q*uzNd7R3)F({Eb_Y)&K0TVWcOHiAkq#tzM{iPZ(w#V`6Y-X|q#oY_+ru=$M*HiL z_Jo=w+v7<6Mn%#-IU3vTDn*CpK`z&-i5F z?~*$)6B`XrBd(P~?EFmX-`jzie) zd3&+ZupQX04qJ$8ugCV3Sw-pvmJ%BlV7r;wq@FgF_~Qg@*Yh!?es4JOjX~Jxa$izE z-;?-k0=DN&2U0)Rn&b=3Nd0OfZ1?TDr2eP|$*-#rCs!oxS<%=oztY6E;@F-dVZ;?e zu-%RFk=)HmvfF}(i4WD++?BmG&1r4XaYB}IlKpoOx7dR1UbG(Db$1oE z$Fz*N*+SC3d=Bx8>7+emGB)Zn4%>Zr6frZ5v^N-t?ON3b+w-*tam57EKDPt$+t#GL zTyx^NjY<2bdc<+Hu;FtcakdNF(=vwmXcRVbMv^=_oaEPqvE4NalJ;Fe*eZjbx@89O&dH=+eLTr8MiY-1PTH-5Nj}hzxXEAGuC#8XzPK}Sx%SxZXRSzmLNk)X z8e@Bs>Jg8sMI2fU+jX}RHX2`nxMVbGe^rX)1;vT07sYmG6(V_0e&TL{*sdT4w&$Ul zc!8d{ftu9Sa%?z0i+CnQ+Uwjap40?Umdl7a2+FhM^?q4j}c9eTeV%B<<(AV!QTt zB6(vwQeV`Hcxp4!KDsfsdq91Xd(|46>L|0EVjErdD31t3fogFlDKAs*J0SM z+J&&)b@P+lFc2Fxbr83<5O*?QyL)P|Jp&aakC9@#rZdD#czhmk*QP9N_kmyJyx`}5 zl6?Ogsek%R+H>C%8{QBXenIN4C)l3m4@mBRhvXSIiML$EcAvXQ{Q4|ur%z#{{3l3z z+!2zy9w2$z9^zd)uw8ez5@&BDF0hW&>#oA~3|U6n*DoUZ#ynEbnMK-*PRB;ACzJY& z@x*_RA?-g#V7o$wV!K-nB=xy{N&BTw?p4X8p81K?o4+UZ zgRe>5^n$bxenQ&sKfv}x-zDuUZ(+Ns>!dy5GPdj5dD33$3^rPMl4QwoY){|A*sdr0 zNv^R68y(z%?Jls5w9ns!?PAxH_Cc#j`}^gjz10%Zeq#Y?kDH5)j?EG>O~rn z`rdk^yBuY=j_EsyLVxGI&CNI)~(p?Ya2=X_;uL-gR}3BYI1r04pp(CfQY?d z!AcPUHM$@OD2Rw6Vxxv8O?p$Q3M$P)2eDTa5fvf2fYMv&y^4q(1VKT_`>=!N-uwOi z_2!&$^4Zy)ot>GTeG(5@+U6_3`(mN}eiY%}jLU>8F1i5ijUj~7qRv6PZXn^_!U2FQ ze1Km#NqDA?C&)$I0M|GXPK!BCxZ+V;;Nr)i{ewB-nU74N-PMS2Z*&yeCmtf4R;dR# zejms!_Ykfqrv>di8iZ4KIs(6{0{plV@NHWO_ZHp^xJ#aJ#TT;B9xM&qcpbDWtR|c$ zC;_-@DdCx~76Xr50Q~q|!o4-c2&YNR1k5W0^7d)K@nmREm`J$dNj_*l%1t=+pT6+_ z^-F#O=lex?X7>-m6-&Mo?w#@tc+_X$r#^t(yo>P6-ERSJYy&Rd418Jx;k2O|!o9mH z3D2x#0naJ{o?Hm>#5}@j;cp06^vwe9^a|R|GYHQ-m5?k#bb z@XSTGfX}`TTsV<%#cAX* zIG-1A0e8X`r@0XBE$j&Gv+V&dvLT!%VFg&q9Qa04!WET`K(2KZu>K*CGY$ZD&?P+c zln&sK-N55D38y9PAl&<%Fy1f2)J(x;ffPB6Yf1%0l3r#!fC29fDcO&p6R#- z@VS+QE8bWR_@y|=YZn3jKA&*fw7G;Ut`Y;THWS*ZTK9jx+J*Gc8GSFwYu(exrBPXe z=4hq!h_Ye(EP`Ek97l08j-4J(5GOc8z!hbli2i!}=v;#D<$Iyv1>5(R53M7ZTiFM7 zAH9s7cTksqQ!k#y{wM~m-)o`+@&lu%(K1F5{ z5%u4Ss|fB24@G&y_48i3E+kl5E*xF=i*u9wp-8aU^$TdJ27mTMaj-W+@Dlp+FfC!N ztR#_VcwR=&&D2F=GIkOi^*#d8xL4;LOj9R#%HAk+`bhpT*8;Fd?o~8uPAs9>Rmc^c&U)IZ!6=;DF?5EWe#Y)ZZ~ue_N?=4-M?^Ht0M-C-My+?;(ku;XMa@!CtAj`>3r|A~)zV z*fX^20a|#a<(TebJ<>mp{Q#-168vc%c#vSx$4MweKPHlX0ODnC{1EYpOz~DzP$BX& z!jDiO|5b~trlJI&e)9;eTes9PJQecm?xtiEEiu0}Y%X=#JoOsBkc=X}bvH?<+Y!9+ zQ!?`Ua$NCFH_UIO{20B}{;g_z&6dcWV;`e^&hk2+D@_Tu?|Y13Y}l>)bpyn&`%q@-g994q&zL@Y7y;0J)-ogX< z({=PII<|73mumicGM?+%Q*@+D^6C$6h%f)tXJ~3|f=zxItZ%^N8A@}x9;uQ7@~ZS_ zNHDd-;Zz>vYwV2YD4|a0=!q{DMBgrp=P1^_^6tqYWr9DydX5_H2Sr5m3<-9hnTFol zN}pooLI0j(Y3Q?O-lBd(6C&5nPD57(tJMm^Z3w{vm#V7d+9wkW;+&rI&R#{l;bk2kLnm96% zONXSvHx+FnugPbk_nP9>jZd@)mRs-=%~o`o1>&(MaBBvEP#b z-#w1eOr%it;)o{EZ;^}9q#sT142-M@K0h@R?b6Um^FIyw(jcFSA`CaKd3W52$QKxA zqO;DGmy+gq5PaZ#CW+Oy`MR3rwOf+)#?y?Vou)fD_nP`3LSC)_i_`hUQ77AUW z->J?9d)sBR(E271OQmaoKON0NiP6iuJ$6Dp{2Z8tB78>Mulb!I`a4sykn7VNox?7W zf8|YC=v6e2+s%)zM4rl@jeb8q`0J>(3&EjM*~s6pv07)7J;BBYvr+GW?+F{XJp`}v z&qis6U)Fw9f_Qc(Wurld+aHIUpNV<5 zcf2)o_ep~N_Ps{3cahK4&yYVtCtsuCh;<4};TxWv+E6#Pwqc%w-)NnJ(o9VM@C`ah#~Bs z!7FdjJ@b$^x<6rmY%O?$g0|$Fs|A4E_4^ytOCL(ASm8zHzdttzvD5Cl+I?6|aJ5Pf zTEW#|7M2G4qu(Y6ZRAJ%_ody4d~#$CTBq0_$-WNxI5#r~Efuv<_>ZuMac@THH^`?c&kIn1{u4#FhY%l`)&kU|H-Dn=dDxFy6AF>1 zfDx8RhI}xVEJUGNQv9=S!2Y$-D?}Ha#L6~us)mHg=ngEVb79Q z@b8hbLKG(%^mUUB_)BfD5IvtG)F;n`@e&J*P)hZYkVms%y=>JYiN`SWVNZL zaIXvCLmP^bYe=S*UM|#=!NbMqwo?S##|ZNIoPRN@nphNgE+70m^Fc8ZKKe+u*O&_e;^es^gl?LU4Yd zic(~{yQMPYJotOpuTm8H?S@qXM*}|kIQA~wczpXWuZ!BJ)+DqG}l>$Yu6%J|M!kE6cS&ZYCHh-`YkUD zEsjr~Wl#a}+bPCEHxH}(Z{vmMq5G>@Xibq!UgBMEqE7&^&<6e;P+oDC z$ls^1Q1Y^{Uw#H)@5)>ja=NwHG@$Sdk(<@C(1_4CDT!S^1Sfu`#(xhh43UNXRKsQ= z@pI+QWs)GDAY6_r*My7R9$O!2V@F%h683 zM00T$$cLqqD-iFQ_~z8W^~An~3o1~j$@9Dn9;kOB(iNzn-F)zc0{DM|N(DM5wX`$S z$dB|N*k6Huyfc|_uzfGV?Uohj{x)4fTUm%lzE=f$*FBJ#E`FNG?}t_()7g7In%4Ld zeC}EWYTqI1yh0s5A26O)pk;om9F6%QKJ@$w#Am&+$2%>U^q<~XfmlDpcRUgBC%ElP z1?r0MUmz3*`I1DdM2iF~mPm@jesdPCL{ke7SZ}d_cx_x>iOP({L>M+;|Byl@;u^^Q zCiDv8@l2x<-Fn_LYqOK ze?%qfP(3;1coyo-y1Ufx9W0)Cujwj$K5{OtME<_-g{L0@e~7eK zqQ_QWey*^C`u?b|5?R?z*P`=6{I>H~q3yv=9){xJpL($>6#gQ&&*dPj*K&0g5^Ay4 zs1^p?zoiO26ke~~#0~q?OS=kLyS5M9Z44p)<1(p2_vXyUrri)9ALlA0%{=H5_7KL8 zo~c4N->J%VTmgT(#Z;mBotvHHV${g^FAu7aVp_CJn;*yxa1~melB;qx1M<0~yb5jp zUO%#E7wkWU&ML%p@`lI4`Cxy-KoxqrWplcr1mrWfKs6eT6__>e5%|-1ZZ%51>eTYf z0G>x)t*u6acOI23y9n_SRjfuHTLz2OEaAMe(y2zZF^$zreIVW$rq$@$6XSW|DX=~P z*J>2ro#4!zZBFdh393d+`-^L3Vn7}hTa7vtmG1^cLOpCusz!6>S-I7}hW$Jzvl`8o zT|7zun>-o6uY$5im}kbPeUP8Qoz;jXnH9Hc0OFf9P>qyS-BeOOz zMz+}=K6ri+dR2pb-FADnZHD;IW!0b~C;gi*j+`gs7kAX4+U^7EPnW`ZDBfR#KHzP} zQ#v7D;{3JfNUYkOXXBqg7KqiNfw&Q7Pz~r4T~&*Uja7}^W<&j+Os_@4+1@e1b2bzG zL%V8GPSO?QVij2b2ZLI~XDDy%Tn_QBJYI_eX|c=kLWu7Rzgi?GzoJL@KKMKKaxJP^ z@p!M!4bbm-yB3Y?+T?aa68xq2q89C&s=T6Ff|s6o0qgzXRfh`K zykVt8n-P0rL+a2I-xYGAO|XA866=u0@Q(SeCE)*`kL!@;Nv9cy#-I1DzOF-ADK9 zJ+iD&j}l!7-&gEjTaUzpH(kn8lOyBXw$>xD_fNLq<*>hPwChpz^r0cKIgmfUjOwZL zH7ZMS1?1Z)$9j~u&3NzQQ-NeWZ$LfTy72kz+#EQc{3Gho(j(J8Rhof4+;{3x5|@7H zo9ocu>qR}%;Im(waUJUI_riKqzt!`-v_9m&Srav%WroAcEO;KM`BIO%yggkDmP0+< z#;!*yqddt2C17vT^aj+Rr(aSeZ9wamE;?;- z1^nw5+kmoPZ8kBP0{L0`paC_P4lVzs0CKTc4d|mEv-j;cu;)lw1L~G2@rzG@^C+>c z0j)aparEw>1F^rgw*k=#uDgo6K>xWsjc8I_%QrDM*pIp*jVR&j#?qgmP~U=%{c)rRtqKUVyE~p7Zet%MHMBdl0@1Fi1);CMP5e0t@JM?-4=2x<6L`^XX%V(PM zk@?L$8`1F&8U40K$nT)@jY#3+?$*Vl;Ey};ji_tQ)Vi(|L(>1v!$uTW)!rGj4dT&^ z8xigHB)++&fcsd~cs~{W{66pxZ$~5Ac-Gwg)Nim?q^}W0IK3)ZuoL3Hn70Y}_R>C! zu7>unhTj<$@)DxyFeOw9sh0Zr23;tTG;Thl`?)WAY zMJwu4pAG)_meho%w#>@fbr|AP|EdY4nmA86E)Vg}ENep2!n4!(o#if%}`0;6Cl{UkkPnyw|)Ll};^`J;D#`ndjDw z%BQYvTVD&fJ+K+Yg$f)Rm9^H(j3_G}u@}WK(-D^gbKAPVOykUI{GMdq{)RegP z3-EcUrl=XI&D1enrwZ{p-_(qb^3153e-Qko_@x4ukyd8EHoG_Y_a{9){09 z@zYw6?wU8NW_dw;R2R0OG7*!DQ4QdaFOn_jjK9`{P9b%&o^Zt$#J^Hz?>=W!f~EJg zprQV)>mEwL{$v@ops-i{*2lR3TROBL%cyhbKGGrIxcyp?bgYO(R2O`HjJVi>HY~j@ zzw#*9D{-R*Dfw7-WMGI_T51dG-e7b7Q2Bl`pGr;(5{}Uj2(|PO3 z-mVt3!h3PgW>u(HH3QW8+O!SlF<}4gpU_Huf0B0bw(2pWuWD8+GFbRnj++7bs3p;g zk`li~T`-2{uN;L|bpILiRa7m+XVZ>WG+5AI(NzNeyszJi@_!ku(mTC}=$m8JiY63< zGidSfJR0E9irfpfzBil=`{V1`Ry5)+qH|}G3F*H#wiR89-xhcJ9K`qe{Z_R3YW}j{ z+R8*ei`k0KR{gMzp@BZf;#TwxpN)~_hx{*XYDEi}{8#p0f%Pu?(u!uUEYF%I3j5uC zgwlUQcNyF7Akp`ZzYQ&KQIWgzJBHw?f^Ep6$~`Rp&0d0KX0@SpfhO;dy$8A8!Zze{ zxFbNu9nM3K6>aG2@+cE!ZphzQ$u@L1|GSKsR4f_Kly5^`_x1K^JcayfKyB#O?JFvM zGN5lztqt9rUll%$AJ!|Z-G)|oUtOhu;JjITpbb^bKQEnnC!Xk2Go;4P@=A2NfCxTn z(S~eBdvdhAFB9x!--d*^Y}_7%#1S0i)`pHLnGGukfjr*34YloQDfJy*Pvj2++mNi( z{+XWH&>x4jpW4L|z)zhK7dqSP%9=yqXf*(22gihv$`r6M6TYHpKGj7f(&O zNN`_r8**Cu?5&8O2f-t0ZRm2<#A~0l;Q4?zs|{H-9Nd*RCxXZ)7qp?rZuj0d+gu=c zdU+cXa1NXQV$T(VMe5s-{LjrEwKu`OS?z5oWWuRmM=ydsVjtR2&5nIr3^s!Q#d_ON zc|!0LuQlL5(O+#SwMd66-4*5&=4wYH*$-E^Z-V#;3bdoU&%1*pPC-2rn9+_F4$n&O zW5Rm4XSbuy$CFVuh>Bww*$D}ZV?`l(6;)Fz;3D_5TpdGzz z*wXy$@+BhoH*80&r_!U}Rzd#RS+t`o#X5%-JmI|3w{J(w6)#nCy@PtL!_=bM3&N}etw7_=M+}f91?*jFuFSH#Uw&X1l4lpMDYa-jx&*nph4JlB+ zo?mH4VqZ;sO~1nWBX75({XzwE3~eD^u8-PLN!Ynr2WK83n>U4#bnsZFR5$&X261 z4&<^``E`{6oj48f8!8?fk=M_)28fxdRW20Zal(1(F$S0axXsK-ep?I7q}CAP>8Z;@E+?!&kBO&dFpZRHhnLHiLhSL{yJ>w-2Wr^g%6Pr zcGls~ExR5_$c7T!R9%OsF)kQ>TXCG=*SU2#t;EcF-EuF2A3U$aGavP{AK8Kbqwdt< zYrhhbS`1+Qr=#oer^B5BM!!#x{w`r{?;Pd5*wYO2U+J#F zw$7P{mCv6i{cGxL@Itd+-J5J+e+U-U;J|nr)G1>@4x>6yl?Xj@F)w(q}D2wN&*mBtK?y5ETdXDo2oni;lzd*hQ3ona#T%ZEu=dG;4 zX=+;{G+%-I_?#Nt75r>3e-Vt&pIn2>wVNJFP6U508L7t1L2vKVgW!*oU#qcU%zMkH zSHS;Gt<{)!({^0_68y8Jyc#$8?b-MB8RSD^b~TkBG1<#M!+zmQt;S!9-um4=0{g+{ zCN=)^JKX*Z_Csw%HEvCrsOlyG{!$LC#wWR#L@0^EeoS$%#uqMsSFrjD^DjA8jb{o@ z6?-HH@wdnRjD<2R>O+NLFY5`XxiYTO_p8nikS_Vb8TH8wd#|FGK~ z_OJVrYMj$CRV$zt^82T7HEwH~t$SmwJQ?rCSB?8U9U3ZrLcRGtP=!ZcAK=L?-B0A+ z-BnnTYs29#Zt&N{hANzVSAIo-1o;0#Q5Amr)cnkZ*EXd8f|pgeSg2&h#zmkn>0uS# z=9zr;L>BDNEs0h5PIJ++!@l4jR(KWO>|1not|8=$nO_y2yVaHd)x$MJ--uHc7EoVu zCjSw{H`1&Mf5qty`%(>wT;@O(-hJSk?^{=h2Wv+a9#lSh>)TX_$MMZoc-f2|M&}~f zuOe%!a8jR{RO4O9?-vWIaF^?0i4rl$Z^P+T_;zW40r@TRt^&XL!TeED1MB-(Q-S?^*y~j*Jl9Ijxl4n-q_q{eMCeDTSvcR><_3Nt-h3-m3f8>k`yf!Cf`lcb+ ze<3^-c;4CJn(lPiuYo_xvE}FN&ahLE|NigG@$B~dha{O$AAIY}@w|oa>u#j`6Meo# z<#_dE?!4XCV7`Et<#>bq=-Mc5*ndHf%JGnZOzBrS$nUVL<#@4NR%q!a&=-BN9Qzjg z%y5Z?{dFUt9Am-CB;R#VFCM#=+m4SW4>M?gKPn_7m?@kw>kHmQ<$27NEZa^9_zI%6Pz zlxj=ylk6bJ&{<&5?~GF1C}nt7F~pek&qyrA9UHIyo+8g6_(VV{J}aOSClCwvDqEFe zr*A{w3#-AtX}e3Yr0_AGP!{A*^ZHV3*eO%gUu;UoKN2g&MygtC-n;>PW~2nStki3p zp9Y^d3_D8jw9!PD8NOhjVqOV;y_9ZhcG--KU-F;?|6UfcKF|y76$mfEr>*a8SkVCI zPoHxMt~qG1(?%2YzdcxjMV5^&ZjONcUWH0<*>0ry&evirWii7cF&B~fb1RFn&YJxq#&e*5Nm?Ow$oy)Pi*VPKyS24v;rT1Hrx4pe*9~9Ig!f%+qb^0D~xH|e6!;e2jgnvZF`N`kBO zL4I*kKE8SEjFYr1_-98?9-gKw_2SnJh%awV9-e$`^5$mqy+nU@Mjj6FXu8TUhW!$7 zH4nd0^1c4xIP3?FGkN%!>6u?XCg6{mHhI|6kdMiG0QPf-P9Dz9(AD4C4fP{MArJd3 zI1xD81LhB0kcTge+3w;i2Ym*-d3byGWXAjBkl&j>=HgTG5f|c5Lj9P>%Ec+K5%XXoP3DHlf{_QCio>>NB_WNxNZ(@CQL%DWsa zAv!AkWg_Iu&7vF}n%ian*bnk6>2VG|?wHZMZ7=MX^vE21Yi&`&=3Z$szTiX-Udoir z59NX9pC*$W>^Ey-(hmgo^zF#O&IgX)5?=xSoGO)r&$>J+@bZLstrpF}Q2z1h4jdgFo8F&yENJeWpfl@Fk4}`I8?B5_!DZ8|-)Zd#~E~=bz@aZ}2IR zV|yA{kUtAW-r$wPkgL-;l3nff-e;~bo4Z+~UuC7PyJM-IXB!{0Y2)=(Y8;8EGyeI1h{a1Ko4`R#yd(jhjQf}CU}KfHa1ijW9n~)`jNCY8`mcOzHFuo^-@kG8$VxD?Xq1N z_QRW@EUb0=q&f8`A$5{!d;0x_V+tsf6Ts| zg&(BHyqz%upP$k^v+$v;%jZ&`?yhz1Bbj(#LWy+YRM=ln-)7=!$w|`~T9D7j3N!JGhI&1l z@%^yuaV8$&3f8-+2j|<{$V|NI=9aR|IM@%@PiErh_vE}zH9`JbGBWY6TVI#E@+p(~ zq%uoZ<$OSxlR11+~6J}FPNQ)B~A*hxa0xyI9eudm#q{t)9&pc7gLzPyyqw;d3gT_CkKu@L@bRt^Mot zXOKUMm9KExxsb@`v!PzQTz!Q@diUdJnov*n*uBE&S>@!D1K_XqTV7%7Eq7{GSV8>e zOn!w|3ki^9LwFheBuEF!u9#1BYXC6D@ zng;pdwu6Z~PpS8xL9oAW%wpn2X1S@>o!^ z3#>W7vRZnG;K87DY_`y6@d|lef{z?X$8VW|qn8U{KNK%d#}@C6+WE$x$CQ7(z__sF zj_pgRN3UMLzzO1^>bD$W{%sdtV6Ar>mo+ND{Dp=u@JF>zJuVx---je$;5y&;Zj7t2 zA9_a8Fz==Fe9gzfzahnGSZL$13l2U|KV@UnaQ%Xq8)+fiiG3}WX?UwAkF2R9*cYsj zh657#pG&NO{jq&Q8gAizTFuOb=O4bB=Xg+PBz&+Q{9SnCImUr@YUdt<{TCgd<8|qC zYgf$$eT;3-aks_G)!SA={LqZ&_~GYHN%}d^zp(8Y{&3(+^_R;lh&|kop5Y;350wd; z5RY#sp5X=EiheiOLA~$Pe1>m~gr42VvyJp`nEMRh(-KNjQ(8-K)5oXSJnE32Ssd8Y z`r;`zj5=7}Hw)(f7WfovE!CLrB&$vOv-O_hOY2^?4b6xApS|KK&aV~t79_Th$Ttt9 z;_@ozDwih6cjKH?ykXWP*8{S!zk@HO;@H&ur{ca~Z?;J)-nK}pBYY~1AC^hQc2T?d zPo+YA+{m4Zl^5hMukM8Y-sMlQ>U@En$CUuH5}#n63HfPL_kq2O?VsSo*S6p3JrBYZVz7T@G9F{m+lEam zX)ynrvybsdjkt=C1&|*G2Or}PweuEeJ%s$Et$K{BBdkPqB_Mt`eN-ZDmq8lfIy+a$bDul4?L9;`ok8in`vI$BKBB>Ema ze1HR&NSg|=))Snf^#GsAo-ub*E$qLdulI3<`bQ(ZU|8SRko)*-W{jTx3Xso}ypL@= zf;}&M1gu+j4?nn}r2Ls@6VVrCcMoG9BgTtwkY8T~?_pEMcJEs;VE^vqyLhH{Pln(# z*dOWIckzS$K?=J*!t zEZS#!9L%3Sa1+<{NGL1}ktOT77I_mF?r%+dr3m&%DBQ%+VUy(FcE^Hp!#qVey8cJIH0XQUaIEmI!P_t=X# zbD7nn4=t-me_GoGTwoGfp<23#;K|D_;K`%UuG|{{|1Yo#$8!z!q7{{3y#AvwoOD3$ z*1NrcH+~4kC*qBFRkXnV{^l5hSIeFFSg{iJ&yUgbm~ngOsQbDFME|6-=kT$`9^3(E zpuhIav-r!)JJn8C<%v8uF%Xy5ZVc^i-axSRnlm`ywhH>F1o1RU3&3mpYuT2Xvx(eF z#UF2cv~;T0QOMt`EMF|9VEt)^DEL?4hz~yVD<`g@dJE~lz48>Erk~vA{c;(>(VxBW z^qXIkJv-+S9K!E`ot@9n+8dV>+_lIRKWKj;GH@e?_}^f&6W-?b>2bsy*uS3pkK?Jw z`Dg=T;-tURTWf4QYqgM;#}tC)=9=Sjk&3tF0iYl4HNyKA-ZR?lK8?udiRodtN4nds zR&o&>BC3Yx4SkZeo7zX_8_U6ey+;4sBQego$EAPx-}@w}`^(o4-`yhGgPxb9#jG@n zr5ky>ZjD*fgN{r*wAU}}I5XgsZTC#&9%NhKI(y#rFs4($%*tf_9>hp>zR}?rOm7)z zUU|&E2Q8;R?r04^&&-c?7TbQN2eJKAG+v!HqWksb7H&=GK^u&u#oW}x>4HJOtPecx zL6eM{cCNb>MITgiSbd?m2OZztA=9w)LU}x!xEo zd6Bs%b+#8B6O1eupB~P1 zF0%V{i2D8APKzC$nukK@Rfl=~+o<31oiMO&!|A=z%zG~^q|a3KBD(1{nk`oXeSZD# zCE8zl(YfcI+)=IJ%$oDYft&fiqf7ofeVp@x=@CsQ!gnnEj=tQybm`<>U%G;^v#p21 zcjUmA_v~bHG#%Ya*so@94x- zbbga&470su;g9%)??_iD=~1`PX?j?F1M5`UcXWM@LQT^oCFW$F&RYQ$-%*uP<32U+ zF#3MUt#=<$zmx4JUcFtg@Hl1AMZo$AGhI;nBh*1K6T8$UFj+t~D9a^pU*CDxu&X=>7bdL+zJ+=_~iCH&3`v$<_&sFu$E-(0juAR2@nX5skt1nKPY4`pI_4oeXQonA+(gm7aUbOQKAhnkLvD-Q> zG6QrsC7)b6fFe>APiFaDWG;GLEUT(KfMkN=o$2c5nah^w`YIR?p!M_g&j>t=Wjfx~ ztkU%vK&D#qj|r&&h%%> zWJz&-$r?n}yF|-1g|5(zwaVoBItI~6_nGP3N9^fBbGGhV!TS@finK94?R9}ET&fuz zwCpFUm6=&JUo)PWlqaq_N9`vXE>XJfUlYjuazQ1w-r^@pAE=7`nR|s9ZFaUk@9a;s z>8V#=_N8cgW8$i9?;iX_%Qa5#@BI)#Kd)dPNneTE+lI7)pp^TGHeew*p^ZH^BfK?Ryh{A(^hy@RyF^%&?y8zTt0vp;zCJC#!mS(Z$8z z&Nk`(g={su+zOYv(HZZKc$!TaLNe9!j_lCC$Xvg6=jT|dA#`7^>BM2F2>Ov_TT^&+ zhfupxaHFkcJoCU4Dd7b7A(U&9Q+To{mX1f1NM@S5BBVjFxtKYyN17We(5Wopx>gFq%;7FLl)0 zn7K*+U9f}xFnVi~p3!t-jR%bpqPPYvE*0kvPZ`8Qs zLwOO8Gkxgw5#7nHzmY?{@7~RI!A!592|L$L7(sC!?#lAaIOg}DsT0pgjv&{7_~V}H z@ys(fhMU9=j39pbL$%yreCbhs1)^`gM^Ja`mvdPQ!kGawjXYgTp#&+1Rc^4+g)-qoVoJq4-wVnqbNee!)L{_Nag@K_kNxB zC<-mU>m8KfNB7gr8{XqFirRyx6fUX0KyL`UaqZEKQFKuvZkBjl0<+gVWUYGHC_0}s zBem~h9CO7%qpx#^Mp5#!8>jp8;^~p;$K+QpV@AUD@u!x!$#c-L?e|3)C?l{)Q8s~rT?PomXQY8n9 zpQh+fd)+_!)fezg|4h-?_&@UEf5^w$=M;f_?0tcLr|uXZsO6=N*`_g06RUY?vNgOk zL#kcdmPQMs?!``wp)Qz6pnf#&C-rdjo12!Y#Z8-jk49^wh<2YwTSSo}MTQi4QB8ijpbvHs+xvKH#RYD552C)1)Xeq$rG{Op1EO_Al4c5&0Z zDWW~1=If>CJ7vcwZd&qVZdxMMKK(s6O_3sdiV`VeQAF#e#!~XIe#$P26bC7rsW#e7 zu+yI6$&_7++T1kmI$oLxMGGmCp=c{byC|}t=oCd~DT=1(0Y&K)6;RYf(N~IoQ#84r zm$rZ+DT=mIq)pKwiYzH|qbP);n-pbGR6$W2Mc*j;NztSRUfLpxP7DWIBWp53 zg<)c6%J|1yB^|YG|AEv1yMHuoQ`7l3Qu+`4-~Rt;`S%nQ`lp65_`m)C)1t4t{~wc5 z=&yXc?cW8#+dt<1MKBpaO*=pRk3ukU^pJk)^;ZURHAHW@BT0BU}yhNtYYctWar@Y zCwk**{ziQqs~b6T_Nd9f6z;IGr^f%u$MODu8^Lq`Z9VW$3!v{G@BgbS)%brXpj!W} z;J-EEj}FKEmJHW_PNlP<6d3RH-!5bB-e>o>sO&W|V<;Q_b?O-W>zgsK>mRcJ zJAL;XSzC^!4I~4NRz>PORqCl%cMC6VAB%_P{g1ZPcIq6U+WxQCNlIoxkq$))6fLDl zgd$#wy4!eZRTO1XluS_!MW-q9pvah_ofOGXBuddlilV47W3LOXR9}j2P~<^TCPjr5 zeWl2dqMa1cDUzaS2}L3laZ@xv+1^G`E=Bh!N~9=?q7aI_C^Dw#07Y69rBMAN!7VeFlaoeP5&$YVeqH#P>2jtm(CYddoTdk2Pzr6YqzTfuE$ z%rLjKb+VvN2vdd|^)$yv1#>LjX@2}>V`Ylg$Zs>=a^^pJq@_5Tg8nJ9w{zu4cqbfp zq>`DoYwvz#9cdXUa^%rmxeXX@CJcKgX&TLr%fLX{-u{4zy_2e?HMOy6v$ze6Y#hz0 zF4XR&-Q+O<6AVl!JyUoLEUDzAy4ldCa^4#-XxiLk9Slqv#?I#E3P&?!i!|Dw`!W|6Ya(sVU32wvXxiZ!_&0k0!&& z<$t=<__&}-|93zS?_P$}b{FaafqL@h)uAf6kt1U-!^X(o!j5_fq21@xGqQA2wR6~O zX=`rH*llb@89;kNQ>K!|i9rTZx7=>vqqOWJ38d{{X-C=WPHP$O^H&+w&xU7*aG8 zsA}Lm<`>!|Zt6Hwc6Jzh^ckOVhbe8^KU%?Ds*zSR*1Ff-(TQQR&(emWz>#TH7_(%RnxZE%^WcPY>^O#iz9C6DdB0qUjWg zQ1nNk_m^Tejd#u;NV~bWg#EK@_Fr81qJ-TO%fa6kma@CeIauU$DZ6bw2XFjb%C2Km zA6Uj;M|H~BtRfEfOQZhsD3XKkEMT!SO*pv3pT$m-O<7{Yu27}_MJQq zrav!dCtl=Wqxlu=C<6{Y?N`ALTg}1uKUA;-2Sxv=qp@~Zvb|q(@Qv8Z;?;5tEI0w&v zU&B`TCh}L`wq3PssSFM_e^SeqIK#o`XVbjZx?G||J34OtCJ1vo;e&G+S$PF?h^WIU+T_Ac3TPu*C#i!>rQg; zsAv7HanWxX%9L0!lPz(vIhr0pV`8`qsqZeo-OP| zAr9v1XkkaS{7rA#a`jer*gX!`c-YDgbm3rokv6vXHV(e*(Z+V0#=+@rZEX97Klh2# zXsxR4Y>QhQ%$wBCHgw?NmBJnD16w&*%e{lGJ&A)ITRYh5HPimCH){J^w&FDoetG{b zTfvrtJ7#pUr8aT!1h-DM1V0C_Y3XDys+js$-yW5BY_S9mcDeVCJ>80fW2bkqC(3bf zrb`!_#?8U+n!4COOQ!tQH%a+DyC<51CGWmxcQZJ6pI|q;O`3zs`Dr;qI9Uz7go(`)$1zLUejUW%XCiQyc4 z_0}hL)DaHOo${F-wvvNCIecaZ{t)=9Z+iV_ws#f>Z$MwzZowRU@a7k`y*>w@n*5b* zv5bRn9RJET?4>S)AAc3peq|qc$-!T@d}C_|aj@`>Z)|m44px}d!&Y3(!AIt!$6!@<21zq7^WbFir0clPuT#I~=az9$=hEo2R` zEpBkIirg^U(4K=W=o}ov{hO^lk%OOD{AR0HalS#VEB(z@OyuAZ*%7vaH3u(= z9bro;aIhNJC|iP;gRRX+*^5|ztfSGwOGepZaUA??J)1qU52go7_danaf&IrzmW7p-o1lzjI)rn|+I`u;JGgL#U$ zY55m9SVEeImTADjyCQjLX{-NVd)FD2#nr73pr~jR5d}L4Hf*QN%$b=pbA~8au%kgF zY7|=}(HKlL)+qL_#2!mTCH5rPjT(cf5u-8KYYcY9hOwZ=BzM2?$*lYD{m6+|9+l3rnKZ z`Yvwtx+I$V*7NZZ=n~hU7VNt7Rs;U z;tB5{*WAV3XIDgNZRV z7zHnJ@$dj{P6O@!_aDXY@As%GdU3?X(>qr~`3qe9-JWXbPA?aq z4y}%Io4EMplp^LXnu8A_9 z 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 cYZu)~AlzNa!q Date: Wed, 20 Sep 2017 12:38:53 +0200 Subject: [PATCH 007/113] recompiled with vc2013 --- .../Resources/Unmanaged/x64/libwebp.dll | Bin 479744 -> 479744 bytes .../Resources/Unmanaged/x86/libwebp.dll | Bin 399872 -> 401408 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/src/ImageProcessor.Plugins.WebP/Resources/Unmanaged/x64/libwebp.dll b/src/ImageProcessor.Plugins.WebP/Resources/Unmanaged/x64/libwebp.dll index 43ffa6a603f6a2f631f21c4364b63f6db468e8d7..fa80381463c376ae1a957b5f59f9707aac8f86d1 100644 GIT binary patch literal 479744 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

    *Oku?i45prxfP=S+%!4oljK=xuD<0rZQK&Ca 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⁣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 +a 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 PlSu{s-{1e=HSm7`wx$ze literal 479744 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

    rqgTG4~%hF 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

    dEyP#?$*d^Ezcz*3+uP#wqte1euf53B)30L_6i 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 diff --git a/src/ImageProcessor.Plugins.WebP/Resources/Unmanaged/x86/libwebp.dll b/src/ImageProcessor.Plugins.WebP/Resources/Unmanaged/x86/libwebp.dll index 1b51c69adaace92d9a22d6e86942925581905ec7..ed3248fd18f9d65c31af5b748b1b22b53b245c99 100644 GIT binary patch literal 401408 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

    aK&;DuFCYM4-z6t-(h3_kYf_TT^?6m(zKr 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ᬆ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 ba(K?8ag+;&R}qe9Hjz%d|MU4jnt}fXdqp$d literal 399872 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%0DKjyvEp&(*!J6!m@X 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

    Nb>^N>dcPFw$Ry_L^9msUgckB<6T=bomz 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 From 870cd8611c677993476c240c3d3d690151bdab7b Mon Sep 17 00:00:00 2001 From: Vincent Baaij Date: Fri, 6 Oct 2017 16:26:16 +0200 Subject: [PATCH 008/113] Adds the missing Gamma processor to Web --- .../ImageProcessor.Web.csproj | 1 + src/ImageProcessor.Web/Processors/Gamma.cs | 81 +++++++++++++++++++ .../RegularExpressionUnitTests.cs | 21 +++++ 3 files changed, 103 insertions(+) create mode 100644 src/ImageProcessor.Web/Processors/Gamma.cs diff --git a/src/ImageProcessor.Web/ImageProcessor.Web.csproj b/src/ImageProcessor.Web/ImageProcessor.Web.csproj index 0c438aba5..31954960d 100644 --- a/src/ImageProcessor.Web/ImageProcessor.Web.csproj +++ b/src/ImageProcessor.Web/ImageProcessor.Web.csproj @@ -80,6 +80,7 @@ + diff --git a/src/ImageProcessor.Web/Processors/Gamma.cs b/src/ImageProcessor.Web/Processors/Gamma.cs new file mode 100644 index 000000000..c7e3e1515 --- /dev/null +++ b/src/ImageProcessor.Web/Processors/Gamma.cs @@ -0,0 +1,81 @@ +// -------------------------------------------------------------------------------------------------------------------- +// +// Copyright (c) James Jackson-South. +// Licensed under the Apache License, Version 2.0. +// +//

    +// Encapsulates methods to change the alpha component of the image to effect its luminance. +// +// -------------------------------------------------------------------------------------------------------------------- + +namespace ImageProcessor.Web.Processors +{ + using System.Collections.Specialized; + using System.Text.RegularExpressions; + using System.Web; + + using ImageProcessor.Processors; + using ImageProcessor.Web.Helpers; + + /// + /// Encapsulates methods to change the alpha component of the image to effect its luminance. + /// + public class Gamma : IWebGraphicsProcessor + { + /// + /// The regular expression to search strings for. + /// + private static readonly Regex QueryRegex = new Regex(@"gamma=[^&]", RegexOptions.Compiled); + + /// + /// Initializes a new instance of the class. + /// + public Gamma() + { + this.Processor = new ImageProcessor.Processors.Gamma(); + } + + /// + /// Gets the regular expression to search strings for. + /// + public Regex RegexPattern => QueryRegex; + + /// + /// Gets the order in which this processor is to be used in a chain. + /// + public int SortOrder + { + get; + private set; + } + + /// + /// Gets the associated graphics processor. + /// + public IGraphicsProcessor Processor { get; } + + /// + /// The position in the original string where the first character of the captured substring was found. + /// + /// + /// The query string to search. + /// + /// + /// The zero-based starting position in the original string where the captured substring was found. + /// + public int MatchRegexIndex(string queryString) + { + this.SortOrder = int.MaxValue; + Match match = this.RegexPattern.Match(queryString); + + if (match.Success) + { + this.SortOrder = match.Index; + NameValueCollection queryCollection = HttpUtility.ParseQueryString(queryString); + this.Processor.DynamicParameter = QueryParamParser.Instance.ParseValue(queryCollection["gamma"]); + } + + return this.SortOrder; + } + } +} diff --git a/tests/ImageProcessor.Web.UnitTests/RegularExpressionUnitTests.cs b/tests/ImageProcessor.Web.UnitTests/RegularExpressionUnitTests.cs index d19e3b0d2..ca47f7782 100644 --- a/tests/ImageProcessor.Web.UnitTests/RegularExpressionUnitTests.cs +++ b/tests/ImageProcessor.Web.UnitTests/RegularExpressionUnitTests.cs @@ -44,6 +44,27 @@ public void TestAlphaRegex(string input, int expected) Assert.AreEqual(expected, result); } + /// + /// The gamma regex unit test. + /// + /// The input string. + /// The expected result. + [Test] + [TestCase("gamma=0", 0F)] + [TestCase("gamma=270", 270F)] + [TestCase("gamma=-270", -270F)] + [TestCase("gamma=28", 28F)] + [TestCase("gamma=28.7", 28.7F)] + public void TestGammaRegex(string input, float expected) + { + Processors.Gamma rotate = new Processors.Gamma(); + rotate.MatchRegexIndex(input); + + float result = rotate.Processor.DynamicParameter; + + Assert.AreEqual(expected, result); + } + /// /// The contrast regex unit test. /// From 6f31e5a681a17942853466a4581b401f9b3300e5 Mon Sep 17 00:00:00 2001 From: Vincent Baaij Date: Sat, 7 Oct 2017 19:27:36 +0200 Subject: [PATCH 009/113] Add Gamma to processing.config --- .../Configuration/Resources/processing.config.transform | 1 + 1 file changed, 1 insertion(+) diff --git a/src/ImageProcessor.Web/Configuration/Resources/processing.config.transform b/src/ImageProcessor.Web/Configuration/Resources/processing.config.transform index 0817c509b..5204196c8 100644 --- a/src/ImageProcessor.Web/Configuration/Resources/processing.config.transform +++ b/src/ImageProcessor.Web/Configuration/Resources/processing.config.transform @@ -13,6 +13,7 @@ + From 40bd81799a67639166097a21eaa002dbec833efd Mon Sep 17 00:00:00 2001 From: JimBobSquarePants Date: Mon, 9 Oct 2017 15:07:09 +1100 Subject: [PATCH 010/113] Add an extra safety check. Touch #629 --- src/ImageProcessor.Web/Caching/DiskCache.cs | 10 +++++-- .../Properties/AssemblyInfo.cs | 1 + .../Helpers/AsyncDuplicateLockTests.cs | 28 +++++++++++++++++++ .../ImageProcessor.Web.UnitTests.csproj | 1 + 4 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 tests/ImageProcessor.Web.UnitTests/Helpers/AsyncDuplicateLockTests.cs diff --git a/src/ImageProcessor.Web/Caching/DiskCache.cs b/src/ImageProcessor.Web/Caching/DiskCache.cs index 95087cf0f..f324039a5 100644 --- a/src/ImageProcessor.Web/Caching/DiskCache.cs +++ b/src/ImageProcessor.Web/Caching/DiskCache.cs @@ -179,9 +179,15 @@ public override async Task AddImageToCacheAsync(Stream stream, string contentTyp directoryInfo.Create(); } - using (FileStream fileStream = File.Create(this.CachedPath)) + // This is a hack. I don't know why there would ever be double access to the file but there is + // and it's causing errors to be thrown. + // https://github.com/JimBobSquarePants/ImageProcessor/issues/629 + if (!File.Exists(this.CachedPath)) { - await stream.CopyToAsync(fileStream); + using (FileStream fileStream = File.Create(this.CachedPath, (int)stream.Length)) + { + await stream.CopyToAsync(fileStream); + } } } diff --git a/src/ImageProcessor.Web/Properties/AssemblyInfo.cs b/src/ImageProcessor.Web/Properties/AssemblyInfo.cs index b15f592c1..8086bf6b3 100644 --- a/src/ImageProcessor.Web/Properties/AssemblyInfo.cs +++ b/src/ImageProcessor.Web/Properties/AssemblyInfo.cs @@ -45,3 +45,4 @@ [assembly: AssemblyFileVersion("4.8.6.0")] [assembly:InternalsVisibleTo("ImageProcessor.UnitTests")] +[assembly: InternalsVisibleTo("ImageProcessor.Web.UnitTests")] diff --git a/tests/ImageProcessor.Web.UnitTests/Helpers/AsyncDuplicateLockTests.cs b/tests/ImageProcessor.Web.UnitTests/Helpers/AsyncDuplicateLockTests.cs new file mode 100644 index 000000000..a5657f515 --- /dev/null +++ b/tests/ImageProcessor.Web.UnitTests/Helpers/AsyncDuplicateLockTests.cs @@ -0,0 +1,28 @@ +using System.Threading.Tasks; +using ImageProcessor.Web.Helpers; +using NUnit.Framework; + +namespace ImageProcessor.Web.UnitTests.Helpers +{ + public class AsyncDuplicateLockTests + { + [Test] + public void CorrectlyLocksOnKey() + { + var locker = new AsyncDuplicateLock(); + string key = "TESTKEY"; + bool working; + + Parallel.For(0, 10L, async i => + { + using (await locker.LockAsync(key)) + { + working = true; + await Task.Delay(50); + Assert.True(working); + working = false; + } + }); + } + } +} \ No newline at end of file diff --git a/tests/ImageProcessor.Web.UnitTests/ImageProcessor.Web.UnitTests.csproj b/tests/ImageProcessor.Web.UnitTests/ImageProcessor.Web.UnitTests.csproj index ae5a9d7d3..6720f72f8 100644 --- a/tests/ImageProcessor.Web.UnitTests/ImageProcessor.Web.UnitTests.csproj +++ b/tests/ImageProcessor.Web.UnitTests/ImageProcessor.Web.UnitTests.csproj @@ -50,6 +50,7 @@ + From 69b20ff65b29b1acb983eb2ed800117a466a31d6 Mon Sep 17 00:00:00 2001 From: JimBobSquarePants Date: Mon, 9 Oct 2017 16:27:48 +1100 Subject: [PATCH 011/113] Lock on a string!!!! #629 --- .../Helpers/AsyncDuplicateLock.cs | 16 ++++++++-------- .../HttpModules/ImageProcessingModule.cs | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/ImageProcessor.Web/Helpers/AsyncDuplicateLock.cs b/src/ImageProcessor.Web/Helpers/AsyncDuplicateLock.cs index d286c5f66..c1532dd28 100644 --- a/src/ImageProcessor.Web/Helpers/AsyncDuplicateLock.cs +++ b/src/ImageProcessor.Web/Helpers/AsyncDuplicateLock.cs @@ -27,10 +27,10 @@ namespace ImageProcessor.Web.Helpers internal sealed class AsyncDuplicateLock { /// - /// A collection of reference counters used for tracking references to the same object. + /// A collection of reference counters used for tracking references to the same key. /// - private static readonly Dictionary> SemaphoreSlims - = new Dictionary>(); + private static readonly Dictionary> SemaphoreSlims + = new Dictionary>(); /// /// Locks the current thread asynchronously. @@ -41,7 +41,7 @@ private static readonly Dictionary> SemaphoreS /// /// The that will release the lock. /// - public IDisposable Lock(object key) + public IDisposable Lock(string key) { GetOrCreate(key).Wait(); return new Releaser(key); @@ -56,7 +56,7 @@ public IDisposable Lock(object key) /// /// The that will release the lock. /// - public async Task LockAsync(object key) + public async Task LockAsync(string key) { await GetOrCreate(key).WaitAsync().ConfigureAwait(false); return new Releaser(key); @@ -72,7 +72,7 @@ public async Task LockAsync(object key) /// /// The . /// - private static SemaphoreSlim GetOrCreate(object key) + private static SemaphoreSlim GetOrCreate(string key) { RefCounted item; lock (SemaphoreSlims) @@ -130,7 +130,7 @@ private sealed class Releaser : IDisposable /// /// The key identifying the semaphore that limits the number of threads. /// - private readonly object key; + private readonly string key; /// /// A value indicating whether this instance of the given entity has been disposed. @@ -151,7 +151,7 @@ private sealed class Releaser : IDisposable /// /// The key identifying the semaphore that limits the number of threads. /// - public Releaser(object key) + public Releaser(string key) { this.key = key; } diff --git a/src/ImageProcessor.Web/HttpModules/ImageProcessingModule.cs b/src/ImageProcessor.Web/HttpModules/ImageProcessingModule.cs index 16bfa7696..0f948a5d3 100644 --- a/src/ImageProcessor.Web/HttpModules/ImageProcessingModule.cs +++ b/src/ImageProcessor.Web/HttpModules/ImageProcessingModule.cs @@ -542,7 +542,7 @@ private async Task ProcessImageAsync(HttpContext context) return; } - using (await Locker.LockAsync(rawUrl)) + using (await Locker.LockAsync(rawUrl.ToUpperInvariant())) { // Parse the url to see whether we should be doing any work. // If we're not intercepting all requests and we don't have valid instructions we shoul break here. From ba132107761a95d2ec40347299ad9f989ea5d312 Mon Sep 17 00:00:00 2001 From: JimBobSquarePants Date: Tue, 10 Oct 2017 08:50:53 +1100 Subject: [PATCH 012/113] Use lower --- src/ImageProcessor.Web/HttpModules/ImageProcessingModule.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ImageProcessor.Web/HttpModules/ImageProcessingModule.cs b/src/ImageProcessor.Web/HttpModules/ImageProcessingModule.cs index 0f948a5d3..a3fbc68a7 100644 --- a/src/ImageProcessor.Web/HttpModules/ImageProcessingModule.cs +++ b/src/ImageProcessor.Web/HttpModules/ImageProcessingModule.cs @@ -542,7 +542,7 @@ private async Task ProcessImageAsync(HttpContext context) return; } - using (await Locker.LockAsync(rawUrl.ToUpperInvariant())) + using (await Locker.LockAsync(rawUrl.ToLowerInvariant())) { // Parse the url to see whether we should be doing any work. // If we're not intercepting all requests and we don't have valid instructions we shoul break here. From 11265f44e145d5f886158555f9907427e5a278b4 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Sun, 15 Oct 2017 23:31:59 +1100 Subject: [PATCH 013/113] Add AsyncKeyLock --- .../Caching/AsyncKeyLock.cs | 105 +++++++++ src/ImageProcessor.Web/Caching/Doorman.cs | 49 ++++ src/ImageProcessor.Web/Caching/DoormanPool.cs | 47 ++++ .../Helpers/AsyncDuplicateLock.cs | 221 ------------------ .../HttpModules/ImageProcessingModule.cs | 13 +- .../ImageProcessor.Web.csproj | 4 +- .../Caching/AsyncKeyLockTests.cs | 78 +++++++ .../Caching/DoormanPoolTests.cs | 51 ++++ .../Caching/DoormanTests.cs | 29 +++ .../Helpers/AsyncDuplicateLockTests.cs | 28 --- .../ImageProcessor.Web.UnitTests.csproj | 4 +- 11 files changed, 370 insertions(+), 259 deletions(-) create mode 100644 src/ImageProcessor.Web/Caching/AsyncKeyLock.cs create mode 100644 src/ImageProcessor.Web/Caching/Doorman.cs create mode 100644 src/ImageProcessor.Web/Caching/DoormanPool.cs delete mode 100644 src/ImageProcessor.Web/Helpers/AsyncDuplicateLock.cs create mode 100644 tests/ImageProcessor.Web.UnitTests/Caching/AsyncKeyLockTests.cs create mode 100644 tests/ImageProcessor.Web.UnitTests/Caching/DoormanPoolTests.cs create mode 100644 tests/ImageProcessor.Web.UnitTests/Caching/DoormanTests.cs delete mode 100644 tests/ImageProcessor.Web.UnitTests/Helpers/AsyncDuplicateLockTests.cs diff --git a/src/ImageProcessor.Web/Caching/AsyncKeyLock.cs b/src/ImageProcessor.Web/Caching/AsyncKeyLock.cs new file mode 100644 index 000000000..8de91d3aa --- /dev/null +++ b/src/ImageProcessor.Web/Caching/AsyncKeyLock.cs @@ -0,0 +1,105 @@ +// -------------------------------------------------------------------------------------------------------------------- +// +// Copyright (c) James Jackson-South. +// Licensed under the Apache License, Version 2.0. +// +// -------------------------------------------------------------------------------------------------------------------- + +using System; +using System.Collections.Generic; +using System.Threading; +using System.Threading.Tasks; + +namespace ImageProcessor.Web.Caching +{ + /// + /// The async key lock prevents multiple asynchronous threads acting upon the same object with the given key at the same time. + /// It is designed so that it does not block unique requests allowing a high throughput. + /// + internal sealed class AsyncKeyLock + { + /// + /// A collection of doorman counters used for tracking references to the same key. + /// + private static readonly Dictionary Keys = new Dictionary(); + + /// + /// Locks the current thread asynchronously. + /// + /// The key identifying the specific object to lock against. + /// + /// The that will release the lock. + /// + public async Task LockAsync(string key) + { + string lowerKey = key.ToLowerInvariant(); + await GetOrCreate(lowerKey).WaitAsync().ConfigureAwait(false); + return new Releaser(lowerKey); + } + + /// + /// Returns a matching on the given key + /// or a new one if none is found. + /// + /// The key identifying the semaphore. + /// + /// The . + /// + private static SemaphoreSlim GetOrCreate(string key) + { + Doorman item; + lock (Keys) + { + if (Keys.TryGetValue(key, out item)) + { + ++item.RefCount; + } + else + { + item = DoormanPool.Rent(); + Keys[key] = item; + } + } + + return item.Semaphore; + } + + /// + /// The disposable releaser tasked with releasing the semaphore. + /// + private sealed class Releaser : IDisposable + { + /// + /// The key identifying the that limits the number of threads. + /// + private readonly string key; + + /// + /// Initializes a new instance of the class. + /// + /// The key identifying the doorman that limits the number of threads. + public Releaser(string key) + { + this.key = key; + } + + /// + public void Dispose() + { + lock (Keys) + { + Doorman doorman = Keys[this.key]; + --doorman.RefCount; + if (doorman.RefCount == 0) + { + Keys.Remove(this.key); + doorman.Reset(); + DoormanPool.Return(doorman); + } + + doorman.Semaphore.Release(); + } + } + } + } +} \ No newline at end of file diff --git a/src/ImageProcessor.Web/Caching/Doorman.cs b/src/ImageProcessor.Web/Caching/Doorman.cs new file mode 100644 index 000000000..f23d55c1e --- /dev/null +++ b/src/ImageProcessor.Web/Caching/Doorman.cs @@ -0,0 +1,49 @@ +// -------------------------------------------------------------------------------------------------------------------- +// +// Copyright (c) James Jackson-South. +// Licensed under the Apache License, Version 2.0. +// +// -------------------------------------------------------------------------------------------------------------------- + +using System; +using System.Threading; + +namespace ImageProcessor.Web.Caching +{ + /// + /// A wrapper around that operates a one-in-one out policy + /// + internal sealed class Doorman : IDisposable + { + /// + /// Initializes a new instance of the class. + /// + public Doorman() + { + this.Semaphore = new SemaphoreSlim(1, 1); + this.RefCount = 1; + } + + /// + /// Gets the SemaphoreSlim that performs the limiting + /// + public SemaphoreSlim Semaphore { get; } + + /// + /// Gets or sets the number of references to this doorman. + /// + public int RefCount { get; set; } + + public void Reset() + { + this.RefCount = 1; + } + + /// + public void Dispose() + { + this.RefCount = 1; + this.Semaphore.Dispose(); + } + } +} diff --git a/src/ImageProcessor.Web/Caching/DoormanPool.cs b/src/ImageProcessor.Web/Caching/DoormanPool.cs new file mode 100644 index 000000000..9d7e1e20a --- /dev/null +++ b/src/ImageProcessor.Web/Caching/DoormanPool.cs @@ -0,0 +1,47 @@ +// -------------------------------------------------------------------------------------------------------------------- +// +// Copyright (c) James Jackson-South. +// Licensed under the Apache License, Version 2.0. +// +// -------------------------------------------------------------------------------------------------------------------- + +using System; +using System.Collections.Concurrent; + +namespace ImageProcessor.Web.Caching +{ + /// + /// Provides a resource pool that enables reusing instances of + /// + internal static class DoormanPool + { + private static readonly ConcurrentBag Pool = new ConcurrentBag(); + + /// + /// Retrieves a from the pool or a new one if the pool is empty + /// + /// Tre + public static Doorman Rent() => Pool.TryTake(out var doorman) ? doorman : new Doorman(); + + /// + /// Returns an doorman to the pool that was previously obtained using the + /// method on the same instance. + /// + /// The doorman to return + public static void Return(Doorman doorman) + { + if (doorman == null) + { + throw new ArgumentNullException(nameof(doorman)); + } + + Pool.Add(doorman); + } + + /// + /// Gets the number of items contained within the pool + /// + /// The + public static int Count() => Pool.Count; + } +} diff --git a/src/ImageProcessor.Web/Helpers/AsyncDuplicateLock.cs b/src/ImageProcessor.Web/Helpers/AsyncDuplicateLock.cs deleted file mode 100644 index c1532dd28..000000000 --- a/src/ImageProcessor.Web/Helpers/AsyncDuplicateLock.cs +++ /dev/null @@ -1,221 +0,0 @@ -// -------------------------------------------------------------------------------------------------------------------- -// -// Copyright (c) James Jackson-South. -// Licensed under the Apache License, Version 2.0. -// -// -// The async duplicate lock prevents multiple asynchronous threads acting upon the same object -// with the given key at the same time. It is designed so that it does not block unique requests -// allowing a high throughput. -// -// -// -------------------------------------------------------------------------------------------------------------------- - -namespace ImageProcessor.Web.Helpers -{ - using System; - using System.Collections.Generic; - using System.Threading; - using System.Threading.Tasks; - - /// - /// The async duplicate lock prevents multiple asynchronous threads acting upon the same object - /// with the given key at the same time. It is designed so that it does not block unique requests - /// allowing a high throughput. - /// - /// - internal sealed class AsyncDuplicateLock - { - /// - /// A collection of reference counters used for tracking references to the same key. - /// - private static readonly Dictionary> SemaphoreSlims - = new Dictionary>(); - - /// - /// Locks the current thread asynchronously. - /// - /// - /// The key identifying the specific object to lock against. - /// - /// - /// The that will release the lock. - /// - public IDisposable Lock(string key) - { - GetOrCreate(key).Wait(); - return new Releaser(key); - } - - /// - /// Locks the current thread asynchronously. - /// - /// - /// The key identifying the specific object to lock against. - /// - /// - /// The that will release the lock. - /// - public async Task LockAsync(string key) - { - await GetOrCreate(key).WaitAsync().ConfigureAwait(false); - return new Releaser(key); - } - - /// - /// Returns a matching on the given key - /// or a new one if none is found. - /// - /// - /// The key identifying the semaphore. - /// - /// - /// The . - /// - private static SemaphoreSlim GetOrCreate(string key) - { - RefCounted item; - lock (SemaphoreSlims) - { - if (SemaphoreSlims.TryGetValue(key, out item)) - { - ++item.RefCount; - } - else - { - item = new RefCounted(new SemaphoreSlim(1, 1)); - SemaphoreSlims[key] = item; - } - } - - return item.Value; - } - - /// - /// Tracks the number of references made against the given object. - /// - /// - /// The object to count references against. - /// - private sealed class RefCounted - { - /// - /// Initializes a new instance of the class. - /// - /// - /// The object to count references against. - /// - public RefCounted(T value) - { - this.RefCount = 1; - this.Value = value; - } - - /// - /// Gets or sets the number of references. - /// - public int RefCount { get; set; } - - /// - /// Gets the object to count references against. - /// - public T Value { get; } - } - - /// - /// The disposable releaser tasked with releasing the semaphore. - /// - private sealed class Releaser : IDisposable - { - /// - /// The key identifying the semaphore that limits the number of threads. - /// - private readonly string key; - - /// - /// A value indicating whether this instance of the given entity has been disposed. - /// - /// if this instance has been disposed; otherwise, . - /// - /// If the entity is disposed, it must not be disposed a second - /// time. The isDisposed field is set the first time the entity - /// is disposed. If the isDisposed field is true, then the Dispose() - /// method will not dispose again. This help not to prolong the entity's - /// life in the Garbage Collector. - /// - private bool isDisposed; - - /// - /// Initializes a new instance of the class. - /// - /// - /// The key identifying the semaphore that limits the number of threads. - /// - public Releaser(string key) - { - this.key = key; - } - - /// - /// Finalizes an instance of the class. - /// - ~Releaser() - { - // Do not re-create Dispose clean-up code here. - // Calling Dispose(false) is optimal in terms of - // readability and maintainability. - this.Dispose(false); - } - - /// - /// Disposes of the resources (other than memory) used by the module that implements . - /// - public void Dispose() - { - this.Dispose(true); - - // This object will be cleaned up by the Dispose method. - // Therefore, you should call GC.SuppressFinalize to - // take this object off the finalization queue - // and prevent finalization code for this object - // from executing a second time. - GC.SuppressFinalize(this); - } - - /// - /// Disposes the object and frees resources for the Garbage Collector. - /// - /// - /// If true, the object gets disposed. - /// - private void Dispose(bool disposing) - { - if (this.isDisposed) - { - return; - } - - if (disposing) - { - RefCounted item; - lock (SemaphoreSlims) - { - item = SemaphoreSlims[this.key]; - --item.RefCount; - if (item.RefCount == 0) - { - SemaphoreSlims.Remove(this.key); - } - } - - item.Value.Release(); - } - - // Call the appropriate methods to clean up - // unmanaged resources here. - // Note disposing is done. - this.isDisposed = true; - } - } - } -} diff --git a/src/ImageProcessor.Web/HttpModules/ImageProcessingModule.cs b/src/ImageProcessor.Web/HttpModules/ImageProcessingModule.cs index a3fbc68a7..64628416c 100644 --- a/src/ImageProcessor.Web/HttpModules/ImageProcessingModule.cs +++ b/src/ImageProcessor.Web/HttpModules/ImageProcessingModule.cs @@ -72,7 +72,7 @@ public class ImageProcessingModule : IHttpModule /// /// Ensures duplicate requests are atomic. /// - private static readonly AsyncDuplicateLock Locker = new AsyncDuplicateLock(); + private static readonly AsyncKeyLock Locker = new AsyncKeyLock(); /// /// Whether to allow known cache busters. @@ -251,8 +251,7 @@ public static void AddCorsRequestHeaders(HttpContext context) } // Now we check to see if the the url is from a whitelisted location. - Uri url; - if (!Uri.TryCreate(origin, UriKind.RelativeOrAbsolute, out url)) + if (!Uri.TryCreate(origin, UriKind.RelativeOrAbsolute, out Uri url)) { return; } @@ -478,8 +477,7 @@ private async Task ProcessImageAsync(HttpContext context) if (currentService != null) { // Parse url - string requestPath, queryString; - UrlParser.ParseUrl(url, currentService.Prefix, out requestPath, out queryString); + UrlParser.ParseUrl(url, currentService.Prefix, out string requestPath, out string queryString); string originalQueryString = queryString; // Replace any presets in the querystring with the actual value. @@ -542,7 +540,7 @@ private async Task ProcessImageAsync(HttpContext context) return; } - using (await Locker.LockAsync(rawUrl.ToLowerInvariant())) + using (await Locker.LockAsync(rawUrl)) { // Parse the url to see whether we should be doing any work. // If we're not intercepting all requests and we don't have valid instructions we shoul break here. @@ -556,8 +554,7 @@ private async Task ProcessImageAsync(HttpContext context) processors = ImageFactoryExtensions.GetMatchingProcessors(queryString); // Animation is not a processor but can be a specific request so we should allow it. - bool processAnimation; - mode = this.ParseAnimationMode(queryString, out processAnimation); + mode = this.ParseAnimationMode(queryString, out bool processAnimation); // Are we processing or cache busting? processing = processors != null && (processors.Any() || processAnimation); diff --git a/src/ImageProcessor.Web/ImageProcessor.Web.csproj b/src/ImageProcessor.Web/ImageProcessor.Web.csproj index 0c438aba5..b5fb27e0e 100644 --- a/src/ImageProcessor.Web/ImageProcessor.Web.csproj +++ b/src/ImageProcessor.Web/ImageProcessor.Web.csproj @@ -51,6 +51,9 @@ + + + @@ -62,7 +65,6 @@ - diff --git a/tests/ImageProcessor.Web.UnitTests/Caching/AsyncKeyLockTests.cs b/tests/ImageProcessor.Web.UnitTests/Caching/AsyncKeyLockTests.cs new file mode 100644 index 000000000..b9e1b161f --- /dev/null +++ b/tests/ImageProcessor.Web.UnitTests/Caching/AsyncKeyLockTests.cs @@ -0,0 +1,78 @@ +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using ImageProcessor.Web.Caching; +using NUnit.Framework; + +namespace ImageProcessor.Web.UnitTests.Caching +{ + public class AsyncKeyLockTests + { + private readonly AsyncKeyLock asyncKeyLock = new AsyncKeyLock(); + const string AsyncKey = "ASYNC_KEY"; + const string AsyncKey1 = "ASYNC_KEY1"; + const string AsyncKey2 = "ASYNC_KEY2"; + + [Test] + public void AsyncLockCanLockByKey() + { + bool zeroEntered = false; + bool entered = false; + int index = 0; + Task[] tasks = Enumerable.Range(0, 5).Select(i => Task.Run(async () => + { + using (await this.asyncKeyLock.LockAsync(AsyncKey)) + { + if (i == 0) + { + entered = true; + zeroEntered = true; + Thread.Sleep(3000); + entered = false; + } + else if (zeroEntered) + { + Assert.False(entered); + } + + index++; + } + + })).ToArray(); + + Task.WaitAll(tasks); + Assert.AreEqual(5, index); + } + + [Test] + public void AsyncLockAllowsDifferentKeysToRun() + { + bool zeroEntered = false; + bool entered = false; + int index = 0; + Task[] tasks = Enumerable.Range(0, 5).Select(i => Task.Run(async () => + { + using (await this.asyncKeyLock.LockAsync(i > 0 ? AsyncKey2 : AsyncKey1)) + { + if (i == 0) + { + entered = true; + zeroEntered = true; + Thread.Sleep(2000); + entered = false; + } + else if (zeroEntered) + { + Assert.True(entered); + } + + index++; + } + + })).ToArray(); + + Task.WaitAll(tasks); + Assert.AreEqual(5, index); + } + } +} \ No newline at end of file diff --git a/tests/ImageProcessor.Web.UnitTests/Caching/DoormanPoolTests.cs b/tests/ImageProcessor.Web.UnitTests/Caching/DoormanPoolTests.cs new file mode 100644 index 000000000..ee4152bd4 --- /dev/null +++ b/tests/ImageProcessor.Web.UnitTests/Caching/DoormanPoolTests.cs @@ -0,0 +1,51 @@ +using System; +using ImageProcessor.Web.Caching; +using NUnit.Framework; + +namespace ImageProcessor.Web.UnitTests.Caching +{ + public class DoormanPoolTests + { + [Test] + public void RentingGivesDifferentInstances() + { + Doorman first = DoormanPool.Rent(); + Doorman second = DoormanPool.Rent(); + + Assert.AreNotSame(first, second); + + DoormanPool.Return(first); + DoormanPool.Return(second); + } + + [Test] + public void DoormanPoolReusesItems() + { + int initialCount = DoormanPool.Count(); + Doorman first = DoormanPool.Rent(); + + int currentCount = DoormanPool.Count(); + if (currentCount > 0) + { + Assert.AreEqual(initialCount - 1, currentCount); + DoormanPool.Return(first); + Assert.AreEqual(initialCount, DoormanPool.Count()); + } + else + { + Assert.AreEqual(0, currentCount); + DoormanPool.Return(first); + Assert.AreEqual(initialCount + 1, DoormanPool.Count()); + } + } + + [Test] + public void CallingReturnWithNullThrows() + { + Assert.Throws(() => + { + DoormanPool.Return(null); + }); + } + } +} \ No newline at end of file diff --git a/tests/ImageProcessor.Web.UnitTests/Caching/DoormanTests.cs b/tests/ImageProcessor.Web.UnitTests/Caching/DoormanTests.cs new file mode 100644 index 000000000..a1f472f75 --- /dev/null +++ b/tests/ImageProcessor.Web.UnitTests/Caching/DoormanTests.cs @@ -0,0 +1,29 @@ +using ImageProcessor.Web.Caching; +using NUnit.Framework; + +namespace ImageProcessor.Web.UnitTests.Caching +{ + public class DoormanTests + { + [Test] + public void DoormanInitializesSemaphoreSlim() + { + var doorman = new Doorman(); + Assert.NotNull(doorman.Semaphore); + Assert.AreEqual(1, doorman.Semaphore.CurrentCount); + } + + [Test] + public void DoormanResetsRefCounter() + { + var doorman = new Doorman(); + Assert.AreEqual(1, doorman.RefCount); + doorman.RefCount--; + + Assert.AreEqual(0, doorman.RefCount); + + doorman.Reset(); + Assert.AreEqual(1, doorman.RefCount); + } + } +} \ No newline at end of file diff --git a/tests/ImageProcessor.Web.UnitTests/Helpers/AsyncDuplicateLockTests.cs b/tests/ImageProcessor.Web.UnitTests/Helpers/AsyncDuplicateLockTests.cs deleted file mode 100644 index a5657f515..000000000 --- a/tests/ImageProcessor.Web.UnitTests/Helpers/AsyncDuplicateLockTests.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System.Threading.Tasks; -using ImageProcessor.Web.Helpers; -using NUnit.Framework; - -namespace ImageProcessor.Web.UnitTests.Helpers -{ - public class AsyncDuplicateLockTests - { - [Test] - public void CorrectlyLocksOnKey() - { - var locker = new AsyncDuplicateLock(); - string key = "TESTKEY"; - bool working; - - Parallel.For(0, 10L, async i => - { - using (await locker.LockAsync(key)) - { - working = true; - await Task.Delay(50); - Assert.True(working); - working = false; - } - }); - } - } -} \ No newline at end of file diff --git a/tests/ImageProcessor.Web.UnitTests/ImageProcessor.Web.UnitTests.csproj b/tests/ImageProcessor.Web.UnitTests/ImageProcessor.Web.UnitTests.csproj index 6720f72f8..b296ca8af 100644 --- a/tests/ImageProcessor.Web.UnitTests/ImageProcessor.Web.UnitTests.csproj +++ b/tests/ImageProcessor.Web.UnitTests/ImageProcessor.Web.UnitTests.csproj @@ -47,10 +47,12 @@ + + + - From 5becced384232e8d75685a0ca5b71224d9b12e7e Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Tue, 17 Oct 2017 13:25:52 +1100 Subject: [PATCH 014/113] Use configurawait --- src/ImageProcessor.Web/Caching/DiskCache.cs | 14 ++++++-------- src/ImageProcessor.Web/Caching/ImageCacheBase.cs | 4 ++-- src/ImageProcessor.Web/Helpers/RemoteFile.cs | 2 +- .../HttpModules/ImageProcessingModule.cs | 14 +++++++------- src/ImageProcessor.Web/ImageProcessor.Web.csproj | 3 +++ .../Services/LocalFileImageService.cs | 2 +- src/ImageProcessor.Web/packages.config | 1 + .../ImageProcessor.Web.UnitTests.csproj | 2 +- 8 files changed, 22 insertions(+), 20 deletions(-) diff --git a/src/ImageProcessor.Web/Caching/DiskCache.cs b/src/ImageProcessor.Web/Caching/DiskCache.cs index f324039a5..339c9e942 100644 --- a/src/ImageProcessor.Web/Caching/DiskCache.cs +++ b/src/ImageProcessor.Web/Caching/DiskCache.cs @@ -100,8 +100,7 @@ public DiskCache(string requestPath, string fullPath, string querystring) { string configuredPath = this.Settings["VirtualCachePath"]; - string virtualPath; - this.absoluteCachePath = GetValidatedAbsolutePath(configuredPath, out virtualPath); + this.absoluteCachePath = GetValidatedAbsolutePath(configuredPath, out string virtualPath); this.virtualCachePath = virtualPath; } @@ -116,7 +115,7 @@ public override async Task IsNewOrUpdatedAsync() // TODO: Before this check is performed it should be throttled. For example, only perform this check // if the last time it was checked is greater than 5 seconds. This would be much better for perf // if there is a high throughput of image requests. - string cachedFileName = await this.CreateCachedFileNameAsync(); + string cachedFileName = await this.CreateCachedFileNameAsync().ConfigureAwait(false); this.CachedPath = CachedImageHelper.GetCachedPath(this.absoluteCachePath, cachedFileName, false, this.FolderDepth); this.virtualCachedFilePath = CachedImageHelper.GetCachedPath(this.virtualCachePath, cachedFileName, true, this.FolderDepth); @@ -147,7 +146,7 @@ public override async Task IsNewOrUpdatedAsync() { // Check to see if the cached image is set to expire // or a new file with the same name has replaced our current image - if (this.IsExpired(cachedImage.CreationTimeUtc) || await this.IsUpdatedAsync(cachedImage.CreationTimeUtc)) + if (this.IsExpired(cachedImage.CreationTimeUtc) || await this.IsUpdatedAsync(cachedImage.CreationTimeUtc).ConfigureAwait(false)) { CacheIndexer.Remove(this.CachedPath); isUpdated = true; @@ -186,7 +185,7 @@ public override async Task AddImageToCacheAsync(Stream stream, string contentTyp { using (FileStream fileStream = File.Create(this.CachedPath, (int)stream.Length)) { - await stream.CopyToAsync(fileStream); + await stream.CopyToAsync(fileStream).ConfigureAwait(false); } } } @@ -453,12 +452,11 @@ private static string GetValidatedAbsolutePath(string originalPath, out string v }; } - string virtualCacheFolderPath; string result = GetValidatedCachePathsImpl( originalPath, mapPath, s => new DirectoryInfo(s), - out virtualCacheFolderPath); + out string virtualCacheFolderPath); validatedVirtualCachePath = virtualCacheFolderPath; return result; @@ -538,7 +536,7 @@ private async Task IsUpdatedAsync(DateTime creationDate) HttpWebRequest request = (HttpWebRequest)WebRequest.Create(this.RequestPath); request.Method = "HEAD"; - using (HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync()) + using (HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync().ConfigureAwait(false)) { isUpdated = response.LastModified.ToUniversalTime() > creationDate; } diff --git a/src/ImageProcessor.Web/Caching/ImageCacheBase.cs b/src/ImageProcessor.Web/Caching/ImageCacheBase.cs index e3d291e75..5c1b0534d 100644 --- a/src/ImageProcessor.Web/Caching/ImageCacheBase.cs +++ b/src/ImageProcessor.Web/Caching/ImageCacheBase.cs @@ -140,7 +140,7 @@ protected ImageCacheBase(string requestPath, string fullPath, string querystring /// public virtual async Task CreateCachedFileNameAsync() { - return await Task.FromResult(CachedImageHelper.GetCachedImageFileName(this.FullPath, this.Querystring)); + return await Task.FromResult(CachedImageHelper.GetCachedImageFileName(this.FullPath, this.Querystring)).ConfigureAwait(false); } /// @@ -315,7 +315,7 @@ private static async Task PerformTrim(Func trimmer) } trim = true; - await trimmer(tokenSource.Token); + await trimmer(tokenSource.Token).ConfigureAwait(false); trim = false; } diff --git a/src/ImageProcessor.Web/Helpers/RemoteFile.cs b/src/ImageProcessor.Web/Helpers/RemoteFile.cs index b0d6478fd..738af0a95 100644 --- a/src/ImageProcessor.Web/Helpers/RemoteFile.cs +++ b/src/ImageProcessor.Web/Helpers/RemoteFile.cs @@ -173,7 +173,7 @@ internal async Task GetWebResponseAsync() WebResponse response; try { - response = await this.GetWebRequest().GetResponseAsync(); + response = await this.GetWebRequest().GetResponseAsync().ConfigureAwait(false); } catch (WebException ex) { diff --git a/src/ImageProcessor.Web/HttpModules/ImageProcessingModule.cs b/src/ImageProcessor.Web/HttpModules/ImageProcessingModule.cs index 64628416c..65bbfbd27 100644 --- a/src/ImageProcessor.Web/HttpModules/ImageProcessingModule.cs +++ b/src/ImageProcessor.Web/HttpModules/ImageProcessingModule.cs @@ -540,7 +540,7 @@ private async Task ProcessImageAsync(HttpContext context) return; } - using (await Locker.LockAsync(rawUrl)) + using (await Locker.LockAsync(rawUrl).ConfigureAwait(false)) { // Parse the url to see whether we should be doing any work. // If we're not intercepting all requests and we don't have valid instructions we shoul break here. @@ -573,7 +573,7 @@ private async Task ProcessImageAsync(HttpContext context) .ImageCache.GetInstance(requestPath, url, queryString); // Is the file new or updated? - bool isNewOrUpdated = await this.imageCache.IsNewOrUpdatedAsync(); + bool isNewOrUpdated = await this.imageCache.IsNewOrUpdatedAsync().ConfigureAwait(false); string cachedPath = this.imageCache.CachedPath; // Only process if the file has been updated. @@ -585,7 +585,7 @@ private async Task ProcessImageAsync(HttpContext context) try { - imageBuffer = await currentService.GetImage(requestPath); + imageBuffer = await currentService.GetImage(requestPath).ConfigureAwait(false); } catch (HttpException ex) { @@ -625,14 +625,14 @@ private async Task ProcessImageAsync(HttpContext context) else { // We're cachebusting. Allow the value to be cached - await inStream.CopyToAsync(outStream); + await inStream.CopyToAsync(outStream).ConfigureAwait(false); mimeType = FormatUtilities.GetFormat(outStream).MimeType; } } else { // We're capturing all requests. - await inStream.CopyToAsync(outStream); + await inStream.CopyToAsync(outStream).ConfigureAwait(false); mimeType = FormatUtilities.GetFormat(outStream).MimeType; } @@ -653,7 +653,7 @@ private async Task ProcessImageAsync(HttpContext context) } // Add to the cache. - await this.imageCache.AddImageToCacheAsync(outStream, mimeType); + await this.imageCache.AddImageToCacheAsync(outStream, mimeType).ConfigureAwait(false); // Cleanup outStream.Dispose(); @@ -697,7 +697,7 @@ private async Task ProcessImageAsync(HttpContext context) if (isNewOrUpdated) { // Trim the cache. - await this.imageCache.TrimCacheAsync(); + await this.imageCache.TrimCacheAsync().ConfigureAwait(false); } } } diff --git a/src/ImageProcessor.Web/ImageProcessor.Web.csproj b/src/ImageProcessor.Web/ImageProcessor.Web.csproj index b5fb27e0e..0cfe84a01 100644 --- a/src/ImageProcessor.Web/ImageProcessor.Web.csproj +++ b/src/ImageProcessor.Web/ImageProcessor.Web.csproj @@ -150,6 +150,9 @@ + + + ..\src\ImageProcessor ImageProcessor.csproj @@ -15,7 +15,7 @@ ImageProcessor Web - 4.8.6.0 + 4.8.7.0 ..\src\ImageProcessor.Web ImageProcessor.Web.csproj @@ -26,7 +26,7 @@ ImageProcessor Web.config sample - 2.3.0.0 + 2.3.1.0 ImageProcessor.Web.Config.nuspec @@ -54,7 +54,7 @@ ImageProcessor WebP plugin - 1.0.5.0 + 1.0.6.0 ..\src\ImageProcessor.Plugins.WebP ImageProcessor.Plugins.WebP.csproj diff --git a/src/ImageProcessor.Plugins.WebP/Properties/AssemblyInfo.cs b/src/ImageProcessor.Plugins.WebP/Properties/AssemblyInfo.cs index d378efbf8..3c931f96f 100644 --- a/src/ImageProcessor.Plugins.WebP/Properties/AssemblyInfo.cs +++ b/src/ImageProcessor.Plugins.WebP/Properties/AssemblyInfo.cs @@ -40,5 +40,5 @@ // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: -[assembly: AssemblyVersion("1.0.5.0")] -[assembly: AssemblyFileVersion("1.0.5.0")] +[assembly: AssemblyVersion("1.0.6.0")] +[assembly: AssemblyFileVersion("1.0.6.0")] diff --git a/src/ImageProcessor.Web/Properties/AssemblyInfo.cs b/src/ImageProcessor.Web/Properties/AssemblyInfo.cs index 8086bf6b3..15586bb57 100644 --- a/src/ImageProcessor.Web/Properties/AssemblyInfo.cs +++ b/src/ImageProcessor.Web/Properties/AssemblyInfo.cs @@ -41,8 +41,8 @@ // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: -[assembly: AssemblyVersion("4.8.6.0")] -[assembly: AssemblyFileVersion("4.8.6.0")] +[assembly: AssemblyVersion("4.8.7.0")] +[assembly: AssemblyFileVersion("4.8.7.0")] [assembly:InternalsVisibleTo("ImageProcessor.UnitTests")] [assembly: InternalsVisibleTo("ImageProcessor.Web.UnitTests")] diff --git a/src/ImageProcessor/Properties/AssemblyInfo.cs b/src/ImageProcessor/Properties/AssemblyInfo.cs index 214fc2673..3feaec74d 100644 --- a/src/ImageProcessor/Properties/AssemblyInfo.cs +++ b/src/ImageProcessor/Properties/AssemblyInfo.cs @@ -41,8 +41,8 @@ // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: -[assembly: AssemblyVersion("2.5.5.0")] -[assembly: AssemblyFileVersion("2.5.5.0")] +[assembly: AssemblyVersion("2.5.6.0")] +[assembly: AssemblyFileVersion("2.5.6.0")] [assembly: InternalsVisibleTo("ImageProcessor.UnitTests")] [assembly: InternalsVisibleTo("ImageProcessor.Web")] From c7d2e242b3a391afe374d3bd97fc50164f5caac1 Mon Sep 17 00:00:00 2001 From: Ronald Barendse Date: Mon, 6 Nov 2017 23:51:23 +0100 Subject: [PATCH 016/113] Added config transforms and example usage for background processor --- .../Resources/processing.config.transform | 5 +++++ .../Controllers/HomeController.cs | 5 +++++ .../ImageProcessor.TestWebsite.csproj | 2 ++ .../Images/imageprocessor/background/sand.jpg | Bin 0 -> 170523 bytes .../Views/Home/Database.cshtml | 12 ++++++++++++ .../Views/Home/Index.cshtml | 13 ++++++++++++- .../Views/Shared/_Layout.cshtml | 1 + .../config/imageprocessor/processing.config | 6 ++++++ 8 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 tests/ImageProcessor.TestWebsite/Images/imageprocessor/background/sand.jpg create mode 100644 tests/ImageProcessor.TestWebsite/Views/Home/Database.cshtml diff --git a/src/ImageProcessor.Web/Configuration/Resources/processing.config.transform b/src/ImageProcessor.Web/Configuration/Resources/processing.config.transform index 5204196c8..6473bbc57 100644 --- a/src/ImageProcessor.Web/Configuration/Resources/processing.config.transform +++ b/src/ImageProcessor.Web/Configuration/Resources/processing.config.transform @@ -4,6 +4,11 @@ + + + + + diff --git a/tests/ImageProcessor.TestWebsite/Controllers/HomeController.cs b/tests/ImageProcessor.TestWebsite/Controllers/HomeController.cs index 5c5cab9c6..c3ee8c6d0 100644 --- a/tests/ImageProcessor.TestWebsite/Controllers/HomeController.cs +++ b/tests/ImageProcessor.TestWebsite/Controllers/HomeController.cs @@ -42,6 +42,11 @@ public ActionResult WebP() return View(); } + public ActionResult Database() + { + return this.View(); + } + public ActionResult External() { return this.View(); diff --git a/tests/ImageProcessor.TestWebsite/ImageProcessor.TestWebsite.csproj b/tests/ImageProcessor.TestWebsite/ImageProcessor.TestWebsite.csproj index 21eb2bf87..d256959a1 100644 --- a/tests/ImageProcessor.TestWebsite/ImageProcessor.TestWebsite.csproj +++ b/tests/ImageProcessor.TestWebsite/ImageProcessor.TestWebsite.csproj @@ -24,6 +24,7 @@ + true @@ -123,6 +124,7 @@ Designer + Web.config diff --git a/tests/ImageProcessor.TestWebsite/Images/imageprocessor/background/sand.jpg b/tests/ImageProcessor.TestWebsite/Images/imageprocessor/background/sand.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cbed34b4e3e8139ffd2be9cc58f511081abbc2df GIT binary patch literal 170523 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 n9*%K9%hSySJ1b_~7mrXTQ{52UL)`(Y5)qca literal 0 HcmV?d00001 diff --git a/tests/ImageProcessor.TestWebsite/Views/Home/Database.cshtml b/tests/ImageProcessor.TestWebsite/Views/Home/Database.cshtml new file mode 100644 index 000000000..d2ac481c6 --- /dev/null +++ b/tests/ImageProcessor.TestWebsite/Views/Home/Database.cshtml @@ -0,0 +1,12 @@ +@{ + ViewBag.Title = "Database"; +} +

    Database

    +
    +
    +
    +

    Current

    + +
    +
    +
    diff --git a/tests/ImageProcessor.TestWebsite/Views/Home/Index.cshtml b/tests/ImageProcessor.TestWebsite/Views/Home/Index.cshtml index 68686c6f8..9d49c8838 100644 --- a/tests/ImageProcessor.TestWebsite/Views/Home/Index.cshtml +++ b/tests/ImageProcessor.TestWebsite/Views/Home/Index.cshtml @@ -7,7 +7,6 @@

    Resized

    -
    @@ -101,4 +100,16 @@
    +
    +
    +
    +

    Overlay

    + +
    +
    +

    Background

    + +
    +
    +
    \ No newline at end of file diff --git a/tests/ImageProcessor.TestWebsite/Views/Shared/_Layout.cshtml b/tests/ImageProcessor.TestWebsite/Views/Shared/_Layout.cshtml index cb37c2f49..6c3d9b135 100644 --- a/tests/ImageProcessor.TestWebsite/Views/Shared/_Layout.cshtml +++ b/tests/ImageProcessor.TestWebsite/Views/Shared/_Layout.cshtml @@ -92,6 +92,7 @@
  • @Html.ActionLink("Bmp", "Bmp")
  • @Html.ActionLink("Tiff", "Tiff")
  • @Html.ActionLink("WebP", "WebP")
  • +
  • @Html.ActionLink("Database", "Database")
  • @Html.ActionLink("External", "External")
  • diff --git a/tests/ImageProcessor.TestWebsite/config/imageprocessor/processing.config b/tests/ImageProcessor.TestWebsite/config/imageprocessor/processing.config index 3d0039238..8a1273124 100644 --- a/tests/ImageProcessor.TestWebsite/config/imageprocessor/processing.config +++ b/tests/ImageProcessor.TestWebsite/config/imageprocessor/processing.config @@ -4,6 +4,11 @@ + + + + + @@ -13,6 +18,7 @@ + From 63aca0786d68e04b9e652d6acdc981bc9939c96f Mon Sep 17 00:00:00 2001 From: Ronald Barendse Date: Wed, 8 Nov 2017 00:02:08 +0100 Subject: [PATCH 017/113] Changed Debug.WriteLine to Trace.WriteLine Allow logging messages without DEBUG constant or resorting to reflection using the built-in Trace class. --- .../Exceptions/Logging/DefaultLogger.cs | 44 +++++++------------ 1 file changed, 16 insertions(+), 28 deletions(-) diff --git a/src/ImageProcessor/Common/Exceptions/Logging/DefaultLogger.cs b/src/ImageProcessor/Common/Exceptions/Logging/DefaultLogger.cs index d4a95cea7..3c304fe81 100644 --- a/src/ImageProcessor/Common/Exceptions/Logging/DefaultLogger.cs +++ b/src/ImageProcessor/Common/Exceptions/Logging/DefaultLogger.cs @@ -12,49 +12,37 @@ namespace ImageProcessor.Common.Exceptions { using System; - using System.Linq.Expressions; - using System.Reflection; + using System.Diagnostics; using System.Runtime.CompilerServices; /// - /// The default logger which logs messages to the debugger. + /// The default logger which logs messages to the trace listeners. /// + /// public class DefaultLogger : ILogger { /// - /// The writeline delegate. - /// - private readonly Action debugWriteLine; - - /// - /// Initializes a new instance of the class. + /// Logs the specified message. /// - public DefaultLogger() + /// The type calling the logger. + /// The message to log. + /// The property or method name calling the log. + /// The line number where the method is called. + public void Log(string text, [CallerMemberName] string callerName = null, [CallerLineNumber] int lineNumber = 0) { - // Runtime compile the Debug.WriteLine(string text) method so we can call it outside - // debug compilation. - ParameterExpression param = Expression.Parameter(typeof(string), "text"); - MethodCallExpression caller = Expression.Call( - typeof(System.Diagnostics.Debug).GetRuntimeMethod( - "WriteLine", new[] { typeof(string) }), - param); - - this.debugWriteLine = Expression.Lambda>(caller, param) - .Compile(); + this.LogInternal(typeof(T), text, callerName, lineNumber); } /// /// Logs the specified message. /// - /// The type calling the logger. + /// The type calling the logger. /// The message to log. /// The property or method name calling the log. /// The line number where the method is called. - public void Log(string text, [CallerMemberName] string callerName = null, [CallerLineNumber] int lineNumber = 0) + public void Log(Type type, string text, [CallerMemberName] string callerName = null, [CallerLineNumber] int lineNumber = 0) { - string message = string.Format("{0} - {1}: {2} {3}:{4}", DateTime.UtcNow.ToString("s"), typeof(T).Name, callerName, lineNumber, text); - - this.debugWriteLine(message); + this.LogInternal(type, text, callerName, lineNumber); } ///
    @@ -64,11 +52,11 @@ public void Log(string text, [CallerMemberName] string callerName = null, [Ca /// The message to log. /// The property or method name calling the log. /// The line number where the method is called. - public void Log(Type type, string text, [CallerMemberName] string callerName = null, [CallerLineNumber] int lineNumber = 0) + private void LogInternal(Type type, string text, string callerName = null, int lineNumber = 0) { - string message = string.Format("{0} - {1}: {2} {3}:{4}", DateTime.UtcNow.ToString("s"), type.Name, callerName, lineNumber, text); + string message = String.Format("{0} - {1}: {2} {3}:{4}", DateTime.UtcNow.ToString("s"), type.Name, callerName, lineNumber, text); - this.debugWriteLine(message); + Trace.WriteLine(message); } } } From 22a3fffb783faec16da17600155d5b419cbe4fe6 Mon Sep 17 00:00:00 2001 From: Ronald Barendse Date: Wed, 8 Nov 2017 20:35:26 +0100 Subject: [PATCH 018/113] Added Conditional attribute to skip the String.Format in non-trace builds --- .../Exceptions/Logging/DefaultLogger.cs | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/ImageProcessor/Common/Exceptions/Logging/DefaultLogger.cs b/src/ImageProcessor/Common/Exceptions/Logging/DefaultLogger.cs index 3c304fe81..5eeb50ee4 100644 --- a/src/ImageProcessor/Common/Exceptions/Logging/DefaultLogger.cs +++ b/src/ImageProcessor/Common/Exceptions/Logging/DefaultLogger.cs @@ -4,7 +4,7 @@ // Licensed under the Apache License, Version 2.0. // // -// The default logger which logs messages to the debugger. +// The default logger which logs messages to the trace listeners. // // -------------------------------------------------------------------------------------------------------------------- @@ -45,14 +45,15 @@ public void Log(Type type, string text, [CallerMemberName] string callerName = n this.LogInternal(type, text, callerName, lineNumber); } - /// - /// Logs the specified message. - /// - /// The type calling the logger. - /// The message to log. - /// The property or method name calling the log. - /// The line number where the method is called. - private void LogInternal(Type type, string text, string callerName = null, int lineNumber = 0) + /// + /// Logs the specified message. + /// + /// The type calling the logger. + /// The message to log. + /// The property or method name calling the log. + /// The line number where the method is called. + [Conditional("TRACE")] + private void LogInternal(Type type, string text, string callerName = null, int lineNumber = 0) { string message = String.Format("{0} - {1}: {2} {3}:{4}", DateTime.UtcNow.ToString("s"), type.Name, callerName, lineNumber, text); From bf6bfd42e83c8a31192cfb2698dd0031e363357a Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Fri, 10 Nov 2017 11:05:53 +1100 Subject: [PATCH 019/113] Add stale bot --- .github/stale.yml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 .github/stale.yml diff --git a/.github/stale.yml b/.github/stale.yml new file mode 100644 index 000000000..3f68a4c11 --- /dev/null +++ b/.github/stale.yml @@ -0,0 +1,18 @@ +# Number of days of inactivity before an issue becomes stale +daysUntilStale: 60 +# Number of days of inactivity before a stale issue is closed +daysUntilClose: 7 +# Issues with these labels will never be considered stale +exemptLabels: + - pinned + - security + - bug +# Label to use when marking an issue as stale +staleLabel: no activity +# Comment to post when marking an issue as stale. Set to `false` to disable +markComment: > + This issue has been automatically marked as stale because it has not had + recent activity. It will be closed if no further activity occurs. Thank you + for your contributions. +# Comment to post when closing a stale issue. Set to `false` to disable +closeComment: false \ No newline at end of file From 1fa1eb1cbee8f558e26d44382ad744754be9d3ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Per=20Osb=C3=A4ck?= Date: Sat, 16 Dec 2017 15:04:22 +0100 Subject: [PATCH 020/113] update libwebp to 0.6.1 --- .../Resources/Unmanaged/x64/libwebp.dll | Bin 479744 -> 492032 bytes .../Resources/Unmanaged/x86/libwebp.dll | Bin 401408 -> 413696 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/src/ImageProcessor.Plugins.WebP/Resources/Unmanaged/x64/libwebp.dll b/src/ImageProcessor.Plugins.WebP/Resources/Unmanaged/x64/libwebp.dll index fa80381463c376ae1a957b5f59f9707aac8f86d1..049fb98f5f3b0796cc4e965d9d2437b073fcc14a 100644 GIT binary patch delta 156059 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 NuMPSJX*nu0{vWJ}><<6{ delta 147619 zcmeFadwh&X`#-+->~2IPx#JL`gkTXOga{$hX4$aIhB(tYM?*>-6WXF1l8|*<)M#%? z(W67FRcRCIl!HT@g;wj(mKI%2)u{-|{@ydQ8$tVg`ujf5^Zot)`1IB6+}Aa8&s=l5 z-q&0+b4$;xm;OQU;!aZ88?jw%SKs=5%*S`q+j{<{dG~0$p3}42u0VL@qoHlr@o;$C z&v-bZ?MFNu$NZSoOe8C+K<6)naq_He-%@hA6#%naA=T>T@Ic_Q( z?1{UkX&6$4_-Zt3^cu}^iL=kWNuQCLlKe`vixd@p?!K2Mt+GZlNMA|QiN&v}qzTa? zjH{$M*Ok8@el}Io%%oMdjcTT=UYbc2A~c)ynr!Kf2G3M$nfl@@sfgLO8l?r`VGZ>m z_1Z0X9t9(jW(dL$5LWmv4h6LwJu-D9c#|6AC!mr>Ls$Yjj6CDdC4eLvGdP6KCG{&W zb|>ggKLrJ8H9Evu=}AzKk-wZsACh}ZbQw}ZnyDKo+2~naB8m8zw$%3^KM$lc^r^l> zXCPC@z>vuO&iCkj{Up+09evqrCHXm*R;kp4+|Q+vm6rKm{}`#1qgMNvAZL6oJypp{ z?yRRxy_3k2FX;mBM*e;xf!RJi$T{*$y2CrRS{KwZYrniO24TiSUwK{|>RY*~?E$1T zXUv$Sk+W{#F+S2|b_8aw)N8EDev@L@9IsrBSMC_`D}Q#*lJuup{_JkX!zweI8y#`d z^02~^GHX(q!{~XumLPw22id3jSQKZx; zHJVnraVN9A%Ov~-uzbyC?LLz|DZ*@@5eHt7MZ4EzpV8K8pK3-JjW7}H5LQH$?hf5# z+S;djXcJ^!Iv1}6;k6L6a?n`=oXeA4F4q>;YvzpI(ZgOSIz%V*Ta|wFh@UU*?yJAO>R>L5rpCQEFONSP>5A=5W z{h4#!x1ki;&ZP7TQu+p&9ezhtmceYLi?`im2$etUp|e{JkfTR{v-+pBlYcYf+(^gx zN08i&bUA{|jr5>@>uS9>5=~^jSs7x8gM<;oA)ueUUHX(BkYmWeR9Y!uJ;{8NZVpI| zL`vR-7Ui(nzAdqeM&qmwp4pyZ#xrZpT2_aC%bR+QBT-@vpr1?!S3OMpm(tK`Yl4?f z)}z%AI?qnPm{d%LSIml1=A+R>9(TSvnO>|Gs@-+niw0EBl)YG|4j7o32D}yxRcHd1yY~9mtxK^-+Xb zNi{^Hqe6yXZk`iacQ=t5=akhOFG=U}(Lc_W~Z@S4@UOBTHjw4b8yX43_XpD*`qs(_!U{=0t-fLcFRD3h!&khva)f(+)U3?X@&XSQIVsRZvI~kv~ zKegUXIl%8S-bO!n0+cv+ETVmy4x`WA@}gfheVKIpl^R0dA<7b36nc{6ypgk_S!2nt zfD+7@G7P8GX;x*QS@{Oq%b7ly%_qf-k?ee)(hJR_NbF!*C+t14XbIgF_Ds;ML9Cpf z0q$4q9}i+l52w=WVd>JioGC4qOHv8-ZP{5GmeZ@{JjpvZ5$ZWVtqq;jCYauD^)^{M zo2n59$Tk~IYJG+Lwv_g1lO)xmxox_VfI0MGo696^61^PRgd|L&RojM<^zroBwlCE- zOkncPjz)3Tu-Op^%#L26PQM8`1#Q<$Hcgz((roZezT%g z?kb@f530n;EB9qQ@SX0z<*Qmy5{}7|{JxXUk85N*Y0Sv?b>7Wntt4l9qu_W9Za+u- z-HbBrbiMQH$C4&vXEqxaR{KmtTxw%JX^v#MQY$$}`SW^|V*KOntUM%&%)h)70iwq` z`&MSP(YJs?1hx#yczuv2b*R$ScPmPP5U)ta657I8xmK-NtObgZCXtPYEqL%YCv~M( zW4+#eP=09@N3lpzx#sht7os0)QsWlPvBcKRi@d_{2EXNm=Rswf9>mqxX5s<{+ z`J0`Kq<8lHnr=2Wt{T_Zobg+TSs5G+FiCVK%%sjfyy%aen`paT^2+h<(oxcq zi(WL|G?ysP(Zi<2+WJ3w<&20=l0s=LMq$!QLotf9D7`Qmi_FTm&Y56?4C3TT=gYCQ zv}-YG_A>pl+X?9dYBzsjTRo0dwO6!q(-`)LNn56zbbj&@N5pO>C7~^kI%!l2jPhr@ ztx5S-ZG4Dx9NuA(3L^F^-y!OdHK_ne;}9L{w6bXJ&nEi^hIGhdR$8Gk2A=kUgz*@% zh61Hmh*5h){wyKLOt)KFR>w$VoR*a|s&`+~ zb~K&eJ4*VV=J&ovR*s{a`^+GVM$uM%yOM6B==8ol$i0ztci)6+ACF}3`(3!n-tRHO zIb%9))NgReh!I4i91CM@bkdx3z^uJ)Rt`Jo4<{OJS=Jfb*J?ext|8soue+^=m1WQ? zfTO>1&8Y*8u~&`rm`ZeR?t#3Vr6lr7c{(-&MmSF)0!gbsN;(f5lTucy#7I zFv$7IQ;DBviJL3eSnAsqvL0Ksg|c)6FYU2pSZz9Vl0W@@un!HJ=uh7mnp`qG6a6iLMFSoAS#zKlYhMOy%T^EQvmZ(!CITkPgCbIggEXXtmM8h4)l(B%>) zH!}sFB^vv@YtTz?ojSe?>Dr!d8LyD7?P&bV z3rJWydg5h;tcs!|CafS*6n!v3A*pTY{D~%#98Zr;oI<{e1l5#|o3x;3U<8b8FVPc5 zd)Gv#jxpGx6YvH`Kj+O>ZZljk204EM12IDwCcTY>+IZ$ zE|^@e`lu)QRa?;=lRuYQ(uq^1NImFJQ<{<1X6iRJI(l9g41|4JEFl?8ct_@!9x!!? zOoIZ@FBMT-WD)h5C#pdgI%{f2(m$MTo%#m35l*eCu_Py)Dyh$r8;j_n)cNGLKOK}d zfIPd1Zc2+Ie{7~V(%v8`3v;rjwUkH)N6wei6D0C$6{>r+e^O3UR!=Wh%`=axdDOWA ze0QCXq8)V3`CvreMwO>K2EcGW>UzP-g>F+b^krC0< ze^vw;5KZG|4I}>1bj_>~;u}p1XGM~$?Q`zTsx5`++CR}dmrcwxiMh=?=wv$@VQUak z+7NBf#bnl&nZvG`qNm2CHiYpdRJwCj16Bn$mEEPM)6sy=wuO?6cJyOg3zF83p0b69 zCb!dTO!lcd_YmmCL@$Kl#d1rl36&b*uf>8&NQhfw=$b3|At z#3t)VWa%Oz7~aH3Q6w-<3I3np20A&8GF{G$J3*p;-Z3F-O%lFToqc{DfEpd0VfY3TV+tLI$L>@1OH@6f2ZG33HZ zI%RH@F6})pjr!RQ5~yBVuB&NVzZepjl%FIdEj7q*W=>~AK0IEC$6dw24GYu@K80V}3mZVI>ZakxgSg;i{l371yEKX0{ zgY)8;McHdUQKqmw&ERXn$TS>75=FNdigq7#e5oND zc^a|EHYeZ*!?qHAxTJ2o{>BWG!R##x;?Ze=7A)4IEgejTxHNsn-8h>L^IyLOrD8go z4AzYE&(W2O8&NB*Y_n?8f+{5E`Iw)2L(ZE>W?lz+aBd-_5?~HOT1x}d)4ou0i%1D{XE1KlhylVg@t+Q>2MA#eH;7wq0EwTUL< zqNE%}9PMQff`NQ*NyxKMvVD10z;(Dz8`~A=D&&L9Pnf1aCFZbW#tfIYyxVch6A28uKlUa@Yl&N<1Uf2-eS={r48gfl8pJr#!Sir9!MBXrIqDel2R<;KcnI@ z-Y(Fl)`Q(*qC4kzvso=+C2#_ITf_3@T%C{EVUe=wq9 zt=^*{+RigZ(|pA6j1FWf`qr!y?rF|u@|HiLOtZc)q@!MP<_1tSe_rh;C$;sjv;)@( zmj~e$KG@xvUhV~k5%Mub!Uqe?tmukn7QMQlZL6ym$0vq0NP=G6Z%*0|EtlY^JKt)D z!^z6koe3G{BY`>ThW!iL$I-gBQI00&O%tb7|$;GkU~QqYx-7Jim;RcBWA(r+BC znuV6?xr}CLTBZ!GG56#Q35H*3<;84jt^>~$bA9Gm+G1fpW0jiBYF!|Na&%=b%@9-8 zk+j~ARBIYjL(M9vS4)yd`D2w5L zraIG!ETvG0{S2X)Rd}r}`e8K2yhXWZK5;eUm**_X%(Cd&E}^@0h%rh~u0k_BIc;r- zc}n-03$BJ3?az6d0XDg7uLaI5`xk~SkSpd3!zKjsf==GZ+XaW_4U>H-kAgolwYdoi z@{zy>*m+9-rB#8e6PnEREwVK$w()QkW?hjpZ^Oc|D6Ryh&=U3lo--|kAPF&7EpoSe z$W_k#1_{{6Ew}QGN`H-#;B9f`I&(_?jYjwS}!5HlD@-(F{NjR{VA7gv+0yRu%>SA2*-)Rn9$Nc67=%$+?w` z8BQ!v@?RfVQA7SCWU9%aiH~}bsZl9DaZWi-Cu9e`^hnBoA*2`*4CCZH8xgO_SzBNi zdPV@8F&Ij(gkp3R{Nin_@=A-#G6NJgj4Vo=HwvZ!OKP|5%|TJrKp?5ivNOlMUWp3` zaL?y2am`FEZ?vYz-)dreq^yl{-lTGEy)6Kiuo$UB7<6Ocnw7W!)YbwAE^j@nqegbT zoaUZLVbOJ zr~<~qU(5f)Dhg8gDkdwSsV z4uYwX)dx#po=?Fg?<#i+&IPgXT9sQydwWI9<;&~tyIiwfLC_Mi<29HFjy!G|Jk-t7 zJ0?f~+Se->26h<`d6RsIpWyG67xZR)hwe@23cUI)>;~8cwrMb3W==NV z-lt6)mvL80^HY430&~H+5ObB{Qf#~UVCW?%-y(r7HBceUagpE{=%q6k6oi=Q%S)Tv zI(KpCDnqd;y7@5a=9jjKIXttP)uH=R6m-;C`*&Ccb+fL#j^T0C5{6~lLxo!rI=k^t zv+HQu^#n(!Ja@-yZ^49RYTTpLZ_PA$6h15i*IuT|o0hBcVB?U#(B>J?Q)fRdm^lC z|IA~^FzuVDNu45;dg>JFttRy7V{t4stU=W+js?8`oUSTF*iEI~M9Q=%)^~Dz%r)R_ zyxa?G!IQ3Utzp~w_>IiB6u1am6wu{rb9zj*kiI^&&a!9v@2dvO)d|&gVxJerFszMI zY@<3iVdK)G^o(|{6%UEdRpPuBKHDhUXppT1qMW@2kLKNpT=-LD+R29t8axjl&f z^mat(2EC;5XnAbL9(DzmE%4GpGmZRKk2YMD=KW$l_#EuR0@QOGbb)IAA4I1P z-JtWP`Kvw&-1IYswz3;15B7R?Kwr$Jvsc$8wz)a0SDU0-Tfb-Bc@R1VB|-qH|%=zp@j5%Slb@86r3Z>R6+PW}Qh* z#1gawDHy4obPST5MWDFDG%KGmWz$LLriT*U^?q&bQiNyT?;6qrNiySs%Qc!KrSsPTi^+G^zp}~eleB>3txV-Q-7tk*-!M#y!#1L^EMNH;d#AM6}37N@u zfSniaOBfFr7*>a$(~9+Ej}Ws`9o7Pjos6Gsa;|AK!im;KcY`4cD zWD;oqbW7l-*Txu=FE9E7YA

    ax==NL$FYA45QOV2##e^fpWm2ePGhwFl&Fk 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 diff --git a/src/ImageProcessor.Plugins.WebP/Resources/Unmanaged/x86/libwebp.dll b/src/ImageProcessor.Plugins.WebP/Resources/Unmanaged/x86/libwebp.dll index ed3248fd18f9d65c31af5b748b1b22b53b245c99..da6b62878d649b833b07fe6e17b51e32d196e0f1 100644 GIT binary patch delta 118719 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 m_!Lry^}>)z}7`eu*p@@xK5-W?X>) delta 108161 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

    ;|ax^pJtL>3;<^&eb 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 From 20aec575538fc48a3c0751f83fa6fbb006e60a09 Mon Sep 17 00:00:00 2001 From: Owen Blacker Date: Wed, 3 Jan 2018 12:16:39 +0000 Subject: [PATCH 021/113] Changed expiration to be passed as a `TimeSpan` (instead of `int`), per suggestion by @dlemstra in pull request #640 --- .../Caching/CacheIndexer.cs | 31 ++++++++++++++++--- .../Caching/ImageCacheBase.cs | 2 +- .../Configuration/ImageCacheSection.cs | 13 ++++---- .../ImageProcessorConfiguration.cs | 2 +- 4 files changed, 35 insertions(+), 13 deletions(-) diff --git a/src/ImageProcessor.Web/Caching/CacheIndexer.cs b/src/ImageProcessor.Web/Caching/CacheIndexer.cs index c4df31eb2..d88622f8d 100644 --- a/src/ImageProcessor.Web/Caching/CacheIndexer.cs +++ b/src/ImageProcessor.Web/Caching/CacheIndexer.cs @@ -56,21 +56,24 @@ public static bool Remove(string cachedPath) } ///

    - /// Adds a to the cache. + /// Adds a to the cache. /// /// /// The cached image to add. /// - /// - /// The number of minutes to cache the image, defaults to 1. + /// + /// A defining the sliding expiration duration, defaults to zero /// /// /// The value of the item to add or get. /// - public static CachedImage Add(CachedImage cachedImage, int expiry = 1) + public static CachedImage Add(CachedImage cachedImage, TimeSpan expiration = default(TimeSpan)) { + if (expiration == default(TimeSpan) || expiration == TimeSpan.Zero) + { expiration = new TimeSpan(0, 1, 0); } + // Add the CachedImage with a sliding expiration of `expiry` minutes. - CacheItemPolicy policy = new CacheItemPolicy { SlidingExpiration = new TimeSpan(0, expiry, 0) }; + CacheItemPolicy policy = new CacheItemPolicy { SlidingExpiration = expiration }; if (new Uri(cachedImage.Path).IsFile) { @@ -104,5 +107,23 @@ public static CachedImage Add(CachedImage cachedImage, int expiry = 1) return cachedImage; } + + /// + /// Adds a to the cache. + /// + /// + /// The cached image to add. + /// + /// + /// The number of minutes to cache the image, defaults to 1. + /// + /// + /// The value of the item to add or get. + /// + public static CachedImage Add(CachedImage cachedImage, int expiry) + { + return Add(cachedImage, new TimeSpan(0, expiry, 0)); + } + } } \ No newline at end of file diff --git a/src/ImageProcessor.Web/Caching/ImageCacheBase.cs b/src/ImageProcessor.Web/Caching/ImageCacheBase.cs index 14d330e39..22e95723c 100644 --- a/src/ImageProcessor.Web/Caching/ImageCacheBase.cs +++ b/src/ImageProcessor.Web/Caching/ImageCacheBase.cs @@ -85,7 +85,7 @@ protected ImageCacheBase(string requestPath, string fullPath, string querystring /// /// Gets or sets the expiry of the cached path to the cached image. /// - public int CachedPathExpiry { get; set; } + public TimeSpan CachedPathExpiry { get; set; } /// /// Gets or sets the maximum number of days to store the image. diff --git a/src/ImageProcessor.Web/Configuration/ImageCacheSection.cs b/src/ImageProcessor.Web/Configuration/ImageCacheSection.cs index 9e5151cd6..f82fc2630 100644 --- a/src/ImageProcessor.Web/Configuration/ImageCacheSection.cs +++ b/src/ImageProcessor.Web/Configuration/ImageCacheSection.cs @@ -10,10 +10,11 @@ namespace ImageProcessor.Web.Configuration { + using System; using System.Configuration; using System.IO; using System.Xml; - + using ImageProcessor.Web.Helpers; /// @@ -175,14 +176,14 @@ public int BrowserMaxDays /// Gets or sets the number of minutes to store the rewritten CDN path in the cache /// /// The number of minutes to store the rewritten CDN path in the cache - /// Defaults to 1 if not set. - [ConfigurationProperty("cachedRewritePathExpiry", DefaultValue = "1", IsRequired = false)] - [IntegerValidator(ExcludeRange = false, MinValue = 1, MaxValue = 20)] - public int CachedRewritePathExpiry + /// Defaults to 0:1:0 if not set. + [ConfigurationProperty("cachedRewritePathExpiry", DefaultValue = "0:1:0", IsRequired = false)] + [PositiveTimeSpanValidator] + public TimeSpan CachedRewritePathExpiry { get { - return (int)this["cachedRewritePathExpiry"]; + return (TimeSpan)this["cachedRewritePathExpiry"]; } set diff --git a/src/ImageProcessor.Web/Configuration/ImageProcessorConfiguration.cs b/src/ImageProcessor.Web/Configuration/ImageProcessorConfiguration.cs index 1e45c343d..9ea7a3810 100644 --- a/src/ImageProcessor.Web/Configuration/ImageProcessorConfiguration.cs +++ b/src/ImageProcessor.Web/Configuration/ImageProcessorConfiguration.cs @@ -122,7 +122,7 @@ private ImageProcessorConfiguration() /// /// Gets the image cache rewrite path cache expiry. /// - public int ImageCacheRewritePathExpiry { get; private set; } + public TimeSpan ImageCacheRewritePathExpiry { get; private set; } /// /// Gets a value indicating whether to preserve exif meta data. From cb2440bae05c93157d0e7f52d8888638811440dc Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Fri, 26 Jan 2018 12:01:17 +1100 Subject: [PATCH 022/113] Update README.md --- src/ImageProcessor.Plugins.WebP/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ImageProcessor.Plugins.WebP/README.md b/src/ImageProcessor.Plugins.WebP/README.md index 864e04f8b..7462a3be9 100644 --- a/src/ImageProcessor.Plugins.WebP/README.md +++ b/src/ImageProcessor.Plugins.WebP/README.md @@ -1,4 +1,4 @@ -#Build instructions for libwebp.dll +# Build instructions for libwebp.dll Download libwebp source via git or through http download. @@ -20,4 +20,4 @@ Review the following history logs for changes since the last release: http://git.chromium.org/gitweb/?p=webm/libwebp.git;a=history;f=src/webp/types.h;hb=HEAD http://git.chromium.org/gitweb/?p=webm/libwebp.git;a=history;f=src/webp/encode.h;hb=HEAD -http://git.chromium.org/gitweb/?p=webm/libwebp.git;a=history;f=src/webp/decode.h;hb=HEAD \ No newline at end of file +http://git.chromium.org/gitweb/?p=webm/libwebp.git;a=history;f=src/webp/decode.h;hb=HEAD From 4b84cd619ef020f0c434301217eb829b58dfd56a Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Fri, 26 Jan 2018 12:02:17 +1100 Subject: [PATCH 023/113] Bump VS build environment --- .gitignore | 3 +++ appveyor.yml | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index b1f865804..e2bfb4cc8 100644 --- a/.gitignore +++ b/.gitignore @@ -82,6 +82,9 @@ ipch/ *.psess *.vsp +# Rider +.idea/** + # ReSharper is a .NET coding add-in _ReSharper* diff --git a/appveyor.yml b/appveyor.yml index a5f92953d..32bb1211f 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -16,7 +16,7 @@ branches: #---------------------------------# # Operating system (build VM template) -os: Visual Studio 2015 +os: Visual Studio 2017 # this is how to allow failing jobs in the matrix matrix: From add99be04849caeaaa5e15d95e93be4b360c9c4a Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Tue, 30 Jan 2018 11:49:06 +1100 Subject: [PATCH 024/113] Initial test --- ImageProcessor.sln | 8 ++- appveyor.yml | 68 ++---------------- build/Build.bat | 18 ++++- build/build-new.ps1 | 87 ++++++++++++++++++++++++ src/ImageProcessor/ImageProcessor.csproj | 6 +- 5 files changed, 117 insertions(+), 70 deletions(-) create mode 100644 build/build-new.ps1 diff --git a/ImageProcessor.sln b/ImageProcessor.sln index 81e57a7b1..44905dd4c 100644 --- a/ImageProcessor.sln +++ b/ImageProcessor.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 14 -VisualStudioVersion = 14.0.25420.1 +# Visual Studio 15 +VisualStudioVersion = 15.0.27130.2026 MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Plugins", "Plugins", "{5368AF57-74ED-4499-BCCD-38BCB18C4629}" EndProject @@ -30,6 +30,7 @@ EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Build", "Build", "{4E1AB050-8CC4-4099-80AF-7FF2BFC000E9}" ProjectSection(SolutionItems) = preProject appveyor.yml = appveyor.yml + build\build-new.ps1 = build\build-new.ps1 build\Build.bat = build\Build.bat build\build.ps1 = build\build.ps1 build\build.xml = build\build.xml @@ -177,4 +178,7 @@ Global {63F86021-9430-43EE-9F59-A74C526A4AB3} = {19517DBA-58AA-4294-97BF-0D02902749B4} {CC88B6F8-0164-4E1E-BE17-A1C2D0597F2C} = {19517DBA-58AA-4294-97BF-0D02902749B4} EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {58041350-4AD6-4EED-98A1-6DF1698BFFFC} + EndGlobalSection EndGlobal diff --git a/appveyor.yml b/appveyor.yml index 32bb1211f..cfed53da9 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,67 +1,11 @@ -# http://www.appveyor.com/docs/appveyor-yml +image: Visual Studio 2017 -#---------------------------------# -# general configuration # -#---------------------------------# +# Prevent the double build when a branch has an active PR +skip_branch_with_pr: true -# branches to build -branches: - - # blacklist - except: - - gh-pages - -#---------------------------------# -# environment configuration # -#---------------------------------# - -# Operating system (build VM template) -os: Visual Studio 2017 - -# this is how to allow failing jobs in the matrix -matrix: - fast_finish: true # set this flag to immediately finish build once one of the jobs fails. - -environment: - COVERALLS_REPO_TOKEN: - secure: 1hvfHFO3qtGTcwB+AnCGYsn0az0j9MzAux5hee5CFeyRJ+lWut0LjnyqvsI/5Pfa - MYGET_API_KEY: - secure: fz0rUrt3B1HczUC1ZehwVsrFSWX9WZGDQoueDztLte9/+yQG+BBU7UrO+coE8lUf - MYGET_SOURCE: https://www.myget.org/F/imageprocessor/api/v2/package - -#---------------------------------# -# build configuration # -#---------------------------------# - -# to run your custom scripts instead of automatic MSBuild +# Update any submodules we add before_build: - - ps: Import-Module .\build\psake.psm1 + - git submodule -q update --init build_script: - - ps: Invoke-Psake .\build\build.ps1 -properties @{"BuildNumber"=$env:APPVEYOR_BUILD_NUMBER;"AppVeyor"=$env:APPVEYOR;"CoverallsRepoToken"=$env:COVERALLS_REPO_TOKEN} - - #---------------------------------# -# tests configuration # -#---------------------------------# - -# to disable automatic tests (they're included in the build process) -test: off - -#---------------------------------# -# artifacts configuration # -#---------------------------------# - -artifacts: - - path: build\_BuildOutput\NuGets\*.nupkg - -#---------------------------------# -# global handlers # -#---------------------------------# - -# on successful build -on_success: - - ps: Import-Module .\build\psake.psm1 - - ps: Invoke-Psake .\build\build.ps1 Publish-Myget -properties @{"MygetApiKey"=$env:MYGET_API_KEY;"MygetSource"=$env:MYGET_SOURCE;"AppVeyorPullRequestNumber"=$env:APPVEYOR_PULL_REQUEST_NUMBER} - - ps: Invoke-Psake .\build\build.ps1 Publish-Nuget -properties @{"NugetApiKey"=$env:APIKEY;"NugetSource"=$env:SOURCE;"AppVeyorPullRequestNumber"=$env:APPVEYOR_PULL_REQUEST_NUMBER} - on: - branch: master +- cmd: build.cmd \ No newline at end of file diff --git a/build/Build.bat b/build/Build.bat index d0526c7a7..4325a7226 100644 --- a/build/Build.bat +++ b/build/Build.bat @@ -1,5 +1,17 @@ -@echo off +@echo Off -powershell "Import-Module %~dp0\psake.psm1 ; Invoke-Psake %~dp0\build.ps1 ; exit $LASTEXITCODE" +PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& '.\build-new.ps1'" -pause \ No newline at end of file +if not "%errorlevel%"=="0" goto failure + +:success +ECHO successfully built project +REM exit 0 +goto end + +:failure +ECHO failed to build. +REM exit -1 +goto end + +:end \ No newline at end of file diff --git a/build/build-new.ps1 b/build/build-new.ps1 new file mode 100644 index 000000000..c7cf5e2ff --- /dev/null +++ b/build/build-new.ps1 @@ -0,0 +1,87 @@ +$buildPath = Resolve-Path "."; +$src_path = Join-Path $buildPath "..\src"; +$nuspecPath = Join-Path $buildPath "..\build\nuspecs" +$binPath = Join-Path $buildPath "_buildoutput" + +$pad = 6; + +# Build number. Appveyor build number. Set by CI and padded +$buildNumber = $env:APPVEYOR_BUILD_NUMBER.Trim().Trim('0').PadLeft($pad, "0"); + +# Our project objects +$imageprocessor = @{ + name = "ImageProcessor" + version = "2.5.6" + folder = Join-Path $buildPath "..\src\ImageProcessor" + output = Join-Path $binPath"ImageProcessor\lib\net45" + csproj = "ImageProcessor.csproj" + nuspec = "ImageProcessor.nuspec" +}; + +$projects = @($imageprocessor); + +# Calculates the correct version number based on the branch and build number +function Get-VersionNumber([string]$version) { + if ("$env:APPVEYOR_PULL_REQUEST_NUMBER" -ne "") { + Write-Debug "building a PR" + + $prNumber = "$env:APPVEYOR_PULL_REQUEST_NUMBER".Trim().Trim('0').PadLeft($pad - 1, "0"); + + # This is a PR + $version = "${version}-pr${prNumber}${buildNumber}"; + } + else { + Write-Debug "building a branch commit" + + # This is a general branch commit + $branch = $env:APPVEYOR_REPO_BRANCH + + if ("$branch" -eq "") { + $branch = ((git rev-parse --abbrev-ref HEAD) | Out-String).Trim() + + if ("$branch" -eq "") { + $branch = "unknown" + } + } + + $branch = $branch.Replace("/", "-").ToLower() + + if ($branch.ToLower() -eq "master") { + $version = "${version}.${buildNumber}"; + } + elseif ($branch.ToLower() -eq "develop") { + $branch = "dev" + $version = "${version}-dev${buildNumber}"; + } + else { + $version = "${version}-${branch}${buildNumber}"; + } + } +} + +# Updates the AssemblyInfo file with the specified version +# http://www.luisrocha.net/2009/11/setting-assembly-version-with-windows.html +function Update-AssemblyInfo ([string]$file, [string]$version) { + $assemblyVersionPattern = 'AssemblyVersion\("[0-9]+(\.([0-9]+|\*)){1,3}"\)' + $fileVersionPattern = 'AssemblyFileVersion\("[0-9]+(\.([0-9]+|\*)){1,3}"\)' + $assemblyVersion = 'AssemblyVersion("' + $version + '")'; + $fileVersion = 'AssemblyFileVersion("' + $version + '")'; + + (Get-Content $file) | ForEach-Object { + ForEach-Object {$_ -replace $assemblyVersionPattern, $assemblyVersion } | + ForEach-Object {$_ -replace $fileVersionPattern, $fileVersion } + } | Set-Content $file +} + +foreach ($project in $projects) { + + $version = Get-VersionNumber $project.version; + Write-Debug "Building project $($project.name) at version $($version)"; + Update-AssemblyInfo -file (Join-Path $project.folder "Properties\AssemblyInfo.cs") -version $version; + + $buildCommand = "msbuild $(Join-Path $project.folder $project.csproj) /t:Build /p:Warnings=true /p:Configuration=Release /p:PipelineDependsOnBuild=False /p:OutDir=${$project.output} /clp:WarningsOnly /clp:ErrorsOnly /clp:Summary /clp:PerformanceSummary /v:Normal /nologo"; + Write-Debug $buildCommand; + Invoke-Expression $buildCommand; + + #TODO: Nuget +} \ No newline at end of file diff --git a/src/ImageProcessor/ImageProcessor.csproj b/src/ImageProcessor/ImageProcessor.csproj index a284b7530..33d099303 100644 --- a/src/ImageProcessor/ImageProcessor.csproj +++ b/src/ImageProcessor/ImageProcessor.csproj @@ -9,7 +9,7 @@ Properties ImageProcessor ImageProcessor - v4.5 + v4.5.2 NET45 @@ -25,9 +25,9 @@ full false bin\Debug\ - TRACE;DEBUG;NET45 + TRACE;DEBUG;NET452 prompt - 4 + 2 bin\Debug\ImageProcessor.XML false true From 5364f8643300fb86d2222b7b0cf7484ffe4b603e Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Tue, 30 Jan 2018 11:51:36 +1100 Subject: [PATCH 025/113] Update file name --- build/{Build.bat => build.cmd} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename build/{Build.bat => build.cmd} (100%) diff --git a/build/Build.bat b/build/build.cmd similarity index 100% rename from build/Build.bat rename to build/build.cmd From 62b1cec706c35d539e139b6cabb537ab226ab326 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Tue, 30 Jan 2018 11:54:34 +1100 Subject: [PATCH 026/113] Fix path --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index cfed53da9..d70aba8ad 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -8,4 +8,4 @@ before_build: - git submodule -q update --init build_script: -- cmd: build.cmd \ No newline at end of file +- cmd: .\build\build.cmd \ No newline at end of file From 363d19308e3ec7aeb9204cee9063486c202acbf2 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Tue, 30 Jan 2018 12:12:00 +1100 Subject: [PATCH 027/113] Paths are troublesome --- build/build.cmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/build.cmd b/build/build.cmd index 4325a7226..e23bbdef4 100644 --- a/build/build.cmd +++ b/build/build.cmd @@ -1,6 +1,6 @@ @echo Off -PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& '.\build-new.ps1'" +PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& '.\build\build-new.ps1'" if not "%errorlevel%"=="0" goto failure From 82cc6d6e065c5311e21a9bb5ad049c2e9920c1e1 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Tue, 30 Jan 2018 12:51:28 +1100 Subject: [PATCH 028/113] Fix paths --- build/build-new.ps1 | 34 +++++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/build/build-new.ps1 b/build/build-new.ps1 index c7cf5e2ff..fb312acf0 100644 --- a/build/build-new.ps1 +++ b/build/build-new.ps1 @@ -1,19 +1,24 @@ +$appveyorBuildNumber = "$env:APPVEYOR_BUILD_NUMBER"; + $buildPath = Resolve-Path "."; -$src_path = Join-Path $buildPath "..\src"; -$nuspecPath = Join-Path $buildPath "..\build\nuspecs" +$srcPath = Join-Path $buildPath ".\src"; +$nuspecPath = Join-Path $buildPath ".\build\nuspecs" $binPath = Join-Path $buildPath "_buildoutput" +Write-Debug $buildPath; +Write-Debug $srcPath; + $pad = 6; # Build number. Appveyor build number. Set by CI and padded -$buildNumber = $env:APPVEYOR_BUILD_NUMBER.Trim().Trim('0').PadLeft($pad, "0"); +$buildNumber = $appveyorBuildNumber.Trim().Trim('0').PadLeft($pad, "0"); # Our project objects $imageprocessor = @{ name = "ImageProcessor" version = "2.5.6" - folder = Join-Path $buildPath "..\src\ImageProcessor" - output = Join-Path $binPath"ImageProcessor\lib\net45" + folder = Join-Path $buildPath "\src\ImageProcessor" + output = Join-Path $binPath "\ImageProcessor\lib\net45" csproj = "ImageProcessor.csproj" nuspec = "ImageProcessor.nuspec" }; @@ -23,7 +28,7 @@ $projects = @($imageprocessor); # Calculates the correct version number based on the branch and build number function Get-VersionNumber([string]$version) { if ("$env:APPVEYOR_PULL_REQUEST_NUMBER" -ne "") { - Write-Debug "building a PR" + Write-Host "building a PR" $prNumber = "$env:APPVEYOR_PULL_REQUEST_NUMBER".Trim().Trim('0').PadLeft($pad - 1, "0"); @@ -31,7 +36,7 @@ function Get-VersionNumber([string]$version) { $version = "${version}-pr${prNumber}${buildNumber}"; } else { - Write-Debug "building a branch commit" + Write-Host "building a branch commit"; # This is a general branch commit $branch = $env:APPVEYOR_REPO_BRANCH @@ -44,6 +49,8 @@ function Get-VersionNumber([string]$version) { } } + Write-Host $branch; + $branch = $branch.Replace("/", "-").ToLower() if ($branch.ToLower() -eq "master") { @@ -55,13 +62,18 @@ function Get-VersionNumber([string]$version) { } else { $version = "${version}-${branch}${buildNumber}"; - } + } + + return $version; } } # Updates the AssemblyInfo file with the specified version # http://www.luisrocha.net/2009/11/setting-assembly-version-with-windows.html function Update-AssemblyInfo ([string]$file, [string]$version) { + +Write-Host "Patching assembly to $($version)" + $assemblyVersionPattern = 'AssemblyVersion\("[0-9]+(\.([0-9]+|\*)){1,3}"\)' $fileVersionPattern = 'AssemblyFileVersion\("[0-9]+(\.([0-9]+|\*)){1,3}"\)' $assemblyVersion = 'AssemblyVersion("' + $version + '")'; @@ -76,11 +88,11 @@ function Update-AssemblyInfo ([string]$file, [string]$version) { foreach ($project in $projects) { $version = Get-VersionNumber $project.version; - Write-Debug "Building project $($project.name) at version $($version)"; + Write-Host "Building project $($project.name) at version $($version)"; Update-AssemblyInfo -file (Join-Path $project.folder "Properties\AssemblyInfo.cs") -version $version; - $buildCommand = "msbuild $(Join-Path $project.folder $project.csproj) /t:Build /p:Warnings=true /p:Configuration=Release /p:PipelineDependsOnBuild=False /p:OutDir=${$project.output} /clp:WarningsOnly /clp:ErrorsOnly /clp:Summary /clp:PerformanceSummary /v:Normal /nologo"; - Write-Debug $buildCommand; + $buildCommand = "msbuild $(Join-Path $project.folder $project.csproj) /t:Build /p:Warnings=true /p:Configuration=Release /p:PipelineDependsOnBuild=False /p:OutDir=$($project.output) /clp:WarningsOnly /clp:ErrorsOnly /clp:Summary /clp:PerformanceSummary /v:Normal /nologo"; + Write-Host $buildCommand; Invoke-Expression $buildCommand; #TODO: Nuget From 37455058cc2b201ae7aa41c21190882a909176ee Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Tue, 30 Jan 2018 13:07:17 +1100 Subject: [PATCH 029/113] Simplify build number --- build/build-new.ps1 | 72 +++++++++++---------------------------------- 1 file changed, 17 insertions(+), 55 deletions(-) diff --git a/build/build-new.ps1 b/build/build-new.ps1 index fb312acf0..251b35364 100644 --- a/build/build-new.ps1 +++ b/build/build-new.ps1 @@ -8,66 +8,18 @@ $binPath = Join-Path $buildPath "_buildoutput" Write-Debug $buildPath; Write-Debug $srcPath; -$pad = 6; - -# Build number. Appveyor build number. Set by CI and padded -$buildNumber = $appveyorBuildNumber.Trim().Trim('0').PadLeft($pad, "0"); - # Our project objects $imageprocessor = @{ name = "ImageProcessor" - version = "2.5.6" + version = "2.5.6.${appveyorBuildNumber}" folder = Join-Path $buildPath "\src\ImageProcessor" - output = Join-Path $binPath "\ImageProcessor\lib\net45" + output = Join-Path $binPath "\ImageProcessor\lib\net452" csproj = "ImageProcessor.csproj" nuspec = "ImageProcessor.nuspec" }; $projects = @($imageprocessor); -# Calculates the correct version number based on the branch and build number -function Get-VersionNumber([string]$version) { - if ("$env:APPVEYOR_PULL_REQUEST_NUMBER" -ne "") { - Write-Host "building a PR" - - $prNumber = "$env:APPVEYOR_PULL_REQUEST_NUMBER".Trim().Trim('0').PadLeft($pad - 1, "0"); - - # This is a PR - $version = "${version}-pr${prNumber}${buildNumber}"; - } - else { - Write-Host "building a branch commit"; - - # This is a general branch commit - $branch = $env:APPVEYOR_REPO_BRANCH - - if ("$branch" -eq "") { - $branch = ((git rev-parse --abbrev-ref HEAD) | Out-String).Trim() - - if ("$branch" -eq "") { - $branch = "unknown" - } - } - - Write-Host $branch; - - $branch = $branch.Replace("/", "-").ToLower() - - if ($branch.ToLower() -eq "master") { - $version = "${version}.${buildNumber}"; - } - elseif ($branch.ToLower() -eq "develop") { - $branch = "dev" - $version = "${version}-dev${buildNumber}"; - } - else { - $version = "${version}-${branch}${buildNumber}"; - } - - return $version; - } -} - # Updates the AssemblyInfo file with the specified version # http://www.luisrocha.net/2009/11/setting-assembly-version-with-windows.html function Update-AssemblyInfo ([string]$file, [string]$version) { @@ -87,11 +39,21 @@ Write-Host "Patching assembly to $($version)" foreach ($project in $projects) { - $version = Get-VersionNumber $project.version; - Write-Host "Building project $($project.name) at version $($version)"; - Update-AssemblyInfo -file (Join-Path $project.folder "Properties\AssemblyInfo.cs") -version $version; - - $buildCommand = "msbuild $(Join-Path $project.folder $project.csproj) /t:Build /p:Warnings=true /p:Configuration=Release /p:PipelineDependsOnBuild=False /p:OutDir=$($project.output) /clp:WarningsOnly /clp:ErrorsOnly /clp:Summary /clp:PerformanceSummary /v:Normal /nologo"; + Write-Host "Building project $($project.name) at version $($project.version)"; + Update-AssemblyInfo -file (Join-Path $project.folder "Properties\AssemblyInfo.cs") -version $project.version; + + $buildCommand = "msbuild $(Join-Path $project.folder $project.csproj) + /t:Build + /p:Warnings=true + /p:Configuration=Release + /p:Platform=AnyCPU + /p:PipelineDependsOnBuild=False + /p:OutDir=$($project.output) + /clp:WarningsOnly + /clp:ErrorsOnly + /clp:Summary + /clp:PerformanceSummary + /v:Normal /nologo"; Write-Host $buildCommand; Invoke-Expression $buildCommand; From 377a5281013fc0cb27e76e2fb748f05dbf6216c9 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Tue, 30 Jan 2018 13:14:37 +1100 Subject: [PATCH 030/113] try no line breaks --- build/build-new.ps1 | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/build/build-new.ps1 b/build/build-new.ps1 index 251b35364..8d7a990e4 100644 --- a/build/build-new.ps1 +++ b/build/build-new.ps1 @@ -24,7 +24,7 @@ $projects = @($imageprocessor); # http://www.luisrocha.net/2009/11/setting-assembly-version-with-windows.html function Update-AssemblyInfo ([string]$file, [string]$version) { -Write-Host "Patching assembly to $($version)" + Write-Host "Patching assembly to $($version)" $assemblyVersionPattern = 'AssemblyVersion\("[0-9]+(\.([0-9]+|\*)){1,3}"\)' $fileVersionPattern = 'AssemblyFileVersion\("[0-9]+(\.([0-9]+|\*)){1,3}"\)' @@ -42,18 +42,7 @@ foreach ($project in $projects) { Write-Host "Building project $($project.name) at version $($project.version)"; Update-AssemblyInfo -file (Join-Path $project.folder "Properties\AssemblyInfo.cs") -version $project.version; - $buildCommand = "msbuild $(Join-Path $project.folder $project.csproj) - /t:Build - /p:Warnings=true - /p:Configuration=Release - /p:Platform=AnyCPU - /p:PipelineDependsOnBuild=False - /p:OutDir=$($project.output) - /clp:WarningsOnly - /clp:ErrorsOnly - /clp:Summary - /clp:PerformanceSummary - /v:Normal /nologo"; + $buildCommand = "msbuild $(Join-Path $project.folder $project.csproj) /t:Build /p:Warnings=true /p:Configuration=Release /p:Platform=AnyCPU /p:PipelineDependsOnBuild=False /p:OutDir=$($project.output) /clp:WarningsOnly /clp:ErrorsOnly /clp:Summary /clp:PerformanceSummary /v:Normal /nologo"; Write-Host $buildCommand; Invoke-Expression $buildCommand; From ba1c3a62972e8dc06b51cdcd007bda92e6cb27c1 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Tue, 30 Jan 2018 13:31:46 +1100 Subject: [PATCH 031/113] try nuget --- build/build-new.ps1 | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/build/build-new.ps1 b/build/build-new.ps1 index 8d7a990e4..0d4480a4b 100644 --- a/build/build-new.ps1 +++ b/build/build-new.ps1 @@ -1,9 +1,9 @@ -$appveyorBuildNumber = "$env:APPVEYOR_BUILD_NUMBER"; - +$buildNumber = "$env:APPVEYOR_BUILD_NUMBER"; $buildPath = Resolve-Path "."; $srcPath = Join-Path $buildPath ".\src"; -$nuspecPath = Join-Path $buildPath ".\build\nuspecs" -$binPath = Join-Path $buildPath "_buildoutput" +$binPath = Join-Path $buildPath "_buildoutput"; +$nuspecsPath = Join-Path $buildPath ".\build\nuspecs"; +$nugetOutput = Join-Path $BIN_PATH "NuGets"; Write-Debug $buildPath; Write-Debug $srcPath; @@ -11,11 +11,11 @@ Write-Debug $srcPath; # Our project objects $imageprocessor = @{ name = "ImageProcessor" - version = "2.5.6.${appveyorBuildNumber}" + version = "2.5.6.${buildNumber}" folder = Join-Path $buildPath "\src\ImageProcessor" output = Join-Path $binPath "\ImageProcessor\lib\net452" csproj = "ImageProcessor.csproj" - nuspec = "ImageProcessor.nuspec" + nuspec = Join-Path $nuspecsPath "\ImageProcessor.nuspec" }; $projects = @($imageprocessor); @@ -23,8 +23,6 @@ $projects = @($imageprocessor); # Updates the AssemblyInfo file with the specified version # http://www.luisrocha.net/2009/11/setting-assembly-version-with-windows.html function Update-AssemblyInfo ([string]$file, [string]$version) { - - Write-Host "Patching assembly to $($version)" $assemblyVersionPattern = 'AssemblyVersion\("[0-9]+(\.([0-9]+|\*)){1,3}"\)' $fileVersionPattern = 'AssemblyFileVersion\("[0-9]+(\.([0-9]+|\*)){1,3}"\)' @@ -37,6 +35,7 @@ function Update-AssemblyInfo ([string]$file, [string]$version) { } | Set-Content $file } +# Loop through our projects, build and pack foreach ($project in $projects) { Write-Host "Building project $($project.name) at version $($project.version)"; @@ -46,5 +45,8 @@ foreach ($project in $projects) { Write-Host $buildCommand; Invoke-Expression $buildCommand; - #TODO: Nuget + $packCommand = "nuget pack $($project.nuspec) -OutputDirectory $($nugetOutput) -Version $($project.version)"; + Write-Host $packCommand; + Invoke-Expression $packCommand; + # $NUGET_EXE Pack $nuspec_local_path -OutputDirectory $NUGET_OUTPUT -Version "$($_.version)$($_.prerelease)" } \ No newline at end of file From a05e51fbeb84a25d3a0d705bde378e530562ed63 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Tue, 30 Jan 2018 13:34:23 +1100 Subject: [PATCH 032/113] Fix an output paths --- build/build-new.ps1 | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/build/build-new.ps1 b/build/build-new.ps1 index 0d4480a4b..b155b1422 100644 --- a/build/build-new.ps1 +++ b/build/build-new.ps1 @@ -1,12 +1,13 @@ $buildNumber = "$env:APPVEYOR_BUILD_NUMBER"; $buildPath = Resolve-Path "."; -$srcPath = Join-Path $buildPath ".\src"; -$binPath = Join-Path $buildPath "_buildoutput"; +$binPath = Join-Path $buildPath ".\_buildoutput"; $nuspecsPath = Join-Path $buildPath ".\build\nuspecs"; -$nugetOutput = Join-Path $BIN_PATH "NuGets"; +$nugetOutput = Join-Path $binPath ".\NuGets"; Write-Debug $buildPath; -Write-Debug $srcPath; +Write-Debug $binPath; +Write-Debug $nuspecsPath; +Write-Debug $nugetOutput; # Our project objects $imageprocessor = @{ From 4f63d9365118ca1573ee264a42afd773ac773c17 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Tue, 30 Jan 2018 13:45:52 +1100 Subject: [PATCH 033/113] Update nuspec --- appveyor.yml | 5 ++- build/NuSpecs/ImageProcessor.nuspec | 58 ++++++++++++++--------------- 2 files changed, 32 insertions(+), 31 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index d70aba8ad..d2f1e9fc5 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -8,4 +8,7 @@ before_build: - git submodule -q update --init build_script: -- cmd: .\build\build.cmd \ No newline at end of file +- cmd: .\build\build.cmd + +artifacts: +- path: /.*\.nupkg/ \ No newline at end of file diff --git a/build/NuSpecs/ImageProcessor.nuspec b/build/NuSpecs/ImageProcessor.nuspec index d8c514609..02531031d 100644 --- a/build/NuSpecs/ImageProcessor.nuspec +++ b/build/NuSpecs/ImageProcessor.nuspec @@ -1,33 +1,31 @@  - - ImageProcessor - $version$ - ImageProcessor - James Jackson-South - James Jackson-South - http://imageprocessor.org - https://raw.githubusercontent.com/JimBobSquarePants/ImageProcessor/develop/build/icons/imageprocessor-logo-128.png - false - - Image Processor is an easy to use and extend processing library written in C#. Its fluent API makes common imaging tasks very simple to perform. - - Methods include; Resize, Rotate, Rounded Corners, Flip, Crop, Watermark, Filter, Saturation, Brightness, Contrast, Quality, Format, Vignette, Gaussian Blur, Gaussian Sharpen, and Transparency. - - If you use ImageProcessor please get in touch on my twitter @james_m_south. - - Feedback is always welcome. - - A library for manipulating image files written in C#. - - James Jackson-South - en-GB - Image Resize Crop Rotate Quality Watermark Gif Jpg Jpeg Bitmap Png Tiff Fluent Animated EXIF - - - - - - - + + ImageProcessor + $version$ + ImageProcessor + James Jackson-South + James Jackson-South + http://imageprocessor.org + https://raw.githubusercontent.com/JimBobSquarePants/ImageProcessor/develop/build/icons/imageprocessor-logo-128.png + false + + Image Processor is an easy to use and extend processing library written in C#. Its fluent API makes common imaging tasks very simple to perform. + + Methods include; Resize, Rotate, Rounded Corners, Flip, Crop, Watermark, Filter, Saturation, Brightness, Contrast, Quality, Format, Vignette, Gaussian Blur, Gaussian Sharpen, and Transparency. + + If you use ImageProcessor please get in touch on my twitter @james_m_south. + + Feedback is always welcome. + + A fluent wrapper around System.Drawing for the processing of image files. + + James Jackson-South + en-GB + Image Resize Crop Rotate Quality Watermark Gif Jpg Jpeg Bitmap Png Tiff Fluent Animated EXIF + + + + + \ No newline at end of file From 0d674190a5c265e8bc41c628a7486f494c38ce8a Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Tue, 30 Jan 2018 13:52:21 +1100 Subject: [PATCH 034/113] align nuget paths --- build/build-new.ps1 | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/build/build-new.ps1 b/build/build-new.ps1 index b155b1422..499c09208 100644 --- a/build/build-new.ps1 +++ b/build/build-new.ps1 @@ -1,8 +1,8 @@ $buildNumber = "$env:APPVEYOR_BUILD_NUMBER"; $buildPath = Resolve-Path "."; -$binPath = Join-Path $buildPath ".\_buildoutput"; -$nuspecsPath = Join-Path $buildPath ".\build\nuspecs"; -$nugetOutput = Join-Path $binPath ".\NuGets"; +$binPath = Join-Path $buildPath "build\_BuildOutput"; +$nuspecsPath = Join-Path $buildPath "build\nuspecs"; +$nugetOutput = Join-Path $binPath "NuGets"; Write-Debug $buildPath; Write-Debug $binPath; @@ -13,10 +13,10 @@ Write-Debug $nugetOutput; $imageprocessor = @{ name = "ImageProcessor" version = "2.5.6.${buildNumber}" - folder = Join-Path $buildPath "\src\ImageProcessor" - output = Join-Path $binPath "\ImageProcessor\lib\net452" + folder = Join-Path $buildPath "src\ImageProcessor" + output = Join-Path $binPath "ImageProcessor\lib\net452" csproj = "ImageProcessor.csproj" - nuspec = Join-Path $nuspecsPath "\ImageProcessor.nuspec" + nuspec = Join-Path $nuspecsPath "ImageProcessor.nuspec" }; $projects = @($imageprocessor); @@ -46,8 +46,8 @@ foreach ($project in $projects) { Write-Host $buildCommand; Invoke-Expression $buildCommand; - $packCommand = "nuget pack $($project.nuspec) -OutputDirectory $($nugetOutput) -Version $($project.version)"; - Write-Host $packCommand; + $packCommand = "nuget pack $($project.nuspec) -OutputDirectory $($nugetOutput) -Version $($project.version)"; + Write-Host $packCommand; Invoke-Expression $packCommand; - # $NUGET_EXE Pack $nuspec_local_path -OutputDirectory $NUGET_OUTPUT -Version "$($_.version)$($_.prerelease)" + # $NUGET_EXE Pack $nuspec_local_path -OutputDirectory $NUGET_OUTPUT -Version "$($_.version)$($_.prerelease)" } \ No newline at end of file From 2e00ba1c554d3efc74bebfa83a801b876f9486e6 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Tue, 30 Jan 2018 13:57:53 +1100 Subject: [PATCH 035/113] Update artifact path --- appveyor.yml | 2 +- build/build-new.ps1 | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index d2f1e9fc5..ca08f74b0 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -11,4 +11,4 @@ build_script: - cmd: .\build\build.cmd artifacts: -- path: /.*\.nupkg/ \ No newline at end of file +- path: '**\*.nupkg' \ No newline at end of file diff --git a/build/build-new.ps1 b/build/build-new.ps1 index 499c09208..e489f1000 100644 --- a/build/build-new.ps1 +++ b/build/build-new.ps1 @@ -49,5 +49,4 @@ foreach ($project in $projects) { $packCommand = "nuget pack $($project.nuspec) -OutputDirectory $($nugetOutput) -Version $($project.version)"; Write-Host $packCommand; Invoke-Expression $packCommand; - # $NUGET_EXE Pack $nuspec_local_path -OutputDirectory $NUGET_OUTPUT -Version "$($_.version)$($_.prerelease)" } \ No newline at end of file From b0b308e8309ea7bec692b7eb190dd9ad3fb8b144 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Tue, 30 Jan 2018 14:43:49 +1100 Subject: [PATCH 036/113] Migrate to 4.5.2 and update tests --- ImageProcessor.sln | 7 +- appveyor.yml | 3 +- .../ImageProcessor.Plugins.Cair.nuspec | 14 +- .../ImageProcessor.Plugins.WebP.nuspec | 12 +- .../NuSpecs/ImageProcessor.Web.Config.nuspec | 10 +- ...rocessor.Web.Plugins.AzureBlobCache.nuspec | 14 +- .../ImageProcessor.Web.PostProcessor.nuspec | 12 +- build/NuSpecs/ImageProcessor.Web.nuspec | 22 +- build/build-new.ps1 | 52 --- build/build.cmd | 2 +- build/build.ps1 | 307 +++--------------- .../ImageProcessor.Plugins.Cair.csproj | 4 +- .../ImageProcessor.Plugins.WebP.csproj | 4 +- ...Processor.Web.Plugins.AmazonS3Cache.csproj | 3 +- ...rocessor.Web.Plugins.AzureBlobCache.csproj | 3 +- .../app.config | 20 +- ...Processor.Web.Plugins.PostProcessor.csproj | 2 +- .../ImageProcessor.Web.csproj | 3 +- .../Exceptions/Logging/DefaultLogger.cs | 4 +- .../Common/Exceptions/Logging/ILogger.cs | 4 +- .../ImageProcessorBootstrapper.cs | 8 - src/ImageProcessor/ImageProcessor.csproj | 99 +----- tests/ImageProcessor.Playground/App.config | 2 +- .../ImageProcessor.Playground.csproj | 4 +- .../ImageProcessor.UnitTests.csproj | 13 +- .../Properties/AssemblyInfo.cs | 4 +- .../ImageProcessor.UnitTests/packages.config | 6 +- .../ImageProcessor.Web.UnitTests.csproj | 16 +- .../packages.config | 16 +- 29 files changed, 166 insertions(+), 504 deletions(-) delete mode 100644 build/build-new.ps1 diff --git a/ImageProcessor.sln b/ImageProcessor.sln index 44905dd4c..ecf58534d 100644 --- a/ImageProcessor.sln +++ b/ImageProcessor.sln @@ -30,8 +30,7 @@ EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Build", "Build", "{4E1AB050-8CC4-4099-80AF-7FF2BFC000E9}" ProjectSection(SolutionItems) = preProject appveyor.yml = appveyor.yml - build\build-new.ps1 = build\build-new.ps1 - build\Build.bat = build\Build.bat + build\build.cmd = build\build.cmd build\build.ps1 = build\build.ps1 build\build.xml = build\build.xml build\coverage.bat = build\coverage.bat @@ -90,8 +89,8 @@ Global Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {3B5DD734-FB7A-487D-8CE6-55E7AF9AEA7E}.All|Any CPU.ActiveCfg = All|Any CPU - {3B5DD734-FB7A-487D-8CE6-55E7AF9AEA7E}.All|Any CPU.Build.0 = All|Any CPU + {3B5DD734-FB7A-487D-8CE6-55E7AF9AEA7E}.All|Any CPU.ActiveCfg = Release|Any CPU + {3B5DD734-FB7A-487D-8CE6-55E7AF9AEA7E}.All|Any CPU.Build.0 = Release|Any CPU {3B5DD734-FB7A-487D-8CE6-55E7AF9AEA7E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3B5DD734-FB7A-487D-8CE6-55E7AF9AEA7E}.Debug|Any CPU.Build.0 = Debug|Any CPU {3B5DD734-FB7A-487D-8CE6-55E7AF9AEA7E}.Release|Any CPU.ActiveCfg = Release|Any CPU diff --git a/appveyor.yml b/appveyor.yml index ca08f74b0..2dc7dde8a 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -3,10 +3,11 @@ image: Visual Studio 2017 # Prevent the double build when a branch has an active PR skip_branch_with_pr: true -# Update any submodules we add +# Update any submodules we might add before_build: - git submodule -q update --init +# Custom build script build_script: - cmd: .\build\build.cmd diff --git a/build/NuSpecs/ImageProcessor.Plugins.Cair.nuspec b/build/NuSpecs/ImageProcessor.Plugins.Cair.nuspec index 59354da00..d4df32b28 100644 --- a/build/NuSpecs/ImageProcessor.Plugins.Cair.nuspec +++ b/build/NuSpecs/ImageProcessor.Plugins.Cair.nuspec @@ -9,23 +9,25 @@ http://imageprocessor.org https://raw.githubusercontent.com/JimBobSquarePants/ImageProcessor/develop/build/icons/imageprocessor-logo-128.png false - Adds support to ImageProcessor for Content Aware Image Resizing. + + Adds support to ImageProcessor for Content Aware Image Resizing. -If you use ImageProcessor please get in touch via my twitter @james_m_south + If you use ImageProcessor please get in touch via my twitter @james_m_south -Feedback is always welcome + Feedback is always welcome + Adds support to ImageProcessor for Content Aware Image Resizing. James Jackson-South en-GB Image Resize Crop Rotate Quality Watermark Gif Jpg Jpeg Bitmap Png Tiff Cair Seam Carving - - + + - + \ No newline at end of file diff --git a/build/NuSpecs/ImageProcessor.Plugins.WebP.nuspec b/build/NuSpecs/ImageProcessor.Plugins.WebP.nuspec index 6e19733a9..11d650e11 100644 --- a/build/NuSpecs/ImageProcessor.Plugins.WebP.nuspec +++ b/build/NuSpecs/ImageProcessor.Plugins.WebP.nuspec @@ -9,24 +9,26 @@ http://imageprocessor.org https://raw.githubusercontent.com/JimBobSquarePants/ImageProcessor/develop/build/icons/imageprocessor-logo-128.png false - Adds support to ImageProcessor for the WebP image format. + + Adds support to ImageProcessor for the WebP image format. -If you use ImageProcessor please get in touch via my twitter @james_m_south + If you use ImageProcessor please get in touch via my twitter @james_m_south -Feedback is always welcome + Feedback is always welcome + Adds support to ImageProcessor and ImageProcessor.Web for the WebP image format. James Jackson-South en-GB Image Resize Crop Rotate Quality Watermark Gif Jpg Jpeg Bitmap Png Tiff WebP - + - + \ No newline at end of file diff --git a/build/NuSpecs/ImageProcessor.Web.Config.nuspec b/build/NuSpecs/ImageProcessor.Web.Config.nuspec index c3890a2ff..c02c48582 100644 --- a/build/NuSpecs/ImageProcessor.Web.Config.nuspec +++ b/build/NuSpecs/ImageProcessor.Web.Config.nuspec @@ -9,18 +9,20 @@ http://imageprocessor.org https://raw.githubusercontent.com/JimBobSquarePants/ImageProcessor/develop/build/icons/imageprocessor-logo-128.png false - Adds configuration to your ImageProcessor.Web solution to allow you to override the default settings. + + Adds configuration to your ImageProcessor.Web solution to allow you to override the default settings. -If you use ImageProcessor.Web please get in touch via my twitter @james_m_south + If you use ImageProcessor.Web please get in touch via my twitter @james_m_south -Feedback is always welcome + Feedback is always welcome + ImageProcessor.Web configuration settings for ASP.NET websites. James Jackson-South en-GB Image Resize Crop Rotate Quality Watermark Gif Jpg Jpeg Bitmap Png Tiff ASP Cache EXIF - + diff --git a/build/NuSpecs/ImageProcessor.Web.Plugins.AzureBlobCache.nuspec b/build/NuSpecs/ImageProcessor.Web.Plugins.AzureBlobCache.nuspec index 3c27e2dfa..53aef7362 100644 --- a/build/NuSpecs/ImageProcessor.Web.Plugins.AzureBlobCache.nuspec +++ b/build/NuSpecs/ImageProcessor.Web.Plugins.AzureBlobCache.nuspec @@ -9,19 +9,21 @@ http://imageprocessor.org https://raw.githubusercontent.com/JimBobSquarePants/ImageProcessor/develop/build/icons/imageprocessor-logo-128.png false - Adds a self cleaning cache to ImageProcessor.Web that uses Azure Blob Containers to store processed images. + + Adds a self cleaning cache to ImageProcessor.Web that uses Azure Blob Containers to store processed images. -If you use ImageProcessor.Web please get in touch via my twitter @james_m_south + If you use ImageProcessor.Web please get in touch via my twitter @james_m_south -Feedback is always welcome + Feedback is always welcome + ImageProcessor.Web AzureBlobCache for ASP.NET websites. James Jackson-South en-GB Image Resize Crop Rotate Quality Watermark Gif Jpg Jpeg Bitmap Png Tiff Azure Cache Asp - - + + @@ -36,6 +38,6 @@ Feedback is always welcome - + \ No newline at end of file diff --git a/build/NuSpecs/ImageProcessor.Web.PostProcessor.nuspec b/build/NuSpecs/ImageProcessor.Web.PostProcessor.nuspec index c5f834c09..49ad7bc5c 100644 --- a/build/NuSpecs/ImageProcessor.Web.PostProcessor.nuspec +++ b/build/NuSpecs/ImageProcessor.Web.PostProcessor.nuspec @@ -9,11 +9,13 @@ http://imageprocessor.org https://raw.githubusercontent.com/JimBobSquarePants/ImageProcessor/develop/build/icons/imageprocessor-logo-128.png false - An extension for ImageProcessor.Web that applies various image compression tools to further optimize cached .png, .gif, and .jpg images. + + An extension for ImageProcessor.Web that applies various image compression tools to further optimize cached .png, .gif, and .jpg images. -If you use ImageProcessor please get in touch via my twitter @james_m_south + If you use ImageProcessor please get in touch via my twitter @james_m_south -Feedback is always welcome + Feedback is always welcome + ImageProcessor.Web PostProcessor for ASP.NET websites. James Jackson-South @@ -21,12 +23,12 @@ Feedback is always welcome Image Resize Crop Rotate Quality Watermark Gif Jpg Jpeg Bitmap Png Tiff ASP Cache EXIF - + - + \ No newline at end of file diff --git a/build/NuSpecs/ImageProcessor.Web.nuspec b/build/NuSpecs/ImageProcessor.Web.nuspec index 6c9f81cc4..d7c4eb28f 100644 --- a/build/NuSpecs/ImageProcessor.Web.nuspec +++ b/build/NuSpecs/ImageProcessor.Web.nuspec @@ -9,20 +9,22 @@ http://imageprocessor.org https://raw.githubusercontent.com/JimBobSquarePants/ImageProcessor/develop/build/icons/imageprocessor-logo-128.png false - ImageProcessor.Web adds a configurable HttpModule to your website which allows on-the-fly processing of image files. The module also comes with a file and browser based cache that can handle millions of images, increasing your processing output and saving precious server memory. - -Methods include: Resize, Rotate, Rounded Corners, Flip, Crop, Watermark, Filter, Saturation, Brightness, Contrast, Quality, Format, Vignette, Gaussian Blur, Gaussian Sharpen, and Transparency. - -If you use ImageProcessor.Web please get in touch via my twitter @james_m_south - -Feedback is always welcome + + ImageProcessor.Web adds a configurable HttpModule to your website which allows on-the-fly processing of image files. The module also comes with a file and browser based cache that can handle millions of images, increasing your processing output and saving precious server memory. + + Methods include: Resize, Rotate, Rounded Corners, Flip, Crop, Watermark, Filter, Saturation, Brightness, Contrast, Quality, Format, Vignette, Gaussian Blur, Gaussian Sharpen, and Transparency. + + If you use ImageProcessor.Web please get in touch via my twitter @james_m_south + + Feedback is always welcome + An extension to ImageProcessor that allows on-the-fly processing of image files in an ASP.NET website James Jackson-South en-GB Image Resize Crop Rotate Quality Watermark Gif Jpg Jpeg Bitmap Png Tiff ASP Cache EXIF - + @@ -30,7 +32,7 @@ Feedback is always welcome - - + + diff --git a/build/build-new.ps1 b/build/build-new.ps1 deleted file mode 100644 index e489f1000..000000000 --- a/build/build-new.ps1 +++ /dev/null @@ -1,52 +0,0 @@ -$buildNumber = "$env:APPVEYOR_BUILD_NUMBER"; -$buildPath = Resolve-Path "."; -$binPath = Join-Path $buildPath "build\_BuildOutput"; -$nuspecsPath = Join-Path $buildPath "build\nuspecs"; -$nugetOutput = Join-Path $binPath "NuGets"; - -Write-Debug $buildPath; -Write-Debug $binPath; -Write-Debug $nuspecsPath; -Write-Debug $nugetOutput; - -# Our project objects -$imageprocessor = @{ - name = "ImageProcessor" - version = "2.5.6.${buildNumber}" - folder = Join-Path $buildPath "src\ImageProcessor" - output = Join-Path $binPath "ImageProcessor\lib\net452" - csproj = "ImageProcessor.csproj" - nuspec = Join-Path $nuspecsPath "ImageProcessor.nuspec" -}; - -$projects = @($imageprocessor); - -# Updates the AssemblyInfo file with the specified version -# http://www.luisrocha.net/2009/11/setting-assembly-version-with-windows.html -function Update-AssemblyInfo ([string]$file, [string]$version) { - - $assemblyVersionPattern = 'AssemblyVersion\("[0-9]+(\.([0-9]+|\*)){1,3}"\)' - $fileVersionPattern = 'AssemblyFileVersion\("[0-9]+(\.([0-9]+|\*)){1,3}"\)' - $assemblyVersion = 'AssemblyVersion("' + $version + '")'; - $fileVersion = 'AssemblyFileVersion("' + $version + '")'; - - (Get-Content $file) | ForEach-Object { - ForEach-Object {$_ -replace $assemblyVersionPattern, $assemblyVersion } | - ForEach-Object {$_ -replace $fileVersionPattern, $fileVersion } - } | Set-Content $file -} - -# Loop through our projects, build and pack -foreach ($project in $projects) { - - Write-Host "Building project $($project.name) at version $($project.version)"; - Update-AssemblyInfo -file (Join-Path $project.folder "Properties\AssemblyInfo.cs") -version $project.version; - - $buildCommand = "msbuild $(Join-Path $project.folder $project.csproj) /t:Build /p:Warnings=true /p:Configuration=Release /p:Platform=AnyCPU /p:PipelineDependsOnBuild=False /p:OutDir=$($project.output) /clp:WarningsOnly /clp:ErrorsOnly /clp:Summary /clp:PerformanceSummary /v:Normal /nologo"; - Write-Host $buildCommand; - Invoke-Expression $buildCommand; - - $packCommand = "nuget pack $($project.nuspec) -OutputDirectory $($nugetOutput) -Version $($project.version)"; - Write-Host $packCommand; - Invoke-Expression $packCommand; -} \ No newline at end of file diff --git a/build/build.cmd b/build/build.cmd index e23bbdef4..6d1a3b903 100644 --- a/build/build.cmd +++ b/build/build.cmd @@ -1,6 +1,6 @@ @echo Off -PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& '.\build\build-new.ps1'" +PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& '.\build\build.ps1'" if not "%errorlevel%"=="0" goto failure diff --git a/build/build.ps1 b/build/build.ps1 index fe1f8677c..cdefad5f7 100644 --- a/build/build.ps1 +++ b/build/build.ps1 @@ -1,275 +1,50 @@ -properties { - # call nuget.bat with these values as parameters - $MygetApiKey = $null - $MygetSource = $null - $NugetApiKey = $null - $NugetSource = $null - $AppVeyorPullRequestNumber = $null - - # see appveyor.yml for usage - $BuildNumber = $null - $CoverallsRepoToken = $null - $AppVeyor = $null - - # Input and output paths - $env:Path += ";${Env:ProgramFiles(x86)}\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\Bin" - $BUILD_PATH = Resolve-Path "." - $SOLUTION_PATH = Join-Path $BUILD_PATH "..\" - $SRC_PATH = Join-Path $BUILD_PATH "..\src" - $TESTS_PATH = Join-Path $BUILD_PATH "..\tests" - $NUSPECS_PATH = Join-Path $BUILD_PATH "NuSpecs" - $BIN_PATH = Join-Path $BUILD_PATH "_BuildOutput" - $NUGET_OUTPUT = Join-Path $BIN_PATH "NuGets" - $TEST_RESULTS = Join-Path $BUILD_PATH "TestResults" - - # API documentation - $API_BIN_PATH = Join-Path $BIN_PATH "ImageProcessor\lib\net45\ImageProcessor.dll" # from which DLL Docu builds its help output - $API_DOC_PATH = Join-Path $BIN_PATH "Help\docu" - - # External binaries paths - $NUGET_EXE = Join-Path $SOLUTION_PATH "nuget\NuGet.exe" - $NUNIT_EXE = Join-Path $SOLUTION_PATH "packages\NUnit.ConsoleRunner.3.2.0\tools\nunit3-console.exe" - $COVERALLS_EXE = Join-Path $SOLUTION_PATH "packages\coveralls.io.1.3.4\tools\coveralls.net.exe" - $OPENCOVER_EXE = Join-Path $SOLUTION_PATH "packages\OpenCover.4.6.519\tools\OpenCover.Console.exe" - $REPORTGEN_EXE = Join-Path $SOLUTION_PATH "packages\ReportGenerator.2.4.4.0\tools\ReportGenerator.exe" - $REPORTUNIT_EXE = Join-Path $SOLUTION_PATH "packages\ReportUnit.1.2.1\tools\ReportUnit.exe" - - # list of projects - $PROJECTS_PATH = (Join-Path $BUILD_PATH "build.xml") - [xml]$PROJECTS = Get-Content $PROJECTS_PATH - - $TestProjects = @( - "ImageProcessor.UnitTests", - "ImageProcessor.Web.UnitTests" - ) -} - -Framework "4.6" -FormatTaskName "-------- {0} --------" - -task default -depends Cleanup-Binaries, Set-VersionNumber, Build-Solution, Generate-Nuget #Run-Tests, Run-Coverage, Generate-Nuget - -# cleans up the binaries output folder -task Cleanup-Binaries { - Write-Host "Removing binaries and artifacts so everything is nice and clean" - if (Test-Path $BIN_PATH) { - Remove-Item $BIN_PATH -Force -Recurse - } - - if (Test-Path $NUGET_OUTPUT) { - Remove-Item $NUGET_OUTPUT -Force -Recurse - } - - if (Test-Path $TEST_RESULTS) { - Remove-Item $TEST_RESULTS -Force -Recurse - } -} - -# sets the version number from the build number in the build.xml file -task Set-VersionNumber { - if ($BuildNumber -eq $null -or $BuildNumber -eq "") { - return - } - - $PROJECTS.projects.project | % { - if ($_.version -match "([\d+\.]*)[\d+|\*]") { # get numbers of current version except last one - $_.version = "$($Matches[1])$BuildNumber" - } - } - $PROJECTS.Save($PROJECTS_PATH) -} - -# builds the solutions -task Build-Solution -depends Cleanup-Binaries, Set-VersionNumber { - Write-Host "Building projects" - - # build the projects - # regular "$xmlobject.node | % { $_ }" don't work when they're nested: http://fredmorrison.wordpress.com/2013/03/19/reading-xml-with-powershell-why-most-examples-you-see-are-wrong/ - [System.Xml.XmlElement] $root = $PROJECTS.get_DocumentElement() - [System.Xml.XmlElement] $project = $null - foreach($project in $root.ChildNodes) { - if ($project.projfile -eq $null -or $project.projfile -eq "") { - continue # goes to next item - } - - $projectPath = Resolve-Path $project.folder - Write-Host "Building project $($project.name) at version $($project.version)$($project.prerelease)" - - # it would be possible to update more infos from the xml (description etc), so as to have all infos in one place - Update-AssemblyInfo -file (Join-Path $projectPath "Properties\AssemblyInfo.cs") -version $project.version - - [System.Xml.XmlElement] $output = $null - foreach($output in $project.outputs.ChildNodes) { - # using invoke-expression solves a few character escape issues - $buildCommand = "msbuild $(Join-Path $projectPath $project.projfile) /tv:15.0 /p:VisualStudioVersion=15.0 /t:Build /p:Warnings=true /p:Configuration=Release /p:PipelineDependsOnBuild=False /p:OutDir=$(Join-Path $BIN_PATH $output.folder) $($output.additionalParameters) /clp:WarningsOnly /clp:ErrorsOnly /clp:Summary /clp:PerformanceSummary /v:Normal /nologo" - Write-Host $buildCommand -ForegroundColor DarkGreen - Exec { - Invoke-Expression $buildCommand - } - } - } -} - -# builds the test projects -task Build-Tests -depends Cleanup-Binaries { - Write-Host "Building the unit test projects" - - if (-not (Test-Path $TEST_RESULTS)) { - mkdir $TEST_RESULTS | Out-Null - } - - # make sure the runner exes are restored - & $NUGET_EXE restore (Join-Path $SOLUTION_PATH "ImageProcessor.sln") - - # build the test projects - $TestProjects | % { - # using invoke-expression solves a few character escape issues - $buildCommand = "msbuild $(Join-Path $TESTS_PATH "$_\$_.csproj") /tv:15.0 /p:VisualStudioVersion=15.0 /t:Build /p:Configuration=Release /p:Platform=""AnyCPU"" /p:Warnings=true /clp:WarningsOnly /clp:ErrorsOnly /v:Normal /nologo" - Write-Host "Building project $_" - Exec { - Invoke-Expression $buildCommand - #(Join-Path $MSBUILD_PATH (Join-Path $TESTS_PATH "$_\$_.csproj")) /t:Build /p:Configuration=Release /p:Platform="AnyCPU" /p:Warnings=true /clp:WarningsOnly /clp:ErrorsOnly /v:Normal /nologo - } - } -} - -# runs the unit tests -task Run-Tests -depends Build-Tests { - Write-Host "Running unit tests" - $TestProjects | % { - $TestDllFolder = Join-Path $TESTS_PATH "$_\bin\Release" - $TestDdlPath = Join-Path $TestDllFolder "$_.dll" - $TestOutputPath = Join-Path $TEST_RESULTS "$($_)_Unit.xml" - - Write-Host "Running unit tests on project $_" - & $NUNIT_EXE $TestDdlPath --result=$TestOutputPath - - $ReportPath = (Join-Path $TEST_RESULTS "Tests") - if (-not (Test-Path $ReportPath)) { - mkdir $ReportPath | Out-Null - } - - Write-Host "Transforming tests results file to HTML" - & $REPORTUNIT_EXE $TestOutputPath (Join-Path $ReportPath "$_.html") - } -} - -# runs the code coverage (separate from the unit test because it takes so much longer) -task Run-Coverage -depends Build-Tests { - Write-Host "Running code coverage over unit tests" - $TestProjects | % { - $TestDllFolder = Join-Path $TESTS_PATH "$_\bin\Release" - $TestDdlPath = Join-Path $TestDllFolder "$_.dll" - $CoverageOutputPath = Join-Path $TEST_RESULTS "$($_)_Coverage.xml" - - Write-Host "AppVeyor $AppVeyor" - - $appVeyor = "" - if ($AppVeyor -ne $null -and $AppVeyor -ne "") { - $appVeyor = " -appveyor" - } - - Write-Host "Running code coverage on project $_" - $coverageFilter = "-filter:+[*]* -[FluentAssertions*]* -[ImageProcessor]*Common.Exceptions -[ImageProcessor.UnitTests]* -[ImageProcessor.Web.UnitTests]*" - & $OPENCOVER_EXE -threshold:1 -oldstyle -register:user -target:$NUNIT_EXE -targetargs:"$TestDdlPath" $appVeyor -targetdir:$TestDllFolder -output:$CoverageOutputPath $coverageFilter - - Write-Host "Transforming coverage results file to HTML" - & $REPORTGEN_EXE -verbosity:Info -reports:$CoverageOutputPath -targetdir:(Join-Path $TEST_RESULTS "Coverage\$_") - - if ($CoverallsRepoToken -ne $null -and $CoverallsRepoToken -ne "") { - Write-Host "Uploading coverage report to Coveralls.io" - Exec { . $COVERALLS_EXE --opencover $CoverageOutputPath } - } - } -} - -# generates the API documentation. Disabled for now. -task Generate-APIDoc -depends Build-Solution { - Write-Host "Generating API docs" - - & .\tools\docu\docu.exe $API_BIN_PATH --output=$API_DOC_PATH - - & .\tools\doxygen\doxygen.exe .\Doxyfile -} - -# generates a Nuget package -task Generate-Nuget -depends Set-VersionNumber, Build-Solution { - Write-Host "Generating Nuget packages for each project" - - # Nuget doesn't create the output dir automatically... - if (-not (Test-Path $NUGET_OUTPUT)) { - mkdir $NUGET_OUTPUT | Out-Null - } - - # Package the nuget - $PROJECTS.projects.project | % { - $nuspec_local_path = (Join-Path $NUSPECS_PATH $_.nuspec) - - if ($_.version -match "(\d+\.\d+\.\d+)") { # get semantic version, only first 3 numbers - $_.version = "$($Matches[1])" - } - - Write-Host "Building Nuget package from $nuspec_local_path, version:$($_.version)$($_.prerelease)" - - if ((-not (Test-Path $nuspec_local_path)) -or (-not (Test-Path $NUGET_OUTPUT))) { - throw New-Object [System.IO.FileNotFoundException] "The file $nuspec_local_path or $NUGET_OUTPUT could not be found" - } - - # pack the nuget - & $NUGET_EXE Pack $nuspec_local_path -OutputDirectory $NUGET_OUTPUT -Version "$($_.version)$($_.prerelease)" - } -} - -# publishes the Myget on a feed -task Publish-Myget { - - Write-Host "AppVeyorPullRequestNumber $AppVeyorPullRequestNumber" - - #if($AppVeyorPullRequestNumber -ne $null -and $AppVeyorPullRequestNumber -ne ""){ - # return - #} - - if ($MygetApiKey -eq $null -or $MygetApiKey -eq "") { - throw New-Object [System.ArgumentException] "You must provide a Myget API key as parameter: 'Invoke-psake Publish-Myget -properties @{`"MygetApiKey`"=`"YOURAPIKEY`"}' ; or add a APIKEY environment variable to AppVeyor" - } - - Write-Host "Pushing packages to Myget" - Get-ChildItem $NUGET_OUTPUT -Filter "*.nugpkg" | % { - Write-Host "Pushing $_.name" - - & $NUGET_EXE push $_ -ApiKey $MygetApiKey -Source $MygetSource - } -} - -# publishes the Nuget on a feed -task Publish-Nuget { - if($AppVeyorPullRequestNumber -ne $null){ - return - } - - if ($NugetApiKey -eq $null -or $NugetApiKey -eq "") { - throw New-Object [System.ArgumentException] "You must provide a Nuget API key as parameter: 'Invoke-psake Publish-Nuget -properties @{`"NugetApiKey`"=`"YOURAPIKEY`"}' ; or add a APIKEY environment variable to AppVeyor" - } - - Get-ChildItem $NUGET_OUTPUT -Filter "*.nugpkg" | % { - if ($NugetSource -eq $null -or $NugetSource -eq "") { - & $NUGET_EXE push $_ -ApiKey $NugetApiKey -Source $NugetSource - } else { - & $NUGET_EXE push $_ -ApiKey $NugetApiKey - } - } -} - -# updates the AssemblyInfo file with the specified version +$buildNumber = "$env:APPVEYOR_BUILD_NUMBER"; +$buildPath = Resolve-Path "."; +$binPath = Join-Path $buildPath "build\_BuildOutput"; +$nuspecsPath = Join-Path $buildPath "build\nuspecs"; +$nugetOutput = Join-Path $binPath "NuGets"; + +# Projects. Nuget Dependencies are handled in the nuspec files themselves and depend on the Major.Minor.Build number only. +$imageprocessor = @{ + name = "ImageProcessor" + version = "2.5.6.${buildNumber}" + folder = Join-Path $buildPath "src\ImageProcessor" + output = Join-Path $binPath "ImageProcessor\lib\net452" + csproj = "ImageProcessor.csproj" + nuspec = Join-Path $nuspecsPath "ImageProcessor.nuspec" +}; + +$projects = @($imageprocessor); + +# Updates the AssemblyInfo file with the specified version. # http://www.luisrocha.net/2009/11/setting-assembly-version-with-windows.html -function Update-AssemblyInfo ([string]$file, [string] $version) { +function Update-AssemblyInfo ([string]$file, [string]$version) { + $assemblyVersionPattern = 'AssemblyVersion\("[0-9]+(\.([0-9]+|\*)){1,3}"\)' $fileVersionPattern = 'AssemblyFileVersion\("[0-9]+(\.([0-9]+|\*)){1,3}"\)' $assemblyVersion = 'AssemblyVersion("' + $version + '")'; $fileVersion = 'AssemblyFileVersion("' + $version + '")'; (Get-Content $file) | ForEach-Object { - % {$_ -replace $assemblyVersionPattern, $assemblyVersion } | - % {$_ -replace $fileVersionPattern, $fileVersion } + ForEach-Object {$_ -replace $assemblyVersionPattern, $assemblyVersion } | + ForEach-Object {$_ -replace $fileVersionPattern, $fileVersion } } | Set-Content $file +} + +# Loop through our projects, patch, build, and pack. +foreach ($project in $projects) { + + # Patch + Write-Host "Building project $($project.name) at version $($project.version)"; + Update-AssemblyInfo -file (Join-Path $project.folder "Properties\AssemblyInfo.cs") -version $project.version; + + # Build + $buildCommand = "msbuild $(Join-Path $project.folder $project.csproj) /t:Build /p:Warnings=true /p:Configuration=Release /p:Platform=AnyCPU /p:PipelineDependsOnBuild=False /p:OutDir=$($project.output) /clp:WarningsOnly /clp:ErrorsOnly /clp:Summary /clp:PerformanceSummary /v:Normal /nologo"; + Write-Host $buildCommand; + Invoke-Expression $buildCommand; + + # Pack + $packCommand = "nuget pack $($project.nuspec) -OutputDirectory $($nugetOutput) -Version $($project.version)"; + Write-Host $packCommand; + Invoke-Expression $packCommand; } \ No newline at end of file diff --git a/src/ImageProcessor.Plugins.Cair/ImageProcessor.Plugins.Cair.csproj b/src/ImageProcessor.Plugins.Cair/ImageProcessor.Plugins.Cair.csproj index 662f8246a..680136791 100644 --- a/src/ImageProcessor.Plugins.Cair/ImageProcessor.Plugins.Cair.csproj +++ b/src/ImageProcessor.Plugins.Cair/ImageProcessor.Plugins.Cair.csproj @@ -9,7 +9,7 @@ Properties ImageProcessor.Plugins.Cair ImageProcessor.Plugins.Cair - v4.5 + v4.5.2 512 @@ -73,4 +73,4 @@ --> - + \ No newline at end of file diff --git a/src/ImageProcessor.Plugins.WebP/ImageProcessor.Plugins.WebP.csproj b/src/ImageProcessor.Plugins.WebP/ImageProcessor.Plugins.WebP.csproj index 39c3c754a..267f5e88f 100644 --- a/src/ImageProcessor.Plugins.WebP/ImageProcessor.Plugins.WebP.csproj +++ b/src/ImageProcessor.Plugins.WebP/ImageProcessor.Plugins.WebP.csproj @@ -9,7 +9,7 @@ Properties ImageProcessor.Plugins.WebP ImageProcessor.Plugins.WebP - v4.5 + v4.5.2 512 @@ -69,4 +69,4 @@ --> - + \ No newline at end of file diff --git a/src/ImageProcessor.Web.Plugins.AmazonS3Cache/ImageProcessor.Web.Plugins.AmazonS3Cache.csproj b/src/ImageProcessor.Web.Plugins.AmazonS3Cache/ImageProcessor.Web.Plugins.AmazonS3Cache.csproj index 45d448672..91b53b92b 100644 --- a/src/ImageProcessor.Web.Plugins.AmazonS3Cache/ImageProcessor.Web.Plugins.AmazonS3Cache.csproj +++ b/src/ImageProcessor.Web.Plugins.AmazonS3Cache/ImageProcessor.Web.Plugins.AmazonS3Cache.csproj @@ -9,10 +9,11 @@ Properties ImageProcessor.Web.Plugins.AmazonS3Cache ImageProcessor.Web.Plugins.AmazonS3Cache - v4.5 + v4.5.2 512 ..\..\ true + true diff --git a/src/ImageProcessor.Web.Plugins.AzureBlobCache/ImageProcessor.Web.Plugins.AzureBlobCache.csproj b/src/ImageProcessor.Web.Plugins.AzureBlobCache/ImageProcessor.Web.Plugins.AzureBlobCache.csproj index 3f8b3f89f..f3ed5f53c 100644 --- a/src/ImageProcessor.Web.Plugins.AzureBlobCache/ImageProcessor.Web.Plugins.AzureBlobCache.csproj +++ b/src/ImageProcessor.Web.Plugins.AzureBlobCache/ImageProcessor.Web.Plugins.AzureBlobCache.csproj @@ -9,10 +9,11 @@ Properties ImageProcessor.Web.Plugins.AzureBlobCache ImageProcessor.Web.Plugins.AzureBlobCache - v4.5 + v4.5.2 512 ..\..\ true + true diff --git a/src/ImageProcessor.Web.Plugins.AzureBlobCache/app.config b/src/ImageProcessor.Web.Plugins.AzureBlobCache/app.config index 64f8844c3..dc083ec4c 100644 --- a/src/ImageProcessor.Web.Plugins.AzureBlobCache/app.config +++ b/src/ImageProcessor.Web.Plugins.AzureBlobCache/app.config @@ -1,23 +1,23 @@ - + - - + + - - + + - - + + - - + + - \ No newline at end of file + diff --git a/src/ImageProcessor.Web.Plugins.PostProcessor/ImageProcessor.Web.Plugins.PostProcessor.csproj b/src/ImageProcessor.Web.Plugins.PostProcessor/ImageProcessor.Web.Plugins.PostProcessor.csproj index 2c8e36d86..10506b90e 100644 --- a/src/ImageProcessor.Web.Plugins.PostProcessor/ImageProcessor.Web.Plugins.PostProcessor.csproj +++ b/src/ImageProcessor.Web.Plugins.PostProcessor/ImageProcessor.Web.Plugins.PostProcessor.csproj @@ -9,7 +9,7 @@ Properties ImageProcessor.Web.Plugins.PostProcessor ImageProcessor.Web.Plugins.PostProcessor - v4.5 + v4.5.2 512 diff --git a/src/ImageProcessor.Web/ImageProcessor.Web.csproj b/src/ImageProcessor.Web/ImageProcessor.Web.csproj index e28813b3f..121a32ff9 100644 --- a/src/ImageProcessor.Web/ImageProcessor.Web.csproj +++ b/src/ImageProcessor.Web/ImageProcessor.Web.csproj @@ -9,10 +9,11 @@ Properties ImageProcessor.Web ImageProcessor.Web - v4.5 + v4.5.2 512 ..\..\ true + true diff --git a/src/ImageProcessor/Common/Exceptions/Logging/DefaultLogger.cs b/src/ImageProcessor/Common/Exceptions/Logging/DefaultLogger.cs index d4a95cea7..ef8e9cc9d 100644 --- a/src/ImageProcessor/Common/Exceptions/Logging/DefaultLogger.cs +++ b/src/ImageProcessor/Common/Exceptions/Logging/DefaultLogger.cs @@ -8,7 +8,6 @@ // // -------------------------------------------------------------------------------------------------------------------- -#if NET45 namespace ImageProcessor.Common.Exceptions { using System; @@ -71,5 +70,4 @@ public void Log(Type type, string text, [CallerMemberName] string callerName = n this.debugWriteLine(message); } } -} -#endif \ No newline at end of file +} \ No newline at end of file diff --git a/src/ImageProcessor/Common/Exceptions/Logging/ILogger.cs b/src/ImageProcessor/Common/Exceptions/Logging/ILogger.cs index 88cb36de1..bc79915ac 100644 --- a/src/ImageProcessor/Common/Exceptions/Logging/ILogger.cs +++ b/src/ImageProcessor/Common/Exceptions/Logging/ILogger.cs @@ -8,7 +8,6 @@ // // -------------------------------------------------------------------------------------------------------------------- -#if NET45 namespace ImageProcessor.Common.Exceptions { using System; @@ -37,5 +36,4 @@ public interface ILogger /// The line number where the method is called. void Log(Type type, string text, [CallerMemberName] string callerName = null, [CallerLineNumber] int lineNumber = 0); } -} -#endif \ No newline at end of file +} \ No newline at end of file diff --git a/src/ImageProcessor/Configuration/ImageProcessorBootstrapper.cs b/src/ImageProcessor/Configuration/ImageProcessorBootstrapper.cs index 68270deae..25ee1b951 100644 --- a/src/ImageProcessor/Configuration/ImageProcessorBootstrapper.cs +++ b/src/ImageProcessor/Configuration/ImageProcessorBootstrapper.cs @@ -38,9 +38,7 @@ private ImageProcessorBootstrapper() { this.NativeBinaryFactory = new NativeBinaryFactory(); this.LoadSupportedImageFormats(); -#if NET45 this.LoadLogger(); -#endif } /// @@ -53,12 +51,10 @@ private ImageProcessorBootstrapper() /// public IEnumerable SupportedImageFormats { get; private set; } -#if NET45 /// /// Gets the currently installed logger. /// public ILogger Logger { get; private set; } -#endif ///
    /// Gets the native binary factory for registering embedded (unmanaged) binaries. @@ -77,7 +73,6 @@ public void AddImageFormats(params ISupportedImageFormat[] format) ((List)this.SupportedImageFormats).AddRange(format); } -#if NET45 /// /// Allows the setting of the default logger. Useful for when /// the type finder fails to dynamically add the custom logger implementation. @@ -87,7 +82,6 @@ public void SetLogger(ILogger logger) { this.Logger = logger; } -#endif /// /// Creates a list, using reflection, of supported image formats that ImageProcessor can run. @@ -118,7 +112,6 @@ private void LoadSupportedImageFormats() } } -#if NET45 /// /// Loads the logger. /// @@ -146,6 +139,5 @@ private void LoadLogger() } } } -#endif } } diff --git a/src/ImageProcessor/ImageProcessor.csproj b/src/ImageProcessor/ImageProcessor.csproj index 33d099303..c052919df 100644 --- a/src/ImageProcessor/ImageProcessor.csproj +++ b/src/ImageProcessor/ImageProcessor.csproj @@ -1,7 +1,7 @@  - - - + + + Debug AnyCPU {3B5DD734-FB7A-487D-8CE6-55E7AF9AEA7E} @@ -10,106 +10,31 @@ ImageProcessor ImageProcessor v4.5.2 - - NET45 512 - ..\ - true - - + - true full false bin\Debug\ - TRACE;DEBUG;NET452 - prompt - 2 - bin\Debug\ImageProcessor.XML - false - true - - - - - v4.0 - Client - AnyCPU - true - full - false - bin\Debug\$(Framework)\ - DEBUG;TRACE;NET40 + DEBUG;TRACE prompt 4 - bin\$(Configuration)\$(Framework)\ImageProcessor.XML false true + bin\Debug\ImageProcessor.xml - pdbonly true bin\Release\ - TRACE;NET45 - prompt - 4 - bin\Release\ImageProcessor.XML - false - true - - - - - v4.0 - Client - pdbonly - true - bin\Release\$(Framework)\ - TRACE;NET40 - prompt - 4 - bin\Release\$(Framework)\ImageProcessor.XML - false - true - - - - true - bin\All\ - DEBUG;TRACE;NET45 - bin\Debug\ImageProcessor.XML - full - AnyCPU + TRACE prompt - false - true 4 - false - false - true - - - - - v4.0 - Client - true - bin\All\$(Framework)\ - DEBUG;TRACE;NET40 - bin\Debug\$(Framework)\ImageProcessor.XML - full - AnyCPU - prompt - false - true - 4 - false false true + bin\Release\ImageProcessor.xml @@ -151,9 +76,7 @@ - - Code - + @@ -173,9 +96,7 @@ - - Code - + diff --git a/tests/ImageProcessor.Playground/App.config b/tests/ImageProcessor.Playground/App.config index d1428ad71..8227adb98 100644 --- a/tests/ImageProcessor.Playground/App.config +++ b/tests/ImageProcessor.Playground/App.config @@ -1,6 +1,6 @@ - + diff --git a/tests/ImageProcessor.Playground/ImageProcessor.Playground.csproj b/tests/ImageProcessor.Playground/ImageProcessor.Playground.csproj index c5be871de..ebbb9f5d1 100644 --- a/tests/ImageProcessor.Playground/ImageProcessor.Playground.csproj +++ b/tests/ImageProcessor.Playground/ImageProcessor.Playground.csproj @@ -9,7 +9,7 @@ Properties ImageProcessor.PlayGround ImageProcessor.PlayGround - v4.5 + v4.5.2 512 true @@ -68,4 +68,4 @@ --> - + \ No newline at end of file diff --git a/tests/ImageProcessor.UnitTests/ImageProcessor.UnitTests.csproj b/tests/ImageProcessor.UnitTests/ImageProcessor.UnitTests.csproj index 361ea4173..2c1cfdec0 100644 --- a/tests/ImageProcessor.UnitTests/ImageProcessor.UnitTests.csproj +++ b/tests/ImageProcessor.UnitTests/ImageProcessor.UnitTests.csproj @@ -1,5 +1,6 @@  + Debug AnyCPU @@ -14,7 +15,9 @@ ..\ true - v4.5 + v4.5.2 + + true @@ -45,11 +48,11 @@ False ..\..\packages\FluentAssertions.4.3.2\lib\net45\FluentAssertions.Core.dll + + ..\..\packages\NUnit.3.9.0\lib\net45\nunit.framework.dll + - - ..\..\packages\NUnit.3.2.0\lib\net45\nunit.framework.dll - @@ -85,6 +88,7 @@ + @@ -178,6 +182,7 @@ This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + diff --git a/tests/ImageProcessor.UnitTests/Properties/AssemblyInfo.cs b/tests/ImageProcessor.UnitTests/Properties/AssemblyInfo.cs index fb042a1d3..f4e10f4e3 100644 --- a/tests/ImageProcessor.UnitTests/Properties/AssemblyInfo.cs +++ b/tests/ImageProcessor.UnitTests/Properties/AssemblyInfo.cs @@ -5,11 +5,11 @@ // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. -[assembly: AssemblyTitle("ImageProcessor.UnitTests2")] +[assembly: AssemblyTitle("ImageProcessor.UnitTests")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("ImageProcessor.UnitTests2")] +[assembly: AssemblyProduct("ImageProcessor.UnitTests")] [assembly: AssemblyCopyright("Copyright © 2014")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] diff --git a/tests/ImageProcessor.UnitTests/packages.config b/tests/ImageProcessor.UnitTests/packages.config index 2e00ebf9b..e1772e731 100644 --- a/tests/ImageProcessor.UnitTests/packages.config +++ b/tests/ImageProcessor.UnitTests/packages.config @@ -2,13 +2,13 @@ - - + + - + diff --git a/tests/ImageProcessor.Web.UnitTests/ImageProcessor.Web.UnitTests.csproj b/tests/ImageProcessor.Web.UnitTests/ImageProcessor.Web.UnitTests.csproj index 44c7892bf..937bdd886 100644 --- a/tests/ImageProcessor.Web.UnitTests/ImageProcessor.Web.UnitTests.csproj +++ b/tests/ImageProcessor.Web.UnitTests/ImageProcessor.Web.UnitTests.csproj @@ -1,5 +1,6 @@  + Debug @@ -9,9 +10,11 @@ Properties ImageProcessor.Web.UnitTests ImageProcessor.Web.UnitTests - v4.5 + v4.5.2 512 + + true @@ -31,9 +34,8 @@ 4 - - ..\..\packages\NUnit.3.2.0\lib\net45\nunit.framework.dll - True + + ..\..\packages\NUnit.3.9.0\lib\net45\nunit.framework.dll @@ -83,6 +85,12 @@ + + + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + diff --git a/APACHE-2.0-LICENSE.txt b/APACHE-2.0-LICENSE.txt deleted file mode 100644 index c047f9a89..000000000 --- a/APACHE-2.0-LICENSE.txt +++ /dev/null @@ -1,13 +0,0 @@ -Copyright 2012 James Jackson-South - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. \ No newline at end of file diff --git a/ImageProcessor.sln b/ImageProcessor.sln index ecf58534d..c86d6e404 100644 --- a/ImageProcessor.sln +++ b/ImageProcessor.sln @@ -32,13 +32,11 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Build", "Build", "{4E1AB050 appveyor.yml = appveyor.yml build\build.cmd = build\build.cmd build\build.ps1 = build\build.ps1 - build\build.xml = build\build.xml - build\coverage.bat = build\coverage.bat EndProjectSection EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Readme", "Readme", "{1F68939E-8BBE-4D09-98B5-68B06BBDE68E}" ProjectSection(SolutionItems) = preProject - APACHE-2.0-LICENSE.txt = APACHE-2.0-LICENSE.txt + LICENSE = LICENSE README.md = README.md EndProjectSection EndProject diff --git a/LICENSE b/LICENSE new file mode 100644 index 000000000..2eeb57968 --- /dev/null +++ b/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018 Six Labors + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/README.md b/README.md index 9d33e7f3c..ce9a244e1 100644 --- a/README.md +++ b/README.md @@ -1,40 +1,39 @@ -# ImageProcessor +

    + ImageProcessor +
    + ImageProcessor +
    +
    +

    -**Imageprocessor** is a lightweight, extensible library written in C# that allows you to manipulate images on-the-fly using .NET 4.5+ +**Imageprocessor** is a lightweight, fluent wrapper around System.Drawing. It's fast, extensible, easy to use, comes bundled with some great features and is fully open source. For full documentation please see [http://imageprocessor.org/](http://imageprocessor.org/) -**If you are looking for the new cross-platform imaging library it has moved to it's own repository [ImageSharp](https://github.com/JimBobSquarePants/ImageSharp).** - ### Build Status [![Build status](https://ci.appveyor.com/api/projects/status/8ypr7527dnao04yr/branch/Framework?svg=true)](https://ci.appveyor.com/project/JamesSouth/imageprocessor/branch/Framework) -[![Coverage Status](https://coveralls.io/repos/JimBobSquarePants/ImageProcessor/badge.svg?branch=V2&service=github)](https://coveralls.io/r/JimBobSquarePants/ImageProcessor?branch=Framework) +[![Issues open](https://img.shields.io/github/issues-raw/JimBobSquarePants/imageprocessor.svg)](https://huboard.com/JimBobSquarePants/ImageProcessor/) +[![Source Browser](https://img.shields.io/badge/Browse-Source-green.svg)](http://sourcebrowser.io/Browse/JimBobSquarePants/ImageProcessor/) +[![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/JimBobSquarePants/ImageProcessor?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) ### Latest Releases |Library |Version | |:-----------------|:-----------------| |**ImageProcessor**|[![NuGet](https://buildstats.info/nuget/ImageProcessor)](https://www.nuget.org/packages/ImageProcessor)| +|**ImageProcessor.Plugins.Cair**|[![NuGet](https://buildstats.info/nuget/ImageProcessor.Plugins.Cair)](https://www.nuget.org/packages/ImageProcessor.Plugins.Cair)| +|**ImageProcessor.Plugins.WebP**|[![NuGet](https://buildstats.info/nuget/ImageProcessor.Plugins.WebP)](https://www.nuget.org/packages/ImageProcessor.Plugins.WebP)| |**ImageProcessor.Web**|[![NuGet](https://buildstats.info/nuget/ImageProcessor.Web)](https://www.nuget.org/packages/ImageProcessor.Web)| +|**ImageProcessor.Web.Config**|[![NuGet](https://buildstats.info/nuget/ImageProcessor.Web.Config)](https://www.nuget.org/packages/ImageProcessor.Web.Config)| +|**ImageProcessor.Web.Plugins.AzureBlobCache**|[![NuGet](https://buildstats.info/nuget/ImageProcessor.Web.Plugins.AzureBlobCache)](https://www.nuget.org/packages/ImageProcessor.Web.Plugins.AzureBlobCache)| +|**ImageProcessor.Web.PostProcessor**|[![NuGet](https://buildstats.info/nuget/ImageProcessor.Web.PostProcessor)](https://www.nuget.org/packages/ImageProcessor.Web.PostProcessor)| -[![Issues open](http://img.shields.io/github/issues-raw/JimBobSquarePants/imageprocessor.svg)](https://huboard.com/JimBobSquarePants/ImageProcessor/) -[![Source Browser](https://img.shields.io/badge/Browse-Source-green.svg)](http://sourcebrowser.io/Browse/JimBobSquarePants/ImageProcessor/) -[![Gitter](https://badges.gitter.im/Join Chat.svg)](https://gitter.im/JimBobSquarePants/ImageProcessor?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) ## Contributing to ImageProcessor -Contribution is most welcome! I mean, that's what this is all about isn't it? - -Things I would :heart: people to help me out with: - - - Unit tests. I need to get some going for all the regular expressions within the ImageProcessor core plus anywhere else we can think of. If that's your bag please contribute. - - Documentation. Nobody likes doing docs, I've written a lot but my prose is clumsy and verbose. If you think you can make things clearer or you spot any mistakes please submit a pull request (Guide to how the docs work below). - -**Just remember to StyleCop all things! :oncoming_police_car:** - -## RoadMap -Focus for the ImageProcessor libraries has switched to the new library [**ImageSharp**](https://github.com/JimBobSquarePants/ImageSharp). As such very few new features will be added to this library. Bug fixes and enhancements will continue to be developed though. +**ImageProcessor is in maintainance mode only**. Focus for the ImageProcessor libraries has switched to a new library [**ImageSharp**](https://github.com/SixLabors/ImageSharp). +As such, no new features will be added to this library. Bug fixes will continue to be added. ## Documentation @@ -50,11 +49,4 @@ Learn more about using Jekyll by reading its [documentation](http://jekyllrb.com ### The ImageProcessor Team Grand High Eternal Dictator -- [James Jackson-South](https://github.com/jimbobsquarepants) - -Core Team -- [Jeavon Leopold](https://github.com/jeavon) -- [Dirk Lemstra](https://github.com/dlemstra) -- [Yufeih Huang](https://github.com/yufeih) -- [Thomas Broust](https://github.com/cosmo0) -- [Christopher Bauer](https://github.com/christopherbauer) \ No newline at end of file +- [James Jackson-South](https://github.com/jimbobsquarepants) \ No newline at end of file diff --git a/build/Doxyfile b/build/Doxyfile deleted file mode 100644 index 877afa6ca..000000000 --- a/build/Doxyfile +++ /dev/null @@ -1,2350 +0,0 @@ -# Doxyfile 1.8.8 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project. -# -# All text after a double hash (##) is considered a comment and is placed in -# front of the TAG it is preceding. -# -# All text after a single hash (#) is considered a comment and will be ignored. -# The format is: -# TAG = value [value, ...] -# For lists, items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (\" \"). - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- - -# This tag specifies the encoding used for all characters in the config file -# that follow. The default is UTF-8 which is also the encoding used for all text -# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv -# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv -# for the list of possible encodings. -# The default value is: UTF-8. - -DOXYFILE_ENCODING = UTF-8 - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by -# double-quotes, unless you are using Doxywizard) that should identify the -# project for which the documentation is generated. This name is used in the -# title of most generated pages and in a few other places. -# The default value is: My Project. - -PROJECT_NAME = "ImageProcessor" - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. This -# could be handy for archiving the generated documentation or if some version -# control system is used. - -PROJECT_NUMBER = - -# Using the PROJECT_BRIEF tag one can provide an optional one line description -# for a project that appears at the top of each page and should give viewer a -# quick idea about the purpose of the project. Keep the description short. - -PROJECT_BRIEF = - -# With the PROJECT_LOGO tag one can specify an logo or icon that is included in -# the documentation. The maximum height of the logo should not exceed 55 pixels -# and the maximum width should not exceed 200 pixels. Doxygen will copy the logo -# to the output directory. - -PROJECT_LOGO = - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path -# into which the generated documentation will be written. If a relative path is -# entered, it will be relative to the location where doxygen was started. If -# left blank the current directory will be used. - -OUTPUT_DIRECTORY = "_BuildOutput\Help\doxygen" - -# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 4096 sub- -# directories (in 2 levels) under the output directory of each output format and -# will distribute the generated files over these directories. Enabling this -# option can be useful when feeding doxygen a huge amount of source files, where -# putting all generated files in the same directory would otherwise causes -# performance problems for the file system. -# The default value is: NO. - -CREATE_SUBDIRS = NO - -# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII -# characters to appear in the names of generated files. If set to NO, non-ASCII -# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode -# U+3044. -# The default value is: NO. - -ALLOW_UNICODE_NAMES = NO - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, -# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), -# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, -# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), -# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, -# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, -# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, -# Ukrainian and Vietnamese. -# The default value is: English. - -OUTPUT_LANGUAGE = English - -# If the BRIEF_MEMBER_DESC tag is set to YES doxygen will include brief member -# descriptions after the members that are listed in the file and class -# documentation (similar to Javadoc). Set to NO to disable this. -# The default value is: YES. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES doxygen will prepend the brief -# description of a member or function before the detailed description -# -# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. -# The default value is: YES. - -REPEAT_BRIEF = YES - -# This tag implements a quasi-intelligent brief description abbreviator that is -# used to form the text in various listings. Each string in this list, if found -# as the leading text of the brief description, will be stripped from the text -# and the result, after processing the whole list, is used as the annotated -# text. Otherwise, the brief description is used as-is. If left blank, the -# following values are used ($name is automatically replaced with the name of -# the entity):The $name class, The $name widget, The $name file, is, provides, -# specifies, contains, represents, a, an and the. - -ABBREVIATE_BRIEF = - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# doxygen will generate a detailed section even if there is only a brief -# description. -# The default value is: NO. - -ALWAYS_DETAILED_SEC = NO - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all -# inherited members of a class in the documentation of that class as if those -# members were ordinary class members. Constructors, destructors and assignment -# operators of the base classes will not be shown. -# The default value is: NO. - -INLINE_INHERITED_MEMB = NO - -# If the FULL_PATH_NAMES tag is set to YES doxygen will prepend the full path -# before files name in the file list and in the header files. If set to NO the -# shortest path that makes the file name unique will be used -# The default value is: YES. - -FULL_PATH_NAMES = YES - -# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. -# Stripping is only done if one of the specified strings matches the left-hand -# part of the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the path to -# strip. -# -# Note that you can specify absolute paths here, but also relative paths, which -# will be relative from the directory where doxygen is started. -# This tag requires that the tag FULL_PATH_NAMES is set to YES. - -STRIP_FROM_PATH = - -# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the -# path mentioned in the documentation of a class, which tells the reader which -# header file to include in order to use a class. If left blank only the name of -# the header file containing the class definition is used. Otherwise one should -# specify the list of include paths that are normally passed to the compiler -# using the -I flag. - -STRIP_FROM_INC_PATH = - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but -# less readable) file names. This can be useful is your file systems doesn't -# support long names like on DOS, Mac, or CD-ROM. -# The default value is: NO. - -SHORT_NAMES = NO - -# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the -# first line (until the first dot) of a Javadoc-style comment as the brief -# description. If set to NO, the Javadoc-style will behave just like regular Qt- -# style comments (thus requiring an explicit @brief command for a brief -# description.) -# The default value is: NO. - -JAVADOC_AUTOBRIEF = NO - -# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first -# line (until the first dot) of a Qt-style comment as the brief description. If -# set to NO, the Qt-style will behave just like regular Qt-style comments (thus -# requiring an explicit \brief command for a brief description.) -# The default value is: NO. - -QT_AUTOBRIEF = NO - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a -# multi-line C++ special comment block (i.e. a block of //! or /// comments) as -# a brief description. This used to be the default behavior. The new default is -# to treat a multi-line C++ comment block as a detailed description. Set this -# tag to YES if you prefer the old behavior instead. -# -# Note that setting this tag to YES also means that rational rose comments are -# not recognized any more. -# The default value is: NO. - -MULTILINE_CPP_IS_BRIEF = NO - -# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the -# documentation from any documented member that it re-implements. -# The default value is: YES. - -INHERIT_DOCS = YES - -# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce a -# new page for each member. If set to NO, the documentation of a member will be -# part of the file/class/namespace that contains it. -# The default value is: NO. - -SEPARATE_MEMBER_PAGES = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen -# uses this value to replace tabs by spaces in code fragments. -# Minimum value: 1, maximum value: 16, default value: 4. - -TAB_SIZE = 4 - -# This tag can be used to specify a number of aliases that act as commands in -# the documentation. An alias has the form: -# name=value -# For example adding -# "sideeffect=@par Side Effects:\n" -# will allow you to put the command \sideeffect (or @sideeffect) in the -# documentation, which will result in a user-defined paragraph with heading -# "Side Effects:". You can put \n's in the value part of an alias to insert -# newlines. - -ALIASES = - -# This tag can be used to specify a number of word-keyword mappings (TCL only). -# A mapping has the form "name=value". For example adding "class=itcl::class" -# will allow you to use the command class in the itcl::class meaning. - -TCL_SUBST = - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources -# only. Doxygen will then generate output that is more tailored for C. For -# instance, some of the names that are used will be different. The list of all -# members will be omitted, etc. -# The default value is: NO. - -OPTIMIZE_OUTPUT_FOR_C = NO - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or -# Python sources only. Doxygen will then generate output that is more tailored -# for that language. For instance, namespaces will be presented as packages, -# qualified scopes will look different, etc. -# The default value is: NO. - -OPTIMIZE_OUTPUT_JAVA = NO - -# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran -# sources. Doxygen will then generate output that is tailored for Fortran. -# The default value is: NO. - -OPTIMIZE_FOR_FORTRAN = NO - -# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL -# sources. Doxygen will then generate output that is tailored for VHDL. -# The default value is: NO. - -OPTIMIZE_OUTPUT_VHDL = NO - -# Doxygen selects the parser to use depending on the extension of the files it -# parses. With this tag you can assign which parser to use for a given -# extension. Doxygen has a built-in mapping, but you can override or extend it -# using this tag. The format is ext=language, where ext is a file extension, and -# language is one of the parsers supported by doxygen: IDL, Java, Javascript, -# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: -# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: -# Fortran. In the later case the parser tries to guess whether the code is fixed -# or free formatted code, this is the default for Fortran type files), VHDL. For -# instance to make doxygen treat .inc files as Fortran files (default is PHP), -# and .f files as C (default is Fortran), use: inc=Fortran f=C. -# -# Note For files without extension you can use no_extension as a placeholder. -# -# Note that for custom extensions you also need to set FILE_PATTERNS otherwise -# the files are not read by doxygen. - -EXTENSION_MAPPING = - -# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments -# according to the Markdown format, which allows for more readable -# documentation. See http://daringfireball.net/projects/markdown/ for details. -# The output of markdown processing is further processed by doxygen, so you can -# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in -# case of backward compatibilities issues. -# The default value is: YES. - -MARKDOWN_SUPPORT = YES - -# When enabled doxygen tries to link words that correspond to documented -# classes, or namespaces to their corresponding documentation. Such a link can -# be prevented in individual cases by by putting a % sign in front of the word -# or globally by setting AUTOLINK_SUPPORT to NO. -# The default value is: YES. - -AUTOLINK_SUPPORT = YES - -# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want -# to include (a tag file for) the STL sources as input, then you should set this -# tag to YES in order to let doxygen match functions declarations and -# definitions whose arguments contain STL classes (e.g. func(std::string); -# versus func(std::string) {}). This also make the inheritance and collaboration -# diagrams that involve STL classes more complete and accurate. -# The default value is: NO. - -BUILTIN_STL_SUPPORT = NO - -# If you use Microsoft's C++/CLI language, you should set this option to YES to -# enable parsing support. -# The default value is: NO. - -CPP_CLI_SUPPORT = NO - -# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: -# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen -# will parse them like normal C++ but will assume all classes use public instead -# of private inheritance when no explicit protection keyword is present. -# The default value is: NO. - -SIP_SUPPORT = NO - -# For Microsoft's IDL there are propget and propput attributes to indicate -# getter and setter methods for a property. Setting this option to YES will make -# doxygen to replace the get and set methods by a property in the documentation. -# This will only work if the methods are indeed getting or setting a simple -# type. If this is not the case, or you want to show the methods anyway, you -# should set this option to NO. -# The default value is: YES. - -IDL_PROPERTY_SUPPORT = YES - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. -# The default value is: NO. - -DISTRIBUTE_GROUP_DOC = NO - -# Set the SUBGROUPING tag to YES to allow class member groups of the same type -# (for instance a group of public functions) to be put as a subgroup of that -# type (e.g. under the Public Functions section). Set it to NO to prevent -# subgrouping. Alternatively, this can be done per class using the -# \nosubgrouping command. -# The default value is: YES. - -SUBGROUPING = YES - -# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions -# are shown inside the group in which they are included (e.g. using \ingroup) -# instead of on a separate page (for HTML and Man pages) or section (for LaTeX -# and RTF). -# -# Note that this feature does not work in combination with -# SEPARATE_MEMBER_PAGES. -# The default value is: NO. - -INLINE_GROUPED_CLASSES = NO - -# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions -# with only public data fields or simple typedef fields will be shown inline in -# the documentation of the scope in which they are defined (i.e. file, -# namespace, or group documentation), provided this scope is documented. If set -# to NO, structs, classes, and unions are shown on a separate page (for HTML and -# Man pages) or section (for LaTeX and RTF). -# The default value is: NO. - -INLINE_SIMPLE_STRUCTS = NO - -# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or -# enum is documented as struct, union, or enum with the name of the typedef. So -# typedef struct TypeS {} TypeT, will appear in the documentation as a struct -# with name TypeT. When disabled the typedef will appear as a member of a file, -# namespace, or class. And the struct will be named TypeS. This can typically be -# useful for C code in case the coding convention dictates that all compound -# types are typedef'ed and only the typedef is referenced, never the tag name. -# The default value is: NO. - -TYPEDEF_HIDES_STRUCT = NO - -# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This -# cache is used to resolve symbols given their name and scope. Since this can be -# an expensive process and often the same symbol appears multiple times in the -# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small -# doxygen will become slower. If the cache is too large, memory is wasted. The -# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range -# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 -# symbols. At the end of a run doxygen will report the cache usage and suggest -# the optimal cache size from a speed point of view. -# Minimum value: 0, maximum value: 9, default value: 0. - -LOOKUP_CACHE_SIZE = 0 - -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in -# documentation are documented, even if no documentation was available. Private -# class members and static file members will be hidden unless the -# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. -# Note: This will also disable the warnings about undocumented members that are -# normally produced when WARNINGS is set to YES. -# The default value is: NO. - -EXTRACT_ALL = NO - -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class will -# be included in the documentation. -# The default value is: NO. - -EXTRACT_PRIVATE = NO - -# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal -# scope will be included in the documentation. -# The default value is: NO. - -EXTRACT_PACKAGE = NO - -# If the EXTRACT_STATIC tag is set to YES all static members of a file will be -# included in the documentation. -# The default value is: NO. - -EXTRACT_STATIC = NO - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) defined -# locally in source files will be included in the documentation. If set to NO -# only classes defined in header files are included. Does not have any effect -# for Java sources. -# The default value is: YES. - -EXTRACT_LOCAL_CLASSES = YES - -# This flag is only useful for Objective-C code. When set to YES local methods, -# which are defined in the implementation section but not in the interface are -# included in the documentation. If set to NO only methods in the interface are -# included. -# The default value is: NO. - -EXTRACT_LOCAL_METHODS = NO - -# If this flag is set to YES, the members of anonymous namespaces will be -# extracted and appear in the documentation as a namespace called -# 'anonymous_namespace{file}', where file will be replaced with the base name of -# the file that contains the anonymous namespace. By default anonymous namespace -# are hidden. -# The default value is: NO. - -EXTRACT_ANON_NSPACES = NO - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all -# undocumented members inside documented classes or files. If set to NO these -# members will be included in the various overviews, but no documentation -# section is generated. This option has no effect if EXTRACT_ALL is enabled. -# The default value is: NO. - -HIDE_UNDOC_MEMBERS = NO - -# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. If set -# to NO these classes will be included in the various overviews. This option has -# no effect if EXTRACT_ALL is enabled. -# The default value is: NO. - -HIDE_UNDOC_CLASSES = NO - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend -# (class|struct|union) declarations. If set to NO these declarations will be -# included in the documentation. -# The default value is: NO. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any -# documentation blocks found inside the body of a function. If set to NO these -# blocks will be appended to the function's detailed documentation block. -# The default value is: NO. - -HIDE_IN_BODY_DOCS = NO - -# The INTERNAL_DOCS tag determines if documentation that is typed after a -# \internal command is included. If the tag is set to NO then the documentation -# will be excluded. Set it to YES to include the internal documentation. -# The default value is: NO. - -INTERNAL_DOCS = NO - -# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file -# names in lower-case letters. If set to YES upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. -# The default value is: system dependent. - -CASE_SENSE_NAMES = NO - -# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with -# their full class and namespace scopes in the documentation. If set to YES the -# scope will be hidden. -# The default value is: NO. - -HIDE_SCOPE_NAMES = NO - -# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of -# the files that are included by a file in the documentation of that file. -# The default value is: YES. - -SHOW_INCLUDE_FILES = YES - -# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each -# grouped member an include statement to the documentation, telling the reader -# which file to include in order to use the member. -# The default value is: NO. - -SHOW_GROUPED_MEMB_INC = NO - -# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include -# files with double quotes in the documentation rather than with sharp brackets. -# The default value is: NO. - -FORCE_LOCAL_INCLUDES = NO - -# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the -# documentation for inline members. -# The default value is: YES. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the -# (detailed) documentation of file and class members alphabetically by member -# name. If set to NO the members will appear in declaration order. -# The default value is: YES. - -SORT_MEMBER_DOCS = YES - -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief -# descriptions of file, namespace and class members alphabetically by member -# name. If set to NO the members will appear in declaration order. Note that -# this will also influence the order of the classes in the class list. -# The default value is: NO. - -SORT_BRIEF_DOCS = NO - -# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the -# (brief and detailed) documentation of class members so that constructors and -# destructors are listed first. If set to NO the constructors will appear in the -# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. -# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief -# member documentation. -# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting -# detailed member documentation. -# The default value is: NO. - -SORT_MEMBERS_CTORS_1ST = NO - -# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy -# of group names into alphabetical order. If set to NO the group names will -# appear in their defined order. -# The default value is: NO. - -SORT_GROUP_NAMES = NO - -# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by -# fully-qualified names, including namespaces. If set to NO, the class list will -# be sorted only by class name, not including the namespace part. -# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. -# Note: This option applies only to the class list, not to the alphabetical -# list. -# The default value is: NO. - -SORT_BY_SCOPE_NAME = NO - -# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper -# type resolution of all parameters of a function it will reject a match between -# the prototype and the implementation of a member function even if there is -# only one candidate or it is obvious which candidate to choose by doing a -# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still -# accept a match between prototype and implementation in such cases. -# The default value is: NO. - -STRICT_PROTO_MATCHING = NO - -# The GENERATE_TODOLIST tag can be used to enable ( YES) or disable ( NO) the -# todo list. This list is created by putting \todo commands in the -# documentation. -# The default value is: YES. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable ( YES) or disable ( NO) the -# test list. This list is created by putting \test commands in the -# documentation. -# The default value is: YES. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable ( YES) or disable ( NO) the bug -# list. This list is created by putting \bug commands in the documentation. -# The default value is: YES. - -GENERATE_BUGLIST = YES - -# The GENERATE_DEPRECATEDLIST tag can be used to enable ( YES) or disable ( NO) -# the deprecated list. This list is created by putting \deprecated commands in -# the documentation. -# The default value is: YES. - -GENERATE_DEPRECATEDLIST= YES - -# The ENABLED_SECTIONS tag can be used to enable conditional documentation -# sections, marked by \if ... \endif and \cond -# ... \endcond blocks. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the -# initial value of a variable or macro / define can have for it to appear in the -# documentation. If the initializer consists of more lines than specified here -# it will be hidden. Use a value of 0 to hide initializers completely. The -# appearance of the value of individual variables and macros / defines can be -# controlled using \showinitializer or \hideinitializer command in the -# documentation regardless of this setting. -# Minimum value: 0, maximum value: 10000, default value: 30. - -MAX_INITIALIZER_LINES = 30 - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at -# the bottom of the documentation of classes and structs. If set to YES the list -# will mention the files that were used to generate the documentation. -# The default value is: YES. - -SHOW_USED_FILES = YES - -# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This -# will remove the Files entry from the Quick Index and from the Folder Tree View -# (if specified). -# The default value is: YES. - -SHOW_FILES = YES - -# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces -# page. This will remove the Namespaces entry from the Quick Index and from the -# Folder Tree View (if specified). -# The default value is: YES. - -SHOW_NAMESPACES = YES - -# The FILE_VERSION_FILTER tag can be used to specify a program or script that -# doxygen should invoke to get the current version for each file (typically from -# the version control system). Doxygen will invoke the program by executing (via -# popen()) the command command input-file, where command is the value of the -# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided -# by doxygen. Whatever the program writes to standard output is used as the file -# version. For an example see the documentation. - -FILE_VERSION_FILTER = - -# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed -# by doxygen. The layout file controls the global structure of the generated -# output files in an output format independent way. To create the layout file -# that represents doxygen's defaults, run doxygen with the -l option. You can -# optionally specify a file name after the option, if omitted DoxygenLayout.xml -# will be used as the name of the layout file. -# -# Note that if you run doxygen from a directory containing a file called -# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE -# tag is left empty. - -LAYOUT_FILE = - -# The CITE_BIB_FILES tag can be used to specify one or more bib files containing -# the reference definitions. This must be a list of .bib files. The .bib -# extension is automatically appended if omitted. This requires the bibtex tool -# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. -# For LaTeX the style of the bibliography can be controlled using -# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the -# search path. See also \cite for info how to create references. - -CITE_BIB_FILES = - -#--------------------------------------------------------------------------- -# Configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated to -# standard output by doxygen. If QUIET is set to YES this implies that the -# messages are off. -# The default value is: NO. - -QUIET = NO - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated to standard error ( stderr) by doxygen. If WARNINGS is set to YES -# this implies that the warnings are on. -# -# Tip: Turn warnings on while writing the documentation. -# The default value is: YES. - -WARNINGS = YES - -# If the WARN_IF_UNDOCUMENTED tag is set to YES, then doxygen will generate -# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag -# will automatically be disabled. -# The default value is: YES. - -WARN_IF_UNDOCUMENTED = YES - -# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some parameters -# in a documented function, or documenting parameters that don't exist or using -# markup commands wrongly. -# The default value is: YES. - -WARN_IF_DOC_ERROR = YES - -# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that -# are documented, but have no documentation for their parameters or return -# value. If set to NO doxygen will only warn about wrong or incomplete parameter -# documentation, but not about the absence of documentation. -# The default value is: NO. - -WARN_NO_PARAMDOC = NO - -# The WARN_FORMAT tag determines the format of the warning messages that doxygen -# can produce. The string should contain the $file, $line, and $text tags, which -# will be replaced by the file and line number from which the warning originated -# and the warning text. Optionally the format may contain $version, which will -# be replaced by the version of the file (if it could be obtained via -# FILE_VERSION_FILTER) -# The default value is: $file:$line: $text. - -WARN_FORMAT = "$file:$line: $text" - -# The WARN_LOGFILE tag can be used to specify a file to which warning and error -# messages should be written. If left blank the output is written to standard -# error (stderr). - -WARN_LOGFILE = - -#--------------------------------------------------------------------------- -# Configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag is used to specify the files and/or directories that contain -# documented source files. You may enter file names like myfile.cpp or -# directories like /usr/src/myproject. Separate the files or directories with -# spaces. -# Note: If this tag is empty the current directory is searched. - -INPUT = "..\src\ImageProcessor" - -# This tag can be used to specify the character encoding of the source files -# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses -# libiconv (or the iconv built into libc) for the transcoding. See the libiconv -# documentation (see: http://www.gnu.org/software/libiconv) for the list of -# possible encodings. -# The default value is: UTF-8. - -INPUT_ENCODING = UTF-8 - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and -# *.h) to filter out the source-files in the directories. If left blank the -# following patterns are tested:*.c, *.cc, *.cxx, *.cpp, *.c++, *.java, *.ii, -# *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, -# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, -# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, -# *.qsf, *.as and *.js. - -FILE_PATTERNS = "*.cs" - -# The RECURSIVE tag can be used to specify whether or not subdirectories should -# be searched for input files as well. -# The default value is: NO. - -RECURSIVE = YES - -# The EXCLUDE tag can be used to specify files and/or directories that should be -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. -# -# Note that relative paths are relative to the directory from which doxygen is -# run. - -EXCLUDE = - -# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or -# directories that are symbolic links (a Unix file system feature) are excluded -# from the input. -# The default value is: NO. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. -# -# Note that the wildcards are matched against the file with absolute path, so to -# exclude all test directories for example use the pattern */test/* - -EXCLUDE_PATTERNS = - -# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names -# (namespaces, classes, functions, etc.) that should be excluded from the -# output. The symbol name can be a fully qualified name, a word, or if the -# wildcard * is used, a substring. Examples: ANamespace, AClass, -# AClass::ANamespace, ANamespace::*Test -# -# Note that the wildcards are matched against the file with absolute path, so to -# exclude all test directories use the pattern */test/* - -EXCLUDE_SYMBOLS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or directories -# that contain example code fragments that are included (see the \include -# command). - -EXAMPLE_PATH = - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and -# *.h) to filter out the source-files in the directories. If left blank all -# files are included. - -EXAMPLE_PATTERNS = - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude commands -# irrespective of the value of the RECURSIVE tag. -# The default value is: NO. - -EXAMPLE_RECURSIVE = NO - -# The IMAGE_PATH tag can be used to specify one or more files or directories -# that contain images that are to be included in the documentation (see the -# \image command). - -IMAGE_PATH = - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command: -# -# -# -# where is the value of the INPUT_FILTER tag, and is the -# name of an input file. Doxygen will then use the output that the filter -# program writes to standard output. If FILTER_PATTERNS is specified, this tag -# will be ignored. -# -# Note that the filter must not add or remove lines; it is applied before the -# code is scanned, but not when the output code is generated. If lines are added -# or removed, the anchors will not be placed correctly. - -INPUT_FILTER = - -# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern -# basis. Doxygen will compare the file name with each pattern and apply the -# filter if there is a match. The filters are a list of the form: pattern=filter -# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how -# filters are used. If the FILTER_PATTERNS tag is empty or if none of the -# patterns match the file name, INPUT_FILTER is applied. - -FILTER_PATTERNS = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER ) will also be used to filter the input files that are used for -# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). -# The default value is: NO. - -FILTER_SOURCE_FILES = NO - -# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file -# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and -# it is also possible to disable source filtering for a specific pattern using -# *.ext= (so without naming a filter). -# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. - -FILTER_SOURCE_PATTERNS = - -# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that -# is part of the input, its contents will be placed on the main page -# (index.html). This can be useful if you have a project on for instance GitHub -# and want to reuse the introduction page also for the doxygen output. - -USE_MDFILE_AS_MAINPAGE = - -#--------------------------------------------------------------------------- -# Configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will be -# generated. Documented entities will be cross-referenced with these sources. -# -# Note: To get rid of all source code in the generated output, make sure that -# also VERBATIM_HEADERS is set to NO. -# The default value is: NO. - -SOURCE_BROWSER = NO - -# Setting the INLINE_SOURCES tag to YES will include the body of functions, -# classes and enums directly into the documentation. -# The default value is: NO. - -INLINE_SOURCES = NO - -# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any -# special comment blocks from generated source code fragments. Normal C, C++ and -# Fortran comments will always remain visible. -# The default value is: YES. - -STRIP_CODE_COMMENTS = YES - -# If the REFERENCED_BY_RELATION tag is set to YES then for each documented -# function all documented functions referencing it will be listed. -# The default value is: NO. - -REFERENCED_BY_RELATION = NO - -# If the REFERENCES_RELATION tag is set to YES then for each documented function -# all documented entities called/used by that function will be listed. -# The default value is: NO. - -REFERENCES_RELATION = NO - -# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set -# to YES, then the hyperlinks from functions in REFERENCES_RELATION and -# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will -# link to the documentation. -# The default value is: YES. - -REFERENCES_LINK_SOURCE = YES - -# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the -# source code will show a tooltip with additional information such as prototype, -# brief description and links to the definition and documentation. Since this -# will make the HTML file larger and loading of large files a bit slower, you -# can opt to disable this feature. -# The default value is: YES. -# This tag requires that the tag SOURCE_BROWSER is set to YES. - -SOURCE_TOOLTIPS = YES - -# If the USE_HTAGS tag is set to YES then the references to source code will -# point to the HTML generated by the htags(1) tool instead of doxygen built-in -# source browser. The htags tool is part of GNU's global source tagging system -# (see http://www.gnu.org/software/global/global.html). You will need version -# 4.8.6 or higher. -# -# To use it do the following: -# - Install the latest version of global -# - Enable SOURCE_BROWSER and USE_HTAGS in the config file -# - Make sure the INPUT points to the root of the source tree -# - Run doxygen as normal -# -# Doxygen will invoke htags (and that will in turn invoke gtags), so these -# tools must be available from the command line (i.e. in the search path). -# -# The result: instead of the source browser generated by doxygen, the links to -# source code will now point to the output of htags. -# The default value is: NO. -# This tag requires that the tag SOURCE_BROWSER is set to YES. - -USE_HTAGS = NO - -# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a -# verbatim copy of the header file for each class for which an include is -# specified. Set to NO to disable this. -# See also: Section \class. -# The default value is: YES. - -VERBATIM_HEADERS = YES - -# If the CLANG_ASSISTED_PARSING tag is set to YES, then doxygen will use the -# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the -# cost of reduced performance. This can be particularly helpful with template -# rich C++ code for which doxygen's built-in parser lacks the necessary type -# information. -# Note: The availability of this option depends on whether or not doxygen was -# compiled with the --with-libclang option. -# The default value is: NO. - -CLANG_ASSISTED_PARSING = NO - -# If clang assisted parsing is enabled you can provide the compiler with command -# line options that you would normally use when invoking the compiler. Note that -# the include paths will already be set by doxygen for the files and directories -# specified with INPUT and INCLUDE_PATH. -# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. - -CLANG_OPTIONS = - -#--------------------------------------------------------------------------- -# Configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all -# compounds will be generated. Enable this if the project contains a lot of -# classes, structs, unions or interfaces. -# The default value is: YES. - -ALPHABETICAL_INDEX = YES - -# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in -# which the alphabetical index list will be split. -# Minimum value: 1, maximum value: 20, default value: 5. -# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. - -COLS_IN_ALPHA_INDEX = 5 - -# In case all classes in a project start with a common prefix, all classes will -# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag -# can be used to specify a prefix (or a list of prefixes) that should be ignored -# while generating the index headers. -# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. - -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES doxygen will generate HTML output -# The default value is: YES. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a -# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of -# it. -# The default directory is: html. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_OUTPUT = html - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each -# generated HTML page (for example: .htm, .php, .asp). -# The default value is: .html. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a user-defined HTML header file for -# each generated HTML page. If the tag is left blank doxygen will generate a -# standard header. -# -# To get valid HTML the header file that includes any scripts and style sheets -# that doxygen needs, which is dependent on the configuration options used (e.g. -# the setting GENERATE_TREEVIEW). It is highly recommended to start with a -# default header using -# doxygen -w html new_header.html new_footer.html new_stylesheet.css -# YourConfigFile -# and then modify the file new_header.html. See also section "Doxygen usage" -# for information on how to generate the default header that doxygen normally -# uses. -# Note: The header is subject to change so you typically have to regenerate the -# default header when upgrading to a newer version of doxygen. For a description -# of the possible markers and block names see the documentation. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_HEADER = - -# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each -# generated HTML page. If the tag is left blank doxygen will generate a standard -# footer. See HTML_HEADER for more information on how to generate a default -# footer and what special commands can be used inside the footer. See also -# section "Doxygen usage" for information on how to generate the default footer -# that doxygen normally uses. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_FOOTER = - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style -# sheet that is used by each HTML page. It can be used to fine-tune the look of -# the HTML output. If left blank doxygen will generate a default style sheet. -# See also section "Doxygen usage" for information on how to generate the style -# sheet that doxygen normally uses. -# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as -# it is more robust and this tag (HTML_STYLESHEET) will in the future become -# obsolete. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_STYLESHEET = - -# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined -# cascading style sheets that are included after the standard style sheets -# created by doxygen. Using this option one can overrule certain style aspects. -# This is preferred over using HTML_STYLESHEET since it does not replace the -# standard style sheet and is therefor more robust against future updates. -# Doxygen will copy the style sheet files to the output directory. -# Note: The order of the extra stylesheet files is of importance (e.g. the last -# stylesheet in the list overrules the setting of the previous ones in the -# list). For an example see the documentation. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_EXTRA_STYLESHEET = - -# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or -# other source files which should be copied to the HTML output directory. Note -# that these files will be copied to the base HTML output directory. Use the -# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these -# files. In the HTML_STYLESHEET file, use the file name only. Also note that the -# files will be copied as-is; there are no commands or markers available. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_EXTRA_FILES = - -# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen -# will adjust the colors in the stylesheet and background images according to -# this color. Hue is specified as an angle on a colorwheel, see -# http://en.wikipedia.org/wiki/Hue for more information. For instance the value -# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 -# purple, and 360 is red again. -# Minimum value: 0, maximum value: 359, default value: 220. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_COLORSTYLE_HUE = 220 - -# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors -# in the HTML output. For a value of 0 the output will use grayscales only. A -# value of 255 will produce the most vivid colors. -# Minimum value: 0, maximum value: 255, default value: 100. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_COLORSTYLE_SAT = 100 - -# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the -# luminance component of the colors in the HTML output. Values below 100 -# gradually make the output lighter, whereas values above 100 make the output -# darker. The value divided by 100 is the actual gamma applied, so 80 represents -# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not -# change the gamma. -# Minimum value: 40, maximum value: 240, default value: 80. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_COLORSTYLE_GAMMA = 80 - -# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML -# page will contain the date and time when the page was generated. Setting this -# to NO can help when comparing the output of multiple runs. -# The default value is: YES. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_TIMESTAMP = YES - -# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML -# documentation will contain sections that can be hidden and shown after the -# page has loaded. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_DYNAMIC_SECTIONS = NO - -# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries -# shown in the various tree structured indices initially; the user can expand -# and collapse entries dynamically later on. Doxygen will expand the tree to -# such a level that at most the specified number of entries are visible (unless -# a fully collapsed tree already exceeds this amount). So setting the number of -# entries 1 will produce a full collapsed tree by default. 0 is a special value -# representing an infinite number of entries and will result in a full expanded -# tree by default. -# Minimum value: 0, maximum value: 9999, default value: 100. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_INDEX_NUM_ENTRIES = 100 - -# If the GENERATE_DOCSET tag is set to YES, additional index files will be -# generated that can be used as input for Apple's Xcode 3 integrated development -# environment (see: http://developer.apple.com/tools/xcode/), introduced with -# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a -# Makefile in the HTML output directory. Running make will produce the docset in -# that directory and running make install will install the docset in -# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at -# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html -# for more information. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_DOCSET = NO - -# This tag determines the name of the docset feed. A documentation feed provides -# an umbrella under which multiple documentation sets from a single provider -# (such as a company or product suite) can be grouped. -# The default value is: Doxygen generated docs. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_FEEDNAME = "Doxygen generated docs" - -# This tag specifies a string that should uniquely identify the documentation -# set bundle. This should be a reverse domain-name style string, e.g. -# com.mycompany.MyDocSet. Doxygen will append .docset to the name. -# The default value is: org.doxygen.Project. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_BUNDLE_ID = org.doxygen.Project - -# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify -# the documentation publisher. This should be a reverse domain-name style -# string, e.g. com.mycompany.MyDocSet.documentation. -# The default value is: org.doxygen.Publisher. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_PUBLISHER_ID = org.doxygen.Publisher - -# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. -# The default value is: Publisher. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_PUBLISHER_NAME = Publisher - -# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three -# additional HTML index files: index.hhp, index.hhc, and index.hhk. The -# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop -# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on -# Windows. -# -# The HTML Help Workshop contains a compiler that can convert all HTML output -# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML -# files are now used as the Windows 98 help format, and will replace the old -# Windows help format (.hlp) on all Windows platforms in the future. Compressed -# HTML files also contain an index, a table of contents, and you can search for -# words in the documentation. The HTML workshop also contains a viewer for -# compressed HTML files. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_HTMLHELP = NO - -# The CHM_FILE tag can be used to specify the file name of the resulting .chm -# file. You can add a path in front of the file if the result should not be -# written to the html output directory. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -CHM_FILE = - -# The HHC_LOCATION tag can be used to specify the location (absolute path -# including file name) of the HTML help compiler ( hhc.exe). If non-empty -# doxygen will try to run the HTML help compiler on the generated index.hhp. -# The file has to be specified with full path. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -HHC_LOCATION = - -# The GENERATE_CHI flag controls if a separate .chi index file is generated ( -# YES) or that it should be included in the master .chm file ( NO). -# The default value is: NO. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -GENERATE_CHI = NO - -# The CHM_INDEX_ENCODING is used to encode HtmlHelp index ( hhk), content ( hhc) -# and project file content. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -CHM_INDEX_ENCODING = - -# The BINARY_TOC flag controls whether a binary table of contents is generated ( -# YES) or a normal table of contents ( NO) in the .chm file. Furthermore it -# enables the Previous and Next buttons. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members to -# the table of contents of the HTML help documentation and to the tree view. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -TOC_EXPAND = NO - -# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and -# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that -# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help -# (.qch) of the generated HTML documentation. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_QHP = NO - -# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify -# the file name of the resulting .qch file. The path specified is relative to -# the HTML output folder. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QCH_FILE = - -# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help -# Project output. For more information please see Qt Help Project / Namespace -# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). -# The default value is: org.doxygen.Project. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_NAMESPACE = org.doxygen.Project - -# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt -# Help Project output. For more information please see Qt Help Project / Virtual -# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- -# folders). -# The default value is: doc. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_VIRTUAL_FOLDER = doc - -# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom -# filter to add. For more information please see Qt Help Project / Custom -# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- -# filters). -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_CUST_FILTER_NAME = - -# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the -# custom filter to add. For more information please see Qt Help Project / Custom -# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- -# filters). -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_CUST_FILTER_ATTRS = - -# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this -# project's filter section matches. Qt Help Project / Filter Attributes (see: -# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_SECT_FILTER_ATTRS = - -# The QHG_LOCATION tag can be used to specify the location of Qt's -# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the -# generated .qhp file. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHG_LOCATION = - -# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be -# generated, together with the HTML files, they form an Eclipse help plugin. To -# install this plugin and make it available under the help contents menu in -# Eclipse, the contents of the directory containing the HTML and XML files needs -# to be copied into the plugins directory of eclipse. The name of the directory -# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. -# After copying Eclipse needs to be restarted before the help appears. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_ECLIPSEHELP = NO - -# A unique identifier for the Eclipse help plugin. When installing the plugin -# the directory name containing the HTML and XML files should also have this -# name. Each documentation set should have its own identifier. -# The default value is: org.doxygen.Project. -# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. - -ECLIPSE_DOC_ID = org.doxygen.Project - -# If you want full control over the layout of the generated HTML pages it might -# be necessary to disable the index and replace it with your own. The -# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top -# of each HTML page. A value of NO enables the index and the value YES disables -# it. Since the tabs in the index contain the same information as the navigation -# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -DISABLE_INDEX = NO - -# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index -# structure should be generated to display hierarchical information. If the tag -# value is set to YES, a side panel will be generated containing a tree-like -# index structure (just like the one that is generated for HTML Help). For this -# to work a browser that supports JavaScript, DHTML, CSS and frames is required -# (i.e. any modern browser). Windows users are probably better off using the -# HTML help feature. Via custom stylesheets (see HTML_EXTRA_STYLESHEET) one can -# further fine-tune the look of the index. As an example, the default style -# sheet generated by doxygen has an example that shows how to put an image at -# the root of the tree instead of the PROJECT_NAME. Since the tree basically has -# the same information as the tab index, you could consider setting -# DISABLE_INDEX to YES when enabling this option. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_TREEVIEW = NO - -# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that -# doxygen will group on one line in the generated HTML documentation. -# -# Note that a value of 0 will completely suppress the enum values from appearing -# in the overview section. -# Minimum value: 0, maximum value: 20, default value: 4. -# This tag requires that the tag GENERATE_HTML is set to YES. - -ENUM_VALUES_PER_LINE = 4 - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used -# to set the initial width (in pixels) of the frame in which the tree is shown. -# Minimum value: 0, maximum value: 1500, default value: 250. -# This tag requires that the tag GENERATE_HTML is set to YES. - -TREEVIEW_WIDTH = 250 - -# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open links to -# external symbols imported via tag files in a separate window. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -EXT_LINKS_IN_WINDOW = NO - -# Use this tag to change the font size of LaTeX formulas included as images in -# the HTML documentation. When you change the font size after a successful -# doxygen run you need to manually remove any form_*.png images from the HTML -# output directory to force them to be regenerated. -# Minimum value: 8, maximum value: 50, default value: 10. -# This tag requires that the tag GENERATE_HTML is set to YES. - -FORMULA_FONTSIZE = 10 - -# Use the FORMULA_TRANPARENT tag to determine whether or not the images -# generated for formulas are transparent PNGs. Transparent PNGs are not -# supported properly for IE 6.0, but are supported on all modern browsers. -# -# Note that when changing this option you need to delete any form_*.png files in -# the HTML output directory before the changes have effect. -# The default value is: YES. -# This tag requires that the tag GENERATE_HTML is set to YES. - -FORMULA_TRANSPARENT = YES - -# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see -# http://www.mathjax.org) which uses client side Javascript for the rendering -# instead of using prerendered bitmaps. Use this if you do not have LaTeX -# installed or if you want to formulas look prettier in the HTML output. When -# enabled you may also need to install MathJax separately and configure the path -# to it using the MATHJAX_RELPATH option. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -USE_MATHJAX = NO - -# When MathJax is enabled you can set the default output format to be used for -# the MathJax output. See the MathJax site (see: -# http://docs.mathjax.org/en/latest/output.html) for more details. -# Possible values are: HTML-CSS (which is slower, but has the best -# compatibility), NativeMML (i.e. MathML) and SVG. -# The default value is: HTML-CSS. -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_FORMAT = HTML-CSS - -# When MathJax is enabled you need to specify the location relative to the HTML -# output directory using the MATHJAX_RELPATH option. The destination directory -# should contain the MathJax.js script. For instance, if the mathjax directory -# is located at the same level as the HTML output directory, then -# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax -# Content Delivery Network so you can quickly see the result without installing -# MathJax. However, it is strongly recommended to install a local copy of -# MathJax from http://www.mathjax.org before deployment. -# The default value is: http://cdn.mathjax.org/mathjax/latest. -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest - -# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax -# extension names that should be enabled during MathJax rendering. For example -# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_EXTENSIONS = - -# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces -# of code that will be used on startup of the MathJax code. See the MathJax site -# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an -# example see the documentation. -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_CODEFILE = - -# When the SEARCHENGINE tag is enabled doxygen will generate a search box for -# the HTML output. The underlying search engine uses javascript and DHTML and -# should work on any modern browser. Note that when using HTML help -# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) -# there is already a search function so this one should typically be disabled. -# For large projects the javascript based search engine can be slow, then -# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to -# search using the keyboard; to jump to the search box use + S -# (what the is depends on the OS and browser, but it is typically -# , /

    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%0AIs(}_r8pN* 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 diff --git a/build/tools/docu/SparkLanguage.dll b/build/tools/docu/SparkLanguage.dll deleted file mode 100644 index 334e9e4eeb5a54547330d8f2b1cc3573f5092cdb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21504 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 diff --git a/build/tools/docu/StructureMap.dll b/build/tools/docu/StructureMap.dll deleted file mode 100644 index a8e84e553b884b6bd2ea01cf8ba12631b6788b1e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 217088 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 T7-(Rifq@1F8W{Nhfr0-8GiHb& diff --git a/build/tools/docu/docu.exe b/build/tools/docu/docu.exe deleted file mode 100644 index 76e95d1e37dd5508a872071da057a2a74d14a833..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 110592 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 diff --git a/build/tools/docu/docu.exe.config b/build/tools/docu/docu.exe.config deleted file mode 100644 index e36560333..000000000 --- a/build/tools/docu/docu.exe.config +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/build/tools/docu/templates/!namespace/!type.htm.spark b/build/tools/docu/templates/!namespace/!type.htm.spark deleted file mode 100644 index c9805e1c2..000000000 --- a/build/tools/docu/templates/!namespace/!type.htm.spark +++ /dev/null @@ -1,82 +0,0 @@ - - - - - ${h(Type.PrettyName)} - ${WriteProductName(Assemblies[0])} Documentation - - - - - - - - -

    /// - /// The name of the plugin to get the settings for. Override settings by adding appsettings in web.config using the format ImageProcessor.<.pluginname.>.<settingKey> e.g. 'ImageProcessor.GaussianBlur.MaxSize'. The key must exist in the config section for the appsetting to apply" + /// The name of the plugin to get the settings for. Override settings by adding appsettings in web.config using the format + /// ImageProcessor.<.plugin-name.>.<settingKey> e.g. 'ImageProcessor.GaussianBlur.MaxSize'. + /// The key must exist in the config section for the appsetting to apply" /// /// /// The for the given plugin. From 8179758fb0e484e7fd84c3f868072438ec998c0e Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Tue, 30 Jan 2018 22:22:27 +1100 Subject: [PATCH 051/113] Fix #647 --- .../Quantizers/WuQuantizer/WuQuantizer.cs | 2 +- .../Quantizers/WuQuantizer/WuQuantizerBase.cs | 64 +++++++++++++++---- 2 files changed, 54 insertions(+), 12 deletions(-) diff --git a/src/ImageProcessor/Imaging/Quantizers/WuQuantizer/WuQuantizer.cs b/src/ImageProcessor/Imaging/Quantizers/WuQuantizer/WuQuantizer.cs index 55ff95312..382e8d6f0 100644 --- a/src/ImageProcessor/Imaging/Quantizers/WuQuantizer/WuQuantizer.cs +++ b/src/ImageProcessor/Imaging/Quantizers/WuQuantizer/WuQuantizer.cs @@ -109,7 +109,7 @@ private static IEnumerable IndexedPixels(ImageBuffer image, Color32[] lo { Color32 pixel = pixelLine[i]; byte bestMatch = fallback; - if (pixel.A > alphaThreshold) + if (pixel.A >= alphaThreshold) { bestMatch = lookup.GetPaletteIndex(pixel); paletteHistogram[bestMatch].AddPixel(pixel); diff --git a/src/ImageProcessor/Imaging/Quantizers/WuQuantizer/WuQuantizerBase.cs b/src/ImageProcessor/Imaging/Quantizers/WuQuantizer/WuQuantizerBase.cs index 40d0e2fc7..09c8f7c24 100644 --- a/src/ImageProcessor/Imaging/Quantizers/WuQuantizer/WuQuantizerBase.cs +++ b/src/ImageProcessor/Imaging/Quantizers/WuQuantizer/WuQuantizerBase.cs @@ -68,6 +68,48 @@ public abstract class WuQuantizerBase : IWuQuantizer ///
    private const int MaxSideIndex = 32; + /// + /// The transparency threshold. + /// + private byte threshold = 0; + + /// + /// The transparency fade. + /// + private byte fade = 1; + + /// + /// Gets or sets the transparency threshold (0 - 255) + /// + public byte Threshold + { + get + { + return this.threshold; + } + + set + { + this.threshold = value; + } + } + + /// + /// Gets or sets the alpha fade (0 - 255) + /// + public byte Fade + { + get + { + return this.fade; + } + + set + { + this.fade = value; + } + } + /// /// Quantize an image and return the resulting output bitmap /// @@ -79,7 +121,7 @@ public abstract class WuQuantizerBase : IWuQuantizer /// public Bitmap Quantize(Image source) { - return this.Quantize(source, 0, 1); + return this.Quantize(source, this.Threshold, this.Fade); } /// @@ -209,7 +251,7 @@ public Bitmap Quantize(Image source, int alphaThreshold, int alphaFader, Histogr [SuppressMessage("StyleCop.CSharp.SpacingRules", "SA1001:CommasMustBeSpacedCorrectly", Justification = "Reviewed. Suppression is OK here.")] private static void BuildHistogram(Histogram histogram, ImageBuffer imageBuffer, int alphaThreshold, int alphaFader) { - ColorMoment[, , ,] moments = histogram.Moments; + ColorMoment[,,,] moments = histogram.Moments; foreach (Color32[] pixelLine in imageBuffer.PixelLines) { @@ -248,7 +290,7 @@ private static void BuildHistogram(Histogram histogram, ImageBuffer imageBuffer, /// The three dimensional array of to process. /// [SuppressMessage("StyleCop.CSharp.SpacingRules", "SA1001:CommasMustBeSpacedCorrectly", Justification = "Reviewed. Suppression is OK here.")] - private static void CalculateMoments(ColorMoment[, , ,] moments) + private static void CalculateMoments(ColorMoment[,,,] moments) { ColorMoment[,] areaSquared = new ColorMoment[SideSize, SideSize]; ColorMoment[] area = new ColorMoment[SideSize]; @@ -294,7 +336,7 @@ private static void CalculateMoments(ColorMoment[, , ,] moments) /// The representing the top of the cube. /// [SuppressMessage("StyleCop.CSharp.SpacingRules", "SA1001:CommasMustBeSpacedCorrectly", Justification = "Reviewed. Suppression is OK here.")] - private static ColorMoment Top(Box cube, int direction, int position, ColorMoment[, , ,] moment) + private static ColorMoment Top(Box cube, int direction, int position, ColorMoment[,,,] moment) { switch (direction) { @@ -359,7 +401,7 @@ private static ColorMoment Top(Box cube, int direction, int position, ColorMomen /// The representing the bottom of the cube. /// [SuppressMessage("StyleCop.CSharp.SpacingRules", "SA1001:CommasMustBeSpacedCorrectly", Justification = "Reviewed. Suppression is OK here.")] - private static ColorMoment Bottom(Box cube, int direction, ColorMoment[, , ,] moment) + private static ColorMoment Bottom(Box cube, int direction, ColorMoment[,,,] moment) { switch (direction) { @@ -433,7 +475,7 @@ private static ColorMoment Bottom(Box cube, int direction, ColorMoment[, , ,] mo /// The representing the sum. /// [SuppressMessage("StyleCop.CSharp.SpacingRules", "SA1001:CommasMustBeSpacedCorrectly", Justification = "Reviewed. Suppression is OK here.")] - private static CubeCut Maximize(ColorMoment[, , ,] moments, Box cube, int direction, byte first, byte last, ColorMoment whole) + private static CubeCut Maximize(ColorMoment[,,,] moments, Box cube, int direction, byte first, byte last, ColorMoment whole) { ColorMoment bottom = Bottom(cube, direction, moments); float result = 0.0f; @@ -481,7 +523,7 @@ private static CubeCut Maximize(ColorMoment[, , ,] moments, Box cube, int direct /// The indicating the result. /// [SuppressMessage("StyleCop.CSharp.SpacingRules", "SA1001:CommasMustBeSpacedCorrectly", Justification = "Reviewed. Suppression is OK here.")] - private static bool Cut(ColorMoment[, , ,] moments, ref Box first, ref Box second) + private static bool Cut(ColorMoment[,,,] moments, ref Box first, ref Box second) { int direction; ColorMoment whole = Volume(moments, first); @@ -591,7 +633,7 @@ private static bool Cut(ColorMoment[, , ,] moments, ref Box first, ref Box secon /// The representing the variance. /// [SuppressMessage("StyleCop.CSharp.SpacingRules", "SA1001:CommasMustBeSpacedCorrectly", Justification = "Reviewed. Suppression is OK here.")] - private static float CalculateVariance(ColorMoment[, , ,] moments, Box cube) + private static float CalculateVariance(ColorMoment[,,,] moments, Box cube) { ColorMoment volume = Volume(moments, cube); return volume.Variance(); @@ -610,7 +652,7 @@ private static float CalculateVariance(ColorMoment[, , ,] moments, Box cube) /// The representing the volume. /// [SuppressMessage("StyleCop.CSharp.SpacingRules", "SA1001:CommasMustBeSpacedCorrectly", Justification = "Reviewed. Suppression is OK here.")] - private static ColorMoment Volume(ColorMoment[, , ,] moments, Box cube) + private static ColorMoment Volume(ColorMoment[,,,] moments, Box cube) { return (moments[cube.AlphaMaximum, cube.RedMaximum, cube.GreenMaximum, cube.BlueMaximum] - moments[cube.AlphaMaximum, cube.RedMaximum, cube.GreenMinimum, cube.BlueMaximum] - @@ -644,7 +686,7 @@ private static ColorMoment Volume(ColorMoment[, , ,] moments, Box cube) /// The array . /// [SuppressMessage("StyleCop.CSharp.SpacingRules", "SA1001:CommasMustBeSpacedCorrectly", Justification = "Reviewed. Suppression is OK here.")] - private static Box[] SplitData(ref int colorCount, ColorMoment[, , ,] moments) + private static Box[] SplitData(ref int colorCount, ColorMoment[,,,] moments) { --colorCount; int next = 0; @@ -706,7 +748,7 @@ private static Box[] SplitData(ref int colorCount, ColorMoment[, , ,] moments) /// The array of . /// [SuppressMessage("StyleCop.CSharp.SpacingRules", "SA1001:CommasMustBeSpacedCorrectly", Justification = "Reviewed. Suppression is OK here.")] - private static Color32[] BuildLookups(Box[] cubes, ColorMoment[, , ,] moments) + private static Color32[] BuildLookups(Box[] cubes, ColorMoment[,,,] moments) { Color32[] lookups = new Color32[cubes.Length]; From 70664b3858c77d841b802fdc480dc1222ce47151 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Tue, 30 Jan 2018 22:46:25 +1100 Subject: [PATCH 052/113] Fix build script --- build/build.ps1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/build.ps1 b/build/build.ps1 index 965f13f05..59edd630c 100644 --- a/build/build.ps1 +++ b/build/build.ps1 @@ -44,7 +44,7 @@ $imageprocessorWeb = @{ $imageprocessorWebConfig = @{ version = "2.4.0.${buildNumber}" - nuspec = Join-Path $nuspecsPath "ImageProcessor.Web.nuspec" + nuspec = Join-Path $nuspecsPath "ImageProcessor.Web.Config.nuspec" }; $imageProcessorWebPluginsAzureBlobCache = @{ From 809f2b0763441f307c6a00ee10cea5f6cd4b9d4b Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Tue, 30 Jan 2018 23:10:01 +1100 Subject: [PATCH 053/113] Fix nuspec --- build/NuSpecs/ImageProcessor.Web.Plugins.AzureBlobCache.nuspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/NuSpecs/ImageProcessor.Web.Plugins.AzureBlobCache.nuspec b/build/NuSpecs/ImageProcessor.Web.Plugins.AzureBlobCache.nuspec index cb78803da..bd4cbb0b9 100644 --- a/build/NuSpecs/ImageProcessor.Web.Plugins.AzureBlobCache.nuspec +++ b/build/NuSpecs/ImageProcessor.Web.Plugins.AzureBlobCache.nuspec @@ -24,7 +24,7 @@ - + From 71c5cb39bda2ee800968c62f1c16a0ce13a5d83e Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Tue, 20 Feb 2018 12:38:45 +1100 Subject: [PATCH 054/113] Make IsUpdatedAsync protected virtual #604 --- .../AzureBlobCache.cs | 114 +++++++++--------- src/ImageProcessor.Web/Caching/DiskCache.cs | 78 ++++++------ 2 files changed, 96 insertions(+), 96 deletions(-) diff --git a/src/ImageProcessor.Web.Plugins.AzureBlobCache/AzureBlobCache.cs b/src/ImageProcessor.Web.Plugins.AzureBlobCache/AzureBlobCache.cs index b55854587..bc95c8a6c 100644 --- a/src/ImageProcessor.Web.Plugins.AzureBlobCache/AzureBlobCache.cs +++ b/src/ImageProcessor.Web.Plugins.AzureBlobCache/AzureBlobCache.cs @@ -306,63 +306,6 @@ CloudBlockBlob blob in return Task.FromResult(0); } - /// - /// Returns a value indicating whether the requested image has been updated. - /// - /// The creation date. - /// The - private async Task IsUpdatedAsync(DateTime creationDate) - { - bool isUpdated = false; - - try - { - if (new Uri(this.RequestPath).IsFile) - { - if (File.Exists(this.RequestPath)) - { - // If it's newer than the cached file then it must be an update. - isUpdated = File.GetLastWriteTimeUtc(this.RequestPath) > creationDate; - } - } - else if (cloudSourceBlobContainer != null) - { - string container = RemoteRegex.Replace(cloudSourceBlobContainer.Uri.ToString(), string.Empty); - string blobPath = RemoteRegex.Replace(this.RequestPath, string.Empty); - blobPath = blobPath.Replace(container, string.Empty).TrimStart('/'); - CloudBlockBlob blockBlob = cloudSourceBlobContainer.GetBlockBlobReference(blobPath); - - if (await blockBlob.ExistsAsync()) - { - // Pull the latest info. - await blockBlob.FetchAttributesAsync(); - - if (blockBlob.Properties.LastModified.HasValue) - { - isUpdated = blockBlob.Properties.LastModified.Value.UtcDateTime > creationDate; - } - } - } - else - { - // Try and get the headers for the file, this should allow cache busting for remote files. - HttpWebRequest request = (HttpWebRequest)WebRequest.Create(this.RequestPath); - request.Method = "HEAD"; - - using (HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync()) - { - isUpdated = response.LastModified.ToUniversalTime() > creationDate; - } - } - } - catch - { - isUpdated = false; - } - - return isUpdated; - } - /// /// Rewrites the path to point to the cached image. /// @@ -497,6 +440,63 @@ public override void RewritePath(HttpContext context) } } + /// + /// Returns a value indicating whether the requested image has been updated. + /// + /// The creation date. + /// The + protected virtual async Task IsUpdatedAsync(DateTime creationDate) + { + bool isUpdated = false; + + try + { + if (new Uri(this.RequestPath).IsFile) + { + if (File.Exists(this.RequestPath)) + { + // If it's newer than the cached file then it must be an update. + isUpdated = File.GetLastWriteTimeUtc(this.RequestPath) > creationDate; + } + } + else if (cloudSourceBlobContainer != null) + { + string container = RemoteRegex.Replace(cloudSourceBlobContainer.Uri.ToString(), string.Empty); + string blobPath = RemoteRegex.Replace(this.RequestPath, string.Empty); + blobPath = blobPath.Replace(container, string.Empty).TrimStart('/'); + CloudBlockBlob blockBlob = cloudSourceBlobContainer.GetBlockBlobReference(blobPath); + + if (await blockBlob.ExistsAsync()) + { + // Pull the latest info. + await blockBlob.FetchAttributesAsync(); + + if (blockBlob.Properties.LastModified.HasValue) + { + isUpdated = blockBlob.Properties.LastModified.Value.UtcDateTime > creationDate; + } + } + } + else + { + // Try and get the headers for the file, this should allow cache busting for remote files. + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(this.RequestPath); + request.Method = "HEAD"; + + using (HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync()) + { + isUpdated = response.LastModified.ToUniversalTime() > creationDate; + } + } + } + catch + { + isUpdated = false; + } + + return isUpdated; + } + /// /// Tries to set IfModifiedSince header however this crashes when context.Request.Headers["If-Modified-Since"] exists, /// but cannot be parsed. It cannot be parsed when it comes from Google Bot as UTC Sun, 27 Nov 2016 20:01:45 UTC diff --git a/src/ImageProcessor.Web/Caching/DiskCache.cs b/src/ImageProcessor.Web/Caching/DiskCache.cs index 339c9e942..3a6430a70 100644 --- a/src/ImageProcessor.Web/Caching/DiskCache.cs +++ b/src/ImageProcessor.Web/Caching/DiskCache.cs @@ -350,6 +350,45 @@ public override void RewritePath(HttpContext context) } } + /// + /// Returns a value indicating whether the requested image has been updated. + /// + /// The creation date. + /// The + protected virtual async Task IsUpdatedAsync(DateTime creationDate) + { + bool isUpdated = false; + + try + { + if (new Uri(this.RequestPath).IsFile) + { + if (File.Exists(this.RequestPath)) + { + // If it's newer than the cached file then it must be an update. + isUpdated = File.GetLastWriteTimeUtc(this.RequestPath) > creationDate; + } + } + else + { + // Try and get the headers for the file, this should allow cache busting for remote files. + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(this.RequestPath); + request.Method = "HEAD"; + + using (HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync().ConfigureAwait(false)) + { + isUpdated = response.LastModified.ToUniversalTime() > creationDate; + } + } + } + catch + { + isUpdated = false; + } + + return isUpdated; + } + /// /// The internal method that performs the actual validation which can be unit tested /// @@ -511,45 +550,6 @@ private static IEnumerable SafeEnumerateDirectories(string directoryPath return directories; } - /// - /// Returns a value indicating whether the requested image has been updated. - /// - /// The creation date. - /// The - private async Task IsUpdatedAsync(DateTime creationDate) - { - bool isUpdated = false; - - try - { - if (new Uri(this.RequestPath).IsFile) - { - if (File.Exists(this.RequestPath)) - { - // If it's newer than the cached file then it must be an update. - isUpdated = File.GetLastWriteTimeUtc(this.RequestPath) > creationDate; - } - } - else - { - // Try and get the headers for the file, this should allow cache busting for remote files. - HttpWebRequest request = (HttpWebRequest)WebRequest.Create(this.RequestPath); - request.Method = "HEAD"; - - using (HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync().ConfigureAwait(false)) - { - isUpdated = response.LastModified.ToUniversalTime() > creationDate; - } - } - } - catch - { - isUpdated = false; - } - - return isUpdated; - } - /// /// Recursively delete the directories in the folder. /// From 963d8fd21badb3c0a9d58d3a486818c2683efce1 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Tue, 20 Feb 2018 12:39:41 +1100 Subject: [PATCH 055/113] Bump version numbers --- build/build.ps1 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build/build.ps1 b/build/build.ps1 index 59edd630c..c4f78af18 100644 --- a/build/build.ps1 +++ b/build/build.ps1 @@ -35,7 +35,7 @@ $imageProcessorPluginsWebP = @{ $imageprocessorWeb = @{ name = "ImageProcessor.Web" - version = "4.9.0.${buildNumber}" + version = "4.9.1.${buildNumber}" folder = Join-Path $buildPath "src\ImageProcessor.Web" output = Join-Path $binPath "ImageProcessor.Web\lib\net452" csproj = "ImageProcessor.Web.csproj" @@ -49,7 +49,7 @@ $imageprocessorWebConfig = @{ $imageProcessorWebPluginsAzureBlobCache = @{ name = "ImageProcessor.Web.Plugins.AzureBlobCache" - version = "1.4.0.${buildNumber}" + version = "1.4.1.${buildNumber}" folder = Join-Path $buildPath "src\ImageProcessor.Web.Plugins.AzureBlobCache" output = Join-Path $binPath "ImageProcessor.Web.Plugins.AzureBlobCache\lib\net452" csproj = "ImageProcessor.Web.Plugins.AzureBlobCache.csproj" From b1b67e92c80e0b0441d0f5b3ec59b5cad65b6dc7 Mon Sep 17 00:00:00 2001 From: Per Osbeck Date: Wed, 28 Feb 2018 17:36:14 +0100 Subject: [PATCH 056/113] the inline documentation said default to "string.Empty", but the code returns "jpg". string.Empty actually sounds accurate. this commits add a parameter with default value "jpg" to make it easier to check if the requested input actually is supported or not. --- src/ImageProcessor.Web/Helpers/ImageHelpers.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/ImageProcessor.Web/Helpers/ImageHelpers.cs b/src/ImageProcessor.Web/Helpers/ImageHelpers.cs index 5dbba561b..7ec4185c3 100644 --- a/src/ImageProcessor.Web/Helpers/ImageHelpers.cs +++ b/src/ImageProcessor.Web/Helpers/ImageHelpers.cs @@ -91,10 +91,11 @@ public static bool IsValidImageExtension(string fileName) /// /// The string to parse. /// The querystring containing instructions. + /// The default value to return. /// - /// The correct file extension for the given string input if it can find one; otherwise an empty string. + /// The correct file extension for the given string input if it can find one; otherwise defaults to jpg. /// - public string GetExtension(string fullPath, string queryString) + public string GetExtension(string fullPath, string queryString, string defaultExtension = "jpg") { Match match = null; @@ -135,8 +136,7 @@ public string GetExtension(string fullPath, string queryString) return value; } - // Fall back to jpg - return "jpg"; + return defaultExtension; } /// From af29ffd2d01596e32d22d0fbd6e5549d67132639 Mon Sep 17 00:00:00 2001 From: George Paton Date: Thu, 8 Mar 2018 14:34:37 +1100 Subject: [PATCH 057/113] Use file modification time rather than creation time --- src/ImageProcessor.Web/Caching/DiskCache.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ImageProcessor.Web/Caching/DiskCache.cs b/src/ImageProcessor.Web/Caching/DiskCache.cs index 3a6430a70..9b76c1430 100644 --- a/src/ImageProcessor.Web/Caching/DiskCache.cs +++ b/src/ImageProcessor.Web/Caching/DiskCache.cs @@ -130,7 +130,7 @@ public override async Task IsNewOrUpdatedAsync() { Key = Path.GetFileNameWithoutExtension(this.CachedPath), Path = this.CachedPath, - CreationTimeUtc = File.GetCreationTimeUtc(this.CachedPath) + CreationTimeUtc = File.GetLastWriteTimeUtc(this.CachedPath) }; CacheIndexer.Add(cachedImage); From ada3e535e059c2c849796c1376326227f5634ba8 Mon Sep 17 00:00:00 2001 From: George Paton Date: Thu, 8 Mar 2018 14:37:26 +1100 Subject: [PATCH 058/113] Attempt overwriting existing file, and catch and log failures --- src/ImageProcessor.Web/Caching/DiskCache.cs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/ImageProcessor.Web/Caching/DiskCache.cs b/src/ImageProcessor.Web/Caching/DiskCache.cs index 9b76c1430..2be3a7b18 100644 --- a/src/ImageProcessor.Web/Caching/DiskCache.cs +++ b/src/ImageProcessor.Web/Caching/DiskCache.cs @@ -180,14 +180,19 @@ public override async Task AddImageToCacheAsync(Stream stream, string contentTyp // This is a hack. I don't know why there would ever be double access to the file but there is // and it's causing errors to be thrown. + // Ensure that an attempt at overwrite is still made, so cached images can be updated // https://github.com/JimBobSquarePants/ImageProcessor/issues/629 - if (!File.Exists(this.CachedPath)) + try { using (FileStream fileStream = File.Create(this.CachedPath, (int)stream.Length)) { await stream.CopyToAsync(fileStream).ConfigureAwait(false); } } + catch (Exception ex) + { + ImageProcessorBootstrapper.Instance.Logger.Log($"Unable to write to file: {this.CachedPath}, {ex.Message}"); + } } /// From e55af0a5fb5550eff90b4060210777bde40ab149 Mon Sep 17 00:00:00 2001 From: George Paton Date: Thu, 8 Mar 2018 14:41:57 +1100 Subject: [PATCH 059/113] Simplify single reference to UtcNow --- src/ImageProcessor.Web/Caching/DiskCache.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/ImageProcessor.Web/Caching/DiskCache.cs b/src/ImageProcessor.Web/Caching/DiskCache.cs index 2be3a7b18..d91376266 100644 --- a/src/ImageProcessor.Web/Caching/DiskCache.cs +++ b/src/ImageProcessor.Web/Caching/DiskCache.cs @@ -613,8 +613,7 @@ private string GetETag() if (this.cachedImageCreationTimeUtc != DateTime.MinValue) { long lastModFileTime = this.cachedImageCreationTimeUtc.ToFileTime(); - DateTime utcNow = DateTime.UtcNow; - long nowFileTime = utcNow.ToFileTime(); + long nowFileTime = DateTime.UtcNow.ToFileTime(); string hexFileTime = lastModFileTime.ToString("X8", System.Globalization.CultureInfo.InvariantCulture); if ((nowFileTime - lastModFileTime) <= 30000000) { From 49ee3c781b9a65885165522a29bd1f04ddb77e02 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Sat, 31 Mar 2018 01:04:20 +1100 Subject: [PATCH 060/113] Replace HttpWebRequest with HttpResponseMessage. Fix #651 --- .../ImageProcessorConfiguration.cs | 12 +- src/ImageProcessor.Web/Helpers/RemoteFile.cs | 267 ++++++------------ .../HttpModules/ImageProcessingModule.cs | 2 +- .../ImageProcessor.Web.csproj | 1 + .../Services/CloudImageService.cs | 100 +++---- .../Services/RemoteImageService.cs | 113 ++++---- 6 files changed, 199 insertions(+), 296 deletions(-) diff --git a/src/ImageProcessor.Web/Configuration/ImageProcessorConfiguration.cs b/src/ImageProcessor.Web/Configuration/ImageProcessorConfiguration.cs index 235eaece8..1e0c090f7 100644 --- a/src/ImageProcessor.Web/Configuration/ImageProcessorConfiguration.cs +++ b/src/ImageProcessor.Web/Configuration/ImageProcessorConfiguration.cs @@ -310,7 +310,7 @@ private void LoadImageServices() if (type == null) { - string message = $"Couldn\'t load IImageService: {config.Type}"; + string message = $"Couldn't load IImageService: {config.Type}"; ImageProcessorBootstrapper.Instance.Logger.Log(message); throw new TypeLoadException(message); } @@ -357,7 +357,7 @@ private Dictionary GetServiceSettings(string name) .ToDictionary(setting => setting.Key, setting => setting.Value); // Override the config section settings with values found in the app.config / deployment slot settings - OverrideDefaultSettingsWithAppSettingsValue(settings, name); + this.OverrideDefaultSettingsWithAppSettingsValue(settings, name); } else { @@ -429,7 +429,7 @@ private void LoadImageCache() this.ImageCacheSettings = cache.Settings .Cast() .ToDictionary(setting => setting.Key, setting => setting.Value); - + //override the settings found with values found in the app.config / deployment slot settings OverrideDefaultSettingsWithAppSettingsValue(this.ImageCacheSettings, currentCache); @@ -451,12 +451,12 @@ private void OverrideDefaultSettingsWithAppSettingsValue(Dictionary copyOfSettingsForEnumeration = new Dictionary(defaultSettings); - + // For each default setting found in the config section foreach (var setting in copyOfSettingsForEnumeration) { // Check the app settings for a key in the specified format - string appSettingKeyName = string.Format("ImageProcessor.{0}.{1}", serviceOrPluginName, setting.Key); + string appSettingKeyName = $"ImageProcessor.{serviceOrPluginName}.{setting.Key}"; if (!String.IsNullOrEmpty(ConfigurationManager.AppSettings[appSettingKeyName])) { // If the key is found in app settings use the app settings value rather than the value in the config section @@ -465,7 +465,7 @@ private void OverrideDefaultSettingsWithAppSettingsValue(Dictionary // -------------------------------------------------------------------------------------------------------------------- +using System; using System.Collections.Generic; +using System.Net; +using System.Net.Http; +using System.Security; +using System.Threading.Tasks; +using System.Web; +using ImageProcessor.Configuration; +using ImageProcessor.Web.HttpModules; namespace ImageProcessor.Web.Helpers { - using System; - using System.Globalization; - using System.Net; - using System.Security; - using System.Threading.Tasks; - using System.Web; - - using ImageProcessor.Configuration; - /// /// Encapsulates methods used to download files from a website address. /// @@ -33,234 +32,146 @@ namespace ImageProcessor.Web.Helpers /// For example, the ImageProcessingModule accepts off-server addresses as a path. An attacker could, for instance, pass the url /// to a file that's a few gigs in size, causing the server to get out-of-memory exceptions or some other errors. An attacker /// could also use this same method to use one application instance to hammer another site by, again, passing an off-server - /// address of the victims site to the ImageProcessingModule. + /// address of the victims site to the . /// This class will not throw an exception if the Uri supplied points to a resource local to the running application instance. /// - /// There shouldn't be any security issues there, as the internal WebRequest instance is still calling it remotely. + /// There shouldn't be any security issues there, as the internal instance is still calling it remotely. /// Any local files that shouldn't be accessed by this won't be allowed by the remote call. /// - /// Adapted from BlogEngine.Net /// internal sealed class RemoteFile { - #region Fields - /// - /// The maximum allowable download size in bytes. - /// - private int maxDownloadSize; - - /// - /// The length of time, in milliseconds, that a remote file download attempt can last before timing out. - /// - private int timeoutLength; - - /// - /// The WebResponse object used internally for this RemoteFile instance. - /// - private WebRequest webRequest; + private static readonly HttpClientHandler Handler = new HttpClientHandler() + { + AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate, + Credentials = CredentialCache.DefaultNetworkCredentials + }; - #endregion + private static readonly HttpClient Client = new HttpClient(Handler); - #region Constructors /// - /// Initializes a new instance of the RemoteFile class. + /// Initializes a new instance of the class. /// - /// The url of the file to be downloaded. - internal RemoteFile(Uri filePath) + /// The maximum time, in milliseconds, to wait before the request times out. + /// The maximum download size, in bytes, that a remote file download attempt can be. + public RemoteFile(int timeoutMilliseconds, int maxDownloadSize) + : this(timeoutMilliseconds, maxDownloadSize, null) { - if (filePath == null) - { - throw new ArgumentNullException(nameof(filePath)); - } - - this.Uri = filePath; } - #endregion - #region Properties /// - /// Gets the Uri of the remote file being downloaded. + /// Initializes a new instance of the class. /// - public Uri Uri { get; } - - /// - /// Gets or sets the length of time, in milliseconds, that a remote file download attempt can - /// last before timing out. - /// - /// - /// This value can only be set if the instance is supposed to ignore the remote download settings set - /// in the current application instance. - /// - /// - /// Set this value to 0 if there should be no timeout. - /// - /// - /// - public int TimeoutLength + /// The maximum time, in milliseconds, to wait before the request times out. + /// The maximum download size, in bytes, that a remote file download attempt can be. + /// The User-Agent header to be passed when requesting the remote file. + public RemoteFile(int timeoutMilliseconds, int maxDownloadSize, string userAgent) { - get + if (timeoutMilliseconds >= 0) { - return this.timeoutLength; + this.Timeout = TimeSpan.FromMilliseconds(timeoutMilliseconds); } - set + if (maxDownloadSize > 0) { - if (value < 0) - { - // ReSharper disable once NotResolvedInText - throw new ArgumentOutOfRangeException("TimeoutLength"); - } - - this.timeoutLength = value; + this.MaxDownloadSize = maxDownloadSize; } - } - /// - /// Gets or sets the maximum download size, in bytes, that a remote file download attempt can be. - /// - /// - /// This value can only be set if the instance is supposed to ignore the remote download settings set - /// in the current application instance. - /// - /// - /// Set this value to 0 if there should be no max bytes. - /// - /// - /// - public int MaxDownloadSize - { - get - { - return this.maxDownloadSize; - } + this.UserAgent = userAgent; - set + // We're reusing the same static HttpClient so we don't exhaust the number of sockets available under heavy loads. + // We're always using the same timeout, and user-agent values per all instances so it's ok to set the values here per instance. + Client.Timeout = this.Timeout; + var key = "User-Agent"; + if (!string.IsNullOrWhiteSpace(this.UserAgent) && !Client.DefaultRequestHeaders.TryGetValues(key, out var _)) { - if (value < 0) - { - // ReSharper disable once NotResolvedInText - throw new ArgumentOutOfRangeException("MaxDownloadSize"); - } - - this.maxDownloadSize = value; + Client.DefaultRequestHeaders.Add(key, this.UserAgent); } } /// - /// Gets or sets the UserAgent header to be passed when requesting the remote file + /// Gets or sets the timespan to wait before the request times out. + /// + public TimeSpan Timeout { get; } = TimeSpan.FromSeconds(100.0); + + /// + /// Gets the maximum download size, in bytes, that a remote file download attempt can be. /// - public string UserAgent { get; set; } + public int MaxDownloadSize { get; } = int.MaxValue; - #endregion + /// + /// Gets the UserAgent header to be passed when requesting the remote file + /// + public string UserAgent { get; } - #region Methods - #region Internal /// - /// Returns the WebResponse used to download this file. + /// Returns the used to download this file. /// /// - /// This method is meant for outside users who need specific access to the WebResponse this class + /// This method is meant for outside users who need specific access to the HttpResponseMessage this class /// generates. They're responsible for disposing of it. /// /// /// - /// The WebResponse used to download this file. + /// The used to download this file. /// /// The . /// - internal async Task GetWebResponseAsync() + internal async Task GetResponseAsync(Uri uri) { - WebResponse response; - try - { - response = await this.GetWebRequest().GetResponseAsync().ConfigureAwait(false); - } - catch (WebException ex) + void Log(HttpRequestException ex) { - HttpWebResponse errorResponse = (HttpWebResponse)ex.Response; - if (errorResponse?.StatusCode == HttpStatusCode.NotFound || ex.Status == WebExceptionStatus.NameResolutionFailure) - { - throw new HttpException((int)HttpStatusCode.NotFound, "No image exists at " + this.Uri, ex); - } - - if (errorResponse?.StatusCode == HttpStatusCode.NotModified) - { - response = errorResponse; - } - else - { - throw; - } + ImageProcessorBootstrapper.Instance.Logger.Log(ex.Message); } - if (response != null) + HttpResponseMessage response = null; + HttpStatusCode statusCode = HttpStatusCode.OK; + try { - long contentLength = response.ContentLength; + response = await Client.GetAsync(uri).ConfigureAwait(false); + statusCode = response.StatusCode; + response.EnsureSuccessStatusCode(); - // WebResponse.ContentLength doesn't always know the value, it returns -1 in this case. - if (contentLength == -1) + long? contentLength = response.Content.Headers.ContentLength; + if (contentLength.HasValue) { - // Response headers may still have the Content-Length inside of it. - string headerContentLength = response.Headers["Content-Length"]; - - if (!string.IsNullOrWhiteSpace(headerContentLength)) + if (contentLength > this.MaxDownloadSize) { - contentLength = long.Parse(headerContentLength, CultureInfo.InvariantCulture); + response.Dispose(); + string message = "An attempt to download a remote file has been halted because the file is larger than allowed."; + ImageProcessorBootstrapper.Instance.Logger.Log(message); + throw new SecurityException(message); } } - - // We don't need to check the url here since any external urls are available only from the web.config. - if ((this.MaxDownloadSize > 0) && (contentLength > this.MaxDownloadSize)) + else { - response.Close(); - string message = "An attempt to download a remote file has been halted because the file is larger than allowed."; - ImageProcessorBootstrapper.Instance.Logger.Log(message); - throw new SecurityException(message); + response.Dispose(); + throw new HttpException((int)HttpStatusCode.NotFound, $"No image exists at {uri}"); } - } - - return response; - } - #endregion - #region Private - /// - /// Creates the WebRequest object used internally for this RemoteFile instance. - /// - /// - /// - /// The WebRequest should not be passed outside of this instance, as it will allow tampering. Anyone - /// that needs more fine control over the downloading process should probably be using the WebRequest - /// class on its own. - /// - /// - private WebRequest GetWebRequest() - { - if (this.webRequest == null) + return response; + } + catch (HttpRequestException ex) { - HttpWebRequest request = (HttpWebRequest)WebRequest.Create(this.Uri); - request.Headers["Accept-Encoding"] = "gzip"; - request.Headers["Accept-Language"] = "en-us"; - - if (!string.IsNullOrEmpty(this.UserAgent)) + switch (statusCode) { - request.UserAgent = this.UserAgent; + // No error, carry on. + case HttpStatusCode.NotModified: + break; + case HttpStatusCode.NotFound: + + // We want 404's to be handled by IIS so that other handlers/modules can still run. + Log(ex); + response?.Dispose(); + throw new HttpException((int)statusCode, $"No image exists at {uri}", ex); + + default: + Log(ex); + break; } - - request.Credentials = CredentialCache.DefaultNetworkCredentials; - request.AutomaticDecompression = DecompressionMethods.GZip; - - if (this.TimeoutLength > 0) - { - request.Timeout = this.TimeoutLength; - } - - this.webRequest = request; } - return this.webRequest; + return null; } - #endregion - #endregion } -} +} \ No newline at end of file diff --git a/src/ImageProcessor.Web/HttpModules/ImageProcessingModule.cs b/src/ImageProcessor.Web/HttpModules/ImageProcessingModule.cs index 65bbfbd27..765725c1f 100644 --- a/src/ImageProcessor.Web/HttpModules/ImageProcessingModule.cs +++ b/src/ImageProcessor.Web/HttpModules/ImageProcessingModule.cs @@ -624,7 +624,7 @@ private async Task ProcessImageAsync(HttpContext context) } else { - // We're cachebusting. Allow the value to be cached + // We're cache-busting. Allow the value to be cached await inStream.CopyToAsync(outStream).ConfigureAwait(false); mimeType = FormatUtilities.GetFormat(outStream).MimeType; } diff --git a/src/ImageProcessor.Web/ImageProcessor.Web.csproj b/src/ImageProcessor.Web/ImageProcessor.Web.csproj index 96f83ab49..df05f493d 100644 --- a/src/ImageProcessor.Web/ImageProcessor.Web.csproj +++ b/src/ImageProcessor.Web/ImageProcessor.Web.csproj @@ -42,6 +42,7 @@ + diff --git a/src/ImageProcessor.Web/Services/CloudImageService.cs b/src/ImageProcessor.Web/Services/CloudImageService.cs index d0e48b6f5..5bdc4ccb3 100644 --- a/src/ImageProcessor.Web/Services/CloudImageService.cs +++ b/src/ImageProcessor.Web/Services/CloudImageService.cs @@ -9,36 +9,30 @@ // // -------------------------------------------------------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.IO; +using System.Net.Http; +using System.Threading.Tasks; +using ImageProcessor.Web.Caching; +using ImageProcessor.Web.Helpers; +using Microsoft.IO; + namespace ImageProcessor.Web.Services { - using System; - using System.Collections.Generic; - using System.IO; - using System.Net; - using System.Threading.Tasks; - using System.Web; - - using ImageProcessor.Web.Caching; - using ImageProcessor.Web.Helpers; - /// /// A generic cloud image service for retrieving images where the remote location has been rewritten as a /// a virtual path. Commonly seen in content management systems like Umbraco. /// public class CloudImageService : IImageService { - /// - /// Initializes a new instance of the class. - /// - public CloudImageService() + private RemoteFile remoteFile; + private Dictionary settings = new Dictionary { - this.Settings = new Dictionary - { - { "MaxBytes", "4194304" }, - { "Timeout", "30000" }, - { "Host", string.Empty } - }; - } + {"MaxBytes", "4194304"}, + {"Timeout", "30000"}, + {"Host", string.Empty} + }; /// /// Gets or sets the prefix for the given implementation. @@ -57,7 +51,15 @@ public CloudImageService() /// /// Gets or sets any additional settings required by the service. /// - public Dictionary Settings { get; set; } + public Dictionary Settings + { + get => this.settings; + set + { + this.settings = value; + this.InitRemoteFile(); + } + } /// /// Gets or sets the white list of . @@ -81,11 +83,9 @@ public virtual bool IsValidRequest(string path) /// /// Gets the image using the given identifier. /// - /// - /// The value identifying the image to fetch. - /// + /// The value identifying the image to fetch. /// - /// The array containing the image data. + /// The array containing the image data. /// public virtual async Task GetImage(object id) { @@ -104,42 +104,44 @@ public virtual async Task GetImage(object id) } } + byte[] buffer; Uri uri = new Uri(baseUri, relativeResourceUrl); - RemoteFile remoteFile = new RemoteFile(uri) + + if (this.remoteFile == null) { - MaxDownloadSize = int.Parse(this.Settings["MaxBytes"]), - TimeoutLength = int.Parse(this.Settings["Timeout"]) - }; + this.InitRemoteFile(); + } - byte[] buffer; + HttpResponseMessage httpResponse = await this.remoteFile.GetResponseAsync(uri).ConfigureAwait(false); - // Prevent response blocking. - WebResponse webResponse = await remoteFile.GetWebResponseAsync().ConfigureAwait(false); + if (httpResponse == null) + { + return null; + } - using (MemoryStream memoryStream = MemoryStreamPool.Shared.GetStream()) + using (RecyclableMemoryStream memoryStream = new RecyclableMemoryStream(MemoryStreamPool.Shared)) { - using (WebResponse response = webResponse) + using (HttpResponseMessage response = httpResponse) { - using (Stream responseStream = response.GetResponseStream()) + using (Stream responseStream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false)) { - if (responseStream != null) - { - responseStream.CopyTo(memoryStream); - - // Reset the position of the stream to ensure we're reading the correct part. - memoryStream.Position = 0; - - buffer = memoryStream.GetBuffer(); - } - else - { - throw new HttpException((int)HttpStatusCode.NotFound, $"No image exists at {uri}"); - } + responseStream.CopyTo(memoryStream); + + // Reset the position of the stream to ensure we're reading the correct part. + memoryStream.Position = 0; + buffer = memoryStream.GetBuffer(); } } } return buffer; } + + private void InitRemoteFile() + { + int timeout = int.Parse(this.Settings["Timeout"]); + int maxDownloadSize = int.Parse(this.Settings["MaxBytes"]); + this.remoteFile = new RemoteFile(timeout, maxDownloadSize); + } } } \ No newline at end of file diff --git a/src/ImageProcessor.Web/Services/RemoteImageService.cs b/src/ImageProcessor.Web/Services/RemoteImageService.cs index 0262f5b37..d7a9c096f 100644 --- a/src/ImageProcessor.Web/Services/RemoteImageService.cs +++ b/src/ImageProcessor.Web/Services/RemoteImageService.cs @@ -8,40 +8,30 @@ // // -------------------------------------------------------------------------------------------------------------------- +using System; +using System.Collections.Generic; +using System.IO; +using System.Net.Http; +using System.Threading.Tasks; +using ImageProcessor.Web.Caching; +using ImageProcessor.Web.Helpers; +using Microsoft.IO; + namespace ImageProcessor.Web.Services { - using System; - using System.Collections.Generic; - using System.IO; - using System.Net; - using System.Threading.Tasks; - using System.Web; - - using ImageProcessor.Web.Caching; - using ImageProcessor.Web.Helpers; - - using Microsoft.IO; - /// /// The remote image service. /// public class RemoteImageService : IImageService { - /// - /// Initializes a new instance of the class. - /// - public RemoteImageService() + private RemoteFile remoteFile; + private Dictionary settings = new Dictionary { - this.Settings = new Dictionary - { - { "MaxBytes", "4194304" }, - { "Timeout", "30000" }, - { "Protocol", "http" }, - { "UserAgent", string.Empty } - }; - - this.WhiteList = new Uri[] { }; - } + { "MaxBytes", "4194304" }, + { "Timeout", "30000" }, + { "Protocol", "http" }, + { "UserAgent", string.Empty } + }; /// /// Gets or sets the prefix for the given implementation. @@ -60,12 +50,20 @@ public RemoteImageService() /// /// Gets or sets any additional settings required by the service. /// - public Dictionary Settings { get; set; } + public Dictionary Settings + { + get => this.settings; + set + { + this.settings = value; + this.InitRemoteFile(); + } + } /// /// Gets or sets the white list of . /// - public Uri[] WhiteList { get; set; } + public Uri[] WhiteList { get; set; } = { }; /// /// Gets a value indicating whether the current request passes sanitizing rules. @@ -108,59 +106,50 @@ public virtual bool IsValidRequest(string path) /// /// Gets the image using the given identifier. /// - /// - /// The value identifying the image to fetch. - /// + /// The value identifying the image to fetch. /// - /// The array containing the image data. + /// The array containing the image data. /// public virtual async Task GetImage(object id) { - Uri uri = new Uri(id.ToString()); - RemoteFile remoteFile = new RemoteFile(uri) - { - MaxDownloadSize = int.Parse(this.Settings["MaxBytes"]), - TimeoutLength = int.Parse(this.Settings["Timeout"]) - }; + byte[] buffer; - // Check for optional user agesnt. - if (this.Settings.ContainsKey("Useragent")) + if (this.remoteFile == null) { - if (!string.IsNullOrWhiteSpace(this.Settings["Useragent"])) - { - remoteFile.UserAgent = this.Settings["Useragent"]; - } + this.InitRemoteFile(); } - byte[] buffer; + HttpResponseMessage httpResponse = await this.remoteFile.GetResponseAsync(new Uri(id.ToString())).ConfigureAwait(false); - // Prevent response blocking. - WebResponse webResponse = await remoteFile.GetWebResponseAsync().ConfigureAwait(false); + if (httpResponse == null) + { + return null; + } using (RecyclableMemoryStream memoryStream = new RecyclableMemoryStream(MemoryStreamPool.Shared)) { - using (WebResponse response = webResponse) + using (HttpResponseMessage response = httpResponse) { - using (Stream responseStream = response.GetResponseStream()) + using (Stream responseStream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false)) { - if (responseStream != null) - { - responseStream.CopyTo(memoryStream); - - // Reset the position of the stream to ensure we're reading the correct part. - memoryStream.Position = 0; - - buffer = memoryStream.GetBuffer(); - } - else - { - throw new HttpException((int)HttpStatusCode.NotFound, $"No image exists at {uri}"); - } + responseStream.CopyTo(memoryStream); + + // Reset the position of the stream to ensure we're reading the correct part. + memoryStream.Position = 0; + buffer = memoryStream.GetBuffer(); } } } return buffer; } + + private void InitRemoteFile() + { + int timeout = int.Parse(this.Settings["Timeout"]); + int maxDownloadSize = int.Parse(this.Settings["MaxBytes"]); + string userAgent = this.Settings["Useragent"]; + this.remoteFile = new RemoteFile(timeout, maxDownloadSize, userAgent); + } } } \ No newline at end of file From 110892d186e579717f6bb867b66b7fbc521744d1 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Sat, 31 Mar 2018 01:15:37 +1100 Subject: [PATCH 061/113] UserAgent is optional. --- src/ImageProcessor.Web/Services/RemoteImageService.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/ImageProcessor.Web/Services/RemoteImageService.cs b/src/ImageProcessor.Web/Services/RemoteImageService.cs index d7a9c096f..dd959ee60 100644 --- a/src/ImageProcessor.Web/Services/RemoteImageService.cs +++ b/src/ImageProcessor.Web/Services/RemoteImageService.cs @@ -148,7 +148,8 @@ private void InitRemoteFile() { int timeout = int.Parse(this.Settings["Timeout"]); int maxDownloadSize = int.Parse(this.Settings["MaxBytes"]); - string userAgent = this.Settings["Useragent"]; + + this.Settings.TryGetValue("Useragent", out string userAgent); this.remoteFile = new RemoteFile(timeout, maxDownloadSize, userAgent); } } From 6b113b4836cbd28153faacf60d7e669219f3284e Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Sat, 31 Mar 2018 01:31:23 +1100 Subject: [PATCH 062/113] Don't break public methods with default parameters --- .../Helpers/ImageHelpers.cs | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/ImageProcessor.Web/Helpers/ImageHelpers.cs b/src/ImageProcessor.Web/Helpers/ImageHelpers.cs index 7ec4185c3..5b2159db9 100644 --- a/src/ImageProcessor.Web/Helpers/ImageHelpers.cs +++ b/src/ImageProcessor.Web/Helpers/ImageHelpers.cs @@ -83,19 +83,29 @@ public static bool IsValidImageExtension(string fileName) return EndFormatRegex.IsMatch(fileName); } + /// + /// Returns the correct file extension for the given string input. Falls back to jpg if no extension is matched. + /// + /// The string to parse. + /// The querystring containing instructions. + /// + /// The correct file extension for the given string input if it can find one; otherwise defaults to jpg. + /// + public string GetExtension(string fullPath, string queryString) + { + return this.GetExtension(fullPath, queryString, "jpg"); + } + /// /// Returns the correct file extension for the given string input. - /// - /// Falls back to jpeg if no extension is matched. - /// /// /// The string to parse. /// The querystring containing instructions. /// The default value to return. /// - /// The correct file extension for the given string input if it can find one; otherwise defaults to jpg. + /// The correct file extension for the given string input if it can find one; otherwise . /// - public string GetExtension(string fullPath, string queryString, string defaultExtension = "jpg") + public string GetExtension(string fullPath, string queryString, string defaultExtension) { Match match = null; From f75481a00980ee9dab06b3443a066e1e59c1ef93 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Sat, 31 Mar 2018 13:54:14 +1100 Subject: [PATCH 063/113] Prevent redundant meta request. Touch #655 --- .../AzureBlobCache.cs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/ImageProcessor.Web.Plugins.AzureBlobCache/AzureBlobCache.cs b/src/ImageProcessor.Web.Plugins.AzureBlobCache/AzureBlobCache.cs index bc95c8a6c..c3e69d250 100644 --- a/src/ImageProcessor.Web.Plugins.AzureBlobCache/AzureBlobCache.cs +++ b/src/ImageProcessor.Web.Plugins.AzureBlobCache/AzureBlobCache.cs @@ -394,6 +394,14 @@ public override void RewritePath(HttpContext context) } else { + // Prevent redundant metadata request if paths match. + if (this.CachedPath == this.cachedRewritePath) + { + ImageProcessingModule.AddCorsRequestHeaders(context); + context.Response.Redirect(this.CachedPath, false); + return; + } + // Redirect the request to the blob URL request.Method = "HEAD"; request.Timeout = this.timeout; From ab706ab4075dd3f00b55d0c0a0066baaad857f94 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Sat, 31 Mar 2018 14:07:17 +1100 Subject: [PATCH 064/113] Make cache indexer timespan configurable. Fix #655 --- .../AmazonS3Cache.cs | 4 +- .../AzureBlobCache.cs | 4 +- .../Caching/CacheIndexer.cs | 1 - src/ImageProcessor.Web/Caching/DiskCache.cs | 2 +- .../Caching/ImageCacheBase.cs | 6 ++ .../Configuration/ImageCacheSection.cs | 88 ++++++++----------- .../ImageProcessorConfiguration.cs | 14 ++- 7 files changed, 56 insertions(+), 63 deletions(-) diff --git a/src/ImageProcessor.Web.Plugins.AmazonS3Cache/AmazonS3Cache.cs b/src/ImageProcessor.Web.Plugins.AmazonS3Cache/AmazonS3Cache.cs index afb5976a1..e969cfe1e 100644 --- a/src/ImageProcessor.Web.Plugins.AmazonS3Cache/AmazonS3Cache.cs +++ b/src/ImageProcessor.Web.Plugins.AmazonS3Cache/AmazonS3Cache.cs @@ -153,7 +153,7 @@ public override async Task IsNewOrUpdatedAsync() CreationTimeUtc = fileInfo.CreationTimeUtc }; - CacheIndexer.Add(cachedImage); + CacheIndexer.Add(cachedImage, this.ImageCacheMaxMinutes); } } @@ -182,7 +182,7 @@ public override async Task IsNewOrUpdatedAsync() CreationTimeUtc = response.LastModified.ToUniversalTime() }; - CacheIndexer.Add(cachedImage); + CacheIndexer.Add(cachedImage, this.ImageCacheMaxMinutes); } } catch (AmazonS3Exception) diff --git a/src/ImageProcessor.Web.Plugins.AzureBlobCache/AzureBlobCache.cs b/src/ImageProcessor.Web.Plugins.AzureBlobCache/AzureBlobCache.cs index c3e69d250..fdb8c7197 100644 --- a/src/ImageProcessor.Web.Plugins.AzureBlobCache/AzureBlobCache.cs +++ b/src/ImageProcessor.Web.Plugins.AzureBlobCache/AzureBlobCache.cs @@ -174,7 +174,7 @@ public override async Task IsNewOrUpdatedAsync() CreationTimeUtc = File.GetCreationTimeUtc(this.CachedPath) }; - CacheIndexer.Add(cachedImage); + CacheIndexer.Add(cachedImage, this.ImageCacheMaxMinutes); } } @@ -197,7 +197,7 @@ public override async Task IsNewOrUpdatedAsync() CreationTimeUtc = blockBlob.Properties.LastModified.Value.UtcDateTime }; - CacheIndexer.Add(cachedImage); + CacheIndexer.Add(cachedImage, this.ImageCacheMaxMinutes); } } } diff --git a/src/ImageProcessor.Web/Caching/CacheIndexer.cs b/src/ImageProcessor.Web/Caching/CacheIndexer.cs index d88622f8d..2ac05053d 100644 --- a/src/ImageProcessor.Web/Caching/CacheIndexer.cs +++ b/src/ImageProcessor.Web/Caching/CacheIndexer.cs @@ -124,6 +124,5 @@ public static CachedImage Add(CachedImage cachedImage, int expiry) { return Add(cachedImage, new TimeSpan(0, expiry, 0)); } - } } \ No newline at end of file diff --git a/src/ImageProcessor.Web/Caching/DiskCache.cs b/src/ImageProcessor.Web/Caching/DiskCache.cs index d91376266..2b0b62c8a 100644 --- a/src/ImageProcessor.Web/Caching/DiskCache.cs +++ b/src/ImageProcessor.Web/Caching/DiskCache.cs @@ -133,7 +133,7 @@ public override async Task IsNewOrUpdatedAsync() CreationTimeUtc = File.GetLastWriteTimeUtc(this.CachedPath) }; - CacheIndexer.Add(cachedImage); + CacheIndexer.Add(cachedImage, this.ImageCacheMaxMinutes); } } diff --git a/src/ImageProcessor.Web/Caching/ImageCacheBase.cs b/src/ImageProcessor.Web/Caching/ImageCacheBase.cs index 22e95723c..e01622635 100644 --- a/src/ImageProcessor.Web/Caching/ImageCacheBase.cs +++ b/src/ImageProcessor.Web/Caching/ImageCacheBase.cs @@ -67,6 +67,7 @@ protected ImageCacheBase(string requestPath, string fullPath, string querystring this.Settings = this.AugmentSettingsCore(config.ImageCacheSettings); this.CachedPathExpiry = config.ImageCacheRewritePathExpiry; this.MaxDays = config.ImageCacheMaxDays; + this.ImageCacheMaxMinutes = config.ImageCacheMaxMinutes; this.BrowserMaxDays = config.BrowserCacheMaxDays; this.TrimCache = config.TrimCache; this.FolderDepth = config.FolderDepth; @@ -92,6 +93,11 @@ protected ImageCacheBase(string requestPath, string fullPath, string querystring /// public int MaxDays { get; set; } + /// + /// Gets or sets the maximum number of minutes to store a cached image reference in memory. + /// + public int ImageCacheMaxMinutes { get; set; } + /// /// Gets or sets the maximum number of days to cache the image in the browser. /// diff --git a/src/ImageProcessor.Web/Configuration/ImageCacheSection.cs b/src/ImageProcessor.Web/Configuration/ImageCacheSection.cs index f82fc2630..e62b69603 100644 --- a/src/ImageProcessor.Web/Configuration/ImageCacheSection.cs +++ b/src/ImageProcessor.Web/Configuration/ImageCacheSection.cs @@ -14,7 +14,7 @@ namespace ImageProcessor.Web.Configuration using System.Configuration; using System.IO; using System.Xml; - + using ImageProcessor.Web.Helpers; /// @@ -29,15 +29,9 @@ public sealed class ImageCacheSection : ConfigurationSection [ConfigurationProperty("currentCache", DefaultValue = "DiskCache", IsRequired = true)] public string CurrentCache { - get - { - return (string)this["currentCache"]; - } + get => (string)this["currentCache"]; - set - { - this["currentCache"] = value; - } + set => this["currentCache"] = value; } /// @@ -60,9 +54,7 @@ public CacheElementCollection ImageCaches /// The cache configuration section from the current application configuration. public static ImageCacheSection GetConfiguration() { - ImageCacheSection imageCacheSection = ConfigurationManager.GetSection("imageProcessor/caching") as ImageCacheSection; - - if (imageCacheSection != null) + if (ConfigurationManager.GetSection("imageProcessor/caching") is ImageCacheSection imageCacheSection) { return imageCacheSection; } @@ -90,9 +82,9 @@ public class CacheElement : ConfigurationElement [ConfigurationProperty("name", DefaultValue = "", IsRequired = true)] public string Name { - get { return (string)this["name"]; } + get => (string)this["name"]; - set { this["name"] = value; } + set => this["name"] = value; } /// @@ -102,9 +94,9 @@ public string Name [ConfigurationProperty("type", DefaultValue = "", IsRequired = true)] public string Type { - get { return (string)this["type"]; } + get => (string)this["type"]; - set { this["type"] = value; } + set => this["type"] = value; } /// @@ -116,15 +108,23 @@ public string Type [IntegerValidator(ExcludeRange = false, MinValue = -1)] public int MaxDays { - get - { - return (int)this["maxDays"]; - } + get => (int)this["maxDays"]; - set - { - this["maxDays"] = value; - } + set => this["maxDays"] = value; + } + + /// + /// Gets or sets the maximum number of minutes to store a cached image reference in memory. + /// + /// The maximum number of minutes to store a cached image reference in memory + /// Defaults to 365 if not set. + [ConfigurationProperty("maxMemoryMinutes", DefaultValue = "1", IsRequired = false)] + [IntegerValidator(ExcludeRange = false, MinValue = -1)] + public int MaxMinutes + { + get => (int)this["maxMemoryMinutes"]; + + set => this["maxMemoryMinutes"] = value; } /// @@ -138,12 +138,12 @@ public int MaxDays /// * Performance penalties if hosting on a UNC share /// * ASP.Net app domain restarts if using FCNMode="Single" since the FCN buffer can overflow /// - [ConfigurationProperty("useFileChangeMonitors", DefaultValue = false, IsRequired = false)] + [ConfigurationProperty("useFileChangeMonitors", DefaultValue = false, IsRequired = false)] public bool UseFileChangeMonitors { - get { return (bool)this["useFileChangeMonitors"]; } + get => (bool)this["useFileChangeMonitors"]; - set { this["useFileChangeMonitors"] = value; } + set => this["useFileChangeMonitors"] = value; } /// @@ -166,10 +166,7 @@ public int BrowserMaxDays return maxDays; } - set - { - this["browserMaxDays"] = value; - } + set => this["browserMaxDays"] = value; } /// @@ -181,15 +178,9 @@ public int BrowserMaxDays [PositiveTimeSpanValidator] public TimeSpan CachedRewritePathExpiry { - get - { - return (TimeSpan)this["cachedRewritePathExpiry"]; - } + get => (TimeSpan)this["cachedRewritePathExpiry"]; - set - { - this["cachedRewritePathExpiry"] = value; - } + set => this["cachedRewritePathExpiry"] = value; } /// @@ -201,9 +192,9 @@ public TimeSpan CachedRewritePathExpiry [ConfigurationProperty("trimCache", DefaultValue = true, IsRequired = false)] public bool TrimCache { - get { return (bool)this["trimCache"]; } + get => (bool)this["trimCache"]; - set { this["trimCache"] = value; } + set => this["trimCache"] = value; } /// @@ -214,15 +205,9 @@ public bool TrimCache [IntegerValidator(ExcludeRange = false, MinValue = 0)] public int FolderDepth { - get - { - return (int)this["folderDepth"]; - } + get => (int)this["folderDepth"]; - set - { - this["folderDepth"] = value; - } + set => this["folderDepth"] = value; } /// @@ -267,10 +252,7 @@ public class CacheElementCollection : ConfigurationElementCollection /// public CacheElement this[int index] { - get - { - return (CacheElement)BaseGet(index); - } + get => (CacheElement)this.BaseGet(index); set { diff --git a/src/ImageProcessor.Web/Configuration/ImageProcessorConfiguration.cs b/src/ImageProcessor.Web/Configuration/ImageProcessorConfiguration.cs index 1e0c090f7..afe6661d6 100644 --- a/src/ImageProcessor.Web/Configuration/ImageProcessorConfiguration.cs +++ b/src/ImageProcessor.Web/Configuration/ImageProcessorConfiguration.cs @@ -91,10 +91,15 @@ private ImageProcessorConfiguration() public Type ImageCache { get; private set; } /// - /// Gets the image cache max days. + /// Gets the maximum number of days to store an image in the cache. /// public int ImageCacheMaxDays { get; private set; } + /// + /// Gets the maximum number of minutes to store a cached image reference in memory. + /// + public int ImageCacheMaxMinutes { get; private set; } + /// /// Gets the value indicating if the disk cache will apply file change monitors that can be used to invalidate the cache /// @@ -414,13 +419,14 @@ private void LoadImageCache() if (type == null) { - string message = $"Couldn\'t load IImageCache: {cache.Type}"; + string message = $"Couldn't load IImageCache: {cache.Type}"; ImageProcessorBootstrapper.Instance.Logger.Log(message); throw new TypeLoadException(message); } this.ImageCache = type; this.ImageCacheMaxDays = cache.MaxDays; + this.ImageCacheMaxMinutes = cache.MaxMinutes; this.UseFileChangeMonitors = cache.UseFileChangeMonitors; this.BrowserCacheMaxDays = cache.BrowserMaxDays; this.TrimCache = cache.TrimCache; @@ -430,8 +436,8 @@ private void LoadImageCache() .Cast() .ToDictionary(setting => setting.Key, setting => setting.Value); - //override the settings found with values found in the app.config / deployment slot settings - OverrideDefaultSettingsWithAppSettingsValue(this.ImageCacheSettings, currentCache); + // Override the settings found with values found in the app.config / deployment slot settings + this.OverrideDefaultSettingsWithAppSettingsValue(this.ImageCacheSettings, currentCache); break; } From 8b3d7c965b40d56a0120ed0c1a445185e75e1871 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Sat, 31 Mar 2018 14:08:07 +1100 Subject: [PATCH 065/113] Bump version numbers --- build/build.ps1 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build/build.ps1 b/build/build.ps1 index c4f78af18..be42b171b 100644 --- a/build/build.ps1 +++ b/build/build.ps1 @@ -35,7 +35,7 @@ $imageProcessorPluginsWebP = @{ $imageprocessorWeb = @{ name = "ImageProcessor.Web" - version = "4.9.1.${buildNumber}" + version = "4.9.2.${buildNumber}" folder = Join-Path $buildPath "src\ImageProcessor.Web" output = Join-Path $binPath "ImageProcessor.Web\lib\net452" csproj = "ImageProcessor.Web.csproj" @@ -49,7 +49,7 @@ $imageprocessorWebConfig = @{ $imageProcessorWebPluginsAzureBlobCache = @{ name = "ImageProcessor.Web.Plugins.AzureBlobCache" - version = "1.4.1.${buildNumber}" + version = "1.4.2.${buildNumber}" folder = Join-Path $buildPath "src\ImageProcessor.Web.Plugins.AzureBlobCache" output = Join-Path $binPath "ImageProcessor.Web.Plugins.AzureBlobCache\lib\net452" csproj = "ImageProcessor.Web.Plugins.AzureBlobCache.csproj" From 9bdb270ca285da2680c601d3800c28e059f4a979 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Fri, 6 Apr 2018 15:17:02 +1000 Subject: [PATCH 066/113] Add MetaDataMode. Fix #585 --- .../Configuration/ImageProcessingSection.cs | 56 +++--- .../ImageProcessorConfiguration.cs | 5 + .../Resources/processing.config.transform | 2 +- .../HttpModules/ImageProcessingModule.cs | 13 +- src/ImageProcessor/ImageFactory.cs | 187 +++++++++--------- src/ImageProcessor/ImageProcessor.csproj | 6 +- .../MetaData/ExifPropertyTagConstants.cs | 87 ++++++++ src/ImageProcessor/MetaDataMode.cs | 40 ++++ tests/ImageProcessor.Playground/Program.cs | 2 +- .../config/imageprocessor/processing.config | 2 +- 10 files changed, 280 insertions(+), 120 deletions(-) create mode 100644 src/ImageProcessor/Imaging/MetaData/ExifPropertyTagConstants.cs create mode 100644 src/ImageProcessor/MetaDataMode.cs diff --git a/src/ImageProcessor.Web/Configuration/ImageProcessingSection.cs b/src/ImageProcessor.Web/Configuration/ImageProcessingSection.cs index 03b8da4b9..afed7dad5 100644 --- a/src/ImageProcessor.Web/Configuration/ImageProcessingSection.cs +++ b/src/ImageProcessor.Web/Configuration/ImageProcessingSection.cs @@ -29,8 +29,18 @@ public sealed class ImageProcessingSection : ConfigurationSection [ConfigurationProperty("preserveExifMetaData", IsRequired = false, DefaultValue = false)] public bool PreserveExifMetaData { - get { return (bool)this["preserveExifMetaData"]; } - set { this["preserveExifMetaData"] = value; } + get => (bool)this["preserveExifMetaData"]; + set => this["preserveExifMetaData"] = value; + } + + /// + /// Gets or sets the metadata mode to use when processing images. + /// + [ConfigurationProperty("metaDataMode", IsRequired = false, DefaultValue = MetaDataMode.None)] + public MetaDataMode MetaDataMode + { + get => (MetaDataMode)this["metaDataMode"]; + set => this["metaDataMode"] = value; } /// @@ -39,8 +49,8 @@ public bool PreserveExifMetaData [ConfigurationProperty("allowCacheBuster", IsRequired = false, DefaultValue = true)] public bool AllowCacheBuster { - get { return (bool)this["allowCacheBuster"]; } - set { this["allowCacheBuster"] = value; } + get => (bool)this["allowCacheBuster"]; + set => this["allowCacheBuster"] = value; } /// @@ -50,8 +60,8 @@ public bool AllowCacheBuster [ConfigurationProperty("fixGamma", IsRequired = false, DefaultValue = false)] public bool FixGamma { - get { return (bool)this["fixGamma"]; } - set { this["fixGamma"] = value; } + get => (bool)this["fixGamma"]; + set => this["fixGamma"] = value; } /// @@ -61,8 +71,8 @@ public bool FixGamma [ConfigurationProperty("interceptAllRequests", IsRequired = false, DefaultValue = false)] public bool InterceptAllRequests { - get { return (bool)this["interceptAllRequests"]; } - set { this["interceptAllRequests"] = value; } + get => (bool)this["interceptAllRequests"]; + set => this["interceptAllRequests"] = value; } /// @@ -120,9 +130,9 @@ public class PresetElement : ConfigurationElement [ConfigurationProperty("name", DefaultValue = "", IsRequired = true)] public string Name { - get { return (string)this["name"]; } + get => (string)this["name"]; - set { this["name"] = value; } + set => this["name"] = value; } /// @@ -132,9 +142,9 @@ public string Name [ConfigurationProperty("value", DefaultValue = "", IsRequired = true)] public string Value { - get { return (string)this["value"]; } + get => (string)this["value"]; - set { this["value"] = value; } + set => this["value"] = value; } } @@ -172,10 +182,7 @@ public class PresetElementCollection : ConfigurationElementCollection /// public PresetElement this[int index] { - get - { - return (PresetElement)BaseGet(index); - } + get => (PresetElement)BaseGet(index); set { @@ -226,9 +233,9 @@ public class PluginElement : ConfigurationElement [ConfigurationProperty("name", DefaultValue = "", IsRequired = true)] public string Name { - get { return (string)this["name"]; } + get => (string)this["name"]; - set { this["name"] = value; } + set => this["name"] = value; } /// @@ -237,9 +244,9 @@ public string Name [ConfigurationProperty("type", DefaultValue = "", IsRequired = true)] public string Type { - get { return (string)this["type"]; } + get => (string)this["type"]; - set { this["type"] = value; } + set => this["type"] = value; } /// @@ -248,9 +255,9 @@ public string Type [ConfigurationProperty("enabled", DefaultValue = "false", IsRequired = false)] public bool Enabled { - get { return (bool)this["enabled"]; } + get => (bool)this["enabled"]; - set { this["enabled"] = value; } + set => this["enabled"] = value; } /// @@ -297,10 +304,7 @@ public class PluginElementCollection : ConfigurationElementCollection /// public PluginElement this[int index] { - get - { - return (PluginElement)BaseGet(index); - } + get => (PluginElement)BaseGet(index); set { diff --git a/src/ImageProcessor.Web/Configuration/ImageProcessorConfiguration.cs b/src/ImageProcessor.Web/Configuration/ImageProcessorConfiguration.cs index afe6661d6..d2cd1e0c8 100644 --- a/src/ImageProcessor.Web/Configuration/ImageProcessorConfiguration.cs +++ b/src/ImageProcessor.Web/Configuration/ImageProcessorConfiguration.cs @@ -135,6 +135,11 @@ private ImageProcessorConfiguration() /// public bool PreserveExifMetaData => GetImageProcessingSection().PreserveExifMetaData; + /// + /// Gets the metadata mode to use when when processing images. + /// + public MetaDataMode MetaDataMode => GetImageProcessingSection().MetaDataMode; + /// /// Gets a value indicating whether to allow known cachebusters. /// diff --git a/src/ImageProcessor.Web/Configuration/Resources/processing.config.transform b/src/ImageProcessor.Web/Configuration/Resources/processing.config.transform index 6473bbc57..766c269cb 100644 --- a/src/ImageProcessor.Web/Configuration/Resources/processing.config.transform +++ b/src/ImageProcessor.Web/Configuration/Resources/processing.config.transform @@ -1,4 +1,4 @@ - + diff --git a/src/ImageProcessor.Web/HttpModules/ImageProcessingModule.cs b/src/ImageProcessor.Web/HttpModules/ImageProcessingModule.cs index 765725c1f..78b214f37 100644 --- a/src/ImageProcessor.Web/HttpModules/ImageProcessingModule.cs +++ b/src/ImageProcessor.Web/HttpModules/ImageProcessingModule.cs @@ -84,6 +84,11 @@ public class ImageProcessingModule : IHttpModule /// private static bool? preserveExifMetaData; + /// + /// The meta data mode to use. + /// + private static MetaDataMode? metaDataMode; + /// /// Whether to perform gamma correction when performing processing. /// @@ -315,6 +320,11 @@ public void Init(HttpApplication application) preserveExifMetaData = ImageProcessorConfiguration.Instance.PreserveExifMetaData; } + if (metaDataMode == null) + { + metaDataMode = ImageProcessorConfiguration.Instance.MetaDataMode; + } + if (allowCacheBuster == null) { allowCacheBuster = ImageProcessorConfiguration.Instance.AllowCacheBuster; @@ -614,9 +624,10 @@ private async Task ProcessImageAsync(HttpContext context) { // Process the image. bool exif = preserveExifMetaData != null && preserveExifMetaData.Value; + MetaDataMode metaMode = exif ? MetaDataMode.None : metaDataMode.Value; bool gamma = fixGamma != null && fixGamma.Value; - using (ImageFactory imageFactory = new ImageFactory(exif, gamma) { AnimationProcessMode = mode }) + using (ImageFactory imageFactory = new ImageFactory(metaMode, gamma) { AnimationProcessMode = mode }) { imageFactory.Load(inStream).AutoProcess(processors).Save(outStream); mimeType = imageFactory.CurrentImageFormat.MimeType; diff --git a/src/ImageProcessor/ImageFactory.cs b/src/ImageProcessor/ImageFactory.cs index bb3c79133..2a0e6d024 100644 --- a/src/ImageProcessor/ImageFactory.cs +++ b/src/ImageProcessor/ImageFactory.cs @@ -35,12 +35,16 @@ namespace ImageProcessor /// public class ImageFactory : IDisposable { - #region Fields /// /// The default quality for image files. /// private const int DefaultQuality = 90; + /// + /// Whether to preserve exif metadata + /// + private bool preserveExifData; + /// /// The backup supported image format. /// @@ -63,9 +67,7 @@ public class ImageFactory : IDisposable /// life in the Garbage Collector. /// private bool isDisposed; - #endregion - #region Constructors /// /// Initializes a new instance of the class. /// @@ -84,20 +86,40 @@ public ImageFactory(bool preserveExifData = false) /// Whether to preserve exif metadata. Defaults to false. /// /// - /// Whether to fix the gamma component of the image. Defaults to true. + /// Whether to fix the gamma component of the image. /// public ImageFactory(bool preserveExifData, bool fixGamma) + : this(preserveExifData == false ? MetaDataMode.None : MetaDataMode.All, fixGamma) + { + } + + /// + /// Initializes a new instance of the class. + /// + /// The metadata mode to use + public ImageFactory(MetaDataMode metaDataMode) + : this(metaDataMode, false) + { + } + + /// + /// Initializes a new instance of the class. + /// + /// The metadata mode to use + /// Whether to fix the gamma component of the image. + public ImageFactory(MetaDataMode metaDataMode, bool fixGamma) { - this.PreserveExifData = preserveExifData; + // Note the order here. + // We need to set MetaDataMode after PreserveExifData as the first option doesn't allow the granular control allowed by the constructor. + this.PreserveExifData = metaDataMode != MetaDataMode.None; + this.MetaDataMode = metaDataMode; this.ExifPropertyItems = new ConcurrentDictionary(); this.backupExifPropertyItems = new ConcurrentDictionary(); this.FixGamma = fixGamma; } - #endregion - #region Destructors /// - /// Finalizes an instance of the ImageFactory class. + /// Finalizes an instance of the ImageFactory class. /// /// /// Use C# destructor syntax for finalization code. @@ -113,9 +135,7 @@ public ImageFactory(bool preserveExifData, bool fixGamma) // readability and maintainability. this.Dispose(false); } - #endregion - #region Properties /// /// Gets the color depth in number of bits per pixel to save the image with. /// This can be used to change the bit depth of images that can be saved with different @@ -138,10 +158,24 @@ public ImageFactory(bool preserveExifData, bool fixGamma) /// public ISupportedImageFormat CurrentImageFormat { get; private set; } + /// + /// Gets the metadata mode. + /// + public MetaDataMode MetaDataMode { get; private set; } + /// /// Gets or sets a value indicating whether to preserve exif metadata. + /// This property is only settable for backwards compatibility. Set via the constructor instead. /// - public bool PreserveExifData { get; set; } + public bool PreserveExifData + { + get => this.preserveExifData; + set + { + this.preserveExifData = value; + this.MetaDataMode = this.preserveExifData ? MetaDataMode.All : MetaDataMode.None; + } + } /// /// Gets or sets a value indicating whether to fix the gamma component of the current image. @@ -172,9 +206,7 @@ public ImageFactory(bool preserveExifData, bool fixGamma) /// Gets or sets the stream for storing any input stream to prevent disposal. /// internal Stream InputStream { get; set; } - #endregion - #region Methods /// /// Loads the image to process. Always call this method first. /// @@ -192,7 +224,7 @@ public ImageFactory Load(Stream stream) // of the user. stream.CopyTo(memoryStream); - // Set the position to 0 afterwards. + // Set the position to 0 afterward. if (stream.CanSeek) { stream.Position = 0; @@ -227,15 +259,14 @@ public ImageFactory Load(Stream stream) this.ExifPropertyItems[id] = this.Image.GetPropertyItem(id); } - IAnimatedImageFormat imageFormat = this.CurrentImageFormat as IAnimatedImageFormat; - if (imageFormat != null) + if (this.CurrentImageFormat is IAnimatedImageFormat imageFormat) { imageFormat.AnimationProcessMode = this.AnimationProcessMode; } - this.backupExifPropertyItems = this.ExifPropertyItems; + this.backupExifPropertyItems = new ConcurrentDictionary(this.ExifPropertyItems); - // Ensure the image is in the most efficient format. + // Ensure the image is in the most efficient format but don't reserve exif data. Image formatted = this.Image.Copy(this.AnimationProcessMode); this.Image.Dispose(); @@ -275,7 +306,7 @@ public ImageFactory Load(string imagePath) // Copy the stream. fileStream.CopyTo(memoryStream); - // Set the position to 0 afterwards. + // Set the position to 0 afterward. memoryStream.Position = 0; // Set our image as the memory stream value. @@ -300,15 +331,14 @@ public ImageFactory Load(string imagePath) this.ExifPropertyItems[propertyItem.Id] = propertyItem; } - this.backupExifPropertyItems = this.ExifPropertyItems; + this.backupExifPropertyItems = new ConcurrentDictionary(this.ExifPropertyItems); - IAnimatedImageFormat imageFormat = this.CurrentImageFormat as IAnimatedImageFormat; - if (imageFormat != null) + if (this.CurrentImageFormat is IAnimatedImageFormat imageFormat) { imageFormat.AnimationProcessMode = this.AnimationProcessMode; } - // Ensure the image is in the most efficient format. + // Ensure the image is in the most efficient format but don't reserve exif data. Image formatted = this.Image.Copy(this.AnimationProcessMode); this.Image.Dispose(); @@ -367,13 +397,12 @@ public ImageFactory Load(byte[] bytes) this.ExifPropertyItems[id] = this.Image.GetPropertyItem(id); } - IAnimatedImageFormat imageFormat = this.CurrentImageFormat as IAnimatedImageFormat; - if (imageFormat != null) + if (this.CurrentImageFormat is IAnimatedImageFormat imageFormat) { imageFormat.AnimationProcessMode = this.AnimationProcessMode; } - // Ensure the image is in the most efficient format. + // Ensure the image is in the most efficient format but don't reserve exif data. Image formatted = this.Image.Copy(this.AnimationProcessMode); this.Image.Dispose(); @@ -464,7 +493,7 @@ public ImageFactory Reset() // Reset properties. this.CurrentImageFormat = this.backupFormat; - this.ExifPropertyItems = this.backupExifPropertyItems; + this.ExifPropertyItems = new ConcurrentDictionary(this.backupExifPropertyItems); this.CurrentImageFormat.Quality = DefaultQuality; Image newImage = this.backupFormat.Load(this.InputStream); @@ -481,7 +510,6 @@ public ImageFactory Reset() return this; } - #region Manipulation /// /// Changes the opacity of the current image. /// @@ -1385,7 +1413,6 @@ public ImageFactory Watermark(TextLayer textLayer) return this; } - #endregion /// /// Saves the current image to the specified file path. If the extension does not @@ -1407,28 +1434,7 @@ public ImageFactory Save(string filePath) directoryInfo.Create(); } - // Clear property items. - if (!this.PreserveExifData) - { - this.ClearExif(this.Image); - } - else - { - foreach (KeyValuePair propertItem in this.ExifPropertyItems) - { - // Nasty fix but should handle issue - // https://github.com/JimBobSquarePants/ImageProcessor/issues/571 - try - { - this.Image.SetPropertyItem(propertItem.Value); - } - catch - { - continue; - } - } - } - + this.SetMetaData(); this.Image = this.CurrentImageFormat.Save(filePath, this.Image, this.CurrentBitDepth); } @@ -1454,28 +1460,7 @@ public ImageFactory Save(Stream stream) stream.SetLength(0); } - // Clear property items. - if (!this.PreserveExifData) - { - this.ClearExif(this.Image); - } - else - { - foreach (KeyValuePair propertItem in this.ExifPropertyItems) - { - // Nasty fix but should handle issue - // https://github.com/JimBobSquarePants/ImageProcessor/issues/571 - try - { - this.Image.SetPropertyItem(propertItem.Value); - } - catch - { - continue; - } - } - } - + this.SetMetaData(); this.Image = this.CurrentImageFormat.Save(stream, this.Image, this.CurrentBitDepth); if (stream.CanSeek) { @@ -1486,7 +1471,6 @@ public ImageFactory Save(Stream stream) return this; } - #region IDisposable Members /// /// Disposes the object and frees resources for the Garbage Collector. /// @@ -1535,30 +1519,57 @@ protected virtual void Dispose(bool disposing) // Note disposing is done. this.isDisposed = true; } - #endregion - #endregion /// - /// Clears any EXIF metadata from the image + /// Sets the metadata based on the the current + /// The image /// - /// The current image. - private void ClearExif(Image image) + private void SetMetaData() { - if (image.PropertyItems.Any()) + if (this.MetaDataMode == MetaDataMode.All) { foreach (KeyValuePair item in this.ExifPropertyItems) { - // Ensure that we do not try to remove any stripped out properties - // e.g gif comments. - if (image.PropertyIdList.Contains(item.Key)) + // Handle issue https://github.com/JimBobSquarePants/ImageProcessor/issues/571 + // SetPropertyItem throws a native error if the property item is invalid for that format + // but there's no way to handle individual formats so we do a dumb try...catch... + try + { + this.Image.SetPropertyItem(item.Value); + } + catch { - // The Gif decoder specifically requires these properties so we must not delete them. - if (item.Key != (int)ExifPropertyTag.LoopCount && item.Key != (int)ExifPropertyTag.FrameDelay) - { - image.RemovePropertyItem(item.Key); - } + continue; } } + + return; + } + + ExifPropertyTag[] tags = ExifPropertyTagConstants.RequiredPropertyItems; + switch (this.MetaDataMode) + { + case MetaDataMode.Copyright: + tags = ExifPropertyTagConstants.CopyrightPropertyItems; + break; + case MetaDataMode.CopyrightAndGeolocation: + tags = ExifPropertyTagConstants.CopyrightAndGeolocationPropertyItems; + break; + } + + foreach (KeyValuePair item in this.ExifPropertyItems) + { + try + { + if (tags.Contains((ExifPropertyTag)item.Key)) + { + this.Image.SetPropertyItem(item.Value); + } + } + catch + { + continue; + } } } } diff --git a/src/ImageProcessor/ImageProcessor.csproj b/src/ImageProcessor/ImageProcessor.csproj index 78058d7a9..d887ec8b0 100644 --- a/src/ImageProcessor/ImageProcessor.csproj +++ b/src/ImageProcessor/ImageProcessor.csproj @@ -1,7 +1,7 @@  - - + + Debug AnyCPU {3B5DD734-FB7A-487D-8CE6-55E7AF9AEA7E} @@ -106,6 +106,7 @@ + @@ -162,6 +163,7 @@ + diff --git a/src/ImageProcessor/Imaging/MetaData/ExifPropertyTagConstants.cs b/src/ImageProcessor/Imaging/MetaData/ExifPropertyTagConstants.cs new file mode 100644 index 000000000..cf8c81637 --- /dev/null +++ b/src/ImageProcessor/Imaging/MetaData/ExifPropertyTagConstants.cs @@ -0,0 +1,87 @@ +// -------------------------------------------------------------------------------------------------------------------- +// +// Copyright (c) James Jackson-South. +// Licensed under the Apache License, Version 2.0. +// +// -------------------------------------------------------------------------------------------------------------------- + +using System; +using System.Linq; + +namespace ImageProcessor.Imaging.MetaData +{ + /// + /// Contains constants grouping together common property items. + /// + public class ExifPropertyTagConstants + { + /// + /// Gets all required property items. The Gif format specifically requires these properties. + /// + public static readonly ExifPropertyTag[] RequiredPropertyItems = { + ExifPropertyTag.LoopCount, ExifPropertyTag.FrameDelay + }; + + /// + /// Gets all required property items plus geolocation specific property items. + /// + public static readonly ExifPropertyTag[] GeolocationPropertyItems = RequiredPropertyItems.Union(new[]{ + ExifPropertyTag.GpsAltitude, + ExifPropertyTag.GpsAltitudeRef, + ExifPropertyTag.GpsDestBear, + ExifPropertyTag.GpsDestBearRef, + ExifPropertyTag.GpsDestDist, + ExifPropertyTag.GpsDestDistRef, + ExifPropertyTag.GpsDestLat, + ExifPropertyTag.GpsDestLatRef, + ExifPropertyTag.GpsDestLong, + ExifPropertyTag.GpsDestLongRef, + ExifPropertyTag.GpsGpsDop, + ExifPropertyTag.GpsGpsMeasureMode, + ExifPropertyTag.GpsGpsSatellites, + ExifPropertyTag.GpsGpsStatus, + ExifPropertyTag.GpsGpsTime, + ExifPropertyTag.GpsIFD, + ExifPropertyTag.GpsImgDir, + ExifPropertyTag.GpsImgDirRef, + ExifPropertyTag.GpsLatitude, + ExifPropertyTag.GpsLatitudeRef, + ExifPropertyTag.GpsLongitude, + ExifPropertyTag.GpsLongitudeRef, + ExifPropertyTag.GpsMapDatum, + ExifPropertyTag.GpsSpeed, + ExifPropertyTag.GpsSpeedRef, + ExifPropertyTag.GpsTrack, + ExifPropertyTag.GpsTrackRef, + ExifPropertyTag.GpsVer + }).ToArray(); + + /// + /// Gets all required property items plus copyright and geolocation specific property items. + /// + public static readonly ExifPropertyTag[] CopyrightPropertyItems = RequiredPropertyItems.Union(new[]{ + ExifPropertyTag.Copyright, + ExifPropertyTag.Artist, + ExifPropertyTag.ImageTitle, + ExifPropertyTag.ImageDescription, + ExifPropertyTag.ExifUserComment, + ExifPropertyTag.EquipMake, + ExifPropertyTag.EquipModel, + ExifPropertyTag.ThumbnailArtist, + ExifPropertyTag.ThumbnailCopyRight, + ExifPropertyTag.ThumbnailImageDescription, + ExifPropertyTag.ThumbnailEquipMake, + ExifPropertyTag.ThumbnailEquipModel, + }).ToArray(); + + /// + /// Gets all required property items plus copyright and geolocation specific property items. + /// + public static readonly ExifPropertyTag[] CopyrightAndGeolocationPropertyItems = GeolocationPropertyItems.Union(CopyrightPropertyItems).ToArray(); + + /// + /// Gets all known property items + /// + public static readonly ExifPropertyTag[] All = (ExifPropertyTag[])Enum.GetValues(typeof(ExifPropertyTag)); + } +} diff --git a/src/ImageProcessor/MetaDataMode.cs b/src/ImageProcessor/MetaDataMode.cs new file mode 100644 index 000000000..8df42cf10 --- /dev/null +++ b/src/ImageProcessor/MetaDataMode.cs @@ -0,0 +1,40 @@ +// -------------------------------------------------------------------------------------------------------------------- +// +// Copyright (c) James Jackson-South. +// Licensed under the Apache License, Version 2.0. +// +// -------------------------------------------------------------------------------------------------------------------- + +namespace ImageProcessor +{ + /// + /// Enumerates the various metadata modes that control how much metadata information is stored on processing + /// + public enum MetaDataMode + { + /// + /// Store no metadata on processing + /// + None, + + /// + /// Store copyright specific metadata on processing + /// + Copyright, + + /// + /// Store geolocation specific metadata on processing + /// + Geolocation, + + /// + /// Store copyright and geolocation specific metadata on processing + /// + CopyrightAndGeolocation, + + /// + /// Store all metadata on processing + /// + All + } +} \ No newline at end of file diff --git a/tests/ImageProcessor.Playground/Program.cs b/tests/ImageProcessor.Playground/Program.cs index 7a01a4547..de6569058 100644 --- a/tests/ImageProcessor.Playground/Program.cs +++ b/tests/ImageProcessor.Playground/Program.cs @@ -67,7 +67,7 @@ public static void Main(string[] args) stopwatch.Start(); using (MemoryStream inStream = new MemoryStream(photoBytes)) - using (ImageFactory imageFactory = new ImageFactory() { AnimationProcessMode = AnimationProcessMode.All }) + using (ImageFactory imageFactory = new ImageFactory(MetaDataMode.CopyrightAndGeolocation) { AnimationProcessMode = AnimationProcessMode.All }) { try { diff --git a/tests/ImageProcessor.TestWebsite/config/imageprocessor/processing.config b/tests/ImageProcessor.TestWebsite/config/imageprocessor/processing.config index 8a1273124..177bf424d 100644 --- a/tests/ImageProcessor.TestWebsite/config/imageprocessor/processing.config +++ b/tests/ImageProcessor.TestWebsite/config/imageprocessor/processing.config @@ -1,4 +1,4 @@ - + From b89bf24088cd28a6bd7b8c8cc9ea7cd32df4a386 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Fri, 6 Apr 2018 15:35:33 +1000 Subject: [PATCH 067/113] Default to all to reduce code complexity (default preserve is none) --- src/ImageProcessor.Web/Configuration/ImageProcessingSection.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ImageProcessor.Web/Configuration/ImageProcessingSection.cs b/src/ImageProcessor.Web/Configuration/ImageProcessingSection.cs index afed7dad5..885120ef0 100644 --- a/src/ImageProcessor.Web/Configuration/ImageProcessingSection.cs +++ b/src/ImageProcessor.Web/Configuration/ImageProcessingSection.cs @@ -36,7 +36,7 @@ public bool PreserveExifMetaData /// /// Gets or sets the metadata mode to use when processing images. /// - [ConfigurationProperty("metaDataMode", IsRequired = false, DefaultValue = MetaDataMode.None)] + [ConfigurationProperty("metaDataMode", IsRequired = false, DefaultValue = MetaDataMode.All)] public MetaDataMode MetaDataMode { get => (MetaDataMode)this["metaDataMode"]; From 539e1863db5268ad0fa72994d41e9c7a8196ed67 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Fri, 6 Apr 2018 23:16:42 +1000 Subject: [PATCH 068/113] Fix XML docs --- src/ImageProcessor/Imaging/MetaData/ExifPropertyTagConstants.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ImageProcessor/Imaging/MetaData/ExifPropertyTagConstants.cs b/src/ImageProcessor/Imaging/MetaData/ExifPropertyTagConstants.cs index cf8c81637..ca074276d 100644 --- a/src/ImageProcessor/Imaging/MetaData/ExifPropertyTagConstants.cs +++ b/src/ImageProcessor/Imaging/MetaData/ExifPropertyTagConstants.cs @@ -57,7 +57,7 @@ public class ExifPropertyTagConstants }).ToArray(); /// - /// Gets all required property items plus copyright and geolocation specific property items. + /// Gets all required property items plus copyright specific property items. /// public static readonly ExifPropertyTag[] CopyrightPropertyItems = RequiredPropertyItems.Union(new[]{ ExifPropertyTag.Copyright, From 102c265a6a0af3db744c4544b9feb524f8ef3e4a Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Sun, 8 Apr 2018 23:35:32 +1000 Subject: [PATCH 069/113] Version bump --- build/NuSpecs/ImageProcessor.Web.Config.nuspec | 2 +- .../ImageProcessor.Web.Plugins.AzureBlobCache.nuspec | 4 ++-- build/NuSpecs/ImageProcessor.Web.nuspec | 2 +- build/build.ps1 | 4 ++-- src/ImageProcessor.Web/Configuration/ImageCacheSection.cs | 8 ++++---- .../Configuration/Resources/cache.config.transform | 2 +- 6 files changed, 11 insertions(+), 11 deletions(-) diff --git a/build/NuSpecs/ImageProcessor.Web.Config.nuspec b/build/NuSpecs/ImageProcessor.Web.Config.nuspec index f5b34dde9..749f68098 100644 --- a/build/NuSpecs/ImageProcessor.Web.Config.nuspec +++ b/build/NuSpecs/ImageProcessor.Web.Config.nuspec @@ -23,7 +23,7 @@ Image Resize Crop Rotate Quality Watermark Gif Jpg Jpeg Bitmap Png Tiff ASP Cache EXIF - + diff --git a/build/NuSpecs/ImageProcessor.Web.Plugins.AzureBlobCache.nuspec b/build/NuSpecs/ImageProcessor.Web.Plugins.AzureBlobCache.nuspec index bd4cbb0b9..63078428e 100644 --- a/build/NuSpecs/ImageProcessor.Web.Plugins.AzureBlobCache.nuspec +++ b/build/NuSpecs/ImageProcessor.Web.Plugins.AzureBlobCache.nuspec @@ -23,8 +23,8 @@ Image Resize Crop Rotate Quality Watermark Gif Jpg Jpeg Bitmap Png Tiff Azure Cache Asp - - + + diff --git a/build/NuSpecs/ImageProcessor.Web.nuspec b/build/NuSpecs/ImageProcessor.Web.nuspec index c3a849ef3..b22847f6f 100644 --- a/build/NuSpecs/ImageProcessor.Web.nuspec +++ b/build/NuSpecs/ImageProcessor.Web.nuspec @@ -25,7 +25,7 @@ Image Resize Crop Rotate Quality Watermark Gif Jpg Jpeg Bitmap Png Tiff ASP Cache EXIF - + diff --git a/build/build.ps1 b/build/build.ps1 index be42b171b..547c093af 100644 --- a/build/build.ps1 +++ b/build/build.ps1 @@ -8,7 +8,7 @@ $nugetOutput = Join-Path $binPath "NuGets"; # Projects. Nuget Dependencies are handled in the nuspec files themselves and depend on the Major.Minor.Build number only. $imageprocessor = @{ name = "ImageProcessor" - version = "2.6.0.${buildNumber}" + version = "2.6.1.${buildNumber}" folder = Join-Path $buildPath "src\ImageProcessor" output = Join-Path $binPath "ImageProcessor\lib\net452" csproj = "ImageProcessor.csproj" @@ -43,7 +43,7 @@ $imageprocessorWeb = @{ }; $imageprocessorWebConfig = @{ - version = "2.4.0.${buildNumber}" + version = "2.4.1.${buildNumber}" nuspec = Join-Path $nuspecsPath "ImageProcessor.Web.Config.nuspec" }; diff --git a/src/ImageProcessor.Web/Configuration/ImageCacheSection.cs b/src/ImageProcessor.Web/Configuration/ImageCacheSection.cs index e62b69603..d11eabca1 100644 --- a/src/ImageProcessor.Web/Configuration/ImageCacheSection.cs +++ b/src/ImageProcessor.Web/Configuration/ImageCacheSection.cs @@ -117,14 +117,14 @@ public int MaxDays /// Gets or sets the maximum number of minutes to store a cached image reference in memory. /// /// The maximum number of minutes to store a cached image reference in memory - /// Defaults to 365 if not set. - [ConfigurationProperty("maxMemoryMinutes", DefaultValue = "1", IsRequired = false)] + /// Defaults to 1 if not set. + [ConfigurationProperty("memoryMaxMinutes", DefaultValue = "1", IsRequired = false)] [IntegerValidator(ExcludeRange = false, MinValue = -1)] public int MaxMinutes { - get => (int)this["maxMemoryMinutes"]; + get => (int)this["memoryMaxMinutes"]; - set => this["maxMemoryMinutes"] = value; + set => this["memoryMaxMinutes"] = value; } /// diff --git a/src/ImageProcessor.Web/Configuration/Resources/cache.config.transform b/src/ImageProcessor.Web/Configuration/Resources/cache.config.transform index 04d71d1b3..40f5c132c 100644 --- a/src/ImageProcessor.Web/Configuration/Resources/cache.config.transform +++ b/src/ImageProcessor.Web/Configuration/Resources/cache.config.transform @@ -1,6 +1,6 @@ - + From ac90949ea16d277dde98edd813fc107a64471fe2 Mon Sep 17 00:00:00 2001 From: Dirk Rettschlag Date: Wed, 18 Apr 2018 22:32:21 +0200 Subject: [PATCH 070/113] fix Hue when not rotating If rotate is false it is not possible to set a hue of 0 as the function will return immediately. This change will add a check if rotate is true and return only if so. --- src/ImageProcessor/ImageFactory.cs | 2 +- src/ImageProcessor/Processors/Hue.cs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/ImageProcessor/ImageFactory.cs b/src/ImageProcessor/ImageFactory.cs index 2a0e6d024..72d88e783 100644 --- a/src/ImageProcessor/ImageFactory.cs +++ b/src/ImageProcessor/ImageFactory.cs @@ -1013,7 +1013,7 @@ public ImageFactory GaussianSharpen(GaussianLayer gaussianLayer) public ImageFactory Hue(int degrees, bool rotate = false) { // Sanitize the input. - if (degrees > 360 || degrees < 0 || degrees == 0) + if (degrees > 360 || degrees < 0 || (degrees == 0 && rotate)) { return this; } diff --git a/src/ImageProcessor/Processors/Hue.cs b/src/ImageProcessor/Processors/Hue.cs index 08cccbe68..2b4903ae9 100644 --- a/src/ImageProcessor/Processors/Hue.cs +++ b/src/ImageProcessor/Processors/Hue.cs @@ -58,13 +58,13 @@ public Image ProcessImage(ImageFactory factory) { Tuple parameters = this.DynamicParameter; int degrees = parameters.Item1; + bool rotate = parameters.Item2; - if (degrees == 0) + if (degrees == 0 && rotate) { return image; } - bool rotate = parameters.Item2; int width = image.Width; int height = image.Height; using (FastBitmap fastBitmap = new FastBitmap(image)) From da285d803427b59a03cfd6bb3010939638ecef92 Mon Sep 17 00:00:00 2001 From: Julian Grahame Date: Mon, 28 May 2018 08:27:57 +0100 Subject: [PATCH 071/113] #669 - Image metadata is stripped after image is processed: ImageProcessor.Web 4.9.2.19 Wrong MetaDataMode was being added in call to ImageFactory. --- src/ImageProcessor.Web/HttpModules/ImageProcessingModule.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ImageProcessor.Web/HttpModules/ImageProcessingModule.cs b/src/ImageProcessor.Web/HttpModules/ImageProcessingModule.cs index 78b214f37..16c7de865 100644 --- a/src/ImageProcessor.Web/HttpModules/ImageProcessingModule.cs +++ b/src/ImageProcessor.Web/HttpModules/ImageProcessingModule.cs @@ -624,7 +624,7 @@ private async Task ProcessImageAsync(HttpContext context) { // Process the image. bool exif = preserveExifMetaData != null && preserveExifMetaData.Value; - MetaDataMode metaMode = exif ? MetaDataMode.None : metaDataMode.Value; + MetaDataMode metaMode = !exif ? MetaDataMode.None : metaDataMode.Value; bool gamma = fixGamma != null && fixGamma.Value; using (ImageFactory imageFactory = new ImageFactory(metaMode, gamma) { AnimationProcessMode = mode }) From bd99d058f0a7b3e02f7dae2bc2e762f2a129339d Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Thu, 7 Jun 2018 12:41:02 +1000 Subject: [PATCH 072/113] Recursively kill process + children. Fix #661 #662 --- ...Processor.Web.Plugins.PostProcessor.csproj | 1 + .../PostProcessor.cs | 32 ++++++++++++++++--- 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/src/ImageProcessor.Web.Plugins.PostProcessor/ImageProcessor.Web.Plugins.PostProcessor.csproj b/src/ImageProcessor.Web.Plugins.PostProcessor/ImageProcessor.Web.Plugins.PostProcessor.csproj index 704330ee9..54e752cdc 100644 --- a/src/ImageProcessor.Web.Plugins.PostProcessor/ImageProcessor.Web.Plugins.PostProcessor.csproj +++ b/src/ImageProcessor.Web.Plugins.PostProcessor/ImageProcessor.Web.Plugins.PostProcessor.csproj @@ -35,6 +35,7 @@ + diff --git a/src/ImageProcessor.Web.Plugins.PostProcessor/PostProcessor.cs b/src/ImageProcessor.Web.Plugins.PostProcessor/PostProcessor.cs index 457388b9e..6584ab8b4 100644 --- a/src/ImageProcessor.Web.Plugins.PostProcessor/PostProcessor.cs +++ b/src/ImageProcessor.Web.Plugins.PostProcessor/PostProcessor.cs @@ -15,6 +15,7 @@ namespace ImageProcessor.Web.Plugins.PostProcessor using System.Diagnostics; using System.Globalization; using System.IO; + using System.Management; using System.Web; using ImageProcessor.Configuration; @@ -120,11 +121,11 @@ private static PostProcessingResultEventArgs RunProcess(Uri url, string sourceFi ProcessStartInfo start = new ProcessStartInfo("cmd") { - WindowStyle = ProcessWindowStyle.Hidden, + //WindowStyle = ProcessWindowStyle.Hidden, WorkingDirectory = PostProcessorBootstrapper.Instance.WorkingPath, Arguments = arguments, UseShellExecute = false, - CreateNoWindow = true + // CreateNoWindow = true }; Process process = null; @@ -144,10 +145,33 @@ private static PostProcessingResultEventArgs RunProcess(Uri url, string sourceFi process.Start(); + // Recursively kill all child processes. + void KillProcessAndChildren(int pid) + { + using (var searcher = new ManagementObjectSearcher($"Select * From Win32_Process Where ParentProcessID={pid}")) + { + ManagementObjectCollection moc = searcher.Get(); + foreach (ManagementBaseObject mo in moc) + { + KillProcessAndChildren(Convert.ToInt32(mo["ProcessID"])); + } + + try + { + Process proc = Process.GetProcessById(pid); + proc.Kill(); + } + catch + { + // Process already exited. + } + } + } + // Wait for processing to finish, but not more than our timeout. if (!process.WaitForExit(timeout)) { - process.Kill(); + KillProcessAndChildren(process.Id); ImageProcessorBootstrapper.Instance.Logger.Log( typeof(PostProcessor), $"Unable to post process image for request {url} within {timeout}ms. Original image returned."); @@ -155,7 +179,7 @@ private static PostProcessingResultEventArgs RunProcess(Uri url, string sourceFi } catch (Exception ex) { - // Some security policies don't allow execution of programs in this way + // Some security policies don't allow execution of programs in this way. ImageProcessorBootstrapper.Instance.Logger.Log(typeof(PostProcessor), ex.Message); } finally From 29250379b7d07669387ca92c6bc1eeeb9a908ebe Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Thu, 7 Jun 2018 12:41:28 +1000 Subject: [PATCH 073/113] Reset window style --- src/ImageProcessor.Web.Plugins.PostProcessor/PostProcessor.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ImageProcessor.Web.Plugins.PostProcessor/PostProcessor.cs b/src/ImageProcessor.Web.Plugins.PostProcessor/PostProcessor.cs index 6584ab8b4..4a9619a66 100644 --- a/src/ImageProcessor.Web.Plugins.PostProcessor/PostProcessor.cs +++ b/src/ImageProcessor.Web.Plugins.PostProcessor/PostProcessor.cs @@ -121,11 +121,11 @@ private static PostProcessingResultEventArgs RunProcess(Uri url, string sourceFi ProcessStartInfo start = new ProcessStartInfo("cmd") { - //WindowStyle = ProcessWindowStyle.Hidden, + WindowStyle = ProcessWindowStyle.Hidden, WorkingDirectory = PostProcessorBootstrapper.Instance.WorkingPath, Arguments = arguments, UseShellExecute = false, - // CreateNoWindow = true + CreateNoWindow = true }; Process process = null; From 92cd3ca22f6ba48ef96213da7375991daedaac94 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Thu, 7 Jun 2018 12:54:59 +1000 Subject: [PATCH 074/113] Lock when augmenting settings. Fix #663 --- src/ImageProcessor.Web/Caching/ImageCacheBase.cs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/ImageProcessor.Web/Caching/ImageCacheBase.cs b/src/ImageProcessor.Web/Caching/ImageCacheBase.cs index e01622635..661a414de 100644 --- a/src/ImageProcessor.Web/Caching/ImageCacheBase.cs +++ b/src/ImageProcessor.Web/Caching/ImageCacheBase.cs @@ -20,7 +20,7 @@ namespace ImageProcessor.Web.Caching using System.Web; using System.Web.Hosting; - using ImageProcessor.Web.Configuration; + using Configuration; /// /// The image cache base provides methods for implementing the interface. @@ -30,6 +30,8 @@ public abstract class ImageCacheBase : IImageCacheExtended { private static readonly CacheTrimmer Trimmer = new CacheTrimmer(); + private static readonly object SyncLock = new object(); + /// /// The request path for the image. /// @@ -217,8 +219,11 @@ protected void ScheduleCacheTrimmer(Func trimmer) /// augmented dictionary of settings private Dictionary AugmentSettingsCore(Dictionary settings) { - this.AugmentSettings(settings); - return settings; + lock (SyncLock) + { + this.AugmentSettings(settings); + return settings; + } } /// From eba1804d18ab492862c8bdf8da7c72a7e215bf85 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Fri, 8 Jun 2018 16:28:31 +1000 Subject: [PATCH 075/113] Version bump --- build/NuSpecs/ImageProcessor.Web.PostProcessor.nuspec | 2 +- build/NuSpecs/ImageProcessor.Web.nuspec | 2 +- build/build.ps1 | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/build/NuSpecs/ImageProcessor.Web.PostProcessor.nuspec b/build/NuSpecs/ImageProcessor.Web.PostProcessor.nuspec index 1a2b3a87e..744343edd 100644 --- a/build/NuSpecs/ImageProcessor.Web.PostProcessor.nuspec +++ b/build/NuSpecs/ImageProcessor.Web.PostProcessor.nuspec @@ -23,7 +23,7 @@ Image Resize Crop Rotate Quality Watermark Gif Jpg Jpeg Bitmap Png Tiff ASP Cache EXIF - + diff --git a/build/NuSpecs/ImageProcessor.Web.nuspec b/build/NuSpecs/ImageProcessor.Web.nuspec index b22847f6f..7ac97fb82 100644 --- a/build/NuSpecs/ImageProcessor.Web.nuspec +++ b/build/NuSpecs/ImageProcessor.Web.nuspec @@ -25,7 +25,7 @@ Image Resize Crop Rotate Quality Watermark Gif Jpg Jpeg Bitmap Png Tiff ASP Cache EXIF - + diff --git a/build/build.ps1 b/build/build.ps1 index 547c093af..00e20754b 100644 --- a/build/build.ps1 +++ b/build/build.ps1 @@ -8,7 +8,7 @@ $nugetOutput = Join-Path $binPath "NuGets"; # Projects. Nuget Dependencies are handled in the nuspec files themselves and depend on the Major.Minor.Build number only. $imageprocessor = @{ name = "ImageProcessor" - version = "2.6.1.${buildNumber}" + version = "2.6.2.${buildNumber}" folder = Join-Path $buildPath "src\ImageProcessor" output = Join-Path $binPath "ImageProcessor\lib\net452" csproj = "ImageProcessor.csproj" @@ -35,7 +35,7 @@ $imageProcessorPluginsWebP = @{ $imageprocessorWeb = @{ name = "ImageProcessor.Web" - version = "4.9.2.${buildNumber}" + version = "4.9.3.${buildNumber}" folder = Join-Path $buildPath "src\ImageProcessor.Web" output = Join-Path $binPath "ImageProcessor.Web\lib\net452" csproj = "ImageProcessor.Web.csproj" @@ -58,7 +58,7 @@ $imageProcessorWebPluginsAzureBlobCache = @{ $imageProcessorWebPluginsPostProcessor = @{ name = "ImageProcessor.Web.Plugins.PostProcessor" - version = "1.3.0.${buildNumber}" + version = "1.3.1.${buildNumber}" folder = Join-Path $buildPath "src\ImageProcessor.Web.Plugins.PostProcessor" output = Join-Path $binPath "ImageProcessor.Web.Plugins.PostProcessor\lib\net452" csproj = "ImageProcessor.Web.Plugins.PostProcessor.csproj" From 5c251111ef3e9b1a46ba5d40c98a00978677d0a0 Mon Sep 17 00:00:00 2001 From: Andy Felton Date: Sun, 10 Jun 2018 11:41:38 +0100 Subject: [PATCH 076/113] #664 AWS S3 Cache Modified code to get Amazon S3 cache working and provide example. --- .../imageprocessor/cache.config.transform | 2 +- .../AmazonS3Cache.cs | 481 +++++++++++++----- ...Processor.Web.Plugins.AmazonS3Cache.csproj | 11 +- .../packages.config | 3 +- .../ImageProcessor.TestWebsite.csproj | 10 +- .../config/imageprocessor/cache.s3.config | 16 + .../config/imageprocessor/security.config | 11 +- 7 files changed, 411 insertions(+), 123 deletions(-) create mode 100644 tests/ImageProcessor.TestWebsite/config/imageprocessor/cache.s3.config diff --git a/build/content/ImageProcessor.Web.Plugins.AmazonS3Cache/config/imageprocessor/cache.config.transform b/build/content/ImageProcessor.Web.Plugins.AmazonS3Cache/config/imageprocessor/cache.config.transform index 21322df56..dbf6692a7 100644 --- a/build/content/ImageProcessor.Web.Plugins.AmazonS3Cache/config/imageprocessor/cache.config.transform +++ b/build/content/ImageProcessor.Web.Plugins.AmazonS3Cache/config/imageprocessor/cache.config.transform @@ -1,4 +1,4 @@ - + diff --git a/src/ImageProcessor.Web.Plugins.AmazonS3Cache/AmazonS3Cache.cs b/src/ImageProcessor.Web.Plugins.AmazonS3Cache/AmazonS3Cache.cs index e969cfe1e..61bf458af 100644 --- a/src/ImageProcessor.Web.Plugins.AmazonS3Cache/AmazonS3Cache.cs +++ b/src/ImageProcessor.Web.Plugins.AmazonS3Cache/AmazonS3Cache.cs @@ -17,6 +17,7 @@ namespace ImageProcessor.Web.Plugins.AmazonS3Cache using System.IO; using System.Linq; using System.Net; + using System.Text.RegularExpressions; using System.Threading.Tasks; using System.Web; @@ -37,6 +38,11 @@ namespace ImageProcessor.Web.Plugins.AmazonS3Cache /// public class AmazonS3Cache : ImageCacheBase { + /// + /// The regular expression for parsing a remote uri. + /// + private static readonly Regex RemoteRegex = new Regex("^http(s)?://", RegexOptions.Compiled); + /// /// The assembly version. /// @@ -68,10 +74,39 @@ public class AmazonS3Cache : ImageCacheBase private readonly string awsBucketName; /// - /// Image Processor Cache folder in S3. - /// TODO: Why is this here? What does it do and why is it a constant? + /// The Key prefix to use for cache files + /// + private string awsCacheKeyPrefix; + + /// + /// Determines if the CDN request is redirected or rewritten + /// + private readonly bool streamCachedImage; + + /// + /// The timeout length for requesting the CDN url. + /// + private readonly int timeout = 1000; + + /// + /// The cached rewrite path. + /// + private string cachedRewritePath; + + /// + /// The cloud source S3 container. + /// + private readonly AmazonS3Client amazonS3SourceCache; + + /// + /// The Amazon S3 Source URI. + /// + private readonly string cloudSourceUri; + + /// + /// The Amazon S3 Source Bucket Name. /// - private string imageProcessorCachePrefix = @"imageprocessor_cache/"; + private readonly string amazonS3SourceBucketName; /// /// Initializes a new instance of the class. @@ -88,18 +123,67 @@ public class AmazonS3Cache : ImageCacheBase public AmazonS3Cache(string requestPath, string fullPath, string querystring) : base(requestPath, fullPath, querystring) { - this.awsAccessKey = this.Settings["AwsAccessKey"]; - this.awsSecretKey = this.Settings["AwsSecretKey"]; + awsAccessKey = Settings.ContainsKey("AwsAccessKey") ? Settings["AwsAccessKey"] : string.Empty; + awsSecretKey = Settings.ContainsKey("AwsSecretKey") ? Settings["AwsSecretKey"] : string.Empty; + this.awsBucketName = this.Settings["AwsBucketName"]; - RegionEndpoint awsRegionEndpoint = this.GetRegionEndpoint(); + this.awsCacheKeyPrefix = this.Settings["AwsCacheKeyPrefix"]; + string endPointRegion = Settings.ContainsKey("RegionEndpoint") ? Settings["RegionEndpoint"] : string.Empty; + RegionEndpoint awsRegionEndpoint = GetRegionEndpoint(endPointRegion); if (this.AwsIsValid) { - // Create S3 client from AWS Access Key and AWS Secret Access Key. + // If Keys are provided then use these, otherwise we'll use IAM access keys this.amazonS3ClientCache = new AmazonS3Client(this.awsAccessKey, this.awsSecretKey, awsRegionEndpoint); } + else if (!string.IsNullOrWhiteSpace(this.awsBucketName)) + { + this.amazonS3ClientCache = new AmazonS3Client(awsRegionEndpoint); + } this.cachedCdnRoot = this.Settings.ContainsKey("CachedCDNRoot") ? this.Settings["CachedCDNRoot"] : string.Empty; + + if (amazonS3SourceCache == null) + { + amazonS3SourceBucketName = Settings.ContainsKey("SourceS3Bucket") ? Settings["SourceS3Bucket"] : string.Empty; + cloudSourceUri = Settings.ContainsKey("CloudSourceURI") ? Settings["CloudSourceURI"] : string.Empty; + + string sourceAccount = this.Settings.ContainsKey("SourceStorageAccount") + ? this.Settings["SourceStorageAccount"] + : string.Empty; + + // Repeat for source if it exists + if (!string.IsNullOrWhiteSpace(amazonS3SourceBucketName)) + { + string awsSourceAccessKey = Settings.ContainsKey("AwsSourceAccessKey") ? Settings["AwsSourceAccessKey"] : string.Empty; + string awsSourceSecretKey = Settings.ContainsKey("AwsSourceSecretKey") ? Settings["AwsSourceSecretKey"] : string.Empty; + string sourceEndPointRegion = Settings.ContainsKey("SourceRegionEndpoint") ? Settings["SourceRegionEndpoint"] : string.Empty; + RegionEndpoint awsSourceRegionEndpoint = GetRegionEndpoint(sourceEndPointRegion); + + if (!string.IsNullOrWhiteSpace(awsSourceAccessKey) + && !string.IsNullOrWhiteSpace(awsSourceSecretKey)) + { + // If Keys are provided then use these, otherwise we'll use IAM access keys + amazonS3SourceCache = new AmazonS3Client(awsSourceAccessKey, awsSourceSecretKey, awsSourceRegionEndpoint); + } + else + { + amazonS3SourceCache = new AmazonS3Client(awsSourceRegionEndpoint); + } + } + } + + if (this.Settings.ContainsKey("CachedCDNTimeout")) + { + int.TryParse(this.Settings["CachedCDNTimeout"], out int t); + this.timeout = t; + } + + // This setting was added to facilitate streaming of the blob resource directly instead of a redirect. This is beneficial for CDN purposes + // but caution should be taken if not used with a CDN as it will add quite a bit of overhead to the site. + this.streamCachedImage = this.Settings.ContainsKey("StreamCachedImage") && this.Settings["StreamCachedImage"].ToLower() == "true"; + + } /// @@ -126,13 +210,10 @@ public override async Task IsNewOrUpdatedAsync() // Collision rate of about 1 in 10000 for the folder structure. // That gives us massive scope to store millions of files. string pathFromKey = string.Join("\\", cachedFileName.ToCharArray().Take(6)); - this.CachedPath = Path.Combine(this.cachedCdnRoot, this.imageProcessorCachePrefix, pathFromKey, cachedFileName) + this.CachedPath = Path.Combine(this.cachedCdnRoot, this.awsCacheKeyPrefix, pathFromKey, cachedFileName) .Replace(@"\", "/"); - // TODO: What is the S3 version of the following lines? The Above doesn't match what I expect - //this.CachedPath = Path.Combine(this.cloudCachedBlobContainer.Uri.ToString(), pathFromKey, cachedFileName).Replace(@"\", "/"); - //this.cachedRewritePath = Path.Combine(this.cachedCdnRoot, this.cloudCachedBlobContainer.Name, pathFromKey, cachedFileName).Replace(@"\", "/"); - + this.cachedRewritePath = this.CachedPath; bool isUpdated = false; CachedImage cachedImage = CacheIndexer.Get(this.CachedPath); @@ -185,7 +266,7 @@ public override async Task IsNewOrUpdatedAsync() CacheIndexer.Add(cachedImage, this.ImageCacheMaxMinutes); } } - catch (AmazonS3Exception) + catch (AmazonS3Exception ex) { // Nothing in S3 so we should return true. isUpdated = true; @@ -199,8 +280,9 @@ public override async Task IsNewOrUpdatedAsync() } else { - // Check to see if the cached image is set to expire. - if (this.IsExpired(cachedImage.CreationTimeUtc)) + // Check to see if the cached image is set to expire + // or a new file with the same name has replaced our current image + if (this.IsExpired(cachedImage.CreationTimeUtc) || await this.IsUpdatedAsync(cachedImage.CreationTimeUtc)) { CacheIndexer.Remove(this.CachedPath); isUpdated = true; @@ -310,98 +392,203 @@ await this.amazonS3ClientCache.DeleteObjectAsync(new DeleteObjectRequest /// /// The asynchronous returning the value. /// - public override async Task CreateCachedFileNameAsync() + //public override async Task CreateCachedFileNameAsync() + //{ + // string streamHash = string.Empty; + + // try + // { + // if (new Uri(this.RequestPath).IsFile) + // { + // // Get the hash for the filestream. That way we can ensure that if the image is + // // updated but has the same name we will know. + // FileInfo imageFileInfo = new FileInfo(this.RequestPath); + // if (imageFileInfo.Exists) + // { + // // Pull the latest info. + // imageFileInfo.Refresh(); + + // // Checking the stream itself is far too processor intensive so we make a best guess. + // string creation = imageFileInfo.CreationTimeUtc.ToString(CultureInfo.InvariantCulture); + // string length = imageFileInfo.Length.ToString(CultureInfo.InvariantCulture); + // streamHash = string.Format("{0}{1}", creation, length); + // } + // } + // else + // { + // // Try and get the headers for the file, this should allow cache busting for remote files. + // HttpWebRequest request = (HttpWebRequest)WebRequest.Create(this.RequestPath); + // request.Method = "HEAD"; + + // using (HttpWebResponse response = (HttpWebResponse)(await request.GetResponseAsync())) + // { + // string lastModified = response.LastModified.ToUniversalTime().ToString(CultureInfo.InvariantCulture); + // string length = response.ContentLength.ToString(CultureInfo.InvariantCulture); + // streamHash = string.Format("{0}{1}", lastModified, length); + // } + // } + + // // TODO: Pull from other cloud folder/bucket to match the AzureBlobCache behaviour. + // } + // catch (Exception ex) + // { + // streamHash = string.Empty; + // } + + // // Use an sha1 hash of the full path including the querystring to create the image name. + // // That name can also be used as a key for the cached image and we should be able to use + // // The characters of that hash as sub-folders. + // string parsedExtension = ImageHelpers.Instance.GetExtension(this.FullPath, this.Querystring); + // string encryptedName = (streamHash + this.FullPath).ToSHA1Fingerprint(); + + // string cachedFileName = string.Format( + // "{0}.{1}", + // encryptedName, + // !string.IsNullOrWhiteSpace(parsedExtension) ? parsedExtension.Replace(".", string.Empty) : "jpg"); + + // return cachedFileName; + //} + + /// + /// Rewrites the path to point to the cached image. + /// + /// + /// The encapsulating all information about the request. + /// + public override void RewritePath(HttpContext context) { - string streamHash = string.Empty; + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(this.cachedRewritePath); - try + if (this.streamCachedImage) { - if (new Uri(this.RequestPath).IsFile) + // Map headers to enable 304s to pass through + if (context.Request.Headers["If-Modified-Since"] != null) { - // Get the hash for the filestream. That way we can ensure that if the image is - // updated but has the same name we will know. - FileInfo imageFileInfo = new FileInfo(this.RequestPath); - if (imageFileInfo.Exists) + TrySetIfModifiedSinceDate(context, request); + } + + string[] mapRequestHeaders = { "Cache-Control", "If-None-Match" }; + foreach (string h in mapRequestHeaders) + { + if (context.Request.Headers[h] != null) { - // Pull the latest info. - imageFileInfo.Refresh(); + request.Headers.Add(h, context.Request.Headers[h]); + } + } + + // Write the blob storage directly to the stream + request.Method = "GET"; + request.Timeout = this.timeout; - // Checking the stream itself is far too processor intensive so we make a best guess. - string creation = imageFileInfo.CreationTimeUtc.ToString(CultureInfo.InvariantCulture); - string length = imageFileInfo.Length.ToString(CultureInfo.InvariantCulture); - streamHash = string.Format("{0}{1}", creation, length); + HttpWebResponse response = null; + try + { + response = (HttpWebResponse)request.GetResponse(); + } + catch (WebException ex) + { + // A 304 is not an error + // It appears that some CDN's on Azure (Akamai) do not work properly when making head requests. + // They will return a response url and other headers but a 500 status code. + if (ex.Response != null && (((HttpWebResponse)ex.Response).StatusCode == HttpStatusCode.NotModified + || ex.Response.ResponseUri.AbsoluteUri.Equals(this.cachedRewritePath, StringComparison.OrdinalIgnoreCase))) + { + response = (HttpWebResponse)ex.Response; + } + else + { + response?.Dispose(); + ImageProcessorBootstrapper.Instance.Logger.Log("Unable to stream cached path: " + this.cachedRewritePath); + return; } } - else + + Stream cachedStream = response.GetResponseStream(); + + if (cachedStream != null) { - // Try and get the headers for the file, this should allow cache busting for remote files. - HttpWebRequest request = (HttpWebRequest)WebRequest.Create(this.RequestPath); - request.Method = "HEAD"; + HttpResponse contextResponse = context.Response; + + // If streaming but not using a CDN the headers will be null. + // See https://github.com/JimBobSquarePants/ImageProcessor/pull/466 + string etagHeader = response.Headers["ETag"]; + if (!string.IsNullOrWhiteSpace(etagHeader)) + { + contextResponse.Headers.Add("ETag", etagHeader); + } - using (HttpWebResponse response = (HttpWebResponse)(await request.GetResponseAsync())) + string lastModifiedHeader = response.Headers["Last-Modified"]; + if (!string.IsNullOrWhiteSpace(lastModifiedHeader)) { - string lastModified = response.LastModified.ToUniversalTime().ToString(CultureInfo.InvariantCulture); - string length = response.ContentLength.ToString(CultureInfo.InvariantCulture); - streamHash = string.Format("{0}{1}", lastModified, length); + contextResponse.Headers.Add("Last-Modified", lastModifiedHeader); } + + cachedStream.CopyTo(contextResponse.OutputStream); // Will be empty on 304s + ImageProcessingModule.SetHeaders( + context, + response.StatusCode == HttpStatusCode.NotModified ? null : response.ContentType, + null, + this.BrowserMaxDays, + response.StatusCode); } - // TODO: Pull from other cloud folder/bucket to match the AzureBlobCache behaviour. + cachedStream?.Dispose(); + response.Dispose(); } - catch + else { - streamHash = string.Empty; - } - - // Use an sha1 hash of the full path including the querystring to create the image name. - // That name can also be used as a key for the cached image and we should be able to use - // The characters of that hash as sub-folders. - string parsedExtension = ImageHelpers.Instance.GetExtension(this.FullPath, this.Querystring); - string encryptedName = (streamHash + this.FullPath).ToSHA1Fingerprint(); - - string cachedFileName = string.Format( - "{0}.{1}", - encryptedName, - !string.IsNullOrWhiteSpace(parsedExtension) ? parsedExtension.Replace(".", string.Empty) : "jpg"); - - return cachedFileName; - } + // Prevent redundant metadata request if paths match. + if (this.CachedPath == this.cachedRewritePath) + { + ImageProcessingModule.AddCorsRequestHeaders(context); + context.Response.Redirect(this.CachedPath, false); + return; + } - /// - /// Rewrites the path to point to the cached image. - /// - /// - /// The encapsulating all information about the request. - /// - public override void RewritePath(HttpContext context) - { - // TODO: This doesn't look correct to me. Where is the CDN path? - HttpWebRequest request = (HttpWebRequest)WebRequest.Create(this.CachedPath); - request.Method = "HEAD"; + // Redirect the request to the blob URL + request.Method = "HEAD"; + request.Timeout = this.timeout; - TryFiveTimes( - () => + HttpWebResponse response = null; + try { - using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) + response = (HttpWebResponse)request.GetResponse(); + response.Dispose(); + ImageProcessingModule.AddCorsRequestHeaders(context); + context.Response.Redirect(this.cachedRewritePath, false); + } + catch (WebException ex) + { + response = (HttpWebResponse)ex.Response; + + if (response != null) { HttpStatusCode responseCode = response.StatusCode; - context.Response.Redirect( - responseCode == HttpStatusCode.NotFound ? this.RequestPath : this.CachedPath, - false); - } - // TODO: Above seems wrong. We should be using something like below toggling between CDN and Bucket URL - //using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) - //{ - // HttpStatusCode responseCode = response.StatusCode; - // ImageProcessingModule.AddCorsRequestHeaders(context); - // context.Response.Redirect(responseCode == HttpStatusCode.NotFound ? this.CachedPath : this.cachedRewritePath, false); - //} - }, - () => - { - ImageProcessorBootstrapper.Instance.Logger.Log("Unable to rewrite cached path to: " + this.CachedPath); - }); + // A 304 is not an error + // It appears that some CDN's on Azure (Akamai) do not work properly when making head requests. + // They will return a response url and other headers but a 500 status code. + if (responseCode == HttpStatusCode.NotModified + || response.ResponseUri.AbsoluteUri.Equals(this.cachedRewritePath, StringComparison.OrdinalIgnoreCase)) + { + response.Dispose(); + ImageProcessingModule.AddCorsRequestHeaders(context); + context.Response.Redirect(this.cachedRewritePath, false); + } + else + { + response.Dispose(); + ImageProcessorBootstrapper.Instance.Logger.Log("Unable to rewrite cached path to: " + this.cachedRewritePath); + } + } + else + { + // It's a 404, we should redirect to the cached path we have just saved to. + ImageProcessingModule.AddCorsRequestHeaders(context); + context.Response.Redirect(this.CachedPath, false); + } + } + } } /// @@ -473,40 +660,106 @@ private string GetKey(string path, string fileName) /// Helper to get AWS Region Endpoint from configuration file /// /// Region Endpoint - private RegionEndpoint GetRegionEndpoint() + private RegionEndpoint GetRegionEndpoint(string endpoint) + { + string lclEndpoint = endpoint.ToLower(); + + if (!String.IsNullOrEmpty(lclEndpoint)) + return RegionEndpoint.GetBySystemName(lclEndpoint); + else + return RegionEndpoint.EUWest1; + } + + /// + /// Returns a value indicating whether the requested image has been updated. + /// + /// The creation date. + /// The + protected virtual async Task IsUpdatedAsync(DateTime creationDate) { - string regionEndpointAsString; - if (this.Settings.TryGetValue("RegionEndpoint", out regionEndpointAsString)) + bool isUpdated = false; + + try + { + if ((Uri.IsWellFormedUriString(this.RequestPath,UriKind.Absolute)) && (new Uri(this.RequestPath).IsFile)) + { + if (File.Exists(this.RequestPath)) + { + // If it's newer than the cached file then it must be an update. + isUpdated = File.GetLastWriteTimeUtc(this.RequestPath) > creationDate; + } + } + else if(amazonS3SourceCache != null) + { + string container = RemoteRegex.Replace(this.cloudSourceUri, string.Empty); + string s3Path = RemoteRegex.Replace(this.RequestPath, string.Empty); + string key = s3Path.Replace(container, string.Empty).TrimStart('/'); + + GetObjectMetadataRequest objectMetaDataRequest = new GetObjectMetadataRequest + { + BucketName = this.amazonS3SourceBucketName, + Key = key, + }; + + GetObjectMetadataResponse response = await this.amazonS3ClientCache.GetObjectMetadataAsync(objectMetaDataRequest); + + if (response != null) + { + isUpdated = response.LastModified.ToUniversalTime() > creationDate; + } + } + else + { + // Try and get the headers for the file, this should allow cache busting for remote files. + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(this.RequestPath); + request.Method = "HEAD"; + + using (HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync()) + { + isUpdated = response.LastModified.ToUniversalTime() > creationDate; + } + } + } + catch { - regionEndpointAsString = regionEndpointAsString.ToUpperInvariant(); + isUpdated = false; } - switch (regionEndpointAsString) + return isUpdated; + } + + /// + /// Tries to set IfModifiedSince header however this crashes when context.Request.Headers["If-Modified-Since"] exists, + /// but cannot be parsed. It cannot be parsed when it comes from Google Bot as UTC Sun, 27 Nov 2016 20:01:45 UTC + /// so DateTime.TryParse. If it returns false, then log the error. + /// + /// The current context + /// The current request + private static void TrySetIfModifiedSinceDate(HttpContext context, HttpWebRequest request) + { + DateTime ifModifiedDate; + + string ifModifiedFromRequest = context.Request.Headers["If-Modified-Since"]; + + if (DateTime.TryParse(ifModifiedFromRequest, out ifModifiedDate)) + { + request.IfModifiedSince = ifModifiedDate; + } + else { - case "APNORTHEAST1": - return RegionEndpoint.APNortheast1; - case "APSOUTHEAST1": - return RegionEndpoint.APSoutheast1; - case "APSOUTHEAST2": - return RegionEndpoint.APSoutheast2; - case "CNNORTH1": - return RegionEndpoint.CNNorth1; - case "EUCENTRAL1": - return RegionEndpoint.EUCentral1; - case "SAEAST1": - return RegionEndpoint.SAEast1; - case "USEAST1": - return RegionEndpoint.USEast1; - case "USGOVCLOUDWEST1": - return RegionEndpoint.USGovCloudWest1; - case "USWEST1": - return RegionEndpoint.USWest1; - case "USWEST2": - return RegionEndpoint.USWest2; - - // Set EUWest1 as default RegionEndoint - default: - return RegionEndpoint.EUWest1; + if (ifModifiedFromRequest.ToLower().Contains("utc")) + { + ifModifiedFromRequest = ifModifiedFromRequest.ToLower().Replace("utc", string.Empty); + + if (DateTime.TryParse(ifModifiedFromRequest, out ifModifiedDate)) + { + request.IfModifiedSince = ifModifiedDate; + } + } + else + { + ImageProcessorBootstrapper.Instance.Logger.Log($"Unable to parse date {context.Request.Headers["If-Modified-Since"]} for {context.Request.Url}"); + } } } } diff --git a/src/ImageProcessor.Web.Plugins.AmazonS3Cache/ImageProcessor.Web.Plugins.AmazonS3Cache.csproj b/src/ImageProcessor.Web.Plugins.AmazonS3Cache/ImageProcessor.Web.Plugins.AmazonS3Cache.csproj index 3db3d7975..9f1a6f0ff 100644 --- a/src/ImageProcessor.Web.Plugins.AmazonS3Cache/ImageProcessor.Web.Plugins.AmazonS3Cache.csproj +++ b/src/ImageProcessor.Web.Plugins.AmazonS3Cache/ImageProcessor.Web.Plugins.AmazonS3Cache.csproj @@ -35,9 +35,11 @@ bin\Release\ImageProcessor.Web.Plugins.AmazonS3Cache.xml - - ..\..\packages\AWSSDK.2.3.54.0\lib\net45\AWSSDK.dll - True + + ..\..\packages\AWSSDK.Core.3.3.23.1\lib\net45\AWSSDK.Core.dll + + + ..\..\packages\AWSSDK.S3.3.3.18.3\lib\net45\AWSSDK.S3.dll @@ -65,6 +67,9 @@ + + + diff --git a/src/ImageProcessor.Web.Plugins.AmazonS3Cache/packages.config b/src/ImageProcessor.Web.Plugins.AmazonS3Cache/packages.config index 13e9c6b54..d164ff838 100644 --- a/src/ImageProcessor.Web.Plugins.AmazonS3Cache/packages.config +++ b/src/ImageProcessor.Web.Plugins.AmazonS3Cache/packages.config @@ -1,4 +1,5 @@  - + + \ No newline at end of file diff --git a/tests/ImageProcessor.TestWebsite/ImageProcessor.TestWebsite.csproj b/tests/ImageProcessor.TestWebsite/ImageProcessor.TestWebsite.csproj index d256959a1..e937cb5a3 100644 --- a/tests/ImageProcessor.TestWebsite/ImageProcessor.TestWebsite.csproj +++ b/tests/ImageProcessor.TestWebsite/ImageProcessor.TestWebsite.csproj @@ -123,7 +123,9 @@ Designer - + + Designer + Web.config @@ -141,6 +143,10 @@ {2cf69699-959a-44dc-a281-4e2596c25043} ImageProcessor.Plugins.WebP + + {06b29b8b-41b2-40f0-a2be-99156ff5f68b} + ImageProcessor.Web.Plugins.AmazonS3Cache + {3c805e4c-d679-43f8-8c43-8909cdb4d4d7} ImageProcessor.Web.Plugins.AzureBlobCache @@ -165,7 +171,7 @@ - True + False True 61655 / diff --git a/tests/ImageProcessor.TestWebsite/config/imageprocessor/cache.s3.config b/tests/ImageProcessor.TestWebsite/config/imageprocessor/cache.s3.config new file mode 100644 index 000000000..4a89d551d --- /dev/null +++ b/tests/ImageProcessor.TestWebsite/config/imageprocessor/cache.s3.config @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/tests/ImageProcessor.TestWebsite/config/imageprocessor/security.config b/tests/ImageProcessor.TestWebsite/config/imageprocessor/security.config index 799c6341e..fbffd364d 100644 --- a/tests/ImageProcessor.TestWebsite/config/imageprocessor/security.config +++ b/tests/ImageProcessor.TestWebsite/config/imageprocessor/security.config @@ -4,11 +4,18 @@ - + From 63e6b40b6d2d0cb49fde680571ba11e9bc2582b5 Mon Sep 17 00:00:00 2001 From: Ronald Barendse Date: Wed, 13 Jun 2018 00:55:43 +0200 Subject: [PATCH 077/113] Rewritten PostProcessor to use async tasks --- ...Processor.Web.Plugins.PostProcessor.csproj | 7 +- .../PostProcessor.cs | 378 ++++++++---------- .../PostProcessorApplicationEvents.cs | 2 +- .../PostProcessorBootstrapper.cs | 3 +- .../Resources/Unmanaged/x86/png.cmd | 4 - .../packages.config | 4 + 6 files changed, 181 insertions(+), 217 deletions(-) delete mode 100644 src/ImageProcessor.Web.Plugins.PostProcessor/Resources/Unmanaged/x86/png.cmd create mode 100644 src/ImageProcessor.Web.Plugins.PostProcessor/packages.config diff --git a/src/ImageProcessor.Web.Plugins.PostProcessor/ImageProcessor.Web.Plugins.PostProcessor.csproj b/src/ImageProcessor.Web.Plugins.PostProcessor/ImageProcessor.Web.Plugins.PostProcessor.csproj index 704330ee9..cb3dfe5ba 100644 --- a/src/ImageProcessor.Web.Plugins.PostProcessor/ImageProcessor.Web.Plugins.PostProcessor.csproj +++ b/src/ImageProcessor.Web.Plugins.PostProcessor/ImageProcessor.Web.Plugins.PostProcessor.csproj @@ -33,6 +33,9 @@ bin\Release\ImageProcessor.Web.Plugins.PostProcessor.xml + + ..\..\packages\RunProcessAsTask.1.2.2\lib\net45\RunProcessAsTask.dll + @@ -51,8 +54,10 @@ + + Designer + - diff --git a/src/ImageProcessor.Web.Plugins.PostProcessor/PostProcessor.cs b/src/ImageProcessor.Web.Plugins.PostProcessor/PostProcessor.cs index 457388b9e..2149a9944 100644 --- a/src/ImageProcessor.Web.Plugins.PostProcessor/PostProcessor.cs +++ b/src/ImageProcessor.Web.Plugins.PostProcessor/PostProcessor.cs @@ -4,219 +4,179 @@ // Licensed under the Apache License, Version 2.0. // // -// The image postprocessor. +// The image post processor. // Many thanks to Azure Image Optimizer // // -------------------------------------------------------------------------------------------------------------------- namespace ImageProcessor.Web.Plugins.PostProcessor { - using System; - using System.Diagnostics; - using System.Globalization; - using System.IO; - using System.Web; - - using ImageProcessor.Configuration; - - /// - /// The image postprocessor. - /// Many thanks to Azure Image Optimizer - /// - internal static class PostProcessor - { - /// - /// Post processes the image. - /// - /// The current context. - /// The source image stream. - /// The image extension. - /// - /// The . - /// - public static MemoryStream PostProcessImage(HttpContext context, MemoryStream stream, string extension) - { - if (!PostProcessorBootstrapper.Instance.IsInstalled) - { - return stream; - } - - // Create a temporary source file with the correct extension. - long length = stream.Length; - - string tempSourceFile = Path.GetTempFileName(); - string sourceFile = Path.ChangeExtension(tempSourceFile, extension); - File.Move(tempSourceFile, sourceFile); - - // Give our destination file a unique name. - string destinationFile = sourceFile.Replace(extension, "-out" + extension); - - // Save the input stream to our source temp file for post processing. - using (FileStream fileStream = File.Create(sourceFile)) - { - stream.CopyTo(fileStream); - } - - PostProcessingResultEventArgs result = RunProcess(context.Request.Unvalidated.Url, sourceFile, destinationFile, length); - - // If our result is good and a saving is made we replace our original stream contents with our new compressed file. - if (result != null && result.ResultFileSize > 0 && result.Saving > 0) - { - using (FileStream fileStream = File.OpenRead(destinationFile)) - { - stream.SetLength(0); - fileStream.CopyTo(stream); - } - } - - // Cleanup the temp files. - try - { - // Ensure files exist, are not read only, and delete - if (File.Exists(sourceFile)) - { - File.SetAttributes(sourceFile, FileAttributes.Normal); - File.Delete(sourceFile); - } - - if (File.Exists(destinationFile)) - { - File.SetAttributes(destinationFile, FileAttributes.Normal); - File.Delete(destinationFile); - } - } - catch - { - // Normally a No no, but logging would be excessive + temp files get cleaned up eventually. - } - - stream.Position = 0; - return stream; - } - - /// - /// Runs the process to optimize the images. - /// - /// The current request url. - /// The source file. - /// The destination file. - /// The source file length in bytes. - /// - /// The containing post-processing information. - /// - private static PostProcessingResultEventArgs RunProcess(Uri url, string sourceFile, string destinationFile, long length) - { - // Create a new, hidden process to run our postprocessor command. - // We allow no more than the set timeout (default 5 seconds) for the process to run before killing it to prevent blocking the app. - int timeout = PostProcessorBootstrapper.Instance.Timout; - PostProcessingResultEventArgs result = null; - string arguments = GetArguments(sourceFile, destinationFile, length); - - if (string.IsNullOrWhiteSpace(arguments)) - { - // Not a file we can post process. - return null; - } - - ProcessStartInfo start = new ProcessStartInfo("cmd") - { - WindowStyle = ProcessWindowStyle.Hidden, - WorkingDirectory = PostProcessorBootstrapper.Instance.WorkingPath, - Arguments = arguments, - UseShellExecute = false, - CreateNoWindow = true - }; - - Process process = null; - try - { - process = new Process - { - StartInfo = start, - EnableRaisingEvents = true - }; - - // Process has completed successfully within the time limit. - process.Exited += (sender, args) => - { - result = new PostProcessingResultEventArgs(destinationFile, length); - }; - - process.Start(); - - // Wait for processing to finish, but not more than our timeout. - if (!process.WaitForExit(timeout)) - { - process.Kill(); - ImageProcessorBootstrapper.Instance.Logger.Log( - typeof(PostProcessor), - $"Unable to post process image for request {url} within {timeout}ms. Original image returned."); - } - } - catch (Exception ex) - { - // Some security policies don't allow execution of programs in this way - ImageProcessorBootstrapper.Instance.Logger.Log(typeof(PostProcessor), ex.Message); - } - finally - { - // Make sure we always dispose and release - process?.Dispose(); - } - - return result; - } - - /// - /// Gets the correct arguments to pass to the post-processor. - /// - /// The source file. - /// The source file. - /// The source file length in bytes. - /// - /// The containing the correct command arguments. - /// - private static string GetArguments(string sourceFile, string destinationFile, long length) - { - if (!Uri.IsWellFormedUriString(sourceFile, UriKind.RelativeOrAbsolute) && !File.Exists(sourceFile)) - { - return null; - } - - string ext; - - string extension = Path.GetExtension(sourceFile); - if (extension != null) - { - ext = extension.ToLowerInvariant(); - } - else - { - return null; - } - - switch (ext) - { - case ".png": - return string.Format(CultureInfo.CurrentCulture, "/c png.cmd \"{0}\" \"{1}\"", sourceFile, destinationFile); - - case ".jpg": - case ".jpeg": - - // If it's greater than 10Kb use progressive - // http://yuiblog.com/blog/2008/12/05/imageopt-4/ - if (length > 10000) - { - return string.Format(CultureInfo.CurrentCulture, "/c cjpeg -quality 80,60 -smooth 5 -outfile \"{1}\" \"{0}\"", sourceFile, destinationFile); - } - - return string.Format(CultureInfo.CurrentCulture, "/c jpegtran -copy all -optimize -outfile \"{1}\" \"{0}\"", sourceFile, destinationFile); - - case ".gif": - return string.Format(CultureInfo.CurrentCulture, "/c gifsicle --optimize=3 \"{0}\" --output=\"{1}\"", sourceFile, destinationFile); - } - - return null; - } - } + using System; + using System.Collections.Generic; + using System.Diagnostics; + using System.IO; + using System.Threading; + using System.Threading.Tasks; + using System.Web; + + using ImageProcessor.Configuration; + using RunProcessAsTask; + + /// + /// The image post processor. + /// + /// + /// Many thanks to Azure Image Optimizer . + /// + internal static class PostProcessor + { + /// + /// Post processes the image. + /// + /// The current context. + /// The source image stream. + /// The image extension. + /// + /// The . + /// + public static async Task PostProcessImageAsync(HttpContext context, MemoryStream stream, string extension) + { + if (!PostProcessorBootstrapper.Instance.IsInstalled) + { + return stream; + } + + string sourceFile = null, destinationFile = null; + int timeout = PostProcessorBootstrapper.Instance.Timout; + try + { + // Create a temporary source file with the correct extension + string tempSourceFile = Path.GetTempFileName(); + sourceFile = Path.ChangeExtension(tempSourceFile, extension); + File.Move(tempSourceFile, sourceFile); + + // Give our destination file a unique name + destinationFile = sourceFile.Replace(extension, "-out" + extension); + + // Save the input stream to our source temp file for post processing + long length = stream.Length; + using (FileStream fileStream = File.Create(sourceFile)) + { + stream.CopyTo(fileStream); + } + + // Create cancellation token with timeout + using (var cancellationTokenSource = new CancellationTokenSource(timeout)) + { + foreach (var processStartInfo in GetProcessStartInfos(extension, length, sourceFile, destinationFile)) + { + // Use destination file as new source (if previous process created one). + if (File.Exists(destinationFile)) + { + File.Copy(destinationFile, sourceFile, true); + } + + // Set default properties + processStartInfo.FileName = Path.Combine(PostProcessorBootstrapper.Instance.WorkingPath, processStartInfo.FileName); + processStartInfo.CreateNoWindow = true; + processStartInfo.WindowStyle = ProcessWindowStyle.Hidden; + + // Run process + using (var processResults = await ProcessEx.RunAsync(processStartInfo, cancellationTokenSource.Token).ConfigureAwait(false)) + { + if (processResults.ExitCode == 1) + { + ImageProcessorBootstrapper.Instance.Logger.Log(typeof(PostProcessor), $"Unable to post process image for request {context.Request.Unvalidated.Url}, {processStartInfo.FileName} {processStartInfo.Arguments} exited with error code 1. Original image returned."); + break; + } + } + } + } + + // Save result + var result = new PostProcessingResultEventArgs(destinationFile, length); + if (result.ResultFileSize > 0 && result.Saving > 0) + { + using (FileStream fileStream = File.OpenRead(destinationFile)) + { + stream.SetLength(0); + fileStream.CopyTo(stream); + } + } + } + catch (OperationCanceledException) + { + ImageProcessorBootstrapper.Instance.Logger.Log(typeof(PostProcessor), $"Unable to post process image for request {context.Request.Unvalidated.Url} within {timeout}ms. Original image returned."); + } + catch + { + // Some security policies don't allow execution of programs in this way + } + finally + { + // Always cleanup files + try + { + // Ensure files exist, are not read only, and delete + if (sourceFile != null && File.Exists(sourceFile)) + { + File.SetAttributes(sourceFile, FileAttributes.Normal); + File.Delete(sourceFile); + } + + if (destinationFile != null && File.Exists(destinationFile)) + { + File.SetAttributes(destinationFile, FileAttributes.Normal); + File.Delete(destinationFile); + } + } + catch + { + // Normally a no no, but logging would be excessive + temp files get cleaned up eventually. + } + } + + // ALways return stream (even if it's not optimized) + stream.Position = 0; + return stream; + } + + /// + /// Gets the process start infos. + /// + /// The extension. + /// The length. + /// The source file. + /// The destination file. + /// + /// The process start infos. + /// + private static IEnumerable GetProcessStartInfos(string extension, long length, string sourceFile, string destinationFile) + { + // Make sure the commands overwrite the destination file (in case multiple are executed) + switch (extension.ToLowerInvariant()) + { + case ".png": + yield return new ProcessStartInfo("pngquant.exe", $"--quality=90-99 --output \"{destinationFile}\" \"{sourceFile}\""); + yield return new ProcessStartInfo("truepng.exe", $"-o4 -y -out \"{destinationFile}\" \"{sourceFile}\""); + break; + case ".jpg": + case ".jpeg": + if (length > 10000) + { + // If it's greater than 10Kb use progressive + // http://yuiblog.com/blog/2008/12/05/imageopt-4/ + yield return new ProcessStartInfo("cjpeg.exe", $"-quality 80,60 -smooth 5 -outfile \"{destinationFile}\" \"{sourceFile}\""); + } + else + { + yield return new ProcessStartInfo("jpegtran.exe", $"-copy all -optimize -outfile \"{destinationFile}\" \"{sourceFile}\""); + } + break; + case ".gif": + yield return new ProcessStartInfo("gifsicle.exe", $"--optimize=3 \"{sourceFile}\" --output=\"{destinationFile}\""); + break; + } + } + } } \ No newline at end of file diff --git a/src/ImageProcessor.Web.Plugins.PostProcessor/PostProcessorApplicationEvents.cs b/src/ImageProcessor.Web.Plugins.PostProcessor/PostProcessorApplicationEvents.cs index 09c20f622..b1d5be956 100644 --- a/src/ImageProcessor.Web.Plugins.PostProcessor/PostProcessorApplicationEvents.cs +++ b/src/ImageProcessor.Web.Plugins.PostProcessor/PostProcessorApplicationEvents.cs @@ -55,7 +55,7 @@ public static void SetPostProcessingTimeout(int milliseconds) /// private static void PostProcess(object sender, PostProcessingEventArgs e) { - e.ImageStream = PostProcessor.PostProcessImage(e.Context, e.ImageStream, e.ImageExtension); + e.ImageStream = PostProcessor.PostProcessImageAsync(e.Context, e.ImageStream, e.ImageExtension).Result; } } } diff --git a/src/ImageProcessor.Web.Plugins.PostProcessor/PostProcessorBootstrapper.cs b/src/ImageProcessor.Web.Plugins.PostProcessor/PostProcessorBootstrapper.cs index 1d2b4cd61..b4617aa3b 100644 --- a/src/ImageProcessor.Web.Plugins.PostProcessor/PostProcessorBootstrapper.cs +++ b/src/ImageProcessor.Web.Plugins.PostProcessor/PostProcessorBootstrapper.cs @@ -131,8 +131,7 @@ public void RegisterExecutables() { "libjpeg-62.dll", "ImageProcessor.Web.Plugins.PostProcessor.Resources.Unmanaged.x86.libjpeg-62.dll" }, { "pngquant.exe", "ImageProcessor.Web.Plugins.PostProcessor.Resources.Unmanaged.x86.pngquant.exe" }, { "pngout.exe", "ImageProcessor.Web.Plugins.PostProcessor.Resources.Unmanaged.x86.pngout.exe" }, - { "TruePNG.exe", "ImageProcessor.Web.Plugins.PostProcessor.Resources.Unmanaged.x86.TruePNG.exe" }, - { "png.cmd", "ImageProcessor.Web.Plugins.PostProcessor.Resources.Unmanaged.x86.png.cmd" } + { "TruePNG.exe", "ImageProcessor.Web.Plugins.PostProcessor.Resources.Unmanaged.x86.TruePNG.exe" } }; // Write the files out to the bin folder. diff --git a/src/ImageProcessor.Web.Plugins.PostProcessor/Resources/Unmanaged/x86/png.cmd b/src/ImageProcessor.Web.Plugins.PostProcessor/Resources/Unmanaged/x86/png.cmd deleted file mode 100644 index 18679deb7..000000000 --- a/src/ImageProcessor.Web.Plugins.PostProcessor/Resources/Unmanaged/x86/png.cmd +++ /dev/null @@ -1,4 +0,0 @@ -pngquant --quality=90-99 --output %2 %1 --force -if not exist %2 copy %1 %2 /y - -truepng %2 /o4 \ No newline at end of file diff --git a/src/ImageProcessor.Web.Plugins.PostProcessor/packages.config b/src/ImageProcessor.Web.Plugins.PostProcessor/packages.config new file mode 100644 index 000000000..94b9aee3c --- /dev/null +++ b/src/ImageProcessor.Web.Plugins.PostProcessor/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file From 4709182e54d47d9569e4f88ed4f8efafc41464a6 Mon Sep 17 00:00:00 2001 From: Ronald Barendse Date: Thu, 14 Jun 2018 01:08:12 +0200 Subject: [PATCH 078/113] Skip writing source file if no processing can be done --- .../PostProcessor.cs | 70 +++++++++++-------- 1 file changed, 39 insertions(+), 31 deletions(-) diff --git a/src/ImageProcessor.Web.Plugins.PostProcessor/PostProcessor.cs b/src/ImageProcessor.Web.Plugins.PostProcessor/PostProcessor.cs index 2149a9944..c300bc87b 100644 --- a/src/ImageProcessor.Web.Plugins.PostProcessor/PostProcessor.cs +++ b/src/ImageProcessor.Web.Plugins.PostProcessor/PostProcessor.cs @@ -15,6 +15,7 @@ namespace ImageProcessor.Web.Plugins.PostProcessor using System.Collections.Generic; using System.Diagnostics; using System.IO; + using System.Linq; using System.Threading; using System.Threading.Tasks; using System.Web; @@ -50,6 +51,9 @@ public static async Task PostProcessImageAsync(HttpContext context int timeout = PostProcessorBootstrapper.Instance.Timout; try { + // Save source file length + long length = stream.Length; + // Create a temporary source file with the correct extension string tempSourceFile = Path.GetTempFileName(); sourceFile = Path.ChangeExtension(tempSourceFile, extension); @@ -58,49 +62,53 @@ public static async Task PostProcessImageAsync(HttpContext context // Give our destination file a unique name destinationFile = sourceFile.Replace(extension, "-out" + extension); - // Save the input stream to our source temp file for post processing - long length = stream.Length; - using (FileStream fileStream = File.Create(sourceFile)) + // Get processes to start + var processStartInfos = GetProcessStartInfos(extension, length, sourceFile, destinationFile).ToList(); + if (processStartInfos.Count > 0) { - stream.CopyTo(fileStream); - } + // Save the input stream to our source temp file for post processing + using (FileStream fileStream = File.Create(sourceFile)) + { + stream.CopyTo(fileStream); + } - // Create cancellation token with timeout - using (var cancellationTokenSource = new CancellationTokenSource(timeout)) - { - foreach (var processStartInfo in GetProcessStartInfos(extension, length, sourceFile, destinationFile)) + // Create cancellation token with timeout + using (var cancellationTokenSource = new CancellationTokenSource(timeout)) { - // Use destination file as new source (if previous process created one). - if (File.Exists(destinationFile)) + foreach (var processStartInfo in processStartInfos) { - File.Copy(destinationFile, sourceFile, true); - } + // Use destination file as new source (if previous process created one). + if (File.Exists(destinationFile)) + { + File.Copy(destinationFile, sourceFile, true); + } - // Set default properties - processStartInfo.FileName = Path.Combine(PostProcessorBootstrapper.Instance.WorkingPath, processStartInfo.FileName); - processStartInfo.CreateNoWindow = true; - processStartInfo.WindowStyle = ProcessWindowStyle.Hidden; + // Set default properties + processStartInfo.FileName = Path.Combine(PostProcessorBootstrapper.Instance.WorkingPath, processStartInfo.FileName); + processStartInfo.CreateNoWindow = true; + processStartInfo.WindowStyle = ProcessWindowStyle.Hidden; - // Run process - using (var processResults = await ProcessEx.RunAsync(processStartInfo, cancellationTokenSource.Token).ConfigureAwait(false)) - { - if (processResults.ExitCode == 1) + // Run process + using (var processResults = await ProcessEx.RunAsync(processStartInfo, cancellationTokenSource.Token).ConfigureAwait(false)) { - ImageProcessorBootstrapper.Instance.Logger.Log(typeof(PostProcessor), $"Unable to post process image for request {context.Request.Unvalidated.Url}, {processStartInfo.FileName} {processStartInfo.Arguments} exited with error code 1. Original image returned."); - break; + if (processResults.ExitCode == 1) + { + ImageProcessorBootstrapper.Instance.Logger.Log(typeof(PostProcessor), $"Unable to post process image for request {context.Request.Unvalidated.Url}, {processStartInfo.FileName} {processStartInfo.Arguments} exited with error code 1. Original image returned."); + break; + } } } } - } - // Save result - var result = new PostProcessingResultEventArgs(destinationFile, length); - if (result.ResultFileSize > 0 && result.Saving > 0) - { - using (FileStream fileStream = File.OpenRead(destinationFile)) + // Save result + var result = new PostProcessingResultEventArgs(destinationFile, length); + if (result.ResultFileSize > 0 && result.Saving > 0) { - stream.SetLength(0); - fileStream.CopyTo(stream); + using (FileStream fileStream = File.OpenRead(destinationFile)) + { + stream.SetLength(0); + fileStream.CopyTo(stream); + } } } } From 5a027d7cac9c984ae904fa505b4fc29d04ea88c8 Mon Sep 17 00:00:00 2001 From: Ronald Barendse Date: Thu, 14 Jun 2018 01:18:55 +0200 Subject: [PATCH 079/113] Copy streams asynchronously --- src/ImageProcessor.Web.Plugins.PostProcessor/PostProcessor.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ImageProcessor.Web.Plugins.PostProcessor/PostProcessor.cs b/src/ImageProcessor.Web.Plugins.PostProcessor/PostProcessor.cs index c300bc87b..ffa43f045 100644 --- a/src/ImageProcessor.Web.Plugins.PostProcessor/PostProcessor.cs +++ b/src/ImageProcessor.Web.Plugins.PostProcessor/PostProcessor.cs @@ -69,7 +69,7 @@ public static async Task PostProcessImageAsync(HttpContext context // Save the input stream to our source temp file for post processing using (FileStream fileStream = File.Create(sourceFile)) { - stream.CopyTo(fileStream); + await stream.CopyToAsync(fileStream).ConfigureAwait(false); } // Create cancellation token with timeout @@ -107,7 +107,7 @@ public static async Task PostProcessImageAsync(HttpContext context using (FileStream fileStream = File.OpenRead(destinationFile)) { stream.SetLength(0); - fileStream.CopyTo(stream); + await fileStream.CopyToAsync(stream).ConfigureAwait(false); } } } From fbae5a4bd5d508a9ada6e734e75bd299aeb0ca9f Mon Sep 17 00:00:00 2001 From: Ronald Barendse Date: Thu, 14 Jun 2018 01:27:35 +0200 Subject: [PATCH 080/113] Fixed tabs to spaces --- .../PostProcessor.cs | 326 +++++++++--------- 1 file changed, 163 insertions(+), 163 deletions(-) diff --git a/src/ImageProcessor.Web.Plugins.PostProcessor/PostProcessor.cs b/src/ImageProcessor.Web.Plugins.PostProcessor/PostProcessor.cs index ffa43f045..eb1bc6f7d 100644 --- a/src/ImageProcessor.Web.Plugins.PostProcessor/PostProcessor.cs +++ b/src/ImageProcessor.Web.Plugins.PostProcessor/PostProcessor.cs @@ -11,180 +11,180 @@ namespace ImageProcessor.Web.Plugins.PostProcessor { - using System; - using System.Collections.Generic; - using System.Diagnostics; - using System.IO; - using System.Linq; - using System.Threading; - using System.Threading.Tasks; - using System.Web; + using System; + using System.Collections.Generic; + using System.Diagnostics; + using System.IO; + using System.Linq; + using System.Threading; + using System.Threading.Tasks; + using System.Web; - using ImageProcessor.Configuration; - using RunProcessAsTask; + using ImageProcessor.Configuration; + using RunProcessAsTask; - /// - /// The image post processor. - /// - /// - /// Many thanks to Azure Image Optimizer . - /// - internal static class PostProcessor - { - /// - /// Post processes the image. - /// - /// The current context. - /// The source image stream. - /// The image extension. - /// - /// The . - /// - public static async Task PostProcessImageAsync(HttpContext context, MemoryStream stream, string extension) - { - if (!PostProcessorBootstrapper.Instance.IsInstalled) - { - return stream; - } + /// + /// The image post processor. + /// + /// + /// Many thanks to Azure Image Optimizer . + /// + internal static class PostProcessor + { + /// + /// Post processes the image. + /// + /// The current context. + /// The source image stream. + /// The image extension. + /// + /// The . + /// + public static async Task PostProcessImageAsync(HttpContext context, MemoryStream stream, string extension) + { + if (!PostProcessorBootstrapper.Instance.IsInstalled) + { + return stream; + } - string sourceFile = null, destinationFile = null; - int timeout = PostProcessorBootstrapper.Instance.Timout; - try - { - // Save source file length - long length = stream.Length; + string sourceFile = null, destinationFile = null; + int timeout = PostProcessorBootstrapper.Instance.Timout; + try + { + // Save source file length + long length = stream.Length; - // Create a temporary source file with the correct extension - string tempSourceFile = Path.GetTempFileName(); - sourceFile = Path.ChangeExtension(tempSourceFile, extension); - File.Move(tempSourceFile, sourceFile); + // Create a temporary source file with the correct extension + string tempSourceFile = Path.GetTempFileName(); + sourceFile = Path.ChangeExtension(tempSourceFile, extension); + File.Move(tempSourceFile, sourceFile); - // Give our destination file a unique name - destinationFile = sourceFile.Replace(extension, "-out" + extension); + // Give our destination file a unique name + destinationFile = sourceFile.Replace(extension, "-out" + extension); - // Get processes to start - var processStartInfos = GetProcessStartInfos(extension, length, sourceFile, destinationFile).ToList(); - if (processStartInfos.Count > 0) - { - // Save the input stream to our source temp file for post processing - using (FileStream fileStream = File.Create(sourceFile)) - { - await stream.CopyToAsync(fileStream).ConfigureAwait(false); - } + // Get processes to start + var processStartInfos = GetProcessStartInfos(extension, length, sourceFile, destinationFile).ToList(); + if (processStartInfos.Count > 0) + { + // Save the input stream to our source temp file for post processing + using (FileStream fileStream = File.Create(sourceFile)) + { + await stream.CopyToAsync(fileStream).ConfigureAwait(false); + } - // Create cancellation token with timeout - using (var cancellationTokenSource = new CancellationTokenSource(timeout)) - { - foreach (var processStartInfo in processStartInfos) - { - // Use destination file as new source (if previous process created one). - if (File.Exists(destinationFile)) - { - File.Copy(destinationFile, sourceFile, true); - } + // Create cancellation token with timeout + using (var cancellationTokenSource = new CancellationTokenSource(timeout)) + { + foreach (var processStartInfo in processStartInfos) + { + // Use destination file as new source (if previous process created one). + if (File.Exists(destinationFile)) + { + File.Copy(destinationFile, sourceFile, true); + } - // Set default properties - processStartInfo.FileName = Path.Combine(PostProcessorBootstrapper.Instance.WorkingPath, processStartInfo.FileName); - processStartInfo.CreateNoWindow = true; - processStartInfo.WindowStyle = ProcessWindowStyle.Hidden; + // Set default properties + processStartInfo.FileName = Path.Combine(PostProcessorBootstrapper.Instance.WorkingPath, processStartInfo.FileName); + processStartInfo.CreateNoWindow = true; + processStartInfo.WindowStyle = ProcessWindowStyle.Hidden; - // Run process - using (var processResults = await ProcessEx.RunAsync(processStartInfo, cancellationTokenSource.Token).ConfigureAwait(false)) - { - if (processResults.ExitCode == 1) - { - ImageProcessorBootstrapper.Instance.Logger.Log(typeof(PostProcessor), $"Unable to post process image for request {context.Request.Unvalidated.Url}, {processStartInfo.FileName} {processStartInfo.Arguments} exited with error code 1. Original image returned."); - break; - } - } - } - } + // Run process + using (var processResults = await ProcessEx.RunAsync(processStartInfo, cancellationTokenSource.Token).ConfigureAwait(false)) + { + if (processResults.ExitCode == 1) + { + ImageProcessorBootstrapper.Instance.Logger.Log(typeof(PostProcessor), $"Unable to post process image for request {context.Request.Unvalidated.Url}, {processStartInfo.FileName} {processStartInfo.Arguments} exited with error code 1. Original image returned."); + break; + } + } + } + } - // Save result - var result = new PostProcessingResultEventArgs(destinationFile, length); - if (result.ResultFileSize > 0 && result.Saving > 0) - { - using (FileStream fileStream = File.OpenRead(destinationFile)) - { - stream.SetLength(0); - await fileStream.CopyToAsync(stream).ConfigureAwait(false); - } - } - } - } - catch (OperationCanceledException) - { - ImageProcessorBootstrapper.Instance.Logger.Log(typeof(PostProcessor), $"Unable to post process image for request {context.Request.Unvalidated.Url} within {timeout}ms. Original image returned."); - } - catch - { - // Some security policies don't allow execution of programs in this way - } - finally - { - // Always cleanup files - try - { - // Ensure files exist, are not read only, and delete - if (sourceFile != null && File.Exists(sourceFile)) - { - File.SetAttributes(sourceFile, FileAttributes.Normal); - File.Delete(sourceFile); - } + // Save result + var result = new PostProcessingResultEventArgs(destinationFile, length); + if (result.ResultFileSize > 0 && result.Saving > 0) + { + using (FileStream fileStream = File.OpenRead(destinationFile)) + { + stream.SetLength(0); + await fileStream.CopyToAsync(stream).ConfigureAwait(false); + } + } + } + } + catch (OperationCanceledException) + { + ImageProcessorBootstrapper.Instance.Logger.Log(typeof(PostProcessor), $"Unable to post process image for request {context.Request.Unvalidated.Url} within {timeout}ms. Original image returned."); + } + catch + { + // Some security policies don't allow execution of programs in this way + } + finally + { + // Always cleanup files + try + { + // Ensure files exist, are not read only, and delete + if (sourceFile != null && File.Exists(sourceFile)) + { + File.SetAttributes(sourceFile, FileAttributes.Normal); + File.Delete(sourceFile); + } - if (destinationFile != null && File.Exists(destinationFile)) - { - File.SetAttributes(destinationFile, FileAttributes.Normal); - File.Delete(destinationFile); - } - } - catch - { - // Normally a no no, but logging would be excessive + temp files get cleaned up eventually. - } - } + if (destinationFile != null && File.Exists(destinationFile)) + { + File.SetAttributes(destinationFile, FileAttributes.Normal); + File.Delete(destinationFile); + } + } + catch + { + // Normally a no no, but logging would be excessive + temp files get cleaned up eventually. + } + } - // ALways return stream (even if it's not optimized) - stream.Position = 0; - return stream; - } + // ALways return stream (even if it's not optimized) + stream.Position = 0; + return stream; + } - /// - /// Gets the process start infos. - /// - /// The extension. - /// The length. - /// The source file. - /// The destination file. - /// - /// The process start infos. - /// - private static IEnumerable GetProcessStartInfos(string extension, long length, string sourceFile, string destinationFile) - { - // Make sure the commands overwrite the destination file (in case multiple are executed) - switch (extension.ToLowerInvariant()) - { - case ".png": - yield return new ProcessStartInfo("pngquant.exe", $"--quality=90-99 --output \"{destinationFile}\" \"{sourceFile}\""); - yield return new ProcessStartInfo("truepng.exe", $"-o4 -y -out \"{destinationFile}\" \"{sourceFile}\""); - break; - case ".jpg": - case ".jpeg": - if (length > 10000) - { - // If it's greater than 10Kb use progressive - // http://yuiblog.com/blog/2008/12/05/imageopt-4/ - yield return new ProcessStartInfo("cjpeg.exe", $"-quality 80,60 -smooth 5 -outfile \"{destinationFile}\" \"{sourceFile}\""); - } - else - { - yield return new ProcessStartInfo("jpegtran.exe", $"-copy all -optimize -outfile \"{destinationFile}\" \"{sourceFile}\""); - } - break; - case ".gif": - yield return new ProcessStartInfo("gifsicle.exe", $"--optimize=3 \"{sourceFile}\" --output=\"{destinationFile}\""); - break; - } - } - } + /// + /// Gets the process start infos. + /// + /// The extension. + /// The length. + /// The source file. + /// The destination file. + /// + /// The process start infos. + /// + private static IEnumerable GetProcessStartInfos(string extension, long length, string sourceFile, string destinationFile) + { + // Make sure the commands overwrite the destination file (in case multiple are executed) + switch (extension.ToLowerInvariant()) + { + case ".png": + yield return new ProcessStartInfo("pngquant.exe", $"--quality=90-99 --output \"{destinationFile}\" \"{sourceFile}\""); + yield return new ProcessStartInfo("truepng.exe", $"-o4 -y -out \"{destinationFile}\" \"{sourceFile}\""); + break; + case ".jpg": + case ".jpeg": + if (length > 10000) + { + // If it's greater than 10Kb use progressive + // http://yuiblog.com/blog/2008/12/05/imageopt-4/ + yield return new ProcessStartInfo("cjpeg.exe", $"-quality 80,60 -smooth 5 -outfile \"{destinationFile}\" \"{sourceFile}\""); + } + else + { + yield return new ProcessStartInfo("jpegtran.exe", $"-copy all -optimize -outfile \"{destinationFile}\" \"{sourceFile}\""); + } + break; + case ".gif": + yield return new ProcessStartInfo("gifsicle.exe", $"--optimize=3 \"{sourceFile}\" --output=\"{destinationFile}\""); + break; + } + } + } } \ No newline at end of file From ed61adc3e2b9a3f9e363fe16d4acc2cb472afcb7 Mon Sep 17 00:00:00 2001 From: Ronald Barendse Date: Thu, 14 Jun 2018 01:46:14 +0200 Subject: [PATCH 081/113] Remove System.Management reference --- .../ImageProcessor.Web.Plugins.PostProcessor.csproj | 1 - 1 file changed, 1 deletion(-) diff --git a/src/ImageProcessor.Web.Plugins.PostProcessor/ImageProcessor.Web.Plugins.PostProcessor.csproj b/src/ImageProcessor.Web.Plugins.PostProcessor/ImageProcessor.Web.Plugins.PostProcessor.csproj index 55347be0f..cb3dfe5ba 100644 --- a/src/ImageProcessor.Web.Plugins.PostProcessor/ImageProcessor.Web.Plugins.PostProcessor.csproj +++ b/src/ImageProcessor.Web.Plugins.PostProcessor/ImageProcessor.Web.Plugins.PostProcessor.csproj @@ -38,7 +38,6 @@ - From 15377dba1552780de21fd1687714f97a8ce05704 Mon Sep 17 00:00:00 2001 From: Ronald Barendse Date: Thu, 14 Jun 2018 21:20:04 +0200 Subject: [PATCH 082/113] Removed ProcessEx dependency --- ...Processor.Web.Plugins.PostProcessor.csproj | 7 +- .../PostProcessor.cs | 1 - .../ProcessEx.cs | 190 ++++++++++++++++++ .../packages.config | 4 - 4 files changed, 191 insertions(+), 11 deletions(-) create mode 100644 src/ImageProcessor.Web.Plugins.PostProcessor/ProcessEx.cs delete mode 100644 src/ImageProcessor.Web.Plugins.PostProcessor/packages.config diff --git a/src/ImageProcessor.Web.Plugins.PostProcessor/ImageProcessor.Web.Plugins.PostProcessor.csproj b/src/ImageProcessor.Web.Plugins.PostProcessor/ImageProcessor.Web.Plugins.PostProcessor.csproj index cb3dfe5ba..386457966 100644 --- a/src/ImageProcessor.Web.Plugins.PostProcessor/ImageProcessor.Web.Plugins.PostProcessor.csproj +++ b/src/ImageProcessor.Web.Plugins.PostProcessor/ImageProcessor.Web.Plugins.PostProcessor.csproj @@ -33,9 +33,6 @@ bin\Release\ImageProcessor.Web.Plugins.PostProcessor.xml - - ..\..\packages\RunProcessAsTask.1.2.2\lib\net45\RunProcessAsTask.dll - @@ -51,12 +48,10 @@ + - - Designer - diff --git a/src/ImageProcessor.Web.Plugins.PostProcessor/PostProcessor.cs b/src/ImageProcessor.Web.Plugins.PostProcessor/PostProcessor.cs index bd08942a4..3a0e71350 100644 --- a/src/ImageProcessor.Web.Plugins.PostProcessor/PostProcessor.cs +++ b/src/ImageProcessor.Web.Plugins.PostProcessor/PostProcessor.cs @@ -21,7 +21,6 @@ namespace ImageProcessor.Web.Plugins.PostProcessor using System.Web; using ImageProcessor.Configuration; - using RunProcessAsTask; /// /// The image post processor. diff --git a/src/ImageProcessor.Web.Plugins.PostProcessor/ProcessEx.cs b/src/ImageProcessor.Web.Plugins.PostProcessor/ProcessEx.cs new file mode 100644 index 000000000..eb7d9cf31 --- /dev/null +++ b/src/ImageProcessor.Web.Plugins.PostProcessor/ProcessEx.cs @@ -0,0 +1,190 @@ +using System; +using System.Diagnostics; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +namespace ImageProcessor.Web.Plugins.PostProcessor +{ + /// + /// Provides methods to run a process asynchronously. + /// + /// + /// Copyright (c) 2013 James Manning + /// + /// https://github.com/jamesmanning/RunProcessAsTask + /// + public static class ProcessEx + { + /// + /// Asynchronously runs the process. + /// + /// Name of the file. + /// The arguments. + /// The cancellation token. + /// + /// A task that represents the asynchronous process. + /// + public static Task RunAsync(string fileName, string arguments = null, CancellationToken cancellationToken = default(CancellationToken)) => RunAsync(new ProcessStartInfo(fileName, arguments), cancellationToken); + + /// + /// Asynchronously runs the process. + /// + /// The process start information. + /// The cancellation token. + /// + /// A task that represents the asynchronous process. + /// + public static async Task RunAsync(ProcessStartInfo processStartInfo, CancellationToken cancellationToken = default(CancellationToken)) + { + // Force some settings in the start info so we can capture the output + processStartInfo.UseShellExecute = false; + processStartInfo.RedirectStandardOutput = true; + processStartInfo.RedirectStandardError = true; + + var process = new Process + { + StartInfo = processStartInfo, + EnableRaisingEvents = true + }; + + var processStartTime = new TaskCompletionSource(); + + var standardOutput = new StringBuilder(); + var standardOutputResults = new TaskCompletionSource(); + process.OutputDataReceived += (sender, args) => + { + if (args.Data != null) + { + standardOutput.AppendLine(args.Data); + } + else + { + standardOutputResults.SetResult(standardOutput.ToString()); + } + }; + + var standardError = new StringBuilder(); + var standardErrorResults = new TaskCompletionSource(); + process.ErrorDataReceived += (sender, args) => + { + if (args.Data != null) + { + standardError.AppendLine(args.Data); + } + else + { + standardErrorResults.SetResult(standardError.ToString()); + } + }; + + var tcs = new TaskCompletionSource(); + + process.Exited += async (sender, args) => + { + tcs.TrySetResult(new ProcessResults(process, await processStartTime.Task.ConfigureAwait(false), await standardOutputResults.Task.ConfigureAwait(false), await standardErrorResults.Task.ConfigureAwait(false))); + }; + + using (cancellationToken.Register(() => + { + tcs.TrySetCanceled(); + + try + { + if (!process.HasExited) + { + process.Kill(); + } + } + catch (InvalidOperationException) + { } + })) + { + cancellationToken.ThrowIfCancellationRequested(); + + if (!process.Start()) + { + tcs.TrySetException(new InvalidOperationException("Failed to start process.")); + } + + processStartTime.SetResult(process.StartTime); + + process.BeginOutputReadLine(); + process.BeginErrorReadLine(); + + return await tcs.Task.ConfigureAwait(false); + } + } + } + + /// + /// Specifies the process results. + /// + /// + public sealed class ProcessResults : IDisposable + { + /// + /// Gets the process. + /// + /// + /// The process. + /// + public Process Process { get; } + + /// + /// Gets the exit code. + /// + /// + /// The exit code. + /// + public int ExitCode { get; } + + /// + /// Gets the run time. + /// + /// + /// The run time. + /// + public TimeSpan RunTime { get; } + + /// + /// Gets the standard output. + /// + /// + /// The standard output. + /// + public string StandardOutput { get; } + + /// + /// Gets the standard error output. + /// + /// + /// The standard error output. + /// + public string StandardError { get; } + + /// + /// Initializes a new instance of the class. + /// + /// The process. + /// The process start time. + /// The standard output. + /// The standard error. + public ProcessResults(Process process, DateTime processStartTime, string standardOutput, string standardError) + { + this.Process = process; + this.ExitCode = process.ExitCode; + this.RunTime = process.ExitTime - processStartTime; + this.StandardOutput = standardOutput; + this.StandardError = standardError; + } + + /// + /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + /// + public void Dispose() + { + this.Process.Dispose(); + } + } +} diff --git a/src/ImageProcessor.Web.Plugins.PostProcessor/packages.config b/src/ImageProcessor.Web.Plugins.PostProcessor/packages.config deleted file mode 100644 index 94b9aee3c..000000000 --- a/src/ImageProcessor.Web.Plugins.PostProcessor/packages.config +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file From 0582feb944632540b90171ff2d6f1bdeb4f2c9bd Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Thu, 30 Aug 2018 07:39:24 +0100 Subject: [PATCH 083/113] Use per-service HttpClient instances. Fix #690 --- src/ImageProcessor.Web/Helpers/RemoteFile.cs | 32 ++++++++++++------- .../Services/CloudImageService.cs | 16 +++++----- .../Services/RemoteImageService.cs | 11 ++++--- 3 files changed, 35 insertions(+), 24 deletions(-) diff --git a/src/ImageProcessor.Web/Helpers/RemoteFile.cs b/src/ImageProcessor.Web/Helpers/RemoteFile.cs index dc51f8674..c9dc7bdf9 100644 --- a/src/ImageProcessor.Web/Helpers/RemoteFile.cs +++ b/src/ImageProcessor.Web/Helpers/RemoteFile.cs @@ -36,37 +36,44 @@ namespace ImageProcessor.Web.Helpers /// This class will not throw an exception if the Uri supplied points to a resource local to the running application instance. /// /// There shouldn't be any security issues there, as the internal instance is still calling it remotely. - /// Any local files that shouldn't be accessed by this won't be allowed by the remote call. + /// Any local files that shouldn't be accessed by this and won't be allowed by the remote call. /// /// internal sealed class RemoteFile { - private static readonly HttpClientHandler Handler = new HttpClientHandler() + /// + /// The default message handler used by HttpClient instances. + /// + public static readonly HttpClientHandler Handler = new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate, Credentials = CredentialCache.DefaultNetworkCredentials }; - private static readonly HttpClient Client = new HttpClient(Handler); + private readonly HttpClient client; /// /// Initializes a new instance of the class. /// + /// The client used for creating the web request. /// The maximum time, in milliseconds, to wait before the request times out. /// The maximum download size, in bytes, that a remote file download attempt can be. - public RemoteFile(int timeoutMilliseconds, int maxDownloadSize) - : this(timeoutMilliseconds, maxDownloadSize, null) + public RemoteFile(HttpClient client, int timeoutMilliseconds, int maxDownloadSize) + : this(client, timeoutMilliseconds, maxDownloadSize, null) { } /// /// Initializes a new instance of the class. /// + /// The client used for creating the web request. /// The maximum time, in milliseconds, to wait before the request times out. /// The maximum download size, in bytes, that a remote file download attempt can be. /// The User-Agent header to be passed when requesting the remote file. - public RemoteFile(int timeoutMilliseconds, int maxDownloadSize, string userAgent) + public RemoteFile(HttpClient client, int timeoutMilliseconds, int maxDownloadSize, string userAgent) { + this.client = client ?? new HttpClient(Handler); + if (timeoutMilliseconds >= 0) { this.Timeout = TimeSpan.FromMilliseconds(timeoutMilliseconds); @@ -81,11 +88,11 @@ public RemoteFile(int timeoutMilliseconds, int maxDownloadSize, string userAgent // We're reusing the same static HttpClient so we don't exhaust the number of sockets available under heavy loads. // We're always using the same timeout, and user-agent values per all instances so it's ok to set the values here per instance. - Client.Timeout = this.Timeout; - var key = "User-Agent"; - if (!string.IsNullOrWhiteSpace(this.UserAgent) && !Client.DefaultRequestHeaders.TryGetValues(key, out var _)) + this.client.Timeout = this.Timeout; + const string key = "User-Agent"; + if (!string.IsNullOrWhiteSpace(this.UserAgent) && !this.client.DefaultRequestHeaders.TryGetValues(key, out IEnumerable _)) { - Client.DefaultRequestHeaders.Add(key, this.UserAgent); + this.client.DefaultRequestHeaders.Add(key, this.UserAgent); } } @@ -113,6 +120,7 @@ public RemoteFile(int timeoutMilliseconds, int maxDownloadSize, string userAgent /// /// /// + /// The request uri. /// The used to download this file. /// /// The . @@ -128,7 +136,7 @@ void Log(HttpRequestException ex) HttpStatusCode statusCode = HttpStatusCode.OK; try { - response = await Client.GetAsync(uri).ConfigureAwait(false); + response = await this.client.GetAsync(uri).ConfigureAwait(false); statusCode = response.StatusCode; response.EnsureSuccessStatusCode(); @@ -138,7 +146,7 @@ void Log(HttpRequestException ex) if (contentLength > this.MaxDownloadSize) { response.Dispose(); - string message = "An attempt to download a remote file has been halted because the file is larger than allowed."; + const string message = "An attempt to download a remote file has been halted because the file is larger than allowed."; ImageProcessorBootstrapper.Instance.Logger.Log(message); throw new SecurityException(message); } diff --git a/src/ImageProcessor.Web/Services/CloudImageService.cs b/src/ImageProcessor.Web/Services/CloudImageService.cs index 5bdc4ccb3..e6aff9082 100644 --- a/src/ImageProcessor.Web/Services/CloudImageService.cs +++ b/src/ImageProcessor.Web/Services/CloudImageService.cs @@ -26,7 +26,10 @@ namespace ImageProcessor.Web.Services /// public class CloudImageService : IImageService { + private static readonly HttpClient Client = new HttpClient(RemoteFile.Handler); + private RemoteFile remoteFile; + private Dictionary settings = new Dictionary { {"MaxBytes", "4194304"}, @@ -75,10 +78,7 @@ public Dictionary Settings /// /// True if the request is valid; otherwise, False. /// - public virtual bool IsValidRequest(string path) - { - return ImageHelpers.IsValidImageExtension(path); - } + public virtual bool IsValidRequest(string path) => ImageHelpers.IsValidImageExtension(path); /// /// Gets the image using the given identifier. @@ -91,7 +91,7 @@ public virtual async Task GetImage(object id) { string host = this.Settings["Host"]; string container = this.Settings.ContainsKey("Container") ? this.Settings["Container"] : string.Empty; - Uri baseUri = new Uri(host); + var baseUri = new Uri(host); string relativeResourceUrl = id.ToString(); if (!string.IsNullOrEmpty(container)) @@ -105,7 +105,7 @@ public virtual async Task GetImage(object id) } byte[] buffer; - Uri uri = new Uri(baseUri, relativeResourceUrl); + var uri = new Uri(baseUri, relativeResourceUrl); if (this.remoteFile == null) { @@ -119,7 +119,7 @@ public virtual async Task GetImage(object id) return null; } - using (RecyclableMemoryStream memoryStream = new RecyclableMemoryStream(MemoryStreamPool.Shared)) + using (var memoryStream = new RecyclableMemoryStream(MemoryStreamPool.Shared)) { using (HttpResponseMessage response = httpResponse) { @@ -141,7 +141,7 @@ private void InitRemoteFile() { int timeout = int.Parse(this.Settings["Timeout"]); int maxDownloadSize = int.Parse(this.Settings["MaxBytes"]); - this.remoteFile = new RemoteFile(timeout, maxDownloadSize); + this.remoteFile = new RemoteFile(Client, timeout, maxDownloadSize); } } } \ No newline at end of file diff --git a/src/ImageProcessor.Web/Services/RemoteImageService.cs b/src/ImageProcessor.Web/Services/RemoteImageService.cs index dd959ee60..2273604e9 100644 --- a/src/ImageProcessor.Web/Services/RemoteImageService.cs +++ b/src/ImageProcessor.Web/Services/RemoteImageService.cs @@ -24,7 +24,10 @@ namespace ImageProcessor.Web.Services /// public class RemoteImageService : IImageService { + private static readonly HttpClient Client = new HttpClient(RemoteFile.Handler); + private RemoteFile remoteFile; + private Dictionary settings = new Dictionary { { "MaxBytes", "4194304" }, @@ -77,7 +80,7 @@ public Dictionary Settings public virtual bool IsValidRequest(string path) { // Check the url is from a whitelisted location. - Uri url = new Uri(path); + var url = new Uri(path); string upper = url.Host.ToUpperInvariant(); // Check for root or sub domain. @@ -86,7 +89,7 @@ public virtual bool IsValidRequest(string path) { if (!uri.IsAbsoluteUri) { - Uri rebaseUri = new Uri("http://" + uri.ToString().TrimStart('.', '/')); + var rebaseUri = new Uri("http://" + uri.ToString().TrimStart('.', '/')); validUrl = upper.StartsWith(rebaseUri.Host.ToUpperInvariant()) || upper.EndsWith(rebaseUri.Host.ToUpperInvariant()); } else @@ -126,7 +129,7 @@ public virtual async Task GetImage(object id) return null; } - using (RecyclableMemoryStream memoryStream = new RecyclableMemoryStream(MemoryStreamPool.Shared)) + using (var memoryStream = new RecyclableMemoryStream(MemoryStreamPool.Shared)) { using (HttpResponseMessage response = httpResponse) { @@ -150,7 +153,7 @@ private void InitRemoteFile() int maxDownloadSize = int.Parse(this.Settings["MaxBytes"]); this.Settings.TryGetValue("Useragent", out string userAgent); - this.remoteFile = new RemoteFile(timeout, maxDownloadSize, userAgent); + this.remoteFile = new RemoteFile(Client, timeout, maxDownloadSize, userAgent); } } } \ No newline at end of file From ae77c918a4600f4eda9901596716fd7b56ec8911 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Thu, 30 Aug 2018 16:28:55 +0100 Subject: [PATCH 084/113] Remove child processes and optimize post process. --- .../ImageProcessor.Web.PostProcessor.nuspec | 2 +- build/build.ps1 | 4 +- ...Processor.Web.Plugins.PostProcessor.csproj | 1 - .../PostProcessor.cs | 230 +++++++++--------- .../PostProcessorBootstrapper.cs | 7 +- .../Resources/Unmanaged/x86/png.cmd | 4 - 6 files changed, 120 insertions(+), 128 deletions(-) delete mode 100644 src/ImageProcessor.Web.Plugins.PostProcessor/Resources/Unmanaged/x86/png.cmd diff --git a/build/NuSpecs/ImageProcessor.Web.PostProcessor.nuspec b/build/NuSpecs/ImageProcessor.Web.PostProcessor.nuspec index 744343edd..3001bc341 100644 --- a/build/NuSpecs/ImageProcessor.Web.PostProcessor.nuspec +++ b/build/NuSpecs/ImageProcessor.Web.PostProcessor.nuspec @@ -23,7 +23,7 @@ Image Resize Crop Rotate Quality Watermark Gif Jpg Jpeg Bitmap Png Tiff ASP Cache EXIF - + diff --git a/build/build.ps1 b/build/build.ps1 index 00e20754b..2f6c588c1 100644 --- a/build/build.ps1 +++ b/build/build.ps1 @@ -35,7 +35,7 @@ $imageProcessorPluginsWebP = @{ $imageprocessorWeb = @{ name = "ImageProcessor.Web" - version = "4.9.3.${buildNumber}" + version = "4.9.4.${buildNumber}" folder = Join-Path $buildPath "src\ImageProcessor.Web" output = Join-Path $binPath "ImageProcessor.Web\lib\net452" csproj = "ImageProcessor.Web.csproj" @@ -58,7 +58,7 @@ $imageProcessorWebPluginsAzureBlobCache = @{ $imageProcessorWebPluginsPostProcessor = @{ name = "ImageProcessor.Web.Plugins.PostProcessor" - version = "1.3.1.${buildNumber}" + version = "1.3.2.${buildNumber}" folder = Join-Path $buildPath "src\ImageProcessor.Web.Plugins.PostProcessor" output = Join-Path $binPath "ImageProcessor.Web.Plugins.PostProcessor\lib\net452" csproj = "ImageProcessor.Web.Plugins.PostProcessor.csproj" diff --git a/src/ImageProcessor.Web.Plugins.PostProcessor/ImageProcessor.Web.Plugins.PostProcessor.csproj b/src/ImageProcessor.Web.Plugins.PostProcessor/ImageProcessor.Web.Plugins.PostProcessor.csproj index 54e752cdc..714e287eb 100644 --- a/src/ImageProcessor.Web.Plugins.PostProcessor/ImageProcessor.Web.Plugins.PostProcessor.csproj +++ b/src/ImageProcessor.Web.Plugins.PostProcessor/ImageProcessor.Web.Plugins.PostProcessor.csproj @@ -53,7 +53,6 @@ - diff --git a/src/ImageProcessor.Web.Plugins.PostProcessor/PostProcessor.cs b/src/ImageProcessor.Web.Plugins.PostProcessor/PostProcessor.cs index 4a9619a66..7024ad594 100644 --- a/src/ImageProcessor.Web.Plugins.PostProcessor/PostProcessor.cs +++ b/src/ImageProcessor.Web.Plugins.PostProcessor/PostProcessor.cs @@ -12,9 +12,10 @@ namespace ImageProcessor.Web.Plugins.PostProcessor { using System; + using System.Collections.Generic; using System.Diagnostics; - using System.Globalization; using System.IO; + using System.Linq; using System.Management; using System.Web; @@ -52,16 +53,27 @@ public static MemoryStream PostProcessImage(HttpContext context, MemoryStream st // Give our destination file a unique name. string destinationFile = sourceFile.Replace(extension, "-out" + extension); + IEnumerable processes = GetProcessStartInfo(extension, length, sourceFile, destinationFile); + + if (!processes.Any()) + { + // Not a file we can post process. + Cleanup(sourceFile, destinationFile); + + stream.Position = 0; + return stream; + } + // Save the input stream to our source temp file for post processing. using (FileStream fileStream = File.Create(sourceFile)) { stream.CopyTo(fileStream); } - PostProcessingResultEventArgs result = RunProcess(context.Request.Unvalidated.Url, sourceFile, destinationFile, length); + PostProcessingResultEventArgs result = RunProcess(context.Request.Unvalidated.Url, processes, sourceFile, destinationFile, length); // If our result is good and a saving is made we replace our original stream contents with our new compressed file. - if (result != null && result.ResultFileSize > 0 && result.Saving > 0) + if (result?.ResultFileSize > 0 && result.Saving > 0) { using (FileStream fileStream = File.OpenRead(destinationFile)) { @@ -71,121 +83,97 @@ public static MemoryStream PostProcessImage(HttpContext context, MemoryStream st } // Cleanup the temp files. - try - { - // Ensure files exist, are not read only, and delete - if (File.Exists(sourceFile)) - { - File.SetAttributes(sourceFile, FileAttributes.Normal); - File.Delete(sourceFile); - } - - if (File.Exists(destinationFile)) - { - File.SetAttributes(destinationFile, FileAttributes.Normal); - File.Delete(destinationFile); - } - } - catch - { - // Normally a No no, but logging would be excessive + temp files get cleaned up eventually. - } + Cleanup(sourceFile, destinationFile); stream.Position = 0; return stream; } /// - /// Runs the process to optimize the images. + /// Runs the processes to optimize the images. /// /// The current request url. + /// The collection of processes to run. /// The source file. /// The destination file. /// The source file length in bytes. /// /// The containing post-processing information. /// - private static PostProcessingResultEventArgs RunProcess(Uri url, string sourceFile, string destinationFile, long length) + private static PostProcessingResultEventArgs RunProcess(Uri url, IEnumerable processes, string sourceFile, string destinationFile, long length) { // Create a new, hidden process to run our postprocessor command. // We allow no more than the set timeout (default 5 seconds) for the process to run before killing it to prevent blocking the app. int timeout = PostProcessorBootstrapper.Instance.Timout; PostProcessingResultEventArgs result = null; - string arguments = GetArguments(sourceFile, destinationFile, length); - if (string.IsNullOrWhiteSpace(arguments)) + foreach (ProcessStartInfo item in processes) { - // Not a file we can post process. - return null; - } - - ProcessStartInfo start = new ProcessStartInfo("cmd") - { - WindowStyle = ProcessWindowStyle.Hidden, - WorkingDirectory = PostProcessorBootstrapper.Instance.WorkingPath, - Arguments = arguments, - UseShellExecute = false, - CreateNoWindow = true - }; - - Process process = null; - try - { - process = new Process + // Use destination file as new source (if previous process created one). + if (File.Exists(destinationFile)) { - StartInfo = start, - EnableRaisingEvents = true - }; + File.Copy(destinationFile, sourceFile, true); + } - // Process has completed successfully within the time limit. - process.Exited += (sender, args) => + item.WorkingDirectory = PostProcessorBootstrapper.Instance.WorkingPath; + item.CreateNoWindow = true; + item.WindowStyle = ProcessWindowStyle.Hidden; + + Process process = null; + try { - result = new PostProcessingResultEventArgs(destinationFile, length); - }; + process = new Process + { + StartInfo = item, + EnableRaisingEvents = true + }; - process.Start(); + // Process has completed successfully within the time limit. + process.Exited += (sender, args) => result = new PostProcessingResultEventArgs(destinationFile, length); - // Recursively kill all child processes. - void KillProcessAndChildren(int pid) - { - using (var searcher = new ManagementObjectSearcher($"Select * From Win32_Process Where ParentProcessID={pid}")) + process.Start(); + + // Recursively kill all child processes. + void KillProcessAndChildren(int pid) { - ManagementObjectCollection moc = searcher.Get(); - foreach (ManagementBaseObject mo in moc) + using (var searcher = new ManagementObjectSearcher($"Select * From Win32_Process Where ParentProcessID={pid}")) { - KillProcessAndChildren(Convert.ToInt32(mo["ProcessID"])); + foreach (ManagementBaseObject mo in searcher.Get()) + { + KillProcessAndChildren(Convert.ToInt32(mo["ProcessID"])); + } + + try + { + var proc = Process.GetProcessById(pid); + proc.Kill(); + } + catch + { + // Process already exited. + } } + } - try - { - Process proc = Process.GetProcessById(pid); - proc.Kill(); - } - catch - { - // Process already exited. - } + // Wait for processing to finish, but not more than our timeout. + if (!process.WaitForExit(timeout)) + { + KillProcessAndChildren(process.Id); + ImageProcessorBootstrapper.Instance.Logger.Log( + typeof(PostProcessor), + $"Unable to post process image for request {url} within {timeout}ms. Original image returned."); } } - - // Wait for processing to finish, but not more than our timeout. - if (!process.WaitForExit(timeout)) + catch (Exception ex) { - KillProcessAndChildren(process.Id); - ImageProcessorBootstrapper.Instance.Logger.Log( - typeof(PostProcessor), - $"Unable to post process image for request {url} within {timeout}ms. Original image returned."); + // Some security policies don't allow execution of programs in this way. + ImageProcessorBootstrapper.Instance.Logger.Log(typeof(PostProcessor), ex.Message); + } + finally + { + // Make sure we always dispose and release + process?.Dispose(); } - } - catch (Exception ex) - { - // Some security policies don't allow execution of programs in this way. - ImageProcessorBootstrapper.Instance.Logger.Log(typeof(PostProcessor), ex.Message); - } - finally - { - // Make sure we always dispose and release - process?.Dispose(); } return result; @@ -194,53 +182,63 @@ void KillProcessAndChildren(int pid) /// /// Gets the correct arguments to pass to the post-processor. /// + /// The processed image extension. + /// The source file length in bytes. /// The source file. /// The source file. - /// The source file length in bytes. /// - /// The containing the correct command arguments. + /// The containing the correct command arguments. /// - private static string GetArguments(string sourceFile, string destinationFile, long length) + private static IEnumerable GetProcessStartInfo(string extension, long length, string sourceFile, string destinationFile) { - if (!Uri.IsWellFormedUriString(sourceFile, UriKind.RelativeOrAbsolute) && !File.Exists(sourceFile)) - { - return null; - } - - string ext; - - string extension = Path.GetExtension(sourceFile); - if (extension != null) - { - ext = extension.ToLowerInvariant(); - } - else - { - return null; - } - - switch (ext) + // Make sure the commands overwrite the destination file (in case multiple are executed) + switch (extension.ToLowerInvariant()) { case ".png": - return string.Format(CultureInfo.CurrentCulture, "/c png.cmd \"{0}\" \"{1}\"", sourceFile, destinationFile); - + yield return new ProcessStartInfo("pngquant.exe", $"--quality=90-99 --output \"{destinationFile}\" \"{sourceFile}\" --force"); + yield return new ProcessStartInfo("truepng.exe", $"-o4 -y -out \"{destinationFile}\" \"{sourceFile}\""); + break; case ".jpg": case ".jpeg": - - // If it's greater than 10Kb use progressive - // http://yuiblog.com/blog/2008/12/05/imageopt-4/ if (length > 10000) { - return string.Format(CultureInfo.CurrentCulture, "/c cjpeg -quality 80,60 -smooth 5 -outfile \"{1}\" \"{0}\"", sourceFile, destinationFile); + // If it's greater than 10Kb use progressive + // http://yuiblog.com/blog/2008/12/05/imageopt-4/ + yield return new ProcessStartInfo("cjpeg.exe", $"-quality 80,60 -smooth 5 -outfile \"{destinationFile}\" \"{sourceFile}\""); } - - return string.Format(CultureInfo.CurrentCulture, "/c jpegtran -copy all -optimize -outfile \"{1}\" \"{0}\"", sourceFile, destinationFile); - + else + { + yield return new ProcessStartInfo("jpegtran.exe", $"-copy all -optimize -outfile \"{destinationFile}\" \"{sourceFile}\""); + } + break; case ".gif": - return string.Format(CultureInfo.CurrentCulture, "/c gifsicle --optimize=3 \"{0}\" --output=\"{1}\"", sourceFile, destinationFile); + yield return new ProcessStartInfo("gifsicle.exe", $"--optimize=3 \"{sourceFile}\" --output=\"{destinationFile}\""); + break; } + } + + private static void Cleanup(string sourceFile, string destinationFile) + { + // Cleanup the temp files. + try + { + // Ensure files exist, are not read only, and delete + if (File.Exists(sourceFile)) + { + File.SetAttributes(sourceFile, FileAttributes.Normal); + File.Delete(sourceFile); + } - return null; + if (File.Exists(destinationFile)) + { + File.SetAttributes(destinationFile, FileAttributes.Normal); + File.Delete(destinationFile); + } + } + catch + { + // Normally a No no, but logging would be excessive + temp files get cleaned up eventually. + } } } } \ No newline at end of file diff --git a/src/ImageProcessor.Web.Plugins.PostProcessor/PostProcessorBootstrapper.cs b/src/ImageProcessor.Web.Plugins.PostProcessor/PostProcessorBootstrapper.cs index 1d2b4cd61..8bc3c808d 100644 --- a/src/ImageProcessor.Web.Plugins.PostProcessor/PostProcessorBootstrapper.cs +++ b/src/ImageProcessor.Web.Plugins.PostProcessor/PostProcessorBootstrapper.cs @@ -74,7 +74,7 @@ public void RegisterExecutables() { // None of the tools used here are called using dllimport so we don't go through the normal registration channel. string folder = ImageProcessorBootstrapper.Instance.NativeBinaryFactory.Is64BitEnvironment ? "x64" : "x86"; - Assembly assembly = Assembly.GetExecutingAssembly(); + var assembly = Assembly.GetExecutingAssembly(); if (assembly.Location == null) { @@ -123,7 +123,7 @@ public void RegisterExecutables() } // Get the resources and copy them across. - Dictionary resources = new Dictionary + var resources = new Dictionary { { "gifsicle.exe", "ImageProcessor.Web.Plugins.PostProcessor.Resources.Unmanaged." + folder + ".gifsicle.exe" }, { "jpegtran.exe", "ImageProcessor.Web.Plugins.PostProcessor.Resources.Unmanaged.x86.jpegtran.exe" }, @@ -131,8 +131,7 @@ public void RegisterExecutables() { "libjpeg-62.dll", "ImageProcessor.Web.Plugins.PostProcessor.Resources.Unmanaged.x86.libjpeg-62.dll" }, { "pngquant.exe", "ImageProcessor.Web.Plugins.PostProcessor.Resources.Unmanaged.x86.pngquant.exe" }, { "pngout.exe", "ImageProcessor.Web.Plugins.PostProcessor.Resources.Unmanaged.x86.pngout.exe" }, - { "TruePNG.exe", "ImageProcessor.Web.Plugins.PostProcessor.Resources.Unmanaged.x86.TruePNG.exe" }, - { "png.cmd", "ImageProcessor.Web.Plugins.PostProcessor.Resources.Unmanaged.x86.png.cmd" } + { "TruePNG.exe", "ImageProcessor.Web.Plugins.PostProcessor.Resources.Unmanaged.x86.TruePNG.exe" } }; // Write the files out to the bin folder. diff --git a/src/ImageProcessor.Web.Plugins.PostProcessor/Resources/Unmanaged/x86/png.cmd b/src/ImageProcessor.Web.Plugins.PostProcessor/Resources/Unmanaged/x86/png.cmd deleted file mode 100644 index 18679deb7..000000000 --- a/src/ImageProcessor.Web.Plugins.PostProcessor/Resources/Unmanaged/x86/png.cmd +++ /dev/null @@ -1,4 +0,0 @@ -pngquant --quality=90-99 --output %2 %1 --force -if not exist %2 copy %1 %2 /y - -truepng %2 /o4 \ No newline at end of file From 15a45459b3e2f872035e4a0fd31564c494cbaf8b Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Thu, 30 Aug 2018 17:13:15 +0100 Subject: [PATCH 085/113] Better null handling --- .../Converters/ColorTypeConverter.cs | 83 ++++++++-------- .../Converters/FontFamilyConverter.cs | 12 ++- .../Converters/GenericArrayTypeConverter.cs | 2 +- .../Converters/GenericConvertableConverter.cs | 8 +- .../Converters/GenericListTypeConverter.cs | 10 +- .../Converters/PointConverter.cs | 5 +- .../Converters/QueryParamConverter.cs | 28 ++---- .../Converters/SizeConverter.cs | 5 +- .../QuerystringParser/QueryParamParser.cs | 95 +++---------------- 9 files changed, 80 insertions(+), 168 deletions(-) diff --git a/src/ImageProcessor.Web/Helpers/QuerystringParser/Converters/ColorTypeConverter.cs b/src/ImageProcessor.Web/Helpers/QuerystringParser/Converters/ColorTypeConverter.cs index 07c6af9f9..1623e5738 100644 --- a/src/ImageProcessor.Web/Helpers/QuerystringParser/Converters/ColorTypeConverter.cs +++ b/src/ImageProcessor.Web/Helpers/QuerystringParser/Converters/ColorTypeConverter.cs @@ -88,8 +88,12 @@ public override bool CanConvertFrom(Type sourceType) /// The conversion cannot be performed. public override object ConvertFrom(CultureInfo culture, object value, Type propertyType) { - string s = value as string; - if (s != null) + if (value == null) + { + return Color.Empty; + } + + if (value is string s) { string colorText = s.Trim(); Color c = Color.Empty; @@ -230,7 +234,7 @@ public override object ConvertTo(CultureInfo culture, object value, Type destina { if (value != null) { - Color color = (Color)value; + var color = (Color)value; if (color == Color.Empty) { @@ -248,7 +252,7 @@ public override object ConvertTo(CultureInfo culture, object value, Type destina } // In the Web scenario, colors should be formatted in #RRGGBB notation - StringBuilder sb = new StringBuilder("#", 7); + var sb = new StringBuilder("#", 7); sb.Append(color.R.ToString("X2", CultureInfo.InvariantCulture)); sb.Append(color.G.ToString("X2", CultureInfo.InvariantCulture)); sb.Append(color.B.ToString("X2", CultureInfo.InvariantCulture)); @@ -268,14 +272,7 @@ internal static object GetNamedColor(string name) { // First, check to see if this is a standard name. object color = ColorConstants[name]; - if (color != null) - { - return color; - } - - // Ok, how about a system color? - color = SystemColors[name]; - return color; + return color ?? SystemColors[name]; } /// @@ -285,34 +282,36 @@ internal static object GetNamedColor(string name) private static Hashtable InitializeHtmlSystemColorTable() { // ReSharper disable once UseObjectOrCollectionInitializer - Hashtable hashTable = new Hashtable(StringComparer.OrdinalIgnoreCase); - hashTable["activeborder"] = Color.FromKnownColor(KnownColor.ActiveBorder); - hashTable["activecaption"] = Color.FromKnownColor(KnownColor.ActiveCaption); - hashTable["appworkspace"] = Color.FromKnownColor(KnownColor.AppWorkspace); - hashTable["background"] = Color.FromKnownColor(KnownColor.Desktop); - hashTable["buttonface"] = Color.FromKnownColor(KnownColor.Control); - hashTable["buttonhighlight"] = Color.FromKnownColor(KnownColor.ControlLightLight); - hashTable["buttonshadow"] = Color.FromKnownColor(KnownColor.ControlDark); - hashTable["buttontext"] = Color.FromKnownColor(KnownColor.ControlText); - hashTable["captiontext"] = Color.FromKnownColor(KnownColor.ActiveCaptionText); - hashTable["graytext"] = Color.FromKnownColor(KnownColor.GrayText); - hashTable["highlight"] = Color.FromKnownColor(KnownColor.Highlight); - hashTable["highlighttext"] = Color.FromKnownColor(KnownColor.HighlightText); - hashTable["inactiveborder"] = Color.FromKnownColor(KnownColor.InactiveBorder); - hashTable["inactivecaption"] = Color.FromKnownColor(KnownColor.InactiveCaption); - hashTable["inactivecaptiontext"] = Color.FromKnownColor(KnownColor.InactiveCaptionText); - hashTable["infobackground"] = Color.FromKnownColor(KnownColor.Info); - hashTable["infotext"] = Color.FromKnownColor(KnownColor.InfoText); - hashTable["menu"] = Color.FromKnownColor(KnownColor.Menu); - hashTable["menutext"] = Color.FromKnownColor(KnownColor.MenuText); - hashTable["scrollbar"] = Color.FromKnownColor(KnownColor.ScrollBar); - hashTable["threeddarkshadow"] = Color.FromKnownColor(KnownColor.ControlDarkDark); - hashTable["threedface"] = Color.FromKnownColor(KnownColor.Control); - hashTable["threedhighlight"] = Color.FromKnownColor(KnownColor.ControlLight); - hashTable["threedlightshadow"] = Color.FromKnownColor(KnownColor.ControlLightLight); - hashTable["window"] = Color.FromKnownColor(KnownColor.Window); - hashTable["windowframe"] = Color.FromKnownColor(KnownColor.WindowFrame); - hashTable["windowtext"] = Color.FromKnownColor(KnownColor.WindowText); + var hashTable = new Hashtable(StringComparer.OrdinalIgnoreCase) + { + ["activeborder"] = Color.FromKnownColor(KnownColor.ActiveBorder), + ["activecaption"] = Color.FromKnownColor(KnownColor.ActiveCaption), + ["appworkspace"] = Color.FromKnownColor(KnownColor.AppWorkspace), + ["background"] = Color.FromKnownColor(KnownColor.Desktop), + ["buttonface"] = Color.FromKnownColor(KnownColor.Control), + ["buttonhighlight"] = Color.FromKnownColor(KnownColor.ControlLightLight), + ["buttonshadow"] = Color.FromKnownColor(KnownColor.ControlDark), + ["buttontext"] = Color.FromKnownColor(KnownColor.ControlText), + ["captiontext"] = Color.FromKnownColor(KnownColor.ActiveCaptionText), + ["graytext"] = Color.FromKnownColor(KnownColor.GrayText), + ["highlight"] = Color.FromKnownColor(KnownColor.Highlight), + ["highlighttext"] = Color.FromKnownColor(KnownColor.HighlightText), + ["inactiveborder"] = Color.FromKnownColor(KnownColor.InactiveBorder), + ["inactivecaption"] = Color.FromKnownColor(KnownColor.InactiveCaption), + ["inactivecaptiontext"] = Color.FromKnownColor(KnownColor.InactiveCaptionText), + ["infobackground"] = Color.FromKnownColor(KnownColor.Info), + ["infotext"] = Color.FromKnownColor(KnownColor.InfoText), + ["menu"] = Color.FromKnownColor(KnownColor.Menu), + ["menutext"] = Color.FromKnownColor(KnownColor.MenuText), + ["scrollbar"] = Color.FromKnownColor(KnownColor.ScrollBar), + ["threeddarkshadow"] = Color.FromKnownColor(KnownColor.ControlDarkDark), + ["threedface"] = Color.FromKnownColor(KnownColor.Control), + ["threedhighlight"] = Color.FromKnownColor(KnownColor.ControlLight), + ["threedlightshadow"] = Color.FromKnownColor(KnownColor.ControlLightLight), + ["window"] = Color.FromKnownColor(KnownColor.Window), + ["windowframe"] = Color.FromKnownColor(KnownColor.WindowFrame), + ["windowtext"] = Color.FromKnownColor(KnownColor.WindowText) + }; return hashTable; } @@ -323,9 +322,9 @@ private static Hashtable InitializeHtmlSystemColorTable() /// The private static Hashtable InitializeColorConstantsTable() { - Hashtable hashTable = new Hashtable(StringComparer.OrdinalIgnoreCase); + var hashTable = new Hashtable(StringComparer.OrdinalIgnoreCase); - MethodAttributes attrs = MethodAttributes.Public | MethodAttributes.Static; + const MethodAttributes attrs = MethodAttributes.Public | MethodAttributes.Static; PropertyInfo[] props = typeof(Color).GetProperties(); foreach (PropertyInfo prop in props) diff --git a/src/ImageProcessor.Web/Helpers/QuerystringParser/Converters/FontFamilyConverter.cs b/src/ImageProcessor.Web/Helpers/QuerystringParser/Converters/FontFamilyConverter.cs index a7c04b403..263627be9 100644 --- a/src/ImageProcessor.Web/Helpers/QuerystringParser/Converters/FontFamilyConverter.cs +++ b/src/ImageProcessor.Web/Helpers/QuerystringParser/Converters/FontFamilyConverter.cs @@ -76,6 +76,11 @@ public override bool CanConvertTo(Type destinationType) /// The conversion cannot be performed. public override object ConvertFrom(CultureInfo culture, object value, Type propertyType) { + if (value == null) + { + return null; + } + string s = value as string; if (!string.IsNullOrWhiteSpace(s)) { @@ -102,18 +107,17 @@ public override object ConvertFrom(CultureInfo culture, object value, Type prope /// The conversion cannot be performed. public override object ConvertTo(CultureInfo culture, object value, Type destinationType) { - if (null == value) + if (value == null) { throw new ArgumentNullException(nameof(value)); } - FontFamily fontFamily = value as FontFamily; - if (fontFamily == null) + if (!(value is FontFamily fontFamily)) { throw new ArgumentException("value"); } - if (null == destinationType) + if (destinationType == null) { throw new ArgumentNullException(nameof(destinationType)); } diff --git a/src/ImageProcessor.Web/Helpers/QuerystringParser/Converters/GenericArrayTypeConverter.cs b/src/ImageProcessor.Web/Helpers/QuerystringParser/Converters/GenericArrayTypeConverter.cs index e56cb6093..1ccb20443 100644 --- a/src/ImageProcessor.Web/Helpers/QuerystringParser/Converters/GenericArrayTypeConverter.cs +++ b/src/ImageProcessor.Web/Helpers/QuerystringParser/Converters/GenericArrayTypeConverter.cs @@ -39,7 +39,7 @@ public class GenericArrayTypeConverter : GenericListTypeConverter public override object ConvertFrom(CultureInfo culture, object value, Type propertyType) { object result = base.ConvertFrom(culture, value, propertyType); - IList list = result as IList; + var list = result as IList; return list?.ToArray() ?? result; } } diff --git a/src/ImageProcessor.Web/Helpers/QuerystringParser/Converters/GenericConvertableConverter.cs b/src/ImageProcessor.Web/Helpers/QuerystringParser/Converters/GenericConvertableConverter.cs index 88203085f..30f7d4ed7 100644 --- a/src/ImageProcessor.Web/Helpers/QuerystringParser/Converters/GenericConvertableConverter.cs +++ b/src/ImageProcessor.Web/Helpers/QuerystringParser/Converters/GenericConvertableConverter.cs @@ -37,8 +37,12 @@ public class GenericConvertableConverter : QueryParamConverter /// The conversion cannot be performed. public override object ConvertFrom(CultureInfo culture, object value, Type propertyType) { - string input = value as string; - if (input != null) + if (value == null) + { + return default(T); + } + + if (value is string input) { Type t = typeof(T); Type u = Nullable.GetUnderlyingType(t); diff --git a/src/ImageProcessor.Web/Helpers/QuerystringParser/Converters/GenericListTypeConverter.cs b/src/ImageProcessor.Web/Helpers/QuerystringParser/Converters/GenericListTypeConverter.cs index d542960c9..8f46c4ac2 100644 --- a/src/ImageProcessor.Web/Helpers/QuerystringParser/Converters/GenericListTypeConverter.cs +++ b/src/ImageProcessor.Web/Helpers/QuerystringParser/Converters/GenericListTypeConverter.cs @@ -79,13 +79,11 @@ public override bool CanConvertFrom(Type sourceType) /// The conversion cannot be performed. public override object ConvertFrom(CultureInfo culture, object value, Type propertyType) { - string input = value as string; - if (input != null) + var result = new List(); + if (value is string input) { string[] items = this.GetStringArray(input, culture); - List result = new List(); - Array.ForEach( items, s => @@ -96,11 +94,9 @@ public override object ConvertFrom(CultureInfo culture, object value, Type prope result.Add((T)item); } }); - - return result; } - return base.ConvertFrom(culture, value, propertyType); + return result; } /// diff --git a/src/ImageProcessor.Web/Helpers/QuerystringParser/Converters/PointConverter.cs b/src/ImageProcessor.Web/Helpers/QuerystringParser/Converters/PointConverter.cs index 5f0f707f2..4c5d5d717 100644 --- a/src/ImageProcessor.Web/Helpers/QuerystringParser/Converters/PointConverter.cs +++ b/src/ImageProcessor.Web/Helpers/QuerystringParser/Converters/PointConverter.cs @@ -35,9 +35,8 @@ public class PointConverter : GenericArrayTypeConverter public override object ConvertFrom(CultureInfo culture, object value, Type propertyType) { object result = base.ConvertFrom(culture, value, propertyType); - - int[] list = result as int[]; - return list != null ? new Point(list[0], list[1]) : result; + + return result is int[] list ? new Point(list[0], list[1]) : result; } } } diff --git a/src/ImageProcessor.Web/Helpers/QuerystringParser/Converters/QueryParamConverter.cs b/src/ImageProcessor.Web/Helpers/QuerystringParser/Converters/QueryParamConverter.cs index 78590197e..76054e952 100644 --- a/src/ImageProcessor.Web/Helpers/QuerystringParser/Converters/QueryParamConverter.cs +++ b/src/ImageProcessor.Web/Helpers/QuerystringParser/Converters/QueryParamConverter.cs @@ -33,15 +33,7 @@ public class QueryParamConverter : IQueryParamConverter /// /// A that represents the type you want to convert from. /// - public virtual bool CanConvertFrom(Type sourceType) - { - if (sourceType == typeof(InstanceDescriptor)) - { - return true; - } - - return false; - } + public virtual bool CanConvertFrom(Type sourceType) => sourceType == typeof(InstanceDescriptor); /// /// Gets a value indicating whether this converter can convert an object to the given destination type. @@ -50,10 +42,7 @@ public virtual bool CanConvertFrom(Type sourceType) /// /// true if this converter can perform the conversion; otherwise, false. /// - public virtual bool CanConvertTo(Type destinationType) - { - return destinationType == typeof(string); - } + public virtual bool CanConvertTo(Type destinationType) => destinationType == typeof(string); /// /// Converts the given object to the type of this converter, using the specified culture @@ -70,8 +59,7 @@ public virtual bool CanConvertTo(Type destinationType) /// The conversion cannot be performed. public virtual object ConvertFrom(CultureInfo culture, object value, Type propertyType) { - InstanceDescriptor id = value as InstanceDescriptor; - if (id != null) + if (value is InstanceDescriptor id) { return id.Invoke(); } @@ -114,12 +102,11 @@ public virtual object ConvertTo(CultureInfo culture, object value, Type destinat // Pre-whidbey we just did a ToString() here. To minimize the chance of a breaking change we // still send requests for the CurrentCulture to ToString() (which should return the same). - if (culture != null && !culture.Equals(CultureInfo.CurrentCulture)) + if (culture?.Equals(CultureInfo.CurrentCulture) == false) { // VSWhidbey 75433 - If the object is IFormattable, use this interface to convert to string // so we use the specified culture rather than the CurrentCulture like object.ToString() does. - IFormattable formattable = value as IFormattable; - if (formattable != null) + if (value is IFormattable formattable) { return formattable.ToString(/* format = */ null, /* formatProvider = */ culture); } @@ -139,10 +126,7 @@ public virtual object ConvertTo(CultureInfo culture, object value, Type destinat /// /// An that represents the converted value. /// - public object ConvertFromInvariantString(string text, Type propertyType) - { - return this.ConvertFrom(CultureInfo.InvariantCulture, text, propertyType); - } + public object ConvertFromInvariantString(string text, Type propertyType) => this.ConvertFrom(CultureInfo.InvariantCulture, text, propertyType); /// /// Gets a suitable exception to throw when a conversion cannot be performed. diff --git a/src/ImageProcessor.Web/Helpers/QuerystringParser/Converters/SizeConverter.cs b/src/ImageProcessor.Web/Helpers/QuerystringParser/Converters/SizeConverter.cs index 57299f933..98d38c23b 100644 --- a/src/ImageProcessor.Web/Helpers/QuerystringParser/Converters/SizeConverter.cs +++ b/src/ImageProcessor.Web/Helpers/QuerystringParser/Converters/SizeConverter.cs @@ -35,9 +35,8 @@ public class SizeConverter : GenericArrayTypeConverter public override object ConvertFrom(CultureInfo culture, object value, Type propertyType) { object result = base.ConvertFrom(culture, value, propertyType); - - int[] list = result as int[]; - return list != null ? new Size(list[0], list[1]) : result; + + return result is int[] list ? new Size(list[0], list[1]) : result; } } } diff --git a/src/ImageProcessor.Web/Helpers/QuerystringParser/QueryParamParser.cs b/src/ImageProcessor.Web/Helpers/QuerystringParser/QueryParamParser.cs index 5d9f8c643..9e5bbb665 100644 --- a/src/ImageProcessor.Web/Helpers/QuerystringParser/QueryParamParser.cs +++ b/src/ImageProcessor.Web/Helpers/QuerystringParser/QueryParamParser.cs @@ -11,17 +11,15 @@ namespace ImageProcessor.Web.Helpers { using System; - using System.Collections.Concurrent; using System.Collections.Generic; using System.Drawing; using System.Globalization; - using System.Linq.Expressions; using System.Web; /// /// The query parameter parser that converts string values to different types. /// - public class QueryParamParser + public sealed class QueryParamParser { /// /// A new instance of the class. @@ -29,11 +27,6 @@ public class QueryParamParser /// private static readonly Lazy Lazy = new Lazy(() => new QueryParamParser()); - /// - /// The cache for storing created default types. - /// - private static readonly ConcurrentDictionary TypeDefaultsCache = new ConcurrentDictionary(); - /// /// Prevents a default instance of the class from being created. /// @@ -57,7 +50,7 @@ private QueryParamParser() /// Parses the given string value converting it to the given type. /// /// - /// The value to parse. + /// The value to parse. /// /// /// The to use as the current culture. @@ -70,43 +63,24 @@ private QueryParamParser() /// The . /// public T ParseValue(string value, CultureInfo culture = null) - { - return (T)this.ParseValue(typeof(T), value, culture); - } - - /// - /// Parses the given string value converting it to the given type. - /// - /// - /// The to convert the string to. - /// - /// - /// The value to parse. - /// - /// - /// The to use as the current culture. - /// If not set will parse using - /// - /// - /// The . - /// - public object ParseValue(Type type, string value, CultureInfo culture = null) { if (culture == null) { culture = CultureInfo.InvariantCulture; } + Type type = typeof(T); + IQueryParamConverter converter = QueryTypeDescriptor.GetConverter(type); try { // ReSharper disable once AssignNullToNotNullAttribute - return converter.ConvertFrom(culture, HttpUtility.UrlDecode(value), type); + return (T)converter.ConvertFrom(culture, HttpUtility.UrlDecode(value), type); } catch { // Return the default value - return TypeDefaultsCache.GetOrAdd(type, t => this.GetDefaultValue(type)); + return default(T); } } @@ -119,42 +93,27 @@ public object ParseValue(Type type, string value, CultureInfo culture = null) /// /// The type of to add. /// - public void AddTypeConverter(Type type, Type converterType) - { - QueryTypeDescriptor.AddConverter(type, converterType); - } + public void AddTypeConverter(Type type, Type converterType) => QueryTypeDescriptor.AddConverter(type, converterType); /// /// Adds color converters. /// - private void AddColorConverters() - { - this.AddTypeConverter(typeof(Color), typeof(ColorTypeConverter)); - } + private void AddColorConverters() => this.AddTypeConverter(typeof(Color), typeof(ColorTypeConverter)); /// /// Adds font family converters. /// - private void AddFontFamilyConverters() - { - this.AddTypeConverter(typeof(FontFamily), typeof(FontFamilyConverter)); - } + private void AddFontFamilyConverters() => this.AddTypeConverter(typeof(FontFamily), typeof(FontFamilyConverter)); /// /// Adds point converters. /// - private void AddPointConverters() - { - this.AddTypeConverter(typeof(Point), typeof(PointConverter)); - } + private void AddPointConverters() => this.AddTypeConverter(typeof(Point), typeof(PointConverter)); /// /// Adds point converters. /// - private void AddSizeConverters() - { - this.AddTypeConverter(typeof(Size), typeof(SizeConverter)); - } + private void AddSizeConverters() => this.AddTypeConverter(typeof(Size), typeof(SizeConverter)); /// /// Add the generic converters @@ -233,37 +192,5 @@ private void AddArrayConverters() this.AddTypeConverter(typeof(Color[]), typeof(GenericArrayTypeConverter)); } - - /// - /// Returns the default value for the given type. - /// - /// - /// The to return. - /// - /// - /// The representing the default value. - /// - /// - /// Thrown if the given is null. - /// - private object GetDefaultValue(Type type) - { - // Validate parameters. - if (type == null) - { - throw new ArgumentNullException(nameof(type)); - } - - // We want an Func which returns the default. - // Create that expression here. - // Have to convert to object. - // The default value, always get what the *code* tells us. - Expression> e = - Expression.Lambda>( - Expression.Convert(Expression.Default(type), typeof(object))); - - // Compile and return the value. - return e.Compile()(); - } } } From 4e023eb3ace1c74d28a6f5e7889534def59c182c Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Thu, 30 Aug 2018 19:27:45 +0100 Subject: [PATCH 086/113] Capture and log ImageFormatException --- .../HttpModules/ImageProcessingModule.cs | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/ImageProcessor.Web/HttpModules/ImageProcessingModule.cs b/src/ImageProcessor.Web/HttpModules/ImageProcessingModule.cs index 16c7de865..a85c2bd1e 100644 --- a/src/ImageProcessor.Web/HttpModules/ImageProcessingModule.cs +++ b/src/ImageProcessor.Web/HttpModules/ImageProcessingModule.cs @@ -22,7 +22,7 @@ namespace ImageProcessor.Web.HttpModules using System.Threading.Tasks; using System.Web; using System.Web.Hosting; - + using ImageProcessor.Common.Exceptions; using ImageProcessor.Configuration; using ImageProcessor.Imaging; using ImageProcessor.Imaging.Formats; @@ -508,7 +508,7 @@ private async Task ProcessImageAsync(HttpContext context) // If the validation has failed based on events, return if (validatingArgs.Cancel) { - ImageProcessorBootstrapper.Instance.Logger.Log("Image processing has been cancelled by an event"); + ImageProcessorBootstrapper.Instance.Logger.Log($"Image processing for {url} has been cancelled by an event"); return; } @@ -627,10 +627,17 @@ private async Task ProcessImageAsync(HttpContext context) MetaDataMode metaMode = !exif ? MetaDataMode.None : metaDataMode.Value; bool gamma = fixGamma != null && fixGamma.Value; - using (ImageFactory imageFactory = new ImageFactory(metaMode, gamma) { AnimationProcessMode = mode }) + try { + using (var imageFactory = new ImageFactory(metaMode, gamma) { AnimationProcessMode = mode }) + { + imageFactory.Load(inStream).AutoProcess(processors).Save(outStream); + mimeType = imageFactory.CurrentImageFormat.MimeType; + } + } + catch(ImageFormatException) { - imageFactory.Load(inStream).AutoProcess(processors).Save(outStream); - mimeType = imageFactory.CurrentImageFormat.MimeType; + ImageProcessorBootstrapper.Instance.Logger.Log($"Request {url} is not a valid image."); + return; } } else From 4af8de4a6376d9426fadd5c4596bc1de187899c0 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Thu, 30 Aug 2018 22:39:08 +0100 Subject: [PATCH 087/113] Cleanup + fixes Adjustments.Opacity now respects passed rectangle. --- .../Imaging/Formats/NativeMethods.cs | 4 +- .../Imaging/Formats/WebPFormat.cs | 16 +- .../AzureBlobCache.cs | 54 +- .../Caching/AsyncKeyLock.cs | 5 +- .../Caching/CacheIndexer.cs | 10 +- src/ImageProcessor.Web/Caching/DiskCache.cs | 15 +- .../Caching/ImageCacheBase.cs | 26 +- src/ImageProcessor.Web/Caching/MemCache.cs | 41 +- .../Configuration/ImageCacheSection.cs | 12 +- .../Configuration/ImageProcessingSection.cs | 29 +- .../ImageProcessorConfiguration.cs | 56 +- .../Configuration/ImageSecuritySection.cs | 50 +- .../Configuration/Shared/SettingElement.cs | 20 +- .../Shared/SettingElementCollection.cs | 17 +- .../Extensions/DirectoryInfoExtensions.cs | 32 - .../Extensions/ObjectExtensions.cs | 5 +- .../Extensions/StringExtensions.cs | 21 +- .../Extensions/TypeInferenceExtensions.cs | 22 +- .../TypeInitializationExtensions.cs | 13 +- .../Helpers/CommonParameterParserUtility.cs | 13 +- .../Helpers/ImageHelpers.cs | 16 +- .../Helpers/NativeMethods.cs | 2 +- .../Helpers/ResourceHelpers.cs | 4 +- src/ImageProcessor.Web/Helpers/UrlParser.cs | 4 +- .../Helpers/ValidatingRequestEventArgs.cs | 2 +- .../HttpModules/ImageProcessingModule.cs | 103 +- src/ImageProcessor.Web/Processors/Alpha.cs | 5 +- .../Processors/AutoRotate.cs | 7 +- .../Processors/Background.cs | 14 +- .../Processors/BackgroundColor.cs | 10 +- .../Processors/Brightness.cs | 5 +- src/ImageProcessor.Web/Processors/Contrast.cs | 5 +- src/ImageProcessor.Web/Processors/Crop.cs | 8 +- .../Processors/DetectEdges.cs | 9 +- .../Processors/EntropyCrop.cs | 9 +- src/ImageProcessor.Web/Processors/Filter.cs | 9 +- src/ImageProcessor.Web/Processors/Flip.cs | 11 +- src/ImageProcessor.Web/Processors/Format.cs | 12 +- src/ImageProcessor.Web/Processors/Gamma.cs | 7 +- .../Processors/GaussianBlur.cs | 15 +- .../Processors/GaussianSharpen.cs | 15 +- src/ImageProcessor.Web/Processors/Halftone.cs | 10 +- src/ImageProcessor.Web/Processors/Hue.cs | 5 +- .../Processors/IWebGraphicsProcessor.cs | 8 +- src/ImageProcessor.Web/Processors/Mask.cs | 11 +- src/ImageProcessor.Web/Processors/Meta.cs | 10 +- src/ImageProcessor.Web/Processors/Overlay.cs | 14 +- src/ImageProcessor.Web/Processors/Pixelate.cs | 69 +- src/ImageProcessor.Web/Processors/Quality.cs | 5 +- .../Processors/ReplaceColor.cs | 7 +- src/ImageProcessor.Web/Processors/Resize.cs | 18 +- src/ImageProcessor.Web/Processors/Rotate.cs | 7 +- .../Processors/RotateBounded.cs | 9 +- .../Processors/RoundedCorners.cs | 14 +- .../Processors/Saturation.cs | 5 +- src/ImageProcessor.Web/Processors/Tint.cs | 7 +- src/ImageProcessor.Web/Processors/Vignette.cs | 7 +- .../Processors/Watermark.cs | 31 +- .../Services/LocalFileImageService.cs | 7 +- .../Common/Exceptions/ImageFormatException.cs | 20 + .../Exceptions/ImageProcessingException.cs | 20 + .../Exceptions/Logging/DefaultLogger.cs | 30 +- .../Exceptions/QuantizationException.cs | 20 + .../Common/Extensions/AssemblyExtensions.cs | 6 +- .../Common/Extensions/DoubleExtensions.cs | 5 +- .../Common/Extensions/EnumerableExtensions.cs | 7 +- .../Common/Extensions/FloatExtensions.cs | 5 +- .../Common/Extensions/ImageExtensions.cs | 15 +- .../Common/Extensions/IntegerExtensions.cs | 18 +- .../Common/Extensions/RectangleExtensions.cs | 8 +- src/ImageProcessor/Common/Helpers/IOHelper.cs | 6 +- .../Common/Helpers/TypeFinder.cs | 29 +- .../ImageProcessorBootstrapper.cs | 20 +- .../Configuration/NativeBinaryFactory.cs | 15 +- .../Configuration/NativeMethods.cs | 6 +- src/ImageProcessor/ImageFactory.cs | 93 +- src/ImageProcessor/ImageProcessor.csproj | 1 + .../Imaging/Colors/CmykColor.cs | 118 +- src/ImageProcessor/Imaging/Colors/Color32.cs | 33 +- .../Imaging/Colors/ColorExtensions.cs | 10 +- .../Imaging/Colors/HSLAColor.cs | 139 +-- .../Imaging/Colors/RGBAColor.cs | 96 +- .../Imaging/Colors/YCbCrColor.cs | 63 +- .../Imaging/ComputerArchitectureInfo.cs | 5 +- src/ImageProcessor/Imaging/Convolution.cs | 21 +- src/ImageProcessor/Imaging/CropLayer.cs | 7 +- src/ImageProcessor/Imaging/FastBitmap.cs | 93 +- .../Filters/Artistic/HalftoneFilter.cs | 191 +-- .../Filters/Artistic/OilPaintingFilter.cs | 18 +- .../Filters/Binarization/BinaryThreshold.cs | 31 +- .../EdgeDetection/ConvolutionFilter.cs | 40 +- .../EdgeDetection/KayyaliEdgeFilter.cs | 12 +- .../Filters/EdgeDetection/KirschEdgeFilter.cs | 16 +- .../EdgeDetection/Laplacian3X3EdgeFilter.cs | 10 +- .../EdgeDetection/Laplacian5X5EdgeFilter.cs | 12 +- .../LaplacianOfGaussianEdgeFilter.cs | 8 +- .../EdgeDetection/PrewittEdgeFilter.cs | 8 +- .../EdgeDetection/RobertsCrossEdgeFilter.cs | 4 +- .../Filters/EdgeDetection/ScharrEdgeFilter.cs | 8 +- .../Filters/EdgeDetection/SobelEdgeFilter.cs | 8 +- .../Filters/Photo/BlackWhiteMatrixFilter.cs | 6 +- .../Imaging/Filters/Photo/ColorMatrixes.cs | 6 +- .../Filters/Photo/ComicMatrixFilter.cs | 50 +- .../Filters/Photo/GothamMatrixFilter.cs | 12 +- .../Filters/Photo/GreyScaleMatrixFilter.cs | 6 +- .../Filters/Photo/HiSatchMatrixFilter.cs | 6 +- .../Imaging/Filters/Photo/IMatrixFilter.cs | 4 +- .../Filters/Photo/InvertMatrixFilter.cs | 6 +- .../Filters/Photo/LoSatchMatrixFilter.cs | 6 +- .../Filters/Photo/LomographMatrixFilter.cs | 6 +- .../Imaging/Filters/Photo/MatrixFilterBase.cs | 13 +- .../Filters/Photo/PolaroidMatrixFilter.cs | 6 +- .../Filters/Photo/SepiaMatrixFilter.cs | 6 +- .../Imaging/Formats/FormatBase.cs | 23 +- .../Imaging/Formats/FormatUtilities.cs | 14 +- .../Imaging/Formats/GifDecoder.cs | 4 +- .../Imaging/Formats/GifEncoder.cs | 30 +- .../Imaging/Formats/GifFormat.cs | 12 +- .../Imaging/Formats/ISupportedImageFormat.cs | 2 - .../Imaging/Formats/JpegFormat.cs | 7 +- .../Imaging/Formats/TiffFormat.cs | 11 +- src/ImageProcessor/Imaging/GaussianLayer.cs | 22 +- .../Imaging/Helpers/Adjustments.cs | 49 +- .../Converters/BigEndianBitConverter.cs | 13 +- .../Helpers/Converters/EndianBitConverter.cs | 204 +--- .../Converters/LittleEndianBitConverter.cs | 13 +- src/ImageProcessor/Imaging/Helpers/Effects.cs | 27 +- .../Imaging/Helpers/ImageMaths.cs | 42 +- .../Imaging/Helpers/PixelOperations.cs | 19 +- src/ImageProcessor/Imaging/ImageLayer.cs | 12 +- src/ImageProcessor/Imaging/Interpolation.cs | 10 +- .../Imaging/MetaData/ExifBitConverter.cs | 15 +- .../Imaging/MetaData/ExifPropertyTag.cs | 1044 ++++++++--------- .../MetaData/ExifPropertyTagConstants.cs | 2 +- .../MetaData/ImageFactoryMetaExtensions.cs | 5 +- .../Imaging/MetaData/Int32Converter.cs | 17 +- .../Imaging/MetaData/Rational.cs | 189 +-- .../Imaging/Quantizers/OctreeQuantizer.cs | 79 +- .../Imaging/Quantizers/Quantizer.cs | 13 +- .../Quantizers/WuQuantizer/ColorMoment.cs | 10 +- .../Imaging/Quantizers/WuQuantizer/CubeCut.cs | 2 +- .../Quantizers/WuQuantizer/Histogram.cs | 5 +- .../Quantizers/WuQuantizer/ImageBuffer.cs | 9 +- .../WuQuantizer/PaletteColorHistory.cs | 5 +- .../Quantizers/WuQuantizer/PaletteLookup.cs | 10 +- .../Quantizers/WuQuantizer/WuQuantizer.cs | 8 +- .../Quantizers/WuQuantizer/WuQuantizerBase.cs | 228 ++-- src/ImageProcessor/Imaging/ResizeLayer.cs | 11 +- src/ImageProcessor/Imaging/Resizer.cs | 38 +- .../Imaging/RoundedCornerLayer.cs | 9 +- src/ImageProcessor/Imaging/TextLayer.cs | 12 +- src/ImageProcessor/Processors/Alpha.cs | 5 +- src/ImageProcessor/Processors/AutoRotate.cs | 5 +- src/ImageProcessor/Processors/Background.cs | 15 +- .../Processors/BackgroundColor.cs | 7 +- src/ImageProcessor/Processors/Brightness.cs | 5 +- src/ImageProcessor/Processors/Contrast.cs | 5 +- src/ImageProcessor/Processors/Crop.cs | 14 +- src/ImageProcessor/Processors/DetectEdges.cs | 7 +- src/ImageProcessor/Processors/EntropyCrop.cs | 10 +- src/ImageProcessor/Processors/Filter.cs | 7 +- src/ImageProcessor/Processors/Flip.cs | 8 +- src/ImageProcessor/Processors/Format.cs | 5 +- src/ImageProcessor/Processors/Gamma.cs | 5 +- src/ImageProcessor/Processors/GaussianBlur.cs | 9 +- .../Processors/GaussianSharpen.cs | 9 +- src/ImageProcessor/Processors/Halftone.cs | 13 +- src/ImageProcessor/Processors/Hue.cs | 15 +- src/ImageProcessor/Processors/Mask.cs | 11 +- src/ImageProcessor/Processors/Meta.cs | 5 +- src/ImageProcessor/Processors/Overlay.cs | 15 +- src/ImageProcessor/Processors/Pixelate.cs | 9 +- src/ImageProcessor/Processors/Quality.cs | 5 +- src/ImageProcessor/Processors/ReplaceColor.cs | 7 +- src/ImageProcessor/Processors/Resize.cs | 14 +- src/ImageProcessor/Processors/Resolution.cs | 12 +- src/ImageProcessor/Processors/Rotate.cs | 12 +- .../Processors/RotateBounded.cs | 9 +- .../Processors/RoundedCorners.cs | 15 +- src/ImageProcessor/Processors/Saturation.cs | 11 +- src/ImageProcessor/Processors/Tint.cs | 11 +- src/ImageProcessor/Processors/Vignette.cs | 2 +- src/ImageProcessor/Processors/Watermark.cs | 13 +- .../EnumerableExtensionsUnitTests.cs | 10 +- .../DirectoryInfoExtensionsUnitTests.cs | 80 +- 185 files changed, 1752 insertions(+), 3243 deletions(-) diff --git a/src/ImageProcessor.Plugins.WebP/Imaging/Formats/NativeMethods.cs b/src/ImageProcessor.Plugins.WebP/Imaging/Formats/NativeMethods.cs index 771769539..bd0c9d8db 100644 --- a/src/ImageProcessor.Plugins.WebP/Imaging/Formats/NativeMethods.cs +++ b/src/ImageProcessor.Plugins.WebP/Imaging/Formats/NativeMethods.cs @@ -31,7 +31,7 @@ static NativeMethods() string name = string.Format("ImageProcessor.Plugins.WebP.Resources.Unmanaged.{0}.libwebp.dll", folder); using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(name)) { - using (MemoryStream memoryStream = new MemoryStream()) + using (var memoryStream = new MemoryStream()) { if (stream != null) { @@ -42,7 +42,6 @@ static NativeMethods() } } - #region WebP /// /// Validate the WebP image header and retrieve the image height and width. Pointers *width and *height can be passed NULL if deemed irrelevant /// @@ -150,6 +149,5 @@ static NativeMethods() /// [DllImport("libwebp", CallingConvention = CallingConvention.Cdecl, EntryPoint = "WebPFree")] public static extern int WebPFree(IntPtr pointer); - #endregion } } diff --git a/src/ImageProcessor.Plugins.WebP/Imaging/Formats/WebPFormat.cs b/src/ImageProcessor.Plugins.WebP/Imaging/Formats/WebPFormat.cs index c77b15af1..0e3d52d6c 100644 --- a/src/ImageProcessor.Plugins.WebP/Imaging/Formats/WebPFormat.cs +++ b/src/ImageProcessor.Plugins.WebP/Imaging/Formats/WebPFormat.cs @@ -105,13 +105,11 @@ public override Image Load(Stream stream) /// public override Image Save(Stream stream, Image image, long bitDepth) { - byte[] bytes; - // Encode in webP format. // If Quality is 100, encode losslessly instead of lossily - if (this.Quality == 100 ? EncodeLosslessly((Bitmap)image, out bytes) : EncodeLossly((Bitmap)image, this.Quality, out bytes)) + if (this.Quality == 100 ? EncodeLosslessly((Bitmap)image, out byte[] bytes) : EncodeLossly((Bitmap)image, this.Quality, out bytes)) { - using (MemoryStream memoryStream = new MemoryStream(bytes)) + using (var memoryStream = new MemoryStream(bytes)) { memoryStream.CopyTo(stream); memoryStream.Position = stream.Position = 0; @@ -140,11 +138,9 @@ public override Image Save(Stream stream, Image image, long bitDepth) /// public override Image Save(string path, Image image, long bitDepth) { - byte[] bytes; - // Encode in webP format. // If Quality is 100, encode losslessly instead of lossily - if (this.Quality == 100 ? EncodeLosslessly((Bitmap)image, out bytes) : EncodeLossly((Bitmap)image, this.Quality, out bytes)) + if (this.Quality == 100 ? EncodeLosslessly((Bitmap)image, out byte[] bytes) : EncodeLossly((Bitmap)image, this.Quality, out bytes)) { File.WriteAllBytes(path, bytes); } @@ -162,17 +158,15 @@ public override Image Save(string path, Image image, long bitDepth) private static Bitmap Decode(byte[] webpData) { // Get the image width and height - GCHandle pinnedWebP = GCHandle.Alloc(webpData, GCHandleType.Pinned); + var pinnedWebP = GCHandle.Alloc(webpData, GCHandleType.Pinned); IntPtr ptrData = pinnedWebP.AddrOfPinnedObject(); uint dataSize = (uint)webpData.Length; Bitmap bitmap = null; BitmapData bitmapData = null; IntPtr outputBuffer = IntPtr.Zero; - int width; - int height; - if (NativeMethods.WebPGetInfo(ptrData, dataSize, out width, out height) != 1) + if (NativeMethods.WebPGetInfo(ptrData, dataSize, out int width, out int height) != 1) { throw new ImageFormatException("WebP image header is corrupted."); } diff --git a/src/ImageProcessor.Web.Plugins.AzureBlobCache/AzureBlobCache.cs b/src/ImageProcessor.Web.Plugins.AzureBlobCache/AzureBlobCache.cs index fdb8c7197..7910d0b94 100644 --- a/src/ImageProcessor.Web.Plugins.AzureBlobCache/AzureBlobCache.cs +++ b/src/ImageProcessor.Web.Plugins.AzureBlobCache/AzureBlobCache.cs @@ -97,7 +97,7 @@ public AzureBlobCache(string requestPath, string fullPath, string querystring) if (cloudCachedBlobClient == null) { // Retrieve storage accounts from connection string. - CloudStorageAccount cloudCachedStorageAccount = CloudStorageAccount.Parse(this.Settings["CachedStorageAccount"]); + var cloudCachedStorageAccount = CloudStorageAccount.Parse(this.Settings["CachedStorageAccount"]); // Create the blob clients. cloudCachedBlobClient = cloudCachedStorageAccount.CreateCloudBlobClient(); @@ -118,7 +118,7 @@ public AzureBlobCache(string requestPath, string fullPath, string querystring) // Repeat for source if it exists if (!string.IsNullOrWhiteSpace(sourceAccount)) { - CloudStorageAccount cloudSourceStorageAccount = CloudStorageAccount.Parse(this.Settings["SourceStorageAccount"]); + var cloudSourceStorageAccount = CloudStorageAccount.Parse(this.Settings["SourceStorageAccount"]); CloudBlobClient cloudSourceBlobClient = cloudSourceStorageAccount.CreateCloudBlobClient(); cloudSourceBlobContainer = cloudSourceBlobClient.GetContainerReference(this.Settings["SourceBlobContainer"]); } @@ -130,15 +130,14 @@ public AzureBlobCache(string requestPath, string fullPath, string querystring) if (this.Settings.ContainsKey("CachedCDNTimeout")) { - int t; - int.TryParse(this.Settings["CachedCDNTimeout"], out t); + int.TryParse(this.Settings["CachedCDNTimeout"], out int t); this.timeout = t; } // This setting was added to facilitate streaming of the blob resource directly instead of a redirect. This is beneficial for CDN purposes // but caution should be taken if not used with a CDN as it will add quite a bit of overhead to the site. // See: https://github.com/JimBobSquarePants/ImageProcessor/issues/161 - this.streamCachedImage = this.Settings.ContainsKey("StreamCachedImage") && this.Settings["StreamCachedImage"].ToLower() == "true"; + this.streamCachedImage = this.Settings.ContainsKey("StreamCachedImage") && string.Equals(this.Settings["StreamCachedImage"], "true", StringComparison.OrdinalIgnoreCase); } /// @@ -152,11 +151,11 @@ public override async Task IsNewOrUpdatedAsync() // TODO: Before this check is performed it should be throttled. For example, only perform this check // if the last time it was checked is greater than 5 seconds. This would be much better for perf // if there is a high throughput of image requests. - string cachedFileName = await this.CreateCachedFileNameAsync(); + string cachedFileName = await this.CreateCachedFileNameAsync().ConfigureAwait(false); this.CachedPath = CachedImageHelper.GetCachedPath(cloudCachedBlobContainer.Uri.ToString(), cachedFileName, true, this.FolderDepth); // Do we insert the cache container? This seems to break some setups. - bool useCachedContainerInUrl = this.Settings.ContainsKey("UseCachedContainerInUrl") && this.Settings["UseCachedContainerInUrl"].ToLower() != "false"; + bool useCachedContainerInUrl = this.Settings.ContainsKey("UseCachedContainerInUrl") && !string.Equals(this.Settings["UseCachedContainerInUrl"], "false", StringComparison.OrdinalIgnoreCase); this.cachedRewritePath = CachedImageHelper.GetCachedPath(useCachedContainerInUrl ? Path.Combine(this.cachedCdnRoot, cloudCachedBlobContainer.Name) : this.cachedCdnRoot, cachedFileName, true, this.FolderDepth); @@ -183,10 +182,10 @@ public override async Task IsNewOrUpdatedAsync() string blobPath = this.CachedPath.Substring(cloudCachedBlobContainer.Uri.ToString().Length + 1); CloudBlockBlob blockBlob = cloudCachedBlobContainer.GetBlockBlobReference(blobPath); - if (await blockBlob.ExistsAsync()) + if (await blockBlob.ExistsAsync().ConfigureAwait(false)) { // Pull the latest info. - await blockBlob.FetchAttributesAsync(); + await blockBlob.FetchAttributesAsync().ConfigureAwait(false); if (blockBlob.Properties.LastModified.HasValue) { @@ -211,7 +210,7 @@ public override async Task IsNewOrUpdatedAsync() { // Check to see if the cached image is set to expire // or a new file with the same name has replaced our current image - if (this.IsExpired(cachedImage.CreationTimeUtc) || await this.IsUpdatedAsync(cachedImage.CreationTimeUtc)) + if (this.IsExpired(cachedImage.CreationTimeUtc) || await this.IsUpdatedAsync(cachedImage.CreationTimeUtc).ConfigureAwait(false)) { CacheIndexer.Remove(this.CachedPath); isUpdated = true; @@ -238,14 +237,14 @@ public override async Task AddImageToCacheAsync(Stream stream, string contentTyp string blobPath = this.CachedPath.Substring(cloudCachedBlobContainer.Uri.ToString().Length + 1); CloudBlockBlob blockBlob = cloudCachedBlobContainer.GetBlockBlobReference(blobPath); - await blockBlob.UploadFromStreamAsync(stream); + await blockBlob.UploadFromStreamAsync(stream).ConfigureAwait(false); blockBlob.Properties.ContentType = contentType; blockBlob.Properties.CacheControl = $"public, max-age={this.BrowserMaxDays * 86400}"; - await blockBlob.SetPropertiesAsync(); + await blockBlob.SetPropertiesAsync().ConfigureAwait(false); blockBlob.Metadata.Add("ImageProcessedBy", "ImageProcessor.Web/" + AssemblyVersion); - await blockBlob.SetMetadataAsync(); + await blockBlob.SetMetadataAsync().ConfigureAwait(false); } /// @@ -268,28 +267,27 @@ public override Task TrimCacheAsync() if (this.FolderDepth > 0) { - Uri uri = new Uri(this.CachedPath); + var uri = new Uri(this.CachedPath); string path = uri.GetLeftPart(UriPartial.Path).Substring(cloudCachedBlobContainer.Uri.ToString().Length + 1); parent = path.Substring(0, 2); } BlobContinuationToken continuationToken = null; - List results = new List(); + var results = new List(); // Loop through the all the files in a non blocking fashion. do { - BlobResultSegment response = await cloudCachedBlobContainer.ListBlobsSegmentedAsync(parent, true, BlobListingDetails.Metadata, 5000, continuationToken, null, null, token); + BlobResultSegment response = await cloudCachedBlobContainer.ListBlobsSegmentedAsync(parent, true, BlobListingDetails.Metadata, 5000, continuationToken, null, null, token).ConfigureAwait(false); continuationToken = response.ContinuationToken; results.AddRange(response.Results); } - while (token.IsCancellationRequested == false && continuationToken != null); + while (!token.IsCancellationRequested && continuationToken != null); // Now leap through and delete. foreach ( CloudBlockBlob blob in - results.Where((blobItem, type) => blobItem is CloudBlockBlob) - .Cast() + results.OfType() .OrderBy(b => b.Properties.LastModified?.UtcDateTime ?? new DateTime())) { if (token.IsCancellationRequested || (blob.Properties.LastModified.HasValue && !this.IsExpired(blob.Properties.LastModified.Value.UtcDateTime))) @@ -299,7 +297,7 @@ CloudBlockBlob blob in // Remove from the cache and delete each CachedImage. CacheIndexer.Remove(blob.Name); - await blob.DeleteAsync(token); + await blob.DeleteAsync(token).ConfigureAwait(false); } }); @@ -314,7 +312,7 @@ CloudBlockBlob blob in /// public override void RewritePath(HttpContext context) { - HttpWebRequest request = (HttpWebRequest)WebRequest.Create(this.cachedRewritePath); + var request = (HttpWebRequest)WebRequest.Create(this.cachedRewritePath); if (this.streamCachedImage) { @@ -474,10 +472,10 @@ protected virtual async Task IsUpdatedAsync(DateTime creationDate) blobPath = blobPath.Replace(container, string.Empty).TrimStart('/'); CloudBlockBlob blockBlob = cloudSourceBlobContainer.GetBlockBlobReference(blobPath); - if (await blockBlob.ExistsAsync()) + if (await blockBlob.ExistsAsync().ConfigureAwait(false)) { // Pull the latest info. - await blockBlob.FetchAttributesAsync(); + await blockBlob.FetchAttributesAsync().ConfigureAwait(false); if (blockBlob.Properties.LastModified.HasValue) { @@ -488,10 +486,10 @@ protected virtual async Task IsUpdatedAsync(DateTime creationDate) else { // Try and get the headers for the file, this should allow cache busting for remote files. - HttpWebRequest request = (HttpWebRequest)WebRequest.Create(this.RequestPath); + var request = (HttpWebRequest)WebRequest.Create(this.RequestPath); request.Method = "HEAD"; - using (HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync()) + using (var response = (HttpWebResponse)await request.GetResponseAsync().ConfigureAwait(false)) { isUpdated = response.LastModified.ToUniversalTime() > creationDate; } @@ -514,17 +512,15 @@ protected virtual async Task IsUpdatedAsync(DateTime creationDate) /// The current request private static void TrySetIfModifiedSinceDate(HttpContext context, HttpWebRequest request) { - DateTime ifModifiedDate; - string ifModifiedFromRequest = context.Request.Headers["If-Modified-Since"]; - if (DateTime.TryParse(ifModifiedFromRequest, out ifModifiedDate)) + if (DateTime.TryParse(ifModifiedFromRequest, out DateTime ifModifiedDate)) { request.IfModifiedSince = ifModifiedDate; } else { - if (ifModifiedFromRequest.ToLower().Contains("utc")) + if (ifModifiedFromRequest.IndexOf("utc", StringComparison.OrdinalIgnoreCase) >= 0) { ifModifiedFromRequest = ifModifiedFromRequest.ToLower().Replace("utc", string.Empty); diff --git a/src/ImageProcessor.Web/Caching/AsyncKeyLock.cs b/src/ImageProcessor.Web/Caching/AsyncKeyLock.cs index 8de91d3aa..3bcd3cfe5 100644 --- a/src/ImageProcessor.Web/Caching/AsyncKeyLock.cs +++ b/src/ImageProcessor.Web/Caching/AsyncKeyLock.cs @@ -78,10 +78,7 @@ private sealed class Releaser : IDisposable /// Initializes a new instance of the class. /// /// The key identifying the doorman that limits the number of threads. - public Releaser(string key) - { - this.key = key; - } + public Releaser(string key) => this.key = key; /// public void Dispose() diff --git a/src/ImageProcessor.Web/Caching/CacheIndexer.cs b/src/ImageProcessor.Web/Caching/CacheIndexer.cs index 2ac05053d..921341554 100644 --- a/src/ImageProcessor.Web/Caching/CacheIndexer.cs +++ b/src/ImageProcessor.Web/Caching/CacheIndexer.cs @@ -35,8 +35,7 @@ public static class CacheIndexer public static CachedImage Get(string cachedPath) { string key = Path.GetFileNameWithoutExtension(cachedPath); - CachedImage cachedImage = (CachedImage)MemCache.GetItem(key); - return cachedImage; + return (CachedImage)MemCache.GetItem(key); } /// @@ -73,7 +72,7 @@ public static bool Remove(string cachedPath) { expiration = new TimeSpan(0, 1, 0); } // Add the CachedImage with a sliding expiration of `expiry` minutes. - CacheItemPolicy policy = new CacheItemPolicy { SlidingExpiration = expiration }; + var policy = new CacheItemPolicy { SlidingExpiration = expiration }; if (new Uri(cachedImage.Path).IsFile) { @@ -120,9 +119,6 @@ public static bool Remove(string cachedPath) /// /// The value of the item to add or get. /// - public static CachedImage Add(CachedImage cachedImage, int expiry) - { - return Add(cachedImage, new TimeSpan(0, expiry, 0)); - } + public static CachedImage Add(CachedImage cachedImage, int expiry) => Add(cachedImage, new TimeSpan(0, expiry, 0)); } } \ No newline at end of file diff --git a/src/ImageProcessor.Web/Caching/DiskCache.cs b/src/ImageProcessor.Web/Caching/DiskCache.cs index 2b0b62c8a..80fba9559 100644 --- a/src/ImageProcessor.Web/Caching/DiskCache.cs +++ b/src/ImageProcessor.Web/Caching/DiskCache.cs @@ -172,7 +172,7 @@ public override async Task IsNewOrUpdatedAsync() public override async Task AddImageToCacheAsync(Stream stream, string contentType) { // ReSharper disable once AssignNullToNotNullAttribute - DirectoryInfo directoryInfo = new DirectoryInfo(Path.GetDirectoryName(this.CachedPath)); + var directoryInfo = new DirectoryInfo(Path.GetDirectoryName(this.CachedPath)); if (!directoryInfo.Exists) { directoryInfo.Create(); @@ -255,9 +255,8 @@ public override Task TrimCacheAsync() // Remove from the cache and delete each CachedImage. CacheIndexer.Remove(fileInfo.Name); fileInfo.Delete(); - count -= 1; + count--; } - catch (Exception ex) { // Log it but skip to the next file. @@ -330,7 +329,7 @@ public override void RewritePath(HttpContext context) // Since we are going to call Response.End(), we need to go ahead and set the headers HttpModules.ImageProcessingModule.SetHeaders(context, this.BrowserMaxDays); this.SetETagHeader(context); - var length = new FileInfo(this.CachedPath).Length; + long length = new FileInfo(this.CachedPath).Length; context.Response.AddHeader("Content-Length", length.ToString()); context.Response.TransmitFile(this.CachedPath, 0, length); @@ -377,10 +376,10 @@ protected virtual async Task IsUpdatedAsync(DateTime creationDate) else { // Try and get the headers for the file, this should allow cache busting for remote files. - HttpWebRequest request = (HttpWebRequest)WebRequest.Create(this.RequestPath); + var request = (HttpWebRequest)WebRequest.Create(this.RequestPath); request.Method = "HEAD"; - using (HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync().ConfigureAwait(false)) + using (var response = (HttpWebResponse)await request.GetResponseAsync().ConfigureAwait(false)) { isUpdated = response.LastModified.ToUniversalTime() > creationDate; } @@ -576,7 +575,8 @@ private void RecursivelyDeleteEmptyDirectories(string directory, string root, Ca } // If the directory is empty of files delete it to remove the FCN. - if (!Directory.GetFiles(directory, "*", SearchOption.TopDirectoryOnly).Any() && !Directory.GetDirectories(directory, "*", SearchOption.TopDirectoryOnly).Any()) + if (Directory.GetFiles(directory, "*", SearchOption.TopDirectoryOnly).Length == 0 + && Directory.GetDirectories(directory, "*", SearchOption.TopDirectoryOnly).Length == 0) { Directory.Delete(directory); } @@ -587,7 +587,6 @@ private void RecursivelyDeleteEmptyDirectories(string directory, string root, Ca { // Log it but skip to the next directory. ImageProcessorBootstrapper.Instance.Logger.Log($"Unable to clean cached directory: {directory}, {ex.Message}"); - } } diff --git a/src/ImageProcessor.Web/Caching/ImageCacheBase.cs b/src/ImageProcessor.Web/Caching/ImageCacheBase.cs index 661a414de..ecc14b49f 100644 --- a/src/ImageProcessor.Web/Caching/ImageCacheBase.cs +++ b/src/ImageProcessor.Web/Caching/ImageCacheBase.cs @@ -152,10 +152,7 @@ protected ImageCacheBase(string requestPath, string fullPath, string querystring /// /// The asynchronous returning the value. /// - public virtual async Task CreateCachedFileNameAsync() - { - return await Task.FromResult(CachedImageHelper.GetCachedImageFileName(this.FullPath, this.Querystring)).ConfigureAwait(false); - } + public virtual Task CreateCachedFileNameAsync() => Task.FromResult(CachedImageHelper.GetCachedImageFileName(this.FullPath, this.Querystring)); /// /// Rewrites the path to point to the cached image. @@ -173,10 +170,7 @@ public virtual async Task CreateCachedFileNameAsync() /// /// The true if the date is out with the limit, otherwise; false. /// - protected virtual bool IsExpired(DateTime creationDate) - { - return creationDate < DateTime.UtcNow.AddDays(-this.MaxDays); - } + protected virtual bool IsExpired(DateTime creationDate) => creationDate < DateTime.UtcNow.AddDays(-this.MaxDays); /// /// Provides a means to augment the cache settings taken from the configuration in derived classes. @@ -198,7 +192,7 @@ protected virtual void AugmentSettings(Dictionary settings) protected virtual Task DebounceTrimmerAsync(Func trimmer) { // Wrap new method - this.ScheduleCacheTrimmer(token => trimmer()); + this.ScheduleCacheTrimmer(_ => trimmer()); return Task.FromResult(0); } @@ -207,10 +201,7 @@ protected virtual Task DebounceTrimmerAsync(Func trimmer) /// and that it is a quiet time to do so. /// /// The cache trimming method. - protected void ScheduleCacheTrimmer(Func trimmer) - { - Trimmer.ScheduleTrimCache(trimmer); - } + protected void ScheduleCacheTrimmer(Func trimmer) => Trimmer.ScheduleTrimCache(trimmer); /// /// Provides an entry point to augmentation of the dictionary @@ -261,10 +252,7 @@ private class CacheTrimmer : IRegisteredObject /// /// Initializes a new instance of the class. /// - public CacheTrimmer() - { - HostingEnvironment.RegisterObject(this); - } + public CacheTrimmer() => HostingEnvironment.RegisterObject(this); /// /// The sliding delay time @@ -305,8 +293,8 @@ public void ScheduleTrimCache(Func trimmer) } else if ( // Must be less than the max and less than the delay - DateTime.Now - this.timestamp < TimeSpan.FromMilliseconds(MaxWaitMilliseconds) && - DateTime.Now - this.timestamp < TimeSpan.FromMilliseconds(WaitMilliseconds)) + DateTime.Now - this.timestamp < TimeSpan.FromMilliseconds(MaxWaitMilliseconds) + && DateTime.Now - this.timestamp < TimeSpan.FromMilliseconds(WaitMilliseconds)) { // Delay this.timer.Change(WaitMilliseconds, 0); diff --git a/src/ImageProcessor.Web/Caching/MemCache.cs b/src/ImageProcessor.Web/Caching/MemCache.cs index 2dfabd3cb..937c83d48 100644 --- a/src/ImageProcessor.Web/Caching/MemCache.cs +++ b/src/ImageProcessor.Web/Caching/MemCache.cs @@ -41,12 +41,8 @@ internal static class MemCache /// /// Adds an item to the cache. /// - /// - /// A unique identifier for the cache entry. - /// - /// - /// The object to insert. - /// + /// A unique identifier for the cache entry. + /// The object to insert. /// /// Optional. An object that contains eviction details for the cache entry. This object /// provides more options for eviction than a simple absolute expiration. The default value for the optional parameter @@ -94,9 +90,7 @@ public static bool AddItem(string key, object value, CacheItemPolicy policy = nu /// /// Fetches an item matching the given key from the cache. /// - /// - /// A unique identifier for the cache entry. - /// + /// A unique identifier for the cache entry. /// /// Optional. A named region in the cache to which the cache entry can be added, /// if regions are implemented. The default value for the optional parameter @@ -116,12 +110,8 @@ public static object GetItem(string key, string regionName = null) /// /// Updates an item to the cache. /// - /// - /// A unique identifier for the cache entry. - /// - /// - /// The object to insert. - /// + /// A unique identifier for the cache entry. + /// The object to insert. /// /// Optional. An object that contains eviction details for the cache entry. This object /// provides more options for eviction than a simple absolute expiration. The default value for the optional parameter @@ -164,9 +154,7 @@ public static bool UpdateItem(string key, object value, CacheItemPolicy policy = /// /// Removes an item matching the given key from the cache. /// - /// - /// A unique identifier for the cache entry. - /// + /// A unique identifier for the cache entry. /// /// Optional. A named region in the cache to which the cache entry can be added, /// if regions are implemented. The default value for the optional parameter @@ -186,8 +174,7 @@ public static bool RemoveItem(string key, string regionName = null) if (isRemoved) { - string removedValue; - CacheItems.TryRemove(key, out removedValue); + CacheItems.TryRemove(key, out string removedValue); } } @@ -197,9 +184,7 @@ public static bool RemoveItem(string key, string regionName = null) /// /// Clears the cache. /// - /// - /// The region name. - /// + /// The region name. /// /// The . /// @@ -211,20 +196,19 @@ public static bool Clear(string regionName = null) { // You can't remove items from a collection whilst you are iterating over it so you need to // create a collection to store the items to remove. - Dictionary tempDictionary = new Dictionary(); + var tempDictionary = new Dictionary(); foreach (KeyValuePair cacheItem in CacheItems) { // Does the cached key come with a region. - if ((cacheItem.Value == null) || (cacheItem.Value != null && cacheItem.Value.Equals(regionName, StringComparison.OrdinalIgnoreCase))) + if ((cacheItem.Value == null) || (cacheItem.Value?.Equals(regionName, StringComparison.OrdinalIgnoreCase) == true)) { isCleared = RemoveItem(cacheItem.Key, cacheItem.Value); if (isCleared) { string key = cacheItem.Key; - string value = cacheItem.Value; - tempDictionary[key] = value; + tempDictionary[key] = cacheItem.Value; } } } @@ -234,8 +218,7 @@ public static bool Clear(string regionName = null) // Loop through and clear out the dictionary of cache keys. foreach (KeyValuePair cacheItem in tempDictionary) { - string removedValue; - CacheItems.TryRemove(cacheItem.Key, out removedValue); + CacheItems.TryRemove(cacheItem.Key, out string removedValue); } } } diff --git a/src/ImageProcessor.Web/Configuration/ImageCacheSection.cs b/src/ImageProcessor.Web/Configuration/ImageCacheSection.cs index d11eabca1..bbd57f6b3 100644 --- a/src/ImageProcessor.Web/Configuration/ImageCacheSection.cs +++ b/src/ImageProcessor.Web/Configuration/ImageCacheSection.cs @@ -112,7 +112,7 @@ public int MaxDays set => this["maxDays"] = value; } - + /// /// Gets or sets the maximum number of minutes to store a cached image reference in memory. /// @@ -271,10 +271,7 @@ public CacheElement this[int index] /// /// A new . /// - protected override ConfigurationElement CreateNewElement() - { - return new CacheElement(); - } + protected override ConfigurationElement CreateNewElement() => new CacheElement(); /// /// Gets the element key for a specified configuration element when overridden in a derived class. @@ -283,10 +280,7 @@ protected override ConfigurationElement CreateNewElement() /// An that acts as the key for the specified . /// /// The to return the key for. - protected override object GetElementKey(ConfigurationElement element) - { - return ((CacheElement)element).Name; - } + protected override object GetElementKey(ConfigurationElement element) => ((CacheElement)element).Name; } } } diff --git a/src/ImageProcessor.Web/Configuration/ImageProcessingSection.cs b/src/ImageProcessor.Web/Configuration/ImageProcessingSection.cs index 885120ef0..d95179f9f 100644 --- a/src/ImageProcessor.Web/Configuration/ImageProcessingSection.cs +++ b/src/ImageProcessor.Web/Configuration/ImageProcessingSection.cs @@ -99,10 +99,7 @@ public bool InterceptAllRequests /// The processing configuration section from the current application configuration. public static ImageProcessingSection GetConfiguration() { - ImageProcessingSection imageProcessingSection = - ConfigurationManager.GetSection("imageProcessor/processing") as ImageProcessingSection; - - if (imageProcessingSection != null) + if (ConfigurationManager.GetSection("imageProcessor/processing") is ImageProcessingSection imageProcessingSection) { return imageProcessingSection; } @@ -182,7 +179,7 @@ public class PresetElementCollection : ConfigurationElementCollection /// public PresetElement this[int index] { - get => (PresetElement)BaseGet(index); + get => (PresetElement)this.BaseGet(index); set { @@ -201,10 +198,7 @@ public PresetElement this[int index] /// /// A new PluginConfig configuration element. /// - protected override ConfigurationElement CreateNewElement() - { - return new PresetElement(); - } + protected override ConfigurationElement CreateNewElement() => new PresetElement(); /// /// Gets the element key for a specified PluginElement configuration element. @@ -216,10 +210,7 @@ protected override ConfigurationElement CreateNewElement() /// /// The element key for a specified PluginElement configuration element. /// - protected override object GetElementKey(ConfigurationElement element) - { - return ((PresetElement)element).Name; - } + protected override object GetElementKey(ConfigurationElement element) => ((PresetElement)element).Name; } /// @@ -304,7 +295,7 @@ public class PluginElementCollection : ConfigurationElementCollection /// public PluginElement this[int index] { - get => (PluginElement)BaseGet(index); + get => (PluginElement)this.BaseGet(index); set { @@ -323,10 +314,7 @@ public PluginElement this[int index] /// /// A new Plugin configuration element. /// - protected override ConfigurationElement CreateNewElement() - { - return new PluginElement(); - } + protected override ConfigurationElement CreateNewElement() => new PluginElement(); /// /// Gets the element key for a specified PluginElement configuration element. @@ -338,10 +326,7 @@ protected override ConfigurationElement CreateNewElement() /// /// The element key for a specified PluginElement configuration element. /// - protected override object GetElementKey(ConfigurationElement element) - { - return ((PluginElement)element).Name; - } + protected override object GetElementKey(ConfigurationElement element) => ((PluginElement)element).Name; } } } diff --git a/src/ImageProcessor.Web/Configuration/ImageProcessorConfiguration.cs b/src/ImageProcessor.Web/Configuration/ImageProcessorConfiguration.cs index d2cd1e0c8..2abec5245 100644 --- a/src/ImageProcessor.Web/Configuration/ImageProcessorConfiguration.cs +++ b/src/ImageProcessor.Web/Configuration/ImageProcessorConfiguration.cs @@ -27,7 +27,6 @@ namespace ImageProcessor.Web.Configuration /// public sealed class ImageProcessorConfiguration { - #region Fields /// /// A new instance of the class. /// with lazy initialization. @@ -55,9 +54,7 @@ public sealed class ImageProcessorConfiguration /// The security configuration section from the current application configuration. /// private static ImageSecuritySection imageSecuritySection; - #endregion - #region Constructors /// /// Prevents a default instance of the class from being created. /// @@ -67,9 +64,7 @@ private ImageProcessorConfiguration() this.LoadImageServices(); this.LoadImageCache(); } - #endregion - #region Properties /// /// Gets the current instance of the class. /// @@ -157,9 +152,6 @@ private ImageProcessorConfiguration() /// public bool InterceptAllRequests => GetImageProcessingSection().InterceptAllRequests; - #endregion - - #region Methods /// /// Returns the processing instructions matching the preset defined in the configuration. /// @@ -187,30 +179,20 @@ public string GetPresetSettings(string name) /// Retrieves the security configuration section from the current application configuration. /// /// The security configuration section from the current application configuration. - internal ImageSecuritySection GetImageSecuritySection() - { - return imageSecuritySection ?? (imageSecuritySection = ImageSecuritySection.GetConfiguration()); - } + internal ImageSecuritySection GetImageSecuritySection() => imageSecuritySection ?? (imageSecuritySection = ImageSecuritySection.GetConfiguration()); /// /// Retrieves the processing configuration section from the current application configuration. /// /// The processing configuration section from the current application configuration. - private static ImageProcessingSection GetImageProcessingSection() - { - return imageProcessingSection ?? (imageProcessingSection = ImageProcessingSection.GetConfiguration()); - } + private static ImageProcessingSection GetImageProcessingSection() => imageProcessingSection ?? (imageProcessingSection = ImageProcessingSection.GetConfiguration()); /// /// Retrieves the caching configuration section from the current application configuration. /// /// The caching configuration section from the current application configuration. - private static ImageCacheSection GetImageCacheSection() - { - return imageCacheSection ?? (imageCacheSection = ImageCacheSection.GetConfiguration()); - } + private static ImageCacheSection GetImageCacheSection() => imageCacheSection ?? (imageCacheSection = ImageCacheSection.GetConfiguration()); - #region GraphicesProcessors /// /// Creates and returns a new collection of /// @@ -222,11 +204,11 @@ private static ImageCacheSection GetImageCacheSection() /// The public IWebGraphicsProcessor[] CreateWebGraphicsProcessors() { - List processors = new List(); + var processors = new List(); foreach (KeyValuePair> pair in this.AvailableWebGraphicsProcessors) { - IWebGraphicsProcessor processor = (IWebGraphicsProcessor)Activator.CreateInstance(pair.Key); + var processor = (IWebGraphicsProcessor)Activator.CreateInstance(pair.Key); processor.Processor.Settings = pair.Value; processors.Add(processor); } @@ -248,7 +230,7 @@ private void LoadGraphicsProcessors() foreach (ImageProcessingSection.PluginElement pluginConfig in pluginConfigs) { - Type type = Type.GetType(pluginConfig.Type); + var type = Type.GetType(pluginConfig.Type); if (type == null) { @@ -291,8 +273,7 @@ private Dictionary GetPluginSettings(string name) .ToDictionary(setting => setting.Key, setting => setting.Value); // Override the settings found in config section with values in the app.config / deployment slot settings - OverrideDefaultSettingsWithAppSettingsValue(settings, name); - + this.OverrideDefaultSettingsWithAppSettingsValue(settings, name); } else { @@ -301,9 +282,7 @@ private Dictionary GetPluginSettings(string name) return settings; } - #endregion - #region ImageServices /// /// Loads image services from configuration. /// @@ -316,7 +295,7 @@ private void LoadImageServices() this.ImageServices = new List(); foreach (ImageSecuritySection.ServiceElement config in services) { - Type type = Type.GetType(config.Type); + var type = Type.GetType(config.Type); if (type == null) { @@ -325,7 +304,7 @@ private void LoadImageServices() throw new TypeLoadException(message); } - IImageService imageService = Activator.CreateInstance(type) as IImageService; + var imageService = Activator.CreateInstance(type) as IImageService; if (imageService != null) { @@ -335,10 +314,8 @@ private void LoadImageServices() imageService.WhiteList = this.GetServiceWhitelist(name); } - this.ImageServices.Add(imageService); } - } /// @@ -403,9 +380,7 @@ private Uri[] GetServiceWhitelist(string name) return whitelist; } - #endregion - #region ImageCaches /// /// Gets the currently assigned . /// @@ -420,7 +395,7 @@ private void LoadImageCache() { if (cache.Name == currentCache) { - Type type = Type.GetType(cache.Type); + var type = Type.GetType(cache.Type); if (type == null) { @@ -449,7 +424,6 @@ private void LoadImageCache() } } } - #endregion /// /// Override the default settings discovered in the config sections, with settings stored in appsettings of app.config or deployment slot settings (if available) @@ -460,23 +434,19 @@ private void LoadImageCache() /// The name of the section, used to construct the appSetting key name private void OverrideDefaultSettingsWithAppSettingsValue(Dictionary defaultSettings, string serviceOrPluginName) { - - Dictionary copyOfSettingsForEnumeration = new Dictionary(defaultSettings); + var copyOfSettingsForEnumeration = new Dictionary(defaultSettings); // For each default setting found in the config section - foreach (var setting in copyOfSettingsForEnumeration) + foreach (KeyValuePair setting in copyOfSettingsForEnumeration) { // Check the app settings for a key in the specified format string appSettingKeyName = $"ImageProcessor.{serviceOrPluginName}.{setting.Key}"; - if (!String.IsNullOrEmpty(ConfigurationManager.AppSettings[appSettingKeyName])) + if (!string.IsNullOrEmpty(ConfigurationManager.AppSettings[appSettingKeyName])) { // If the key is found in app settings use the app settings value rather than the value in the config section defaultSettings[setting.Key] = ConfigurationManager.AppSettings[appSettingKeyName]; } } - } - - #endregion } } diff --git a/src/ImageProcessor.Web/Configuration/ImageSecuritySection.cs b/src/ImageProcessor.Web/Configuration/ImageSecuritySection.cs index 8b26d2cc5..89189b58a 100644 --- a/src/ImageProcessor.Web/Configuration/ImageSecuritySection.cs +++ b/src/ImageProcessor.Web/Configuration/ImageSecuritySection.cs @@ -61,9 +61,7 @@ public ServiceElementCollection ImageServices /// The cache configuration section from the current application configuration. public static ImageSecuritySection GetConfiguration() { - ImageSecuritySection imageSecuritySection = ConfigurationManager.GetSection("imageProcessor/security") as ImageSecuritySection; - - if (imageSecuritySection != null) + if (ConfigurationManager.GetSection("imageProcessor/security") is ImageSecuritySection imageSecuritySection) { imageSecuritySection.AutoLoadServices = false; return imageSecuritySection; @@ -93,9 +91,9 @@ public class ServiceElement : ConfigurationElement [ConfigurationProperty("name", DefaultValue = "", IsRequired = true)] public string Name { - get { return (string)this["name"]; } + get => (string)this["name"]; - set { this["name"] = value; } + set => this["name"] = value; } /// @@ -105,9 +103,9 @@ public string Name [ConfigurationProperty("prefix", DefaultValue = "", IsRequired = false)] public string Prefix { - get { return (string)this["prefix"]; } + get => (string)this["prefix"]; - set { this["prefix"] = value; } + set => this["prefix"] = value; } /// @@ -117,9 +115,9 @@ public string Prefix [ConfigurationProperty("type", DefaultValue = "", IsRequired = true)] public string Type { - get { return (string)this["type"]; } + get => (string)this["type"]; - set { this["type"] = value; } + set => this["type"] = value; } /// @@ -173,10 +171,7 @@ public class ServiceElementCollection : ConfigurationElementCollection /// public ServiceElement this[int index] { - get - { - return (ServiceElement)this.BaseGet(index); - } + get => (ServiceElement)this.BaseGet(index); set { @@ -195,10 +190,7 @@ public ServiceElement this[int index] /// /// A new . /// - protected override ConfigurationElement CreateNewElement() - { - return new ServiceElement(); - } + protected override ConfigurationElement CreateNewElement() => new ServiceElement(); /// /// Gets the element key for a specified configuration element when overridden in a derived class. @@ -207,10 +199,7 @@ protected override ConfigurationElement CreateNewElement() /// An that acts as the key for the specified . /// /// The to return the key for. - protected override object GetElementKey(ConfigurationElement element) - { - return ((ServiceElement)element).Name; - } + protected override object GetElementKey(ConfigurationElement element) => ((ServiceElement)element).Name; } /// @@ -240,10 +229,7 @@ public class WhiteListElementCollection : ConfigurationElementCollection /// The whitelist item at the given index. public SafeUrl this[int index] { - get - { - return this.BaseGet(index) as SafeUrl; - } + get => this.BaseGet(index) as SafeUrl; set { @@ -262,20 +248,14 @@ public SafeUrl this[int index] /// /// A new SafeURL configuration element. /// - protected override ConfigurationElement CreateNewElement() - { - return new SafeUrl(); - } + protected override ConfigurationElement CreateNewElement() => new SafeUrl(); /// /// Gets the element key for a specified whitelist configuration element. /// /// The ConfigurationElement to return the key for. /// The element key for a specified whitelist configuration element. - protected override object GetElementKey(ConfigurationElement element) - { - return ((SafeUrl)element).Url; - } + protected override object GetElementKey(ConfigurationElement element) => ((SafeUrl)element).Url; } /// @@ -290,9 +270,9 @@ public class SafeUrl : ConfigurationElement [ConfigurationProperty("url", DefaultValue = "", IsRequired = true)] public Uri Url { - get { return new Uri(this["url"].ToString(), UriKind.RelativeOrAbsolute); } + get => new Uri(this["url"].ToString(), UriKind.RelativeOrAbsolute); - set { this["url"] = value; } + set => this["url"] = value; } } } diff --git a/src/ImageProcessor.Web/Configuration/Shared/SettingElement.cs b/src/ImageProcessor.Web/Configuration/Shared/SettingElement.cs index 636fbddca..76b36152f 100644 --- a/src/ImageProcessor.Web/Configuration/Shared/SettingElement.cs +++ b/src/ImageProcessor.Web/Configuration/Shared/SettingElement.cs @@ -24,15 +24,9 @@ public class SettingElement : ConfigurationElement [ConfigurationProperty("key", IsRequired = true, IsKey = true)] public string Key { - get - { - return this["key"] as string; - } + get => this["key"] as string; - set - { - this["key"] = value; - } + set => this["key"] = value; } /// @@ -42,15 +36,9 @@ public string Key [ConfigurationProperty("value", IsRequired = true)] public string Value { - get - { - return (string)this["value"]; - } + get => (string)this["value"]; - set - { - this["value"] = value; - } + set => this["value"] = value; } } } diff --git a/src/ImageProcessor.Web/Configuration/Shared/SettingElementCollection.cs b/src/ImageProcessor.Web/Configuration/Shared/SettingElementCollection.cs index 10f4ff2ba..c8daf8dd1 100644 --- a/src/ImageProcessor.Web/Configuration/Shared/SettingElementCollection.cs +++ b/src/ImageProcessor.Web/Configuration/Shared/SettingElementCollection.cs @@ -45,10 +45,7 @@ public class SettingElementCollection : ConfigurationElementCollection /// public SettingElement this[int index] { - get - { - return (SettingElement)BaseGet(index); - } + get => (SettingElement)this.BaseGet(index); set { @@ -76,7 +73,7 @@ public SettingElement this[int index] /// True if the collection contains the key; otherwise false. public bool ContainsKey(string key) { - object[] keys = BaseGetAllKeys(); + object[] keys = this.BaseGetAllKeys(); return keys.Any(obj => (string)obj == key); } @@ -89,10 +86,7 @@ public bool ContainsKey(string key) /// to return the key for. /// /// The element key for a specified PluginElement configuration element. - protected override object GetElementKey(ConfigurationElement element) - { - return ((SettingElement)element).Key; - } + protected override object GetElementKey(ConfigurationElement element) => ((SettingElement)element).Key; /// /// Creates a new SettingElement configuration element. @@ -100,9 +94,6 @@ protected override object GetElementKey(ConfigurationElement element) /// /// A new SettingElement configuration element. /// - protected override ConfigurationElement CreateNewElement() - { - return new SettingElement(); - } + protected override ConfigurationElement CreateNewElement() => new SettingElement(); } } diff --git a/src/ImageProcessor.Web/Extensions/DirectoryInfoExtensions.cs b/src/ImageProcessor.Web/Extensions/DirectoryInfoExtensions.cs index 1dd91c3c0..e884591ab 100644 --- a/src/ImageProcessor.Web/Extensions/DirectoryInfoExtensions.cs +++ b/src/ImageProcessor.Web/Extensions/DirectoryInfoExtensions.cs @@ -8,49 +8,17 @@ // // -------------------------------------------------------------------------------------------------------------------- -using System; -using System.ComponentModel; - namespace ImageProcessor.Web.Extensions { using System.Collections.Generic; using System.IO; using System.Linq; - using System.Threading.Tasks; /// /// Provides extension methods to the type. /// public static class DirectoryInfoExtensions { - /// - /// Returns an enumerable collection of directory information that matches a specified search pattern and search subdirectory option. - /// Will return an empty enumerable on exception. Quick and dirty but does what I need just now. - /// - /// - /// The that this method extends. - /// - /// - /// The search string to match against the names of directories. This parameter can contain a combination of valid literal path - /// and wildcard (* and ?) characters (see Remarks), but doesn't support regular expressions. The default pattern is "*", which returns all files. - /// - /// - /// One of the enumeration values that specifies whether the search operation should include only - /// the current directory or all subdirectories. The default value is TopDirectoryOnly. - /// - /// - /// An enumerable collection of directories that matches searchPattern and searchOption. - /// - [Obsolete("This method should not be used, it doesn't actually perform an async IO operation")] - [EditorBrowsable(EditorBrowsableState.Never)] - public static Task> SafeEnumerateDirectoriesAsync( - this DirectoryInfo directoryInfo, - string searchPattern = "*", - SearchOption searchOption = SearchOption.AllDirectories) - { - return Task.FromResult(SafeEnumerateDirectories(directoryInfo, searchPattern, searchOption)); - } - /// /// Returns an enumerable collection of directory information that matches a specified search pattern and search subdirectory option. /// Will return an empty enumerable on exception. Quick and dirty but does what I need just now. diff --git a/src/ImageProcessor.Web/Extensions/ObjectExtensions.cs b/src/ImageProcessor.Web/Extensions/ObjectExtensions.cs index 2ee16eb9b..4439ec954 100644 --- a/src/ImageProcessor.Web/Extensions/ObjectExtensions.cs +++ b/src/ImageProcessor.Web/Extensions/ObjectExtensions.cs @@ -20,9 +20,6 @@ internal static class ObjectExtensions /// /// The object to test against. /// True; if the value is null or an empty string; otherwise; false. - public static bool IsNullOrEmptyString(this object value) - { - return value == null || value as string == string.Empty; - } + public static bool IsNullOrEmptyString(this object value) => value == null || (value as string)?.Length == 0; } } diff --git a/src/ImageProcessor.Web/Extensions/StringExtensions.cs b/src/ImageProcessor.Web/Extensions/StringExtensions.cs index 50d6e5b92..2ed4f860d 100644 --- a/src/ImageProcessor.Web/Extensions/StringExtensions.cs +++ b/src/ImageProcessor.Web/Extensions/StringExtensions.cs @@ -22,7 +22,6 @@ namespace ImageProcessor.Web.Extensions /// public static class StringExtensions { - #region Cryptography /// /// Creates an MD5 fingerprint of the String. /// @@ -32,7 +31,7 @@ public static string ToMD5Fingerprint(this string expression) { byte[] bytes = Encoding.Unicode.GetBytes(expression.ToCharArray()); - using (MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider()) + using (var md5 = new MD5CryptoServiceProvider()) { byte[] hash = md5.ComputeHash(bytes); @@ -53,7 +52,7 @@ public static string ToSHA1Fingerprint(this string expression) { byte[] bytes = Encoding.ASCII.GetBytes(expression.ToCharArray()); - using (SHA1CryptoServiceProvider sha1 = new SHA1CryptoServiceProvider()) + using (var sha1 = new SHA1CryptoServiceProvider()) { byte[] hash = sha1.ComputeHash(bytes); @@ -64,9 +63,7 @@ public static string ToSHA1Fingerprint(this string expression) .ToString().ToLowerInvariant(); } } - #endregion - #region Numbers /// /// Creates an array of integers scraped from the String. /// @@ -79,7 +76,7 @@ public static int[] ToPositiveIntegerArray(this string expression) throw new ArgumentNullException(nameof(expression)); } - Regex regex = new Regex(@"[\d+]+(?=[,-])|[\d+]+(?![,-])", RegexOptions.Compiled); + var regex = new Regex(@"[\d+]+(?=[,-])|[\d+]+(?![,-])", RegexOptions.Compiled); MatchCollection matchCollection = regex.Matches(expression); @@ -108,7 +105,7 @@ public static float[] ToPositiveFloatArray(this string expression) throw new ArgumentNullException(nameof(expression)); } - Regex regex = new Regex(@"[\d+\.]+(?=[,-])|[\d+\.]+(?![,-])", RegexOptions.Compiled); + var regex = new Regex(@"[\d+\.]+(?=[,-])|[\d+\.]+(?![,-])", RegexOptions.Compiled); MatchCollection matchCollection = regex.Matches(expression); @@ -124,21 +121,13 @@ public static float[] ToPositiveFloatArray(this string expression) return matches; } - #endregion - #region Files and Paths /// /// Checks the string to see whether the value is a valid virtual path name. /// /// The String instance that this method extends. /// True if the given string is a valid virtual path name - public static bool IsValidVirtualPathName(this string expression) - { - Uri uri; - - return Uri.TryCreate(expression, UriKind.Relative, out uri) && uri.IsWellFormedOriginalString(); - } - #endregion + public static bool IsValidVirtualPathName(this string expression) => Uri.TryCreate(expression, UriKind.Relative, out Uri uri) && uri.IsWellFormedOriginalString(); /// /// Trims a specified string from the start of another string. diff --git a/src/ImageProcessor.Web/Extensions/TypeInferenceExtensions.cs b/src/ImageProcessor.Web/Extensions/TypeInferenceExtensions.cs index 3b219ceaf..e73313fbe 100644 --- a/src/ImageProcessor.Web/Extensions/TypeInferenceExtensions.cs +++ b/src/ImageProcessor.Web/Extensions/TypeInferenceExtensions.cs @@ -40,20 +40,14 @@ public static bool IsEnumerableOfType(this Type type, Type typeArgument) /// /// The type. /// True if the type is a collection type otherwise; false. - public static bool IsCollectionType(this Type type) - { - return type.TryGetElementType(typeof(ICollection<>)) != null; - } + public static bool IsCollectionType(this Type type) => type.TryGetElementType(typeof(ICollection<>)) != null; /// /// Determines whether the specified type is an enumerable type. /// /// The type. /// True if the type is an enumerable type otherwise; false. - public static bool IsEnumerableType(this Type type) - { - return type.TryGetElementType(typeof(IEnumerable<>)) != null; - } + public static bool IsEnumerableType(this Type type) => type.TryGetElementType(typeof(IEnumerable<>)) != null; /// /// Determines whether the specified type is an enumerable type containing a @@ -69,10 +63,10 @@ public static bool IsEnumerableType(this Type type) /// pair otherwise; false. public static bool IsEnumerableOfKeyValueType(this Type type) { - return type.TryGetElementType(typeof(IDictionary<,>)) != null || - (type.IsEnumerableType() && type.IsGenericType && type.GenericTypeArguments.Any() - && type.GenericTypeArguments[0].IsGenericType - && type.GenericTypeArguments[0].GetGenericTypeDefinition() == typeof(KeyValuePair<,>)); + return type.TryGetElementType(typeof(IDictionary<,>)) != null + || (type.IsEnumerableType() && type.IsGenericType && type.GenericTypeArguments.Length > 0 + && type.GenericTypeArguments[0].IsGenericType + && type.GenericTypeArguments[0].GetGenericTypeDefinition() == typeof(KeyValuePair<,>)); } /// @@ -89,7 +83,7 @@ public static bool IsCastableEnumerableType(this Type type) // String, though enumerable have no generic arguments. // Types with more than one generic argument cnnot be cast. // Dictionary, though enumerable, requires linq to convert and shouldn't be attempted anyway. - return type.IsEnumerableType() && type.GenericTypeArguments.Any() + return type.IsEnumerableType() && type.GenericTypeArguments.Length > 0 && type.GenericTypeArguments.Length == 1 && type.TryGetElementType(typeof(IDictionary<,>)) == null; } @@ -161,7 +155,7 @@ public static IEnumerable GetBaseTypes(this Type type) /// The type of the enumerable. public static Type GetEnumerableType(this Type type) { - List interfaces = type.GetInterfaces().ToList(); + var interfaces = type.GetInterfaces().ToList(); if (type.IsInterface && interfaces.All(i => i != type)) { interfaces.Add(type); diff --git a/src/ImageProcessor.Web/Extensions/TypeInitializationExtensions.cs b/src/ImageProcessor.Web/Extensions/TypeInitializationExtensions.cs index 298b5a878..7a1ea228e 100644 --- a/src/ImageProcessor.Web/Extensions/TypeInitializationExtensions.cs +++ b/src/ImageProcessor.Web/Extensions/TypeInitializationExtensions.cs @@ -43,10 +43,7 @@ public static object GetInstance(this Type type) /// The type on which the method was invoked. /// The argument to pass to the constructor. /// An instance of the given . - public static object GetInstance(this Type type, TArg argument) - { - return GetInstance(type, argument, null); - } + public static object GetInstance(this Type type, TArg argument) => GetInstance(type, argument, null); /// /// Returns an instance of the on which the method is invoked. @@ -57,10 +54,7 @@ public static object GetInstance(this Type type, TArg argument) /// The first argument to pass to the constructor. /// The second argument to pass to the constructor. /// An instance of the given . - public static object GetInstance(this Type type, TArg1 argument1, TArg2 argument2) - { - return GetInstance(type, argument1, argument2, null); - } + public static object GetInstance(this Type type, TArg1 argument1, TArg2 argument2) => GetInstance(type, argument1, argument2, null); /// /// Returns an instance of the on which the method is invoked. @@ -124,8 +118,7 @@ public static object CreateInstanceOf(Type type, TArg1 arg1, TArg2 arg2, TArg3 a private static void CacheInstanceCreationMethodIfRequired(Type type) { // Bail out if we've already cached the instance creation method: - Func cached; - if (InstanceCreationMethods.TryGetValue(type, out cached)) + if (InstanceCreationMethods.TryGetValue(type, out Func cached)) { return; } diff --git a/src/ImageProcessor.Web/Helpers/CommonParameterParserUtility.cs b/src/ImageProcessor.Web/Helpers/CommonParameterParserUtility.cs index 7bc94dbaf..ae86046d7 100644 --- a/src/ImageProcessor.Web/Helpers/CommonParameterParserUtility.cs +++ b/src/ImageProcessor.Web/Helpers/CommonParameterParserUtility.cs @@ -34,12 +34,12 @@ public static class CommonParameterParserUtility /// /// The regular expression to search strings for angles. /// - private static readonly Regex AngleRegex = new Regex(@"(^(rotate(bounded)?|angle)|[^.](&,)?rotate(bounded)?|angle)(=|-)[^&|,]+", RegexOptions.Compiled); + private static readonly Regex AngleRegex = new Regex("(^(rotate(bounded)?|angle)|[^.](&,)?rotate(bounded)?|angle)(=|-)[^&|,]+", RegexOptions.Compiled); /// /// The regular expression to search strings for values between 1 and 100. /// - private static readonly Regex In100RangeRegex = new Regex(@"(-?0*(?:100|[1-9][0-9]?))", RegexOptions.Compiled); + private static readonly Regex In100RangeRegex = new Regex("(-?0*(?:100|[1-9][0-9]?))", RegexOptions.Compiled); /// /// Returns the correct containing the angle for the given string. @@ -55,13 +55,12 @@ public static float ParseAngle(string input) foreach (Match match in AngleRegex.Matches(input)) { // Split on angle - float angle; string value = match.Value; - value = match.Value.ToUpperInvariant().Contains("ANGLE") + value = match.Value.IndexOf("ANGLE", StringComparison.InvariantCultureIgnoreCase) >= 0 ? value.Substring(value.IndexOf("-", StringComparison.Ordinal) + 1) : match.Value.Split('=')[1]; - float.TryParse(value, NumberStyles.Any, CultureInfo.InvariantCulture, out angle); + float.TryParse(value, NumberStyles.Any, CultureInfo.InvariantCulture, out float angle); return angle; } @@ -135,10 +134,10 @@ public static int ParseIn100Range(string input) /// private static Regex BuildColorRegex() { - StringBuilder stringBuilder = new StringBuilder(); + var stringBuilder = new StringBuilder(); stringBuilder.Append(@"(\d+,\d+,\d+,\d+|([0-9a-fA-F]{3}){1,2}|("); - KnownColor[] knownColors = (KnownColor[])Enum.GetValues(typeof(KnownColor)); + var knownColors = (KnownColor[])Enum.GetValues(typeof(KnownColor)); for (int i = 0; i < knownColors.Length; i++) { diff --git a/src/ImageProcessor.Web/Helpers/ImageHelpers.cs b/src/ImageProcessor.Web/Helpers/ImageHelpers.cs index 5b2159db9..d7bd9b649 100644 --- a/src/ImageProcessor.Web/Helpers/ImageHelpers.cs +++ b/src/ImageProcessor.Web/Helpers/ImageHelpers.cs @@ -78,10 +78,7 @@ public ImageHelpers() /// /// The string containing the filename to check. /// True the value contains a valid image extension, otherwise false. - public static bool IsValidImageExtension(string fileName) - { - return EndFormatRegex.IsMatch(fileName); - } + public static bool IsValidImageExtension(string fileName) => EndFormatRegex.IsMatch(fileName); /// /// Returns the correct file extension for the given string input. Falls back to jpg if no extension is matched. @@ -91,10 +88,7 @@ public static bool IsValidImageExtension(string fileName) /// /// The correct file extension for the given string input if it can find one; otherwise defaults to jpg. /// - public string GetExtension(string fullPath, string queryString) - { - return this.GetExtension(fullPath, queryString, "jpg"); - } + public string GetExtension(string fullPath, string queryString) => this.GetExtension(fullPath, queryString, "jpg"); /// /// Returns the correct file extension for the given string input. @@ -114,7 +108,7 @@ public string GetExtension(string fullPath, string queryString, string defaultEx match = this.formatProcessor.RegexPattern.Match(queryString); } - if (match == null || !match.Success) + if (match?.Success != true) { // Test against the path minus the querystring so any other // processors don't interere. @@ -138,7 +132,7 @@ public string GetExtension(string fullPath, string queryString, string defaultEx } // Ah the enigma that is the png file. - if (value.ToLowerInvariant().EndsWith("png8")) + if (value.EndsWith("png8", StringComparison.InvariantCultureIgnoreCase)) { return "png"; } @@ -185,7 +179,7 @@ internal string GetContentTypeForExtension(string extension) /// private static string BuildExtensionRegexPattern() { - StringBuilder stringBuilder = new StringBuilder(); + var stringBuilder = new StringBuilder(); stringBuilder.Append("("); int counter = 0; foreach (ISupportedImageFormat imageFormat in ImageProcessorBootstrapper.Instance.SupportedImageFormats) diff --git a/src/ImageProcessor.Web/Helpers/NativeMethods.cs b/src/ImageProcessor.Web/Helpers/NativeMethods.cs index 2255c8e01..f62a99588 100644 --- a/src/ImageProcessor.Web/Helpers/NativeMethods.cs +++ b/src/ImageProcessor.Web/Helpers/NativeMethods.cs @@ -16,7 +16,7 @@ namespace ImageProcessor.Web.Helpers /// /// Provides access to unmanaged native methods. /// - internal class NativeMethods + internal static class NativeMethods { /// /// Loads the specified module into the address space of the calling process. diff --git a/src/ImageProcessor.Web/Helpers/ResourceHelpers.cs b/src/ImageProcessor.Web/Helpers/ResourceHelpers.cs index 2b5c417f1..83f5c6287 100644 --- a/src/ImageProcessor.Web/Helpers/ResourceHelpers.cs +++ b/src/ImageProcessor.Web/Helpers/ResourceHelpers.cs @@ -16,12 +16,10 @@ namespace ImageProcessor.Web.Helpers using ImageProcessor.Web.Caching; - using Microsoft.IO; - /// /// Provides helper methods for working with resources. /// - public class ResourceHelpers + public static class ResourceHelpers { /// /// Converts an assembly resource into a string. diff --git a/src/ImageProcessor.Web/Helpers/UrlParser.cs b/src/ImageProcessor.Web/Helpers/UrlParser.cs index 09233b91e..11b23a949 100644 --- a/src/ImageProcessor.Web/Helpers/UrlParser.cs +++ b/src/ImageProcessor.Web/Helpers/UrlParser.cs @@ -20,7 +20,7 @@ namespace ImageProcessor.Web.Helpers /// /// A helper class for decoding and parsing request URLs. /// - public class UrlParser + public static class UrlParser { /// /// Parses the given URL adjusting the request path to a value that can then be interpreted by an image service. @@ -62,7 +62,7 @@ public static void ParseUrl(string url, string servicePrefix, out string request // Certain Facebook requests require ony the first part to be decoded. if (hasMultiParams) { - StringBuilder sb = new StringBuilder(requestPath); + var sb = new StringBuilder(requestPath); for (int i = 1; i < splitPath.Length - 1; i++) { sb.AppendFormat("?{0}", splitPath[i]); diff --git a/src/ImageProcessor.Web/Helpers/ValidatingRequestEventArgs.cs b/src/ImageProcessor.Web/Helpers/ValidatingRequestEventArgs.cs index 7971e18a9..85b3d2ae7 100644 --- a/src/ImageProcessor.Web/Helpers/ValidatingRequestEventArgs.cs +++ b/src/ImageProcessor.Web/Helpers/ValidatingRequestEventArgs.cs @@ -36,7 +36,7 @@ public ValidatingRequestEventArgs(HttpContextBase context, string queryString) /// /// Gets the current http context. /// - public HttpContextBase Context { get; private set; } + public HttpContextBase Context { get; } /// /// Gets or sets the query string diff --git a/src/ImageProcessor.Web/HttpModules/ImageProcessingModule.cs b/src/ImageProcessor.Web/HttpModules/ImageProcessingModule.cs index a85c2bd1e..eac002306 100644 --- a/src/ImageProcessor.Web/HttpModules/ImageProcessingModule.cs +++ b/src/ImageProcessor.Web/HttpModules/ImageProcessingModule.cs @@ -38,7 +38,6 @@ namespace ImageProcessor.Web.HttpModules /// public class ImageProcessingModule : IHttpModule { - #region Fields /// /// The key for storing the response type of the current image. /// @@ -52,7 +51,7 @@ public class ImageProcessingModule : IHttpModule /// /// The regular expression to search strings for presets with. /// - private static readonly Regex PresetRegex = new Regex(@"preset=[^&]+", RegexOptions.Compiled); + private static readonly Regex PresetRegex = new Regex("preset=[^&]+", RegexOptions.Compiled); /// /// The regular expression to search strings for protocols with. @@ -117,9 +116,7 @@ public class ImageProcessingModule : IHttpModule /// The image cache. /// private IImageCache imageCache; - #endregion - #region Destructors /// /// Finalizes an instance of the class. /// @@ -137,7 +134,6 @@ public class ImageProcessingModule : IHttpModule // readability and maintainability. this.Dispose(false); } - #endregion /// /// The process querystring event handler. DO NOT USE! @@ -163,15 +159,6 @@ public class ImageProcessingModule : IHttpModule /// public static event EventHandler OnPostProcessing; - /// - /// The event that is called when a querystring is processed. DO NOT USE! - /// - [Obsolete("Use ValidatingRequest instead")] - [EditorBrowsable(EditorBrowsableState.Never)] -#pragma warning disable 618 - public static event ProcessQuerystringEventHandler OnProcessQuerystring; -#pragma warning restore 618 - /// /// This will make the browser and server keep the output /// in its cache and thereby improve performance. @@ -274,7 +261,7 @@ public static void AddCorsRequestHeaders(HttpContext context) bool validUrl = false; foreach (ImageSecuritySection.SafeUrl safeUrl in origins.WhiteList) { - var uri = safeUrl.Url; + Uri uri = safeUrl.Url; if (uri.ToString() == "*") { @@ -284,7 +271,7 @@ public static void AddCorsRequestHeaders(HttpContext context) if (!uri.IsAbsoluteUri) { - Uri rebaseUri = new Uri($"http://{uri.ToString().TrimStart('.', '/')}"); + var rebaseUri = new Uri($"http://{uri.ToString().TrimStart('.', '/')}"); validUrl = upper.StartsWith(rebaseUri.Host.ToUpperInvariant()) || upper.EndsWith(rebaseUri.Host.ToUpperInvariant()); } else @@ -304,16 +291,15 @@ public static void AddCorsRequestHeaders(HttpContext context) } } - #region IHttpModule Members /// /// Initializes a module and prepares it to handle requests. /// - /// + /// /// An that provides /// access to the methods, properties, and events common to all /// application objects within an ASP.NET application /// - public void Init(HttpApplication application) + public void Init(HttpApplication context) { if (preserveExifMetaData == null) { @@ -340,11 +326,11 @@ public void Init(HttpApplication application) interceptAllRequests = ImageProcessorConfiguration.Instance.InterceptAllRequests; } - EventHandlerTaskAsyncHelper postAuthorizeHelper = new EventHandlerTaskAsyncHelper(this.PostAuthorizeRequest); - application.AddOnPostAuthorizeRequestAsync(postAuthorizeHelper.BeginEventHandler, postAuthorizeHelper.EndEventHandler); + var postAuthorizeHelper = new EventHandlerTaskAsyncHelper(this.PostAuthorizeRequest); + context.AddOnPostAuthorizeRequestAsync(postAuthorizeHelper.BeginEventHandler, postAuthorizeHelper.EndEventHandler); - application.PostReleaseRequestState += this.PostReleaseRequestState; - application.EndRequest += this.OnEndRequest; + context.PostReleaseRequestState += this.PostReleaseRequestState; + context.EndRequest += this.OnEndRequest; } /// @@ -387,10 +373,7 @@ protected virtual Task PostAuthorizeRequest(object sender, EventArgs e) /// /// The . /// - protected virtual string GetRequestUrl(HttpRequest request) - { - return request.Unvalidated.RawUrl; - } + protected virtual string GetRequestUrl(HttpRequest request) => request.Unvalidated.RawUrl; /// /// Disposes the object and frees resources for the Garbage Collector. @@ -415,7 +398,6 @@ private void Dispose(bool disposing) // Note disposing is done. this.isDisposed = true; } - #endregion /// /// Occurs when the ASP.NET event handler finishes execution. @@ -453,7 +435,6 @@ private void PostReleaseRequestState(object sender, EventArgs e) } } - #region Private /// /// Processes the image. /// @@ -470,7 +451,7 @@ private async Task ProcessImageAsync(HttpContext context) string rawUrl = this.GetRequestUrl(request); // Should we ignore this request? - if (string.IsNullOrWhiteSpace(rawUrl) || rawUrl.ToUpperInvariant().Contains("IPIGNORE=TRUE")) + if (string.IsNullOrWhiteSpace(rawUrl) || rawUrl.IndexOf("IPIGNORE=TRUE", StringComparison.InvariantCultureIgnoreCase) >= 0) { return; } @@ -493,16 +474,10 @@ private async Task ProcessImageAsync(HttpContext context) // Replace any presets in the querystring with the actual value. queryString = this.ReplacePresetsInQueryString(queryString); - HttpContextWrapper httpContextBase = new HttpContextWrapper(context); + var httpContextBase = new HttpContextWrapper(context); // Execute the handler which can change the querystring - // LEGACY: -#pragma warning disable 618 - queryString = this.CheckQuerystringHandler(context, queryString, rawUrl); -#pragma warning restore 618 - - // NEW WAY: - ValidatingRequestEventArgs validatingArgs = new ValidatingRequestEventArgs(httpContextBase, queryString); + var validatingArgs = new ValidatingRequestEventArgs(httpContextBase, queryString); this.OnValidatingRequest(validatingArgs); // If the validation has failed based on events, return @@ -567,7 +542,7 @@ private async Task ProcessImageAsync(HttpContext context) mode = this.ParseAnimationMode(queryString, out bool processAnimation); // Are we processing or cache busting? - processing = processors != null && (processors.Any() || processAnimation); + processing = processors != null && (processors.Length > 0 || processAnimation); bool cacheBusting = this.ParseCacheBuster(queryString); if (!processing && !cacheBusting) { @@ -627,14 +602,15 @@ private async Task ProcessImageAsync(HttpContext context) MetaDataMode metaMode = !exif ? MetaDataMode.None : metaDataMode.Value; bool gamma = fixGamma != null && fixGamma.Value; - try { + try + { using (var imageFactory = new ImageFactory(metaMode, gamma) { AnimationProcessMode = mode }) { imageFactory.Load(inStream).AutoProcess(processors).Save(outStream); mimeType = imageFactory.CurrentImageFormat.MimeType; } } - catch(ImageFormatException) + catch (ImageFormatException) { ImageProcessorBootstrapper.Instance.Logger.Log($"Request {url} is not a valid image."); return; @@ -659,7 +635,7 @@ private async Task ProcessImageAsync(HttpContext context) if (handler != null) { string extension = Path.GetExtension(cachedPath); - PostProcessingEventArgs args = new PostProcessingEventArgs + var args = new PostProcessingEventArgs { Context = context, ImageStream = outStream, @@ -731,14 +707,9 @@ private async Task ProcessImageAsync(HttpContext context) private bool ParseCacheBuster(string queryString) { NameValueCollection queryCollection = HttpUtility.ParseQueryString(queryString); - if (allowCacheBuster != null && allowCacheBuster.Value + return allowCacheBuster != null && allowCacheBuster.Value && (queryCollection.AllKeys.Contains("v", StringComparer.InvariantCultureIgnoreCase) - || queryCollection.AllKeys.Contains("rnd", StringComparer.InvariantCultureIgnoreCase))) - { - return true; - } - - return false; + || queryCollection.AllKeys.Contains("rnd", StringComparer.InvariantCultureIgnoreCase)); } /// @@ -805,38 +776,7 @@ private string ReplacePresetsInQueryString(string queryString) /// Raises the ValidatingRequest event /// /// The - private void OnValidatingRequest(ValidatingRequestEventArgs args) - { - ValidatingRequest?.Invoke(this, args); - } - - /// - /// Checks if there is a handler that changes the querystring and executes that handler. - /// - /// The current request context. - /// The query string. - /// The raw request url. - /// - /// The containing the updated querystring. - /// - [Obsolete("This is here for legacy reasons, use the OnValidatingRequest method instead")] - private string CheckQuerystringHandler(HttpContext context, string queryString, string rawUrl) - { - // Fire the process querystring event. - ProcessQuerystringEventHandler handler = OnProcessQuerystring; - if (handler != null) - { - ProcessQueryStringEventArgs args = new ProcessQueryStringEventArgs - { - Context = context, - Querystring = queryString ?? string.Empty, - RawUrl = rawUrl ?? string.Empty - }; - queryString = handler(this, args); - } - - return queryString; - } + private void OnValidatingRequest(ValidatingRequestEventArgs args) => ValidatingRequest?.Invoke(this, args); /// /// Gets the correct for the given request. @@ -875,6 +815,5 @@ private IImageService GetImageServiceForRequest(string url, string applicationPa // Return the next unprefixed service. return services.FirstOrDefault(s => string.IsNullOrWhiteSpace(s.Prefix) && s.IsValidRequest(path) && s.GetType() != typeof(LocalFileImageService)); } - #endregion } } \ No newline at end of file diff --git a/src/ImageProcessor.Web/Processors/Alpha.cs b/src/ImageProcessor.Web/Processors/Alpha.cs index 250e2ca11..d24eeaab4 100644 --- a/src/ImageProcessor.Web/Processors/Alpha.cs +++ b/src/ImageProcessor.Web/Processors/Alpha.cs @@ -31,10 +31,7 @@ public class Alpha : IWebGraphicsProcessor /// /// Initializes a new instance of the class. /// - public Alpha() - { - this.Processor = new ImageProcessor.Processors.Alpha(); - } + public Alpha() => this.Processor = new ImageProcessor.Processors.Alpha(); /// /// Gets the regular expression to search strings for. diff --git a/src/ImageProcessor.Web/Processors/AutoRotate.cs b/src/ImageProcessor.Web/Processors/AutoRotate.cs index f24bcb6a3..a17eca23c 100644 --- a/src/ImageProcessor.Web/Processors/AutoRotate.cs +++ b/src/ImageProcessor.Web/Processors/AutoRotate.cs @@ -23,15 +23,12 @@ public class AutoRotate : IWebGraphicsProcessor /// /// The regular expression to search strings for. /// - private static readonly Regex QueryRegex = new Regex(@"autorotate=true", RegexOptions.Compiled); + private static readonly Regex QueryRegex = new Regex("autorotate=true", RegexOptions.Compiled); /// /// Initializes a new instance of the class. /// - public AutoRotate() - { - this.Processor = new ImageProcessor.Processors.AutoRotate(); - } + public AutoRotate() => this.Processor = new ImageProcessor.Processors.AutoRotate(); /// /// Gets the regular expression to search strings for. diff --git a/src/ImageProcessor.Web/Processors/Background.cs b/src/ImageProcessor.Web/Processors/Background.cs index f93312efe..8a434fb71 100644 --- a/src/ImageProcessor.Web/Processors/Background.cs +++ b/src/ImageProcessor.Web/Processors/Background.cs @@ -37,10 +37,7 @@ public class Background : IWebGraphicsProcessor /// /// Initializes a new instance of the class. /// - public Background() - { - this.Processor = new ImageProcessor.Processors.Background(); - } + public Background() => this.Processor = new ImageProcessor.Processors.Background(); /// /// Gets the regular expression to search strings for. @@ -77,8 +74,8 @@ public int MatchRegexIndex(string queryString) Point? position = queryCollection["background.position"] != null ? QueryParamParser.Instance.ParseValue(queryCollection["background.position"]) - : (Point?)null; - + : (Point?)null; + int opacity = queryCollection["background.opacity"] != null ? QueryParamParser.Instance.ParseValue(queryCollection["background.opacity"]) : 100; @@ -110,8 +107,7 @@ public Image ParseImage(string input) Image image = null; // Correctly parse the path. - string path; - this.Processor.Settings.TryGetValue("VirtualPath", out path); + this.Processor.Settings.TryGetValue("VirtualPath", out string path); if (!string.IsNullOrWhiteSpace(path) && path.StartsWith("~/")) { @@ -121,7 +117,7 @@ public Image ParseImage(string input) imagePath = Path.Combine(imagePath, input); try { - using (ImageFactory factory = new ImageFactory()) + using (var factory = new ImageFactory()) { factory.Load(imagePath); image = new Bitmap(factory.Image); diff --git a/src/ImageProcessor.Web/Processors/BackgroundColor.cs b/src/ImageProcessor.Web/Processors/BackgroundColor.cs index b11272463..3e2a47c75 100644 --- a/src/ImageProcessor.Web/Processors/BackgroundColor.cs +++ b/src/ImageProcessor.Web/Processors/BackgroundColor.cs @@ -26,15 +26,12 @@ public class BackgroundColor : IWebGraphicsProcessor /// /// The regular expression to search strings for. /// - private static readonly Regex QueryRegex = new Regex(@"bgcolor=[^&]", RegexOptions.Compiled); + private static readonly Regex QueryRegex = new Regex("bgcolor=[^&]", RegexOptions.Compiled); /// /// Initializes a new instance of the class. /// - public BackgroundColor() - { - this.Processor = new ImageProcessor.Processors.BackgroundColor(); - } + public BackgroundColor() => this.Processor = new ImageProcessor.Processors.BackgroundColor(); /// /// Gets the regular expression to search strings for. @@ -67,8 +64,7 @@ public int MatchRegexIndex(string queryString) { this.SortOrder = match.Index; NameValueCollection queryCollection = HttpUtility.ParseQueryString(queryString); - Color color = QueryParamParser.Instance.ParseValue(queryCollection["bgcolor"]); - this.Processor.DynamicParameter = color; + this.Processor.DynamicParameter = (Color)QueryParamParser.Instance.ParseValue(queryCollection["bgcolor"]); } return this.SortOrder; diff --git a/src/ImageProcessor.Web/Processors/Brightness.cs b/src/ImageProcessor.Web/Processors/Brightness.cs index 4645f21bc..e29a65425 100644 --- a/src/ImageProcessor.Web/Processors/Brightness.cs +++ b/src/ImageProcessor.Web/Processors/Brightness.cs @@ -31,10 +31,7 @@ public class Brightness : IWebGraphicsProcessor /// /// Initializes a new instance of the class. /// - public Brightness() - { - this.Processor = new ImageProcessor.Processors.Brightness(); - } + public Brightness() => this.Processor = new ImageProcessor.Processors.Brightness(); /// /// Gets the regular expression to search strings for. diff --git a/src/ImageProcessor.Web/Processors/Contrast.cs b/src/ImageProcessor.Web/Processors/Contrast.cs index 13e0816b7..b21032624 100644 --- a/src/ImageProcessor.Web/Processors/Contrast.cs +++ b/src/ImageProcessor.Web/Processors/Contrast.cs @@ -31,10 +31,7 @@ public class Contrast : IWebGraphicsProcessor /// /// Initializes a new instance of the class. /// - public Contrast() - { - this.Processor = new ImageProcessor.Processors.Contrast(); - } + public Contrast() => this.Processor = new ImageProcessor.Processors.Contrast(); /// /// Gets the regular expression to search strings for. diff --git a/src/ImageProcessor.Web/Processors/Crop.cs b/src/ImageProcessor.Web/Processors/Crop.cs index a245e8623..4d0572a16 100644 --- a/src/ImageProcessor.Web/Processors/Crop.cs +++ b/src/ImageProcessor.Web/Processors/Crop.cs @@ -31,10 +31,7 @@ public class Crop : IWebGraphicsProcessor /// /// Initializes a new instance of the class. /// - public Crop() - { - this.Processor = new ImageProcessor.Processors.Crop(); - } + public Crop() => this.Processor = new ImageProcessor.Processors.Crop(); /// /// Gets the regular expression to search strings for. @@ -73,8 +70,7 @@ public int MatchRegexIndex(string queryString) // Default CropMode.Pixels will be returned. CropMode cropMode = QueryParamParser.Instance.ParseValue(queryCollection["cropmode"]); - CropLayer cropLayer = new CropLayer(coordinates[0], coordinates[1], coordinates[2], coordinates[3], cropMode); - this.Processor.DynamicParameter = cropLayer; + this.Processor.DynamicParameter = (CropLayer)new CropLayer(coordinates[0], coordinates[1], coordinates[2], coordinates[3], cropMode); } return this.SortOrder; diff --git a/src/ImageProcessor.Web/Processors/DetectEdges.cs b/src/ImageProcessor.Web/Processors/DetectEdges.cs index e26b8cfa3..36d64c7a9 100644 --- a/src/ImageProcessor.Web/Processors/DetectEdges.cs +++ b/src/ImageProcessor.Web/Processors/DetectEdges.cs @@ -43,10 +43,7 @@ public class DetectEdges : IWebGraphicsProcessor /// /// Initializes a new instance of the class. /// - public DetectEdges() - { - this.Processor = new ImageProcessor.Processors.DetectEdges(); - } + public DetectEdges() => this.Processor = new ImageProcessor.Processors.DetectEdges(); /// /// Gets the regular expression to search strings for. @@ -84,7 +81,7 @@ public int MatchRegexIndex(string queryString) { this.SortOrder = match.Index; NameValueCollection queryCollection = HttpUtility.ParseQueryString(queryString); - IEdgeFilter filter = (IEdgeFilter)detectors[QueryParamParser.Instance.ParseValue(queryCollection["detectedges"])]; + var filter = (IEdgeFilter)detectors[QueryParamParser.Instance.ParseValue(queryCollection["detectedges"])]; bool greyscale = QueryParamParser.Instance.ParseValue(queryCollection["greyscale"]); this.Processor.DynamicParameter = new Tuple(filter, greyscale); } @@ -100,7 +97,7 @@ public int MatchRegexIndex(string queryString) /// private static Regex BuildRegex() { - StringBuilder stringBuilder = new StringBuilder(); + var stringBuilder = new StringBuilder(); stringBuilder.Append("detectedges=("); diff --git a/src/ImageProcessor.Web/Processors/EntropyCrop.cs b/src/ImageProcessor.Web/Processors/EntropyCrop.cs index 2bc7c38d1..28d11c424 100644 --- a/src/ImageProcessor.Web/Processors/EntropyCrop.cs +++ b/src/ImageProcessor.Web/Processors/EntropyCrop.cs @@ -25,15 +25,12 @@ public class EntropyCrop : IWebGraphicsProcessor /// /// The regular expression to search strings for. /// - private static readonly Regex QueryRegex = new Regex(@"entropycrop(=)?[^&]*", RegexOptions.Compiled); + private static readonly Regex QueryRegex = new Regex("entropycrop(=)?[^&]*", RegexOptions.Compiled); /// /// Initializes a new instance of the class. /// - public EntropyCrop() - { - this.Processor = new ImageProcessor.Processors.EntropyCrop(); - } + public EntropyCrop() => this.Processor = new ImageProcessor.Processors.EntropyCrop(); /// /// Gets the regular expression to search strings for. @@ -70,7 +67,7 @@ public int MatchRegexIndex(string queryString) byte threshold = QueryParamParser.Instance.ParseValue(queryCollection["entropycrop"]); // Fallback to the default if 0. - this.Processor.DynamicParameter = threshold > 0 ? threshold : (byte)128; + this.Processor.DynamicParameter = threshold > 0 ? threshold : 128; } return this.SortOrder; diff --git a/src/ImageProcessor.Web/Processors/Filter.cs b/src/ImageProcessor.Web/Processors/Filter.cs index d175621b2..3338e0fd4 100644 --- a/src/ImageProcessor.Web/Processors/Filter.cs +++ b/src/ImageProcessor.Web/Processors/Filter.cs @@ -39,10 +39,7 @@ private static readonly ConcurrentDictionary FilterCache /// /// Initializes a new instance of the class. /// - public Filter() - { - this.Processor = new ImageProcessor.Processors.Filter(); - } + public Filter() => this.Processor = new ImageProcessor.Processors.Filter(); /// /// Gets the regular expression to search strings for. @@ -99,7 +96,7 @@ private static Regex BuildRegex() .Where(p => p.PropertyType.IsAssignableFrom(typeof(IMatrixFilter))) .ToList(); - StringBuilder stringBuilder = new StringBuilder(); + var stringBuilder = new StringBuilder(); stringBuilder.Append("filter=("); int counter = 0; @@ -142,7 +139,7 @@ private IMatrixFilter ParseFilter(string identifier) PropertyInfo filter = type.GetProperties(Flags) .Where(p => p.PropertyType.IsAssignableFrom(typeof(IMatrixFilter))) - .First(p => p.Name.Equals(identifier, StringComparison.InvariantCultureIgnoreCase)); + .First(p => p.Name.Equals(f, StringComparison.InvariantCultureIgnoreCase)); return filter.GetValue(null, null) as IMatrixFilter; }); diff --git a/src/ImageProcessor.Web/Processors/Flip.cs b/src/ImageProcessor.Web/Processors/Flip.cs index f5b5a7d32..2f7e7fb8f 100644 --- a/src/ImageProcessor.Web/Processors/Flip.cs +++ b/src/ImageProcessor.Web/Processors/Flip.cs @@ -22,15 +22,12 @@ public class Flip : IWebGraphicsProcessor /// /// The regular expression to search strings for. /// - private static readonly Regex QueryRegex = new Regex(@"flip=(horizontal|vertical|both)", RegexOptions.Compiled); + private static readonly Regex QueryRegex = new Regex("flip=(horizontal|vertical|both)", RegexOptions.Compiled); /// /// Initializes a new instance of the class. /// - public Flip() - { - this.Processor = new ImageProcessor.Processors.Flip(); - } + public Flip() => this.Processor = new ImageProcessor.Processors.Flip(); /// /// Gets the regular expression to search strings for. @@ -66,9 +63,7 @@ public int MatchRegexIndex(string queryString) this.SortOrder = match.Index; // We do not use the full enum so use switch. - string direction = match.Value.Split('=')[1]; - - switch (direction) + switch (match.Value.Split('=')[1]) { case "horizontal": this.Processor.DynamicParameter = RotateFlipType.RotateNoneFlipX; diff --git a/src/ImageProcessor.Web/Processors/Format.cs b/src/ImageProcessor.Web/Processors/Format.cs index 9ec797fc2..7995cfc5f 100644 --- a/src/ImageProcessor.Web/Processors/Format.cs +++ b/src/ImageProcessor.Web/Processors/Format.cs @@ -11,7 +11,6 @@ namespace ImageProcessor.Web.Processors { using System; - using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.RegularExpressions; @@ -33,10 +32,7 @@ public class Format : IWebGraphicsProcessor /// /// Initializes a new instance of the class. /// - public Format() - { - this.Processor = new ImageProcessor.Processors.Format(); - } + public Format() => this.Processor = new ImageProcessor.Processors.Format(); /// /// Gets the regular expression to search strings for. @@ -88,7 +84,7 @@ public int MatchRegexIndex(string queryString) /// private static Regex BuildRegex() { - StringBuilder stringBuilder = new StringBuilder(); + var stringBuilder = new StringBuilder(); // png8 is a special case for determining indexed png's. stringBuilder.Append("format=(png8"); @@ -119,8 +115,8 @@ private ISupportedImageFormat ParseFormat(string identifier) identifier = identifier.ToLowerInvariant(); string finalIdentifier = identifier.Equals("png8") ? "png" : identifier; ISupportedImageFormat newFormat = null; - List formats = ImageProcessorBootstrapper.Instance.SupportedImageFormats.ToList(); - ISupportedImageFormat format = formats.FirstOrDefault(f => f.FileExtensions.Any(e => e.Equals(finalIdentifier, StringComparison.InvariantCultureIgnoreCase))); + var formats = ImageProcessorBootstrapper.Instance.SupportedImageFormats.ToList(); + ISupportedImageFormat format = formats.Find(f => f.FileExtensions.Any(e => e.Equals(finalIdentifier, StringComparison.InvariantCultureIgnoreCase))); if (format != null) { diff --git a/src/ImageProcessor.Web/Processors/Gamma.cs b/src/ImageProcessor.Web/Processors/Gamma.cs index c7e3e1515..0494e6127 100644 --- a/src/ImageProcessor.Web/Processors/Gamma.cs +++ b/src/ImageProcessor.Web/Processors/Gamma.cs @@ -25,15 +25,12 @@ public class Gamma : IWebGraphicsProcessor /// /// The regular expression to search strings for. /// - private static readonly Regex QueryRegex = new Regex(@"gamma=[^&]", RegexOptions.Compiled); + private static readonly Regex QueryRegex = new Regex("gamma=[^&]", RegexOptions.Compiled); /// /// Initializes a new instance of the class. /// - public Gamma() - { - this.Processor = new ImageProcessor.Processors.Gamma(); - } + public Gamma() => this.Processor = new ImageProcessor.Processors.Gamma(); /// /// Gets the regular expression to search strings for. diff --git a/src/ImageProcessor.Web/Processors/GaussianBlur.cs b/src/ImageProcessor.Web/Processors/GaussianBlur.cs index 2a7e0d0eb..f1ed39c9a 100644 --- a/src/ImageProcessor.Web/Processors/GaussianBlur.cs +++ b/src/ImageProcessor.Web/Processors/GaussianBlur.cs @@ -33,10 +33,7 @@ public class GaussianBlur : IWebGraphicsProcessor /// /// Initializes a new instance of the class. /// - public GaussianBlur() - { - this.Processor = new ImageProcessor.Processors.GaussianBlur(); - } + public GaussianBlur() => this.Processor = new ImageProcessor.Processors.GaussianBlur(); /// /// Gets the regular expression to search strings for. @@ -70,13 +67,9 @@ public int MatchRegexIndex(string queryString) { this.SortOrder = match.Index; - int maxSize; - double maxSigma; - int maxThreshold; - - int.TryParse(this.Processor.Settings["MaxSize"], NumberStyles.Any, CultureInfo.InvariantCulture, out maxSize); - double.TryParse(this.Processor.Settings["MaxSigma"], NumberStyles.Any, CultureInfo.InvariantCulture, out maxSigma); - int.TryParse(this.Processor.Settings["MaxThreshold"], NumberStyles.Any, CultureInfo.InvariantCulture, out maxThreshold); + int.TryParse(this.Processor.Settings["MaxSize"], NumberStyles.Any, CultureInfo.InvariantCulture, out int maxSize); + double.TryParse(this.Processor.Settings["MaxSigma"], NumberStyles.Any, CultureInfo.InvariantCulture, out double maxSigma); + int.TryParse(this.Processor.Settings["MaxThreshold"], NumberStyles.Any, CultureInfo.InvariantCulture, out int maxThreshold); NameValueCollection queryCollection = HttpUtility.ParseQueryString(queryString); int size = QueryParamParser.Instance.ParseValue(queryCollection["blur"]); diff --git a/src/ImageProcessor.Web/Processors/GaussianSharpen.cs b/src/ImageProcessor.Web/Processors/GaussianSharpen.cs index 10208a76a..cbaec9c37 100644 --- a/src/ImageProcessor.Web/Processors/GaussianSharpen.cs +++ b/src/ImageProcessor.Web/Processors/GaussianSharpen.cs @@ -33,10 +33,7 @@ public class GaussianSharpen : IWebGraphicsProcessor /// /// Initializes a new instance of the class. /// - public GaussianSharpen() - { - this.Processor = new ImageProcessor.Processors.GaussianSharpen(); - } + public GaussianSharpen() => this.Processor = new ImageProcessor.Processors.GaussianSharpen(); /// /// Gets the regular expression to search strings for. @@ -70,13 +67,9 @@ public int MatchRegexIndex(string queryString) { this.SortOrder = match.Index; - int maxSize; - double maxSigma; - int maxThreshold; - - int.TryParse(this.Processor.Settings["MaxSize"], NumberStyles.Any, CultureInfo.InvariantCulture, out maxSize); - double.TryParse(this.Processor.Settings["MaxSigma"], NumberStyles.Any, CultureInfo.InvariantCulture, out maxSigma); - int.TryParse(this.Processor.Settings["MaxThreshold"], NumberStyles.Any, CultureInfo.InvariantCulture, out maxThreshold); + int.TryParse(this.Processor.Settings["MaxSize"], NumberStyles.Any, CultureInfo.InvariantCulture, out int maxSize); + double.TryParse(this.Processor.Settings["MaxSigma"], NumberStyles.Any, CultureInfo.InvariantCulture, out double maxSigma); + int.TryParse(this.Processor.Settings["MaxThreshold"], NumberStyles.Any, CultureInfo.InvariantCulture, out int maxThreshold); NameValueCollection queryCollection = HttpUtility.ParseQueryString(queryString); int size = QueryParamParser.Instance.ParseValue(queryCollection["sharpen"]); diff --git a/src/ImageProcessor.Web/Processors/Halftone.cs b/src/ImageProcessor.Web/Processors/Halftone.cs index afe4180b3..7d42c3b39 100644 --- a/src/ImageProcessor.Web/Processors/Halftone.cs +++ b/src/ImageProcessor.Web/Processors/Halftone.cs @@ -22,15 +22,12 @@ public class Halftone : IWebGraphicsProcessor /// /// The regular expression to search strings for. /// - private static readonly Regex QueryRegex = new Regex(@"halftone(=comic)?", RegexOptions.Compiled); + private static readonly Regex QueryRegex = new Regex("halftone(=comic)?", RegexOptions.Compiled); /// /// Initializes a new instance of the class. /// - public Halftone() - { - this.Processor = new ImageProcessor.Processors.Halftone(); - } + public Halftone() => this.Processor = new ImageProcessor.Processors.Halftone(); /// /// Gets the regular expression to search strings for. @@ -62,8 +59,7 @@ public int MatchRegexIndex(string queryString) if (match.Success) { this.SortOrder = match.Index; - bool comicMode = match.Value.Contains("comic"); - this.Processor.DynamicParameter = comicMode; + this.Processor.DynamicParameter = (bool)match.Value.Contains("comic"); } return this.SortOrder; diff --git a/src/ImageProcessor.Web/Processors/Hue.cs b/src/ImageProcessor.Web/Processors/Hue.cs index 563e2c2f8..ed03234a0 100644 --- a/src/ImageProcessor.Web/Processors/Hue.cs +++ b/src/ImageProcessor.Web/Processors/Hue.cs @@ -32,10 +32,7 @@ public class Hue : IWebGraphicsProcessor /// /// Initializes a new instance of the class. /// - public Hue() - { - this.Processor = new ImageProcessor.Processors.Hue(); - } + public Hue() => this.Processor = new ImageProcessor.Processors.Hue(); /// /// Gets the regular expression to search strings for. diff --git a/src/ImageProcessor.Web/Processors/IWebGraphicsProcessor.cs b/src/ImageProcessor.Web/Processors/IWebGraphicsProcessor.cs index 4553f4c27..837bbdb62 100644 --- a/src/ImageProcessor.Web/Processors/IWebGraphicsProcessor.cs +++ b/src/ImageProcessor.Web/Processors/IWebGraphicsProcessor.cs @@ -18,7 +18,6 @@ namespace ImageProcessor.Web.Processors /// public interface IWebGraphicsProcessor { - #region Properties /// /// Gets the regular expression to search strings for. /// @@ -33,19 +32,14 @@ public interface IWebGraphicsProcessor /// Gets the associated graphics processor. /// IGraphicsProcessor Processor { get; } - #endregion - #region Methods /// /// The position in the original string where the first character of the captured substring was found. /// - /// - /// The query string to search. - /// + /// The query string to search. /// /// The zero-based starting position in the original string where the captured substring was found. /// int MatchRegexIndex(string queryString); - #endregion } } diff --git a/src/ImageProcessor.Web/Processors/Mask.cs b/src/ImageProcessor.Web/Processors/Mask.cs index edf5e27f2..6a15e95d3 100644 --- a/src/ImageProcessor.Web/Processors/Mask.cs +++ b/src/ImageProcessor.Web/Processors/Mask.cs @@ -11,7 +11,6 @@ namespace ImageProcessor.Web.Processors { - using System; using System.Collections.Specialized; using System.Drawing; using System.IO; @@ -38,10 +37,7 @@ public class Mask : IWebGraphicsProcessor /// /// Initializes a new instance of the class. /// - public Mask() - { - this.Processor = new ImageProcessor.Processors.Mask(); - } + public Mask() => this.Processor = new ImageProcessor.Processors.Mask(); /// /// Gets the regular expression to search strings for. @@ -99,8 +95,7 @@ public Image ParseImage(string input) Image image = null; // Correctly parse the path. - string path; - this.Processor.Settings.TryGetValue("VirtualPath", out path); + this.Processor.Settings.TryGetValue("VirtualPath", out string path); if (!string.IsNullOrWhiteSpace(path) && path.StartsWith("~/")) { @@ -110,7 +105,7 @@ public Image ParseImage(string input) imagePath = Path.Combine(imagePath, input); try { - using (ImageFactory factory = new ImageFactory()) + using (var factory = new ImageFactory()) { factory.Load(imagePath); image = new Bitmap(factory.Image); diff --git a/src/ImageProcessor.Web/Processors/Meta.cs b/src/ImageProcessor.Web/Processors/Meta.cs index b99053f70..76543b1f6 100644 --- a/src/ImageProcessor.Web/Processors/Meta.cs +++ b/src/ImageProcessor.Web/Processors/Meta.cs @@ -21,15 +21,12 @@ public class Meta : IWebGraphicsProcessor /// /// The regular expression to search strings for. /// - private static readonly Regex QueryRegex = new Regex(@"meta=(true|false)", RegexOptions.Compiled); + private static readonly Regex QueryRegex = new Regex("meta=(true|false)", RegexOptions.Compiled); /// /// Initializes a new instance of the class. /// - public Meta() - { - this.Processor = new ImageProcessor.Processors.Meta(); - } + public Meta() => this.Processor = new ImageProcessor.Processors.Meta(); /// /// Gets the regular expression to search strings for. @@ -62,8 +59,7 @@ public int MatchRegexIndex(string queryString) if (match.Success) { this.SortOrder = match.Index; - bool preserve = bool.Parse(match.Value.Split('=')[1]); - this.Processor.DynamicParameter = preserve; + this.Processor.DynamicParameter = (bool)bool.Parse(match.Value.Split('=')[1]); } return this.SortOrder; diff --git a/src/ImageProcessor.Web/Processors/Overlay.cs b/src/ImageProcessor.Web/Processors/Overlay.cs index 4df69fbca..75dce6ea0 100644 --- a/src/ImageProcessor.Web/Processors/Overlay.cs +++ b/src/ImageProcessor.Web/Processors/Overlay.cs @@ -37,10 +37,7 @@ public class Overlay : IWebGraphicsProcessor /// /// Initializes a new instance of the class. /// - public Overlay() - { - this.Processor = new ImageProcessor.Processors.Overlay(); - } + public Overlay() => this.Processor = new ImageProcessor.Processors.Overlay(); /// /// Gets the regular expression to search strings for. @@ -77,8 +74,8 @@ public int MatchRegexIndex(string queryString) Point? position = queryCollection["overlay.position"] != null ? QueryParamParser.Instance.ParseValue(queryCollection["overlay.position"]) - : (Point?)null; - + : (Point?)null; + int opacity = queryCollection["overlay.opacity"] != null ? QueryParamParser.Instance.ParseValue(queryCollection["overlay.opacity"]) : 100; @@ -110,8 +107,7 @@ public Image ParseImage(string input) Image image = null; // Correctly parse the path. - string path; - this.Processor.Settings.TryGetValue("VirtualPath", out path); + this.Processor.Settings.TryGetValue("VirtualPath", out string path); if (!string.IsNullOrWhiteSpace(path) && path.StartsWith("~/")) { @@ -121,7 +117,7 @@ public Image ParseImage(string input) imagePath = Path.Combine(imagePath, input); try { - using (ImageFactory factory = new ImageFactory()) + using (var factory = new ImageFactory()) { factory.Load(imagePath); image = new Bitmap(factory.Image); diff --git a/src/ImageProcessor.Web/Processors/Pixelate.cs b/src/ImageProcessor.Web/Processors/Pixelate.cs index 5816bb389..4afd6237d 100644 --- a/src/ImageProcessor.Web/Processors/Pixelate.cs +++ b/src/ImageProcessor.Web/Processors/Pixelate.cs @@ -13,13 +13,10 @@ namespace ImageProcessor.Web.Processors using System; using System.Collections.Specialized; using System.Drawing; - using System.Globalization; - using System.Text; using System.Text.RegularExpressions; using System.Web; using ImageProcessor.Processors; - using ImageProcessor.Web.Extensions; using ImageProcessor.Web.Helpers; /// @@ -30,25 +27,12 @@ public class Pixelate : IWebGraphicsProcessor /// /// The regular expression to search strings for. /// - private static readonly Regex QueryRegex = new Regex(@"pixelate=[^&]", RegexOptions.Compiled); - - /// - /// The pixel regex. - /// - private static readonly Regex PixelRegex = new Regex(@"pixelate=\d+", RegexOptions.Compiled); - - /// - /// The rectangle regex. - /// - private static readonly Regex RectangleRegex = new Regex(@"pixelrect=\d+,\d+,\d+,\d+", RegexOptions.Compiled); + private static readonly Regex QueryRegex = new Regex("pixelate=[^&]", RegexOptions.Compiled); /// /// Initializes a new instance of the class. /// - public Pixelate() - { - this.Processor = new ImageProcessor.Processors.Pixelate(); - } + public Pixelate() => this.Processor = new ImageProcessor.Processors.Pixelate(); /// /// Gets the regular expression to search strings for. @@ -85,59 +69,12 @@ public int MatchRegexIndex(string queryString) Rectangle? rectangle = queryCollection["pixelrect"] != null ? QueryParamParser.Instance.ParseValue(queryCollection["pixelrect"]) - : (Rectangle?)null; + : (Rectangle?)null; this.Processor.DynamicParameter = new Tuple(size, rectangle); } return this.SortOrder; } - - /// - /// Returns the correct size of pixels. - /// - /// - /// The input containing the value to parse. - /// - /// - /// The representing the pixel size. - /// - public int ParseSize(string input) - { - int size = 0; - - foreach (Match match in PixelRegex.Matches(input)) - { - size = int.Parse(match.Value.Split('=')[1], CultureInfo.InvariantCulture); - } - - return size; - } - - /// - /// Returns the correct for the given string. - /// - /// - /// The input string containing the value to parse. - /// - /// - /// The correct - /// - private Rectangle? ParseRectangle(string input) - { - int[] dimensions = { }; - - foreach (Match match in RectangleRegex.Matches(input)) - { - dimensions = match.Value.ToPositiveIntegerArray(); - } - - if (dimensions.Length == 4) - { - return new Rectangle(dimensions[0], dimensions[1], dimensions[2], dimensions[3]); - } - - return null; - } } } diff --git a/src/ImageProcessor.Web/Processors/Quality.cs b/src/ImageProcessor.Web/Processors/Quality.cs index a1cd9ecf3..6098e673f 100644 --- a/src/ImageProcessor.Web/Processors/Quality.cs +++ b/src/ImageProcessor.Web/Processors/Quality.cs @@ -31,10 +31,7 @@ public class Quality : IWebGraphicsProcessor /// /// Initializes a new instance of the class. /// - public Quality() - { - this.Processor = new ImageProcessor.Processors.Quality(); - } + public Quality() => this.Processor = new ImageProcessor.Processors.Quality(); /// /// Gets the regular expression to search strings for. diff --git a/src/ImageProcessor.Web/Processors/ReplaceColor.cs b/src/ImageProcessor.Web/Processors/ReplaceColor.cs index 2f8265794..f5df52e96 100644 --- a/src/ImageProcessor.Web/Processors/ReplaceColor.cs +++ b/src/ImageProcessor.Web/Processors/ReplaceColor.cs @@ -28,15 +28,12 @@ public class ReplaceColor : IWebGraphicsProcessor /// /// The regular expression to search strings for. /// - private static readonly Regex QueryRegex = new Regex(@"replace=[^&]", RegexOptions.Compiled); + private static readonly Regex QueryRegex = new Regex("replace=[^&]", RegexOptions.Compiled); /// /// Initializes a new instance of the class. /// - public ReplaceColor() - { - this.Processor = new ImageProcessor.Processors.ReplaceColor(); - } + public ReplaceColor() => this.Processor = new ImageProcessor.Processors.ReplaceColor(); /// /// Gets the regular expression to search strings for. diff --git a/src/ImageProcessor.Web/Processors/Resize.cs b/src/ImageProcessor.Web/Processors/Resize.cs index 872919d6b..151d131ee 100644 --- a/src/ImageProcessor.Web/Processors/Resize.cs +++ b/src/ImageProcessor.Web/Processors/Resize.cs @@ -36,10 +36,7 @@ public class Resize : IWebGraphicsProcessor /// /// Initializes a new instance of the class. /// - public Resize() - { - this.Processor = new ImageProcessor.Processors.Resize(); - } + public Resize() => this.Processor = new ImageProcessor.Processors.Resize(); /// /// Gets the regular expression to search strings for. @@ -82,7 +79,7 @@ public int MatchRegexIndex(string queryString) ? QueryParamParser.Instance.ParseValue(queryCollection["center"]) : new float[] { }; - ResizeLayer resizeLayer = new ResizeLayer(size) + this.Processor.DynamicParameter = (ResizeLayer)new ResizeLayer(size) { ResizeMode = mode, AnchorPosition = position, @@ -90,15 +87,12 @@ public int MatchRegexIndex(string queryString) CenterCoordinates = center }; - this.Processor.DynamicParameter = resizeLayer; - // Correctly parse any restrictions. - string restrictions; - this.Processor.Settings.TryGetValue("RestrictTo", out restrictions); + this.Processor.Settings.TryGetValue("RestrictTo", out string restrictions); List restrictedSizes = this.ParseRestrictions(restrictions); - if (restrictedSizes != null && restrictedSizes.Any()) + if (restrictedSizes?.Count > 0) { bool reject = true; foreach (Size restrictedSize in restrictedSizes) @@ -143,7 +137,7 @@ private Size ParseSize(NameValueCollection queryCollection) string height = queryCollection["height"]; string widthRatio = queryCollection["widthratio"]; string heightRatio = queryCollection["heightratio"]; - Size size = new Size(); + var size = new Size(); // Umbraco calls the API incorrectly so we have to deal with floats. // We round up so that single pixel lines are not produced. @@ -202,7 +196,7 @@ private Size ParseSize(NameValueCollection queryCollection) /// private List ParseRestrictions(string input) { - List sizes = new List(); + var sizes = new List(); if (!string.IsNullOrWhiteSpace(input)) { diff --git a/src/ImageProcessor.Web/Processors/Rotate.cs b/src/ImageProcessor.Web/Processors/Rotate.cs index ebaacaa7f..1646a6e82 100644 --- a/src/ImageProcessor.Web/Processors/Rotate.cs +++ b/src/ImageProcessor.Web/Processors/Rotate.cs @@ -25,15 +25,12 @@ public class Rotate : IWebGraphicsProcessor /// /// The regular expression to search strings for. /// - private static readonly Regex QueryRegex = new Regex(@"rotate=[^&]", RegexOptions.Compiled); + private static readonly Regex QueryRegex = new Regex("rotate=[^&]", RegexOptions.Compiled); /// /// Initializes a new instance of the class. /// - public Rotate() - { - this.Processor = new ImageProcessor.Processors.Rotate(); - } + public Rotate() => this.Processor = new ImageProcessor.Processors.Rotate(); /// /// Gets the regular expression to search strings for. diff --git a/src/ImageProcessor.Web/Processors/RotateBounded.cs b/src/ImageProcessor.Web/Processors/RotateBounded.cs index 6bff98be9..bc03703b2 100644 --- a/src/ImageProcessor.Web/Processors/RotateBounded.cs +++ b/src/ImageProcessor.Web/Processors/RotateBounded.cs @@ -26,20 +26,17 @@ public class RotateBounded : IWebGraphicsProcessor /// /// The regular expression to search strings for. /// - private static readonly Regex QueryRegex = new Regex(@"rotatebounded=[^&]", RegexOptions.Compiled); + private static readonly Regex QueryRegex = new Regex("rotatebounded=[^&]", RegexOptions.Compiled); /// /// The regular expression to search for. /// - private static readonly Regex BoundRegex = new Regex(@"rotatebounded.keepsize=true", RegexOptions.Compiled); + private static readonly Regex BoundRegex = new Regex("rotatebounded.keepsize=true", RegexOptions.Compiled); /// /// Initializes a new instance of the class. /// - public RotateBounded() - { - this.Processor = new ImageProcessor.Processors.RotateBounded(); - } + public RotateBounded() => this.Processor = new ImageProcessor.Processors.RotateBounded(); /// /// Gets the regular expression to search strings for. diff --git a/src/ImageProcessor.Web/Processors/RoundedCorners.cs b/src/ImageProcessor.Web/Processors/RoundedCorners.cs index d8f7fdf9b..24a47643b 100644 --- a/src/ImageProcessor.Web/Processors/RoundedCorners.cs +++ b/src/ImageProcessor.Web/Processors/RoundedCorners.cs @@ -31,10 +31,7 @@ public class RoundedCorners : IWebGraphicsProcessor /// /// Initializes a new instance of the class. /// - public RoundedCorners() - { - this.Processor = new ImageProcessor.Processors.RoundedCorners(); - } + public RoundedCorners() => this.Processor = new ImageProcessor.Processors.RoundedCorners(); /// /// Gets the regular expression to search strings for. @@ -68,14 +65,12 @@ public int MatchRegexIndex(string queryString) this.SortOrder = match.Index; NameValueCollection queryCollection = HttpUtility.ParseQueryString(queryString); - RoundedCornerLayer roundedCornerLayer = new RoundedCornerLayer( + this.Processor.DynamicParameter = (RoundedCornerLayer)new RoundedCornerLayer( QueryParamParser.Instance.ParseValue(queryCollection["roundedcorners"]), this.ParseCorner(queryCollection, "tl"), this.ParseCorner(queryCollection, "tr"), this.ParseCorner(queryCollection, "bl"), this.ParseCorner(queryCollection, "br")); - - this.Processor.DynamicParameter = roundedCornerLayer; } return this.SortOrder; @@ -93,9 +88,6 @@ public int MatchRegexIndex(string queryString) /// /// The correct true or false. /// - private bool ParseCorner(NameValueCollection queryCollection, string key) - { - return queryCollection[key] == null || QueryParamParser.Instance.ParseValue(queryCollection[key]); - } + private bool ParseCorner(NameValueCollection queryCollection, string key) => queryCollection[key] == null || QueryParamParser.Instance.ParseValue(queryCollection[key]); } } diff --git a/src/ImageProcessor.Web/Processors/Saturation.cs b/src/ImageProcessor.Web/Processors/Saturation.cs index ae66baf95..a0eeba041 100644 --- a/src/ImageProcessor.Web/Processors/Saturation.cs +++ b/src/ImageProcessor.Web/Processors/Saturation.cs @@ -31,10 +31,7 @@ public class Saturation : IWebGraphicsProcessor /// /// Initializes a new instance of the class. /// - public Saturation() - { - this.Processor = new ImageProcessor.Processors.Saturation(); - } + public Saturation() => this.Processor = new ImageProcessor.Processors.Saturation(); /// /// Gets the regular expression to search strings for. diff --git a/src/ImageProcessor.Web/Processors/Tint.cs b/src/ImageProcessor.Web/Processors/Tint.cs index a717cc618..ed653d4e0 100644 --- a/src/ImageProcessor.Web/Processors/Tint.cs +++ b/src/ImageProcessor.Web/Processors/Tint.cs @@ -26,15 +26,12 @@ public class Tint : IWebGraphicsProcessor /// /// The regular expression to search strings for. /// - private static readonly Regex QueryRegex = new Regex(@"tint=[^&]", RegexOptions.Compiled); + private static readonly Regex QueryRegex = new Regex("tint=[^&]", RegexOptions.Compiled); /// /// Initializes a new instance of the class. /// - public Tint() - { - this.Processor = new ImageProcessor.Processors.Tint(); - } + public Tint() => this.Processor = new ImageProcessor.Processors.Tint(); /// /// Gets the regular expression to search strings for. diff --git a/src/ImageProcessor.Web/Processors/Vignette.cs b/src/ImageProcessor.Web/Processors/Vignette.cs index 0e402b958..05558e293 100644 --- a/src/ImageProcessor.Web/Processors/Vignette.cs +++ b/src/ImageProcessor.Web/Processors/Vignette.cs @@ -26,15 +26,12 @@ public class Vignette : IWebGraphicsProcessor /// /// The regular expression to search strings for. /// - private static readonly Regex QueryRegex = new Regex(@"vignette(=true)?[^&]+", RegexOptions.Compiled); + private static readonly Regex QueryRegex = new Regex("vignette(=true)?[^&]+", RegexOptions.Compiled); /// /// Initializes a new instance of the class. /// - public Vignette() - { - this.Processor = new ImageProcessor.Processors.Vignette(); - } + public Vignette() => this.Processor = new ImageProcessor.Processors.Vignette(); /// /// Gets the regular expression to search strings for. diff --git a/src/ImageProcessor.Web/Processors/Watermark.cs b/src/ImageProcessor.Web/Processors/Watermark.cs index 75a128751..30b2a6d6d 100644 --- a/src/ImageProcessor.Web/Processors/Watermark.cs +++ b/src/ImageProcessor.Web/Processors/Watermark.cs @@ -28,15 +28,12 @@ public class Watermark : IWebGraphicsProcessor /// /// The regular expression to search strings for. /// - private static readonly Regex QueryRegex = new Regex(@"watermark=", RegexOptions.Compiled); + private static readonly Regex QueryRegex = new Regex("watermark=", RegexOptions.Compiled); /// /// Initializes a new instance of the class. /// - public Watermark() - { - this.Processor = new ImageProcessor.Processors.Watermark(); - } + public Watermark() => this.Processor = new ImageProcessor.Processors.Watermark(); /// /// Gets the regular expression to search strings for. @@ -71,7 +68,7 @@ public int MatchRegexIndex(string queryString) { this.SortOrder = match.Index; NameValueCollection queryCollection = HttpUtility.ParseQueryString(queryString); - TextLayer textLayer = new TextLayer + var textLayer = new TextLayer { Text = this.ParseText(queryCollection), Position = this.ParsePosition(queryCollection), @@ -92,7 +89,6 @@ public int MatchRegexIndex(string queryString) return this.SortOrder; } - #region Private Methods /// /// Returns the correct for the given parameter collection. /// @@ -102,10 +98,7 @@ public int MatchRegexIndex(string queryString) /// /// The correct . /// - private string ParseText(NameValueCollection queryCollection) - { - return QueryParamParser.Instance.ParseValue(queryCollection["watermark"]); - } + private string ParseText(NameValueCollection queryCollection) => QueryParamParser.Instance.ParseValue(queryCollection["watermark"]); /// /// Returns the correct for the given parameter collection. @@ -196,10 +189,7 @@ private FontFamily ParseFontFamily(NameValueCollection queryCollection) /// /// True if the watermark is to have a shadow; otherwise false. /// - private bool ParseDropShadow(NameValueCollection queryCollection) - { - return QueryParamParser.Instance.ParseValue(queryCollection["dropshadow"]); - } + private bool ParseDropShadow(NameValueCollection queryCollection) => QueryParamParser.Instance.ParseValue(queryCollection["dropshadow"]); /// /// Returns the correct containing the opacity for the parameter collection. @@ -234,10 +224,7 @@ private int ParseOpacity(NameValueCollection queryCollection, Color color) /// /// True if the watermark is to be written right to left; otherwise false. /// - private bool ParseRightToLeft(NameValueCollection queryCollection) - { - return QueryParamParser.Instance.ParseValue(queryCollection["rtl"]); - } + private bool ParseRightToLeft(NameValueCollection queryCollection) => QueryParamParser.Instance.ParseValue(queryCollection["rtl"]); /// /// Returns a value indicating whether the watermark is to be written vertically. @@ -248,10 +235,6 @@ private bool ParseRightToLeft(NameValueCollection queryCollection) /// /// True if the watermark is to be written vertically; otherwise false. /// - private bool ParseVertical(NameValueCollection queryCollection) - { - return QueryParamParser.Instance.ParseValue(queryCollection["vertical"]); - } - #endregion + private bool ParseVertical(NameValueCollection queryCollection) => QueryParamParser.Instance.ParseValue(queryCollection["vertical"]); } } diff --git a/src/ImageProcessor.Web/Services/LocalFileImageService.cs b/src/ImageProcessor.Web/Services/LocalFileImageService.cs index 816eefdb7..6c8610cba 100644 --- a/src/ImageProcessor.Web/Services/LocalFileImageService.cs +++ b/src/ImageProcessor.Web/Services/LocalFileImageService.cs @@ -57,10 +57,7 @@ public class LocalFileImageService : IImageService /// /// True if the request is valid; otherwise, False. /// - public virtual bool IsValidRequest(string path) - { - return ImageHelpers.IsValidImageExtension(path); - } + public virtual bool IsValidRequest(string path) => ImageHelpers.IsValidImageExtension(path); /// /// Gets the image using the given identifier. @@ -82,7 +79,7 @@ public virtual async Task GetImage(object id) throw new HttpException((int)HttpStatusCode.NotFound, $"No image exists at {path}"); } - using (FileStream file = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read, 4096, true)) + using (var file = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read, 4096, true)) { buffer = new byte[file.Length]; await file.ReadAsync(buffer, 0, (int)file.Length).ConfigureAwait(false); diff --git a/src/ImageProcessor/Common/Exceptions/ImageFormatException.cs b/src/ImageProcessor/Common/Exceptions/ImageFormatException.cs index 14fb751ed..6254167e5 100644 --- a/src/ImageProcessor/Common/Exceptions/ImageFormatException.cs +++ b/src/ImageProcessor/Common/Exceptions/ImageFormatException.cs @@ -11,6 +11,7 @@ namespace ImageProcessor.Common.Exceptions { using System; + using System.Runtime.Serialization; /// /// The exception that is thrown when loading the supported image format types has failed. @@ -36,5 +37,24 @@ public ImageFormatException(string message, Exception innerException) : base(message, innerException) { } + + /// + /// Initializes a new instance of the class. + /// + public ImageFormatException() + { + } + + /// + /// Initializes a new instance of the class with serialized data. + /// + /// The that holds the serialized object data about the exception being thrown. + /// The that contains contextual information about the source or destination. + /// The parameter is null. + /// The class name is null or is zero (0). + private ImageFormatException(SerializationInfo info, StreamingContext context) + : base(info, context) + { + } } } diff --git a/src/ImageProcessor/Common/Exceptions/ImageProcessingException.cs b/src/ImageProcessor/Common/Exceptions/ImageProcessingException.cs index c438af313..7bb936703 100644 --- a/src/ImageProcessor/Common/Exceptions/ImageProcessingException.cs +++ b/src/ImageProcessor/Common/Exceptions/ImageProcessingException.cs @@ -11,6 +11,7 @@ namespace ImageProcessor.Common.Exceptions { using System; + using System.Runtime.Serialization; /// /// The exception that is thrown when processing an image has failed. @@ -36,5 +37,24 @@ public ImageProcessingException(string message, Exception innerException) : base(message, innerException) { } + + /// + /// Initializes a new instance of the class. + /// + public ImageProcessingException() + { + } + + /// + /// Initializes a new instance of the class with serialized data. + /// + /// The that holds the serialized object data about the exception being thrown. + /// The that contains contextual information about the source or destination. + /// The parameter is null. + /// The class name is null or is zero (0). + private ImageProcessingException(SerializationInfo info, StreamingContext context) + : base(info, context) + { + } } } diff --git a/src/ImageProcessor/Common/Exceptions/Logging/DefaultLogger.cs b/src/ImageProcessor/Common/Exceptions/Logging/DefaultLogger.cs index 22fa42260..748e69f12 100644 --- a/src/ImageProcessor/Common/Exceptions/Logging/DefaultLogger.cs +++ b/src/ImageProcessor/Common/Exceptions/Logging/DefaultLogger.cs @@ -27,10 +27,7 @@ public class DefaultLogger : ILogger /// The message to log. /// The property or method name calling the log. /// The line number where the method is called. - public void Log(string text, [CallerMemberName] string callerName = null, [CallerLineNumber] int lineNumber = 0) - { - this.LogInternal(typeof(T), text, callerName, lineNumber); - } + public void Log(string text, [CallerMemberName] string callerName = null, [CallerLineNumber] int lineNumber = 0) => this.LogInternal(typeof(T), text, callerName, lineNumber); /// /// Logs the specified message. @@ -39,22 +36,19 @@ public void Log(string text, [CallerMemberName] string callerName = null, [Ca /// The message to log. /// The property or method name calling the log. /// The line number where the method is called. - public void Log(Type type, string text, [CallerMemberName] string callerName = null, [CallerLineNumber] int lineNumber = 0) - { - this.LogInternal(type, text, callerName, lineNumber); - } + public void Log(Type type, string text, [CallerMemberName] string callerName = null, [CallerLineNumber] int lineNumber = 0) => this.LogInternal(type, text, callerName, lineNumber); - /// - /// Logs the specified message. - /// - /// The type calling the logger. - /// The message to log. - /// The property or method name calling the log. - /// The line number where the method is called. - [Conditional("TRACE")] - private void LogInternal(Type type, string text, string callerName = null, int lineNumber = 0) + /// + /// Logs the specified message. + /// + /// The type calling the logger. + /// The message to log. + /// The property or method name calling the log. + /// The line number where the method is called. + [Conditional("TRACE")] + private void LogInternal(Type type, string text, string callerName = null, int lineNumber = 0) { - string message = String.Format("{0} - {1}: {2} {3}:{4}", DateTime.UtcNow.ToString("s"), type.Name, callerName, lineNumber, text); + string message = string.Format("{0} - {1}: {2} {3}:{4}", DateTime.UtcNow.ToString("s"), type.Name, callerName, lineNumber, text); Trace.WriteLine(message); } diff --git a/src/ImageProcessor/Common/Exceptions/QuantizationException.cs b/src/ImageProcessor/Common/Exceptions/QuantizationException.cs index 22fab46c5..538631a07 100644 --- a/src/ImageProcessor/Common/Exceptions/QuantizationException.cs +++ b/src/ImageProcessor/Common/Exceptions/QuantizationException.cs @@ -11,6 +11,7 @@ namespace ImageProcessor.Common.Exceptions { using System; + using System.Runtime.Serialization; /// /// The exception that is thrown when quantizing an image has failed. @@ -38,5 +39,24 @@ public QuantizationException(string message, Exception innerException) : base(message, innerException) { } + + /// + /// Initializes a new instance of the class. + /// + public QuantizationException() + { + } + + /// + /// Initializes a new instance of the class with serialized data. + /// + /// The that holds the serialized object data about the exception being thrown. + /// The that contains contextual information about the source or destination. + /// The parameter is null. + /// The class name is null or is zero (0). + private QuantizationException(SerializationInfo info, StreamingContext context) + : base(info, context) + { + } } } diff --git a/src/ImageProcessor/Common/Extensions/AssemblyExtensions.cs b/src/ImageProcessor/Common/Extensions/AssemblyExtensions.cs index c600e9bed..05f1e3a4d 100644 --- a/src/ImageProcessor/Common/Extensions/AssemblyExtensions.cs +++ b/src/ImageProcessor/Common/Extensions/AssemblyExtensions.cs @@ -68,7 +68,7 @@ public static string GetResourceAsString(this Assembly assembly, string resource { encoding = encoding ?? Encoding.UTF8; - using (MemoryStream ms = new MemoryStream()) + using (var ms = new MemoryStream()) { using (Stream manifestResourceStream = assembly.GetManifestResourceStream(resource)) { @@ -89,7 +89,7 @@ public static string GetResourceAsString(this Assembly assembly, string resource public static FileInfo GetAssemblyFile(this Assembly assembly) { string codeBase = assembly.CodeBase; - Uri uri = new Uri(codeBase); + var uri = new Uri(codeBase); string path = uri.LocalPath; return new FileInfo(path); } @@ -104,7 +104,7 @@ public static FileInfo GetAssemblyFile(this Assembly assembly) public static FileInfo GetAssemblyFile(this AssemblyName assemblyName) { string codeBase = assemblyName.CodeBase; - Uri uri = new Uri(codeBase); + var uri = new Uri(codeBase); string path = uri.LocalPath; return new FileInfo(path); } diff --git a/src/ImageProcessor/Common/Extensions/DoubleExtensions.cs b/src/ImageProcessor/Common/Extensions/DoubleExtensions.cs index e9fb40e1e..5f57a3a9a 100644 --- a/src/ImageProcessor/Common/Extensions/DoubleExtensions.cs +++ b/src/ImageProcessor/Common/Extensions/DoubleExtensions.cs @@ -32,9 +32,6 @@ public static class DoubleExtensions /// /// The . /// - public static byte ToByte(this double value) - { - return Convert.ToByte(ImageMaths.Clamp(value, 0, 255)); - } + public static byte ToByte(this double value) => Convert.ToByte(ImageMaths.Clamp(value, 0, 255)); } } diff --git a/src/ImageProcessor/Common/Extensions/EnumerableExtensions.cs b/src/ImageProcessor/Common/Extensions/EnumerableExtensions.cs index a97325c9f..392f863b1 100644 --- a/src/ImageProcessor/Common/Extensions/EnumerableExtensions.cs +++ b/src/ImageProcessor/Common/Extensions/EnumerableExtensions.cs @@ -33,7 +33,7 @@ public static class EnumerableExtensions /// /// The that contains a range of sequential integral numbers. /// - public static IEnumerable SteppedRange(int fromInclusive, int toExclusive, int step) + public static IEnumerable SteppedRange(this int fromInclusive, int toExclusive, int step) { // Borrowed from Enumerable.Range long num = (fromInclusive + toExclusive) - 1L; @@ -60,10 +60,7 @@ public static IEnumerable SteppedRange(int fromInclusive, int toExclusive, /// /// The that contains a range of sequential integral numbers. /// - public static IEnumerable SteppedRange(int fromInclusive, Func toDelegate, int step) - { - return RangeIterator(fromInclusive, toDelegate, step); - } + public static IEnumerable SteppedRange(this int fromInclusive, Func toDelegate, int step) => RangeIterator(fromInclusive, toDelegate, step); /// /// Generates a sequence of integral numbers within a specified range. diff --git a/src/ImageProcessor/Common/Extensions/FloatExtensions.cs b/src/ImageProcessor/Common/Extensions/FloatExtensions.cs index 8154adaa8..ab0a80ecc 100644 --- a/src/ImageProcessor/Common/Extensions/FloatExtensions.cs +++ b/src/ImageProcessor/Common/Extensions/FloatExtensions.cs @@ -32,9 +32,6 @@ public static class FloatExtensions /// /// The . /// - public static byte ToByte(this float value) - { - return Convert.ToByte(ImageMaths.Clamp(value, 0, 255)); - } + public static byte ToByte(this float value) => Convert.ToByte(ImageMaths.Clamp(value, 0, 255)); } } diff --git a/src/ImageProcessor/Common/Extensions/ImageExtensions.cs b/src/ImageProcessor/Common/Extensions/ImageExtensions.cs index 795d5e698..288553f9d 100644 --- a/src/ImageProcessor/Common/Extensions/ImageExtensions.cs +++ b/src/ImageProcessor/Common/Extensions/ImageExtensions.cs @@ -42,11 +42,11 @@ public static Image Copy(this Image source, AnimationProcessMode animationProces { // Read from the correct first frame when performing additional processing source.SelectActiveFrame(FrameDimension.Time, 0); - GifDecoder decoder = new GifDecoder(source, animationProcessMode); - GifEncoder encoder = new GifEncoder(null, null, decoder.LoopCount); + var decoder = new GifDecoder(source, animationProcessMode); + var encoder = new GifEncoder(null, null, decoder.LoopCount); // Have to use Octree here, there's no way to inject it. - OctreeQuantizer quantizer = new OctreeQuantizer(); + var quantizer = new OctreeQuantizer(); for (int i = 0; i < decoder.FrameCount; i++) { GifFrame frame = decoder.GetFrame(source, i); @@ -59,9 +59,9 @@ public static Image Copy(this Image source, AnimationProcessMode animationProces } // Create a new image and copy it's pixels. - Bitmap copy = new Bitmap(source.Width, source.Height, format); + var copy = new Bitmap(source.Width, source.Height, format); copy.SetResolution(source.HorizontalResolution, source.VerticalResolution); - using (Graphics graphics = Graphics.FromImage(copy)) + using (var graphics = Graphics.FromImage(copy)) { graphics.DrawImageUnscaled(source, 0, 0); } @@ -89,9 +89,6 @@ public static Image Copy(this Image source, AnimationProcessMode animationProces /// /// The . /// - public static Image Copy(this Image source, PixelFormat format = PixelFormat.Format32bppPArgb) - { - return Copy(source, AnimationProcessMode.All, format); - } + public static Image Copy(this Image source, PixelFormat format = PixelFormat.Format32bppPArgb) => Copy(source, AnimationProcessMode.All, format); } } diff --git a/src/ImageProcessor/Common/Extensions/IntegerExtensions.cs b/src/ImageProcessor/Common/Extensions/IntegerExtensions.cs index 6eebd7b09..c040d6b97 100644 --- a/src/ImageProcessor/Common/Extensions/IntegerExtensions.cs +++ b/src/ImageProcessor/Common/Extensions/IntegerExtensions.cs @@ -11,7 +11,6 @@ namespace ImageProcessor.Common.Extensions { using System; - using System.Globalization; using ImageProcessor.Imaging.Helpers; @@ -33,21 +32,6 @@ public static class IntegerExtensions /// /// The . /// - public static byte ToByte(this int value) - { - return Convert.ToByte(ImageMaths.Clamp(value, 0, 255)); - } - - /// - /// Converts the string representation of a number in a specified culture-specific format to its - /// 32-bit signed integer equivalent using invariant culture. - /// - /// The integer. - /// A string containing a number to convert. - /// A 32-bit signed integer equivalent to the number specified in toParse. - public static int ParseInvariant(this int value, string toParse) - { - return int.Parse(toParse, CultureInfo.InvariantCulture); - } + public static byte ToByte(this int value) => Convert.ToByte(ImageMaths.Clamp(value, 0, 255)); } } diff --git a/src/ImageProcessor/Common/Extensions/RectangleExtensions.cs b/src/ImageProcessor/Common/Extensions/RectangleExtensions.cs index 755da9c2d..fe6cf4bf8 100644 --- a/src/ImageProcessor/Common/Extensions/RectangleExtensions.cs +++ b/src/ImageProcessor/Common/Extensions/RectangleExtensions.cs @@ -29,10 +29,10 @@ internal static class RectangleExtensions /// public static bool IsEqual(this Rectangle first, Rectangle second, int threshold) { - return (Math.Abs(first.X - second.X) < threshold) && - (Math.Abs(first.Y - second.Y) < threshold) && - (Math.Abs(first.Width - second.Width) < threshold) && - (Math.Abs(first.Height - second.Height) < threshold); + return (Math.Abs(first.X - second.X) < threshold) + && (Math.Abs(first.Y - second.Y) < threshold) + && (Math.Abs(first.Width - second.Width) < threshold) + && (Math.Abs(first.Height - second.Height) < threshold); } } } diff --git a/src/ImageProcessor/Common/Helpers/IOHelper.cs b/src/ImageProcessor/Common/Helpers/IOHelper.cs index 728f059bb..74113de9d 100644 --- a/src/ImageProcessor/Common/Helpers/IOHelper.cs +++ b/src/ImageProcessor/Common/Helpers/IOHelper.cs @@ -26,7 +26,7 @@ namespace ImageProcessor.Common.Helpers /// Adapted from identically named class within /// /// - internal class IOHelper + internal static class IOHelper { /// /// The root directory. @@ -111,13 +111,13 @@ public static string GetRootDirectoryBinFolder() /// The representing the root path of the currently running application. internal static string GetRootDirectorySafe() { - if (string.IsNullOrEmpty(rootDirectory) == false) + if (!string.IsNullOrEmpty(rootDirectory)) { return rootDirectory; } string codeBase = Assembly.GetExecutingAssembly().CodeBase; - Uri uri = new Uri(codeBase); + var uri = new Uri(codeBase); string path = uri.LocalPath; string baseDirectory = Path.GetDirectoryName(path); if (string.IsNullOrEmpty(baseDirectory)) diff --git a/src/ImageProcessor/Common/Helpers/TypeFinder.cs b/src/ImageProcessor/Common/Helpers/TypeFinder.cs index eae7780b4..d3e81cdf2 100644 --- a/src/ImageProcessor/Common/Helpers/TypeFinder.cs +++ b/src/ImageProcessor/Common/Helpers/TypeFinder.cs @@ -101,7 +101,7 @@ internal static class TypeFinder /// internal static HashSet GetAllAssemblies() { - using (UpgradeableReadLock locker = new UpgradeableReadLock(Locker)) + using (var locker = new UpgradeableReadLock(Locker)) { if (allAssemblies == null) { @@ -112,14 +112,14 @@ internal static HashSet GetAllAssemblies() // NOTE: we cannot use AppDomain.CurrentDomain.GetAssemblies() because this only returns assemblies that have // already been loaded in to the app domain, instead we will look directly into the bin folder and load each one. string binFolder = IOHelper.GetRootDirectoryBinFolder(); - List binAssemblyFiles = Directory.GetFiles(binFolder, "*.dll", SearchOption.TopDirectoryOnly).ToList(); - HashSet assemblies = new HashSet(); + var binAssemblyFiles = Directory.GetFiles(binFolder, "*.dll", SearchOption.TopDirectoryOnly).ToList(); + var assemblies = new HashSet(); foreach (string file in binAssemblyFiles) { try { - AssemblyName assemblyName = AssemblyName.GetAssemblyName(file); + var assemblyName = AssemblyName.GetAssemblyName(file); assemblies.Add(Assembly.Load(assemblyName)); } catch (Exception ex) @@ -137,7 +137,7 @@ internal static HashSet GetAllAssemblies() } // If for some reason they are still no assemblies, then use the AppDomain to load in already loaded assemblies. - if (!assemblies.Any()) + if (assemblies.Count == 0) { foreach (Assembly assembly in AppDomain.CurrentDomain.GetAssemblies()) { @@ -147,12 +147,12 @@ internal static HashSet GetAllAssemblies() // Here we are trying to get the App_Code assembly string[] fileExtensions = { ".cs", ".vb" }; - DirectoryInfo appCodeFolder = new DirectoryInfo(IOHelper.MapPath("~/App_code")); + var appCodeFolder = new DirectoryInfo(IOHelper.MapPath("~/App_code")); // Check if the folder exists and if there are any files in it with the supported file extensions - if (appCodeFolder.Exists && fileExtensions.Any(x => appCodeFolder.GetFiles("*" + x).Any())) + if (appCodeFolder.Exists && fileExtensions.Any(x => appCodeFolder.GetFiles("*" + x).Length > 0)) { - Assembly appCodeAssembly = Assembly.Load("App_Code"); + var appCodeAssembly = Assembly.Load("App_Code"); if (!assemblies.Contains(appCodeAssembly)) { assemblies.Add(appCodeAssembly); @@ -192,10 +192,10 @@ internal static HashSet GetBinAssemblies() Assembly[] assemblies = GetAssembliesWithKnownExclusions().ToArray(); DirectoryInfo binFolder = Assembly.GetExecutingAssembly().GetAssemblyFile().Directory; // ReSharper disable once PossibleNullReferenceException - List binAssemblyFiles = Directory.GetFiles(binFolder.FullName, "*.dll", SearchOption.TopDirectoryOnly).ToList(); + var binAssemblyFiles = Directory.GetFiles(binFolder.FullName, "*.dll", SearchOption.TopDirectoryOnly).ToList(); IEnumerable domainAssemblyNames = binAssemblyFiles.Select(AssemblyName.GetAssemblyName); - HashSet safeDomainAssemblies = new HashSet(); - HashSet binFolderAssemblyList = new HashSet(); + var safeDomainAssemblies = new HashSet(); + var binFolderAssemblyList = new HashSet(); foreach (Assembly assembly in assemblies) { @@ -232,17 +232,16 @@ internal static HashSet GetBinAssemblies() internal static HashSet GetAssembliesWithKnownExclusions( IEnumerable excludeFromResults = null) { - using (UpgradeableReadLock locker = new UpgradeableReadLock(LocalFilteredAssemblyCacheLocker)) + using (var locker = new UpgradeableReadLock(LocalFilteredAssemblyCacheLocker)) { - if (LocalFilteredAssemblyCache.Any()) + if (LocalFilteredAssemblyCache.Count > 0) { return LocalFilteredAssemblyCache; } locker.UpgradeToWriteLock(); - IEnumerable assemblies = GetFilteredAssemblies(excludeFromResults, KnownAssemblyExclusionFilter); - foreach (Assembly assembly in assemblies) + foreach (Assembly assembly in GetFilteredAssemblies(excludeFromResults, KnownAssemblyExclusionFilter)) { LocalFilteredAssemblyCache.Add(assembly); } diff --git a/src/ImageProcessor/Configuration/ImageProcessorBootstrapper.cs b/src/ImageProcessor/Configuration/ImageProcessorBootstrapper.cs index 25ee1b951..9266a8c73 100644 --- a/src/ImageProcessor/Configuration/ImageProcessorBootstrapper.cs +++ b/src/ImageProcessor/Configuration/ImageProcessorBootstrapper.cs @@ -22,7 +22,7 @@ namespace ImageProcessor.Configuration /// /// The ImageProcessor bootstrapper containing initialization code for extending ImageProcessor. /// - public class ImageProcessorBootstrapper + public sealed class ImageProcessorBootstrapper { /// /// A new instance Initializes a new instance of the class. @@ -59,7 +59,7 @@ private ImageProcessorBootstrapper() /// /// Gets the native binary factory for registering embedded (unmanaged) binaries. /// - public NativeBinaryFactory NativeBinaryFactory { get; private set; } + public NativeBinaryFactory NativeBinaryFactory { get; } /// /// Adds the given image formats to the supported format list. Useful for when @@ -68,27 +68,21 @@ private ImageProcessorBootstrapper() /// /// The instance to add. /// - public void AddImageFormats(params ISupportedImageFormat[] format) - { - ((List)this.SupportedImageFormats).AddRange(format); - } + public void AddImageFormats(params ISupportedImageFormat[] format) => ((List)this.SupportedImageFormats).AddRange(format); /// /// Allows the setting of the default logger. Useful for when /// the type finder fails to dynamically add the custom logger implementation. /// /// - public void SetLogger(ILogger logger) - { - this.Logger = logger; - } + public void SetLogger(ILogger logger) => this.Logger = logger; /// /// Creates a list, using reflection, of supported image formats that ImageProcessor can run. /// private void LoadSupportedImageFormats() { - List formats = new List + var formats = new List { new BitmapFormat(), new GifFormat(), @@ -100,7 +94,7 @@ private void LoadSupportedImageFormats() Type type = typeof(ISupportedImageFormat); if (this.SupportedImageFormats == null) { - List availableTypes = + var availableTypes = TypeFinder.GetAssembliesWithKnownExclusions() .SelectMany(a => a.GetLoadableTypes()) .Where(t => type.IsAssignableFrom(t) && t.IsClass && !t.IsAbstract) @@ -120,7 +114,7 @@ private void LoadLogger() Type type = typeof(ILogger); if (this.Logger == null) { - List availableTypes = + var availableTypes = TypeFinder.GetAssembliesWithKnownExclusions() .SelectMany(a => a.GetLoadableTypes()) .Where(t => type.IsAssignableFrom(t) && t.IsClass && !t.IsAbstract) diff --git a/src/ImageProcessor/Configuration/NativeBinaryFactory.cs b/src/ImageProcessor/Configuration/NativeBinaryFactory.cs index cb0357da5..04000ef38 100644 --- a/src/ImageProcessor/Configuration/NativeBinaryFactory.cs +++ b/src/ImageProcessor/Configuration/NativeBinaryFactory.cs @@ -48,10 +48,7 @@ public class NativeBinaryFactory : IDisposable /// /// Initializes a new instance of the class. /// - public NativeBinaryFactory() - { - nativeBinaries = new ConcurrentDictionary(); - } + public NativeBinaryFactory() => nativeBinaries = new ConcurrentDictionary(); /// /// Finalizes an instance of the ImageFactory class. @@ -96,12 +93,12 @@ public void RegisterNativeBinary(string name, byte[] resourceBytes) { IntPtr pointer; string folder = this.Is64BitEnvironment ? "x64" : "x86"; - Assembly assembly = Assembly.GetExecutingAssembly(); + var assembly = Assembly.GetExecutingAssembly(); string targetBasePath = new Uri(assembly.Location).LocalPath; - string targetPath = Path.GetFullPath(Path.Combine(targetBasePath, "..\\" + folder + "\\" + name)); + string targetPath = Path.GetFullPath(Path.Combine(targetBasePath, "..\\" + folder + "\\" + b)); // Copy the file across if necessary. - FileInfo fileInfo = new FileInfo(targetPath); + var fileInfo = new FileInfo(targetPath); bool rewrite = true; if (fileInfo.Exists) { @@ -116,7 +113,7 @@ public void RegisterNativeBinary(string name, byte[] resourceBytes) if (rewrite) { // ReSharper disable once AssignNullToNotNullAttribute - DirectoryInfo directoryInfo = new DirectoryInfo(Path.GetDirectoryName(targetPath)); + var directoryInfo = new DirectoryInfo(Path.GetDirectoryName(targetPath)); if (!directoryInfo.Exists) { directoryInfo.Create(); @@ -137,7 +134,7 @@ public void RegisterNativeBinary(string name, byte[] resourceBytes) if (pointer == IntPtr.Zero) { - throw new ApplicationException("Cannot load " + name); + throw new ApplicationException("Cannot load " + b); } return pointer; diff --git a/src/ImageProcessor/Configuration/NativeMethods.cs b/src/ImageProcessor/Configuration/NativeMethods.cs index 29ee9ef9d..69675bb11 100644 --- a/src/ImageProcessor/Configuration/NativeMethods.cs +++ b/src/ImageProcessor/Configuration/NativeMethods.cs @@ -16,7 +16,7 @@ namespace ImageProcessor.Configuration /// /// Provides access to unmanaged native methods. /// - internal class NativeMethods + internal static class NativeMethods { /// /// Loads the specified module into the address space of the calling process. @@ -56,7 +56,9 @@ internal class NativeMethods /// If the function succeeds, the return value is a handle to the module; otherwise null. /// [DllImport("libdl")] +#pragma warning disable IDE1006 // Naming Styles public static extern IntPtr dlopen(string libname, int flags); +#pragma warning restore IDE1006 // Naming Styles /// /// Frees the loaded dynamic-link library (DLL) module and, if necessary, decrements its reference count. @@ -67,6 +69,8 @@ internal class NativeMethods /// The LoadLibrary, LoadLibraryEx, GetModuleHandle, or GetModuleHandleEx function returns this handle. /// If the function succeeds, the return value is nonzero; otherwise zero. [DllImport("libdl")] +#pragma warning disable IDE1006 // Naming Styles public static extern int dlclose(IntPtr hModule); +#pragma warning restore IDE1006 // Naming Styles } } diff --git a/src/ImageProcessor/ImageFactory.cs b/src/ImageProcessor/ImageFactory.cs index 72d88e783..eaeb8aa98 100644 --- a/src/ImageProcessor/ImageFactory.cs +++ b/src/ImageProcessor/ImageFactory.cs @@ -89,7 +89,7 @@ public ImageFactory(bool preserveExifData = false) /// Whether to fix the gamma component of the image. /// public ImageFactory(bool preserveExifData, bool fixGamma) - : this(preserveExifData == false ? MetaDataMode.None : MetaDataMode.All, fixGamma) + : this(!preserveExifData ? MetaDataMode.None : MetaDataMode.All, fixGamma) { } @@ -218,7 +218,7 @@ public bool PreserveExifData /// public ImageFactory Load(Stream stream) { - MemoryStream memoryStream = new MemoryStream(); + var memoryStream = new MemoryStream(); // Copy the stream. Disposal of the input stream is the responsibility // of the user. @@ -286,13 +286,13 @@ public ImageFactory Load(Stream stream) /// public ImageFactory Load(string imagePath) { - FileInfo fileInfo = new FileInfo(imagePath); + var fileInfo = new FileInfo(imagePath); if (fileInfo.Exists) { this.ImagePath = imagePath; // Open a file stream to prevent the need for lock. - using (FileStream fileStream = new FileStream(imagePath, FileMode.Open, FileAccess.Read)) + using (var fileStream = new FileStream(imagePath, FileMode.Open, FileAccess.Read)) { ISupportedImageFormat format = FormatUtilities.GetFormat(fileStream); @@ -301,7 +301,7 @@ public ImageFactory Load(string imagePath) throw new ImageFormatException("Input stream is not a supported format."); } - MemoryStream memoryStream = new MemoryStream(); + var memoryStream = new MemoryStream(); // Copy the stream. fileStream.CopyTo(memoryStream); @@ -366,7 +366,7 @@ public ImageFactory Load(string imagePath) /// public ImageFactory Load(byte[] bytes) { - MemoryStream memoryStream = new MemoryStream(bytes); + var memoryStream = new MemoryStream(bytes); ISupportedImageFormat format = FormatUtilities.GetFormat(memoryStream); @@ -428,7 +428,7 @@ public ImageFactory Load(Image image) // Try saving with the raw format. This might not be possible if the image was created // in-memory so we fall back to BMP to keep in line with the default in System.Drawing // if no format found. - MemoryStream memoryStream = new MemoryStream(); + var memoryStream = new MemoryStream(); ISupportedImageFormat format = new BitmapFormat(); try { @@ -441,8 +441,7 @@ public ImageFactory Load(Image image) image.Save(memoryStream, ImageFormat.Bmp); } - IAnimatedImageFormat imageFormat = format as IAnimatedImageFormat; - if (imageFormat != null) + if (format is IAnimatedImageFormat imageFormat) { imageFormat.AnimationProcessMode = this.AnimationProcessMode; } @@ -531,7 +530,7 @@ public ImageFactory Alpha(int percentage) return this; } - Alpha alpha = new Alpha { DynamicParameter = percentage }; + var alpha = new Alpha { DynamicParameter = percentage }; this.backupFormat.ApplyProcessor(alpha.ProcessImage, this); } @@ -549,7 +548,7 @@ public ImageFactory AutoRotate() { if (this.ShouldProcess) { - AutoRotate autoRotate = new AutoRotate(); + var autoRotate = new AutoRotate(); this.backupFormat.ApplyProcessor(autoRotate.ProcessImage, this); } @@ -597,7 +596,7 @@ public ImageFactory Brightness(int percentage) return this; } - Brightness brightness = new Brightness { DynamicParameter = percentage }; + var brightness = new Brightness { DynamicParameter = percentage }; this.backupFormat.ApplyProcessor(brightness.ProcessImage, this); } @@ -617,7 +616,7 @@ public ImageFactory BackgroundColor(Color color) { if (this.ShouldProcess) { - BackgroundColor backgroundColor = new BackgroundColor { DynamicParameter = color }; + var backgroundColor = new BackgroundColor { DynamicParameter = color }; this.backupFormat.ApplyProcessor(backgroundColor.ProcessImage, this); } @@ -637,7 +636,7 @@ public ImageFactory Constrain(Size size) { if (this.ShouldProcess) { - ResizeLayer layer = new ResizeLayer(size, ResizeMode.Max); + var layer = new ResizeLayer(size, ResizeMode.Max); return this.Resize(layer); } @@ -665,7 +664,7 @@ public ImageFactory Contrast(int percentage) return this; } - Contrast contrast = new Contrast { DynamicParameter = percentage }; + var contrast = new Contrast { DynamicParameter = percentage }; this.backupFormat.ApplyProcessor(contrast.ProcessImage, this); } @@ -685,7 +684,7 @@ public ImageFactory Crop(Rectangle rectangle) { if (this.ShouldProcess) { - CropLayer cropLayer = new CropLayer(rectangle.Left, rectangle.Top, rectangle.Width, rectangle.Height, CropMode.Pixels); + var cropLayer = new CropLayer(rectangle.Left, rectangle.Top, rectangle.Width, rectangle.Height, CropMode.Pixels); return this.Crop(cropLayer); } @@ -705,7 +704,7 @@ public ImageFactory Crop(CropLayer cropLayer) { if (this.ShouldProcess) { - Crop crop = new Crop { DynamicParameter = cropLayer }; + var crop = new Crop { DynamicParameter = cropLayer }; this.backupFormat.ApplyProcessor(crop.ProcessImage, this); } @@ -728,7 +727,7 @@ public ImageFactory DetectEdges(IEdgeFilter filter, bool greyscale = true) { if (this.ShouldProcess) { - DetectEdges detectEdges = new DetectEdges { DynamicParameter = new Tuple(filter, greyscale) }; + var detectEdges = new DetectEdges { DynamicParameter = new Tuple(filter, greyscale) }; this.backupFormat.ApplyProcessor(detectEdges.ProcessImage, this); } @@ -760,10 +759,10 @@ public ImageFactory Resolution(int horizontal, int vertical, PropertyTagResoluti return this; } - Tuple resolution = + var resolution = new Tuple(horizontal, vertical, unit); - Resolution dpi = new Resolution { DynamicParameter = resolution }; + var dpi = new Resolution { DynamicParameter = resolution }; this.backupFormat.ApplyProcessor(dpi.ProcessImage, this); } @@ -793,7 +792,7 @@ public ImageFactory EntropyCrop(byte threshold = 128) { if (this.ShouldProcess) { - EntropyCrop autoCrop = new EntropyCrop { DynamicParameter = threshold }; + var autoCrop = new EntropyCrop { DynamicParameter = threshold }; this.backupFormat.ApplyProcessor(autoCrop.ProcessImage, this); } @@ -814,7 +813,7 @@ public ImageFactory Filter(IMatrixFilter matrixFilter) { if (this.ShouldProcess) { - Filter filter = new Filter { DynamicParameter = matrixFilter }; + var filter = new Filter { DynamicParameter = matrixFilter }; this.backupFormat.ApplyProcessor(filter.ProcessImage, this); } @@ -849,7 +848,7 @@ public ImageFactory Flip(bool flipVertically = false, bool flipBoth = false) : RotateFlipType.RotateNoneFlipX; } - Flip flip = new Flip { DynamicParameter = rotateFlipType }; + var flip = new Flip { DynamicParameter = rotateFlipType }; this.backupFormat.ApplyProcessor(flip.ProcessImage, this); } @@ -896,7 +895,7 @@ public ImageFactory Gamma(float value) } this.CurrentGamma = value; - Gamma gamma = new Gamma { DynamicParameter = value }; + var gamma = new Gamma { DynamicParameter = value }; this.backupFormat.ApplyProcessor(gamma.ProcessImage, this); } @@ -922,7 +921,7 @@ public ImageFactory GaussianBlur(int size) { if (this.ShouldProcess && size > 0) { - GaussianLayer layer = new GaussianLayer(size); + var layer = new GaussianLayer(size); return this.GaussianBlur(layer); } @@ -943,7 +942,7 @@ public ImageFactory GaussianBlur(GaussianLayer gaussianLayer) { if (this.ShouldProcess) { - GaussianBlur gaussianBlur = new GaussianBlur { DynamicParameter = gaussianLayer }; + var gaussianBlur = new GaussianBlur { DynamicParameter = gaussianLayer }; this.backupFormat.ApplyProcessor(gaussianBlur.ProcessImage, this); } @@ -969,7 +968,7 @@ public ImageFactory GaussianSharpen(int size) { if (this.ShouldProcess && size > 0) { - GaussianLayer layer = new GaussianLayer(size); + var layer = new GaussianLayer(size); return this.GaussianSharpen(layer); } @@ -990,7 +989,7 @@ public ImageFactory GaussianSharpen(GaussianLayer gaussianLayer) { if (this.ShouldProcess) { - GaussianSharpen gaussianSharpen = new GaussianSharpen { DynamicParameter = gaussianLayer }; + var gaussianSharpen = new GaussianSharpen { DynamicParameter = gaussianLayer }; this.backupFormat.ApplyProcessor(gaussianSharpen.ProcessImage, this); } @@ -1020,7 +1019,7 @@ public ImageFactory Hue(int degrees, bool rotate = false) if (this.ShouldProcess) { - Hue hue = new Hue { DynamicParameter = new Tuple(degrees, rotate) }; + var hue = new Hue { DynamicParameter = new Tuple(degrees, rotate) }; this.backupFormat.ApplyProcessor(hue.ProcessImage, this); } @@ -1040,7 +1039,7 @@ public ImageFactory Halftone(bool comicMode = false) { if (this.ShouldProcess) { - Halftone halftone = new Halftone { DynamicParameter = comicMode }; + var halftone = new Halftone { DynamicParameter = comicMode }; this.backupFormat.ApplyProcessor(halftone.ProcessImage, this); } @@ -1065,7 +1064,7 @@ public ImageFactory Mask(ImageLayer imageLayer) { if (this.ShouldProcess) { - Mask mask = new Mask { DynamicParameter = imageLayer }; + var mask = new Mask { DynamicParameter = imageLayer }; this.backupFormat.ApplyProcessor(mask.ProcessImage, this); } @@ -1086,7 +1085,7 @@ public ImageFactory Overlay(ImageLayer imageLayer) { if (this.ShouldProcess) { - Overlay watermark = new Overlay { DynamicParameter = imageLayer }; + var watermark = new Overlay { DynamicParameter = imageLayer }; this.backupFormat.ApplyProcessor(watermark.ProcessImage, this); } @@ -1108,7 +1107,7 @@ public ImageFactory Pixelate(int pixelSize, Rectangle? rectangle = null) { if (this.ShouldProcess && pixelSize > 0) { - Pixelate pixelate = new Pixelate { DynamicParameter = new Tuple(pixelSize, rectangle) }; + var pixelate = new Pixelate { DynamicParameter = new Tuple(pixelSize, rectangle) }; this.backupFormat.ApplyProcessor(pixelate.ProcessImage, this); } @@ -1160,7 +1159,7 @@ public ImageFactory ReplaceColor(Color target, Color replacement, int fuzziness if (this.ShouldProcess && target != Color.Empty && replacement != Color.Empty) { - ReplaceColor replaceColor = new ReplaceColor + var replaceColor = new ReplaceColor { DynamicParameter = new Tuple(target, replacement, fuzziness) }; @@ -1186,7 +1185,7 @@ public ImageFactory Resize(Size size) int width = size.Width; int height = size.Height; - ResizeLayer resizeLayer = new ResizeLayer(new Size(width, height)); + var resizeLayer = new ResizeLayer(new Size(width, height)); return this.Resize(resizeLayer); } @@ -1206,13 +1205,13 @@ public ImageFactory Resize(ResizeLayer resizeLayer) { if (this.ShouldProcess) { - Dictionary resizeSettings = new Dictionary + var resizeSettings = new Dictionary { { "MaxWidth", resizeLayer.Size.Width.ToString("G") }, { "MaxHeight", resizeLayer.Size.Height.ToString("G") } }; - Resize resize = new Resize { DynamicParameter = resizeLayer, Settings = resizeSettings }; + var resize = new Resize { DynamicParameter = resizeLayer, Settings = resizeSettings }; this.backupFormat.ApplyProcessor(resize.ProcessImage, this); } @@ -1232,7 +1231,7 @@ public ImageFactory Rotate(float degrees) { if (this.ShouldProcess) { - Rotate rotate = new Rotate { DynamicParameter = degrees }; + var rotate = new Rotate { DynamicParameter = degrees }; this.backupFormat.ApplyProcessor(rotate.ProcessImage, this); } @@ -1261,7 +1260,7 @@ public ImageFactory RotateBounded(float degrees, bool keepSize = false) { if (this.ShouldProcess) { - RotateBounded rotate = new RotateBounded { DynamicParameter = new Tuple(degrees, keepSize) }; + var rotate = new RotateBounded { DynamicParameter = new Tuple(degrees, keepSize) }; this.backupFormat.ApplyProcessor(rotate.ProcessImage, this); } @@ -1286,9 +1285,9 @@ public ImageFactory RoundedCorners(int radius) radius = 0; } - RoundedCornerLayer roundedCornerLayer = new RoundedCornerLayer(radius); + var roundedCornerLayer = new RoundedCornerLayer(radius); - RoundedCorners roundedCorners = new RoundedCorners { DynamicParameter = roundedCornerLayer }; + var roundedCorners = new RoundedCorners { DynamicParameter = roundedCornerLayer }; this.backupFormat.ApplyProcessor(roundedCorners.ProcessImage, this); } @@ -1313,7 +1312,7 @@ public ImageFactory RoundedCorners(RoundedCornerLayer roundedCornerLayer) roundedCornerLayer.Radius = 0; } - RoundedCorners roundedCorners = new RoundedCorners { DynamicParameter = roundedCornerLayer }; + var roundedCorners = new RoundedCorners { DynamicParameter = roundedCornerLayer }; this.backupFormat.ApplyProcessor(roundedCorners.ProcessImage, this); } @@ -1340,7 +1339,7 @@ public ImageFactory Saturation(int percentage) return this; } - Saturation saturate = new Saturation { DynamicParameter = percentage }; + var saturate = new Saturation { DynamicParameter = percentage }; this.backupFormat.ApplyProcessor(saturate.ProcessImage, this); } @@ -1360,7 +1359,7 @@ public ImageFactory Tint(Color color) { if (this.ShouldProcess) { - Tint tint = new Tint { DynamicParameter = color }; + var tint = new Tint { DynamicParameter = color }; this.backupFormat.ApplyProcessor(tint.ProcessImage, this); } @@ -1380,7 +1379,7 @@ public ImageFactory Vignette(Color? color = null) { if (this.ShouldProcess) { - Vignette vignette = new Vignette + var vignette = new Vignette { DynamicParameter = color.HasValue && !color.Equals(Color.Transparent) ? color.Value @@ -1407,7 +1406,7 @@ public ImageFactory Watermark(TextLayer textLayer) { if (this.ShouldProcess) { - Watermark watermark = new Watermark { DynamicParameter = textLayer }; + var watermark = new Watermark { DynamicParameter = textLayer }; this.backupFormat.ApplyProcessor(watermark.ProcessImage, this); } @@ -1428,7 +1427,7 @@ public ImageFactory Save(string filePath) if (this.ShouldProcess) { // ReSharper disable once AssignNullToNotNullAttribute - DirectoryInfo directoryInfo = new DirectoryInfo(Path.GetDirectoryName(filePath)); + var directoryInfo = new DirectoryInfo(Path.GetDirectoryName(filePath)); if (!directoryInfo.Exists) { directoryInfo.Create(); diff --git a/src/ImageProcessor/ImageProcessor.csproj b/src/ImageProcessor/ImageProcessor.csproj index d887ec8b0..1bec297a7 100644 --- a/src/ImageProcessor/ImageProcessor.csproj +++ b/src/ImageProcessor/ImageProcessor.csproj @@ -12,6 +12,7 @@ v4.5.2 512 + latest true diff --git a/src/ImageProcessor/Imaging/Colors/CmykColor.cs b/src/ImageProcessor/Imaging/Colors/CmykColor.cs index 4289a1a40..1dbf47b4b 100644 --- a/src/ImageProcessor/Imaging/Colors/CmykColor.cs +++ b/src/ImageProcessor/Imaging/Colors/CmykColor.cs @@ -19,33 +19,13 @@ namespace ImageProcessor.Imaging.Colors /// /// Represents an CMYK (cyan, magenta, yellow, keyline) color. /// - public struct CmykColor : IEquatable + public readonly struct CmykColor : IEquatable { /// /// Represents a that is null. /// public static readonly CmykColor Empty = new CmykColor(); - /// - /// The cyan color component. - /// - private readonly float c; - - /// - /// The magenta color component. - /// - private readonly float m; - - /// - /// The yellow color component. - /// - private readonly float y; - - /// - /// The keyline black color component. - /// - private readonly float k; - /// /// Initializes a new instance of the struct. /// @@ -63,10 +43,10 @@ public struct CmykColor : IEquatable /// private CmykColor(float cyan, float magenta, float yellow, float keyline) { - this.c = Clamp(cyan); - this.m = Clamp(magenta); - this.y = Clamp(yellow); - this.k = Clamp(keyline); + this.C = Clamp(cyan); + this.M = Clamp(magenta); + this.Y = Clamp(yellow); + this.K = Clamp(keyline); } /// @@ -78,59 +58,48 @@ private CmykColor(float cyan, float magenta, float yellow, float keyline) private CmykColor(Color color) { CmykColor cmykColor = color; - this.c = cmykColor.c; - this.m = cmykColor.m; - this.y = cmykColor.y; - this.k = cmykColor.k; + this.C = cmykColor.C; + this.M = cmykColor.M; + this.Y = cmykColor.Y; + this.K = cmykColor.K; } /// /// Gets the cyan component. /// A value ranging between 0 and 100. /// - public float C => this.c; + public float C { get; } /// /// Gets the magenta component. /// A value ranging between 0 and 100. /// - public float M => this.m; + public float M { get; } /// /// Gets the yellow component. /// A value ranging between 0 and 100. /// - public float Y => this.y; + public float Y { get; } /// /// Gets the keyline black component. /// A value ranging between 0 and 100. /// - public float K => this.k; + public float K { get; } /// /// Creates a structure from the four 32-bit CMYK /// components (cyan, magenta, yellow, and keyline) values. /// - /// - /// The cyan component. - /// - /// - /// The magenta component. - /// - /// - /// The yellow component. - /// - /// - /// The keyline black component. - /// + /// The cyan component. + /// The magenta component. + /// The yellow component. + /// The keyline black component. /// /// The . /// - public static CmykColor FromCmykColor(float cyan, float magenta, float yellow, float keyline) - { - return new CmykColor(cyan, magenta, yellow, keyline); - } + public static CmykColor FromCmykColor(float cyan, float magenta, float yellow, float keyline) => new CmykColor(cyan, magenta, yellow, keyline); /// /// Creates a structure from the specified structure @@ -141,10 +110,7 @@ public static CmykColor FromCmykColor(float cyan, float magenta, float yellow, f /// /// The . /// - public static CmykColor FromColor(Color color) - { - return new CmykColor(color); - } + public static CmykColor FromColor(Color color) => new CmykColor(color); /// /// Allows the implicit conversion of an instance of to a @@ -186,10 +152,7 @@ public static implicit operator CmykColor(Color color) /// /// An instance of . /// - public static implicit operator CmykColor(RgbaColor rgbaColor) - { - return FromColor(rgbaColor); - } + public static implicit operator CmykColor(RgbaColor rgbaColor) => FromColor(rgbaColor); /// /// Allows the implicit conversion of an instance of to a @@ -219,9 +182,9 @@ public static implicit operator CmykColor(YCbCrColor ycbcrColor) /// public static implicit operator Color(CmykColor cmykColor) { - int red = Convert.ToInt32((1 - (cmykColor.c / 100)) * (1 - (cmykColor.k / 100)) * 255.0); - int green = Convert.ToInt32((1 - (cmykColor.m / 100)) * (1 - (cmykColor.k / 100)) * 255.0); - int blue = Convert.ToInt32((1 - (cmykColor.y / 100)) * (1 - (cmykColor.k / 100)) * 255.0); + int red = Convert.ToInt32((1 - (cmykColor.C / 100)) * (1 - (cmykColor.K / 100)) * 255.0); + int green = Convert.ToInt32((1 - (cmykColor.M / 100)) * (1 - (cmykColor.K / 100)) * 255.0); + int blue = Convert.ToInt32((1 - (cmykColor.Y / 100)) * (1 - (cmykColor.K / 100)) * 255.0); return Color.FromArgb(red.ToByte(), green.ToByte(), blue.ToByte()); } @@ -237,9 +200,9 @@ public static implicit operator Color(CmykColor cmykColor) /// public static implicit operator RgbaColor(CmykColor cmykColor) { - int red = Convert.ToInt32((1 - (cmykColor.c / 100)) * (1 - (cmykColor.k / 100)) * 255.0); - int green = Convert.ToInt32((1 - (cmykColor.m / 100)) * (1 - (cmykColor.k / 100)) * 255.0); - int blue = Convert.ToInt32((1 - (cmykColor.y / 100)) * (1 - (cmykColor.k / 100)) * 255.0); + int red = Convert.ToInt32((1 - (cmykColor.C / 100)) * (1 - (cmykColor.K / 100)) * 255.0); + int green = Convert.ToInt32((1 - (cmykColor.M / 100)) * (1 - (cmykColor.K / 100)) * 255.0); + int blue = Convert.ToInt32((1 - (cmykColor.Y / 100)) * (1 - (cmykColor.K / 100)) * 255.0); return RgbaColor.FromRgba(red.ToByte(), green.ToByte(), blue.ToByte()); } @@ -253,10 +216,7 @@ public static implicit operator RgbaColor(CmykColor cmykColor) /// /// An instance of . /// - public static implicit operator YCbCrColor(CmykColor cmykColor) - { - return YCbCrColor.FromColor(cmykColor); - } + public static implicit operator YCbCrColor(CmykColor cmykColor) => YCbCrColor.FromColor(cmykColor); /// /// Allows the implicit conversion of an instance of to a @@ -268,10 +228,7 @@ public static implicit operator YCbCrColor(CmykColor cmykColor) /// /// An instance of . /// - public static implicit operator HslaColor(CmykColor cmykColor) - { - return HslaColor.FromColor(cmykColor); - } + public static implicit operator HslaColor(CmykColor cmykColor) => HslaColor.FromColor(cmykColor); /// /// Returns a that represents this instance. @@ -296,15 +253,7 @@ public override string ToString() /// true if and this instance are the same type and represent the same value; otherwise, false. /// /// Another object to compare to. - public override bool Equals(object obj) - { - if (obj is CmykColor) - { - return this.Equals((CmykColor)obj); - } - - return false; - } + public override bool Equals(object obj) => obj is CmykColor cmykColor && this.Equals(cmykColor); /// /// Indicates whether the current object is equal to another object of the same type. @@ -339,10 +288,7 @@ public override int GetHashCode() /// /// The sanitized . /// - private static float Clamp(float value) - { - return ImageMaths.Clamp(value, 0, 100); - } + private static float Clamp(float value) => ImageMaths.Clamp(value, 0, 100); /// /// Returns a value indicating whether the current instance is empty. @@ -353,8 +299,8 @@ private static float Clamp(float value) private bool IsEmpty() { const float Epsilon = .0001f; - return Math.Abs(this.c - 0) <= Epsilon && Math.Abs(this.m - 0) <= Epsilon && - Math.Abs(this.y - 0) <= Epsilon && Math.Abs(this.k - 0) <= Epsilon; + return Math.Abs(this.C - 0) <= Epsilon && Math.Abs(this.M - 0) <= Epsilon + && Math.Abs(this.Y - 0) <= Epsilon && Math.Abs(this.K - 0) <= Epsilon; } } } diff --git a/src/ImageProcessor/Imaging/Colors/Color32.cs b/src/ImageProcessor/Imaging/Colors/Color32.cs index 7f343b47e..4e01e031e 100644 --- a/src/ImageProcessor/Imaging/Colors/Color32.cs +++ b/src/ImageProcessor/Imaging/Colors/Color32.cs @@ -78,18 +78,12 @@ public Color32(byte alpha, byte red, byte green, byte blue) /// The combined color components. /// public Color32(int argb) - : this() - { - this.Argb = argb; - } + : this() => this.Argb = argb; /// /// Gets the color for this Color32 object /// - public Color Color - { - get { return Color.FromArgb(this.A, this.R, this.G, this.B); } - } + public Color Color => Color.FromArgb(this.A, this.R, this.G, this.B); /// /// Indicates whether this instance and a specified object are equal. @@ -98,25 +92,14 @@ public Color Color /// true if and this instance are the same type and represent the same value; otherwise, false. /// /// Another object to compare to. - public override bool Equals(object obj) - { - if (obj is Color32) - { - return this.Equals((Color32)obj); - } - - return false; - } + public override bool Equals(object obj) => obj is Color32 color32 && this.Equals(color32); /// /// Indicates whether the current object is equal to another object of the same type. /// /// An object to compare with this object. /// true if the current object is equal to the parameter; otherwise, false. - public bool Equals(Color32 other) - { - return this.Argb.Equals(other.Argb); - } + public bool Equals(Color32 other) => this.Argb.Equals(other.Argb); /// /// Returns the hash code for this instance. @@ -124,10 +107,7 @@ public bool Equals(Color32 other) /// /// A 32-bit signed integer that is the hash code for this instance. /// - public override int GetHashCode() - { - return this.GetHashCode(this); - } + public override int GetHashCode() => this.GetHashCode(this); /// /// Returns the hash code for the given instance. @@ -145,8 +125,7 @@ private int GetHashCode(Color32 obj) int hashCode = obj.B.GetHashCode(); hashCode = (hashCode * 397) ^ obj.G.GetHashCode(); hashCode = (hashCode * 397) ^ obj.R.GetHashCode(); - hashCode = (hashCode * 397) ^ obj.A.GetHashCode(); - return hashCode; + return (hashCode * 397) ^ obj.A.GetHashCode(); } } } diff --git a/src/ImageProcessor/Imaging/Colors/ColorExtensions.cs b/src/ImageProcessor/Imaging/Colors/ColorExtensions.cs index 3c159c4b2..b9a80260c 100644 --- a/src/ImageProcessor/Imaging/Colors/ColorExtensions.cs +++ b/src/ImageProcessor/Imaging/Colors/ColorExtensions.cs @@ -23,12 +23,8 @@ internal static class ColorExtensions /// /// Adds colors together using the RGBA color format. /// - /// - /// The color to add to. - /// - /// - /// The colors to add to the initial one. - /// + /// The color to add to. + /// The colors to add to the initial one. /// /// The combined . /// @@ -44,7 +40,7 @@ public static Color Add(this Color color, params Color[] colors) { if (addColor.A > 0) { - counter += 1; + counter++; red += addColor.R; green += addColor.G; blue += addColor.B; diff --git a/src/ImageProcessor/Imaging/Colors/HSLAColor.cs b/src/ImageProcessor/Imaging/Colors/HSLAColor.cs index 242b8c129..23e9483ff 100644 --- a/src/ImageProcessor/Imaging/Colors/HSLAColor.cs +++ b/src/ImageProcessor/Imaging/Colors/HSLAColor.cs @@ -16,36 +16,13 @@ namespace ImageProcessor.Imaging.Colors /// Represents an HSLA (hue, saturation, luminosity, alpha) color. /// Adapted from /// - public struct HslaColor : IEquatable + public readonly struct HslaColor : IEquatable { /// /// Represents a that is null. /// public static readonly HslaColor Empty = new HslaColor(); - // Private data members below are on scale 0-1 - // They are scaled for use externally based on scale - - /// - /// The hue component. - /// - private readonly float h; - - /// - /// The luminosity component. - /// - private readonly float l; - - /// - /// The saturation component. - /// - private readonly float s; - - /// - /// The alpha component. - /// - private readonly float a; - /// /// Initializes a new instance of the struct. /// @@ -55,10 +32,10 @@ public struct HslaColor : IEquatable /// The alpha component. private HslaColor(float hue, float saturation, float luminosity, float alpha) { - this.h = Clamp(hue); - this.s = Clamp(saturation); - this.l = Clamp(luminosity); - this.a = Clamp(alpha); + this.H = Clamp(hue); + this.S = Clamp(saturation); + this.L = Clamp(luminosity); + this.A = Clamp(alpha); } /// @@ -70,35 +47,35 @@ private HslaColor(float hue, float saturation, float luminosity, float alpha) private HslaColor(Color color) { HslaColor hslColor = color; - this.h = hslColor.h; - this.s = hslColor.s; - this.l = hslColor.l; - this.a = hslColor.a; + this.H = hslColor.H; + this.S = hslColor.S; + this.L = hslColor.L; + this.A = hslColor.A; } /// /// Gets the hue component. /// A value ranging between 0 and 1. /// - public float H => this.h; + public float H { get; } /// /// Gets the luminosity component. /// A value ranging between 0 and 1. /// - public float L => this.l; + public float L { get; } /// /// Gets the saturation component. /// A value ranging between 0 and 1. /// - public float S => this.s; + public float S { get; } /// /// Gets the alpha component. /// A value ranging between 0 and 1. /// - public float A => this.a; + public float A { get; } /// /// Creates a structure from the three 32-bit HSLA @@ -110,10 +87,7 @@ private HslaColor(Color color) /// /// The . /// - public static HslaColor FromHslaColor(float hue, float saturation, float luminosity) - { - return new HslaColor(hue, saturation, luminosity, 1.0f); - } + public static HslaColor FromHslaColor(float hue, float saturation, float luminosity) => new HslaColor(hue, saturation, luminosity, 1.0f); /// /// Creates a structure from the four 32-bit HSLA @@ -126,10 +100,7 @@ public static HslaColor FromHslaColor(float hue, float saturation, float luminos /// /// The . /// - public static HslaColor FromHslaColor(float hue, float saturation, float luminosity, float alpha) - { - return new HslaColor(hue, saturation, luminosity, alpha); - } + public static HslaColor FromHslaColor(float hue, float saturation, float luminosity, float alpha) => new HslaColor(hue, saturation, luminosity, alpha); /// /// Creates a structure from the specified structure @@ -140,10 +111,7 @@ public static HslaColor FromHslaColor(float hue, float saturation, float luminos /// /// The . /// - public static HslaColor FromColor(Color color) - { - return new HslaColor(color); - } + public static HslaColor FromColor(Color color) => new HslaColor(color); /// /// Allows the implicit conversion of an instance of to a @@ -157,13 +125,11 @@ public static HslaColor FromColor(Color color) /// public static implicit operator HslaColor(Color color) { - HslaColor hslColor = new HslaColor( + return new HslaColor( color.GetHue() / 360.0f, color.GetSaturation(), color.GetBrightness(), color.A / 255f); - - return hslColor; } /// @@ -176,10 +142,7 @@ public static implicit operator HslaColor(Color color) /// /// An instance of . /// - public static implicit operator HslaColor(RgbaColor rgbaColor) - { - return FromColor(rgbaColor); - } + public static implicit operator HslaColor(RgbaColor rgbaColor) => FromColor(rgbaColor); /// /// Allows the implicit conversion of an instance of to a @@ -194,18 +157,16 @@ public static implicit operator HslaColor(RgbaColor rgbaColor) public static implicit operator HslaColor(YCbCrColor ycbcrColor) { Color color = ycbcrColor; - HslaColor hslColor = new HslaColor( + return new HslaColor( color.GetHue() / 360.0f, color.GetSaturation(), color.GetBrightness(), color.A / 255f); - - return hslColor; } /// /// Allows the implicit conversion of an instance of to a - /// . + /// . /// /// /// The instance of to convert. @@ -216,25 +177,25 @@ public static implicit operator HslaColor(YCbCrColor ycbcrColor) public static implicit operator Color(HslaColor hslaColor) { float r = 0, g = 0, b = 0; - if (Math.Abs(hslaColor.l - 0) > .0001) + if (Math.Abs(hslaColor.L - 0) > .0001) { - if (Math.Abs(hslaColor.s - 0) <= .0001) + if (Math.Abs(hslaColor.S - 0) <= .0001) { - r = g = b = hslaColor.l; + r = g = b = hslaColor.L; } else { float temp2 = GetTemp2(hslaColor); - float temp1 = (2.0f * hslaColor.l) - temp2; + float temp1 = (2.0f * hslaColor.L) - temp2; - r = GetColorComponent(temp1, temp2, hslaColor.h + (1.0f / 3.0f)); - g = GetColorComponent(temp1, temp2, hslaColor.h); - b = GetColorComponent(temp1, temp2, hslaColor.h - (1.0f / 3.0f)); + r = GetColorComponent(temp1, temp2, hslaColor.H + (1.0f / 3.0f)); + g = GetColorComponent(temp1, temp2, hslaColor.H); + b = GetColorComponent(temp1, temp2, hslaColor.H - (1.0f / 3.0f)); } } return Color.FromArgb( - Convert.ToInt32(255 * hslaColor.a), + Convert.ToInt32(255 * hslaColor.A), Convert.ToInt32(255 * r), Convert.ToInt32(255 * g), Convert.ToInt32(255 * b)); @@ -250,10 +211,7 @@ public static implicit operator Color(HslaColor hslaColor) /// /// An instance of . /// - public static implicit operator YCbCrColor(HslaColor hslaColor) - { - return YCbCrColor.FromColor(hslaColor); - } + public static implicit operator YCbCrColor(HslaColor hslaColor) => YCbCrColor.FromColor(hslaColor); /// /// Allows the implicit conversion of an instance of to a @@ -265,10 +223,7 @@ public static implicit operator YCbCrColor(HslaColor hslaColor) /// /// An instance of . /// - public static implicit operator CmykColor(HslaColor hslaColor) - { - return CmykColor.FromColor(hslaColor); - } + public static implicit operator CmykColor(HslaColor hslaColor) => CmykColor.FromColor(hslaColor); /// /// Returns a that represents this instance. @@ -293,15 +248,7 @@ public override string ToString() /// true if and this instance are the same type and represent the same value; otherwise, false. /// /// Another object to compare to. - public override bool Equals(object obj) - { - if (obj is HslaColor) - { - return this.Equals((HslaColor)obj); - } - - return false; - } + public override bool Equals(object obj) => obj is HslaColor hslaColor && this.Equals(hslaColor); /// /// Indicates whether the current object is equal to another object of the same type. @@ -372,19 +319,16 @@ private static float GetColorComponent(float temp1, float temp2, float temp3) /// /// The . /// - private static float GetTemp2(HslaColor hslColor) + private static float GetTemp2(in HslaColor hslColor) { - float temp2; - if (hslColor.l <= 0.5) + if (hslColor.L <= 0.5) { - temp2 = hslColor.l * (1.0f + hslColor.s); + return hslColor.L * (1.0f + hslColor.S); } else { - temp2 = hslColor.l + hslColor.s - (hslColor.l * hslColor.s); + return hslColor.L + hslColor.S - (hslColor.L * hslColor.S); } - - return temp2; } /// @@ -400,11 +344,11 @@ private static float MoveIntoRange(float temp3) { if (temp3 < 0.0) { - temp3 += 1.0f; + temp3++; } else if (temp3 > 1.0) { - temp3 -= 1.0f; + temp3--; } return temp3; @@ -419,10 +363,7 @@ private static float MoveIntoRange(float temp3) /// /// The sanitized . /// - private static float Clamp(float value) - { - return ImageMaths.Clamp(value, 0, 1); - } + private static float Clamp(float value) => ImageMaths.Clamp(value, 0, 1); /// /// Returns a value indicating whether the current instance is empty. @@ -433,8 +374,8 @@ private static float Clamp(float value) private bool IsEmpty() { const float Epsilon = .0001f; - return Math.Abs(this.h - 0) <= Epsilon && Math.Abs(this.s - 0) <= Epsilon && - Math.Abs(this.l - 0) <= Epsilon && Math.Abs(this.a - 0) <= Epsilon; + return Math.Abs(this.H - 0) <= Epsilon && Math.Abs(this.S - 0) <= Epsilon + && Math.Abs(this.L - 0) <= Epsilon && Math.Abs(this.A - 0) <= Epsilon; } } } \ No newline at end of file diff --git a/src/ImageProcessor/Imaging/Colors/RGBAColor.cs b/src/ImageProcessor/Imaging/Colors/RGBAColor.cs index 3bcf7e7d2..3a4bd6e3a 100644 --- a/src/ImageProcessor/Imaging/Colors/RGBAColor.cs +++ b/src/ImageProcessor/Imaging/Colors/RGBAColor.cs @@ -13,33 +13,13 @@ namespace ImageProcessor.Imaging.Colors /// /// Represents an RGBA (red, green, blue, alpha) color. /// - public struct RgbaColor : IEquatable + public readonly struct RgbaColor : IEquatable { /// /// Represents a that is null. /// public static readonly RgbaColor Empty = new RgbaColor(); - /// - /// The red component. - /// - private readonly byte r; - - /// - /// The green component. - /// - private readonly byte g; - - /// - /// The blue component. - /// - private readonly byte b; - - /// - /// The alpha component. - /// - private readonly byte a; - /// /// Initializes a new instance of the struct. /// @@ -57,10 +37,10 @@ public struct RgbaColor : IEquatable /// private RgbaColor(byte red, byte green, byte blue, byte alpha) { - this.r = red; - this.g = green; - this.b = blue; - this.a = alpha; + this.R = red; + this.G = green; + this.B = blue; + this.A = alpha; } /// @@ -71,31 +51,31 @@ private RgbaColor(byte red, byte green, byte blue, byte alpha) /// private RgbaColor(Color color) { - this.r = color.R; - this.g = color.G; - this.b = color.B; - this.a = color.A; + this.R = color.R; + this.G = color.G; + this.B = color.B; + this.A = color.A; } /// /// Gets the red component. /// - public byte R => this.r; + public byte R { get; } /// /// Gets the green component. /// - public byte G => this.g; + public byte G { get; } /// /// Gets the blue component. /// - public byte B => this.b; + public byte B { get; } /// /// Gets the alpha component. /// - public byte A => this.a; + public byte A { get; } /// /// Creates a structure from the three 8-bit RGBA @@ -107,10 +87,7 @@ private RgbaColor(Color color) /// /// The . /// - public static RgbaColor FromRgba(byte red, byte green, byte blue) - { - return new RgbaColor(red, green, blue, 255); - } + public static RgbaColor FromRgba(byte red, byte green, byte blue) => new RgbaColor(red, green, blue, 255); /// /// Creates a structure from the four 8-bit RGBA @@ -123,10 +100,7 @@ public static RgbaColor FromRgba(byte red, byte green, byte blue) /// /// The . /// - public static RgbaColor FromRgba(byte red, byte green, byte blue, byte alpha) - { - return new RgbaColor(red, green, blue, alpha); - } + public static RgbaColor FromRgba(byte red, byte green, byte blue, byte alpha) => new RgbaColor(red, green, blue, alpha); /// /// Creates a structure from the specified structure @@ -137,10 +111,7 @@ public static RgbaColor FromRgba(byte red, byte green, byte blue, byte alpha) /// /// The . /// - public static RgbaColor FromColor(Color color) - { - return new RgbaColor(color); - } + public static RgbaColor FromColor(Color color) => new RgbaColor(color); /// /// Allows the implicit conversion of an instance of to a @@ -152,10 +123,7 @@ public static RgbaColor FromColor(Color color) /// /// An instance of . /// - public static implicit operator RgbaColor(Color color) - { - return FromColor(color); - } + public static implicit operator RgbaColor(Color color) => FromColor(color); /// /// Allows the implicit conversion of an instance of to a @@ -167,10 +135,7 @@ public static implicit operator RgbaColor(Color color) /// /// An instance of . /// - public static implicit operator RgbaColor(HslaColor hslaColor) - { - return FromColor(hslaColor); - } + public static implicit operator RgbaColor(HslaColor hslaColor) => FromColor(hslaColor); /// /// Allows the implicit conversion of an instance of to a @@ -182,10 +147,7 @@ public static implicit operator RgbaColor(HslaColor hslaColor) /// /// An instance of . /// - public static implicit operator RgbaColor(YCbCrColor ycbcrColor) - { - return FromColor(ycbcrColor); - } + public static implicit operator RgbaColor(YCbCrColor ycbcrColor) => FromColor(ycbcrColor); /// /// Allows the implicit conversion of an instance of to a @@ -197,10 +159,7 @@ public static implicit operator RgbaColor(YCbCrColor ycbcrColor) /// /// An instance of . /// - public static implicit operator Color(RgbaColor rgbaColor) - { - return Color.FromArgb(rgbaColor.A, rgbaColor.R, rgbaColor.G, rgbaColor.B); - } + public static implicit operator Color(RgbaColor rgbaColor) => Color.FromArgb(rgbaColor.A, rgbaColor.R, rgbaColor.G, rgbaColor.B); /// /// Allows the implicit conversion of an instance of to a @@ -212,10 +171,7 @@ public static implicit operator Color(RgbaColor rgbaColor) /// /// An instance of . /// - public static implicit operator YCbCrColor(RgbaColor rgbaColor) - { - return YCbCrColor.FromColor(rgbaColor); - } + public static implicit operator YCbCrColor(RgbaColor rgbaColor) => YCbCrColor.FromColor(rgbaColor); /// /// Returns a that represents this instance. @@ -240,15 +196,7 @@ public override string ToString() /// true if and this instance are the same type and represent the same value; otherwise, false. /// /// Another object to compare to. - public override bool Equals(object obj) - { - if (obj is RgbaColor) - { - return this.Equals((RgbaColor)obj); - } - - return false; - } + public override bool Equals(object obj) => obj is RgbaColor rgbaColor && this.Equals(rgbaColor); /// /// Indicates whether the current object is equal to another object of the same type. diff --git a/src/ImageProcessor/Imaging/Colors/YCbCrColor.cs b/src/ImageProcessor/Imaging/Colors/YCbCrColor.cs index 11bd6a49b..7c969c001 100644 --- a/src/ImageProcessor/Imaging/Colors/YCbCrColor.cs +++ b/src/ImageProcessor/Imaging/Colors/YCbCrColor.cs @@ -20,28 +20,13 @@ namespace ImageProcessor.Imaging.Colors /// Represents an YCbCr (luminance, chroma, chroma) color conforming to the ITU-R BT.601 standard used in digital imaging systems. /// /// - public struct YCbCrColor : IEquatable + public readonly struct YCbCrColor : IEquatable { /// /// Represents a that is null. /// public static readonly YCbCrColor Empty = new YCbCrColor(); - /// - /// The y luminance component. - /// - private readonly float y; - - /// - /// The u chroma component. - /// - private readonly float cb; - - /// - /// The v chroma component. - /// - private readonly float cr; - /// /// Initializes a new instance of the struct. /// @@ -50,28 +35,28 @@ public struct YCbCrColor : IEquatable /// The v chroma component. private YCbCrColor(float y, float cb, float cr) { - this.y = ImageMaths.Clamp(y, 0, 255); - this.cb = ImageMaths.Clamp(cb, 0, 255); - this.cr = ImageMaths.Clamp(cr, 0, 255); + this.Y = ImageMaths.Clamp(y, 0, 255); + this.Cb = ImageMaths.Clamp(cb, 0, 255); + this.Cr = ImageMaths.Clamp(cr, 0, 255); } /// /// Gets the Y luminance component. /// A value ranging between 0 and 255. /// - public float Y => this.y; + public float Y { get; } /// /// Gets the U chroma component. /// A value ranging between 0 and 255. /// - public float Cb => this.cb; + public float Cb { get; } /// /// Gets the V chroma component. /// A value ranging between 0 and 255. /// - public float Cr => this.cr; + public float Cr { get; } /// /// Creates a structure from the three 32-bit YCbCr @@ -83,10 +68,7 @@ private YCbCrColor(float y, float cb, float cr) /// /// The . /// - public static YCbCrColor FromYCbCr(float y, float cb, float cr) - { - return new YCbCrColor(y, cb, cr); - } + public static YCbCrColor FromYCbCr(float y, float cb, float cr) => new YCbCrColor(y, cb, cr); /// /// Creates a structure from the specified structure @@ -120,10 +102,7 @@ public static YCbCrColor FromColor(Color color) /// /// An instance of . /// - public static implicit operator YCbCrColor(Color color) - { - return FromColor(color); - } + public static implicit operator YCbCrColor(Color color) => FromColor(color); /// /// Allows the implicit conversion of an instance of to a @@ -135,10 +114,7 @@ public static implicit operator YCbCrColor(Color color) /// /// An instance of . /// - public static implicit operator YCbCrColor(RgbaColor rgbaColor) - { - return FromColor(rgbaColor); - } + public static implicit operator YCbCrColor(RgbaColor rgbaColor) => FromColor(rgbaColor); /// /// Allows the implicit conversion of an instance of to a @@ -150,10 +126,7 @@ public static implicit operator YCbCrColor(RgbaColor rgbaColor) /// /// An instance of . /// - public static implicit operator YCbCrColor(HslaColor hslaColor) - { - return FromColor(hslaColor); - } + public static implicit operator YCbCrColor(HslaColor hslaColor) => FromColor(hslaColor); /// /// Allows the implicit conversion of an instance of to a @@ -201,15 +174,7 @@ public override string ToString() /// true if and this instance are the same type and represent the same value; otherwise, false. /// /// Another object to compare to. - public override bool Equals(object obj) - { - if (obj is YCbCrColor) - { - return this.Equals((YCbCrColor)obj); - } - - return false; - } + public override bool Equals(object obj) => obj is YCbCrColor yCbCrColor && this.Equals(yCbCrColor); /// /// Indicates whether the current object is equal to another object of the same type. @@ -244,8 +209,8 @@ public override int GetHashCode() private bool IsEmpty() { const float Epsilon = .0001f; - return Math.Abs(this.y - 0) <= Epsilon && Math.Abs(this.cb - 0) <= Epsilon && - Math.Abs(this.cr - 0) <= Epsilon; + return Math.Abs(this.Y - 0) <= Epsilon && Math.Abs(this.Cb - 0) <= Epsilon + && Math.Abs(this.Cr - 0) <= Epsilon; } } } diff --git a/src/ImageProcessor/Imaging/ComputerArchitectureInfo.cs b/src/ImageProcessor/Imaging/ComputerArchitectureInfo.cs index d8dcc3837..673524963 100644 --- a/src/ImageProcessor/Imaging/ComputerArchitectureInfo.cs +++ b/src/ImageProcessor/Imaging/ComputerArchitectureInfo.cs @@ -21,9 +21,6 @@ public class ComputerArchitectureInfo : IComputerArchitectureInfo /// Returns a value indicating whether the current computer architecture is little endian. /// /// The - public bool IsLittleEndian() - { - return BitConverter.IsLittleEndian; - } + public bool IsLittleEndian() => BitConverter.IsLittleEndian; } } \ No newline at end of file diff --git a/src/ImageProcessor/Imaging/Convolution.cs b/src/ImageProcessor/Imaging/Convolution.cs index 9c52e181f..60c49e84c 100644 --- a/src/ImageProcessor/Imaging/Convolution.cs +++ b/src/ImageProcessor/Imaging/Convolution.cs @@ -41,10 +41,7 @@ public Convolution() /// /// The standard deviation. /// - public Convolution(double standardDeviation) - { - this.standardDeviation = standardDeviation; - } + public Convolution(double standardDeviation) => this.standardDeviation = standardDeviation; /// /// Gets or sets the threshold to add to the weighted sum. @@ -104,7 +101,7 @@ public Convolution(double standardDeviation) // Normalise kernel so that the sum of all weights equals 1 for (int i = 0; i < kernelSize; i++) { - kernel[i, 0] = kernel[i, 0] / sum; + kernel[i, 0] /= sum; } return kernel; @@ -250,12 +247,12 @@ public Bitmap ProcessKernel(Bitmap source, double[,] kernel, bool fixGamma) { int width = source.Width; int height = source.Height; - Bitmap destination = new Bitmap(width, height, PixelFormat.Format32bppPArgb); + var destination = new Bitmap(width, height, PixelFormat.Format32bppPArgb); destination.SetResolution(source.HorizontalResolution, source.VerticalResolution); - using (FastBitmap sourceBitmap = new FastBitmap(source)) + using (var sourceBitmap = new FastBitmap(source)) { - using (FastBitmap destinationBitmap = new FastBitmap(destination)) + using (var destinationBitmap = new FastBitmap(destination)) { int kernelLength = kernel.GetLength(0); int radius = kernelLength >> 1; @@ -365,7 +362,7 @@ public Bitmap ProcessKernel(Bitmap source, double[,] kernel, bool fixGamma) blue += threshold; alpha += threshold; - Color destinationColor = Color.FromArgb(alpha.ToByte(), red.ToByte(), green.ToByte(), blue.ToByte()); + var destinationColor = Color.FromArgb(alpha.ToByte(), red.ToByte(), green.ToByte(), blue.ToByte()); if (fixGamma) { @@ -400,7 +397,7 @@ public Bitmap ProcessKernel(Bitmap source, double[,] kernel, bool fixGamma) int kernelSize = kernelLength * kernelLength; int threshold = this.Threshold; - Color[,] destination = new Color[width, height]; + var destination = new Color[width, height]; // For each line Parallel.For( @@ -505,7 +502,7 @@ public Bitmap ProcessKernel(Bitmap source, double[,] kernel, bool fixGamma) blue += threshold; alpha += threshold; - Color destinationColor = Color.FromArgb(alpha.ToByte(), red.ToByte(), green.ToByte(), blue.ToByte()); + var destinationColor = Color.FromArgb(alpha.ToByte(), red.ToByte(), green.ToByte(), blue.ToByte()); if (fixGamma) { @@ -547,7 +544,7 @@ private double Gaussian(double x) private double Gaussian2D(double x, double y) { const double Numerator = 1.0; - double denominator = (2 * Math.PI) * Math.Pow(this.standardDeviation, 2); + double denominator = 2 * Math.PI * Math.Pow(this.standardDeviation, 2); double exponentNumerator = (-x * x) + (-y * y); double exponentDenominator = 2 * Math.Pow(this.standardDeviation, 2); diff --git a/src/ImageProcessor/Imaging/CropLayer.cs b/src/ImageProcessor/Imaging/CropLayer.cs index 136e3331d..f1fdee181 100644 --- a/src/ImageProcessor/Imaging/CropLayer.cs +++ b/src/ImageProcessor/Imaging/CropLayer.cs @@ -81,9 +81,7 @@ public CropLayer(float left, float top, float right, float bottom, CropMode crop /// public override bool Equals(object obj) { - CropLayer cropLayer = obj as CropLayer; - - if (cropLayer == null) + if (!(obj is CropLayer cropLayer)) { return false; } @@ -110,8 +108,7 @@ public override int GetHashCode() hashCode = (hashCode * 397) ^ this.Top.GetHashCode(); hashCode = (hashCode * 397) ^ this.Right.GetHashCode(); hashCode = (hashCode * 397) ^ this.Bottom.GetHashCode(); - hashCode = (hashCode * 397) ^ (int)this.CropMode; - return hashCode; + return (hashCode * 397) ^ (int)this.CropMode; } } } diff --git a/src/ImageProcessor/Imaging/FastBitmap.cs b/src/ImageProcessor/Imaging/FastBitmap.cs index 884fd06b6..02b0bd2b4 100644 --- a/src/ImageProcessor/Imaging/FastBitmap.cs +++ b/src/ImageProcessor/Imaging/FastBitmap.cs @@ -51,16 +51,6 @@ public unsafe class FastBitmap : IDisposable /// private readonly Bitmap bitmap; - /// - /// The width of the bitmap. - /// - private readonly int width; - - /// - /// The height of the bitmap. - /// - private readonly int height; - /// /// The color channel - blue, green, red, alpha. /// @@ -200,17 +190,17 @@ public FastBitmap(Image bitmap, bool computeIntegrals, bool computeTilted) int pixelFormat = (int)bitmap.PixelFormat; // Check image format - if (!(pixelFormat == Format8bppIndexed || - pixelFormat == Format24bppRgb || - pixelFormat == Format32bppArgb || - pixelFormat == Format32bppPArgb)) + if (!(pixelFormat == Format8bppIndexed + || pixelFormat == Format24bppRgb + || pixelFormat == Format32bppArgb + || pixelFormat == Format32bppPArgb)) { throw new ArgumentException("Only 8bpp, 24bpp and 32bpp images are supported."); } this.bitmap = (Bitmap)bitmap; - this.width = this.bitmap.Width; - this.height = this.bitmap.Height; + this.Width = this.bitmap.Width; + this.Height = this.bitmap.Height; this.channel = pixelFormat == Format8bppIndexed ? 0 : 2; this.computeIntegrals = computeIntegrals; @@ -222,12 +212,12 @@ public FastBitmap(Image bitmap, bool computeIntegrals, bool computeTilted) /// /// Gets the width, in pixels of the . /// - public int Width => this.width; + public int Width { get; } /// /// Gets the height, in pixels of the . /// - public int Height => this.height; + public int Height { get; } /// /// Gets the Integral Image for values' sum. @@ -268,10 +258,7 @@ public FastBitmap(Image bitmap, bool computeIntegrals, bool computeTilted) /// /// An instance of . /// - public static implicit operator Image(FastBitmap fastBitmap) - { - return fastBitmap.bitmap; - } + public static implicit operator Image(FastBitmap fastBitmap) => fastBitmap.bitmap; /// /// Allows the implicit conversion of an instance of to a @@ -283,10 +270,7 @@ public static implicit operator Image(FastBitmap fastBitmap) /// /// An instance of . /// - public static implicit operator Bitmap(FastBitmap fastBitmap) - { - return fastBitmap.bitmap; - } + public static implicit operator Bitmap(FastBitmap fastBitmap) => fastBitmap.bitmap; /// /// Gets the color at the specified pixel of the . @@ -297,14 +281,14 @@ public static implicit operator Bitmap(FastBitmap fastBitmap) public Color GetPixel(int x, int y) { #if DEBUG - if ((x < 0) || (x >= this.width)) + if ((x < 0) || (x >= this.Width)) { - throw new ArgumentOutOfRangeException("x", "Value cannot be less than zero or greater than the bitmap width."); + throw new ArgumentOutOfRangeException(nameof(x), "Value cannot be less than zero or greater than the bitmap width."); } - if ((y < 0) || (y >= this.height)) + if ((y < 0) || (y >= this.Height)) { - throw new ArgumentOutOfRangeException("y", "Value cannot be less than zero or greater than the bitmap height."); + throw new ArgumentOutOfRangeException(nameof(y), "Value cannot be less than zero or greater than the bitmap height."); } #endif Color32* data = this[x, y]; @@ -323,14 +307,14 @@ public Color GetPixel(int x, int y) public void SetPixel(int x, int y, Color color) { #if DEBUG - if ((x < 0) || (x >= this.width)) + if ((x < 0) || (x >= this.Width)) { - throw new ArgumentOutOfRangeException("x", "Value cannot be less than zero or greater than the bitmap width."); + throw new ArgumentOutOfRangeException(nameof(x), "Value cannot be less than zero or greater than the bitmap width."); } - if ((y < 0) || (y >= this.height)) + if ((y < 0) || (y >= this.Height)) { - throw new ArgumentOutOfRangeException("y", "Value cannot be less than zero or greater than the bitmap height."); + throw new ArgumentOutOfRangeException(nameof(y), "Value cannot be less than zero or greater than the bitmap height."); } #endif Color32* data = this[x, y]; @@ -424,9 +408,7 @@ public void Dispose() /// The object to compare with the current object. public override bool Equals(object obj) { - FastBitmap fastBitmap = obj as FastBitmap; - - if (fastBitmap == null) + if (!(obj is FastBitmap fastBitmap)) { return false; } @@ -440,10 +422,7 @@ public override bool Equals(object obj) /// /// A hash code for the current . /// - public override int GetHashCode() - { - return this.bitmap.GetHashCode(); - } + public override int GetHashCode() => this.bitmap.GetHashCode(); /// /// Disposes the object and frees resources for the Garbage Collector. @@ -491,7 +470,7 @@ protected virtual void Dispose(bool disposing) /// private void LockBitmap() { - Rectangle bounds = new Rectangle(Point.Empty, this.bitmap.Size); + var bounds = new Rectangle(Point.Empty, this.bitmap.Size); // Figure out the number of bytes in a row. This is rounded up to be a multiple // of 4 bytes, since a scan line in an image must always be a multiple of 4 bytes @@ -512,11 +491,11 @@ private void LockBitmap() if (this.computeIntegrals) { // Allocate values for integral image calculation. - this.normalWidth = this.width + 1; - int normalHeight = this.height + 1; + this.normalWidth = this.Width + 1; + int normalHeight = this.Height + 1; - this.tiltedWidth = this.width + 2; - int tiltedHeight = this.height + 2; + this.tiltedWidth = this.Width + 2; + int tiltedHeight = this.Height + 2; this.normalSumImage = new long[normalHeight, this.normalWidth]; this.normalSumHandle = GCHandle.Alloc(this.normalSumImage, GCHandleType.Pinned); @@ -551,13 +530,13 @@ private void CalculateIntegrals() byte* src = srcStart; // For each line - for (int y = 1; y <= this.height; y++) + for (int y = 1; y <= this.Height; y++) { int yy = this.normalWidth * y; int y1 = this.normalWidth * (y - 1); // For each pixel - for (int x = 1; x <= this.width; x++, src += this.pixelSize) + for (int x = 1; x <= this.Width; x++, src += this.pixelSize) { int pixel = *src; int pixelSquared = pixel * pixel; @@ -579,12 +558,12 @@ private void CalculateIntegrals() src = srcStart; // Left-to-right, top-to-bottom pass - for (int y = 1; y <= this.height; y++, src += offset) + for (int y = 1; y <= this.Height; y++, src += offset) { int yy = this.tiltedWidth * y; int y1 = this.tiltedWidth * (y - 1); - for (int x = 2; x < this.width + 2; x++, src += this.pixelSize) + for (int x = 2; x < this.Width + 2; x++, src += this.pixelSize) { int a = y1 + (x - 1); int b = yy + (x - 1); @@ -596,10 +575,10 @@ private void CalculateIntegrals() } { - int yy = this.tiltedWidth * this.height; - int y1 = this.tiltedWidth * (this.height + 1); + int yy = this.tiltedWidth * this.Height; + int y1 = this.tiltedWidth * (this.Height + 1); - for (int x = 2; x < this.width + 2; x++, src += this.pixelSize) + for (int x = 2; x < this.Width + 2; x++, src += this.pixelSize) { int a = yy + (x - 1); int c = yy + (x - 2); @@ -611,12 +590,12 @@ private void CalculateIntegrals() } // Right-to-left, bottom-to-top pass - for (int y = this.height; y >= 0; y--) + for (int y = this.Height; y >= 0; y--) { int yy = this.tiltedWidth * y; int y1 = this.tiltedWidth * (y + 1); - for (int x = this.width + 1; x >= 1; x--) + for (int x = this.Width + 1; x >= 1; x--) { int r = yy + x; int b = y1 + (x - 1); @@ -625,11 +604,11 @@ private void CalculateIntegrals() } } - for (int y = this.height + 1; y >= 0; y--) + for (int y = this.Height + 1; y >= 0; y--) { int yy = this.tiltedWidth * y; - for (int x = this.width + 1; x >= 2; x--) + for (int x = this.Width + 1; x >= 2; x--) { int r = yy + x; int b = yy + (x - 2); diff --git a/src/ImageProcessor/Imaging/Filters/Artistic/HalftoneFilter.cs b/src/ImageProcessor/Imaging/Filters/Artistic/HalftoneFilter.cs index 90774ca4e..ad491405e 100644 --- a/src/ImageProcessor/Imaging/Filters/Artistic/HalftoneFilter.cs +++ b/src/ImageProcessor/Imaging/Filters/Artistic/HalftoneFilter.cs @@ -25,32 +25,6 @@ namespace ImageProcessor.Imaging.Filters.Artistic /// public class HalftoneFilter { - /// - /// The angle of the cyan component in degrees. - /// - private float cyanAngle = 15f; - - /// - /// The angle of the magenta component in degrees. - /// - private float magentaAngle = 75f; - - /// - /// The angle of the yellow component in degrees. - /// - // ReSharper disable once RedundantDefaultMemberInitializer - private float yellowAngle = 0f; - - /// - /// The angle of the keyline component in degrees. - /// - private float keylineAngle = 45f; - - /// - /// The distance between component points. - /// - private int distance = 4; - /// /// Initializes a new instance of the class. /// @@ -64,90 +38,32 @@ public HalftoneFilter() /// /// The distance. /// - public HalftoneFilter(int distance) - { - this.distance = distance; - } + public HalftoneFilter(int distance) => this.Distance = distance; /// /// Gets or sets the angle of the cyan component in degrees. /// - public float CyanAngle - { - get - { - return this.cyanAngle; - } - - set - { - this.cyanAngle = value; - } - } + public float CyanAngle { get; set; } = 15f; /// /// Gets or sets the angle of the magenta component in degrees. /// - public float MagentaAngle - { - get - { - return this.magentaAngle; - } - - set - { - this.magentaAngle = value; - } - } + public float MagentaAngle { get; set; } = 75f; /// /// Gets or sets the angle of the yellow component in degrees. /// - public float YellowAngle - { - get - { - return this.yellowAngle; - } - - set - { - this.yellowAngle = value; - } - } + public float YellowAngle { get; set; } /// /// Gets or sets the angle of the keyline black component in degrees. /// - public float KeylineAngle - { - get - { - return this.keylineAngle; - } - - set - { - this.keylineAngle = value; - } - } + public float KeylineAngle { get; set; } = 45f; /// /// Gets or sets the distance between component points. /// - public int Distance - { - get - { - return this.distance; - } - - set - { - this.distance = value; - } - } + public int Distance { get; set; } = 4; /// /// Applies the halftone filter. @@ -172,21 +88,21 @@ public Bitmap ApplyFilter(Bitmap source) { int sourceWidth = source.Width; int sourceHeight = source.Height; - int width = source.Width + this.distance; - int height = source.Height + this.distance; + int width = source.Width + this.Distance; + int height = source.Height + this.Distance; // Draw a slightly larger image, flipping the top/left pixels to prevent // jagged edge of output. padded = new Bitmap(width, height, PixelFormat.Format32bppPArgb); padded.SetResolution(source.HorizontalResolution, source.VerticalResolution); - using (Graphics graphicsPadded = Graphics.FromImage(padded)) + using (var graphicsPadded = Graphics.FromImage(padded)) { graphicsPadded.Clear(Color.White); - Rectangle destinationRectangle = new Rectangle(0, 0, sourceWidth + this.distance, source.Height + this.distance); - using (TextureBrush tb = new TextureBrush(source)) + var destinationRectangle = new Rectangle(0, 0, sourceWidth + this.Distance, source.Height + this.Distance); + using (var tb = new TextureBrush(source)) { tb.WrapMode = WrapMode.TileFlipXY; - tb.TranslateTransform(this.distance, this.distance); + tb.TranslateTransform(this.Distance, this.Distance); graphicsPadded.FillRectangle(tb, destinationRectangle); } } @@ -200,12 +116,12 @@ public Bitmap ApplyFilter(Bitmap source) Point center = Point.Empty; // Yellow oversaturates the output. - int offset = this.distance; - float yellowMultiplier = this.distance * 1.587f; - float magentaMultiplier = this.distance * 2.176f; - float multiplier = this.distance * 2.2f; - float max = this.distance * (float)Math.Sqrt(2); - float magentaMax = this.distance * (float)Math.Sqrt(1.4545); + int offset = this.Distance; + float yellowMultiplier = this.Distance * 1.587f; + float magentaMultiplier = this.Distance * 2.176f; + float multiplier = this.Distance * 2.2f; + float max = this.Distance * (float)Math.Sqrt(2); + float magentaMax = this.Distance * (float)Math.Sqrt(1.4545); // Bump up the keyline max so that black looks black. float keylineMax = max * (float)Math.Sqrt(2); @@ -231,12 +147,12 @@ public Bitmap ApplyFilter(Bitmap source) newImage.SetResolution(source.HorizontalResolution, source.VerticalResolution); // Check bounds against this. - Rectangle rectangle = new Rectangle(0, 0, width, height); + var rectangle = new Rectangle(0, 0, width, height); - using (Graphics graphicsCyan = Graphics.FromImage(cyan)) - using (Graphics graphicsMagenta = Graphics.FromImage(magenta)) - using (Graphics graphicsYellow = Graphics.FromImage(yellow)) - using (Graphics graphicsKeyline = Graphics.FromImage(keyline)) + using (var graphicsCyan = Graphics.FromImage(cyan)) + using (var graphicsMagenta = Graphics.FromImage(magenta)) + using (var graphicsYellow = Graphics.FromImage(yellow)) + using (var graphicsKeyline = Graphics.FromImage(keyline)) { // Set the quality properties. graphicsCyan.PixelOffsetMode = PixelOffsetMode.Half; @@ -262,7 +178,7 @@ public Bitmap ApplyFilter(Bitmap source) // This is too slow. The graphics object can't be called within a parallel // loop so we have to do it old school. :( - using (FastBitmap sourceBitmap = new FastBitmap(padded)) + using (var sourceBitmap = new FastBitmap(padded)) { for (int y = minY; y < maxY; y += offset) { @@ -273,7 +189,7 @@ public Bitmap ApplyFilter(Bitmap source) float brushWidth; // Cyan - Point rotatedPoint = ImageMaths.RotatePoint(new Point(x, y), this.cyanAngle, center); + Point rotatedPoint = ImageMaths.RotatePoint(new Point(x, y), this.CyanAngle, center); int angledX = rotatedPoint.X; int angledY = rotatedPoint.Y; if (rectangle.Contains(new Point(angledX, angledY))) @@ -285,7 +201,7 @@ public Bitmap ApplyFilter(Bitmap source) } // Magenta - rotatedPoint = ImageMaths.RotatePoint(new Point(x, y), this.magentaAngle, center); + rotatedPoint = ImageMaths.RotatePoint(new Point(x, y), this.MagentaAngle, center); angledX = rotatedPoint.X; angledY = rotatedPoint.Y; if (rectangle.Contains(new Point(angledX, angledY))) @@ -297,7 +213,7 @@ public Bitmap ApplyFilter(Bitmap source) } // Yellow - rotatedPoint = ImageMaths.RotatePoint(new Point(x, y), this.yellowAngle, center); + rotatedPoint = ImageMaths.RotatePoint(new Point(x, y), this.YellowAngle, center); angledX = rotatedPoint.X; angledY = rotatedPoint.Y; if (rectangle.Contains(new Point(angledX, angledY))) @@ -309,7 +225,7 @@ public Bitmap ApplyFilter(Bitmap source) } // Keyline - rotatedPoint = ImageMaths.RotatePoint(new Point(x, y), this.keylineAngle, center); + rotatedPoint = ImageMaths.RotatePoint(new Point(x, y), this.KeylineAngle, center); angledX = rotatedPoint.X; angledY = rotatedPoint.Y; if (rectangle.Contains(new Point(angledX, angledY))) @@ -327,17 +243,17 @@ public Bitmap ApplyFilter(Bitmap source) } // Set our white background. - using (Graphics graphics = Graphics.FromImage(newImage)) + using (var graphics = Graphics.FromImage(newImage)) { graphics.Clear(Color.White); } // Blend the colors now to mimic adaptive blending. - using (FastBitmap cyanBitmap = new FastBitmap(cyan)) - using (FastBitmap magentaBitmap = new FastBitmap(magenta)) - using (FastBitmap yellowBitmap = new FastBitmap(yellow)) - using (FastBitmap keylineBitmap = new FastBitmap(keyline)) - using (FastBitmap destinationBitmap = new FastBitmap(newImage)) + using (var cyanBitmap = new FastBitmap(cyan)) + using (var magentaBitmap = new FastBitmap(magenta)) + using (var yellowBitmap = new FastBitmap(yellow)) + using (var keylineBitmap = new FastBitmap(keyline)) + using (var destinationBitmap = new FastBitmap(newImage)) { Parallel.For( offset, @@ -377,35 +293,12 @@ public Bitmap ApplyFilter(Bitmap source) } catch { - if (padded != null) - { - padded.Dispose(); - } - - if (cyan != null) - { - cyan.Dispose(); - } - - if (magenta != null) - { - magenta.Dispose(); - } - - if (yellow != null) - { - yellow.Dispose(); - } - - if (keyline != null) - { - keyline.Dispose(); - } - - if (newImage != null) - { - newImage.Dispose(); - } + padded?.Dispose(); + cyan?.Dispose(); + magenta?.Dispose(); + yellow?.Dispose(); + keyline?.Dispose(); + newImage?.Dispose(); } return source; @@ -427,9 +320,7 @@ private Rectangle GetBoundingRectangle(int width, int height) { int maxWidth = 0; int maxHeight = 0; - List angles = new List { this.CyanAngle, this.MagentaAngle, this.YellowAngle, this.KeylineAngle }; - - foreach (float angle in angles) + foreach (float angle in new List { this.CyanAngle, this.MagentaAngle, this.YellowAngle, this.KeylineAngle }) { Size rotatedSize = ImageMaths.GetBoundingRotatedRectangle(width, height, angle).Size; maxWidth = Math.Max(maxWidth, rotatedSize.Width); diff --git a/src/ImageProcessor/Imaging/Filters/Artistic/OilPaintingFilter.cs b/src/ImageProcessor/Imaging/Filters/Artistic/OilPaintingFilter.cs index 7b218796b..cd611b9a2 100644 --- a/src/ImageProcessor/Imaging/Filters/Artistic/OilPaintingFilter.cs +++ b/src/ImageProcessor/Imaging/Filters/Artistic/OilPaintingFilter.cs @@ -52,10 +52,7 @@ public OilPaintingFilter(int levels, int brushSize) /// public int Levels { - get - { - return this.levels; - } + get => this.levels; set { @@ -71,10 +68,7 @@ public int Levels /// public int BrushSize { - get - { - return this.brushSize; - } + get => this.brushSize; set { @@ -102,11 +96,11 @@ public Bitmap ApplyFilter(Bitmap source) int radius = this.brushSize >> 1; - Bitmap destination = new Bitmap(width, height, PixelFormat.Format32bppPArgb); + var destination = new Bitmap(width, height, PixelFormat.Format32bppPArgb); destination.SetResolution(source.HorizontalResolution, source.VerticalResolution); - using (FastBitmap sourceBitmap = new FastBitmap(source)) + using (var sourceBitmap = new FastBitmap(source)) { - using (FastBitmap destinationBitmap = new FastBitmap(destination)) + using (var destinationBitmap = new FastBitmap(destination)) { Parallel.For( 0, @@ -163,7 +157,7 @@ public Bitmap ApplyFilter(Bitmap source) int currentIntensity = (int)Math.Round(((sourceBlue + sourceGreen + sourceRed) / 3.0 * (this.levels - 1)) / 255.0); - intensityBin[currentIntensity] += 1; + intensityBin[currentIntensity]++; blueBin[currentIntensity] += sourceBlue; greenBin[currentIntensity] += sourceGreen; redBin[currentIntensity] += sourceRed; diff --git a/src/ImageProcessor/Imaging/Filters/Binarization/BinaryThreshold.cs b/src/ImageProcessor/Imaging/Filters/Binarization/BinaryThreshold.cs index bbed54a68..5eca7461b 100644 --- a/src/ImageProcessor/Imaging/Filters/Binarization/BinaryThreshold.cs +++ b/src/ImageProcessor/Imaging/Filters/Binarization/BinaryThreshold.cs @@ -18,37 +18,18 @@ namespace ImageProcessor.Imaging.Filters.Binarization /// public class BinaryThreshold { - /// - /// The threshold value. - /// - private byte threshold; - /// /// Initializes a new instance of the class. /// /// /// The threshold. /// - public BinaryThreshold(byte threshold = 10) - { - this.threshold = threshold; - } + public BinaryThreshold(byte threshold = 10) => this.Threshold = threshold; /// /// Gets or sets the threshold. /// - public byte Threshold - { - get - { - return this.threshold; - } - - set - { - this.threshold = value; - } - } + public byte Threshold { get; set; } /// /// Processes the given bitmap to apply the threshold. @@ -64,18 +45,18 @@ public Bitmap ProcessFilter(Bitmap source) int width = source.Width; int height = source.Height; - using (FastBitmap sourceBitmap = new FastBitmap(source)) + using (var sourceBitmap = new FastBitmap(source)) { Parallel.For( - 0, - height, + 0, + height, y => { for (int x = 0; x < width; x++) { // ReSharper disable AccessToDisposedClosure Color color = sourceBitmap.GetPixel(x, y); - sourceBitmap.SetPixel(x, y, color.B >= this.threshold ? Color.White : Color.Black); + sourceBitmap.SetPixel(x, y, color.B >= this.Threshold ? Color.White : Color.Black); // ReSharper restore AccessToDisposedClosure } diff --git a/src/ImageProcessor/Imaging/Filters/EdgeDetection/ConvolutionFilter.cs b/src/ImageProcessor/Imaging/Filters/EdgeDetection/ConvolutionFilter.cs index aa0a480d1..a515c890f 100644 --- a/src/ImageProcessor/Imaging/Filters/EdgeDetection/ConvolutionFilter.cs +++ b/src/ImageProcessor/Imaging/Filters/EdgeDetection/ConvolutionFilter.cs @@ -63,21 +63,21 @@ public Bitmap ProcessFilter(Image source) int bufferedWidth = width + 2; int bufferedHeight = height + 2; - Bitmap destination = new Bitmap(width, height, PixelFormat.Format32bppPArgb); - Bitmap input = new Bitmap(bufferedWidth, bufferedHeight, PixelFormat.Format32bppPArgb); + var destination = new Bitmap(width, height, PixelFormat.Format32bppPArgb); + var input = new Bitmap(bufferedWidth, bufferedHeight, PixelFormat.Format32bppPArgb); destination.SetResolution(source.HorizontalResolution, source.VerticalResolution); input.SetResolution(source.HorizontalResolution, source.VerticalResolution); - using (Graphics graphics = Graphics.FromImage(input)) + using (var graphics = Graphics.FromImage(input)) { // Fixes an issue with transparency not converting properly. graphics.Clear(Color.Transparent); - Rectangle destinationRectangle = new Rectangle(0, 0, bufferedWidth, bufferedHeight); - Rectangle rectangle = new Rectangle(0, 0, width, height); + var destinationRectangle = new Rectangle(0, 0, bufferedWidth, bufferedHeight); + var rectangle = new Rectangle(0, 0, width, height); // If it's greyscale apply a colormatrix to the image. - using (ImageAttributes attributes = new ImageAttributes()) + using (var attributes = new ImageAttributes()) { if (this.greyscale) { @@ -87,7 +87,7 @@ public Bitmap ProcessFilter(Image source) // We use a trick here to detect right to the edges of the image. // flip/tile the image with a pixel in excess in each direction to duplicate pixels. // Later on we draw pixels without that excess. - using (TextureBrush tb = new TextureBrush(source, rectangle, attributes)) + using (var tb = new TextureBrush(source, rectangle, attributes)) { tb.WrapMode = WrapMode.TileFlipXY; tb.TranslateTransform(1, 1); @@ -104,9 +104,9 @@ public Bitmap ProcessFilter(Image source) int kernelLength = horizontalFilter.GetLength(0); int radius = kernelLength >> 1; - using (FastBitmap sourceBitmap = new FastBitmap(input)) + using (var sourceBitmap = new FastBitmap(input)) { - using (FastBitmap destinationBitmap = new FastBitmap(destination)) + using (var destinationBitmap = new FastBitmap(destination)) { // Loop through the pixels. Parallel.For( @@ -171,7 +171,7 @@ public Bitmap ProcessFilter(Image source) byte green = gX.ToByte(); byte blue = bX.ToByte(); - Color newColor = Color.FromArgb(red, green, blue); + var newColor = Color.FromArgb(red, green, blue); if (y > 0 && x > 0 && y < maxHeight && x < maxWidth) { // ReSharper disable once AccessToDisposedClosure @@ -205,21 +205,21 @@ public Bitmap Process2DFilter(Image source) int bufferedWidth = width + 2; int bufferedHeight = height + 2; - Bitmap destination = new Bitmap(width, height, PixelFormat.Format32bppPArgb); - Bitmap input = new Bitmap(bufferedWidth, bufferedHeight, PixelFormat.Format32bppPArgb); + var destination = new Bitmap(width, height, PixelFormat.Format32bppPArgb); + var input = new Bitmap(bufferedWidth, bufferedHeight, PixelFormat.Format32bppPArgb); destination.SetResolution(source.HorizontalResolution, source.VerticalResolution); input.SetResolution(source.HorizontalResolution, source.VerticalResolution); - using (Graphics graphics = Graphics.FromImage(input)) + using (var graphics = Graphics.FromImage(input)) { // Fixes an issue with transparency not converting properly. graphics.Clear(Color.Transparent); - Rectangle destinationRectangle = new Rectangle(0, 0, bufferedWidth, bufferedHeight); - Rectangle rectangle = new Rectangle(0, 0, width, height); + var destinationRectangle = new Rectangle(0, 0, bufferedWidth, bufferedHeight); + var rectangle = new Rectangle(0, 0, width, height); // If it's greyscale apply a colormatrix to the image. - using (ImageAttributes attributes = new ImageAttributes()) + using (var attributes = new ImageAttributes()) { if (this.greyscale) { @@ -229,7 +229,7 @@ public Bitmap Process2DFilter(Image source) // We use a trick here to detect right to the edges of the image. // flip/tile the image with a pixel in excess in each direction to duplicate pixels. // Later on we draw pixels without that excess. - using (TextureBrush tb = new TextureBrush(source, rectangle, attributes)) + using (var tb = new TextureBrush(source, rectangle, attributes)) { tb.WrapMode = WrapMode.TileFlipXY; tb.TranslateTransform(1, 1); @@ -247,9 +247,9 @@ public Bitmap Process2DFilter(Image source) int kernelLength = horizontalFilter.GetLength(0); int radius = kernelLength >> 1; - using (FastBitmap sourceBitmap = new FastBitmap(input)) + using (var sourceBitmap = new FastBitmap(input)) { - using (FastBitmap destinationBitmap = new FastBitmap(destination)) + using (var destinationBitmap = new FastBitmap(destination)) { // Loop through the pixels. Parallel.For( @@ -320,7 +320,7 @@ public Bitmap Process2DFilter(Image source) byte green = Math.Sqrt((gX * gX) + (gY * gY)).ToByte(); byte blue = Math.Sqrt((bX * bX) + (bY * bY)).ToByte(); - Color newColor = Color.FromArgb(red, green, blue); + var newColor = Color.FromArgb(red, green, blue); if (y > 0 && x > 0 && y < maxHeight && x < maxWidth) { // ReSharper disable once AccessToDisposedClosure diff --git a/src/ImageProcessor/Imaging/Filters/EdgeDetection/KayyaliEdgeFilter.cs b/src/ImageProcessor/Imaging/Filters/EdgeDetection/KayyaliEdgeFilter.cs index 9b9a57887..2a2e823df 100644 --- a/src/ImageProcessor/Imaging/Filters/EdgeDetection/KayyaliEdgeFilter.cs +++ b/src/ImageProcessor/Imaging/Filters/EdgeDetection/KayyaliEdgeFilter.cs @@ -20,20 +20,20 @@ public class KayyaliEdgeFilter : I2DEdgeFilter /// /// Gets the horizontal gradient operator. /// - public double[,] HorizontalGradientOperator => new double[,] + public double[,] HorizontalGradientOperator => new double[,] { - { 6, 0, -6 }, - { 0, 0, 0 }, + { 6, 0, -6 }, + { 0, 0, 0 }, { -6, 0, 6 } }; /// /// Gets the vertical gradient operator. /// - public double[,] VerticalGradientOperator => new double[,] + public double[,] VerticalGradientOperator => new double[,] { - { -6, 0, 6 }, - { 0, 0, 0 }, + { -6, 0, 6 }, + { 0, 0, 0 }, { 6, 0, -6 } }; } diff --git a/src/ImageProcessor/Imaging/Filters/EdgeDetection/KirschEdgeFilter.cs b/src/ImageProcessor/Imaging/Filters/EdgeDetection/KirschEdgeFilter.cs index fec66298b..a47173975 100644 --- a/src/ImageProcessor/Imaging/Filters/EdgeDetection/KirschEdgeFilter.cs +++ b/src/ImageProcessor/Imaging/Filters/EdgeDetection/KirschEdgeFilter.cs @@ -20,21 +20,21 @@ public class KirschEdgeFilter : I2DEdgeFilter /// /// Gets the horizontal gradient operator. /// - public double[,] HorizontalGradientOperator => new double[,] + public double[,] HorizontalGradientOperator => new double[,] { - { 5, 5, 5 }, - { -3, 0, -3 }, + { 5, 5, 5 }, + { -3, 0, -3 }, { -3, -3, -3 } }; /// /// Gets the vertical gradient operator. /// - public double[,] VerticalGradientOperator => new double[,] - { - { 5, -3, -3 }, - { 5, 0, -3 }, - { 5, -3, -3 } + public double[,] VerticalGradientOperator => new double[,] + { + { 5, -3, -3 }, + { 5, 0, -3 }, + { 5, -3, -3 } }; } } diff --git a/src/ImageProcessor/Imaging/Filters/EdgeDetection/Laplacian3X3EdgeFilter.cs b/src/ImageProcessor/Imaging/Filters/EdgeDetection/Laplacian3X3EdgeFilter.cs index 29a1a3942..404a6dd59 100644 --- a/src/ImageProcessor/Imaging/Filters/EdgeDetection/Laplacian3X3EdgeFilter.cs +++ b/src/ImageProcessor/Imaging/Filters/EdgeDetection/Laplacian3X3EdgeFilter.cs @@ -20,11 +20,11 @@ public class Laplacian3X3EdgeFilter : IEdgeFilter /// /// Gets the horizontal gradient operator. /// - public double[,] HorizontalGradientOperator => new double[,] - { - { -1, -1, -1 }, - { -1, 8, -1 }, - { -1, -1, -1 } + public double[,] HorizontalGradientOperator => new double[,] + { + { -1, -1, -1 }, + { -1, 8, -1 }, + { -1, -1, -1 } }; } } diff --git a/src/ImageProcessor/Imaging/Filters/EdgeDetection/Laplacian5X5EdgeFilter.cs b/src/ImageProcessor/Imaging/Filters/EdgeDetection/Laplacian5X5EdgeFilter.cs index 7f0e16a75..f4ca5e5f3 100644 --- a/src/ImageProcessor/Imaging/Filters/EdgeDetection/Laplacian5X5EdgeFilter.cs +++ b/src/ImageProcessor/Imaging/Filters/EdgeDetection/Laplacian5X5EdgeFilter.cs @@ -20,12 +20,12 @@ public class Laplacian5X5EdgeFilter : IEdgeFilter /// /// Gets the horizontal gradient operator. /// - public double[,] HorizontalGradientOperator => new double[,] - { - { -1, -1, -1, -1, -1 }, - { -1, -1, -1, -1, -1 }, - { -1, -1, 24, -1, -1 }, - { -1, -1, -1, -1, -1 }, + public double[,] HorizontalGradientOperator => new double[,] + { + { -1, -1, -1, -1, -1 }, + { -1, -1, -1, -1, -1 }, + { -1, -1, 24, -1, -1 }, + { -1, -1, -1, -1, -1 }, { -1, -1, -1, -1, -1 } }; } diff --git a/src/ImageProcessor/Imaging/Filters/EdgeDetection/LaplacianOfGaussianEdgeFilter.cs b/src/ImageProcessor/Imaging/Filters/EdgeDetection/LaplacianOfGaussianEdgeFilter.cs index 263516ead..336fd8cc2 100644 --- a/src/ImageProcessor/Imaging/Filters/EdgeDetection/LaplacianOfGaussianEdgeFilter.cs +++ b/src/ImageProcessor/Imaging/Filters/EdgeDetection/LaplacianOfGaussianEdgeFilter.cs @@ -20,10 +20,10 @@ public class LaplacianOfGaussianEdgeFilter : IEdgeFilter /// /// Gets the horizontal gradient operator. /// - public double[,] HorizontalGradientOperator => new double[,] - { - { 0, 0, -1, 0, 0 }, - { 0, -1, -2, -1, 0 }, + public double[,] HorizontalGradientOperator => new double[,] + { + { 0, 0, -1, 0, 0 }, + { 0, -1, -2, -1, 0 }, { -1, -2, 16, -2, -1 }, { 0, -1, -2, -1, 0 }, { 0, 0, -1, 0, 0 } diff --git a/src/ImageProcessor/Imaging/Filters/EdgeDetection/PrewittEdgeFilter.cs b/src/ImageProcessor/Imaging/Filters/EdgeDetection/PrewittEdgeFilter.cs index 9f2ccbfb1..353b43aa1 100644 --- a/src/ImageProcessor/Imaging/Filters/EdgeDetection/PrewittEdgeFilter.cs +++ b/src/ImageProcessor/Imaging/Filters/EdgeDetection/PrewittEdgeFilter.cs @@ -22,8 +22,8 @@ public class PrewittEdgeFilter : I2DEdgeFilter /// public double[,] HorizontalGradientOperator => new double[,] { - { -1, 0, 1 }, - { -1, 0, 1 }, + { -1, 0, 1 }, + { -1, 0, 1 }, { -1, 0, 1 } }; @@ -32,8 +32,8 @@ public class PrewittEdgeFilter : I2DEdgeFilter /// public double[,] VerticalGradientOperator => new double[,] { - { 1, 1, 1 }, - { 0, 0, 0 }, + { 1, 1, 1 }, + { 0, 0, 0 }, { -1, -1, -1 } }; } diff --git a/src/ImageProcessor/Imaging/Filters/EdgeDetection/RobertsCrossEdgeFilter.cs b/src/ImageProcessor/Imaging/Filters/EdgeDetection/RobertsCrossEdgeFilter.cs index fc4b68071..8f6d85038 100644 --- a/src/ImageProcessor/Imaging/Filters/EdgeDetection/RobertsCrossEdgeFilter.cs +++ b/src/ImageProcessor/Imaging/Filters/EdgeDetection/RobertsCrossEdgeFilter.cs @@ -22,7 +22,7 @@ public class RobertsCrossEdgeFilter : I2DEdgeFilter /// public double[,] HorizontalGradientOperator => new double[,] { - { 1, 0 }, + { 1, 0 }, { 0, -1 } }; @@ -31,7 +31,7 @@ public class RobertsCrossEdgeFilter : I2DEdgeFilter /// public double[,] VerticalGradientOperator => new double[,] { - { 0, 1 }, + { 0, 1 }, { -1, 0 } }; } diff --git a/src/ImageProcessor/Imaging/Filters/EdgeDetection/ScharrEdgeFilter.cs b/src/ImageProcessor/Imaging/Filters/EdgeDetection/ScharrEdgeFilter.cs index b14e9cf99..bfb02550e 100644 --- a/src/ImageProcessor/Imaging/Filters/EdgeDetection/ScharrEdgeFilter.cs +++ b/src/ImageProcessor/Imaging/Filters/EdgeDetection/ScharrEdgeFilter.cs @@ -22,8 +22,8 @@ public class ScharrEdgeFilter : I2DEdgeFilter /// public double[,] HorizontalGradientOperator => new double[,] { - { -3, 0, 3 }, - { -10, 0, 10 }, + { -3, 0, 3 }, + { -10, 0, 10 }, { -3, 0, 3 } }; @@ -32,8 +32,8 @@ public class ScharrEdgeFilter : I2DEdgeFilter /// public double[,] VerticalGradientOperator => new double[,] { - { 3, 10, 3 }, - { 0, 0, 0 }, + { 3, 10, 3 }, + { 0, 0, 0 }, { -3, -10, -3 } }; } diff --git a/src/ImageProcessor/Imaging/Filters/EdgeDetection/SobelEdgeFilter.cs b/src/ImageProcessor/Imaging/Filters/EdgeDetection/SobelEdgeFilter.cs index bab3f1787..f8c37096e 100644 --- a/src/ImageProcessor/Imaging/Filters/EdgeDetection/SobelEdgeFilter.cs +++ b/src/ImageProcessor/Imaging/Filters/EdgeDetection/SobelEdgeFilter.cs @@ -22,8 +22,8 @@ public class SobelEdgeFilter : I2DEdgeFilter /// public double[,] HorizontalGradientOperator => new double[,] { - { -1, 0, 1 }, - { -2, 0, 2 }, + { -1, 0, 1 }, + { -2, 0, 2 }, { -1, 0, 1 } }; @@ -32,8 +32,8 @@ public class SobelEdgeFilter : I2DEdgeFilter /// public double[,] VerticalGradientOperator => new double[,] { - { 1, 2, 1 }, - { 0, 0, 0 }, + { 1, 2, 1 }, + { 0, 0, 0 }, { -1, -2, -1 } }; } diff --git a/src/ImageProcessor/Imaging/Filters/Photo/BlackWhiteMatrixFilter.cs b/src/ImageProcessor/Imaging/Filters/Photo/BlackWhiteMatrixFilter.cs index e3801e92b..0c1d8edfb 100644 --- a/src/ImageProcessor/Imaging/Filters/Photo/BlackWhiteMatrixFilter.cs +++ b/src/ImageProcessor/Imaging/Filters/Photo/BlackWhiteMatrixFilter.cs @@ -33,13 +33,13 @@ internal class BlackWhiteMatrixFilter : MatrixFilterBase /// public override Bitmap TransformImage(Image source, Image destination) { - using (Graphics graphics = Graphics.FromImage(destination)) + using (var graphics = Graphics.FromImage(destination)) { - using (ImageAttributes attributes = new ImageAttributes()) + using (var attributes = new ImageAttributes()) { attributes.SetColorMatrix(this.Matrix); - Rectangle rectangle = new Rectangle(0, 0, source.Width, source.Height); + var rectangle = new Rectangle(0, 0, source.Width, source.Height); graphics.DrawImage(source, rectangle, 0, 0, source.Width, source.Height, GraphicsUnit.Pixel, attributes); } diff --git a/src/ImageProcessor/Imaging/Filters/Photo/ColorMatrixes.cs b/src/ImageProcessor/Imaging/Filters/Photo/ColorMatrixes.cs index 844ab8a7a..b7bb152e7 100644 --- a/src/ImageProcessor/Imaging/Filters/Photo/ColorMatrixes.cs +++ b/src/ImageProcessor/Imaging/Filters/Photo/ColorMatrixes.cs @@ -172,7 +172,7 @@ internal static class ColorMatrixes /// /// Gets the for generating the low saturation filter. /// - internal static ColorMatrix LoSatch => + internal static ColorMatrix LoSatch => loSatch ?? (loSatch = new ColorMatrix( new[] { @@ -186,7 +186,7 @@ internal static class ColorMatrixes /// /// Gets the for generating the polaroid filter. /// - internal static ColorMatrix Polaroid => + internal static ColorMatrix Polaroid => polaroid ?? (polaroid = new ColorMatrix( new[] { @@ -200,7 +200,7 @@ internal static class ColorMatrixes /// /// Gets the for generating the sepia filter. /// - internal static ColorMatrix Sepia => + internal static ColorMatrix Sepia => sepia ?? (sepia = new ColorMatrix( new[] { diff --git a/src/ImageProcessor/Imaging/Filters/Photo/ComicMatrixFilter.cs b/src/ImageProcessor/Imaging/Filters/Photo/ComicMatrixFilter.cs index 1ce57005f..d8cf44ee6 100644 --- a/src/ImageProcessor/Imaging/Filters/Photo/ComicMatrixFilter.cs +++ b/src/ImageProcessor/Imaging/Filters/Photo/ComicMatrixFilter.cs @@ -29,69 +29,69 @@ internal class ComicMatrixFilter : MatrixFilterBase /// /// Processes the image. /// - /// The current image to process - /// The new Image to return + /// The current image to process + /// The new Image to return /// /// The processed . /// - public override Bitmap TransformImage(Image image, Image newImage) + public override Bitmap TransformImage(Image source, Image destination) { // Bitmaps for comic pattern Bitmap highBitmap = null; Bitmap lowBitmap = null; Bitmap patternBitmap = null; Bitmap edgeBitmap = null; - int width = image.Width; - int height = image.Height; + int width = source.Width; + int height = source.Height; try { - using (ImageAttributes attributes = new ImageAttributes()) + using (var attributes = new ImageAttributes()) { - Rectangle rectangle = new Rectangle(0, 0, image.Width, image.Height); + var rectangle = new Rectangle(0, 0, source.Width, source.Height); attributes.SetColorMatrix(ColorMatrixes.ComicHigh); // Draw the image with the high comic colormatrix. highBitmap = new Bitmap(rectangle.Width, rectangle.Height, PixelFormat.Format32bppPArgb); - highBitmap.SetResolution(image.HorizontalResolution, image.VerticalResolution); + highBitmap.SetResolution(source.HorizontalResolution, source.VerticalResolution); // Apply a oil painting filter to the image. - highBitmap = new OilPaintingFilter(3, 5).ApplyFilter((Bitmap)image); + highBitmap = new OilPaintingFilter(3, 5).ApplyFilter((Bitmap)source); // Draw the edges. edgeBitmap = new Bitmap(width, height, PixelFormat.Format32bppPArgb); - edgeBitmap.SetResolution(image.HorizontalResolution, image.VerticalResolution); - edgeBitmap = Effects.Trace(image, edgeBitmap, 120); + edgeBitmap.SetResolution(source.HorizontalResolution, source.VerticalResolution); + edgeBitmap = Effects.Trace(source, edgeBitmap, 120); - using (Graphics graphics = Graphics.FromImage(highBitmap)) + using (var graphics = Graphics.FromImage(highBitmap)) { - graphics.DrawImage(highBitmap, rectangle, 0, 0, image.Width, image.Height, GraphicsUnit.Pixel, attributes); + graphics.DrawImage(highBitmap, rectangle, 0, 0, source.Width, source.Height, GraphicsUnit.Pixel, attributes); } // Create a bitmap for overlaying. lowBitmap = new Bitmap(rectangle.Width, rectangle.Height, PixelFormat.Format32bppPArgb); - lowBitmap.SetResolution(image.HorizontalResolution, image.VerticalResolution); + lowBitmap.SetResolution(source.HorizontalResolution, source.VerticalResolution); // Set the color matrix attributes.SetColorMatrix(this.Matrix); // Draw the image with the losatch colormatrix. - using (Graphics graphics = Graphics.FromImage(lowBitmap)) + using (var graphics = Graphics.FromImage(lowBitmap)) { - graphics.DrawImage(highBitmap, rectangle, 0, 0, image.Width, image.Height, GraphicsUnit.Pixel, attributes); + graphics.DrawImage(highBitmap, rectangle, 0, 0, source.Width, source.Height, GraphicsUnit.Pixel, attributes); } // We need to create a new image now with a pattern mask to paint it // onto the other image with. patternBitmap = new Bitmap(rectangle.Width, rectangle.Height, PixelFormat.Format32bppPArgb); - patternBitmap.SetResolution(image.HorizontalResolution, image.VerticalResolution); + patternBitmap.SetResolution(source.HorizontalResolution, source.VerticalResolution); // Create the pattern mask. - using (Graphics graphics = Graphics.FromImage(patternBitmap)) + using (var graphics = Graphics.FromImage(patternBitmap)) { graphics.Clear(Color.Transparent); - + for (int y = 0; y < height; y += 8) { for (int x = 0; x < width; x += 4) @@ -105,7 +105,7 @@ public override Bitmap TransformImage(Image image, Image newImage) // Transfer the alpha channel from the mask to the low saturation image. lowBitmap = Effects.ApplyMask(lowBitmap, patternBitmap); - using (Graphics graphics = Graphics.FromImage(newImage)) + using (var graphics = Graphics.FromImage(destination)) { graphics.Clear(Color.Transparent); @@ -115,7 +115,7 @@ public override Bitmap TransformImage(Image image, Image newImage) graphics.DrawImage(edgeBitmap, 0, 0); // Draw an edge around the image. - using (Pen blackPen = new Pen(Color.Black)) + using (var blackPen = new Pen(Color.Black)) { blackPen.Width = 4; graphics.DrawRectangle(blackPen, rectangle); @@ -130,12 +130,12 @@ public override Bitmap TransformImage(Image image, Image newImage) } // Reassign the image. - image.Dispose(); - image = newImage; + source.Dispose(); + source = destination; } catch { - newImage?.Dispose(); + destination?.Dispose(); highBitmap?.Dispose(); @@ -146,7 +146,7 @@ public override Bitmap TransformImage(Image image, Image newImage) edgeBitmap?.Dispose(); } - return (Bitmap)image; + return (Bitmap)source; } } } \ No newline at end of file diff --git a/src/ImageProcessor/Imaging/Filters/Photo/GothamMatrixFilter.cs b/src/ImageProcessor/Imaging/Filters/Photo/GothamMatrixFilter.cs index d1082e9d1..7bf447e82 100644 --- a/src/ImageProcessor/Imaging/Filters/Photo/GothamMatrixFilter.cs +++ b/src/ImageProcessor/Imaging/Filters/Photo/GothamMatrixFilter.cs @@ -32,28 +32,28 @@ internal class GothamMatrixFilter : MatrixFilterBase /// The current image to process /// The new Image to return /// - /// The processed . + /// The processed . /// public override Bitmap TransformImage(Image source, Image destination) { - using (Graphics graphics = Graphics.FromImage(destination)) + using (var graphics = Graphics.FromImage(destination)) { - using (ImageAttributes attributes = new ImageAttributes()) + using (var attributes = new ImageAttributes()) { attributes.SetColorMatrix(this.Matrix); - Rectangle rectangle = new Rectangle(0, 0, source.Width, source.Height); + var rectangle = new Rectangle(0, 0, source.Width, source.Height); graphics.DrawImage(source, rectangle, 0, 0, source.Width, source.Height, GraphicsUnit.Pixel, attributes); // Overlay the image with some semi-transparent colors to finish the effect. - using (GraphicsPath path = new GraphicsPath()) + using (var path = new GraphicsPath()) { path.AddRectangle(rectangle); // Paint a burgundy rectangle with a transparency of ~30% over the image. // Paint a blue rectangle with a transparency of 20% over the image. - using (SolidBrush brush = new SolidBrush(Color.FromArgb(77, 38, 14, 28))) + using (var brush = new SolidBrush(Color.FromArgb(77, 38, 14, 28))) { Region oldClip = graphics.Clip; graphics.Clip = new Region(rectangle); diff --git a/src/ImageProcessor/Imaging/Filters/Photo/GreyScaleMatrixFilter.cs b/src/ImageProcessor/Imaging/Filters/Photo/GreyScaleMatrixFilter.cs index febca0bcf..b3dd993dd 100644 --- a/src/ImageProcessor/Imaging/Filters/Photo/GreyScaleMatrixFilter.cs +++ b/src/ImageProcessor/Imaging/Filters/Photo/GreyScaleMatrixFilter.cs @@ -33,13 +33,13 @@ internal class GreyScaleMatrixFilter : MatrixFilterBase /// public override Bitmap TransformImage(Image source, Image destination) { - using (Graphics graphics = Graphics.FromImage(destination)) + using (var graphics = Graphics.FromImage(destination)) { - using (ImageAttributes attributes = new ImageAttributes()) + using (var attributes = new ImageAttributes()) { attributes.SetColorMatrix(this.Matrix); - Rectangle rectangle = new Rectangle(0, 0, source.Width, source.Height); + var rectangle = new Rectangle(0, 0, source.Width, source.Height); graphics.DrawImage(source, rectangle, 0, 0, source.Width, source.Height, GraphicsUnit.Pixel, attributes); } diff --git a/src/ImageProcessor/Imaging/Filters/Photo/HiSatchMatrixFilter.cs b/src/ImageProcessor/Imaging/Filters/Photo/HiSatchMatrixFilter.cs index baddc2b13..f4d76dbde 100644 --- a/src/ImageProcessor/Imaging/Filters/Photo/HiSatchMatrixFilter.cs +++ b/src/ImageProcessor/Imaging/Filters/Photo/HiSatchMatrixFilter.cs @@ -33,13 +33,13 @@ internal class HiSatchMatrixFilter : MatrixFilterBase /// public override Bitmap TransformImage(Image source, Image destination) { - using (Graphics graphics = Graphics.FromImage(destination)) + using (var graphics = Graphics.FromImage(destination)) { - using (ImageAttributes attributes = new ImageAttributes()) + using (var attributes = new ImageAttributes()) { attributes.SetColorMatrix(this.Matrix); - Rectangle rectangle = new Rectangle(0, 0, source.Width, source.Height); + var rectangle = new Rectangle(0, 0, source.Width, source.Height); graphics.DrawImage(source, rectangle, 0, 0, source.Width, source.Height, GraphicsUnit.Pixel, attributes); } diff --git a/src/ImageProcessor/Imaging/Filters/Photo/IMatrixFilter.cs b/src/ImageProcessor/Imaging/Filters/Photo/IMatrixFilter.cs index 59075a6f8..1f8541f4e 100644 --- a/src/ImageProcessor/Imaging/Filters/Photo/IMatrixFilter.cs +++ b/src/ImageProcessor/Imaging/Filters/Photo/IMatrixFilter.cs @@ -27,9 +27,9 @@ public interface IMatrixFilter /// Processes the image. /// /// The current image to process - /// The new Image to return + /// The new image to return /// - /// The processed . + /// The processed . /// Bitmap TransformImage(Image source, Image destination); } diff --git a/src/ImageProcessor/Imaging/Filters/Photo/InvertMatrixFilter.cs b/src/ImageProcessor/Imaging/Filters/Photo/InvertMatrixFilter.cs index 94146444f..8b4395c17 100644 --- a/src/ImageProcessor/Imaging/Filters/Photo/InvertMatrixFilter.cs +++ b/src/ImageProcessor/Imaging/Filters/Photo/InvertMatrixFilter.cs @@ -33,13 +33,13 @@ internal class InvertMatrixFilter : MatrixFilterBase /// public override Bitmap TransformImage(Image source, Image destination) { - using (Graphics graphics = Graphics.FromImage(destination)) + using (var graphics = Graphics.FromImage(destination)) { - using (ImageAttributes attributes = new ImageAttributes()) + using (var attributes = new ImageAttributes()) { attributes.SetColorMatrix(this.Matrix); - Rectangle rectangle = new Rectangle(0, 0, source.Width, source.Height); + var rectangle = new Rectangle(0, 0, source.Width, source.Height); graphics.DrawImage(source, rectangle, 0, 0, source.Width, source.Height, GraphicsUnit.Pixel, attributes); } diff --git a/src/ImageProcessor/Imaging/Filters/Photo/LoSatchMatrixFilter.cs b/src/ImageProcessor/Imaging/Filters/Photo/LoSatchMatrixFilter.cs index 8bbe47239..ec3a92c5c 100644 --- a/src/ImageProcessor/Imaging/Filters/Photo/LoSatchMatrixFilter.cs +++ b/src/ImageProcessor/Imaging/Filters/Photo/LoSatchMatrixFilter.cs @@ -33,13 +33,13 @@ internal class LoSatchMatrixFilter : MatrixFilterBase /// public override Bitmap TransformImage(Image source, Image destination) { - using (Graphics graphics = Graphics.FromImage(destination)) + using (var graphics = Graphics.FromImage(destination)) { - using (ImageAttributes attributes = new ImageAttributes()) + using (var attributes = new ImageAttributes()) { attributes.SetColorMatrix(this.Matrix); - Rectangle rectangle = new Rectangle(0, 0, source.Width, source.Height); + var rectangle = new Rectangle(0, 0, source.Width, source.Height); graphics.DrawImage(source, rectangle, 0, 0, source.Width, source.Height, GraphicsUnit.Pixel, attributes); } diff --git a/src/ImageProcessor/Imaging/Filters/Photo/LomographMatrixFilter.cs b/src/ImageProcessor/Imaging/Filters/Photo/LomographMatrixFilter.cs index 03b37de8c..9ea380c44 100644 --- a/src/ImageProcessor/Imaging/Filters/Photo/LomographMatrixFilter.cs +++ b/src/ImageProcessor/Imaging/Filters/Photo/LomographMatrixFilter.cs @@ -35,13 +35,13 @@ internal class LomographMatrixFilter : MatrixFilterBase /// public override Bitmap TransformImage(Image source, Image destination) { - using (Graphics graphics = Graphics.FromImage(destination)) + using (var graphics = Graphics.FromImage(destination)) { - using (ImageAttributes attributes = new ImageAttributes()) + using (var attributes = new ImageAttributes()) { attributes.SetColorMatrix(this.Matrix); - Rectangle rectangle = new Rectangle(0, 0, source.Width, source.Height); + var rectangle = new Rectangle(0, 0, source.Width, source.Height); graphics.DrawImage(source, rectangle, 0, 0, source.Width, source.Height, GraphicsUnit.Pixel, attributes); } } diff --git a/src/ImageProcessor/Imaging/Filters/Photo/MatrixFilterBase.cs b/src/ImageProcessor/Imaging/Filters/Photo/MatrixFilterBase.cs index 16decdd90..9bb760f83 100644 --- a/src/ImageProcessor/Imaging/Filters/Photo/MatrixFilterBase.cs +++ b/src/ImageProcessor/Imaging/Filters/Photo/MatrixFilterBase.cs @@ -26,12 +26,12 @@ public abstract class MatrixFilterBase : IMatrixFilter /// /// Processes the image. /// - /// The current image to process - /// The new Image to return + /// The current image to process + /// The new image to return /// /// The processed . /// - public abstract Bitmap TransformImage(Image image, Image newImage); + public abstract Bitmap TransformImage(Image source, Image destination); /// /// Determines whether the specified , is equal to this instance. @@ -42,9 +42,7 @@ public abstract class MatrixFilterBase : IMatrixFilter /// public override bool Equals(object obj) { - IMatrixFilter filter = obj as IMatrixFilter; - - if (filter == null) + if (!(obj is IMatrixFilter filter)) { return false; } @@ -64,8 +62,7 @@ public override int GetHashCode() unchecked { int hashCode = this.GetType().Name.GetHashCode(); - hashCode = (hashCode * 397) ^ this.Matrix.GetHashCode(); - return hashCode; + return (hashCode * 397) ^ this.Matrix.GetHashCode(); } } } diff --git a/src/ImageProcessor/Imaging/Filters/Photo/PolaroidMatrixFilter.cs b/src/ImageProcessor/Imaging/Filters/Photo/PolaroidMatrixFilter.cs index c40f1cb1c..72648c08c 100644 --- a/src/ImageProcessor/Imaging/Filters/Photo/PolaroidMatrixFilter.cs +++ b/src/ImageProcessor/Imaging/Filters/Photo/PolaroidMatrixFilter.cs @@ -35,13 +35,13 @@ internal class PolaroidMatrixFilter : MatrixFilterBase /// public override Bitmap TransformImage(Image source, Image destination) { - using (Graphics graphics = Graphics.FromImage(destination)) + using (var graphics = Graphics.FromImage(destination)) { - using (ImageAttributes attributes = new ImageAttributes()) + using (var attributes = new ImageAttributes()) { attributes.SetColorMatrix(this.Matrix); - Rectangle rectangle = new Rectangle(0, 0, source.Width, source.Height); + var rectangle = new Rectangle(0, 0, source.Width, source.Height); graphics.DrawImage(source, rectangle, 0, 0, source.Width, source.Height, GraphicsUnit.Pixel, attributes); } diff --git a/src/ImageProcessor/Imaging/Filters/Photo/SepiaMatrixFilter.cs b/src/ImageProcessor/Imaging/Filters/Photo/SepiaMatrixFilter.cs index fa8abab21..4b265f4fe 100644 --- a/src/ImageProcessor/Imaging/Filters/Photo/SepiaMatrixFilter.cs +++ b/src/ImageProcessor/Imaging/Filters/Photo/SepiaMatrixFilter.cs @@ -33,13 +33,13 @@ internal class SepiaMatrixFilter : MatrixFilterBase /// public override Bitmap TransformImage(Image source, Image destination) { - using (Graphics graphics = Graphics.FromImage(destination)) + using (var graphics = Graphics.FromImage(destination)) { - using (ImageAttributes attributes = new ImageAttributes()) + using (var attributes = new ImageAttributes()) { attributes.SetColorMatrix(this.Matrix); - Rectangle rectangle = new Rectangle(0, 0, source.Width, source.Height); + var rectangle = new Rectangle(0, 0, source.Width, source.Height); graphics.DrawImage(source, rectangle, 0, 0, source.Width, source.Height, GraphicsUnit.Pixel, attributes); } diff --git a/src/ImageProcessor/Imaging/Formats/FormatBase.cs b/src/ImageProcessor/Imaging/Formats/FormatBase.cs index ccbe63830..d5e582243 100644 --- a/src/ImageProcessor/Imaging/Formats/FormatBase.cs +++ b/src/ImageProcessor/Imaging/Formats/FormatBase.cs @@ -23,10 +23,7 @@ public abstract class FormatBase : ISupportedImageFormat /// /// Initializes a new instance of the class. /// - protected FormatBase() - { - this.Quality = 90; - } + protected FormatBase() => this.Quality = 90; /// /// Gets the file headers. @@ -68,10 +65,7 @@ protected FormatBase() /// /// The processor delegate. /// The . - public virtual void ApplyProcessor(Func processor, ImageFactory factory) - { - factory.Image = processor.Invoke(factory); - } + public virtual void ApplyProcessor(Func processor, ImageFactory factory) => factory.Image = processor.Invoke(factory); /// /// Decodes the image to process. @@ -129,17 +123,15 @@ public virtual Image Save(string path, Image image, long bitDepth) } /// - /// Determines whether the specified , is equal to this instance. + /// Determines whether the specified , is equal to this instance. /// - /// The to compare with this instance. + /// The to compare with this instance. /// - /// true if the specified is equal to this instance; otherwise, false. + /// true if the specified is equal to this instance; otherwise, false. /// public override bool Equals(object obj) { - ISupportedImageFormat format = obj as ISupportedImageFormat; - - if (format == null) + if (!(obj is ISupportedImageFormat format)) { return false; } @@ -159,8 +151,7 @@ public override int GetHashCode() { int hashCode = this.MimeType.GetHashCode(); hashCode = (hashCode * 397) ^ this.IsIndexed.GetHashCode(); - hashCode = (hashCode * 397) ^ this.Quality; - return hashCode; + return (hashCode * 397) ^ this.Quality; } } } diff --git a/src/ImageProcessor/Imaging/Formats/FormatUtilities.cs b/src/ImageProcessor/Imaging/Formats/FormatUtilities.cs index 21816061b..5f692f97b 100644 --- a/src/ImageProcessor/Imaging/Formats/FormatUtilities.cs +++ b/src/ImageProcessor/Imaging/Formats/FormatUtilities.cs @@ -48,7 +48,7 @@ public static ISupportedImageFormat GetFormat(Stream stream) // It's actually a list. // ReSharper disable once PossibleMultipleEnumeration - int numberOfBytesToRead = supportedImageFormats.Max(f => f.FileHeaders.Max(h=>h.Length)); + int numberOfBytesToRead = supportedImageFormats.Max(f => f.FileHeaders.Max(h => h.Length)); byte[] buffer = new byte[numberOfBytesToRead]; stream.Read(buffer, 0, buffer.Length); @@ -95,7 +95,9 @@ public static bool IsIndexed(Image image) { // Test value of flags using bitwise AND. // ReSharper disable once BitwiseOperatorOnEnumWithoutFlags +#pragma warning disable RCS1130 // Bitwise operation on enum without Flags attribute. return (image.PixelFormat & PixelFormat.Indexed) != 0; +#pragma warning restore RCS1130 // Bitwise operation on enum without Flags attribute. } /// @@ -107,10 +109,7 @@ public static bool IsIndexed(Image image) /// /// The true if the image has an alpha channel; otherwise, false. /// - public static bool HasAlpha(Image image) - { - return ((ImageFlags)image.Flags & ImageFlags.HasAlpha) == ImageFlags.HasAlpha; - } + public static bool HasAlpha(Image image) => ((ImageFlags)image.Flags & ImageFlags.HasAlpha) == ImageFlags.HasAlpha; /// /// Returns a value indicating whether the given image is animated. @@ -121,10 +120,7 @@ public static bool HasAlpha(Image image) /// /// The true if the image is animated; otherwise, false. /// - public static bool IsAnimated(Image image) - { - return ImageAnimator.CanAnimate(image); - } + public static bool IsAnimated(Image image) => ImageAnimator.CanAnimate(image); /// /// Returns an instance of EncodingParameters for jpeg compression. diff --git a/src/ImageProcessor/Imaging/Formats/GifDecoder.cs b/src/ImageProcessor/Imaging/Formats/GifDecoder.cs index ae3502406..cadebf12e 100644 --- a/src/ImageProcessor/Imaging/Formats/GifDecoder.cs +++ b/src/ImageProcessor/Imaging/Formats/GifDecoder.cs @@ -100,7 +100,7 @@ public GifFrame GetFrame(Image image, int index) { // Find the frame image.SelectActiveFrame(FrameDimension.Time, index); - Bitmap frame = new Bitmap(image); + var frame = new Bitmap(image); frame.SetResolution(image.HorizontalResolution, image.VerticalResolution); // Reset the image @@ -113,7 +113,7 @@ public GifFrame GetFrame(Image image, int index) // Convert each 4-byte chunk into an integer. // GDI returns a single array with all delays, while Mono returns a different array for each frame. - TimeSpan delay = TimeSpan.FromMilliseconds(BitConverter.ToInt32(times, (4 * index) % times.Length) * 10); + var delay = TimeSpan.FromMilliseconds(BitConverter.ToInt32(times, (4 * index) % times.Length) * 10); return new GifFrame { Delay = delay, Image = frame }; } diff --git a/src/ImageProcessor/Imaging/Formats/GifEncoder.cs b/src/ImageProcessor/Imaging/Formats/GifEncoder.cs index 348a96d13..08ce99520 100644 --- a/src/ImageProcessor/Imaging/Formats/GifEncoder.cs +++ b/src/ImageProcessor/Imaging/Formats/GifEncoder.cs @@ -31,7 +31,6 @@ namespace ImageProcessor.Imaging.Formats /// public class GifEncoder { - #region Constants /// /// The application block size. /// @@ -106,9 +105,7 @@ public class GifEncoder /// The source image block position. /// private const long SourceImageBlockPosition = 789; - #endregion - #region Fields /// /// The converter for creating the output image from a byte array. /// @@ -118,7 +115,7 @@ public class GifEncoder /// The stream. /// // ReSharper disable once FieldCanBeMadeReadOnly.Local - private MemoryStream imageStream; + private readonly MemoryStream imageStream; /// /// The height. @@ -144,9 +141,7 @@ public class GifEncoder /// Whether the gif has has the last terminated byte written. /// private bool terminated; - #endregion - #region Constructors /// /// Initializes a new instance of the class. /// @@ -166,14 +161,12 @@ public GifEncoder(int? width = null, int? height = null, int? repeatCount = null this.height = height; this.repeatCount = repeatCount; } - #endregion /// /// Gets or sets the image bytes. /// public byte[] ImageBytes { get; set; } - #region Public Methods and Operators /// /// Adds a frame to the gif. /// @@ -182,7 +175,7 @@ public GifEncoder(int? width = null, int? height = null, int? repeatCount = null /// public void AddFrame(GifFrame frame) { - using (MemoryStream gifStream = new MemoryStream()) + using (var gifStream = new MemoryStream()) { frame.Image.Save(gifStream, ImageFormat.Gif); if (this.isFirstImage) @@ -245,9 +238,7 @@ public void Save(Stream stream) this.imageStream.Position = 0; } - #endregion - #region Methods /// /// Writes the header block of the animated gif to the stream. /// @@ -302,10 +293,7 @@ private void WriteHeaderBlock(Stream sourceGif, int w, int h) /// /// The value. /// - private void WriteByte(int value) - { - this.imageStream.WriteByte(Convert.ToByte(value)); - } + private void WriteByte(int value) => this.imageStream.WriteByte(Convert.ToByte(value)); /// /// Writes the color table. @@ -334,7 +322,7 @@ private void WriteGraphicControlBlock(Stream sourceGif, int frameDelay) this.WriteShort(GraphicControlExtensionBlockIdentifier); // Identifier this.WriteByte(GraphicControlExtensionBlockSize); // Block Size - this.WriteByte(blockhead[3] & 0xf7 | 0x08); // Setting disposal flag + this.WriteByte((blockhead[3] & 0xf7) | 0x08); // Setting disposal flag this.WriteShort(frameDelay); // Setting frame delay this.WriteByte(255); // Transparent color index this.WriteByte(0); // Terminator @@ -367,12 +355,12 @@ private void WriteImageBlock(Stream sourceGif, bool includeColorTable, int x, in { // If first frame, use global color table - else use local sourceGif.Position = SourceGlobalColorInfoPosition; - this.WriteByte(sourceGif.ReadByte() & 0x3f | 0x80); // Enabling local color table + this.WriteByte((sourceGif.ReadByte() & 0x3f) | 0x80); // Enabling local color table this.WriteColorTable(sourceGif); } else { - this.WriteByte(header[9] & 0x07 | 0x07); // Disabling local color table + this.WriteByte((header[9] & 0x07) | 0x07); // Disabling local color table } this.WriteByte(header[10]); // LZW Min Code Size @@ -413,10 +401,6 @@ private void WriteShort(int value) /// /// The value. /// - private void WriteString(string value) - { - this.imageStream.Write(value.ToArray().Select(c => (byte)c).ToArray(), 0, value.Length); - } - #endregion + private void WriteString(string value) => this.imageStream.Write(value.ToArray().Select(c => (byte)c).ToArray(), 0, value.Length); } } \ No newline at end of file diff --git a/src/ImageProcessor/Imaging/Formats/GifFormat.cs b/src/ImageProcessor/Imaging/Formats/GifFormat.cs index 10e5118ad..3b80788d9 100644 --- a/src/ImageProcessor/Imaging/Formats/GifFormat.cs +++ b/src/ImageProcessor/Imaging/Formats/GifFormat.cs @@ -60,9 +60,9 @@ public class GifFormat : FormatBase, IQuantizableImageFormat, IAnimatedImageForm /// The . public override void ApplyProcessor(Func processor, ImageFactory factory) { - GifDecoder decoder = new GifDecoder(factory.Image, factory.AnimationProcessMode); + var decoder = new GifDecoder(factory.Image, factory.AnimationProcessMode); Image factoryImage = factory.Image; - GifEncoder encoder = new GifEncoder(null, null, decoder.LoopCount); + var encoder = new GifEncoder(null, null, decoder.LoopCount); for (int i = 0; i < decoder.FrameCount; i++) { @@ -80,8 +80,8 @@ public override void ApplyProcessor(Func processor, ImageFa public override Image Save(Stream stream, Image image, long bitDepth) { // Never use default save for gifs. It's terrible. - GifDecoder decoder = new GifDecoder(image, AnimationProcessMode.All); - GifEncoder encoder = new GifEncoder(null, null, decoder.LoopCount); + var decoder = new GifDecoder(image, AnimationProcessMode.All); + var encoder = new GifEncoder(null, null, decoder.LoopCount); for (int i = 0; i < decoder.FrameCount; i++) { @@ -100,8 +100,8 @@ public override Image Save(string path, Image image, long bitDepth) // Never use default save for gifs. It's terrible. using (FileStream fs = File.OpenWrite(path)) { - GifDecoder decoder = new GifDecoder(image, AnimationProcessMode.All); - GifEncoder encoder = new GifEncoder(null, null, decoder.LoopCount); + var decoder = new GifDecoder(image, AnimationProcessMode.All); + var encoder = new GifEncoder(null, null, decoder.LoopCount); for (int i = 0; i < decoder.FrameCount; i++) { diff --git a/src/ImageProcessor/Imaging/Formats/ISupportedImageFormat.cs b/src/ImageProcessor/Imaging/Formats/ISupportedImageFormat.cs index 7ddb37f4e..ba1099020 100644 --- a/src/ImageProcessor/Imaging/Formats/ISupportedImageFormat.cs +++ b/src/ImageProcessor/Imaging/Formats/ISupportedImageFormat.cs @@ -55,7 +55,6 @@ public interface ISupportedImageFormat /// int Quality { get; set; } - #region Methods /// /// Applies the given processor the current image. /// @@ -109,6 +108,5 @@ public interface ISupportedImageFormat /// The . /// Image Save(string path, Image image, long bitDepth); - #endregion } } diff --git a/src/ImageProcessor/Imaging/Formats/JpegFormat.cs b/src/ImageProcessor/Imaging/Formats/JpegFormat.cs index 01e8bb6d8..882e80fac 100644 --- a/src/ImageProcessor/Imaging/Formats/JpegFormat.cs +++ b/src/ImageProcessor/Imaging/Formats/JpegFormat.cs @@ -14,7 +14,6 @@ namespace ImageProcessor.Imaging.Formats using System.Drawing; using System.Drawing.Imaging; using System.IO; - using System.Linq; using System.Text; /// @@ -72,8 +71,7 @@ public override Image Save(Stream stream, Image image, long bitDepth) using (EncoderParameters encoderParameters = FormatUtilities.GetEncodingParameters(this.Quality)) { ImageCodecInfo imageCodecInfo = - ImageCodecInfo.GetImageEncoders() - .FirstOrDefault(ici => ici.MimeType.Equals(this.MimeType, StringComparison.OrdinalIgnoreCase)); + Array.Find(ImageCodecInfo.GetImageEncoders(), ici => ici.MimeType.Equals(this.MimeType, StringComparison.OrdinalIgnoreCase)); if (imageCodecInfo != null) { @@ -104,8 +102,7 @@ public override Image Save(string path, Image image, long bitDepth) using (EncoderParameters encoderParameters = FormatUtilities.GetEncodingParameters(this.Quality)) { ImageCodecInfo imageCodecInfo = - ImageCodecInfo.GetImageEncoders() - .FirstOrDefault(ici => ici.MimeType.Equals(this.MimeType, StringComparison.OrdinalIgnoreCase)); + Array.Find(ImageCodecInfo.GetImageEncoders(), ici => ici.MimeType.Equals(this.MimeType, StringComparison.OrdinalIgnoreCase)); if (imageCodecInfo != null) { diff --git a/src/ImageProcessor/Imaging/Formats/TiffFormat.cs b/src/ImageProcessor/Imaging/Formats/TiffFormat.cs index 1ff6c555a..f47a4582e 100644 --- a/src/ImageProcessor/Imaging/Formats/TiffFormat.cs +++ b/src/ImageProcessor/Imaging/Formats/TiffFormat.cs @@ -15,7 +15,6 @@ namespace ImageProcessor.Imaging.Formats using System.Drawing; using System.Drawing.Imaging; using System.IO; - using System.Linq; /// /// Provides the necessary information to support tiff images. @@ -88,14 +87,13 @@ public override void ApplyProcessor(Func processor, ImageFa public override Image Save(Stream stream, Image image, long bitDepth) { // Tiffs can be saved with different bit depths. - using (EncoderParameters encoderParameters = new EncoderParameters(2)) + using (var encoderParameters = new EncoderParameters(2)) { encoderParameters.Param[0] = new EncoderParameter(Encoder.Compression, (long)(bitDepth == 1 ? EncoderValue.CompressionCCITT4 : EncoderValue.CompressionLZW)); encoderParameters.Param[1] = new EncoderParameter(Encoder.ColorDepth, Math.Min(32, bitDepth)); ImageCodecInfo imageCodecInfo = - ImageCodecInfo.GetImageEncoders() - .FirstOrDefault(ici => ici.MimeType.Equals(this.MimeType, StringComparison.OrdinalIgnoreCase)); + Array.Find(ImageCodecInfo.GetImageEncoders(), ici => ici.MimeType.Equals(this.MimeType, StringComparison.OrdinalIgnoreCase)); if (imageCodecInfo != null) { @@ -122,14 +120,13 @@ public override Image Save(Stream stream, Image image, long bitDepth) public override Image Save(string path, Image image, long bitDepth) { // Tiffs can be saved with different bit depths. - using (EncoderParameters encoderParameters = new EncoderParameters(2)) + using (var encoderParameters = new EncoderParameters(2)) { encoderParameters.Param[0] = new EncoderParameter(Encoder.Compression, (long)(bitDepth == 1 ? EncoderValue.CompressionCCITT4 : EncoderValue.CompressionLZW)); encoderParameters.Param[1] = new EncoderParameter(Encoder.ColorDepth, Math.Min(32, bitDepth)); ImageCodecInfo imageCodecInfo = - ImageCodecInfo.GetImageEncoders() - .FirstOrDefault(ici => ici.MimeType.Equals(this.MimeType, StringComparison.OrdinalIgnoreCase)); + Array.Find(ImageCodecInfo.GetImageEncoders(), ici => ici.MimeType.Equals(this.MimeType, StringComparison.OrdinalIgnoreCase)); if (imageCodecInfo != null) { diff --git a/src/ImageProcessor/Imaging/GaussianLayer.cs b/src/ImageProcessor/Imaging/GaussianLayer.cs index 12a214896..15d45b15a 100644 --- a/src/ImageProcessor/Imaging/GaussianLayer.cs +++ b/src/ImageProcessor/Imaging/GaussianLayer.cs @@ -71,10 +71,7 @@ public GaussianLayer(int size, double sigma = 1.4, int threshold = 0) /// public int Size { - get - { - return this.size; - } + get => this.size; set { @@ -97,10 +94,7 @@ public int Size /// public double Sigma { - get - { - return this.sigma; - } + get => this.sigma; set { @@ -123,10 +117,7 @@ public double Sigma /// public int Threshold { - get - { - return this.threshold; - } + get => this.threshold; set { @@ -153,9 +144,7 @@ public int Threshold /// public override bool Equals(object obj) { - GaussianLayer gaussianLayer = obj as GaussianLayer; - - if (gaussianLayer == null) + if (!(obj is GaussianLayer gaussianLayer)) { return false; } @@ -177,8 +166,7 @@ public override int GetHashCode() { int hashCode = this.Size; hashCode = (hashCode * 397) ^ this.Size.GetHashCode(); - hashCode = (hashCode * 397) ^ this.Threshold; - return hashCode; + return (hashCode * 397) ^ this.Threshold; } } } diff --git a/src/ImageProcessor/Imaging/Helpers/Adjustments.cs b/src/ImageProcessor/Imaging/Helpers/Adjustments.cs index 315e8a42d..bf60cd9ab 100644 --- a/src/ImageProcessor/Imaging/Helpers/Adjustments.cs +++ b/src/ImageProcessor/Imaging/Helpers/Adjustments.cs @@ -59,19 +59,19 @@ public static Bitmap Alpha(Image source, int percentage, Rectangle? rectangle = } float factor = (float)percentage / 100; - int width = source.Width; - int height = source.Height; + + Rectangle bounds = rectangle ?? new Rectangle(0, 0, source.Width, source.Height); // Traditional examples using a color matrix alter the rgb values also. - using (FastBitmap bitmap = new FastBitmap(source)) + using (var bitmap = new FastBitmap(source)) { // Loop through the pixels. Parallel.For( - 0, - height, + bounds.Y, + bounds.Bottom, y => { - for (int x = 0; x < width; x++) + for (int x = bounds.X; x < bounds.Right; x++) { // ReSharper disable AccessToDisposedClosure Color color = bitmap.GetPixel(x, y); @@ -111,7 +111,7 @@ public static Bitmap Brightness(Image source, int threshold, Rectangle? rectangl float brightnessFactor = (float)threshold / 100; Rectangle bounds = rectangle ?? new Rectangle(0, 0, source.Width, source.Height); - ColorMatrix colorMatrix = + var colorMatrix = new ColorMatrix( new[] { @@ -122,9 +122,9 @@ public static Bitmap Brightness(Image source, int threshold, Rectangle? rectangl new[] { brightnessFactor, brightnessFactor, brightnessFactor, 0, 1 } }); - using (Graphics graphics = Graphics.FromImage(source)) + using (var graphics = Graphics.FromImage(source)) { - using (ImageAttributes imageAttributes = new ImageAttributes()) + using (var imageAttributes = new ImageAttributes()) { imageAttributes.SetColorMatrix(colorMatrix); graphics.DrawImage(source, bounds, 0, 0, source.Width, source.Height, GraphicsUnit.Pixel, imageAttributes); @@ -166,7 +166,7 @@ public static Bitmap Contrast(Image source, int threshold, Rectangle? rectangle contrastFactor++; float factorTransform = 0.5f * (1.0f - contrastFactor); - ColorMatrix colorMatrix = + var colorMatrix = new ColorMatrix( new[] { @@ -177,9 +177,9 @@ public static Bitmap Contrast(Image source, int threshold, Rectangle? rectangle new[] { factorTransform, factorTransform, factorTransform, 0, 1 } }); - using (Graphics graphics = Graphics.FromImage(source)) + using (var graphics = Graphics.FromImage(source)) { - using (ImageAttributes imageAttributes = new ImageAttributes()) + using (var imageAttributes = new ImageAttributes()) { imageAttributes.SetColorMatrix(colorMatrix); graphics.DrawImage(source, bounds, 0, 0, source.Width, source.Height, GraphicsUnit.Pixel, imageAttributes); @@ -214,14 +214,13 @@ public static Bitmap Gamma(Image source, float value) byte[] ramp = new byte[256]; for (int x = 0; x < 256; ++x) { - byte val = ((255.0 * Math.Pow(x / 255.0, value)) + 0.5).ToByte(); - ramp[x] = val; + ramp[x] = ((255.0 * Math.Pow(x / 255.0, value)) + 0.5).ToByte(); } int width = source.Width; int height = source.Height; - using (FastBitmap bitmap = new FastBitmap(source)) + using (var bitmap = new FastBitmap(source)) { Parallel.For( 0, @@ -232,7 +231,7 @@ public static Bitmap Gamma(Image source, float value) { // ReSharper disable once AccessToDisposedClosure Color composite = bitmap.GetPixel(x, y); - Color linear = Color.FromArgb(composite.A, ramp[composite.R], ramp[composite.G], ramp[composite.B]); + var linear = Color.FromArgb(composite.A, ramp[composite.R], ramp[composite.G], ramp[composite.B]); // ReSharper disable once AccessToDisposedClosure bitmap.SetPixel(x, y, linear); } @@ -259,7 +258,7 @@ public static Bitmap ToLinear(Image source) int width = source.Width; int height = source.Height; - using (FastBitmap bitmap = new FastBitmap(source)) + using (var bitmap = new FastBitmap(source)) { Parallel.For( 0, @@ -270,7 +269,7 @@ public static Bitmap ToLinear(Image source) { // ReSharper disable once AccessToDisposedClosure Color composite = bitmap.GetPixel(x, y); - Color linear = Color.FromArgb(composite.A, ramp[composite.R], ramp[composite.G], ramp[composite.B]); + var linear = Color.FromArgb(composite.A, ramp[composite.R], ramp[composite.G], ramp[composite.B]); // ReSharper disable once AccessToDisposedClosure bitmap.SetPixel(x, y, linear); } @@ -297,7 +296,7 @@ public static Bitmap ToSRGB(Image source) int width = source.Width; int height = source.Height; - using (FastBitmap bitmap = new FastBitmap(source)) + using (var bitmap = new FastBitmap(source)) { Parallel.For( 0, @@ -308,7 +307,7 @@ public static Bitmap ToSRGB(Image source) { // ReSharper disable once AccessToDisposedClosure Color composite = bitmap.GetPixel(x, y); - Color linear = Color.FromArgb(composite.A, ramp[composite.R], ramp[composite.G], ramp[composite.B]); + var linear = Color.FromArgb(composite.A, ramp[composite.R], ramp[composite.G], ramp[composite.B]); // ReSharper disable once AccessToDisposedClosure bitmap.SetPixel(x, y, linear); } @@ -330,8 +329,7 @@ private static byte[] GetLinearBytes() byte[] ramp = new byte[256]; for (int x = 0; x < 256; ++x) { - byte val = (255f * SRGBToLinear(x / 255f)).ToByte(); - ramp[x] = val; + ramp[x] = (255f * SRGBToLinear(x / 255f)).ToByte(); } return ramp; @@ -349,8 +347,7 @@ private static byte[] GetSRGBBytes() byte[] ramp = new byte[256]; for (int x = 0; x < 256; ++x) { - byte val = (255f * LinearToSRGB(x / 255f)).ToByte(); - ramp[x] = val; + ramp[x] = (255f * LinearToSRGB(x / 255f)).ToByte(); } return ramp; @@ -367,7 +364,7 @@ private static byte[] GetSRGBBytes() /// private static float SRGBToLinear(float signal) { - float a = 0.055f; + const float a = 0.055f; if (signal <= 0.04045) { @@ -388,7 +385,7 @@ private static float SRGBToLinear(float signal) /// private static float LinearToSRGB(float signal) { - float a = 0.055f; + const float a = 0.055f; if (signal <= 0.0031308) { diff --git a/src/ImageProcessor/Imaging/Helpers/Converters/BigEndianBitConverter.cs b/src/ImageProcessor/Imaging/Helpers/Converters/BigEndianBitConverter.cs index c02b0176b..6a83ac9b1 100644 --- a/src/ImageProcessor/Imaging/Helpers/Converters/BigEndianBitConverter.cs +++ b/src/ImageProcessor/Imaging/Helpers/Converters/BigEndianBitConverter.cs @@ -40,10 +40,7 @@ internal sealed class BigEndianBitConverter : EndianBitConverter /// most significant byte is on the right end of a word. /// /// true if this converter is little-endian, false otherwise. - public override bool IsLittleEndian() - { - return false; - } + public override bool IsLittleEndian() => false; /// /// Copies the specified number of bytes from value to buffer, starting at index. @@ -58,7 +55,7 @@ protected internal override void CopyBytesImpl(long value, int bytes, byte[] buf for (int i = 0; i < bytes; i++) { buffer[endOffset - i] = unchecked((byte)(value & 0xff)); - value = value >> 8; + value >>= 8; } } @@ -66,16 +63,16 @@ protected internal override void CopyBytesImpl(long value, int bytes, byte[] buf /// Returns a value built from the specified number of bytes from the given buffer, /// starting at index. /// - /// The data in byte array format + /// The data in byte array format /// The first index to use /// The number of bytes to use /// The value built from the given bytes - protected internal override long FromBytes(byte[] buffer, int startIndex, int bytesToConvert) + protected internal override long FromBytes(byte[] value, int startIndex, int bytesToConvert) { long ret = 0; for (int i = 0; i < bytesToConvert; i++) { - ret = unchecked((ret << 8) | buffer[startIndex + i]); + ret = unchecked((ret << 8) | value[startIndex + i]); } return ret; diff --git a/src/ImageProcessor/Imaging/Helpers/Converters/EndianBitConverter.cs b/src/ImageProcessor/Imaging/Helpers/Converters/EndianBitConverter.cs index 474df67e2..e62360e33 100644 --- a/src/ImageProcessor/Imaging/Helpers/Converters/EndianBitConverter.cs +++ b/src/ImageProcessor/Imaging/Helpers/Converters/EndianBitConverter.cs @@ -32,7 +32,6 @@ namespace ImageProcessor.Imaging.Helpers [SuppressMessage("StyleCop.CSharp.OrderingRules", "SA1204:StaticElementsMustAppearBeforeInstanceElements", Justification = "Reviewed. Suppression is OK here. Better readability.")] internal abstract class EndianBitConverter { - #region Endianness of this converter /// /// Indicates the byte order ("endianness") in which data is converted using this class. /// @@ -48,9 +47,6 @@ internal abstract class EndianBitConverter /// Gets the byte order ("endianness") in which data is converted using this class. /// public abstract Endianness Endianness { get; } - #endregion - - #region Factory properties /// /// Gets a little-endian bit converter instance. The same instance is @@ -64,9 +60,6 @@ internal abstract class EndianBitConverter /// public static BigEndianBitConverter Big { get; } = new BigEndianBitConverter(); - #endregion - - #region Double/primitive conversions /// /// Converts the specified double-precision floating point number to a /// 64-bit signed integer. Note: the endianness of this converter does not @@ -74,10 +67,7 @@ internal abstract class EndianBitConverter /// /// The number to convert. /// A 64-bit signed integer whose value is equivalent to value. - public long DoubleToInt64Bits(double value) - { - return BitConverter.DoubleToInt64Bits(value); - } + public long DoubleToInt64Bits(double value) => BitConverter.DoubleToInt64Bits(value); /// /// Converts the specified 64-bit signed integer to a double-precision @@ -86,10 +76,7 @@ public long DoubleToInt64Bits(double value) /// /// The number to convert. /// A double-precision floating point number whose value is equivalent to value. - public double Int64BitsToDouble(long value) - { - return BitConverter.Int64BitsToDouble(value); - } + public double Int64BitsToDouble(long value) => BitConverter.Int64BitsToDouble(value); /// /// Converts the specified single-precision floating point number to a @@ -98,10 +85,7 @@ public double Int64BitsToDouble(long value) /// /// The number to convert. /// A 32-bit signed integer whose value is equivalent to value. - public int SingleToInt32Bits(float value) - { - return new Int32SingleUnion(value).AsInt32; - } + public int SingleToInt32Bits(float value) => new Int32SingleUnion(value).AsInt32; /// /// Converts the specified 32-bit signed integer to a single-precision floating point @@ -110,13 +94,8 @@ public int SingleToInt32Bits(float value) /// /// The number to convert. /// A single-precision floating point number whose value is equivalent to value. - public float Int32BitsToSingle(int value) - { - return new Int32SingleUnion(value).AsSingle; - } - #endregion + public float Int32BitsToSingle(int value) => new Int32SingleUnion(value).AsSingle; - #region To(PrimitiveType) conversions /// /// Returns a Boolean value converted from one byte at a specified position in a byte array. /// @@ -135,10 +114,7 @@ public bool ToBoolean(byte[] value, int startIndex) /// An array of bytes. /// The starting position within value. /// A character formed by two bytes beginning at startIndex. - public char ToChar(byte[] value, int startIndex) - { - return unchecked((char)this.CheckedFromBytes(value, startIndex, 2)); - } + public char ToChar(byte[] value, int startIndex) => unchecked((char)this.CheckedFromBytes(value, startIndex, 2)); /// /// Returns a double-precision floating point number converted from eight bytes @@ -147,10 +123,7 @@ public char ToChar(byte[] value, int startIndex) /// An array of bytes. /// The starting position within value. /// A double precision floating point number formed by eight bytes beginning at startIndex. - public double ToDouble(byte[] value, int startIndex) - { - return this.Int64BitsToDouble(this.ToInt64(value, startIndex)); - } + public double ToDouble(byte[] value, int startIndex) => this.Int64BitsToDouble(this.ToInt64(value, startIndex)); /// /// Returns a single-precision floating point number converted from four bytes @@ -159,10 +132,7 @@ public double ToDouble(byte[] value, int startIndex) /// An array of bytes. /// The starting position within value. /// A single precision floating point number formed by four bytes beginning at startIndex. - public float ToSingle(byte[] value, int startIndex) - { - return this.Int32BitsToSingle(this.ToInt32(value, startIndex)); - } + public float ToSingle(byte[] value, int startIndex) => this.Int32BitsToSingle(this.ToInt32(value, startIndex)); /// /// Returns a 16-bit signed integer converted from two bytes at a specified position in a byte array. @@ -170,10 +140,7 @@ public float ToSingle(byte[] value, int startIndex) /// An array of bytes. /// The starting position within value. /// A 16-bit signed integer formed by two bytes beginning at startIndex. - public short ToInt16(byte[] value, int startIndex) - { - return unchecked((short)this.CheckedFromBytes(value, startIndex, 2)); - } + public short ToInt16(byte[] value, int startIndex) => unchecked((short)this.CheckedFromBytes(value, startIndex, 2)); /// /// Returns a 32-bit signed integer converted from four bytes at a specified position in a byte array. @@ -181,10 +148,7 @@ public short ToInt16(byte[] value, int startIndex) /// An array of bytes. /// The starting position within value. /// A 32-bit signed integer formed by four bytes beginning at startIndex. - public int ToInt32(byte[] value, int startIndex) - { - return unchecked((int)this.CheckedFromBytes(value, startIndex, 4)); - } + public int ToInt32(byte[] value, int startIndex) => unchecked((int)this.CheckedFromBytes(value, startIndex, 4)); /// /// Returns a 64-bit signed integer converted from eight bytes at a specified position in a byte array. @@ -192,10 +156,7 @@ public int ToInt32(byte[] value, int startIndex) /// An array of bytes. /// The starting position within value. /// A 64-bit signed integer formed by eight bytes beginning at startIndex. - public long ToInt64(byte[] value, int startIndex) - { - return this.CheckedFromBytes(value, startIndex, 8); - } + public long ToInt64(byte[] value, int startIndex) => this.CheckedFromBytes(value, startIndex, 8); /// /// Returns a 16-bit unsigned integer converted from two bytes at a specified position in a byte array. @@ -203,10 +164,7 @@ public long ToInt64(byte[] value, int startIndex) /// An array of bytes. /// The starting position within value. /// A 16-bit unsigned integer formed by two bytes beginning at startIndex. - public ushort ToUInt16(byte[] value, int startIndex) - { - return unchecked((ushort)this.CheckedFromBytes(value, startIndex, 2)); - } + public ushort ToUInt16(byte[] value, int startIndex) => unchecked((ushort)this.CheckedFromBytes(value, startIndex, 2)); /// /// Returns a 32-bit unsigned integer converted from four bytes at a specified position in a byte array. @@ -214,10 +172,7 @@ public ushort ToUInt16(byte[] value, int startIndex) /// An array of bytes. /// The starting position within value. /// A 32-bit unsigned integer formed by four bytes beginning at startIndex. - public uint ToUInt32(byte[] value, int startIndex) - { - return unchecked((uint)this.CheckedFromBytes(value, startIndex, 4)); - } + public uint ToUInt32(byte[] value, int startIndex) => unchecked((uint)this.CheckedFromBytes(value, startIndex, 4)); /// /// Returns a 64-bit unsigned integer converted from eight bytes at a specified position in a byte array. @@ -225,10 +180,7 @@ public uint ToUInt32(byte[] value, int startIndex) /// An array of bytes. /// The starting position within value. /// A 64-bit unsigned integer formed by eight bytes beginning at startIndex. - public ulong ToUInt64(byte[] value, int startIndex) - { - return unchecked((ulong)this.CheckedFromBytes(value, startIndex, 8)); - } + public ulong ToUInt64(byte[] value, int startIndex) => unchecked((ulong)this.CheckedFromBytes(value, startIndex, 8)); /// /// Convert the given number of bytes from the given array, from the given start @@ -278,9 +230,7 @@ private long CheckedFromBytes(byte[] value, int startIndex, int bytesToConvert) CheckByteArgument(value, startIndex, bytesToConvert); return this.FromBytes(value, startIndex, bytesToConvert); } - #endregion - #region ToString conversions /// /// Returns a String converted from the elements of a byte array. /// @@ -290,10 +240,7 @@ private long CheckedFromBytes(byte[] value, int startIndex, int bytesToConvert) /// A String of hexadecimal pairs separated by hyphens, where each pair /// represents the corresponding element in value; for example, "7F-2C-4A". /// - public static string ToString(byte[] value) - { - return BitConverter.ToString(value); - } + public static string ToString(byte[] value) => BitConverter.ToString(value); /// /// Returns a String converted from the elements of a byte array starting at a specified array position. @@ -305,10 +252,7 @@ public static string ToString(byte[] value) /// A String of hexadecimal pairs separated by hyphens, where each pair /// represents the corresponding element in value; for example, "7F-2C-4A". /// - public static string ToString(byte[] value, int startIndex) - { - return BitConverter.ToString(value, startIndex); - } + public static string ToString(byte[] value, int startIndex) => BitConverter.ToString(value, startIndex); /// /// Returns a String converted from a specified number of bytes at a specified position in a byte array. @@ -321,13 +265,8 @@ public static string ToString(byte[] value, int startIndex) /// A String of hexadecimal pairs separated by hyphens, where each pair /// represents the corresponding element in value; for example, "7F-2C-4A". /// - public static string ToString(byte[] value, int startIndex, int length) - { - return BitConverter.ToString(value, startIndex, length); - } - #endregion + public static string ToString(byte[] value, int startIndex, int length) => BitConverter.ToString(value, startIndex, length); - #region Decimal conversions /// /// Returns a decimal value converted from sixteen bytes /// at a specified position in a byte array. @@ -381,9 +320,7 @@ public void CopyBytes(decimal value, byte[] buffer, int index) this.CopyBytesImpl(parts[i], 4, buffer, (i * 4) + index); } } - #endregion - #region GetBytes conversions /// /// Returns an array with the given number of bytes formed /// from the least significant bytes of the specified value. @@ -409,10 +346,7 @@ private byte[] GetBytes(long value, int bytes) /// /// The . /// - public byte[] GetBytes(bool value) - { - return BitConverter.GetBytes(value); - } + public byte[] GetBytes(bool value) => BitConverter.GetBytes(value); /// /// Returns the specified Unicode character value as an array of bytes. @@ -422,94 +356,64 @@ public byte[] GetBytes(bool value) /// /// The . /// - public byte[] GetBytes(char value) - { - return this.GetBytes(value, 2); - } + public byte[] GetBytes(char value) => this.GetBytes(value, 2); /// /// Returns the specified double-precision floating point value as an array of bytes. /// /// The number to convert. /// An array of bytes with length 8. - public byte[] GetBytes(double value) - { - return this.GetBytes(this.DoubleToInt64Bits(value), 8); - } + public byte[] GetBytes(double value) => this.GetBytes(this.DoubleToInt64Bits(value), 8); /// /// Returns the specified 16-bit signed integer value as an array of bytes. /// /// The number to convert. /// An array of bytes with length 2. - public byte[] GetBytes(short value) - { - return this.GetBytes(value, 2); - } + public byte[] GetBytes(short value) => this.GetBytes(value, 2); /// /// Returns the specified 32-bit signed integer value as an array of bytes. /// /// The number to convert. /// An array of bytes with length 4. - public byte[] GetBytes(int value) - { - return this.GetBytes(value, 4); - } + public byte[] GetBytes(int value) => this.GetBytes(value, 4); /// /// Returns the specified 64-bit signed integer value as an array of bytes. /// /// The number to convert. /// An array of bytes with length 8. - public byte[] GetBytes(long value) - { - return this.GetBytes(value, 8); - } + public byte[] GetBytes(long value) => this.GetBytes(value, 8); /// /// Returns the specified single-precision floating point value as an array of bytes. /// /// The number to convert. /// An array of bytes with length 4. - public byte[] GetBytes(float value) - { - return this.GetBytes(this.SingleToInt32Bits(value), 4); - } + public byte[] GetBytes(float value) => this.GetBytes(this.SingleToInt32Bits(value), 4); /// /// Returns the specified 16-bit unsigned integer value as an array of bytes. /// /// The number to convert. /// An array of bytes with length 2. - public byte[] GetBytes(ushort value) - { - return this.GetBytes(value, 2); - } + public byte[] GetBytes(ushort value) => this.GetBytes(value, 2); /// /// Returns the specified 32-bit unsigned integer value as an array of bytes. /// /// The number to convert. /// An array of bytes with length 4. - public byte[] GetBytes(uint value) - { - return this.GetBytes(value, 4); - } + public byte[] GetBytes(uint value) => this.GetBytes(value, 4); /// /// Returns the specified 64-bit unsigned integer value as an array of bytes. /// /// The number to convert. /// An array of bytes with length 8. - public byte[] GetBytes(ulong value) - { - return this.GetBytes(unchecked((long)value), 8); - } - - #endregion + public byte[] GetBytes(ulong value) => this.GetBytes(unchecked((long)value), 8); - #region CopyBytes conversions /// /// Copies the given number of bytes from the least-specific /// end of the specified value into the specified byte array, beginning @@ -555,10 +459,7 @@ private void CopyBytes(long value, int bytes, byte[] buffer, int index) /// A Boolean value. /// The byte array to copy the bytes into /// The first index into the array to copy the bytes into - public void CopyBytes(bool value, byte[] buffer, int index) - { - this.CopyBytes(value ? 1 : 0, 1, buffer, index); - } + public void CopyBytes(bool value, byte[] buffer, int index) => this.CopyBytes(value ? 1 : 0, 1, buffer, index); /// /// Copies the specified Unicode character value into the specified byte array, @@ -567,10 +468,7 @@ public void CopyBytes(bool value, byte[] buffer, int index) /// A character to convert. /// The byte array to copy the bytes into /// The first index into the array to copy the bytes into - public void CopyBytes(char value, byte[] buffer, int index) - { - this.CopyBytes(value, 2, buffer, index); - } + public void CopyBytes(char value, byte[] buffer, int index) => this.CopyBytes(value, 2, buffer, index); /// /// Copies the specified double-precision floating point value into the specified byte array, @@ -579,10 +477,7 @@ public void CopyBytes(char value, byte[] buffer, int index) /// The number to convert. /// The byte array to copy the bytes into /// The first index into the array to copy the bytes into - public void CopyBytes(double value, byte[] buffer, int index) - { - this.CopyBytes(this.DoubleToInt64Bits(value), 8, buffer, index); - } + public void CopyBytes(double value, byte[] buffer, int index) => this.CopyBytes(this.DoubleToInt64Bits(value), 8, buffer, index); /// /// Copies the specified 16-bit signed integer value into the specified byte array, @@ -591,10 +486,7 @@ public void CopyBytes(double value, byte[] buffer, int index) /// The number to convert. /// The byte array to copy the bytes into /// The first index into the array to copy the bytes into - public void CopyBytes(short value, byte[] buffer, int index) - { - this.CopyBytes(value, 2, buffer, index); - } + public void CopyBytes(short value, byte[] buffer, int index) => this.CopyBytes(value, 2, buffer, index); /// /// Copies the specified 32-bit signed integer value into the specified byte array, @@ -603,10 +495,7 @@ public void CopyBytes(short value, byte[] buffer, int index) /// The number to convert. /// The byte array to copy the bytes into /// The first index into the array to copy the bytes into - public void CopyBytes(int value, byte[] buffer, int index) - { - this.CopyBytes(value, 4, buffer, index); - } + public void CopyBytes(int value, byte[] buffer, int index) => this.CopyBytes(value, 4, buffer, index); /// /// Copies the specified 64-bit signed integer value into the specified byte array, @@ -615,10 +504,7 @@ public void CopyBytes(int value, byte[] buffer, int index) /// The number to convert. /// The byte array to copy the bytes into /// The first index into the array to copy the bytes into - public void CopyBytes(long value, byte[] buffer, int index) - { - this.CopyBytes(value, 8, buffer, index); - } + public void CopyBytes(long value, byte[] buffer, int index) => this.CopyBytes(value, 8, buffer, index); /// /// Copies the specified single-precision floating point value into the specified byte array, @@ -627,10 +513,7 @@ public void CopyBytes(long value, byte[] buffer, int index) /// The number to convert. /// The byte array to copy the bytes into /// The first index into the array to copy the bytes into - public void CopyBytes(float value, byte[] buffer, int index) - { - this.CopyBytes(this.SingleToInt32Bits(value), 4, buffer, index); - } + public void CopyBytes(float value, byte[] buffer, int index) => this.CopyBytes(this.SingleToInt32Bits(value), 4, buffer, index); /// /// Copies the specified 16-bit unsigned integer value into the specified byte array, @@ -639,10 +522,7 @@ public void CopyBytes(float value, byte[] buffer, int index) /// The number to convert. /// The byte array to copy the bytes into /// The first index into the array to copy the bytes into - public void CopyBytes(ushort value, byte[] buffer, int index) - { - this.CopyBytes(value, 2, buffer, index); - } + public void CopyBytes(ushort value, byte[] buffer, int index) => this.CopyBytes(value, 2, buffer, index); /// /// Copies the specified 32-bit unsigned integer value into the specified byte array, @@ -651,10 +531,7 @@ public void CopyBytes(ushort value, byte[] buffer, int index) /// The number to convert. /// The byte array to copy the bytes into /// The first index into the array to copy the bytes into - public void CopyBytes(uint value, byte[] buffer, int index) - { - this.CopyBytes(value, 4, buffer, index); - } + public void CopyBytes(uint value, byte[] buffer, int index) => this.CopyBytes(value, 4, buffer, index); /// /// Copies the specified 64-bit unsigned integer value into the specified byte array, @@ -663,19 +540,13 @@ public void CopyBytes(uint value, byte[] buffer, int index) /// The number to convert. /// The byte array to copy the bytes into /// The first index into the array to copy the bytes into - public void CopyBytes(ulong value, byte[] buffer, int index) - { - this.CopyBytes(unchecked((long)value), 8, buffer, index); - } - - #endregion + public void CopyBytes(ulong value, byte[] buffer, int index) => this.CopyBytes(unchecked((long)value), 8, buffer, index); - #region Private struct used for Single/Int32 conversions /// /// Union used solely for the equivalent of DoubleToInt64Bits and vice versa. /// [StructLayout(LayoutKind.Explicit)] - private struct Int32SingleUnion + private readonly struct Int32SingleUnion { /// /// Int32 version of the value. @@ -721,6 +592,5 @@ internal Int32SingleUnion(float f) /// internal float AsSingle => this.f; } - #endregion } } diff --git a/src/ImageProcessor/Imaging/Helpers/Converters/LittleEndianBitConverter.cs b/src/ImageProcessor/Imaging/Helpers/Converters/LittleEndianBitConverter.cs index 5b8b9cab5..afc870262 100644 --- a/src/ImageProcessor/Imaging/Helpers/Converters/LittleEndianBitConverter.cs +++ b/src/ImageProcessor/Imaging/Helpers/Converters/LittleEndianBitConverter.cs @@ -41,10 +41,7 @@ internal sealed class LittleEndianBitConverter : EndianBitConverter /// most significant byte is on the right end of a word. /// /// true if this converter is little-endian, false otherwise. - public override bool IsLittleEndian() - { - return true; - } + public override bool IsLittleEndian() => true; /// /// Copies the specified number of bytes from value to buffer, starting at index. @@ -58,7 +55,7 @@ protected internal override void CopyBytesImpl(long value, int bytes, byte[] buf for (int i = 0; i < bytes; i++) { buffer[i + index] = unchecked((byte)(value & 0xff)); - value = value >> 8; + value >>= 8; } } @@ -66,16 +63,16 @@ protected internal override void CopyBytesImpl(long value, int bytes, byte[] buf /// Returns a value built from the specified number of bytes from the given buffer, /// starting at index. /// - /// The data in byte array format + /// The data in byte array format /// The first index to use /// The number of bytes to use /// The value built from the given bytes - protected internal override long FromBytes(byte[] buffer, int startIndex, int bytesToConvert) + protected internal override long FromBytes(byte[] value, int startIndex, int bytesToConvert) { long ret = 0; for (int i = 0; i < bytesToConvert; i++) { - ret = unchecked((ret << 8) | buffer[startIndex + bytesToConvert - 1 - i]); + ret = unchecked((ret << 8) | value[startIndex + bytesToConvert - 1 - i]); } return ret; diff --git a/src/ImageProcessor/Imaging/Helpers/Effects.cs b/src/ImageProcessor/Imaging/Helpers/Effects.cs index 0d002b07d..c0b08dc66 100644 --- a/src/ImageProcessor/Imaging/Helpers/Effects.cs +++ b/src/ImageProcessor/Imaging/Helpers/Effects.cs @@ -45,7 +45,7 @@ public static class Effects /// public static Bitmap Vignette(Image source, Color baseColor, Rectangle? rectangle = null, bool invert = false) { - using (Graphics graphics = Graphics.FromImage(source)) + using (var graphics = Graphics.FromImage(source)) { Rectangle bounds = rectangle ?? new Rectangle(0, 0, source.Width, source.Height); Rectangle ellipsebounds = bounds; @@ -58,10 +58,10 @@ public static Bitmap Vignette(Image source, Color baseColor, Rectangle? rectangl int y = ellipsebounds.Height - (int)Math.Floor(.70712 * ellipsebounds.Height); ellipsebounds.Inflate(x, y); - using (GraphicsPath path = new GraphicsPath()) + using (var path = new GraphicsPath()) { path.AddEllipse(ellipsebounds); - using (PathGradientBrush brush = new PathGradientBrush(path)) + using (var brush = new PathGradientBrush(path)) { // Fill a rectangle with an elliptical gradient brush that goes from transparent to opaque. // This has the effect of painting the far corners with the given color and shade less on the way in to the centre. @@ -82,7 +82,7 @@ public static Bitmap Vignette(Image source, Color baseColor, Rectangle? rectangl brush.CenterColor = centerColor; brush.SurroundColors = new[] { edgeColor }; - Blend blend = new Blend + var blend = new Blend { Positions = new[] { 0.0f, 0.2f, 0.4f, 0.6f, 0.8f, 1.0F }, Factors = new[] { 0.0f, 0.5f, 1f, 1f, 1.0f, 1.0f } @@ -109,10 +109,7 @@ public static Bitmap Vignette(Image source, Color baseColor, Rectangle? rectangl /// The rectangle to define the bounds of the area to vignette. If null then the effect is applied /// to the entire image. /// The with the vignette applied. - public static Bitmap Glow(Image source, Color baseColor, Rectangle? rectangle = null) - { - return Vignette(source, baseColor, rectangle, true); - } + public static Bitmap Glow(Image source, Color baseColor, Rectangle? rectangle = null) => Vignette(source, baseColor, rectangle, true); /// /// Applies the given image mask to the source. @@ -139,13 +136,13 @@ public static Bitmap ApplyMask(Image source, Image mask) int width = mask.Width; int height = mask.Height; - Bitmap toMask = new Bitmap(source); + var toMask = new Bitmap(source); toMask.SetResolution(source.HorizontalResolution, source.VerticalResolution); // Loop through and replace the alpha channel - using (FastBitmap maskBitmap = new FastBitmap(mask)) + using (var maskBitmap = new FastBitmap(mask)) { - using (FastBitmap sourceBitmap = new FastBitmap(toMask)) + using (var sourceBitmap = new FastBitmap(toMask)) { Parallel.For( 0, @@ -170,9 +167,9 @@ public static Bitmap ApplyMask(Image source, Image mask) } // Ensure the background is cleared out on non alpha supporting formats. - Bitmap clear = new Bitmap(width, height, PixelFormat.Format32bppPArgb); + var clear = new Bitmap(width, height, PixelFormat.Format32bppPArgb); clear.SetResolution(source.HorizontalResolution, source.VerticalResolution); - using (Graphics graphics = Graphics.FromImage(clear)) + using (var graphics = Graphics.FromImage(clear)) { GraphicsHelper.SetGraphicsOptions(graphics, true); graphics.Clear(Color.Transparent); @@ -205,7 +202,7 @@ public static Bitmap Trace(Image source, Image destination, byte threshold = 0) int height = source.Height; // Grab the edges converting to greyscale, and invert the colors. - ConvolutionFilter filter = new ConvolutionFilter(new SobelEdgeFilter(), true); + var filter = new ConvolutionFilter(new SobelEdgeFilter(), true); using (Bitmap temp = filter.Process2DFilter(source)) { @@ -217,7 +214,7 @@ public static Bitmap Trace(Image source, Image destination, byte threshold = 0) // Loop through and replace any colors more white than the threshold // with a transparent one. - using (FastBitmap destinationBitmap = new FastBitmap(destination)) + using (var destinationBitmap = new FastBitmap(destination)) { Parallel.For( 0, diff --git a/src/ImageProcessor/Imaging/Helpers/ImageMaths.cs b/src/ImageProcessor/Imaging/Helpers/ImageMaths.cs index 4fe2b9c84..8b83362aa 100644 --- a/src/ImageProcessor/Imaging/Helpers/ImageMaths.cs +++ b/src/ImageProcessor/Imaging/Helpers/ImageMaths.cs @@ -105,10 +105,7 @@ public static bool InRange(T value, T min, T max, bool include = true) where /// /// The representing the degree as radians. /// - public static double DegreesToRadians(double angleInDegrees) - { - return angleInDegrees * (Math.PI / 180); - } + public static double DegreesToRadians(double angleInDegrees) => angleInDegrees * (Math.PI / 180); /// /// Gets the bounding from the given points. @@ -122,10 +119,7 @@ public static double DegreesToRadians(double angleInDegrees) /// /// The bounding . /// - public static Rectangle GetBoundingRectangle(Point topLeft, Point bottomRight) - { - return new Rectangle(topLeft.X, topLeft.Y, bottomRight.X - topLeft.X, bottomRight.Y - topLeft.Y); - } + public static Rectangle GetBoundingRectangle(Point topLeft, Point bottomRight) => new Rectangle(topLeft.X, topLeft.Y, bottomRight.X - topLeft.X, bottomRight.Y - topLeft.Y); /// /// Calculates the new size after rotation. @@ -150,7 +144,7 @@ public static Rectangle GetBoundingRotatedRectangle(int width, int height, float double height2 = (width * radiansSin) + (height * radiansCos); // Get the external vertex for the rotation - Rectangle result = new Rectangle( + var result = new Rectangle( 0, 0, Convert.ToInt32(Math.Max(Math.Abs(width1), Math.Abs(width2))), @@ -179,8 +173,8 @@ public static Rectangle GetFilteredBoundingRectangle(Image bitmap, byte componen { int width = bitmap.Width; int height = bitmap.Height; - Point topLeft = new Point(); - Point bottomRight = new Point(); + var topLeft = new Point(); + var bottomRight = new Point(); Func delegateFunc; @@ -204,7 +198,7 @@ public static Rectangle GetFilteredBoundingRectangle(Image bitmap, byte componen break; } - Func getMinY = fastBitmap => + int getMinY(FastBitmap fastBitmap) { for (int y = 0; y < height; y++) { @@ -218,9 +212,9 @@ public static Rectangle GetFilteredBoundingRectangle(Image bitmap, byte componen } return 0; - }; + } - Func getMaxY = fastBitmap => + int getMaxY(FastBitmap fastBitmap) { for (int y = height - 1; y > -1; y--) { @@ -234,9 +228,9 @@ public static Rectangle GetFilteredBoundingRectangle(Image bitmap, byte componen } return height; - }; + } - Func getMinX = fastBitmap => + int getMinX(FastBitmap fastBitmap) { for (int x = 0; x < width; x++) { @@ -250,9 +244,9 @@ public static Rectangle GetFilteredBoundingRectangle(Image bitmap, byte componen } return 0; - }; + } - Func getMaxX = fastBitmap => + int getMaxX(FastBitmap fastBitmap) { for (int x = width - 1; x > -1; x--) { @@ -266,9 +260,9 @@ public static Rectangle GetFilteredBoundingRectangle(Image bitmap, byte componen } return height; - }; + } - using (FastBitmap fastBitmap = new FastBitmap(bitmap)) + using (var fastBitmap = new FastBitmap(bitmap)) { topLeft.Y = getMinY(fastBitmap); topLeft.X = getMinX(fastBitmap); @@ -300,12 +294,12 @@ public static Point RotatePoint(Point pointToRotate, double angleInDegrees, Poin { X = (int) - (cosTheta * (pointToRotate.X - center.X) - - sinTheta * (pointToRotate.Y - center.Y) + center.X), + ((cosTheta * (pointToRotate.X - center.X)) + - (sinTheta * (pointToRotate.Y - center.Y)) + center.X), Y = (int) - (sinTheta * (pointToRotate.X - center.X) + - cosTheta * (pointToRotate.Y - center.Y) + center.Y) + ((sinTheta * (pointToRotate.X - center.X)) + + (cosTheta * (pointToRotate.Y - center.Y)) + center.Y) }; } diff --git a/src/ImageProcessor/Imaging/Helpers/PixelOperations.cs b/src/ImageProcessor/Imaging/Helpers/PixelOperations.cs index b25ab359e..8847743d2 100644 --- a/src/ImageProcessor/Imaging/Helpers/PixelOperations.cs +++ b/src/ImageProcessor/Imaging/Helpers/PixelOperations.cs @@ -68,8 +68,7 @@ public static Color Gamma(Color color, float value) byte[] ramp = new byte[256]; for (int x = 0; x < 256; ++x) { - byte val = ((255.0 * Math.Pow(x / 255.0, value)) + 0.5).ToByte(); - ramp[x] = val; + ramp[x] = ((255.0 * Math.Pow(x / 255.0, value)) + 0.5).ToByte(); } byte r = ramp[color.R]; @@ -159,8 +158,7 @@ private static byte[] GetLinearGammaBytes() byte[] ramp = new byte[256]; for (int x = 0; x < 256; ++x) { - byte val = (255f * Math.Pow(x / 255f, 2.2)).ToByte(); - ramp[x] = val; + ramp[x] = (255f * Math.Pow(x / 255f, 2.2)).ToByte(); } return ramp; @@ -178,8 +176,7 @@ private static byte[] GetGammaLinearBytes() byte[] ramp = new byte[256]; for (int x = 0; x < 256; ++x) { - byte val = (255f * Math.Pow(x / 255f, 1 / 2.2)).ToByte(); - ramp[x] = val; + ramp[x] = (255f * Math.Pow(x / 255f, 1 / 2.2)).ToByte(); } return ramp; @@ -197,8 +194,7 @@ private static byte[] GetLinearBytes() byte[] ramp = new byte[256]; for (int x = 0; x < 256; ++x) { - byte val = (255f * SRGBToLinear(x / 255f)).ToByte(); - ramp[x] = val; + ramp[x] = (255f * SRGBToLinear(x / 255f)).ToByte(); } return ramp; @@ -216,8 +212,7 @@ private static byte[] GetSRGBBytes() byte[] ramp = new byte[256]; for (int x = 0; x < 256; ++x) { - byte val = (255f * LinearToSRGB(x / 255f)).ToByte(); - ramp[x] = val; + ramp[x] = (255f * LinearToSRGB(x / 255f)).ToByte(); } return ramp; @@ -234,7 +229,7 @@ private static byte[] GetSRGBBytes() /// private static float SRGBToLinear(float signal) { - float a = 0.055f; + const float a = 0.055f; if (signal <= 0.04045) { @@ -255,7 +250,7 @@ private static float SRGBToLinear(float signal) /// private static float LinearToSRGB(float signal) { - float a = 0.055f; + const float a = 0.055f; if (signal <= 0.0031308) { diff --git a/src/ImageProcessor/Imaging/ImageLayer.cs b/src/ImageProcessor/Imaging/ImageLayer.cs index cef7ab451..99bd9e57a 100644 --- a/src/ImageProcessor/Imaging/ImageLayer.cs +++ b/src/ImageProcessor/Imaging/ImageLayer.cs @@ -64,9 +64,7 @@ public class ImageLayer : IDisposable /// public override bool Equals(object obj) { - ImageLayer imageLayer = obj as ImageLayer; - - if (imageLayer == null) + if (!(obj is ImageLayer imageLayer)) { return false; } @@ -90,18 +88,14 @@ public override int GetHashCode() int hashCode = this.Image.GetHashCode(); hashCode = (hashCode * 397) ^ this.Size.GetHashCode(); hashCode = (hashCode * 397) ^ this.Opacity; - hashCode = (hashCode * 397) ^ this.Position.GetHashCode(); - return hashCode; + return (hashCode * 397) ^ this.Position.GetHashCode(); } } /// /// Disposes the object and frees resources for the Garbage Collector. /// - public void Dispose() - { - this.Dispose(true); - } + public void Dispose() => this.Dispose(true); /// /// Disposes the object and frees resources for the Garbage Collector. diff --git a/src/ImageProcessor/Imaging/Interpolation.cs b/src/ImageProcessor/Imaging/Interpolation.cs index 2d3e11d15..fc5a064fe 100644 --- a/src/ImageProcessor/Imaging/Interpolation.cs +++ b/src/ImageProcessor/Imaging/Interpolation.cs @@ -32,25 +32,23 @@ internal static class Interpolation public static double BiCubicKernel(double x) { // The coefficient. - double a = -0.5; + const double a = -0.5; if (x < 0) { x = -x; } - double bicubicCoeffient = 0; - if (x <= 1) { - bicubicCoeffient = (((1.5 * x) - 2.5) * x * x) + 1; + return (((1.5 * x) - 2.5) * x * x) + 1; } else if (x < 2) { - bicubicCoeffient = (((((a * x) + 2.5) * x) - 4) * x) + 2; + return (((((a * x) + 2.5) * x) - 4) * x) + 2; } - return bicubicCoeffient; + return 0; } /// diff --git a/src/ImageProcessor/Imaging/MetaData/ExifBitConverter.cs b/src/ImageProcessor/Imaging/MetaData/ExifBitConverter.cs index 9226974d5..4e974c9af 100644 --- a/src/ImageProcessor/Imaging/MetaData/ExifBitConverter.cs +++ b/src/ImageProcessor/Imaging/MetaData/ExifBitConverter.cs @@ -31,10 +31,7 @@ internal sealed class ExifBitConverter : EndianBitConverter /// /// The computer architecture info. /// - public ExifBitConverter(IComputerArchitectureInfo computerArchitectureInfo) - { - this.computerArchitectureInfo = computerArchitectureInfo; - } + public ExifBitConverter(IComputerArchitectureInfo computerArchitectureInfo) => this.computerArchitectureInfo = computerArchitectureInfo; /// /// Indicates the byte order ("endianness") in which data is converted using this class. @@ -50,10 +47,7 @@ public ExifBitConverter(IComputerArchitectureInfo computerArchitectureInfo) /// most significant byte is on the right end of a word. /// /// true if this converter is little-endian, false otherwise. - public override bool IsLittleEndian() - { - return this.computerArchitectureInfo.IsLittleEndian(); - } + public override bool IsLittleEndian() => this.computerArchitectureInfo.IsLittleEndian(); /// /// Converts the given ascii string to an array of bytes optionally adding a null terminator. @@ -87,10 +81,7 @@ public byte[] GetBytes(string value, bool addnull) /// /// The . /// - public byte[] GetBytes(string value) - { - return this.GetBytes(value, false); - } + public byte[] GetBytes(string value) => this.GetBytes(value, false); /// /// Converts the given unsigned rational number to an array of bytes. diff --git a/src/ImageProcessor/Imaging/MetaData/ExifPropertyTag.cs b/src/ImageProcessor/Imaging/MetaData/ExifPropertyTag.cs index 0a41a0580..d56b5b2ab 100644 --- a/src/ImageProcessor/Imaging/MetaData/ExifPropertyTag.cs +++ b/src/ImageProcessor/Imaging/MetaData/ExifPropertyTag.cs @@ -17,1176 +17,1176 @@ namespace ImageProcessor.Imaging.MetaData public enum ExifPropertyTag { /// - /// Null-terminated character string that specifies the name of the person who created the image. + /// Version of the Global Positioning Systems (GPS) IFD, given as 2.0.0.0. This tag is mandatory when + /// the tag is present. When the version is 2.0.0.0, the tag value is 0x02000000. /// - Artist = 0x013B, + GpsVer = 0x0000, /// - /// Number of bits per color component. See also + /// Null-terminated character string that specifies whether the longitude is east or west longitude. + /// E specifies east longitude, and W specifies west longitude. /// - BitsPerSample = 0x0102, + GpsLatitudeRef = 0x0001, /// - /// Height of the dithering or halftoning matrix. + /// Latitude. Latitude is expressed as three rational values giving the degrees, minutes, and seconds respectively. When degrees, minutes, and seconds are expressed, the format is dd/1, mm/1, ss/1. When degrees and minutes are used and, for example, fractions of minutes are given up to two decimal places, the format is dd/1, mmmm/100, 0/1. /// - CellHeight = 0x0109, + GpsLatitude = 0x0002, /// - /// Width of the dithering or halftoning matrix. + /// Null-terminated character string that specifies whether the longitude is east or west longitude. + /// E specifies east longitude, and W specifies west longitude. /// - CellWidth = 0x0108, + GpsLongitudeRef = 0x0003, /// - /// Chrominance table. The luminance table and the chrominance table are used to control JPEG quality. - /// A valid luminance or chrominance table has 64 entries. - /// If an image has either a luminance table or a chrominance table, then it must have both tables. + /// Longitude. Longitude is expressed as three rational values giving the degrees, minutes, and seconds + /// respectively. When degrees, minutes and seconds are expressed, the format is ddd/1, mm/1, ss/1. + /// When degrees and minutes are used and, for example, fractions of minutes are given up to two + /// decimal places, the format is ddd/1, mmmm/100, 0/1. /// - ChrominanceTable = 0x5091, + GpsLongitude = 0x0004, /// - /// Color palette (lookup table) for a palette-indexed image. + /// Reference altitude, in meters. /// - ColorMap = 0x0140, + GpsAltitudeRef = 0x0005, /// - /// Table of values that specify color transfer functions. + /// Altitude, in meters, based on the reference altitude specified by . /// - ColorTransferFunction = 0x501A, + GpsAltitude = 0x0006, /// - /// Compression scheme used for the image data. + /// Time as coordinated universal time (UTC). The value is expressed as three rational numbers that give the hour, minute, and second. /// - Compression = 0x0103, + GpsGpsTime = 0x0007, /// - /// Null-terminated character string that contains copyright information. + /// Null-terminated character string that specifies the GPS satellites used for measurements. This tag can be used to specify the ID number, angle of elevation, azimuth, SNR, and other information about each satellite. The format is not specified. If the GPS receiver is incapable of taking measurements, the value of the tag must be set to NULL. /// - Copyright = 0x8298, + GpsGpsSatellites = 0x0008, /// - /// Date and time the image was created. + /// Null-terminated character string that specifies the status of the GPS receiver when the image is recorded. A means measurement is in progress, and V means the measurement is Interoperability. /// - DateTime = 0x0132, + GpsGpsStatus = 0x0009, /// - /// Null-terminated character string that specifies the name of the document from - /// which the image was scanned. + /// Null-terminated character string that specifies the GPS measurement mode. 2 specifies 2-D measurement, and 3 specifies 3-D measurement. /// - DocumentName = 0x010D, + GpsGpsMeasureMode = 0x000A, /// - /// Color component values that correspond to a 0 percent dot and a 100 percent dot. + /// GPS DOP (data degree of precision). An HDOP value is written during 2-D measurement, and a PDOP value is written during 3-D measurement. /// - DotRange = 0x0150, + GpsGpsDop = 0x000B, /// - /// Null-terminated character string that specifies the manufacturer of the - /// equipment used to record the image. + /// Null-terminated character string that specifies the unit used to express the GPS receiver speed of movement. + /// K, M, and N represent kilometers per hour, miles per hour, and knots respectively. /// - EquipMake = 0x010F, + GpsSpeedRef = 0x000C, /// - /// Null-terminated character string that specifies the model name or model number - /// of the equipment used to record the image. + /// Speed of the GPS receiver movement. /// - EquipModel = 0x0110, + GpsSpeed = 0x000D, /// - /// Lens aperture. The unit is the APEX value. + /// Null-terminated character string that specifies the reference for giving the direction of + /// GPS receiver movement. T specifies true direction, and M specifies magnetic direction. /// - ExifAperture = 0x9202, + GpsTrackRef = 0x000E, /// - /// Brightness value. The unit is the APEX value. Ordinarily it is given - /// in the range of -99.99 to 99.99. + /// Direction of GPS receiver movement. The range of values is from 0.00 to 359.99. /// - ExifBrightness = 0x9203, + GpsTrack = 0x000F, /// - /// The color filter array (CFA) geometric pattern of the image sensor when a one-chip color - /// area sensor is used. It does not apply to all sensing methods. + /// Null-terminated character string that specifies the reference for the direction of the image when it is captured. T specifies true direction, and M specifies magnetic direction. /// - ExifCfaPattern = 0xA302, + GpsImgDirRef = 0x0010, /// - /// Color space specifier. Normally sRGB (=1) is used to define the color space - /// based on the PC monitor conditions and environment. If a color space other - /// than sRGB is used, Uncalibrated (=0xFFFF) is set. Image data recorded as - /// Uncalibrated can be treated as sRGB when it is converted to FlashPix. + /// Direction of the image when it was captured. The range of values is from 0.00 to 359.99. /// - ExifColorSpace = 0xA001, + GpsImgDir = 0x0011, /// - /// Information specific to compressed data. The compression mode used for a - /// compressed image is indicated in unit BPP. + /// Null-terminated character string that specifies geodetic survey data used by the GPS receiver. + /// If the survey data is restricted to Japan, the value of this tag is TOKYO or WGS-84. /// - ExifCompBPP = 0x9102, + GpsMapDatum = 0x0012, /// - /// Information specific to compressed data. The channels of each component are - /// arranged in order from the first component to the fourth. For - /// uncompressed data, the data arrangement is given in the - /// PhotometricInterp tag. - /// - /// However, because PhotometricInterp can only express the order of Y, Cb, and Cr, - /// this tag is provided for cases when compressed data uses components other than - /// Y, Cb, and Cr and to support other sequences. - /// + /// Null-terminated character string that specifies whether the latitude of the destination point is north or south + /// latitude. N specifies north latitude, and S specifies south latitude. /// - ExifCompConfig = 0x9101, + GpsDestLatRef = 0x0013, /// - /// Date and time when the image was stored as digital data. If, for example, an image - /// was captured by DSC and at the same time the file was recorded, then DateTimeOriginal - /// and DateTimeDigitized will have the same contents. - /// - /// The format is YYYY:MM:DD HH:MM:SS with time shown in 24-hour format and the date and - /// time separated by one blank character (0x2000). The character string length is 20 bytes - /// including the NULL terminator. When the field is empty, it is treated as unknown. - /// + /// Latitude of the destination point. The latitude is expressed as three rational values giving the degrees, + /// minutes, and seconds respectively. When degrees, minutes, and seconds are expressed, the format is + /// dd/1, mm/1, ss/1. When degrees and minutes are used and, for example, fractions of minutes are given up to + /// two decimal places, the format is dd/1, mmmm/100, 0/1. /// - ExifDTDigitized = 0x9004, + GpsDestLat = 0x0014, /// - /// Null-terminated character string that specifies a fraction of a second for the ExifDTDigitized tag. + /// Null-terminated character string that specifies whether the longitude of the destination point is east or west longitude. E specifies east longitude, and W specifies west longitude. /// - ExifDTDigSS = 0x9292, + GpsDestLongRef = 0x0015, /// - /// Date and time when the original image data was generated. For a DSC, the date and time when the picture was taken. The format is YYYY:MM:DD HH:MM:SS with time shown in 24-hour format and the date and time separated by one blank character (0x2000). The character string length is 20 bytes including the NULL terminator. When the field is empty, it is treated as unknown. + /// Longitude of the destination point. The longitude is expressed as three rational values giving the degrees, minutes, and seconds respectively. When degrees, minutes, and seconds are expressed, the format is ddd/1, mm/1, ss/1. When degrees and minutes are used and, for example, fractions of minutes are given up to two decimal places, the format is ddd/1, mmmm/100, 0/1. /// - ExifDTOrig = 0x9003, + GpsDestLong = 0x0016, /// - /// Null-terminated character string that specifies a fraction of a second for the tag. + /// Null-terminated character string that specifies the reference used for giving the bearing to the destination point. T specifies true direction, and M specifies magnetic direction. /// - ExifDTOrigSS = 0x9291, + GpsDestBearRef = 0x0017, /// - /// Null-terminated character string that specifies a fraction of a second for the tag. + /// Bearing to the destination point. The range of values is from 0.00 to 359.99. /// - ExifDTSubsec = 0x9290, + GpsDestBear = 0x0018, /// - /// Exposure bias. The unit is the APEX value. Ordinarily it is given in the range -99.99 to 99.99. + /// Null-terminated character string that specifies the unit used to express the distance to the destination point. + /// K, M, and N represent kilometers, miles, and knots respectively. /// - ExifExposureBias = 0x9204, + GpsDestDistRef = 0x0019, /// - /// Exposure index selected on the camera or input device at the time the image was captured. + /// Distance to the destination point. /// - ExifExposureIndex = 0xA215, + GpsDestDist = 0x001A, /// - /// Class of the program used by the camera to set exposure when the picture is taken. + /// Type of data in a subfile. /// - ExifExposureProg = 0x8822, + NewSubfileType = 0x00FE, /// - /// Exposure time, measured in seconds. + /// The type of data in a subfile. /// - ExifExposureTime = 0x829A, + SubfileType = 0x00FF, /// - /// The image source. If a DSC recorded the image, the value of this tag is 3. + /// Number of pixels per row. /// - ExifFileSource = 0xA300, + ImageWidth = 0x0100, /// - /// Flash status. This tag is recorded when an image is taken using a strobe light (flash). Bit 0 indicates the flash firing status, and bits 1 and 2 indicate the flash return status. + /// Number of pixel rows. /// - ExifFlash = 0x9209, + ImageHeight = 0x0101, /// - /// Strobe energy, in Beam Candle Power Seconds (BCPS), at the time the image was captured. + /// Number of bits per color component. See also /// - ExifFlashEnergy = 0xA20B, + BitsPerSample = 0x0102, /// - /// F number. + /// Compression scheme used for the image data. /// - ExifFNumber = 0x829D, + Compression = 0x0103, /// - /// Actual focal length, in millimeters, of the lens. Conversion is not made to the focal length of a 35 millimeter film camera. + /// How pixel data will be interpreted. /// - ExifFocalLength = 0x920A, + PhotometricInterp = 0x0106, /// - /// Unit of measure for and . + /// Technique used to convert from gray pixels to black and white pixels. /// - ExifFocalResUnit = 0xA210, + ThreshHolding = 0x0107, /// - /// Number of pixels in the image width (x) direction per unit on the camera focal plane. The unit is specified - /// in . + /// Width of the dithering or halftoning matrix. /// - ExifFocalXRes = 0xA20E, + CellWidth = 0x0108, /// - /// Number of pixels in the image height (y) direction per unit on the camera focal plane. The unit is specified - /// in . + /// Height of the dithering or halftoning matrix. /// - ExifFocalYRes = 0xA20F, + CellHeight = 0x0109, /// - /// FlashPix format version supported by an FPXR file. If the FPXR function supports FlashPix format version 1.0, - /// this is indicated similarly to by recording 0100 as a 4-byte ASCII string. - /// Because the type is , there is no NULL terminator. + /// Logical order of bits in a byte. /// - ExifFPXVer = 0xA000, + FillOrder = 0x010A, /// - /// Private tag used by GDI+. Not for public use. GDI+ uses this tag to locate Exif specific information. + /// Null-terminated character string that specifies the name of the document from + /// which the image was scanned. /// - ExifIFD = 0x8769, + DocumentName = 0x010D, /// - /// Offset to a block of property items that contain interoperability information. + /// Null-terminated character string that specifies the title of the image. /// - ExifInterop = 0xA005, + ImageDescription = 0x010E, /// - /// ISO speed and ISO latitude of the camera or input device as specified in ISO 12232. + /// Null-terminated character string that specifies the manufacturer of the + /// equipment used to record the image. /// - ExifISOSpeed = 0x8827, + EquipMake = 0x010F, /// - /// Type of light source. + /// Null-terminated character string that specifies the model name or model number + /// of the equipment used to record the image. /// - ExifLightSource = 0x9208, + EquipModel = 0x0110, /// - /// Note tag. A tag used by manufacturers of EXIF writers to record information. The contents are up to the manufacturer. + /// For each strip, the byte offset of that strip. See also + /// and . /// - ExifMakerNote = 0x927C, + StripOffsets = 0x0111, /// - /// Smallest F number of the lens. The unit is the APEX value. Ordinarily it is given in the range of 00.00 to 99.99, but it is not limited to this range. + /// Image orientation viewed in terms of rows and columns. /// - ExifMaxAperture = 0x9205, + Orientation = 0x0112, /// - /// Metering mode. + /// Number of color components per pixel. /// - ExifMeteringMode = 0x9207, + SamplesPerPixel = 0x0115, /// - /// Optoelectronic conversion function (OECF) specified in ISO 14524. The OECF is the relationship between the camera optical input and the image values. + /// Number of rows per strip. See also and . /// - ExifOECF = 0x8828, + RowsPerStrip = 0x0116, /// - /// Information specific to compressed data. When a compressed file is recorded, the valid width of the meaningful image must be recorded in this tag, whether or not there is padding data or a restart marker. This tag should not exist in an uncompressed file. + /// For each strip, the total number of bytes in that strip. /// - ExifPixXDim = 0xA002, + StripBytesCount = 0x0117, /// - /// Information specific to compressed data. When a compressed file is recorded, the valid height of the meaningful image must be recorded in this tag whether or not there is padding data or a restart marker. This tag should not exist in an uncompressed file. Because data padding is unnecessary in the vertical direction, the number of lines recorded in this valid image height tag will be the same as that recorded in the SOF. + /// For each color component, the minimum value assigned to that component. + /// See also . /// - ExifPixYDim = 0xA003, + MinSampleValue = 0x0118, /// - /// The name of an audio file related to the image data. The only relational information recorded is the EXIF audio file name and extension (an ASCII string that consists of 8 characters plus a period (.), plus 3 characters). The path is not recorded. When you use this tag, audio files must be recorded in conformance with the EXIF audio format. Writers can also store audio data within APP2 as FlashPix extension stream data. + /// For each color component, the maximum value assigned to that component. + /// See also . /// - ExifRelatedWav = 0xA004, + MaxSampleValue = 0x0119, /// - /// The type of scene. If a DSC recorded the image, the value of this tag must be set to 1, indicating that the image was directly photographed. + /// Number of pixels per unit in the image width (x) direction. + /// The unit is specified by . /// - ExifSceneType = 0xA301, + XResolution = 0x011A, /// - /// Image sensor type on the camera or input device. + /// Number of pixels per unit in the image height (y) direction. The unit is specified + /// by . /// - ExifSensingMethod = 0xA217, + YResolution = 0x011B, /// - /// Shutter speed. The unit is the Additive System of Photographic Exposure (APEX) value. + /// Whether pixel components are recorded in chunky or planar format. /// - ExifShutterSpeed = 0x9201, + PlanarConfig = 0x011C, /// - /// Camera or input device spatial frequency table and SFR values in the image width, image height, and diagonal direction, as specified in ISO 12233. + /// Null-terminated character string that specifies the name of the page from which the image was scanned. /// - ExifSpatialFR = 0xA20C, + PageName = 0x011D, /// - /// Null-terminated character string that specifies the spectral sensitivity of each channel of the camera used. The string is compatible with the standard developed by the ASTM Technical Committee. + /// Offset from the left side of the page to the left side of the image. + /// The unit of measure is specified by . /// - ExifSpectralSense = 0x8824, + XPosition = 0x011E, /// - /// Distance to the subject, measured in meters. + /// Offset from the top of the page to the top of the image. The unit of measure + /// is specified by . /// - ExifSubjectDist = 0x9206, + YPosition = 0x011F, /// - /// Location of the main subject in the scene. The value of this tag represents the pixel at the center - /// of the main subject relative to the left edge. The first value indicates the column number, and - /// the second value indicates the row number. + /// For each string of contiguous unused bytes, the byte offset of that string. /// - ExifSubjectLoc = 0xA214, + FreeOffset = 0x0120, /// - /// Comment tag. A tag used by EXIF users to write keywords or comments about the image besides those - /// in and without the character-code limitations of - /// the tag. + /// For each string of contiguous unused bytes, the number of bytes in that string. /// - ExifUserComment = 0x9286, + FreeByteCounts = 0x0121, /// - /// Version of the EXIF standard supported. Nonexistence of this field is taken to mean non-conformance to the - /// standard. Conformance to the standard is indicated by recording 0210 as a 4-byte ASCII string. - /// Because the type is , there is no NULL terminator. + /// Precision of the number specified by . 1 specifies tenths, + /// 2 specifies hundredths, 3 specifies thousandths, and so on. /// - ExifVer = 0x9000, + GrayResponseUnit = 0x0122, /// - /// Number of extra color components. For example, one extra component might hold an alpha value. + /// For each possible pixel value in a grayscale image, the optical density of that pixel value. /// - ExtraSamples = 0x0152, + GrayResponseCurve = 0x0123, /// - /// Logical order of bits in a byte. + /// Set of flags that relate to T4 encoding. /// - FillOrder = 0x010A, + T4Option = 0x0124, /// - /// Time delay, in hundredths of a second, between two frames in an animated GIF image. + /// Set of flags that relate to T6 encoding. /// - FrameDelay = 0x5100, + T6Option = 0x0125, /// - /// For each string of contiguous unused bytes, the number of bytes in that string. + /// Unit of measure for the horizontal resolution and the vertical resolution. /// - FreeByteCounts = 0x0121, + ResolutionUnit = 0x0128, /// - /// For each string of contiguous unused bytes, the byte offset of that string. + /// Page number of the page from which the image was scanned. /// - FreeOffset = 0x0120, + PageNumber = 0x0129, /// - /// Gamma value attached to the image. The gamma value is stored as a rational number (pair of long) with a numerator of 100000. For example, a gamma value of 2.2 is stored as the pair (100000, 45455). + /// Tables that specify transfer functions for the image. /// - Gamma = 0x0301, + TransferFunction = 0x012D, /// - /// Color palette for an indexed bitmap in a GIF image. + /// Null-terminated character string that specifies the name and version of the software or + /// firmware of the device used to generate the image. /// - GlobalPalette = 0x5102, + SoftwareUsed = 0x0131, /// - /// Altitude, in meters, based on the reference altitude specified by . + /// Date and time the image was created. /// - GpsAltitude = 0x0006, + DateTime = 0x0132, /// - /// Reference altitude, in meters. + /// Null-terminated character string that specifies the name of the person who created the image. /// - GpsAltitudeRef = 0x0005, + Artist = 0x013B, /// - /// Bearing to the destination point. The range of values is from 0.00 to 359.99. + /// Null-terminated character string that specifies the computer and/or operating system used to create the image. /// - GpsDestBear = 0x0018, + HostComputer = 0x013C, /// - /// Null-terminated character string that specifies the reference used for giving the bearing to the destination point. T specifies true direction, and M specifies magnetic direction. + /// TType of prediction scheme that was applied to the image data before the encoding scheme was applied. /// - GpsDestBearRef = 0x0017, + Predictor = 0x013D, /// - /// Distance to the destination point. + /// Chromaticity of the white point of the image. /// - GpsDestDist = 0x001A, + WhitePoint = 0x013E, /// - /// Null-terminated character string that specifies the unit used to express the distance to the destination point. - /// K, M, and N represent kilometers, miles, and knots respectively. + /// For each of the three primary colors in the image, the chromaticity of that color. /// - GpsDestDistRef = 0x0019, + PrimaryChromaticities = 0x013F, /// - /// Latitude of the destination point. The latitude is expressed as three rational values giving the degrees, - /// minutes, and seconds respectively. When degrees, minutes, and seconds are expressed, the format is - /// dd/1, mm/1, ss/1. When degrees and minutes are used and, for example, fractions of minutes are given up to - /// two decimal places, the format is dd/1, mmmm/100, 0/1. + /// Color palette (lookup table) for a palette-indexed image. /// - GpsDestLat = 0x0014, + ColorMap = 0x0140, /// - /// Null-terminated character string that specifies whether the latitude of the destination point is north or south - /// latitude. N specifies north latitude, and S specifies south latitude. + /// Information used by the halftone function. /// - GpsDestLatRef = 0x0013, + HalftoneHints = 0x0141, /// - /// Longitude of the destination point. The longitude is expressed as three rational values giving the degrees, minutes, and seconds respectively. When degrees, minutes, and seconds are expressed, the format is ddd/1, mm/1, ss/1. When degrees and minutes are used and, for example, fractions of minutes are given up to two decimal places, the format is ddd/1, mmmm/100, 0/1. + /// Number of pixel columns in each tile. /// - GpsDestLong = 0x0016, + TileWidth = 0x0142, /// - /// Null-terminated character string that specifies whether the longitude of the destination point is east or west longitude. E specifies east longitude, and W specifies west longitude. + /// Number of pixel rows in each tile. /// - GpsDestLongRef = 0x0015, + TileLength = 0x0143, /// - /// GPS DOP (data degree of precision). An HDOP value is written during 2-D measurement, and a PDOP value is written during 3-D measurement. + /// For each tile, the byte offset of that tile. /// - GpsGpsDop = 0x000B, + TileOffset = 0x0144, /// - /// Null-terminated character string that specifies the GPS measurement mode. 2 specifies 2-D measurement, and 3 specifies 3-D measurement. + /// For each tile, the number of bytes in that tile. /// - GpsGpsMeasureMode = 0x000A, + TileByteCounts = 0x0145, /// - /// Null-terminated character string that specifies the GPS satellites used for measurements. This tag can be used to specify the ID number, angle of elevation, azimuth, SNR, and other information about each satellite. The format is not specified. If the GPS receiver is incapable of taking measurements, the value of the tag must be set to NULL. + /// Set of inks used in a separated image. /// - GpsGpsSatellites = 0x0008, + InkSet = 0x014C, /// - /// Null-terminated character string that specifies the status of the GPS receiver when the image is recorded. A means measurement is in progress, and V means the measurement is Interoperability. + /// Sequence of concatenated, null-terminated, character strings that specify the names of the + /// inks used in a separated image. /// - GpsGpsStatus = 0x0009, + InkNames = 0x014D, /// - /// Time as coordinated universal time (UTC). The value is expressed as three rational numbers that give the hour, minute, and second. + /// The number of inks. /// - GpsGpsTime = 0x0007, + NumberOfInks = 0x014E, /// - /// Offset to a block of GPS property items. Property items whose tags have the prefix Gps are stored in the GPS block. - /// The GPS property items are defined in the EXIF specification. GDI+ uses this tag to locate GPS information, - /// but GDI+ does not expose this tag for public use. + /// Color component values that correspond to a 0 percent dot and a 100 percent dot. /// - GpsIFD = 0x8825, + DotRange = 0x0150, /// - /// Direction of the image when it was captured. The range of values is from 0.00 to 359.99. + /// Null-terminated character string that describes the intended printing environment. /// - GpsImgDir = 0x0011, + TargetPrinter = 0x0151, /// - /// Null-terminated character string that specifies the reference for the direction of the image when it is captured. T specifies true direction, and M specifies magnetic direction. + /// Number of extra color components. For example, one extra component might hold an alpha value. /// - GpsImgDirRef = 0x0010, + ExtraSamples = 0x0152, /// - /// Latitude. Latitude is expressed as three rational values giving the degrees, minutes, and seconds respectively. When degrees, minutes, and seconds are expressed, the format is dd/1, mm/1, ss/1. When degrees and minutes are used and, for example, fractions of minutes are given up to two decimal places, the format is dd/1, mmmm/100, 0/1. + /// For each color component, the numerical format (unsigned, signed, floating point) of that component. + /// See also . /// - GpsLatitude = 0x0002, + SampleFormat = 0x0153, /// - /// Null-terminated character string that specifies whether the longitude is east or west longitude. - /// E specifies east longitude, and W specifies west longitude. + /// For each color component, the minimum value of that component. See also . /// - GpsLatitudeRef = 0x0001, + SMinSampleValue = 0x0154, /// - /// Longitude. Longitude is expressed as three rational values giving the degrees, minutes, and seconds - /// respectively. When degrees, minutes and seconds are expressed, the format is ddd/1, mm/1, ss/1. - /// When degrees and minutes are used and, for example, fractions of minutes are given up to two - /// decimal places, the format is ddd/1, mmmm/100, 0/1. + /// For each color component, the maximum value of that component. See also . /// - GpsLongitude = 0x0004, + SMaxSampleValue = 0x0155, /// - /// Null-terminated character string that specifies whether the longitude is east or west longitude. - /// E specifies east longitude, and W specifies west longitude. + /// Table of values that extends the range of the transfer function. /// - GpsLongitudeRef = 0x0003, + TransferRange = 0x0156, /// - /// Null-terminated character string that specifies geodetic survey data used by the GPS receiver. - /// If the survey data is restricted to Japan, the value of this tag is TOKYO or WGS-84. + /// JPEG compression process. /// - GpsMapDatum = 0x0012, + JPEGProc = 0x0200, /// - /// Speed of the GPS receiver movement. + /// Offset to the start of a JPEG bitstream. /// - GpsSpeed = 0x000D, + JPEGInterFormat = 0x0201, /// - /// Null-terminated character string that specifies the unit used to express the GPS receiver speed of movement. - /// K, M, and N represent kilometers per hour, miles per hour, and knots respectively. + /// Length, in bytes, of the JPEG bitstream. /// - GpsSpeedRef = 0x000C, + JPEGInterLength = 0x0202, /// - /// Direction of GPS receiver movement. The range of values is from 0.00 to 359.99. + /// Length of the restart interval. /// - GpsTrack = 0x000F, + JPEGRestartInterval = 0x0203, /// - /// Null-terminated character string that specifies the reference for giving the direction of - /// GPS receiver movement. T specifies true direction, and M specifies magnetic direction. + /// For each color component, a lossless predictor-selection value for that component. + /// See also . /// - GpsTrackRef = 0x000E, + JPEGLosslessPredictors = 0x0205, /// - /// Version of the Global Positioning Systems (GPS) IFD, given as 2.0.0.0. This tag is mandatory when - /// the tag is present. When the version is 2.0.0.0, the tag value is 0x02000000. + /// For each color component, a point transformation value for that component. + /// See also . /// - GpsVer = 0x0000, + JPEGPointTransforms = 0x0206, /// - /// For each possible pixel value in a grayscale image, the optical density of that pixel value. + /// For each color component, the offset to the quantization table for that + /// component. See also . /// - GrayResponseCurve = 0x0123, + JPEGQTables = 0x0207, /// - /// Precision of the number specified by . 1 specifies tenths, - /// 2 specifies hundredths, 3 specifies thousandths, and so on. + /// For each color component, the offset to the DC Huffman table (or lossless Huffman table) for that + /// component. See also . /// - GrayResponseUnit = 0x0122, + JPEGDCTables = 0x0208, /// - /// Block of information about grids and guides. + /// For each color component, the offset to the AC Huffman table for that component. + /// See also . /// - GridSize = 0x5011, + JPEGACTables = 0x0209, /// - /// Angle for screen. + /// Coefficients for transformation from RGB to YCbCr image data. /// - HalftoneDegree = 0x500C, + YCbCrCoefficients = 0x0211, /// - /// Information used by the halftone function. + /// Sampling ratio of chrominance components in relation to the luminance component. /// - HalftoneHints = 0x0141, + YCbCrSubsampling = 0x0212, /// - /// Ink's screen frequency, in lines per inch. + /// Position of chrominance components in relation to the luminance component. /// - HalftoneLPI = 0x500A, + YCbCrPositioning = 0x0213, /// - /// Units for the screen frequency. + /// Reference black point value and reference white point value. /// - HalftoneLPIUnit = 0x500B, + REFBlackWhite = 0x0214, /// - /// Miscellaneous halftone information. + /// Gamma value attached to the image. The gamma value is stored as a rational number (pair of long) with a numerator of 100000. For example, a gamma value of 2.2 is stored as the pair (100000, 45455). /// - HalftoneMisc = 0x500E, + Gamma = 0x0301, /// - /// Boolean value that specifies whether to use the printer's default screens. + /// Null-terminated character string that identifies an ICC profile. /// - HalftoneScreen = 0x500F, + ICCProfileDescriptor = 0x0302, /// - /// Shape of the halftone dots. + /// How the image should be displayed as defined by the International Color Consortium (ICC). If a GDI+ Image object + /// is constructed with the useEmbeddedColorManagement parameter set to TRUE, then GDI+ renders the image + /// according to the specified rendering intent. The intent can be set to perceptual, relative colorimetric, + /// saturation, or absolute colorimetric. /// - HalftoneShape = 0x500D, + SRGBRenderingIntent = 0x0303, /// - /// Null-terminated character string that specifies the computer and/or operating system used to create the image. + /// Null-terminated character string that specifies the title of the image. /// - HostComputer = 0x013C, + ImageTitle = 0x0320, /// - /// ICC profile embedded in the image. + /// Units in which to display horizontal resolution. /// - ICCProfile = 0x8773, + ResolutionXUnit = 0x5001, /// - /// Null-terminated character string that identifies an ICC profile. + /// Units in which to display vertical resolution. /// - ICCProfileDescriptor = 0x0302, + ResolutionYUnit = 0x5002, /// - /// Null-terminated character string that specifies the title of the image. + /// Units in which to display the image width. /// - ImageDescription = 0x010E, + ResolutionXLengthUnit = 0x5003, /// - /// Number of pixel rows. + /// Units in which to display the image height. /// - ImageHeight = 0x0101, + ResolutionYLengthUnit = 0x5004, /// - /// Null-terminated character string that specifies the title of the image. + /// Sequence of one-byte Boolean values that specify printing options. /// - ImageTitle = 0x0320, + PrintFlags = 0x5005, /// - /// Number of pixels per row. + /// The print flags version. /// - ImageWidth = 0x0100, + PrintFlagsVersion = 0x5006, /// - /// Index of the background color in the palette of a GIF image. + /// The print flags crop marks. /// - IndexBackground = 0x5103, + PrintFlagsCrop = 0x5007, /// - /// Index of the transparent color in the palette of a GIF image. + /// The print flags bleed width. /// - IndexTransparent = 0x5104, + PrintFlagsBleedWidth = 0x5008, /// - /// Sequence of concatenated, null-terminated, character strings that specify the names of the - /// inks used in a separated image. + /// The print flags bleed width scale. /// - InkNames = 0x014D, + PrintFlagsBleedWidthScale = 0x5009, /// - /// Set of inks used in a separated image. + /// Ink's screen frequency, in lines per inch. /// - InkSet = 0x014C, + HalftoneLPI = 0x500A, /// - /// For each color component, the offset to the AC Huffman table for that component. - /// See also . + /// Units for the screen frequency. /// - JPEGACTables = 0x0209, + HalftoneLPIUnit = 0x500B, /// - /// For each color component, the offset to the DC Huffman table (or lossless Huffman table) for that - /// component. See also . + /// Angle for screen. /// - JPEGDCTables = 0x0208, + HalftoneDegree = 0x500C, /// - /// Offset to the start of a JPEG bitstream. + /// Shape of the halftone dots. /// - JPEGInterFormat = 0x0201, + HalftoneShape = 0x500D, /// - /// Length, in bytes, of the JPEG bitstream. + /// Miscellaneous halftone information. /// - JPEGInterLength = 0x0202, + HalftoneMisc = 0x500E, /// - /// For each color component, a lossless predictor-selection value for that component. - /// See also . + /// Boolean value that specifies whether to use the printer's default screens. /// - JPEGLosslessPredictors = 0x0205, + HalftoneScreen = 0x500F, /// - /// For each color component, a point transformation value for that component. - /// See also . + /// Private tag used by the Adobe Photoshop format. Not for public use. /// - JPEGPointTransforms = 0x0206, + JPEGQuality = 0x5010, /// - /// JPEG compression process. + /// Block of information about grids and guides. /// - JPEGProc = 0x0200, + GridSize = 0x5011, /// - /// For each color component, the offset to the quantization table for that - /// component. See also . + /// Format of the thumbnail image. /// - JPEGQTables = 0x0207, + ThumbnailFormat = 0x5012, /// - /// Private tag used by the Adobe Photoshop format. Not for public use. + /// Width, in pixels, of the thumbnail image. /// - JPEGQuality = 0x5010, + ThumbnailWidth = 0x5013, /// - /// Length of the restart interval. + /// Height, in pixels, of the thumbnail image. /// - JPEGRestartInterval = 0x0203, + ThumbnailHeight = 0x5014, /// - /// For an animated GIF image, the number of times to display the animation. - /// A value of 0 specifies that the animation should be displayed infinitely. + /// Bits per pixel (BPP) for the thumbnail image. /// - LoopCount = 0x5101, + ThumbnailColorDepth = 0x5015, /// - /// Luminance table. The luminance table and the chrominance table are used to control JPEG quality. - /// A valid luminance or chrominance table has 64 entries of type . - /// If an image has either a luminance table or a chrominance table, then it must have both tables. + /// Number of color planes for the thumbnail image. /// - LuminanceTable = 0x5090, + ThumbnailPlanes = 0x5016, /// - /// For each color component, the maximum value assigned to that component. - /// See also . + /// Byte offset between rows of pixel data. /// - MaxSampleValue = 0x0119, + ThumbnailRawBytes = 0x5017, /// - /// For each color component, the minimum value assigned to that component. - /// See also . + /// Total size, in bytes, of the thumbnail image. /// - MinSampleValue = 0x0118, + ThumbnailSize = 0x5018, /// - /// Type of data in a subfile. + /// Compressed size, in bytes, of the thumbnail image. /// - NewSubfileType = 0x00FE, + ThumbnailCompressedSize = 0x5019, /// - /// The number of inks. + /// Table of values that specify color transfer functions. /// - NumberOfInks = 0x014E, + ColorTransferFunction = 0x501A, /// - /// Image orientation viewed in terms of rows and columns. + /// Raw thumbnail bits in JPEG or RGB format. Depends on . /// - Orientation = 0x0112, + ThumbnailData = 0x501B, /// - /// Null-terminated character string that specifies the name of the page from which the image was scanned. + /// Number of pixels per row in the thumbnail image. /// - PageName = 0x011D, + ThumbnailImageWidth = 0x5020, /// - /// Page number of the page from which the image was scanned. + /// Number of pixel rows in the thumbnail image. /// - PageNumber = 0x0129, + ThumbnailImageHeight = 0x5021, /// - /// The palette histogram. + /// Number of bits per color component in the thumbnail image. See also . /// - PaletteHistogram = 0x5113, + ThumbnailBitsPerSample = 0x5022, /// - /// How pixel data will be interpreted. + /// Compression scheme used for thumbnail image data. /// - PhotometricInterp = 0x0106, + ThumbnailCompression = 0x5023, /// - /// Pixels per unit in the x direction. + /// How thumbnail pixel data will be interpreted. /// - PixelPerUnitX = 0x5111, + ThumbnailPhotometricInterp = 0x5024, /// - /// Pixels per unit in the y direction. + /// Null-terminated character string that specifies the title of the image. /// - PixelPerUnitY = 0x5112, + ThumbnailImageDescription = 0x5025, /// - /// Unit for and . + /// Null-terminated character string that specifies the manufacturer of the equipment used to + /// record the thumbnail image. /// - PixelUnit = 0x5110, + ThumbnailEquipMake = 0x5026, /// - /// Whether pixel components are recorded in chunky or planar format. + /// Null-terminated character string that specifies the model name or model number of the + /// equipment used to record the thumbnail image. /// - PlanarConfig = 0x011C, + ThumbnailEquipModel = 0x5027, /// - /// TType of prediction scheme that was applied to the image data before the encoding scheme was applied. + /// For each strip in the thumbnail image, the byte offset of that strip. See also + /// and . /// - Predictor = 0x013D, + ThumbnailStripOffsets = 0x5028, /// - /// For each of the three primary colors in the image, the chromaticity of that color. + /// Thumbnail image orientation in terms of rows and columns. See also . /// - PrimaryChromaticities = 0x013F, + ThumbnailOrientation = 0x5029, /// - /// Sequence of one-byte Boolean values that specify printing options. + /// Number of color components per pixel in the thumbnail image. /// - PrintFlags = 0x5005, + ThumbnailSamplesPerPixel = 0x502A, /// - /// The print flags bleed width. + /// Number of rows per strip in the thumbnail image. See also + /// and . /// - PrintFlagsBleedWidth = 0x5008, + ThumbnailRowsPerStrip = 0x502B, /// - /// The print flags bleed width scale. + /// For each thumbnail image strip, the total number of bytes in that strip. /// - PrintFlagsBleedWidthScale = 0x5009, + ThumbnailStripBytesCount = 0x502C, /// - /// The print flags crop marks. + /// Thumbnail resolution in the width direction. + /// The resolution unit is given in . /// - PrintFlagsCrop = 0x5007, + ThumbnailResolutionX = 0x502D, /// - /// The print flags version. + /// Thumbnail resolution in the height direction. The resolution unit is given + /// in . /// - PrintFlagsVersion = 0x5006, + ThumbnailResolutionY = 0x502E, /// - /// Reference black point value and reference white point value. + /// Whether pixel components in the thumbnail image are recorded in chunky or planar format. + /// See also . /// - REFBlackWhite = 0x0214, + ThumbnailPlanarConfig = 0x502F, /// - /// Unit of measure for the horizontal resolution and the vertical resolution. + /// Unit of measure for the horizontal resolution and the vertical resolution of + /// the thumbnail image. See also . /// - ResolutionUnit = 0x0128, + ThumbnailResolutionUnit = 0x5030, /// - /// Units in which to display the image width. + /// Tables that specify transfer functions for the thumbnail image. See also . /// - ResolutionXLengthUnit = 0x5003, + ThumbnailTransferFunction = 0x5031, /// - /// Units in which to display horizontal resolution. + /// Null-terminated character string that specifies the name and version of the software + /// or firmware of the device used to generate the thumbnail image. /// - ResolutionXUnit = 0x5001, + ThumbnailSoftwareUsed = 0x5032, /// - /// Units in which to display the image height. + /// Date and time the thumbnail image was created. See also . /// - ResolutionYLengthUnit = 0x5004, + ThumbnailDateTime = 0x5033, /// - /// Units in which to display vertical resolution. + /// Null-terminated character string that specifies the name of the person who created the thumbnail image. /// - ResolutionYUnit = 0x5002, + ThumbnailArtist = 0x5034, /// - /// Number of rows per strip. See also and . + /// Chromaticity of the white point of the thumbnail image. See also . /// - RowsPerStrip = 0x0116, + ThumbnailWhitePoint = 0x5035, /// - /// For each color component, the numerical format (unsigned, signed, floating point) of that component. - /// See also . + /// For each of the three primary colors in the thumbnail image, the chromaticity + /// of that color. See also . /// - SampleFormat = 0x0153, + ThumbnailPrimaryChromaticities = 0x5036, /// - /// Number of color components per pixel. + /// Coefficients for transformation from RGB to YCbCr data for the thumbnail image. + /// See also . /// - SamplesPerPixel = 0x0115, + ThumbnailYCbCrCoefficients = 0x5037, /// - /// For each color component, the maximum value of that component. See also . + /// Sampling ratio of chrominance components in relation to the luminance component for + /// the thumbnail image. See also . /// - SMaxSampleValue = 0x0155, + ThumbnailYCbCrSubsampling = 0x5038, /// - /// For each color component, the minimum value of that component. See also . + /// Position of chrominance components in relation to the luminance component for + /// the thumbnail image. See also . /// - SMinSampleValue = 0x0154, + ThumbnailYCbCrPositioning = 0x5039, /// - /// Null-terminated character string that specifies the name and version of the software or - /// firmware of the device used to generate the image. + /// Reference black point value and reference white point value + /// for the thumbnail image. See also . /// - SoftwareUsed = 0x0131, + ThumbnailRefBlackWhite = 0x503A, /// - /// How the image should be displayed as defined by the International Color Consortium (ICC). If a GDI+ Image object - /// is constructed with the useEmbeddedColorManagement parameter set to TRUE, then GDI+ renders the image - /// according to the specified rendering intent. The intent can be set to perceptual, relative colorimetric, - /// saturation, or absolute colorimetric. + /// Null-terminated character string that contains copyright information for the thumbnail image. /// - SRGBRenderingIntent = 0x0303, + ThumbnailCopyRight = 0x503B, /// - /// For each strip, the total number of bytes in that strip. + /// Luminance table. The luminance table and the chrominance table are used to control JPEG quality. + /// A valid luminance or chrominance table has 64 entries of type . + /// If an image has either a luminance table or a chrominance table, then it must have both tables. /// - StripBytesCount = 0x0117, + LuminanceTable = 0x5090, /// - /// For each strip, the byte offset of that strip. See also - /// and . + /// Chrominance table. The luminance table and the chrominance table are used to control JPEG quality. + /// A valid luminance or chrominance table has 64 entries. + /// If an image has either a luminance table or a chrominance table, then it must have both tables. /// - StripOffsets = 0x0111, + ChrominanceTable = 0x5091, /// - /// The type of data in a subfile. + /// Time delay, in hundredths of a second, between two frames in an animated GIF image. /// - SubfileType = 0x00FF, + FrameDelay = 0x5100, /// - /// Set of flags that relate to T4 encoding. + /// For an animated GIF image, the number of times to display the animation. + /// A value of 0 specifies that the animation should be displayed infinitely. /// - T4Option = 0x0124, + LoopCount = 0x5101, /// - /// Set of flags that relate to T6 encoding. + /// Color palette for an indexed bitmap in a GIF image. /// - T6Option = 0x0125, + GlobalPalette = 0x5102, /// - /// Null-terminated character string that describes the intended printing environment. + /// Index of the background color in the palette of a GIF image. /// - TargetPrinter = 0x0151, + IndexBackground = 0x5103, /// - /// Technique used to convert from gray pixels to black and white pixels. + /// Index of the transparent color in the palette of a GIF image. /// - ThreshHolding = 0x0107, + IndexTransparent = 0x5104, /// - /// Null-terminated character string that specifies the name of the person who created the thumbnail image. + /// Unit for and . /// - ThumbnailArtist = 0x5034, + PixelUnit = 0x5110, /// - /// Number of bits per color component in the thumbnail image. See also . + /// Pixels per unit in the x direction. /// - ThumbnailBitsPerSample = 0x5022, + PixelPerUnitX = 0x5111, /// - /// Bits per pixel (BPP) for the thumbnail image. + /// Pixels per unit in the y direction. /// - ThumbnailColorDepth = 0x5015, + PixelPerUnitY = 0x5112, /// - /// Compressed size, in bytes, of the thumbnail image. + /// The palette histogram. /// - ThumbnailCompressedSize = 0x5019, + PaletteHistogram = 0x5113, /// - /// Compression scheme used for thumbnail image data. + /// Null-terminated character string that contains copyright information. /// - ThumbnailCompression = 0x5023, + Copyright = 0x8298, /// - /// Null-terminated character string that contains copyright information for the thumbnail image. + /// Exposure time, measured in seconds. /// - ThumbnailCopyRight = 0x503B, + ExifExposureTime = 0x829A, /// - /// Raw thumbnail bits in JPEG or RGB format. Depends on . + /// F number. /// - ThumbnailData = 0x501B, + ExifFNumber = 0x829D, /// - /// Date and time the thumbnail image was created. See also . + /// Private tag used by GDI+. Not for public use. GDI+ uses this tag to locate Exif specific information. /// - ThumbnailDateTime = 0x5033, + ExifIFD = 0x8769, /// - /// Null-terminated character string that specifies the manufacturer of the equipment used to - /// record the thumbnail image. + /// ICC profile embedded in the image. /// - ThumbnailEquipMake = 0x5026, + ICCProfile = 0x8773, /// - /// Null-terminated character string that specifies the model name or model number of the - /// equipment used to record the thumbnail image. + /// Class of the program used by the camera to set exposure when the picture is taken. /// - ThumbnailEquipModel = 0x5027, + ExifExposureProg = 0x8822, /// - /// Format of the thumbnail image. + /// Null-terminated character string that specifies the spectral sensitivity of each channel of the camera used. The string is compatible with the standard developed by the ASTM Technical Committee. /// - ThumbnailFormat = 0x5012, + ExifSpectralSense = 0x8824, /// - /// Height, in pixels, of the thumbnail image. + /// Offset to a block of GPS property items. Property items whose tags have the prefix Gps are stored in the GPS block. + /// The GPS property items are defined in the EXIF specification. GDI+ uses this tag to locate GPS information, + /// but GDI+ does not expose this tag for public use. /// - ThumbnailHeight = 0x5014, + GpsIFD = 0x8825, /// - /// Null-terminated character string that specifies the title of the image. + /// ISO speed and ISO latitude of the camera or input device as specified in ISO 12232. /// - ThumbnailImageDescription = 0x5025, + ExifISOSpeed = 0x8827, /// - /// Number of pixel rows in the thumbnail image. + /// Optoelectronic conversion function (OECF) specified in ISO 14524. The OECF is the relationship between the camera optical input and the image values. /// - ThumbnailImageHeight = 0x5021, + ExifOECF = 0x8828, /// - /// Number of pixels per row in the thumbnail image. + /// Version of the EXIF standard supported. Nonexistence of this field is taken to mean non-conformance to the + /// standard. Conformance to the standard is indicated by recording 0210 as a 4-byte ASCII string. + /// Because the type is , there is no NULL terminator. /// - ThumbnailImageWidth = 0x5020, + ExifVer = 0x9000, /// - /// Thumbnail image orientation in terms of rows and columns. See also . + /// Date and time when the original image data was generated. For a DSC, the date and time when the picture was taken. The format is YYYY:MM:DD HH:MM:SS with time shown in 24-hour format and the date and time separated by one blank character (0x2000). The character string length is 20 bytes including the NULL terminator. When the field is empty, it is treated as unknown. /// - ThumbnailOrientation = 0x5029, + ExifDTOrig = 0x9003, /// - /// How thumbnail pixel data will be interpreted. + /// Date and time when the image was stored as digital data. If, for example, an image + /// was captured by DSC and at the same time the file was recorded, then DateTimeOriginal + /// and DateTimeDigitized will have the same contents. + /// + /// The format is YYYY:MM:DD HH:MM:SS with time shown in 24-hour format and the date and + /// time separated by one blank character (0x2000). The character string length is 20 bytes + /// including the NULL terminator. When the field is empty, it is treated as unknown. + /// /// - ThumbnailPhotometricInterp = 0x5024, + ExifDTDigitized = 0x9004, /// - /// Whether pixel components in the thumbnail image are recorded in chunky or planar format. - /// See also . + /// Information specific to compressed data. The channels of each component are + /// arranged in order from the first component to the fourth. For + /// uncompressed data, the data arrangement is given in the + /// PhotometricInterp tag. + /// + /// However, because PhotometricInterp can only express the order of Y, Cb, and Cr, + /// this tag is provided for cases when compressed data uses components other than + /// Y, Cb, and Cr and to support other sequences. + /// /// - ThumbnailPlanarConfig = 0x502F, + ExifCompConfig = 0x9101, /// - /// Number of color planes for the thumbnail image. + /// Information specific to compressed data. The compression mode used for a + /// compressed image is indicated in unit BPP. /// - ThumbnailPlanes = 0x5016, + ExifCompBPP = 0x9102, /// - /// For each of the three primary colors in the thumbnail image, the chromaticity - /// of that color. See also . + /// Shutter speed. The unit is the Additive System of Photographic Exposure (APEX) value. /// - ThumbnailPrimaryChromaticities = 0x5036, + ExifShutterSpeed = 0x9201, /// - /// Byte offset between rows of pixel data. + /// Lens aperture. The unit is the APEX value. /// - ThumbnailRawBytes = 0x5017, + ExifAperture = 0x9202, /// - /// Reference black point value and reference white point value - /// for the thumbnail image. See also . + /// Brightness value. The unit is the APEX value. Ordinarily it is given + /// in the range of -99.99 to 99.99. /// - ThumbnailRefBlackWhite = 0x503A, + ExifBrightness = 0x9203, /// - /// Unit of measure for the horizontal resolution and the vertical resolution of - /// the thumbnail image. See also . + /// Exposure bias. The unit is the APEX value. Ordinarily it is given in the range -99.99 to 99.99. /// - ThumbnailResolutionUnit = 0x5030, + ExifExposureBias = 0x9204, /// - /// Thumbnail resolution in the width direction. - /// The resolution unit is given in . + /// Smallest F number of the lens. The unit is the APEX value. Ordinarily it is given in the range of 00.00 to 99.99, but it is not limited to this range. /// - ThumbnailResolutionX = 0x502D, + ExifMaxAperture = 0x9205, /// - /// Thumbnail resolution in the height direction. The resolution unit is given - /// in . + /// Distance to the subject, measured in meters. /// - ThumbnailResolutionY = 0x502E, + ExifSubjectDist = 0x9206, /// - /// Number of rows per strip in the thumbnail image. See also - /// and . + /// Metering mode. /// - ThumbnailRowsPerStrip = 0x502B, + ExifMeteringMode = 0x9207, /// - /// Number of color components per pixel in the thumbnail image. + /// Type of light source. /// - ThumbnailSamplesPerPixel = 0x502A, + ExifLightSource = 0x9208, /// - /// Total size, in bytes, of the thumbnail image. + /// Flash status. This tag is recorded when an image is taken using a strobe light (flash). Bit 0 indicates the flash firing status, and bits 1 and 2 indicate the flash return status. /// - ThumbnailSize = 0x5018, + ExifFlash = 0x9209, /// - /// Null-terminated character string that specifies the name and version of the software - /// or firmware of the device used to generate the thumbnail image. + /// Actual focal length, in millimeters, of the lens. Conversion is not made to the focal length of a 35 millimeter film camera. /// - ThumbnailSoftwareUsed = 0x5032, + ExifFocalLength = 0x920A, /// - /// For each thumbnail image strip, the total number of bytes in that strip. + /// Note tag. A tag used by manufacturers of EXIF writers to record information. The contents are up to the manufacturer. /// - ThumbnailStripBytesCount = 0x502C, + ExifMakerNote = 0x927C, /// - /// For each strip in the thumbnail image, the byte offset of that strip. See also - /// and . + /// Comment tag. A tag used by EXIF users to write keywords or comments about the image besides those + /// in and without the character-code limitations of + /// the tag. /// - ThumbnailStripOffsets = 0x5028, + ExifUserComment = 0x9286, /// - /// Tables that specify transfer functions for the thumbnail image. See also . + /// Null-terminated character string that specifies a fraction of a second for the tag. /// - ThumbnailTransferFunction = 0x5031, + ExifDTSubsec = 0x9290, /// - /// Chromaticity of the white point of the thumbnail image. See also . + /// Null-terminated character string that specifies a fraction of a second for the tag. /// - ThumbnailWhitePoint = 0x5035, + ExifDTOrigSS = 0x9291, /// - /// Width, in pixels, of the thumbnail image. + /// Null-terminated character string that specifies a fraction of a second for the ExifDTDigitized tag. /// - ThumbnailWidth = 0x5013, + ExifDTDigSS = 0x9292, /// - /// Coefficients for transformation from RGB to YCbCr data for the thumbnail image. - /// See also . + /// FlashPix format version supported by an FPXR file. If the FPXR function supports FlashPix format version 1.0, + /// this is indicated similarly to by recording 0100 as a 4-byte ASCII string. + /// Because the type is , there is no NULL terminator. /// - ThumbnailYCbCrCoefficients = 0x5037, + ExifFPXVer = 0xA000, /// - /// Position of chrominance components in relation to the luminance component for - /// the thumbnail image. See also . + /// Color space specifier. Normally sRGB (=1) is used to define the color space + /// based on the PC monitor conditions and environment. If a color space other + /// than sRGB is used, Uncalibrated (=0xFFFF) is set. Image data recorded as + /// Uncalibrated can be treated as sRGB when it is converted to FlashPix. /// - ThumbnailYCbCrPositioning = 0x5039, + ExifColorSpace = 0xA001, /// - /// Sampling ratio of chrominance components in relation to the luminance component for - /// the thumbnail image. See also . + /// Information specific to compressed data. When a compressed file is recorded, the valid width of the meaningful image must be recorded in this tag, whether or not there is padding data or a restart marker. This tag should not exist in an uncompressed file. /// - ThumbnailYCbCrSubsampling = 0x5038, + ExifPixXDim = 0xA002, /// - /// For each tile, the number of bytes in that tile. + /// Information specific to compressed data. When a compressed file is recorded, the valid height of the meaningful image must be recorded in this tag whether or not there is padding data or a restart marker. This tag should not exist in an uncompressed file. Because data padding is unnecessary in the vertical direction, the number of lines recorded in this valid image height tag will be the same as that recorded in the SOF. /// - TileByteCounts = 0x0145, + ExifPixYDim = 0xA003, /// - /// Number of pixel rows in each tile. + /// The name of an audio file related to the image data. The only relational information recorded is the EXIF audio file name and extension (an ASCII string that consists of 8 characters plus a period (.), plus 3 characters). The path is not recorded. When you use this tag, audio files must be recorded in conformance with the EXIF audio format. Writers can also store audio data within APP2 as FlashPix extension stream data. /// - TileLength = 0x0143, + ExifRelatedWav = 0xA004, /// - /// For each tile, the byte offset of that tile. + /// Offset to a block of property items that contain interoperability information. /// - TileOffset = 0x0144, + ExifInterop = 0xA005, /// - /// Number of pixel columns in each tile. + /// Strobe energy, in Beam Candle Power Seconds (BCPS), at the time the image was captured. /// - TileWidth = 0x0142, + ExifFlashEnergy = 0xA20B, /// - /// Tables that specify transfer functions for the image. + /// Camera or input device spatial frequency table and SFR values in the image width, image height, and diagonal direction, as specified in ISO 12233. /// - TransferFunction = 0x012D, + ExifSpatialFR = 0xA20C, /// - /// Table of values that extends the range of the transfer function. + /// Number of pixels in the image width (x) direction per unit on the camera focal plane. The unit is specified + /// in . /// - TransferRange = 0x0156, + ExifFocalXRes = 0xA20E, /// - /// Chromaticity of the white point of the image. + /// Number of pixels in the image height (y) direction per unit on the camera focal plane. The unit is specified + /// in . /// - WhitePoint = 0x013E, + ExifFocalYRes = 0xA20F, /// - /// Offset from the left side of the page to the left side of the image. - /// The unit of measure is specified by . + /// Unit of measure for and . /// - XPosition = 0x011E, + ExifFocalResUnit = 0xA210, /// - /// Number of pixels per unit in the image width (x) direction. - /// The unit is specified by . + /// Location of the main subject in the scene. The value of this tag represents the pixel at the center + /// of the main subject relative to the left edge. The first value indicates the column number, and + /// the second value indicates the row number. /// - XResolution = 0x011A, + ExifSubjectLoc = 0xA214, /// - /// Coefficients for transformation from RGB to YCbCr image data. + /// Exposure index selected on the camera or input device at the time the image was captured. /// - YCbCrCoefficients = 0x0211, + ExifExposureIndex = 0xA215, /// - /// Position of chrominance components in relation to the luminance component. + /// Image sensor type on the camera or input device. /// - YCbCrPositioning = 0x0213, + ExifSensingMethod = 0xA217, /// - /// Sampling ratio of chrominance components in relation to the luminance component. + /// The image source. If a DSC recorded the image, the value of this tag is 3. /// - YCbCrSubsampling = 0x0212, + ExifFileSource = 0xA300, /// - /// Offset from the top of the page to the top of the image. The unit of measure - /// is specified by . + /// The type of scene. If a DSC recorded the image, the value of this tag must be set to 1, indicating that the image was directly photographed. /// - YPosition = 0x011F, + ExifSceneType = 0xA301, /// - /// Number of pixels per unit in the image height (y) direction. The unit is specified - /// by . + /// The color filter array (CFA) geometric pattern of the image sensor when a one-chip color + /// area sensor is used. It does not apply to all sensing methods. /// - YResolution = 0x011B + ExifCfaPattern = 0xA302 } } \ No newline at end of file diff --git a/src/ImageProcessor/Imaging/MetaData/ExifPropertyTagConstants.cs b/src/ImageProcessor/Imaging/MetaData/ExifPropertyTagConstants.cs index ca074276d..4b8522e98 100644 --- a/src/ImageProcessor/Imaging/MetaData/ExifPropertyTagConstants.cs +++ b/src/ImageProcessor/Imaging/MetaData/ExifPropertyTagConstants.cs @@ -13,7 +13,7 @@ namespace ImageProcessor.Imaging.MetaData /// /// Contains constants grouping together common property items. /// - public class ExifPropertyTagConstants + public static class ExifPropertyTagConstants { /// /// Gets all required property items. The Gif format specifically requires these properties. diff --git a/src/ImageProcessor/Imaging/MetaData/ImageFactoryMetaExtensions.cs b/src/ImageProcessor/Imaging/MetaData/ImageFactoryMetaExtensions.cs index 2445338e7..873b63916 100644 --- a/src/ImageProcessor/Imaging/MetaData/ImageFactoryMetaExtensions.cs +++ b/src/ImageProcessor/Imaging/MetaData/ImageFactoryMetaExtensions.cs @@ -115,10 +115,7 @@ public static ImageFactory SetPropertyItem(this ImageFactory imageFactory, ExifP /// /// The . /// - public static ImageFactory SetPropertyItem(this ImageFactory imageFactory, ExifPropertyTag id, byte[] value) - { - return imageFactory.SetPropertyItem(id, ExifPropertyTagType.Undefined, value.Length, value); - } + public static ImageFactory SetPropertyItem(this ImageFactory imageFactory, ExifPropertyTag id, byte[] value) => imageFactory.SetPropertyItem(id, ExifPropertyTagType.Undefined, value.Length, value); /// /// Sets a property item with the given id to the collection within the current diff --git a/src/ImageProcessor/Imaging/MetaData/Int32Converter.cs b/src/ImageProcessor/Imaging/MetaData/Int32Converter.cs index adb27db5d..f79947923 100644 --- a/src/ImageProcessor/Imaging/MetaData/Int32Converter.cs +++ b/src/ImageProcessor/Imaging/MetaData/Int32Converter.cs @@ -18,7 +18,7 @@ namespace ImageProcessor.Imaging.MetaData /// short term arrays. /// [StructLayout(LayoutKind.Explicit)] - internal struct Int32Converter + internal readonly struct Int32Converter { /// /// The value of the byte array as an integer. @@ -57,10 +57,7 @@ internal struct Int32Converter /// The value to convert from. /// public Int32Converter(int value) - : this() - { - this.Value = value; - } + : this() => this.Value = value; /// /// Allows the implicit conversion of an instance of to a @@ -72,10 +69,7 @@ public Int32Converter(int value) /// /// An instance of . /// - public static implicit operator int(Int32Converter value) - { - return value.Value; - } + public static implicit operator int(Int32Converter value) => value.Value; /// /// Allows the implicit conversion of an instance of to a @@ -87,9 +81,6 @@ public static implicit operator int(Int32Converter value) /// /// An instance of . /// - public static implicit operator Int32Converter(int value) - { - return new Int32Converter(value); - } + public static implicit operator Int32Converter(int value) => new Int32Converter(value); } } diff --git a/src/ImageProcessor/Imaging/MetaData/Rational.cs b/src/ImageProcessor/Imaging/MetaData/Rational.cs index 57e9815f0..32bd97adf 100644 --- a/src/ImageProcessor/Imaging/MetaData/Rational.cs +++ b/src/ImageProcessor/Imaging/MetaData/Rational.cs @@ -32,7 +32,7 @@ namespace ImageProcessor.Imaging.MetaData /// [SuppressMessage("StyleCop.CSharp.OrderingRules", "SA1202:ElementsMustBeOrderedByAccess", Justification = "Reviewed. Suppression is OK here. Better readability.")] [Serializable] - public struct Rational : + public readonly struct Rational : IConvertible, IComparable, IComparable @@ -43,8 +43,6 @@ public struct Rational : /// public static readonly Rational Empty = new Rational(); - #region Constants - /// /// The delimiter. /// @@ -56,10 +54,6 @@ public struct Rational : // ReSharper disable once StaticMemberInGenericType private static readonly char[] DelimSet = { Delim }; - #endregion Constants - - #region Fields - /// /// The parser delegate method. /// @@ -85,9 +79,6 @@ public struct Rational : /// The denominator. /// private readonly T denominator; - #endregion Fields - - #region Init /// /// Initializes a new instance of the struct. @@ -138,10 +129,6 @@ public Rational(T numerator, T denominator, bool reduce) /// private delegate bool TryParseDelegate(string value, out T rational); - #endregion Init - - #region Properties - /// /// Gets and sets the numerator of the rational number /// @@ -164,7 +151,7 @@ private static decimal MaxValue { get { - if (maxValue == default(decimal)) + if (maxValue == default) { FieldInfo max = typeof(T).GetField("MaxValue", BindingFlags.Static | BindingFlags.Public); if (max != null) @@ -188,10 +175,6 @@ private static decimal MaxValue } } - #endregion Properties - - #region Parse Methods - /// /// Approximate the decimal value accurate to a precision of 0.000001m /// @@ -200,10 +183,7 @@ private static decimal MaxValue /// /// /// - public static Rational Approximate(decimal value) - { - return Approximate(value, 0.000001m); - } + public static Rational Approximate(decimal value) => Approximate(value, 0.000001m); /// /// Approximate the decimal value accurate to a certain precision @@ -273,7 +253,7 @@ public static Rational Parse(string value) string[] parts = value.Split(DelimSet, 2, StringSplitOptions.RemoveEmptyEntries); T numerator = parser(parts[0]); - T denominator = parts.Length > 1 ? parser(parts[1]) : default(T); + T denominator = parts.Length > 1 ? parser(parts[1]) : default; return new Rational(numerator, denominator); } @@ -300,9 +280,9 @@ public static bool TryParse(string value, out Rational rational) tryParser = BuildTryParser(); } - T numerator, denominator; + T denominator; string[] parts = value.Split(DelimSet, 2, StringSplitOptions.RemoveEmptyEntries); - if (!tryParser(parts[0], out numerator)) + if (!tryParser(parts[0], out T numerator)) { rational = Empty; return false; @@ -318,7 +298,7 @@ public static bool TryParse(string value, out Rational rational) } else { - denominator = default(T); + denominator = default; } rational = new Rational(numerator, denominator); @@ -417,10 +397,6 @@ private static TryParseDelegate BuildTryParser() }; } - #endregion Parse Methods - - #region Math Methods - /// /// Finds the greatest common divisor and reduces the fraction by this amount. /// @@ -530,10 +506,6 @@ private static decimal Gcd(decimal a, decimal b) return a; } - #endregion Math Methods - - #region IConvertible Members - /// /// Converts the value of this instance to an equivalent using the specified /// culture-specific formatting information. @@ -584,8 +556,8 @@ public decimal ToDecimal(IFormatProvider provider) return 0L; } - return ((IConvertible)this.numerator.ToInt64(provider)).ToDecimal(provider) / - ((IConvertible)d).ToDecimal(provider); + return ((IConvertible)this.numerator.ToInt64(provider)).ToDecimal(provider) + / ((IConvertible)d).ToDecimal(provider); } } @@ -644,10 +616,7 @@ public float ToSingle(IFormatProvider provider) /// An interface implementation that supplies culture-specific /// formatting information. /// - bool IConvertible.ToBoolean(IFormatProvider provider) - { - return ((IConvertible)this.ToDecimal(provider)).ToBoolean(provider); - } + bool IConvertible.ToBoolean(IFormatProvider provider) => ((IConvertible)this.ToDecimal(provider)).ToBoolean(provider); /// /// Converts the value of this instance to an equivalent 8-bit unsigned integer using the specified @@ -660,10 +629,7 @@ bool IConvertible.ToBoolean(IFormatProvider provider) /// An interface implementation that /// supplies culture-specific formatting information. /// - byte IConvertible.ToByte(IFormatProvider provider) - { - return ((IConvertible)this.ToDecimal(provider)).ToByte(provider); - } + byte IConvertible.ToByte(IFormatProvider provider) => ((IConvertible)this.ToDecimal(provider)).ToByte(provider); /// /// Converts the value of this instance to an equivalent Unicode character using the specified @@ -676,10 +642,7 @@ byte IConvertible.ToByte(IFormatProvider provider) /// An interface implementation that supplies culture-specific /// formatting information. /// - char IConvertible.ToChar(IFormatProvider provider) - { - return ((IConvertible)this.ToDecimal(provider)).ToChar(provider); - } + char IConvertible.ToChar(IFormatProvider provider) => ((IConvertible)this.ToDecimal(provider)).ToChar(provider); /// /// Converts the value of this instance to an equivalent 16-bit signed integer using the specified @@ -692,10 +655,7 @@ char IConvertible.ToChar(IFormatProvider provider) /// An interface implementation that supplies culture-specific /// formatting information. /// - short IConvertible.ToInt16(IFormatProvider provider) - { - return ((IConvertible)this.ToDecimal(provider)).ToInt16(provider); - } + short IConvertible.ToInt16(IFormatProvider provider) => ((IConvertible)this.ToDecimal(provider)).ToInt16(provider); /// /// Converts the value of this instance to an equivalent 32-bit signed integer using the specified @@ -708,10 +668,7 @@ short IConvertible.ToInt16(IFormatProvider provider) /// An interface implementation that supplies culture-specific /// formatting information. /// - int IConvertible.ToInt32(IFormatProvider provider) - { - return ((IConvertible)this.ToDecimal(provider)).ToInt32(provider); - } + int IConvertible.ToInt32(IFormatProvider provider) => ((IConvertible)this.ToDecimal(provider)).ToInt32(provider); /// /// Converts the value of this instance to an equivalent 64-bit signed integer using the specified @@ -724,10 +681,7 @@ int IConvertible.ToInt32(IFormatProvider provider) /// An interface implementation that supplies culture-specific /// formatting information. /// - long IConvertible.ToInt64(IFormatProvider provider) - { - return ((IConvertible)this.ToDecimal(provider)).ToInt64(provider); - } + long IConvertible.ToInt64(IFormatProvider provider) => ((IConvertible)this.ToDecimal(provider)).ToInt64(provider); /// /// Converts the value of this instance to an equivalent 8-bit signed integer using the specified @@ -740,10 +694,7 @@ long IConvertible.ToInt64(IFormatProvider provider) /// An interface implementation that supplies culture-specific /// formatting information. /// - sbyte IConvertible.ToSByte(IFormatProvider provider) - { - return ((IConvertible)this.ToDecimal(provider)).ToSByte(provider); - } + sbyte IConvertible.ToSByte(IFormatProvider provider) => ((IConvertible)this.ToDecimal(provider)).ToSByte(provider); /// /// Converts the value of this instance to an equivalent 16-bit unsigned integer using the specified @@ -756,10 +707,7 @@ sbyte IConvertible.ToSByte(IFormatProvider provider) /// An interface implementation that supplies culture-specific /// formatting information. /// - ushort IConvertible.ToUInt16(IFormatProvider provider) - { - return ((IConvertible)this.ToDecimal(provider)).ToUInt16(provider); - } + ushort IConvertible.ToUInt16(IFormatProvider provider) => ((IConvertible)this.ToDecimal(provider)).ToUInt16(provider); /// /// Converts the value of this instance to an equivalent 32-bit unsigned integer using the specified @@ -772,10 +720,7 @@ ushort IConvertible.ToUInt16(IFormatProvider provider) /// An interface implementation that supplies culture-specific /// formatting information. /// - uint IConvertible.ToUInt32(IFormatProvider provider) - { - return ((IConvertible)this.ToDecimal(provider)).ToUInt32(provider); - } + uint IConvertible.ToUInt32(IFormatProvider provider) => ((IConvertible)this.ToDecimal(provider)).ToUInt32(provider); /// /// Converts the value of this instance to an equivalent 64-bit unsigned integer using the specified @@ -788,10 +733,7 @@ uint IConvertible.ToUInt32(IFormatProvider provider) /// An interface implementation that /// supplies culture-specific formatting information. /// - ulong IConvertible.ToUInt64(IFormatProvider provider) - { - return ((IConvertible)this.ToDecimal(provider)).ToUInt64(provider); - } + ulong IConvertible.ToUInt64(IFormatProvider provider) => ((IConvertible)this.ToDecimal(provider)).ToUInt64(provider); /// /// Converts the value of this instance to an equivalent using the specified @@ -804,10 +746,7 @@ ulong IConvertible.ToUInt64(IFormatProvider provider) /// An interface implementation that supplies culture-specific /// formatting information. /// - DateTime IConvertible.ToDateTime(IFormatProvider provider) - { - return new DateTime(((IConvertible)this).ToInt64(provider)); - } + DateTime IConvertible.ToDateTime(IFormatProvider provider) => new DateTime(((IConvertible)this).ToInt64(provider)); /// /// Returns the for this instance. @@ -816,10 +755,7 @@ DateTime IConvertible.ToDateTime(IFormatProvider provider) /// The enumerated constant that is the of the class or value type that /// implements this interface. /// - TypeCode IConvertible.GetTypeCode() - { - return this.numerator.GetTypeCode(); - } + TypeCode IConvertible.GetTypeCode() => this.numerator.GetTypeCode(); /// /// Converts the value of this instance to an of the specified @@ -851,8 +787,8 @@ object IConvertible.ToType(Type conversionType, IFormatProvider provider) return this; } - if (!conversionType.IsGenericType || - typeof(Rational<>) != conversionType.GetGenericTypeDefinition()) + if (!conversionType.IsGenericType + || typeof(Rational<>) != conversionType.GetGenericTypeDefinition()) { // fall back to basic conversion return Convert.ChangeType(this, conversionType, provider); @@ -875,10 +811,6 @@ object IConvertible.ToType(Type conversionType, IFormatProvider provider) return ctor.Invoke(ctorArgs); } - #endregion IConvertible Members - - #region IComparable Members - /// /// Compares the current instance with another object of the same type and returns an integer that indicates /// whether the current instance precedes, follows, or occurs in the same position in the sort order as the @@ -896,11 +828,11 @@ object IConvertible.ToType(Type conversionType, IFormatProvider provider) /// public int CompareTo(object obj) { - if (obj is Rational) + if (obj is Rational rational) { // Differentiate between a real zero and a divide by zero // work around divide by zero value to get meaningful comparisons - Rational other = (Rational)obj; + var other = rational; if (Convert.ToDecimal(this.denominator) == 0m) { if (Convert.ToDecimal(other.denominator) == 0m) @@ -925,10 +857,6 @@ public int CompareTo(object obj) return Convert.ToDecimal(this).CompareTo(Convert.ToDecimal(obj)); } - #endregion IComparable Members - - #region IComparable Members - /// /// Compares the current instance with another object of the same type and returns an integer that indicates /// whether the current instance precedes, follows, or occurs in the same position in the sort order as the @@ -941,14 +869,7 @@ public int CompareTo(object obj) /// zero This instance follows in the sort order. /// /// An object to compare with this instance. - public int CompareTo(T other) - { - return decimal.Compare(Convert.ToDecimal(this), Convert.ToDecimal(other)); - } - - #endregion IComparable Members - - #region Operators + public int CompareTo(T other) => decimal.Compare(Convert.ToDecimal(this), Convert.ToDecimal(other)); /// /// Performs a numeric negation of the operand. @@ -959,7 +880,7 @@ public int CompareTo(T other) /// public static Rational operator -(Rational rational) { - T numerator = (T)Convert.ChangeType(-Convert.ToDecimal(rational.numerator), typeof(T)); + var numerator = (T)Convert.ChangeType(-Convert.ToDecimal(rational.numerator), typeof(T)); return new Rational(numerator, rational.denominator); } @@ -998,10 +919,7 @@ public int CompareTo(T other) /// The first rational operand. /// The second rational operand. /// The computed result. - public static Rational operator -(Rational r1, Rational r2) - { - return r1 + (-r2); - } + public static Rational operator -(Rational r1, Rational r2) => r1 + (-r2); /// /// Computes the product of multiplying two rational instances. @@ -1023,10 +941,7 @@ public int CompareTo(T other) /// The first rational operand. /// The second rational operand. /// The computed product. - public static Rational operator /(Rational r1, Rational r2) - { - return r1 * new Rational(r2.denominator, r2.numerator); - } + public static Rational operator /(Rational r1, Rational r2) => r1 * new Rational(r2.denominator, r2.numerator); /// /// Determines whether the first rational operand is less than the second. @@ -1034,10 +949,7 @@ public int CompareTo(T other) /// The first rational operand. /// The second rational operand. /// The computed result. - public static bool operator <(Rational r1, Rational r2) - { - return r1.CompareTo(r2) < 0; - } + public static bool operator <(Rational r1, Rational r2) => r1.CompareTo(r2) < 0; /// /// Determines whether the first rational operand is less than or equal to the second. @@ -1045,10 +957,7 @@ public int CompareTo(T other) /// The first rational operand. /// The second rational operand. /// The computed result. - public static bool operator <=(Rational r1, Rational r2) - { - return r1.CompareTo(r2) <= 0; - } + public static bool operator <=(Rational r1, Rational r2) => r1.CompareTo(r2) <= 0; /// /// Determines whether the first rational operand is greater than the second. @@ -1056,10 +965,7 @@ public int CompareTo(T other) /// The first rational operand. /// The second rational operand. /// The computed result. - public static bool operator >(Rational r1, Rational r2) - { - return r1.CompareTo(r2) > 0; - } + public static bool operator >(Rational r1, Rational r2) => r1.CompareTo(r2) > 0; /// /// Determines whether the first rational operand is greater than or equal to the second. @@ -1067,10 +973,7 @@ public int CompareTo(T other) /// The first rational operand. /// The second rational operand. /// The computed result. - public static bool operator >=(Rational r1, Rational r2) - { - return r1.CompareTo(r2) >= 0; - } + public static bool operator >=(Rational r1, Rational r2) => r1.CompareTo(r2) >= 0; /// /// Determines whether the first rational operand is equal to the second. @@ -1078,10 +981,7 @@ public int CompareTo(T other) /// The first rational operand. /// The second rational operand. /// The computed result. - public static bool operator ==(Rational r1, Rational r2) - { - return r1.CompareTo(r2) == 0; - } + public static bool operator ==(Rational r1, Rational r2) => r1.CompareTo(r2) == 0; /// /// Determines whether the first rational operand is not equal to the second. @@ -1089,14 +989,7 @@ public int CompareTo(T other) /// The first rational operand. /// The second rational operand. /// The computed result. - public static bool operator !=(Rational r1, Rational r2) - { - return r1.CompareTo(r2) != 0; - } - - #endregion Operators - - #region Object Overrides + public static bool operator !=(Rational r1, Rational r2) => r1.CompareTo(r2) != 0; /// /// Returns the fully qualified type name of this instance. @@ -1104,10 +997,7 @@ public int CompareTo(T other) /// /// A containing a fully qualified type name. /// - public override string ToString() - { - return Convert.ToString(this, CultureInfo.InvariantCulture); - } + public override string ToString() => Convert.ToString(this, CultureInfo.InvariantCulture); /// /// Indicates whether this instance and a specified object are equal. @@ -1117,10 +1007,7 @@ public override string ToString() /// otherwise, false. /// /// The object to compare with the current instance. - public override bool Equals(object obj) - { - return this.CompareTo(obj) == 0; - } + public override bool Equals(object obj) => this.CompareTo(obj) == 0; /// /// Returns the hash code for this instance. @@ -1135,7 +1022,5 @@ public override int GetHashCode() num = (-1521134295 * num) + EqualityComparer.Default.GetHashCode(this.numerator); return (-1521134295 * num) + EqualityComparer.Default.GetHashCode(this.denominator); } - - #endregion Object Overrides } } diff --git a/src/ImageProcessor/Imaging/Quantizers/OctreeQuantizer.cs b/src/ImageProcessor/Imaging/Quantizers/OctreeQuantizer.cs index 8a1367af8..c13148e40 100644 --- a/src/ImageProcessor/Imaging/Quantizers/OctreeQuantizer.cs +++ b/src/ImageProcessor/Imaging/Quantizers/OctreeQuantizer.cs @@ -40,11 +40,6 @@ public unsafe class OctreeQuantizer : Quantizer /// private Octree octree; - /// - /// The transparency threshold. - /// - private byte threshold = 64; - /// /// Initializes a new instance of the class. /// @@ -93,18 +88,7 @@ public OctreeQuantizer(int maxColors, int maxColorBits) /// /// Gets or sets the transparency threshold (0 - 255) /// - public byte Threshold - { - get - { - return this.threshold; - } - - set - { - this.threshold = value; - } - } + public byte Threshold { get; set; } = 64; /// /// Execute the first pass through the pixels in the image @@ -151,7 +135,7 @@ protected override byte QuantizePixel(Color32* pixel) byte paletteIndex = (byte)this.maxColors; // Get the palette index if this non-transparent - if (pixel->A > this.threshold) + if (pixel->A > this.Threshold) { paletteIndex = (byte)this.octree.GetPaletteIndex(pixel); } @@ -206,21 +190,11 @@ private class Octree /// private readonly OctreeNode root; - /// - /// Array of reducible nodes - /// - private readonly OctreeNode[] reducibleNodes; - /// /// Maximum number of significant bits in the image /// private readonly int maxColorBits; - /// - /// Number of leaves in the tree - /// - private int leafCount; - /// /// Store the last node quantized /// @@ -240,8 +214,8 @@ private class Octree public Octree(int maxColorBits) { this.maxColorBits = maxColorBits; - this.leafCount = 0; - this.reducibleNodes = new OctreeNode[9]; + this.Leaves = 0; + this.ReducibleNodes = new OctreeNode[9]; this.root = new OctreeNode(0, this.maxColorBits, this); this.previousColor = 0; this.previousNode = null; @@ -250,16 +224,12 @@ public Octree(int maxColorBits) /// /// Gets or sets the number of leaves in the tree /// - private int Leaves - { - get { return this.leafCount; } - set { this.leafCount = value; } - } + private int Leaves { get; set; } /// /// Gets the array of reducible nodes /// - private OctreeNode[] ReducibleNodes => this.reducibleNodes; + private OctreeNode[] ReducibleNodes { get; } /// /// Add a given color value to the Octree @@ -309,7 +279,7 @@ public List Palletize(int colorCount) } // Now palletize the nodes - List palette = new List(this.Leaves); + var palette = new List(this.Leaves); int paletteIndex = 0; this.root.ConstructPalette(palette, ref paletteIndex); @@ -326,10 +296,7 @@ public List Palletize(int colorCount) /// /// The index of the given structure. /// - public int GetPaletteIndex(Color32* pixel) - { - return this.root.GetPaletteIndex(pixel, 0); - } + public int GetPaletteIndex(Color32* pixel) => this.root.GetPaletteIndex(pixel, 0); /// /// Keep track of the previous node that was quantized @@ -337,10 +304,7 @@ public int GetPaletteIndex(Color32* pixel) /// /// The node last quantized /// - protected void TrackPrevious(OctreeNode node) - { - this.previousNode = node; - } + protected void TrackPrevious(OctreeNode node) => this.previousNode = node; /// /// Reduce the depth of the tree @@ -349,17 +313,17 @@ private void Reduce() { // Find the deepest level containing at least one reducible node int index = this.maxColorBits - 1; - while ((index > 0) && (this.reducibleNodes[index] == null)) + while ((index > 0) && (this.ReducibleNodes[index] == null)) { index--; } // Reduce the node most recently added to the list at level 'index' - OctreeNode node = this.reducibleNodes[index]; - this.reducibleNodes[index] = node.NextReducible; + OctreeNode node = this.ReducibleNodes[index]; + this.ReducibleNodes[index] = node.NextReducible; // Decrement the leaf count after reducing the node - this.leafCount -= node.Reduce(); + this.Leaves -= node.Reduce(); // And just in case I've reduced the last color to be added, and the next color to // be added is the same, invalidate the previousNode... @@ -476,9 +440,9 @@ public void AddColor(Color32* pixel, int colorBits, int level, Octree octree) { // Go to the next level down in the tree int shift = 7 - level; - int index = ((pixel->R & Mask[level]) >> (shift - 2)) | - ((pixel->G & Mask[level]) >> (shift - 1)) | - ((pixel->B & Mask[level]) >> shift); + int index = ((pixel->R & Mask[level]) >> (shift - 2)) + | ((pixel->G & Mask[level]) >> (shift - 1)) + | ((pixel->B & Mask[level]) >> shift); OctreeNode child = this.children[index]; @@ -552,10 +516,7 @@ public void ConstructPalette(List palette, ref int index) // Loop through children looking for leaves for (int i = 0; i < 8; i++) { - if (this.children[i] != null) - { - this.children[i].ConstructPalette(palette, ref index); - } + this.children[i]?.ConstructPalette(palette, ref index); } } } @@ -579,9 +540,9 @@ public int GetPaletteIndex(Color32* pixel, int level) if (!this.leaf) { int shift = 7 - level; - int pixelIndex = ((pixel->R & Mask[level]) >> (shift - 2)) | - ((pixel->G & Mask[level]) >> (shift - 1)) | - ((pixel->B & Mask[level]) >> shift); + int pixelIndex = ((pixel->R & Mask[level]) >> (shift - 2)) + | ((pixel->G & Mask[level]) >> (shift - 1)) + | ((pixel->B & Mask[level]) >> shift); if (this.children[pixelIndex] != null) { diff --git a/src/ImageProcessor/Imaging/Quantizers/Quantizer.cs b/src/ImageProcessor/Imaging/Quantizers/Quantizer.cs index 5e1da2b57..ed8d8c431 100644 --- a/src/ImageProcessor/Imaging/Quantizers/Quantizer.cs +++ b/src/ImageProcessor/Imaging/Quantizers/Quantizer.cs @@ -38,10 +38,7 @@ public abstract unsafe class Quantizer : IQuantizer /// only call the 'QuantizeImage' function. If two passes are required, the code will call 'InitialQuantizeImage' /// and then 'QuantizeImage'. /// - protected Quantizer(bool singlePass) - { - this.singlePass = singlePass; - } + protected Quantizer(bool singlePass) => this.singlePass = singlePass; /// /// Quantize an image and return the resulting output bitmap. @@ -59,18 +56,18 @@ public Bitmap Quantize(Image source) int width = source.Width; // And construct a rectangle from these dimensions - Rectangle bounds = new Rectangle(0, 0, width, height); + var bounds = new Rectangle(0, 0, width, height); // First off take a 32bpp copy of the image - Bitmap copy = new Bitmap(width, height, PixelFormat.Format32bppPArgb); + var copy = new Bitmap(width, height, PixelFormat.Format32bppPArgb); copy.SetResolution(source.HorizontalResolution, source.VerticalResolution); // And construct an 8bpp version - Bitmap output = new Bitmap(width, height, PixelFormat.Format8bppIndexed); + var output = new Bitmap(width, height, PixelFormat.Format8bppIndexed); output.SetResolution(source.HorizontalResolution, source.VerticalResolution); // Now lock the bitmap into memory - using (Graphics g = Graphics.FromImage(copy)) + using (var g = Graphics.FromImage(copy)) { g.PageUnit = GraphicsUnit.Pixel; diff --git a/src/ImageProcessor/Imaging/Quantizers/WuQuantizer/ColorMoment.cs b/src/ImageProcessor/Imaging/Quantizers/WuQuantizer/ColorMoment.cs index 512aaa681..88f2d10c3 100644 --- a/src/ImageProcessor/Imaging/Quantizers/WuQuantizer/ColorMoment.cs +++ b/src/ImageProcessor/Imaging/Quantizers/WuQuantizer/ColorMoment.cs @@ -157,10 +157,7 @@ public void AddFast(ref ColorMoment moment) /// /// The representing the amplitude. /// - public long Amplitude() - { - return (this.Alpha * this.Alpha) + (this.Red * this.Red) + (this.Green * this.Green) + (this.Blue * this.Blue); - } + public long Amplitude() => (this.Alpha * this.Alpha) + (this.Red * this.Red) + (this.Green * this.Green) + (this.Blue * this.Blue); /// /// The variance. @@ -180,9 +177,6 @@ public float Variance() /// /// The . /// - public long WeightedDistance() - { - return this.Amplitude() / this.Weight; - } + public long WeightedDistance() => this.Amplitude() / this.Weight; } } \ No newline at end of file diff --git a/src/ImageProcessor/Imaging/Quantizers/WuQuantizer/CubeCut.cs b/src/ImageProcessor/Imaging/Quantizers/WuQuantizer/CubeCut.cs index ff2af28f6..ecfddc7fb 100644 --- a/src/ImageProcessor/Imaging/Quantizers/WuQuantizer/CubeCut.cs +++ b/src/ImageProcessor/Imaging/Quantizers/WuQuantizer/CubeCut.cs @@ -15,7 +15,7 @@ namespace ImageProcessor.Imaging.Quantizers.WuQuantizer /// Represents a cube cut. /// Adapted from /// - internal struct CubeCut + internal readonly struct CubeCut { /// /// The position. diff --git a/src/ImageProcessor/Imaging/Quantizers/WuQuantizer/Histogram.cs b/src/ImageProcessor/Imaging/Quantizers/WuQuantizer/Histogram.cs index 214792b3d..c5b1ffa36 100644 --- a/src/ImageProcessor/Imaging/Quantizers/WuQuantizer/Histogram.cs +++ b/src/ImageProcessor/Imaging/Quantizers/WuQuantizer/Histogram.cs @@ -41,9 +41,6 @@ public Histogram() /// /// The clear. /// - internal void Clear() - { - Array.Clear(this.Moments, 0, SideSize * SideSize * SideSize * SideSize); - } + internal void Clear() => Array.Clear(this.Moments, 0, SideSize * SideSize * SideSize * SideSize); } } \ No newline at end of file diff --git a/src/ImageProcessor/Imaging/Quantizers/WuQuantizer/ImageBuffer.cs b/src/ImageProcessor/Imaging/Quantizers/WuQuantizer/ImageBuffer.cs index aaf26a762..c9260d5e4 100644 --- a/src/ImageProcessor/Imaging/Quantizers/WuQuantizer/ImageBuffer.cs +++ b/src/ImageProcessor/Imaging/Quantizers/WuQuantizer/ImageBuffer.cs @@ -32,10 +32,7 @@ internal class ImageBuffer /// /// The image to store. /// - public ImageBuffer(Bitmap image) - { - this.Image = image; - } + public ImageBuffer(Bitmap image) => this.Image = image; /// /// Gets the image. @@ -54,9 +51,9 @@ public IEnumerable PixelLines { int width = this.Image.Width; int height = this.Image.Height; - Color32[] pixels = new Color32[width]; + var pixels = new Color32[width]; - using (FastBitmap bitmap = new FastBitmap(this.Image)) + using (var bitmap = new FastBitmap(this.Image)) { for (int y = 0; y < height; y++) { diff --git a/src/ImageProcessor/Imaging/Quantizers/WuQuantizer/PaletteColorHistory.cs b/src/ImageProcessor/Imaging/Quantizers/WuQuantizer/PaletteColorHistory.cs index a365faab9..8512addf2 100644 --- a/src/ImageProcessor/Imaging/Quantizers/WuQuantizer/PaletteColorHistory.cs +++ b/src/ImageProcessor/Imaging/Quantizers/WuQuantizer/PaletteColorHistory.cs @@ -52,10 +52,7 @@ internal struct PaletteColorHistory /// /// The normalized . /// - public Color ToNormalizedColor() - { - return (this.Sum != 0) ? Color.FromArgb((int)(this.Alpha /= this.Sum), (int)(this.Red /= this.Sum), (int)(this.Green /= this.Sum), (int)(this.Blue /= this.Sum)) : Color.Empty; - } + public Color ToNormalizedColor() => (this.Sum != 0) ? Color.FromArgb((int)(this.Alpha /= this.Sum), (int)(this.Red /= this.Sum), (int)(this.Green /= this.Sum), (int)(this.Blue /= this.Sum)) : Color.Empty; /// /// Adds a pixel to the color history. diff --git a/src/ImageProcessor/Imaging/Quantizers/WuQuantizer/PaletteLookup.cs b/src/ImageProcessor/Imaging/Quantizers/WuQuantizer/PaletteLookup.cs index fb50f66b4..a5a0e4362 100644 --- a/src/ImageProcessor/Imaging/Quantizers/WuQuantizer/PaletteLookup.cs +++ b/src/ImageProcessor/Imaging/Quantizers/WuQuantizer/PaletteLookup.cs @@ -71,8 +71,7 @@ public PaletteLookup(Color32[] palette) public byte GetPaletteIndex(Color32 pixel) { int pixelKey = pixel.Argb & this.paletteMask; - LookupNode[] bucket; - if (!this.lookupNodes.TryGetValue(pixelKey, out bucket)) + if (!this.lookupNodes.TryGetValue(pixelKey, out LookupNode[] bucket)) { bucket = this.Palette; } @@ -188,7 +187,7 @@ private static int GetMask(Color32[] palette) byte greenMask = ComputeBitMask(maxGreen, Convert.ToInt32(Math.Round(uniqueGreens / totalUniques * availableBits))); byte blueMask = ComputeBitMask(maxBlue, Convert.ToInt32(Math.Round(uniqueBlues / totalUniques * availableBits))); - Color32 maskedPixel = new Color32(alphaMask, redMask, greenMask, blueMask); + var maskedPixel = new Color32(alphaMask, redMask, greenMask, blueMask); return maskedPixel.Argb; } @@ -226,13 +225,12 @@ private static byte HighestSetBitIndex(byte value) private void BuildLookup(Color32[] palette) { int mask = GetMask(palette); - Dictionary> tempLookup = new Dictionary>(); + var tempLookup = new Dictionary>(); foreach (LookupNode lookup in this.Palette) { int pixelKey = lookup.Color32.Argb & mask; - List bucket; - if (!tempLookup.TryGetValue(pixelKey, out bucket)) + if (!tempLookup.TryGetValue(pixelKey, out List bucket)) { bucket = new List(); tempLookup[pixelKey] = bucket; diff --git a/src/ImageProcessor/Imaging/Quantizers/WuQuantizer/WuQuantizer.cs b/src/ImageProcessor/Imaging/Quantizers/WuQuantizer/WuQuantizer.cs index 382e8d6f0..f93a76d66 100644 --- a/src/ImageProcessor/Imaging/Quantizers/WuQuantizer/WuQuantizer.cs +++ b/src/ImageProcessor/Imaging/Quantizers/WuQuantizer/WuQuantizer.cs @@ -45,10 +45,10 @@ public class WuQuantizer : WuQuantizerBase /// internal override Bitmap GetQuantizedImage(ImageBuffer imageBuffer, int colorCount, Color32[] lookups, int alphaThreshold) { - Bitmap result = new Bitmap(imageBuffer.Image.Width, imageBuffer.Image.Height, PixelFormat.Format8bppIndexed); + var result = new Bitmap(imageBuffer.Image.Width, imageBuffer.Image.Height, PixelFormat.Format8bppIndexed); result.SetResolution(imageBuffer.Image.HorizontalResolution, imageBuffer.Image.VerticalResolution); - ImageBuffer resultBuffer = new ImageBuffer(result); - PaletteColorHistory[] paletteHistogram = new PaletteColorHistory[colorCount + 1]; + var resultBuffer = new ImageBuffer(result); + var paletteHistogram = new PaletteColorHistory[colorCount + 1]; resultBuffer.UpdatePixelIndexes(IndexedPixels(imageBuffer, lookups, alphaThreshold, paletteHistogram)); result.Palette = BuildPalette(result.Palette, paletteHistogram); return result; @@ -98,7 +98,7 @@ private static ColorPalette BuildPalette(ColorPalette palette, PaletteColorHisto private static IEnumerable IndexedPixels(ImageBuffer image, Color32[] lookups, int alphaThreshold, PaletteColorHistory[] paletteHistogram) { byte[] lineIndexes = new byte[image.Image.Width]; - PaletteLookup lookup = new PaletteLookup(lookups); + var lookup = new PaletteLookup(lookups); // Determine the correct fallback color. byte fallback = lookups.Length < AlphaMax ? AlphaMin : AlphaMax; diff --git a/src/ImageProcessor/Imaging/Quantizers/WuQuantizer/WuQuantizerBase.cs b/src/ImageProcessor/Imaging/Quantizers/WuQuantizer/WuQuantizerBase.cs index 09c8f7c24..679a2e3cf 100644 --- a/src/ImageProcessor/Imaging/Quantizers/WuQuantizer/WuQuantizerBase.cs +++ b/src/ImageProcessor/Imaging/Quantizers/WuQuantizer/WuQuantizerBase.cs @@ -68,47 +68,15 @@ public abstract class WuQuantizerBase : IWuQuantizer /// private const int MaxSideIndex = 32; - /// - /// The transparency threshold. - /// - private byte threshold = 0; - - /// - /// The transparency fade. - /// - private byte fade = 1; - /// /// Gets or sets the transparency threshold (0 - 255) /// - public byte Threshold - { - get - { - return this.threshold; - } - - set - { - this.threshold = value; - } - } + public byte Threshold { get; set; } = 0; /// /// Gets or sets the alpha fade (0 - 255) /// - public byte Fade - { - get - { - return this.fade; - } - - set - { - this.fade = value; - } - } + public byte Fade { get; set; } = 1; /// /// Quantize an image and return the resulting output bitmap @@ -119,15 +87,12 @@ public byte Fade /// /// A quantized version of the image. /// - public Bitmap Quantize(Image source) - { - return this.Quantize(source, this.Threshold, this.Fade); - } + public Bitmap Quantize(Image source) => this.Quantize(source, this.Threshold, this.Fade); /// /// Quantize an image and return the resulting output bitmap /// - /// + /// /// The 32 bit per pixel image to quantize. /// /// @@ -139,10 +104,7 @@ public Bitmap Quantize(Image source) /// /// A quantized version of the image. /// - public Bitmap Quantize(Image source, int alphaThreshold, int alphaFader) - { - return this.Quantize(source, alphaThreshold, alphaFader, null, 256); - } + public Bitmap Quantize(Image image, int alphaThreshold, int alphaFader) => this.Quantize(image, alphaThreshold, alphaFader, null, 256); /// /// Quantize an image and return the resulting output bitmap @@ -174,10 +136,10 @@ public Bitmap Quantize(Image source, int alphaThreshold, int alphaFader, Histogr // The image has to be a 32 bit per pixel Argb image. if (Image.GetPixelFormatSize(source.PixelFormat) != 32) { - Bitmap clone = new Bitmap(source.Width, source.Height, PixelFormat.Format32bppPArgb); + var clone = new Bitmap(source.Width, source.Height, PixelFormat.Format32bppPArgb); clone.SetResolution(source.HorizontalResolution, source.VerticalResolution); - using (Graphics graphics = Graphics.FromImage(clone)) + using (var graphics = Graphics.FromImage(clone)) { graphics.PageUnit = GraphicsUnit.Pixel; graphics.Clear(Color.Transparent); @@ -292,8 +254,8 @@ private static void BuildHistogram(Histogram histogram, ImageBuffer imageBuffer, [SuppressMessage("StyleCop.CSharp.SpacingRules", "SA1001:CommasMustBeSpacedCorrectly", Justification = "Reviewed. Suppression is OK here.")] private static void CalculateMoments(ColorMoment[,,,] moments) { - ColorMoment[,] areaSquared = new ColorMoment[SideSize, SideSize]; - ColorMoment[] area = new ColorMoment[SideSize]; + var areaSquared = new ColorMoment[SideSize, SideSize]; + var area = new ColorMoment[SideSize]; for (int alphaIndex = 1; alphaIndex < SideSize; alphaIndex++) { for (int redIndex = 1; redIndex < SideSize; redIndex++) @@ -301,7 +263,7 @@ private static void CalculateMoments(ColorMoment[,,,] moments) Array.Clear(area, 0, area.Length); for (int greenIndex = 1; greenIndex < SideSize; greenIndex++) { - ColorMoment line = new ColorMoment(); + var line = new ColorMoment(); for (int blueIndex = 1; blueIndex < SideSize; blueIndex++) { line.AddFast(ref moments[alphaIndex, redIndex, greenIndex, blueIndex]); @@ -341,44 +303,44 @@ private static ColorMoment Top(Box cube, int direction, int position, ColorMomen switch (direction) { case Alpha: - return (moment[position, cube.RedMaximum, cube.GreenMaximum, cube.BlueMaximum] - - moment[position, cube.RedMaximum, cube.GreenMinimum, cube.BlueMaximum] - - moment[position, cube.RedMinimum, cube.GreenMaximum, cube.BlueMaximum] + - moment[position, cube.RedMinimum, cube.GreenMinimum, cube.BlueMaximum]) - - (moment[position, cube.RedMaximum, cube.GreenMaximum, cube.BlueMinimum] - - moment[position, cube.RedMaximum, cube.GreenMinimum, cube.BlueMinimum] - - moment[position, cube.RedMinimum, cube.GreenMaximum, cube.BlueMinimum] + - moment[position, cube.RedMinimum, cube.GreenMinimum, cube.BlueMinimum]); + return (moment[position, cube.RedMaximum, cube.GreenMaximum, cube.BlueMaximum] + - moment[position, cube.RedMaximum, cube.GreenMinimum, cube.BlueMaximum] + - moment[position, cube.RedMinimum, cube.GreenMaximum, cube.BlueMaximum] + + moment[position, cube.RedMinimum, cube.GreenMinimum, cube.BlueMaximum]) + - (moment[position, cube.RedMaximum, cube.GreenMaximum, cube.BlueMinimum] + - moment[position, cube.RedMaximum, cube.GreenMinimum, cube.BlueMinimum] + - moment[position, cube.RedMinimum, cube.GreenMaximum, cube.BlueMinimum] + + moment[position, cube.RedMinimum, cube.GreenMinimum, cube.BlueMinimum]); case Red: - return (moment[cube.AlphaMaximum, position, cube.GreenMaximum, cube.BlueMaximum] - - moment[cube.AlphaMaximum, position, cube.GreenMinimum, cube.BlueMaximum] - - moment[cube.AlphaMinimum, position, cube.GreenMaximum, cube.BlueMaximum] + - moment[cube.AlphaMinimum, position, cube.GreenMinimum, cube.BlueMaximum]) - - (moment[cube.AlphaMaximum, position, cube.GreenMaximum, cube.BlueMinimum] - - moment[cube.AlphaMaximum, position, cube.GreenMinimum, cube.BlueMinimum] - - moment[cube.AlphaMinimum, position, cube.GreenMaximum, cube.BlueMinimum] + - moment[cube.AlphaMinimum, position, cube.GreenMinimum, cube.BlueMinimum]); + return (moment[cube.AlphaMaximum, position, cube.GreenMaximum, cube.BlueMaximum] + - moment[cube.AlphaMaximum, position, cube.GreenMinimum, cube.BlueMaximum] + - moment[cube.AlphaMinimum, position, cube.GreenMaximum, cube.BlueMaximum] + + moment[cube.AlphaMinimum, position, cube.GreenMinimum, cube.BlueMaximum]) + - (moment[cube.AlphaMaximum, position, cube.GreenMaximum, cube.BlueMinimum] + - moment[cube.AlphaMaximum, position, cube.GreenMinimum, cube.BlueMinimum] + - moment[cube.AlphaMinimum, position, cube.GreenMaximum, cube.BlueMinimum] + + moment[cube.AlphaMinimum, position, cube.GreenMinimum, cube.BlueMinimum]); case Green: - return (moment[cube.AlphaMaximum, cube.RedMaximum, position, cube.BlueMaximum] - - moment[cube.AlphaMaximum, cube.RedMinimum, position, cube.BlueMaximum] - - moment[cube.AlphaMinimum, cube.RedMaximum, position, cube.BlueMaximum] + - moment[cube.AlphaMinimum, cube.RedMinimum, position, cube.BlueMaximum]) - - (moment[cube.AlphaMaximum, cube.RedMaximum, position, cube.BlueMinimum] - - moment[cube.AlphaMaximum, cube.RedMinimum, position, cube.BlueMinimum] - - moment[cube.AlphaMinimum, cube.RedMaximum, position, cube.BlueMinimum] + - moment[cube.AlphaMinimum, cube.RedMinimum, position, cube.BlueMinimum]); + return (moment[cube.AlphaMaximum, cube.RedMaximum, position, cube.BlueMaximum] + - moment[cube.AlphaMaximum, cube.RedMinimum, position, cube.BlueMaximum] + - moment[cube.AlphaMinimum, cube.RedMaximum, position, cube.BlueMaximum] + + moment[cube.AlphaMinimum, cube.RedMinimum, position, cube.BlueMaximum]) + - (moment[cube.AlphaMaximum, cube.RedMaximum, position, cube.BlueMinimum] + - moment[cube.AlphaMaximum, cube.RedMinimum, position, cube.BlueMinimum] + - moment[cube.AlphaMinimum, cube.RedMaximum, position, cube.BlueMinimum] + + moment[cube.AlphaMinimum, cube.RedMinimum, position, cube.BlueMinimum]); case Blue: - return (moment[cube.AlphaMaximum, cube.RedMaximum, cube.GreenMaximum, position] - - moment[cube.AlphaMaximum, cube.RedMaximum, cube.GreenMinimum, position] - - moment[cube.AlphaMaximum, cube.RedMinimum, cube.GreenMaximum, position] + - moment[cube.AlphaMaximum, cube.RedMinimum, cube.GreenMinimum, position]) - - (moment[cube.AlphaMinimum, cube.RedMaximum, cube.GreenMaximum, position] - - moment[cube.AlphaMinimum, cube.RedMaximum, cube.GreenMinimum, position] - - moment[cube.AlphaMinimum, cube.RedMinimum, cube.GreenMaximum, position] + - moment[cube.AlphaMinimum, cube.RedMinimum, cube.GreenMinimum, position]); + return (moment[cube.AlphaMaximum, cube.RedMaximum, cube.GreenMaximum, position] + - moment[cube.AlphaMaximum, cube.RedMaximum, cube.GreenMinimum, position] + - moment[cube.AlphaMaximum, cube.RedMinimum, cube.GreenMaximum, position] + + moment[cube.AlphaMaximum, cube.RedMinimum, cube.GreenMinimum, position]) + - (moment[cube.AlphaMinimum, cube.RedMaximum, cube.GreenMaximum, position] + - moment[cube.AlphaMinimum, cube.RedMaximum, cube.GreenMinimum, position] + - moment[cube.AlphaMinimum, cube.RedMinimum, cube.GreenMaximum, position] + + moment[cube.AlphaMinimum, cube.RedMinimum, cube.GreenMinimum, position]); default: return new ColorMoment(); @@ -406,44 +368,44 @@ private static ColorMoment Bottom(Box cube, int direction, ColorMoment[,,,] mome switch (direction) { case Alpha: - return (-moment[cube.AlphaMinimum, cube.RedMaximum, cube.GreenMaximum, cube.BlueMaximum] + - moment[cube.AlphaMinimum, cube.RedMaximum, cube.GreenMinimum, cube.BlueMaximum] + - moment[cube.AlphaMinimum, cube.RedMinimum, cube.GreenMaximum, cube.BlueMaximum] - - moment[cube.AlphaMinimum, cube.RedMinimum, cube.GreenMinimum, cube.BlueMaximum]) - - (-moment[cube.AlphaMinimum, cube.RedMaximum, cube.GreenMaximum, cube.BlueMinimum] + - moment[cube.AlphaMinimum, cube.RedMaximum, cube.GreenMinimum, cube.BlueMinimum] + - moment[cube.AlphaMinimum, cube.RedMinimum, cube.GreenMaximum, cube.BlueMinimum] - - moment[cube.AlphaMinimum, cube.RedMinimum, cube.GreenMinimum, cube.BlueMinimum]); + return -moment[cube.AlphaMinimum, cube.RedMaximum, cube.GreenMaximum, cube.BlueMaximum] + + moment[cube.AlphaMinimum, cube.RedMaximum, cube.GreenMinimum, cube.BlueMaximum] + + moment[cube.AlphaMinimum, cube.RedMinimum, cube.GreenMaximum, cube.BlueMaximum] + - moment[cube.AlphaMinimum, cube.RedMinimum, cube.GreenMinimum, cube.BlueMaximum] + - (-moment[cube.AlphaMinimum, cube.RedMaximum, cube.GreenMaximum, cube.BlueMinimum] + + moment[cube.AlphaMinimum, cube.RedMaximum, cube.GreenMinimum, cube.BlueMinimum] + + moment[cube.AlphaMinimum, cube.RedMinimum, cube.GreenMaximum, cube.BlueMinimum] + - moment[cube.AlphaMinimum, cube.RedMinimum, cube.GreenMinimum, cube.BlueMinimum]); case Red: - return (-moment[cube.AlphaMaximum, cube.RedMinimum, cube.GreenMaximum, cube.BlueMaximum] + - moment[cube.AlphaMaximum, cube.RedMinimum, cube.GreenMinimum, cube.BlueMaximum] + - moment[cube.AlphaMinimum, cube.RedMinimum, cube.GreenMaximum, cube.BlueMaximum] - - moment[cube.AlphaMinimum, cube.RedMinimum, cube.GreenMinimum, cube.BlueMaximum]) - - (-moment[cube.AlphaMaximum, cube.RedMinimum, cube.GreenMaximum, cube.BlueMinimum] + - moment[cube.AlphaMaximum, cube.RedMinimum, cube.GreenMinimum, cube.BlueMinimum] + - moment[cube.AlphaMinimum, cube.RedMinimum, cube.GreenMaximum, cube.BlueMinimum] - - moment[cube.AlphaMinimum, cube.RedMinimum, cube.GreenMinimum, cube.BlueMinimum]); + return -moment[cube.AlphaMaximum, cube.RedMinimum, cube.GreenMaximum, cube.BlueMaximum] + + moment[cube.AlphaMaximum, cube.RedMinimum, cube.GreenMinimum, cube.BlueMaximum] + + moment[cube.AlphaMinimum, cube.RedMinimum, cube.GreenMaximum, cube.BlueMaximum] + - moment[cube.AlphaMinimum, cube.RedMinimum, cube.GreenMinimum, cube.BlueMaximum] + - (-moment[cube.AlphaMaximum, cube.RedMinimum, cube.GreenMaximum, cube.BlueMinimum] + + moment[cube.AlphaMaximum, cube.RedMinimum, cube.GreenMinimum, cube.BlueMinimum] + + moment[cube.AlphaMinimum, cube.RedMinimum, cube.GreenMaximum, cube.BlueMinimum] + - moment[cube.AlphaMinimum, cube.RedMinimum, cube.GreenMinimum, cube.BlueMinimum]); case Green: - return (-moment[cube.AlphaMaximum, cube.RedMaximum, cube.GreenMinimum, cube.BlueMaximum] + - moment[cube.AlphaMaximum, cube.RedMinimum, cube.GreenMinimum, cube.BlueMaximum] + - moment[cube.AlphaMinimum, cube.RedMaximum, cube.GreenMinimum, cube.BlueMaximum] - - moment[cube.AlphaMinimum, cube.RedMinimum, cube.GreenMinimum, cube.BlueMaximum]) - - (-moment[cube.AlphaMaximum, cube.RedMaximum, cube.GreenMinimum, cube.BlueMinimum] + - moment[cube.AlphaMaximum, cube.RedMinimum, cube.GreenMinimum, cube.BlueMinimum] + - moment[cube.AlphaMinimum, cube.RedMaximum, cube.GreenMinimum, cube.BlueMinimum] - - moment[cube.AlphaMinimum, cube.RedMinimum, cube.GreenMinimum, cube.BlueMinimum]); + return -moment[cube.AlphaMaximum, cube.RedMaximum, cube.GreenMinimum, cube.BlueMaximum] + + moment[cube.AlphaMaximum, cube.RedMinimum, cube.GreenMinimum, cube.BlueMaximum] + + moment[cube.AlphaMinimum, cube.RedMaximum, cube.GreenMinimum, cube.BlueMaximum] + - moment[cube.AlphaMinimum, cube.RedMinimum, cube.GreenMinimum, cube.BlueMaximum] + - (-moment[cube.AlphaMaximum, cube.RedMaximum, cube.GreenMinimum, cube.BlueMinimum] + + moment[cube.AlphaMaximum, cube.RedMinimum, cube.GreenMinimum, cube.BlueMinimum] + + moment[cube.AlphaMinimum, cube.RedMaximum, cube.GreenMinimum, cube.BlueMinimum] + - moment[cube.AlphaMinimum, cube.RedMinimum, cube.GreenMinimum, cube.BlueMinimum]); case Blue: - return (-moment[cube.AlphaMaximum, cube.RedMaximum, cube.GreenMaximum, cube.BlueMinimum] + - moment[cube.AlphaMaximum, cube.RedMaximum, cube.GreenMinimum, cube.BlueMinimum] + - moment[cube.AlphaMaximum, cube.RedMinimum, cube.GreenMaximum, cube.BlueMinimum] - - moment[cube.AlphaMaximum, cube.RedMinimum, cube.GreenMinimum, cube.BlueMinimum]) - - (-moment[cube.AlphaMinimum, cube.RedMaximum, cube.GreenMaximum, cube.BlueMinimum] + - moment[cube.AlphaMinimum, cube.RedMaximum, cube.GreenMinimum, cube.BlueMinimum] + - moment[cube.AlphaMinimum, cube.RedMinimum, cube.GreenMaximum, cube.BlueMinimum] - - moment[cube.AlphaMinimum, cube.RedMinimum, cube.GreenMinimum, cube.BlueMinimum]); + return -moment[cube.AlphaMaximum, cube.RedMaximum, cube.GreenMaximum, cube.BlueMinimum] + + moment[cube.AlphaMaximum, cube.RedMaximum, cube.GreenMinimum, cube.BlueMinimum] + + moment[cube.AlphaMaximum, cube.RedMinimum, cube.GreenMaximum, cube.BlueMinimum] + - moment[cube.AlphaMaximum, cube.RedMinimum, cube.GreenMinimum, cube.BlueMinimum] + - (-moment[cube.AlphaMinimum, cube.RedMaximum, cube.GreenMaximum, cube.BlueMinimum] + + moment[cube.AlphaMinimum, cube.RedMaximum, cube.GreenMinimum, cube.BlueMinimum] + + moment[cube.AlphaMinimum, cube.RedMinimum, cube.GreenMaximum, cube.BlueMinimum] + - moment[cube.AlphaMinimum, cube.RedMinimum, cube.GreenMinimum, cube.BlueMinimum]); default: return new ColorMoment(); @@ -654,23 +616,23 @@ private static float CalculateVariance(ColorMoment[,,,] moments, Box cube) [SuppressMessage("StyleCop.CSharp.SpacingRules", "SA1001:CommasMustBeSpacedCorrectly", Justification = "Reviewed. Suppression is OK here.")] private static ColorMoment Volume(ColorMoment[,,,] moments, Box cube) { - return (moments[cube.AlphaMaximum, cube.RedMaximum, cube.GreenMaximum, cube.BlueMaximum] - - moments[cube.AlphaMaximum, cube.RedMaximum, cube.GreenMinimum, cube.BlueMaximum] - - moments[cube.AlphaMaximum, cube.RedMinimum, cube.GreenMaximum, cube.BlueMaximum] + - moments[cube.AlphaMaximum, cube.RedMinimum, cube.GreenMinimum, cube.BlueMaximum] - - moments[cube.AlphaMinimum, cube.RedMaximum, cube.GreenMaximum, cube.BlueMaximum] + - moments[cube.AlphaMinimum, cube.RedMaximum, cube.GreenMinimum, cube.BlueMaximum] + - moments[cube.AlphaMinimum, cube.RedMinimum, cube.GreenMaximum, cube.BlueMaximum] - - moments[cube.AlphaMinimum, cube.RedMinimum, cube.GreenMinimum, cube.BlueMaximum]) - - - (moments[cube.AlphaMaximum, cube.RedMaximum, cube.GreenMaximum, cube.BlueMinimum] - - moments[cube.AlphaMinimum, cube.RedMaximum, cube.GreenMaximum, cube.BlueMinimum] - - moments[cube.AlphaMaximum, cube.RedMaximum, cube.GreenMinimum, cube.BlueMinimum] + - moments[cube.AlphaMinimum, cube.RedMaximum, cube.GreenMinimum, cube.BlueMinimum] - - moments[cube.AlphaMaximum, cube.RedMinimum, cube.GreenMaximum, cube.BlueMinimum] + - moments[cube.AlphaMinimum, cube.RedMinimum, cube.GreenMaximum, cube.BlueMinimum] + - moments[cube.AlphaMaximum, cube.RedMinimum, cube.GreenMinimum, cube.BlueMinimum] - - moments[cube.AlphaMinimum, cube.RedMinimum, cube.GreenMinimum, cube.BlueMinimum]); + return moments[cube.AlphaMaximum, cube.RedMaximum, cube.GreenMaximum, cube.BlueMaximum] + - moments[cube.AlphaMaximum, cube.RedMaximum, cube.GreenMinimum, cube.BlueMaximum] + - moments[cube.AlphaMaximum, cube.RedMinimum, cube.GreenMaximum, cube.BlueMaximum] + + moments[cube.AlphaMaximum, cube.RedMinimum, cube.GreenMinimum, cube.BlueMaximum] + - moments[cube.AlphaMinimum, cube.RedMaximum, cube.GreenMaximum, cube.BlueMaximum] + + moments[cube.AlphaMinimum, cube.RedMaximum, cube.GreenMinimum, cube.BlueMaximum] + + moments[cube.AlphaMinimum, cube.RedMinimum, cube.GreenMaximum, cube.BlueMaximum] + - moments[cube.AlphaMinimum, cube.RedMinimum, cube.GreenMinimum, cube.BlueMaximum] + + - (moments[cube.AlphaMaximum, cube.RedMaximum, cube.GreenMaximum, cube.BlueMinimum] + - moments[cube.AlphaMinimum, cube.RedMaximum, cube.GreenMaximum, cube.BlueMinimum] + - moments[cube.AlphaMaximum, cube.RedMaximum, cube.GreenMinimum, cube.BlueMinimum] + + moments[cube.AlphaMinimum, cube.RedMaximum, cube.GreenMinimum, cube.BlueMinimum] + - moments[cube.AlphaMaximum, cube.RedMinimum, cube.GreenMaximum, cube.BlueMinimum] + + moments[cube.AlphaMinimum, cube.RedMinimum, cube.GreenMaximum, cube.BlueMinimum] + + moments[cube.AlphaMaximum, cube.RedMinimum, cube.GreenMinimum, cube.BlueMinimum] + - moments[cube.AlphaMinimum, cube.RedMinimum, cube.GreenMinimum, cube.BlueMinimum]); } /// @@ -691,7 +653,7 @@ private static Box[] SplitData(ref int colorCount, ColorMoment[,,,] moments) --colorCount; int next = 0; float[] volumeVariance = new float[colorCount]; - Box[] cubes = new Box[colorCount]; + var cubes = new Box[colorCount]; cubes[0].AlphaMaximum = MaxSideIndex; cubes[0].RedMaximum = MaxSideIndex; cubes[0].GreenMaximum = MaxSideIndex; @@ -750,7 +712,7 @@ private static Box[] SplitData(ref int colorCount, ColorMoment[,,,] moments) [SuppressMessage("StyleCop.CSharp.SpacingRules", "SA1001:CommasMustBeSpacedCorrectly", Justification = "Reviewed. Suppression is OK here.")] private static Color32[] BuildLookups(Box[] cubes, ColorMoment[,,,] moments) { - Color32[] lookups = new Color32[cubes.Length]; + var lookups = new Color32[cubes.Length]; for (int cubeIndex = 0; cubeIndex < cubes.Length; cubeIndex++) { @@ -761,15 +723,13 @@ private static Color32[] BuildLookups(Box[] cubes, ColorMoment[,,,] moments) continue; } - Color32 lookup = new Color32 + lookups[cubeIndex] = new Color32 { A = (byte)(volume.Alpha / volume.Weight), R = (byte)(volume.Red / volume.Weight), G = (byte)(volume.Green / volume.Weight), B = (byte)(volume.Blue / volume.Weight) }; - - lookups[cubeIndex] = lookup; } return lookups; diff --git a/src/ImageProcessor/Imaging/ResizeLayer.cs b/src/ImageProcessor/Imaging/ResizeLayer.cs index 2192b9aca..1c3b81271 100644 --- a/src/ImageProcessor/Imaging/ResizeLayer.cs +++ b/src/ImageProcessor/Imaging/ResizeLayer.cs @@ -10,14 +10,10 @@ namespace ImageProcessor.Imaging { - #region Using - using System.Collections.Generic; using System.Drawing; using System.Linq; - #endregion - /// /// Encapsulates the properties required to resize an image. /// @@ -127,9 +123,7 @@ public ResizeLayer( /// public override bool Equals(object obj) { - ResizeLayer resizeLayer = obj as ResizeLayer; - - if (resizeLayer == null) + if (!(obj is ResizeLayer resizeLayer)) { return false; } @@ -167,8 +161,7 @@ public override int GetHashCode() hashCode = (hashCode * 397) ^ (int)this.AnchorPosition; hashCode = (hashCode * 397) ^ this.Upscale.GetHashCode(); hashCode = (hashCode * 397) ^ (this.CenterCoordinates?.GetHashCode() ?? 0); - hashCode = (hashCode * 397) ^ this.AnchorPoint.GetHashCode(); - return hashCode; + return (hashCode * 397) ^ this.AnchorPoint.GetHashCode(); } } } diff --git a/src/ImageProcessor/Imaging/Resizer.cs b/src/ImageProcessor/Imaging/Resizer.cs index 0efd74913..cdfef07e7 100644 --- a/src/ImageProcessor/Imaging/Resizer.cs +++ b/src/ImageProcessor/Imaging/Resizer.cs @@ -15,7 +15,6 @@ namespace ImageProcessor.Imaging using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; - using System.Linq; using ImageProcessor.Common.Exceptions; using ImageProcessor.Common.Extensions; @@ -33,10 +32,7 @@ public class Resizer /// /// The to resize the image to. /// - public Resizer(Size size) - { - this.ResizeLayer = new ResizeLayer(size); - } + public Resizer(Size size) => this.ResizeLayer = new ResizeLayer(size); /// /// Initializes a new instance of the class. @@ -44,10 +40,7 @@ public Resizer(Size size) /// /// The . /// - public Resizer(ResizeLayer resizeLayer) - { - this.ResizeLayer = resizeLayer; - } + public Resizer(ResizeLayer resizeLayer) => this.ResizeLayer = resizeLayer; /// /// Gets or sets the . @@ -100,13 +93,13 @@ public Bitmap ResizeImage(Image source, bool linear) /// protected virtual Bitmap ResizeComposite(Image source, int width, int height, Rectangle destination) { - Bitmap resized = new Bitmap(width, height, PixelFormat.Format32bppPArgb); + var resized = new Bitmap(width, height, PixelFormat.Format32bppPArgb); resized.SetResolution(source.HorizontalResolution, source.VerticalResolution); - using (Graphics graphics = Graphics.FromImage(resized)) + using (var graphics = Graphics.FromImage(resized)) { GraphicsHelper.SetGraphicsOptions(graphics); - using (ImageAttributes attributes = new ImageAttributes()) + using (var attributes = new ImageAttributes()) { attributes.SetWrapMode(WrapMode.TileFlipXY); graphics.DrawImage(source, destination, 0, 0, source.Width, source.Height, GraphicsUnit.Pixel, attributes); @@ -126,10 +119,7 @@ protected virtual Bitmap ResizeComposite(Image source, int width, int height, Re /// /// The . /// - protected virtual Bitmap ResizeLinear(Image source, int width, int height, Rectangle destination) - { - return this.ResizeLinear(source, width, height, destination, this.AnimationProcessMode); - } + protected virtual Bitmap ResizeLinear(Image source, int width, int height, Rectangle destination) => this.ResizeLinear(source, width, height, destination, this.AnimationProcessMode); /// /// Gets an image resized using the linear color space with gamma correction adjustments. @@ -147,13 +137,13 @@ protected virtual Bitmap ResizeLinear(Image source, int width, int height, Recta // Adjust the gamma value so that the image is in the linear color space. Bitmap linear = Adjustments.ToLinear(source.Copy(animationProcessMode)); - Bitmap resized = new Bitmap(width, height, PixelFormat.Format32bppPArgb); + var resized = new Bitmap(width, height, PixelFormat.Format32bppPArgb); resized.SetResolution(source.HorizontalResolution, source.VerticalResolution); - using (Graphics graphics = Graphics.FromImage(resized)) + using (var graphics = Graphics.FromImage(resized)) { GraphicsHelper.SetGraphicsOptions(graphics); - using (ImageAttributes attributes = new ImageAttributes()) + using (var attributes = new ImageAttributes()) { attributes.SetWrapMode(WrapMode.TileFlipXY); graphics.DrawImage(linear, destination, 0, 0, source.Width, source.Height, GraphicsUnit.Pixel, attributes); @@ -379,7 +369,7 @@ private Bitmap ResizeImage( { ratio = percentWidth; - if (centerCoordinates != null && centerCoordinates.Any()) + if (centerCoordinates?.Length > 0) { double center = -(ratio * sourceHeight) * centerCoordinates[0]; destinationY = (int)center + (height / 2); @@ -420,7 +410,7 @@ private Bitmap ResizeImage( { ratio = percentHeight; - if (centerCoordinates != null && centerCoordinates.Any()) + if (centerCoordinates?.Length > 0) { double center = -(ratio * sourceWidth) * centerCoordinates[1]; destinationX = (int)center + (width / 2); @@ -543,7 +533,7 @@ private Bitmap ResizeImage( } // Restrict sizes - if (restrictedSizes != null && restrictedSizes.Any()) + if (restrictedSizes?.Count > 0) { bool reject = true; foreach (Size restrictedSize in restrictedSizes) @@ -570,13 +560,13 @@ private Bitmap ResizeImage( if (width > 0 && height > 0 && width <= maxWidth && height <= maxHeight) { // Exit if upscaling is not allowed. - if ((width > sourceWidth || height > sourceHeight) && upscale == false && resizeMode != ResizeMode.Stretch) + if ((width > sourceWidth || height > sourceHeight) && !upscale && resizeMode != ResizeMode.Stretch) { return (Bitmap)source; } // Do the resize. - Rectangle destination = new Rectangle(destinationX, destinationY, destinationWidth, destinationHeight); + var destination = new Rectangle(destinationX, destinationY, destinationWidth, destinationHeight); newImage = linear ? this.ResizeLinear(source, width, height, destination, this.AnimationProcessMode) : this.ResizeComposite(source, width, height, destination); diff --git a/src/ImageProcessor/Imaging/RoundedCornerLayer.cs b/src/ImageProcessor/Imaging/RoundedCornerLayer.cs index c8356eb34..3e4e3017c 100644 --- a/src/ImageProcessor/Imaging/RoundedCornerLayer.cs +++ b/src/ImageProcessor/Imaging/RoundedCornerLayer.cs @@ -42,7 +42,6 @@ public RoundedCornerLayer(int radius, bool topLeft = true, bool topRight = true, this.BottomRight = bottomRight; } - #region Properties /// /// Gets or sets the radius of the corners. /// @@ -67,7 +66,6 @@ public RoundedCornerLayer(int radius, bool topLeft = true, bool topRight = true, /// Gets or sets a value indicating whether bottom right corners are to be added. /// public bool BottomRight { get; set; } - #endregion /// /// Returns a value that indicates whether the specified object is an @@ -83,9 +81,7 @@ public RoundedCornerLayer(int radius, bool topLeft = true, bool topRight = true, /// public override bool Equals(object obj) { - RoundedCornerLayer rounded = obj as RoundedCornerLayer; - - if (rounded == null) + if (!(obj is RoundedCornerLayer rounded)) { return false; } @@ -109,8 +105,7 @@ public override int GetHashCode() hashCode = (hashCode * 397) ^ this.TopLeft.GetHashCode(); hashCode = (hashCode * 397) ^ this.TopRight.GetHashCode(); hashCode = (hashCode * 397) ^ this.BottomLeft.GetHashCode(); - hashCode = (hashCode * 397) ^ this.BottomRight.GetHashCode(); - return hashCode; + return (hashCode * 397) ^ this.BottomRight.GetHashCode(); } } } diff --git a/src/ImageProcessor/Imaging/TextLayer.cs b/src/ImageProcessor/Imaging/TextLayer.cs index 0c6ffe07f..049fa92af 100644 --- a/src/ImageProcessor/Imaging/TextLayer.cs +++ b/src/ImageProcessor/Imaging/TextLayer.cs @@ -109,9 +109,7 @@ public class TextLayer : IDisposable /// public override bool Equals(object obj) { - TextLayer textLayer = obj as TextLayer; - - if (textLayer == null) + if (!(obj is TextLayer textLayer)) { return false; } @@ -147,18 +145,14 @@ public override int GetHashCode() hashCode = (hashCode * 397) ^ this.FontSize; hashCode = (hashCode * 397) ^ this.Position.GetHashCode(); hashCode = (hashCode * 397) ^ this.Vertical.GetHashCode(); - hashCode = (hashCode * 397) ^ this.RightToLeft.GetHashCode(); - return hashCode; + return (hashCode * 397) ^ this.RightToLeft.GetHashCode(); } } /// /// Disposes the object and frees resources for the Garbage Collector. /// - public void Dispose() - { - this.Dispose(true); - } + public void Dispose() => this.Dispose(true); /// /// Disposes the object and frees resources for the Garbage Collector. diff --git a/src/ImageProcessor/Processors/Alpha.cs b/src/ImageProcessor/Processors/Alpha.cs index e0474f9a1..f09c25e88 100644 --- a/src/ImageProcessor/Processors/Alpha.cs +++ b/src/ImageProcessor/Processors/Alpha.cs @@ -25,10 +25,7 @@ public class Alpha : IGraphicsProcessor /// /// Initializes a new instance of the class. /// - public Alpha() - { - this.Settings = new Dictionary(); - } + public Alpha() => this.Settings = new Dictionary(); /// /// Gets or sets the dynamic parameter. diff --git a/src/ImageProcessor/Processors/AutoRotate.cs b/src/ImageProcessor/Processors/AutoRotate.cs index 1b40ba9b6..aa78af075 100644 --- a/src/ImageProcessor/Processors/AutoRotate.cs +++ b/src/ImageProcessor/Processors/AutoRotate.cs @@ -33,10 +33,7 @@ public class AutoRotate : IGraphicsProcessor /// /// Initializes a new instance of the class. /// - public AutoRotate() - { - this.Settings = new Dictionary(); - } + public AutoRotate() => this.Settings = new Dictionary(); /// /// Gets or sets DynamicParameter. diff --git a/src/ImageProcessor/Processors/Background.cs b/src/ImageProcessor/Processors/Background.cs index 64249ef8c..b1067e155 100644 --- a/src/ImageProcessor/Processors/Background.cs +++ b/src/ImageProcessor/Processors/Background.cs @@ -28,10 +28,7 @@ public class Background : IGraphicsProcessor /// /// Initializes a new instance of the class. /// - public Background() - { - this.Settings = new Dictionary(); - } + public Background() => this.Settings = new Dictionary(); /// /// Gets or sets the dynamic parameter. @@ -87,16 +84,16 @@ public Image ProcessImage(ImageFactory factory) if (image.Size != background.Size || image.Size != new Size(backgroundWidth, backgroundHeight)) { // Find the maximum possible dimensions and resize the image. - ResizeLayer layer = new ResizeLayer(new Size(backgroundWidth, backgroundHeight), ResizeMode.Max); - Resizer resizer = new Resizer(layer) { AnimationProcessMode = factory.AnimationProcessMode }; + var layer = new ResizeLayer(new Size(backgroundWidth, backgroundHeight), ResizeMode.Max); + var resizer = new Resizer(layer) { AnimationProcessMode = factory.AnimationProcessMode }; background = resizer.ResizeImage(background, factory.FixGamma); backgroundWidth = background.Width; backgroundHeight = background.Height; } // Figure out bounds. - Rectangle parent = new Rectangle(0, 0, width, height); - Rectangle child = new Rectangle(0, 0, backgroundWidth, backgroundHeight); + var parent = new Rectangle(0, 0, width, height); + var child = new Rectangle(0, 0, backgroundWidth, backgroundHeight); // Apply opacity. if (opacity < 100) @@ -107,7 +104,7 @@ public Image ProcessImage(ImageFactory factory) newImage = new Bitmap(width, height, PixelFormat.Format32bppPArgb); newImage.SetResolution(image.HorizontalResolution, image.VerticalResolution); - using (Graphics graphics = Graphics.FromImage(newImage)) + using (var graphics = Graphics.FromImage(newImage)) { GraphicsHelper.SetGraphicsOptions(graphics, true); diff --git a/src/ImageProcessor/Processors/BackgroundColor.cs b/src/ImageProcessor/Processors/BackgroundColor.cs index d1b5d02dc..333b3997f 100644 --- a/src/ImageProcessor/Processors/BackgroundColor.cs +++ b/src/ImageProcessor/Processors/BackgroundColor.cs @@ -26,10 +26,7 @@ public class BackgroundColor : IGraphicsProcessor /// /// Initializes a new instance of the class. /// - public BackgroundColor() - { - this.Settings = new Dictionary(); - } + public BackgroundColor() => this.Settings = new Dictionary(); /// /// Gets or sets the DynamicParameter. @@ -65,7 +62,7 @@ public Image ProcessImage(ImageFactory factory) newImage.SetResolution(image.HorizontalResolution, image.VerticalResolution); // Make a graphics object from the empty bitmap. - using (Graphics graphics = Graphics.FromImage(newImage)) + using (var graphics = Graphics.FromImage(newImage)) { GraphicsHelper.SetGraphicsOptions(graphics, true); diff --git a/src/ImageProcessor/Processors/Brightness.cs b/src/ImageProcessor/Processors/Brightness.cs index a61372851..2af2b9ec4 100644 --- a/src/ImageProcessor/Processors/Brightness.cs +++ b/src/ImageProcessor/Processors/Brightness.cs @@ -25,10 +25,7 @@ public class Brightness : IGraphicsProcessor /// /// Initializes a new instance of the class. /// - public Brightness() - { - this.Settings = new Dictionary(); - } + public Brightness() => this.Settings = new Dictionary(); /// /// Gets or sets DynamicParameter. diff --git a/src/ImageProcessor/Processors/Contrast.cs b/src/ImageProcessor/Processors/Contrast.cs index 8b8bb2568..dfa054af8 100644 --- a/src/ImageProcessor/Processors/Contrast.cs +++ b/src/ImageProcessor/Processors/Contrast.cs @@ -25,10 +25,7 @@ public class Contrast : IGraphicsProcessor /// /// Initializes a new instance of the class. /// - public Contrast() - { - this.Settings = new Dictionary(); - } + public Contrast() => this.Settings = new Dictionary(); /// /// Gets or sets DynamicParameter. diff --git a/src/ImageProcessor/Processors/Crop.cs b/src/ImageProcessor/Processors/Crop.cs index 7ef820fcf..5523e70ed 100644 --- a/src/ImageProcessor/Processors/Crop.cs +++ b/src/ImageProcessor/Processors/Crop.cs @@ -15,7 +15,6 @@ namespace ImageProcessor.Processors using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; - using System.Linq; using ImageProcessor.Common.Exceptions; using ImageProcessor.Imaging; @@ -30,10 +29,7 @@ public class Crop : IGraphicsProcessor /// /// Initializes a new instance of the class. /// - public Crop() - { - this.Settings = new Dictionary(); - } + public Crop() => this.Settings = new Dictionary(); /// /// Gets or sets DynamicParameter. @@ -95,7 +91,7 @@ public Image ProcessImage(ImageFactory factory) rectangleF = new RectangleF(cropLayer.Left, cropLayer.Top, cropLayer.Right, cropLayer.Bottom); } - Rectangle rectangle = Rectangle.Round(rectangleF); + var rectangle = Rectangle.Round(rectangleF); if (rectangle.X < sourceWidth && rectangle.Y < sourceHeight) { @@ -121,7 +117,7 @@ public Image ProcessImage(ImageFactory factory) this.ForwardRotateFlip(rotationValue, ref image); } - using (Graphics graphics = Graphics.FromImage(newImage)) + using (var graphics = Graphics.FromImage(newImage)) { GraphicsHelper.SetGraphicsOptions(graphics); @@ -129,7 +125,7 @@ public Image ProcessImage(ImageFactory factory) // as the algorithm appears to be pulling averaging detail from surrounding pixels beyond the edge // of the image. Using the ImageAttributes class to specify that the pixels beyond are simply mirror // images of the pixels within solves this problem. - using (ImageAttributes wrapMode = new ImageAttributes()) + using (var wrapMode = new ImageAttributes()) { wrapMode.SetWrapMode(WrapMode.TileFlipXY); @@ -154,7 +150,7 @@ public Image ProcessImage(ImageFactory factory) this.ReverseRotateFlip(rotationValue, ref image); } - if (factory.PreserveExifData && factory.ExifPropertyItems.Any()) + if (factory.PreserveExifData && factory.ExifPropertyItems.Count > 0) { // Set the width EXIF data. factory.SetPropertyItem(ExifPropertyTag.ImageWidth, (ushort)image.Width); diff --git a/src/ImageProcessor/Processors/DetectEdges.cs b/src/ImageProcessor/Processors/DetectEdges.cs index 56ee94eee..778262a86 100644 --- a/src/ImageProcessor/Processors/DetectEdges.cs +++ b/src/ImageProcessor/Processors/DetectEdges.cs @@ -25,10 +25,7 @@ public class DetectEdges : IGraphicsProcessor /// /// Initializes a new instance of the class. /// - public DetectEdges() - { - this.Settings = new Dictionary(); - } + public DetectEdges() => this.Settings = new Dictionary(); /// /// Gets or sets the dynamic parameter. @@ -67,7 +64,7 @@ public Image ProcessImage(ImageFactory factory) try { - ConvolutionFilter convolutionFilter = new ConvolutionFilter(filter, greyscale); + var convolutionFilter = new ConvolutionFilter(filter, greyscale); // Check and assign the correct method. Don't use reflection for speed. return filter is I2DEdgeFilter diff --git a/src/ImageProcessor/Processors/EntropyCrop.cs b/src/ImageProcessor/Processors/EntropyCrop.cs index 164cc6872..8491f2be9 100644 --- a/src/ImageProcessor/Processors/EntropyCrop.cs +++ b/src/ImageProcessor/Processors/EntropyCrop.cs @@ -11,7 +11,6 @@ namespace ImageProcessor.Processors using System.Collections.Generic; using System.Drawing; using System.Drawing.Imaging; - using System.Linq; using ImageProcessor.Common.Exceptions; using ImageProcessor.Imaging.Filters.Binarization; @@ -27,10 +26,7 @@ public class EntropyCrop : IGraphicsProcessor /// /// Initializes a new instance of the class. /// - public EntropyCrop() - { - this.Settings = new Dictionary(); - } + public EntropyCrop() => this.Settings = new Dictionary(); /// /// Gets or sets the dynamic parameter. @@ -71,7 +67,7 @@ public Image ProcessImage(ImageFactory factory) newImage = new Bitmap(rectangle.Width, rectangle.Height, PixelFormat.Format32bppPArgb); newImage.SetResolution(image.HorizontalResolution, image.VerticalResolution); - using (Graphics graphics = Graphics.FromImage(newImage)) + using (var graphics = Graphics.FromImage(newImage)) { graphics.DrawImage( image, @@ -87,7 +83,7 @@ public Image ProcessImage(ImageFactory factory) image.Dispose(); image = newImage; - if (factory.PreserveExifData && factory.ExifPropertyItems.Any()) + if (factory.PreserveExifData && factory.ExifPropertyItems.Count > 0) { // Set the width EXIF data. factory.SetPropertyItem(ExifPropertyTag.ImageWidth, (ushort)image.Width); diff --git a/src/ImageProcessor/Processors/Filter.cs b/src/ImageProcessor/Processors/Filter.cs index 71575ef6f..cd9b88545 100644 --- a/src/ImageProcessor/Processors/Filter.cs +++ b/src/ImageProcessor/Processors/Filter.cs @@ -26,10 +26,7 @@ public class Filter : IGraphicsProcessor /// /// Initializes a new instance of the class. /// - public Filter() - { - this.Settings = new Dictionary(); - } + public Filter() => this.Settings = new Dictionary(); /// /// Gets or sets DynamicParameter. @@ -71,7 +68,7 @@ public Image ProcessImage(ImageFactory factory) newImage.SetResolution(image.HorizontalResolution, image.VerticalResolution); IMatrixFilter matrix = this.DynamicParameter; newImage = matrix.TransformImage(image, newImage); - + image.Dispose(); image = newImage; } diff --git a/src/ImageProcessor/Processors/Flip.cs b/src/ImageProcessor/Processors/Flip.cs index 9121ee475..4f4c6d44c 100644 --- a/src/ImageProcessor/Processors/Flip.cs +++ b/src/ImageProcessor/Processors/Flip.cs @@ -13,7 +13,6 @@ namespace ImageProcessor.Processors using System; using System.Collections.Generic; using System.Drawing; - using System.Linq; using ImageProcessor.Common.Exceptions; using ImageProcessor.Imaging.MetaData; @@ -26,10 +25,7 @@ public class Flip : IGraphicsProcessor /// /// Initializes a new instance of the class. /// - public Flip() - { - this.Settings = new Dictionary(); - } + public Flip() => this.Settings = new Dictionary(); /// /// Gets or sets DynamicParameter. @@ -70,7 +66,7 @@ public Image ProcessImage(ImageFactory factory) // Flip image.RotateFlip(rotateFlipType); - if (factory.PreserveExifData && factory.ExifPropertyItems.Any()) + if (factory.PreserveExifData && factory.ExifPropertyItems.Count > 0) { // Set the width EXIF data. factory.SetPropertyItem(ExifPropertyTag.ImageWidth, (ushort)image.Width); diff --git a/src/ImageProcessor/Processors/Format.cs b/src/ImageProcessor/Processors/Format.cs index a5e68d230..1efa7aa94 100644 --- a/src/ImageProcessor/Processors/Format.cs +++ b/src/ImageProcessor/Processors/Format.cs @@ -25,10 +25,7 @@ public class Format : IGraphicsProcessor /// /// Initializes a new instance of the class. /// - public Format() - { - this.Settings = new Dictionary(); - } + public Format() => this.Settings = new Dictionary(); /// /// Gets or sets DynamicParameter. diff --git a/src/ImageProcessor/Processors/Gamma.cs b/src/ImageProcessor/Processors/Gamma.cs index 73ae61616..4716e0080 100644 --- a/src/ImageProcessor/Processors/Gamma.cs +++ b/src/ImageProcessor/Processors/Gamma.cs @@ -25,10 +25,7 @@ public class Gamma : IGraphicsProcessor /// /// Initializes a new instance of the class. /// - public Gamma() - { - this.Settings = new Dictionary(); - } + public Gamma() => this.Settings = new Dictionary(); /// /// Gets or sets the dynamic parameter. diff --git a/src/ImageProcessor/Processors/GaussianBlur.cs b/src/ImageProcessor/Processors/GaussianBlur.cs index 4f531488d..3704ef302 100644 --- a/src/ImageProcessor/Processors/GaussianBlur.cs +++ b/src/ImageProcessor/Processors/GaussianBlur.cs @@ -25,10 +25,7 @@ public class GaussianBlur : IGraphicsProcessor /// /// Initializes a new instance of the class. /// - public GaussianBlur() - { - this.Settings = new Dictionary(); - } + public GaussianBlur() => this.Settings = new Dictionary(); /// /// Gets or sets the DynamicParameter. @@ -50,12 +47,12 @@ public GaussianBlur() /// public Image ProcessImage(ImageFactory factory) { - Bitmap image = (Bitmap)factory.Image; + var image = (Bitmap)factory.Image; try { GaussianLayer gaussianLayer = this.DynamicParameter; - Convolution convolution = new Convolution(gaussianLayer.Sigma) { Threshold = gaussianLayer.Threshold }; + var convolution = new Convolution(gaussianLayer.Sigma) { Threshold = gaussianLayer.Threshold }; double[,] kernel = convolution.CreateGuassianBlurFilter(gaussianLayer.Size); return convolution.ProcessKernel(image, kernel, factory.FixGamma); diff --git a/src/ImageProcessor/Processors/GaussianSharpen.cs b/src/ImageProcessor/Processors/GaussianSharpen.cs index b4a9b979f..5ac46c245 100644 --- a/src/ImageProcessor/Processors/GaussianSharpen.cs +++ b/src/ImageProcessor/Processors/GaussianSharpen.cs @@ -25,10 +25,7 @@ public class GaussianSharpen : IGraphicsProcessor /// /// Initializes a new instance of the class. /// - public GaussianSharpen() - { - this.Settings = new Dictionary(); - } + public GaussianSharpen() => this.Settings = new Dictionary(); /// /// Gets or sets the DynamicParameter. @@ -50,12 +47,12 @@ public GaussianSharpen() /// public Image ProcessImage(ImageFactory factory) { - Bitmap image = (Bitmap)factory.Image; + var image = (Bitmap)factory.Image; try { GaussianLayer gaussianLayer = this.DynamicParameter; - Convolution convolution = new Convolution(gaussianLayer.Sigma) { Threshold = gaussianLayer.Threshold }; + var convolution = new Convolution(gaussianLayer.Sigma) { Threshold = gaussianLayer.Threshold }; double[,] kernel = convolution.CreateGuassianSharpenFilter(gaussianLayer.Size); return convolution.ProcessKernel(image, kernel, factory.FixGamma); diff --git a/src/ImageProcessor/Processors/Halftone.cs b/src/ImageProcessor/Processors/Halftone.cs index 95bcec0a2..ca7cdf522 100644 --- a/src/ImageProcessor/Processors/Halftone.cs +++ b/src/ImageProcessor/Processors/Halftone.cs @@ -27,10 +27,7 @@ public class Halftone : IGraphicsProcessor /// /// Initializes a new instance of the class. /// - public Halftone() - { - this.Settings = new Dictionary(); - } + public Halftone() => this.Settings = new Dictionary(); /// /// Gets or sets the dynamic parameter. @@ -69,7 +66,7 @@ public Image ProcessImage(ImageFactory factory) Bitmap edgeBitmap = null; try { - HalftoneFilter filter = new HalftoneFilter(5); + var filter = new HalftoneFilter(5); newImage = new Bitmap(image); newImage.SetResolution(image.HorizontalResolution, image.VerticalResolution); newImage = filter.ApplyFilter(newImage); @@ -82,14 +79,14 @@ public Image ProcessImage(ImageFactory factory) edgeBitmap.SetResolution(image.HorizontalResolution, image.VerticalResolution); edgeBitmap = Effects.Trace(image, edgeBitmap, 120); - using (Graphics graphics = Graphics.FromImage(newImage)) + using (var graphics = Graphics.FromImage(newImage)) { // Overlay the image. graphics.DrawImage(edgeBitmap, 0, 0); - Rectangle rectangle = new Rectangle(0, 0, width, height); + var rectangle = new Rectangle(0, 0, width, height); // Draw an edge around the image. - using (Pen blackPen = new Pen(Color.Black)) + using (var blackPen = new Pen(Color.Black)) { blackPen.Width = 4; graphics.DrawRectangle(blackPen, rectangle); diff --git a/src/ImageProcessor/Processors/Hue.cs b/src/ImageProcessor/Processors/Hue.cs index 2b4903ae9..9025351f4 100644 --- a/src/ImageProcessor/Processors/Hue.cs +++ b/src/ImageProcessor/Processors/Hue.cs @@ -25,10 +25,7 @@ public class Hue : IGraphicsProcessor /// /// Initializes a new instance of the class. /// - public Hue() - { - this.Settings = new Dictionary(); - } + public Hue() => this.Settings = new Dictionary(); /// /// Gets or sets the dynamic parameter. @@ -67,7 +64,7 @@ public Image ProcessImage(ImageFactory factory) int width = image.Width; int height = image.Height; - using (FastBitmap fastBitmap = new FastBitmap(image)) + using (var fastBitmap = new FastBitmap(image)) { if (!rotate) { @@ -75,8 +72,8 @@ public Image ProcessImage(ImageFactory factory) { for (int x = 0; x < width; x++) { - HslaColor original = HslaColor.FromColor(fastBitmap.GetPixel(x, y)); - HslaColor altered = HslaColor.FromHslaColor(degrees / 360f, original.S, original.L, original.A); + var original = HslaColor.FromColor(fastBitmap.GetPixel(x, y)); + var altered = HslaColor.FromHslaColor(degrees / 360f, original.S, original.L, original.A); fastBitmap.SetPixel(x, y, altered); } } @@ -87,8 +84,8 @@ public Image ProcessImage(ImageFactory factory) { for (int x = 0; x < width; x++) { - HslaColor original = HslaColor.FromColor(fastBitmap.GetPixel(x, y)); - HslaColor altered = HslaColor.FromHslaColor((original.H + (degrees / 360f)) % 1, original.S, original.L, original.A); + var original = HslaColor.FromColor(fastBitmap.GetPixel(x, y)); + var altered = HslaColor.FromHslaColor((original.H + (degrees / 360f)) % 1, original.S, original.L, original.A); fastBitmap.SetPixel(x, y, altered); } } diff --git a/src/ImageProcessor/Processors/Mask.cs b/src/ImageProcessor/Processors/Mask.cs index ec3dd8e08..054767015 100644 --- a/src/ImageProcessor/Processors/Mask.cs +++ b/src/ImageProcessor/Processors/Mask.cs @@ -29,10 +29,7 @@ public class Mask : IGraphicsProcessor /// /// Initializes a new instance of the class. /// - public Mask() - { - this.Settings = new Dictionary(); - } + public Mask() => this.Settings = new Dictionary(); /// /// Gets or sets the dynamic parameter. @@ -81,13 +78,13 @@ public Image ProcessImage(ImageFactory factory) if (mask.Size != image.Size) { - Rectangle parent = new Rectangle(0, 0, width, height); + var parent = new Rectangle(0, 0, width, height); Rectangle child = ImageMaths.GetFilteredBoundingRectangle(mask, 0, RgbaComponent.A); maskCropped = new Bitmap(child.Width, child.Height, PixelFormat.Format32bppPArgb); maskCropped.SetResolution(image.HorizontalResolution, image.VerticalResolution); // First crop any bounding transparency. - using (Graphics graphics = Graphics.FromImage(maskCropped)) + using (var graphics = Graphics.FromImage(maskCropped)) { GraphicsHelper.SetGraphicsOptions(graphics); @@ -105,7 +102,7 @@ public Image ProcessImage(ImageFactory factory) // Now position the mask in an image of the same dimensions as the original. maskPositioned = new Bitmap(width, height, PixelFormat.Format32bppPArgb); maskPositioned.SetResolution(image.HorizontalResolution, image.VerticalResolution); - using (Graphics graphics = Graphics.FromImage(maskPositioned)) + using (var graphics = Graphics.FromImage(maskPositioned)) { GraphicsHelper.SetGraphicsOptions(graphics, true); graphics.Clear(Color.Transparent); diff --git a/src/ImageProcessor/Processors/Meta.cs b/src/ImageProcessor/Processors/Meta.cs index d4e12992a..d52411204 100644 --- a/src/ImageProcessor/Processors/Meta.cs +++ b/src/ImageProcessor/Processors/Meta.cs @@ -24,10 +24,7 @@ public class Meta : IGraphicsProcessor /// /// Initializes a new instance of the class. /// - public Meta() - { - this.Settings = new Dictionary(); - } + public Meta() => this.Settings = new Dictionary(); /// /// Gets or sets DynamicParameter. diff --git a/src/ImageProcessor/Processors/Overlay.cs b/src/ImageProcessor/Processors/Overlay.cs index 375c897af..5bdf32a99 100644 --- a/src/ImageProcessor/Processors/Overlay.cs +++ b/src/ImageProcessor/Processors/Overlay.cs @@ -27,10 +27,7 @@ public class Overlay : IGraphicsProcessor /// /// Initializes a new instance of the class. /// - public Overlay() - { - this.Settings = new Dictionary(); - } + public Overlay() => this.Settings = new Dictionary(); /// /// Gets or sets the dynamic parameter. @@ -85,16 +82,16 @@ public Image ProcessImage(ImageFactory factory) if (image.Size != overlay.Size || image.Size != new Size(overlayWidth, overlayHeight)) { // Find the maximum possible dimensions and resize the image. - ResizeLayer layer = new ResizeLayer(new Size(overlayWidth, overlayHeight), ResizeMode.Max); - Resizer resizer = new Resizer(layer) { AnimationProcessMode = factory.AnimationProcessMode }; + var layer = new ResizeLayer(new Size(overlayWidth, overlayHeight), ResizeMode.Max); + var resizer = new Resizer(layer) { AnimationProcessMode = factory.AnimationProcessMode }; overlay = resizer.ResizeImage(overlay, factory.FixGamma); overlayWidth = overlay.Width; overlayHeight = overlay.Height; } // Figure out bounds. - Rectangle parent = new Rectangle(0, 0, width, height); - Rectangle child = new Rectangle(0, 0, overlayWidth, overlayHeight); + var parent = new Rectangle(0, 0, width, height); + var child = new Rectangle(0, 0, overlayWidth, overlayHeight); // Apply opacity. if (opacity < 100) @@ -102,7 +99,7 @@ public Image ProcessImage(ImageFactory factory) overlay = Adjustments.Alpha(overlay, opacity); } - using (Graphics graphics = Graphics.FromImage(image)) + using (var graphics = Graphics.FromImage(image)) { GraphicsHelper.SetGraphicsOptions(graphics, true); diff --git a/src/ImageProcessor/Processors/Pixelate.cs b/src/ImageProcessor/Processors/Pixelate.cs index 9db9c7b79..55d84d1fe 100644 --- a/src/ImageProcessor/Processors/Pixelate.cs +++ b/src/ImageProcessor/Processors/Pixelate.cs @@ -27,10 +27,7 @@ public class Pixelate : IGraphicsProcessor /// /// Initializes a new instance of the class. /// - public Pixelate() - { - this.Settings = new Dictionary(); - } + public Pixelate() => this.Settings = new Dictionary(); /// /// Gets or sets the dynamic parameter. @@ -81,10 +78,12 @@ public Image ProcessImage(ImageFactory factory) newImage = new Bitmap(image); newImage.SetResolution(image.HorizontalResolution, image.VerticalResolution); - using (FastBitmap fastBitmap = new FastBitmap(newImage)) + using (var fastBitmap = new FastBitmap(newImage)) { // Get the range on the y-plane to choose from. +#pragma warning disable RCS1196 // Call extension method as instance method. IEnumerable range = EnumerableExtensions.SteppedRange(y, i => i < y + height && i < maxHeight, size); +#pragma warning restore RCS1196 // Call extension method as instance method. Parallel.ForEach( range, diff --git a/src/ImageProcessor/Processors/Quality.cs b/src/ImageProcessor/Processors/Quality.cs index d8a230d45..fe52e36c1 100644 --- a/src/ImageProcessor/Processors/Quality.cs +++ b/src/ImageProcessor/Processors/Quality.cs @@ -24,10 +24,7 @@ public class Quality : IGraphicsProcessor /// /// Initializes a new instance of the class. /// - public Quality() - { - this.Settings = new Dictionary(); - } + public Quality() => this.Settings = new Dictionary(); /// /// Gets or sets DynamicParameter. diff --git a/src/ImageProcessor/Processors/ReplaceColor.cs b/src/ImageProcessor/Processors/ReplaceColor.cs index 666152258..d8f5b1426 100644 --- a/src/ImageProcessor/Processors/ReplaceColor.cs +++ b/src/ImageProcessor/Processors/ReplaceColor.cs @@ -28,10 +28,7 @@ public class ReplaceColor : IGraphicsProcessor /// /// Initializes a new instance of the class. /// - public ReplaceColor() - { - this.Settings = new Dictionary(); - } + public ReplaceColor() => this.Settings = new Dictionary(); /// /// Gets or sets the dynamic parameter. @@ -97,7 +94,7 @@ public Image ProcessImage(ImageFactory factory) int width = image.Width; int height = image.Height; - using (FastBitmap fastBitmap = new FastBitmap(newImage)) + using (var fastBitmap = new FastBitmap(newImage)) { Parallel.For( 0, diff --git a/src/ImageProcessor/Processors/Resize.cs b/src/ImageProcessor/Processors/Resize.cs index 5d071311f..ae53745fc 100644 --- a/src/ImageProcessor/Processors/Resize.cs +++ b/src/ImageProcessor/Processors/Resize.cs @@ -14,7 +14,6 @@ namespace ImageProcessor.Processors using System.Collections.Generic; using System.Drawing; using System.Globalization; - using System.Linq; using ImageProcessor.Common.Exceptions; using ImageProcessor.Imaging; @@ -78,18 +77,15 @@ public Image ProcessImage(ImageFactory factory) // Augment the layer with the extra information. resizeLayer.RestrictedSizes = this.RestrictedSizes; - Size maxSize = new Size(); - - int maxWidth; - int maxHeight; - int.TryParse(this.Settings["MaxWidth"], NumberStyles.Any, CultureInfo.InvariantCulture, out maxWidth); - int.TryParse(this.Settings["MaxHeight"], NumberStyles.Any, CultureInfo.InvariantCulture, out maxHeight); + var maxSize = new Size(); + int.TryParse(this.Settings["MaxWidth"], NumberStyles.Any, CultureInfo.InvariantCulture, out int maxWidth); + int.TryParse(this.Settings["MaxHeight"], NumberStyles.Any, CultureInfo.InvariantCulture, out int maxHeight); maxSize.Width = maxWidth; maxSize.Height = maxHeight; resizeLayer.MaxSize = maxSize; - Resizer resizer = new Resizer(resizeLayer) { ImageFormat = factory.CurrentImageFormat, AnimationProcessMode = factory.AnimationProcessMode }; + var resizer = new Resizer(resizeLayer) { ImageFormat = factory.CurrentImageFormat, AnimationProcessMode = factory.AnimationProcessMode }; newImage = resizer.ResizeImage(image, factory.FixGamma); // Check that the original image has not been returned. @@ -99,7 +95,7 @@ public Image ProcessImage(ImageFactory factory) image.Dispose(); image = newImage; - if (factory.PreserveExifData && factory.ExifPropertyItems.Any()) + if (factory.PreserveExifData && factory.ExifPropertyItems.Count > 0) { // Set the width EXIF data. factory.SetPropertyItem(ExifPropertyTag.ImageWidth, (ushort)image.Width); diff --git a/src/ImageProcessor/Processors/Resolution.cs b/src/ImageProcessor/Processors/Resolution.cs index 961c4b21b..378bbf788 100644 --- a/src/ImageProcessor/Processors/Resolution.cs +++ b/src/ImageProcessor/Processors/Resolution.cs @@ -13,7 +13,6 @@ namespace ImageProcessor.Processors using System; using System.Collections.Generic; using System.Drawing; - using System.Linq; using ImageProcessor.Common.Exceptions; using ImageProcessor.Imaging.MetaData; @@ -26,10 +25,7 @@ public class Resolution : IGraphicsProcessor /// /// Initializes a new instance of the class. /// - public Resolution() - { - this.Settings = new Dictionary(); - } + public Resolution() => this.Settings = new Dictionary(); /// /// Gets or sets the dynamic parameter. @@ -82,14 +78,14 @@ public Image ProcessImage(ImageFactory factory) ((Bitmap)image).SetResolution(resolution.Item1, resolution.Item2); } - if (factory.PreserveExifData && factory.ExifPropertyItems.Any()) + if (factory.PreserveExifData && factory.ExifPropertyItems.Count > 0) { // Set the horizontal EXIF data. - Rational horizontalRational = new Rational((uint)resolution.Item1, 1); + var horizontalRational = new Rational((uint)resolution.Item1, 1); factory.SetPropertyItem(ExifPropertyTag.XResolution, horizontalRational); // Set the vertical EXIF data. - Rational verticalRational = new Rational((uint)resolution.Item2, 1); + var verticalRational = new Rational((uint)resolution.Item2, 1); factory.SetPropertyItem(ExifPropertyTag.YResolution, verticalRational); // Set the unit EXIF data diff --git a/src/ImageProcessor/Processors/Rotate.cs b/src/ImageProcessor/Processors/Rotate.cs index d4cc1ca29..cd2be3468 100644 --- a/src/ImageProcessor/Processors/Rotate.cs +++ b/src/ImageProcessor/Processors/Rotate.cs @@ -14,7 +14,6 @@ namespace ImageProcessor.Processors using System.Collections.Generic; using System.Drawing; using System.Drawing.Imaging; - using System.Linq; using ImageProcessor.Common.Exceptions; using ImageProcessor.Imaging.Helpers; @@ -28,10 +27,7 @@ public class Rotate : IGraphicsProcessor /// /// Initializes a new instance of the class. /// - public Rotate() - { - this.Settings = new Dictionary(); - } + public Rotate() => this.Settings = new Dictionary(); /// /// Gets or sets DynamicParameter. @@ -76,7 +72,7 @@ public Image ProcessImage(ImageFactory factory) // Create a rotated image. image = this.RotateImage(image, rotateAtX, rotateAtY, angle); - if (factory.PreserveExifData && factory.ExifPropertyItems.Any()) + if (factory.PreserveExifData && factory.ExifPropertyItems.Count > 0) { // Set the width EXIF data. factory.SetPropertyItem(ExifPropertyTag.ImageWidth, (ushort)image.Width); @@ -112,11 +108,11 @@ private Bitmap RotateImage(Image image, float rotateAtX, float rotateAtY, float int y = (newSize.Height - image.Height) / 2; // Create a new empty bitmap to hold rotated image - Bitmap newImage = new Bitmap(newSize.Width, newSize.Height, PixelFormat.Format32bppPArgb); + var newImage = new Bitmap(newSize.Width, newSize.Height, PixelFormat.Format32bppPArgb); newImage.SetResolution(image.HorizontalResolution, image.VerticalResolution); // Make a graphics object from the empty bitmap - using (Graphics graphics = Graphics.FromImage(newImage)) + using (var graphics = Graphics.FromImage(newImage)) { // Reduce the jagged edge. GraphicsHelper.SetGraphicsOptions(graphics); diff --git a/src/ImageProcessor/Processors/RotateBounded.cs b/src/ImageProcessor/Processors/RotateBounded.cs index f70ed0712..addcb3110 100644 --- a/src/ImageProcessor/Processors/RotateBounded.cs +++ b/src/ImageProcessor/Processors/RotateBounded.cs @@ -14,7 +14,6 @@ namespace ImageProcessor.Processors using System.Collections.Generic; using System.Drawing; using System.Drawing.Imaging; - using System.Linq; using ImageProcessor.Common.Exceptions; using ImageProcessor.Imaging.Helpers; @@ -57,7 +56,7 @@ public Image ProcessImage(ImageFactory factory) // Create a rotated image. image = this.RotateImage(image, rotateParams.Item1, rotateParams.Item2); - if (factory.PreserveExifData && factory.ExifPropertyItems.Any()) + if (factory.PreserveExifData && factory.ExifPropertyItems.Count > 0) { // Set the width EXIF data. factory.SetPropertyItem(ExifPropertyTag.ImageWidth, (ushort)image.Width); @@ -100,7 +99,7 @@ public Image ProcessImage(ImageFactory factory) /// private Bitmap RotateImage(Image image, float angleInDegrees, bool keepSize) { - Size newSize = new Size(image.Width, image.Height); + var newSize = new Size(image.Width, image.Height); float zoom = ImageMaths.ZoomAfterRotation(image.Width, image.Height, angleInDegrees); @@ -116,11 +115,11 @@ private Bitmap RotateImage(Image image, float angleInDegrees, bool keepSize) float rotateAtY = Math.Abs(image.Height / 2); // Create a new empty bitmap to hold rotated image - Bitmap newImage = new Bitmap(newSize.Width, newSize.Height, PixelFormat.Format32bppPArgb); + var newImage = new Bitmap(newSize.Width, newSize.Height, PixelFormat.Format32bppPArgb); newImage.SetResolution(image.HorizontalResolution, image.VerticalResolution); // Make a graphics object from the empty bitmap - using (Graphics graphics = Graphics.FromImage(newImage)) + using (var graphics = Graphics.FromImage(newImage)) { GraphicsHelper.SetGraphicsOptions(graphics); diff --git a/src/ImageProcessor/Processors/RoundedCorners.cs b/src/ImageProcessor/Processors/RoundedCorners.cs index 2aba05b2b..1a3cd0a16 100644 --- a/src/ImageProcessor/Processors/RoundedCorners.cs +++ b/src/ImageProcessor/Processors/RoundedCorners.cs @@ -28,10 +28,7 @@ public class RoundedCorners : IGraphicsProcessor /// /// Initializes a new instance of the class. /// - public RoundedCorners() - { - this.Settings = new Dictionary(); - } + public RoundedCorners() => this.Settings = new Dictionary(); /// /// Gets or sets DynamicParameter. @@ -75,9 +72,7 @@ public Image ProcessImage(ImageFactory factory) bool bottomRight = roundedCornerLayer.BottomRight; // Create a rounded image. - image = this.RoundCornerImage(image, radius, topLeft, topRight, bottomLeft, bottomRight); - - return image; + return this.RoundCornerImage(image, radius, topLeft, topRight, bottomLeft, bottomRight); } catch (Exception ex) { @@ -102,16 +97,16 @@ private Bitmap RoundCornerImage(Image image, int cornerRadius, bool topLeft = fa int cornerDiameter = cornerRadius * 2; // Create a new empty bitmap to hold rotated image - Bitmap newImage = new Bitmap(image.Width, image.Height, PixelFormat.Format32bppPArgb); + var newImage = new Bitmap(image.Width, image.Height, PixelFormat.Format32bppPArgb); newImage.SetResolution(image.HorizontalResolution, image.VerticalResolution); // Make a graphics object from the empty bitmap - using (Graphics graphics = Graphics.FromImage(newImage)) + using (var graphics = Graphics.FromImage(newImage)) { GraphicsHelper.SetGraphicsOptions(graphics, true, true); // Add rounded corners - using (GraphicsPath path = new GraphicsPath()) + using (var path = new GraphicsPath()) { // Determined if the top left has a rounded corner if (topLeft) diff --git a/src/ImageProcessor/Processors/Saturation.cs b/src/ImageProcessor/Processors/Saturation.cs index ca77d4fa4..acecd377f 100644 --- a/src/ImageProcessor/Processors/Saturation.cs +++ b/src/ImageProcessor/Processors/Saturation.cs @@ -28,10 +28,7 @@ public class Saturation : IGraphicsProcessor /// /// Initializes a new instance of the class. /// - public Saturation() - { - this.Settings = new Dictionary(); - } + public Saturation() => this.Settings = new Dictionary(); /// /// Gets or sets DynamicParameter. @@ -84,7 +81,7 @@ public Image ProcessImage(ImageFactory factory) newImage = new Bitmap(image.Width, image.Height, PixelFormat.Format32bppPArgb); newImage.SetResolution(image.HorizontalResolution, image.VerticalResolution); - ColorMatrix colorMatrix = + var colorMatrix = new ColorMatrix( new[] { @@ -107,9 +104,9 @@ public Image ProcessImage(ImageFactory factory) new float[] { 0, 0, 0, 0, 1 } }); - using (Graphics graphics = Graphics.FromImage(newImage)) + using (var graphics = Graphics.FromImage(newImage)) { - using (ImageAttributes imageAttributes = new ImageAttributes()) + using (var imageAttributes = new ImageAttributes()) { imageAttributes.SetColorMatrix(colorMatrix); diff --git a/src/ImageProcessor/Processors/Tint.cs b/src/ImageProcessor/Processors/Tint.cs index 2e20efbe8..4a6422cb3 100644 --- a/src/ImageProcessor/Processors/Tint.cs +++ b/src/ImageProcessor/Processors/Tint.cs @@ -26,10 +26,7 @@ public class Tint : IGraphicsProcessor /// /// Initializes a new instance of the class. /// - public Tint() - { - this.Settings = new Dictionary(); - } + public Tint() => this.Settings = new Dictionary(); /// /// Gets or sets DynamicParameter. @@ -68,15 +65,15 @@ public Image ProcessImage(ImageFactory factory) new float[] { 0, 0, 0, 0, 1 } }; - ColorMatrix colorMatrix = new ColorMatrix(colorMatrixElements); + var colorMatrix = new ColorMatrix(colorMatrixElements); newImage = new Bitmap(image.Width, image.Height, PixelFormat.Format32bppPArgb); newImage.SetResolution(image.HorizontalResolution, image.VerticalResolution); - using (Graphics graphics = Graphics.FromImage(newImage)) + using (var graphics = Graphics.FromImage(newImage)) { GraphicsHelper.SetGraphicsOptions(graphics); - using (ImageAttributes attributes = new ImageAttributes()) + using (var attributes = new ImageAttributes()) { attributes.SetColorMatrix(colorMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap); graphics.DrawImage(image, new Rectangle(0, 0, image.Width, image.Height), 0, 0, image.Width, image.Height, GraphicsUnit.Pixel, attributes); diff --git a/src/ImageProcessor/Processors/Vignette.cs b/src/ImageProcessor/Processors/Vignette.cs index 9f9626228..663abee62 100644 --- a/src/ImageProcessor/Processors/Vignette.cs +++ b/src/ImageProcessor/Processors/Vignette.cs @@ -65,7 +65,7 @@ public Image ProcessImage(ImageFactory factory) try { - Color baseColor = (Color)this.DynamicParameter; + var baseColor = (Color)this.DynamicParameter; return Effects.Vignette(image, baseColor); } catch (Exception ex) diff --git a/src/ImageProcessor/Processors/Watermark.cs b/src/ImageProcessor/Processors/Watermark.cs index bd2cc00bf..62016209f 100644 --- a/src/ImageProcessor/Processors/Watermark.cs +++ b/src/ImageProcessor/Processors/Watermark.cs @@ -27,10 +27,7 @@ public class Watermark : IGraphicsProcessor /// /// Initializes a new instance of the class. /// - public Watermark() - { - this.Settings = new Dictionary(); - } + public Watermark() => this.Settings = new Dictionary(); /// /// Gets or sets DynamicParameter. @@ -81,11 +78,11 @@ public Image ProcessImage(ImageFactory factory) image.RotateFlip(flipType.Value); } - using (Graphics graphics = Graphics.FromImage(image)) + using (var graphics = Graphics.FromImage(image)) { using (Font font = this.GetFont(textLayer.FontFamily, fontSize, fontStyle)) { - using (StringFormat drawFormat = new StringFormat(StringFormat.GenericTypographic)) + using (var drawFormat = new StringFormat(StringFormat.GenericTypographic)) { StringFormatFlags? formatFlags = this.GetFlags(textLayer); if (formatFlags != null) @@ -128,7 +125,7 @@ public Image ProcessImage(ImageFactory factory) // Scale the shadow position to match the font size. // Magic number but it's based on artistic preference. int shadowDiff = (int)Math.Ceiling(fontSize / 24f); - Point shadowPoint = new Point(origin.Value.X + shadowDiff, origin.Value.Y + shadowDiff); + var shadowPoint = new Point(origin.Value.X + shadowDiff, origin.Value.Y + shadowDiff); // Set the bounds so any overlapping text will wrap. if (textLayer.RightToLeft && fallbackUsed) @@ -208,7 +205,7 @@ private Font GetFont(FontFamily fontFamily, int fontSize, FontStyle fontStyle) { // Clone the font family and use it. Disposing of the family in the TextLayer is // the responsibility of the user. - using (FontFamily clone = new FontFamily(fontFamily.Name)) + using (var clone = new FontFamily(fontFamily.Name)) { return new Font(clone, fontSize, fontStyle, GraphicsUnit.Pixel); } diff --git a/tests/ImageProcessor.UnitTests/Extensions/EnumerableExtensionsUnitTests.cs b/tests/ImageProcessor.UnitTests/Extensions/EnumerableExtensionsUnitTests.cs index 0fd9bf733..f7c49523f 100644 --- a/tests/ImageProcessor.UnitTests/Extensions/EnumerableExtensionsUnitTests.cs +++ b/tests/ImageProcessor.UnitTests/Extensions/EnumerableExtensionsUnitTests.cs @@ -20,7 +20,7 @@ namespace ImageProcessor.UnitTests.Extensions /// /// The enumerable extensions unit tests. /// - public class EnumerableExtensionsUnitTests + public static class EnumerableExtensionsUnitTests { /// /// The when stepped range. @@ -35,7 +35,7 @@ public class WhenSteppedRange public void ThenShouldReturn1Through9NumbersGiven1Then10Then1() { // Arrange // Act - var enumerable = EnumerableExtensions.SteppedRange(1, 10, 1); + IEnumerable enumerable = EnumerableExtensions.SteppedRange(1, 10, 1); // Assert Assert.That(enumerable, Is.EquivalentTo(new List { 1, 2, 3, 4, 5, 6, 7, 8, 9 })); @@ -48,7 +48,7 @@ public void ThenShouldReturn1Through9NumbersGiven1Then10Then1() public void ThenShouldReturnNegative10Through0GivenBetweenRangeNegative10Then1Then1() { // Arrange // Act - var enumerable = EnumerableExtensions.SteppedRange(-10, 1, 1); + IEnumerable enumerable = EnumerableExtensions.SteppedRange(-10, 1, 1); // Assert Assert.That(enumerable, Is.EquivalentTo(new List { 0, -1, -2, -3, -4, -5, -6, -7, -8, -9, -10 })); @@ -61,7 +61,7 @@ public void ThenShouldReturnNegative10Through0GivenBetweenRangeNegative10Then1Th public void ThenShouldReturn1Then3Then5Then7Then9GivenBetweenRange1Then10Then2() { // Arrange // Act - var enumerable = EnumerableExtensions.SteppedRange(1, 10, 2); + IEnumerable enumerable = EnumerableExtensions.SteppedRange(1, 10, 2); // Assert Assert.That(enumerable, Is.EquivalentTo(new List { 1, 3, 5, 7, 9 })); @@ -91,7 +91,7 @@ public class WhenSteppedRangeWithFunction public void ThenReturn0To9GivenFunction0ThenILessThan10Then1() { // Arrange // Act - var enumerable = EnumerableExtensions.SteppedRange(0, i => i < 10, 1); + IEnumerable enumerable = EnumerableExtensions.SteppedRange(0, i => i < 10, 1); // Assert Assert.That(enumerable, Is.EquivalentTo(new List { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 })); diff --git a/tests/ImageProcessor.Web.UnitTests/Extensions/DirectoryInfoExtensionsUnitTests.cs b/tests/ImageProcessor.Web.UnitTests/Extensions/DirectoryInfoExtensionsUnitTests.cs index 6683ab210..a06dfe036 100644 --- a/tests/ImageProcessor.Web.UnitTests/Extensions/DirectoryInfoExtensionsUnitTests.cs +++ b/tests/ImageProcessor.Web.UnitTests/Extensions/DirectoryInfoExtensionsUnitTests.cs @@ -19,7 +19,7 @@ namespace ImageProcessor.Web.UnitTests.Extensions /// /// The directory info extensions unit tests. /// - public class DirectoryInfoExtensionsUnitTests + public static class DirectoryInfoExtensionsUnitTests { /// /// The when safe enumerable directories. @@ -79,6 +79,7 @@ public void ThenShouldReturnEnumerableDirectoriesGivenPathWithSubDirectories() // Assert Assert.That(directories, Is.EquivalentTo(directoryList.Select(s => new DirectoryInfo(s)))); } + /// /// The then should return empty enumerable directories given path with invalid directory /// @@ -95,82 +96,5 @@ public void ThenShouldReturnEmptyEnumerableDirectoriesGivenPathWithInvalidDirect Assert.That(directories, Is.EquivalentTo(Enumerable.Empty())); } } - - /// - /// The when safe enumerable directories async. - /// - [TestFixture] - public class WhenSafeEnumerableDirectoriesAsync - { - /// - /// The test directory root. - /// - private static readonly string TestDirectoryRoot = TestContext.CurrentContext.TestDirectory + @"\DirectoryInfoExtensionsTests"; - - /// - /// The directory count. - /// - private const int DirectoryCount = 6; - - /// - /// The directory list. - /// - private IEnumerable directoryList; - - /// - /// The setup directories. - /// - [SetUp] - public void SetupDirectories() - { - directoryList = Enumerable.Range(1, DirectoryCount).Select(i => string.Format("{0}/TestDirectory{1}", TestDirectoryRoot, i)); - foreach (var directory in directoryList) - { - Directory.CreateDirectory(directory); - } - } - - /// - /// The remove directories. - /// - [TearDown] - public void RemoveDirectories() - { - Directory.Delete(TestDirectoryRoot, true); - } - /// - /// Then should return enumerable directories asynchronously given path with subdirectories - /// - [Test] - public async Task ThenShouldReturnEnumerableDirectoriesAsyncGivenPathWithSubDirectories() - { - // Arrange - var info = new DirectoryInfo(TestDirectoryRoot); - var asyncResult = info.SafeEnumerateDirectoriesAsync(); - - // Act - var directories = await asyncResult; - - // Assert - Assert.That(directories, Is.EquivalentTo(directoryList.Select(s => new DirectoryInfo(s)))); - } - - /// - /// Then return empty enumerable directories asynchronously given invalid directory - /// - [Test] - public async Task ThenReturnEmptyEnumerableGivenInvalidDirectory() - { - // Arrange - var info = new DirectoryInfo(string.Format("{0}Bad", TestDirectoryRoot)); - var asyncResult = info.SafeEnumerateDirectoriesAsync(); - - // Act - var directories = await asyncResult; - - // Assert - Assert.That(directories, Is.EqualTo(Enumerable.Empty())); - } - } } } \ No newline at end of file From a1dc7f5e39968e7e1f7ada16b83a873049082308 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Fri, 31 Aug 2018 00:06:14 +0100 Subject: [PATCH 088/113] Dont use GetBuffer() as it can be longer. Fix #689 --- .../Services/CloudImageService.cs | 7 +++---- .../Services/RemoteImageService.cs | 7 +++---- .../Views/Home/External.cshtml | 16 ++++++++++------ .../config/imageprocessor/security.config | 7 ++++--- 4 files changed, 20 insertions(+), 17 deletions(-) diff --git a/src/ImageProcessor.Web/Services/CloudImageService.cs b/src/ImageProcessor.Web/Services/CloudImageService.cs index e6aff9082..90b8727f5 100644 --- a/src/ImageProcessor.Web/Services/CloudImageService.cs +++ b/src/ImageProcessor.Web/Services/CloudImageService.cs @@ -16,7 +16,6 @@ using System.Threading.Tasks; using ImageProcessor.Web.Caching; using ImageProcessor.Web.Helpers; -using Microsoft.IO; namespace ImageProcessor.Web.Services { @@ -119,17 +118,17 @@ public virtual async Task GetImage(object id) return null; } - using (var memoryStream = new RecyclableMemoryStream(MemoryStreamPool.Shared)) + using (MemoryStream memoryStream = MemoryStreamPool.Shared.GetStream()) { using (HttpResponseMessage response = httpResponse) { using (Stream responseStream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false)) { - responseStream.CopyTo(memoryStream); + await responseStream.CopyToAsync(memoryStream).ConfigureAwait(false); // Reset the position of the stream to ensure we're reading the correct part. memoryStream.Position = 0; - buffer = memoryStream.GetBuffer(); + buffer = memoryStream.ToArray(); } } } diff --git a/src/ImageProcessor.Web/Services/RemoteImageService.cs b/src/ImageProcessor.Web/Services/RemoteImageService.cs index 2273604e9..bf961a140 100644 --- a/src/ImageProcessor.Web/Services/RemoteImageService.cs +++ b/src/ImageProcessor.Web/Services/RemoteImageService.cs @@ -15,7 +15,6 @@ using System.Threading.Tasks; using ImageProcessor.Web.Caching; using ImageProcessor.Web.Helpers; -using Microsoft.IO; namespace ImageProcessor.Web.Services { @@ -129,17 +128,17 @@ public virtual async Task GetImage(object id) return null; } - using (var memoryStream = new RecyclableMemoryStream(MemoryStreamPool.Shared)) + using (MemoryStream memoryStream = MemoryStreamPool.Shared.GetStream()) { using (HttpResponseMessage response = httpResponse) { using (Stream responseStream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false)) { - responseStream.CopyTo(memoryStream); + await responseStream.CopyToAsync(memoryStream).ConfigureAwait(false); // Reset the position of the stream to ensure we're reading the correct part. memoryStream.Position = 0; - buffer = memoryStream.GetBuffer(); + buffer = memoryStream.ToArray(); } } } diff --git a/tests/ImageProcessor.TestWebsite/Views/Home/External.cshtml b/tests/ImageProcessor.TestWebsite/Views/Home/External.cshtml index 9e6932e0b..a0d32111e 100644 --- a/tests/ImageProcessor.TestWebsite/Views/Home/External.cshtml +++ b/tests/ImageProcessor.TestWebsite/Views/Home/External.cshtml @@ -3,6 +3,7 @@ }

    External

    +

    Remote

    Current

    @@ -26,17 +27,20 @@

    Current

    - +

    Legacy

    - +
    +
    +
    +

    Cloud

    -

    Current

    - -

    Legacy

    - + +
    +
    +
    diff --git a/tests/ImageProcessor.TestWebsite/config/imageprocessor/security.config b/tests/ImageProcessor.TestWebsite/config/imageprocessor/security.config index 799c6341e..41b0ae8ef 100644 --- a/tests/ImageProcessor.TestWebsite/config/imageprocessor/security.config +++ b/tests/ImageProcessor.TestWebsite/config/imageprocessor/security.config @@ -4,13 +4,14 @@ - + From 5df40fd1b93b5599ea86beaf3a70fde6a270a7e1 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Fri, 31 Aug 2018 00:35:30 +0100 Subject: [PATCH 089/113] Sanitise request check. Fix #604 --- src/ImageProcessor.Web.Plugins.AzureBlobCache/AzureBlobCache.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ImageProcessor.Web.Plugins.AzureBlobCache/AzureBlobCache.cs b/src/ImageProcessor.Web.Plugins.AzureBlobCache/AzureBlobCache.cs index 7910d0b94..79f03ba8c 100644 --- a/src/ImageProcessor.Web.Plugins.AzureBlobCache/AzureBlobCache.cs +++ b/src/ImageProcessor.Web.Plugins.AzureBlobCache/AzureBlobCache.cs @@ -457,7 +457,7 @@ protected virtual async Task IsUpdatedAsync(DateTime creationDate) try { - if (new Uri(this.RequestPath).IsFile) + if ((Uri.IsWellFormedUriString(this.RequestPath, UriKind.Absolute)) && (new Uri(this.RequestPath).IsFile)) { if (File.Exists(this.RequestPath)) { From f4f1591df1f94c13098ef5d05bd0c09660e22212 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Fri, 31 Aug 2018 13:03:14 +0100 Subject: [PATCH 090/113] Cleanup and add AmazonS3Cache to build --- ImageProcessor.sln | 1 + ...Processor.Web.Plugins.AmazonS3Cache.nuspec | 38 ++++ build/build.ps1 | 12 +- .../imageprocessor/cache.config.transform | 11 +- .../AmazonS3Cache.cs | 183 +++++------------- .../HttpModules/ImageProcessingModule.cs | 11 -- 6 files changed, 105 insertions(+), 151 deletions(-) create mode 100644 build/NuSpecs/ImageProcessor.Web.Plugins.AmazonS3Cache.nuspec diff --git a/ImageProcessor.sln b/ImageProcessor.sln index c86d6e404..8fc6482a2 100644 --- a/ImageProcessor.sln +++ b/ImageProcessor.sln @@ -47,6 +47,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Nuspecs", "Nuspecs", "{E0B8 build\NuSpecs\ImageProcessor.Plugins.WebP.nuspec = build\NuSpecs\ImageProcessor.Plugins.WebP.nuspec build\NuSpecs\ImageProcessor.Web.Config.nuspec = build\NuSpecs\ImageProcessor.Web.Config.nuspec build\NuSpecs\ImageProcessor.Web.nuspec = build\NuSpecs\ImageProcessor.Web.nuspec + build\NuSpecs\ImageProcessor.Web.Plugins.AmazonS3Cache.nuspec = build\NuSpecs\ImageProcessor.Web.Plugins.AmazonS3Cache.nuspec build\NuSpecs\ImageProcessor.Web.Plugins.AzureBlobCache.nuspec = build\NuSpecs\ImageProcessor.Web.Plugins.AzureBlobCache.nuspec build\NuSpecs\ImageProcessor.Web.PostProcessor.nuspec = build\NuSpecs\ImageProcessor.Web.PostProcessor.nuspec EndProjectSection diff --git a/build/NuSpecs/ImageProcessor.Web.Plugins.AmazonS3Cache.nuspec b/build/NuSpecs/ImageProcessor.Web.Plugins.AmazonS3Cache.nuspec new file mode 100644 index 000000000..224411d95 --- /dev/null +++ b/build/NuSpecs/ImageProcessor.Web.Plugins.AmazonS3Cache.nuspec @@ -0,0 +1,38 @@ + + + + ImageProcessor.Web.Plugins.AmazonS3Cache + $version$ + ImageProcessor.Web.Plugins.AmazonS3Cache + James Jackson-South + James Jackson-South + http://imageprocessor.org + https://raw.githubusercontent.com/JimBobSquarePants/ImageProcessor/develop/build/icons/imageprocessor-logo-128.png + false + + Adds a self cleaning cache to ImageProcessor.Web that uses Amazon S3 Buckets to store processed images. + + If you use ImageProcessor.Web please get in touch via my twitter @james_m_south + + Feedback is always welcome + + ImageProcessor.Web AmazonS3Cache for ASP.NET websites. + + James Jackson-South + en-GB + Image Resize Crop Rotate Quality Watermark Gif Jpg Jpeg Bitmap Png Tiff Amazon S3 Cache Asp + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/build/build.ps1 b/build/build.ps1 index 2f6c588c1..3eb934ea2 100644 --- a/build/build.ps1 +++ b/build/build.ps1 @@ -49,13 +49,22 @@ $imageprocessorWebConfig = @{ $imageProcessorWebPluginsAzureBlobCache = @{ name = "ImageProcessor.Web.Plugins.AzureBlobCache" - version = "1.4.2.${buildNumber}" + version = "1.4.3.${buildNumber}" folder = Join-Path $buildPath "src\ImageProcessor.Web.Plugins.AzureBlobCache" output = Join-Path $binPath "ImageProcessor.Web.Plugins.AzureBlobCache\lib\net452" csproj = "ImageProcessor.Web.Plugins.AzureBlobCache.csproj" nuspec = Join-Path $nuspecsPath "ImageProcessor.Web.Plugins.AzureBlobCache.nuspec" }; +$imageProcessorWebPluginsAmazonS3Cache = @{ + name = "ImageProcessor.Web.Plugins.AzureBlobCache" + version = "1.0.0.${buildNumber}" + folder = Join-Path $buildPath "src\ImageProcessor.Web.Plugins.AmazonS3Cache" + output = Join-Path $binPath "ImageProcessor.Web.Plugins.AmazonS3Cache\lib\net452" + csproj = "ImageProcessor.Web.Plugins.AmazonS3Cache.csproj" + nuspec = Join-Path $nuspecsPath "ImageProcessor.Web.Plugins.AmazonS3Cache.nuspec" +}; + $imageProcessorWebPluginsPostProcessor = @{ name = "ImageProcessor.Web.Plugins.PostProcessor" version = "1.3.2.${buildNumber}" @@ -72,6 +81,7 @@ $projects = @( $imageprocessorWeb, $imageprocessorWebConfig, $imageProcessorWebPluginsAzureBlobCache, + $imageProcessorWebPluginsAmazonS3Cache $imageProcessorWebPluginsPostProcessor ); diff --git a/build/content/ImageProcessor.Web.Plugins.AmazonS3Cache/config/imageprocessor/cache.config.transform b/build/content/ImageProcessor.Web.Plugins.AmazonS3Cache/config/imageprocessor/cache.config.transform index dbf6692a7..6a6cb898f 100644 --- a/build/content/ImageProcessor.Web.Plugins.AmazonS3Cache/config/imageprocessor/cache.config.transform +++ b/build/content/ImageProcessor.Web.Plugins.AmazonS3Cache/config/imageprocessor/cache.config.transform @@ -4,9 +4,14 @@ - - - + + + + + + + + diff --git a/src/ImageProcessor.Web.Plugins.AmazonS3Cache/AmazonS3Cache.cs b/src/ImageProcessor.Web.Plugins.AmazonS3Cache/AmazonS3Cache.cs index 61bf458af..179eae480 100644 --- a/src/ImageProcessor.Web.Plugins.AmazonS3Cache/AmazonS3Cache.cs +++ b/src/ImageProcessor.Web.Plugins.AmazonS3Cache/AmazonS3Cache.cs @@ -13,7 +13,6 @@ namespace ImageProcessor.Web.Plugins.AmazonS3Cache { using System; using System.Collections.Generic; - using System.Globalization; using System.IO; using System.Linq; using System.Net; @@ -28,8 +27,6 @@ namespace ImageProcessor.Web.Plugins.AmazonS3Cache using ImageProcessor.Configuration; using ImageProcessor.Web.Caching; - using ImageProcessor.Web.Extensions; - using ImageProcessor.Web.Helpers; using ImageProcessor.Web.HttpModules; /// @@ -76,7 +73,7 @@ public class AmazonS3Cache : ImageCacheBase /// /// The Key prefix to use for cache files /// - private string awsCacheKeyPrefix; + private readonly string awsCacheKeyPrefix; /// /// Determines if the CDN request is redirected or rewritten @@ -123,13 +120,13 @@ public class AmazonS3Cache : ImageCacheBase public AmazonS3Cache(string requestPath, string fullPath, string querystring) : base(requestPath, fullPath, querystring) { - awsAccessKey = Settings.ContainsKey("AwsAccessKey") ? Settings["AwsAccessKey"] : string.Empty; - awsSecretKey = Settings.ContainsKey("AwsSecretKey") ? Settings["AwsSecretKey"] : string.Empty; + this.awsAccessKey = this.Settings.ContainsKey("AwsAccessKey") ? this.Settings["AwsAccessKey"] : string.Empty; + this.awsSecretKey = this.Settings.ContainsKey("AwsSecretKey") ? this.Settings["AwsSecretKey"] : string.Empty; this.awsBucketName = this.Settings["AwsBucketName"]; this.awsCacheKeyPrefix = this.Settings["AwsCacheKeyPrefix"]; - string endPointRegion = Settings.ContainsKey("RegionEndpoint") ? Settings["RegionEndpoint"] : string.Empty; - RegionEndpoint awsRegionEndpoint = GetRegionEndpoint(endPointRegion); + string endPointRegion = this.Settings.ContainsKey("RegionEndpoint") ? this.Settings["RegionEndpoint"] : string.Empty; + RegionEndpoint awsRegionEndpoint = this.GetRegionEndpoint(endPointRegion); if (this.AwsIsValid) { @@ -143,32 +140,32 @@ public AmazonS3Cache(string requestPath, string fullPath, string querystring) this.cachedCdnRoot = this.Settings.ContainsKey("CachedCDNRoot") ? this.Settings["CachedCDNRoot"] : string.Empty; - if (amazonS3SourceCache == null) + if (this.amazonS3SourceCache == null) { - amazonS3SourceBucketName = Settings.ContainsKey("SourceS3Bucket") ? Settings["SourceS3Bucket"] : string.Empty; - cloudSourceUri = Settings.ContainsKey("CloudSourceURI") ? Settings["CloudSourceURI"] : string.Empty; + this.amazonS3SourceBucketName = this.Settings.ContainsKey("SourceS3Bucket") ? this.Settings["SourceS3Bucket"] : string.Empty; + this.cloudSourceUri = this.Settings.ContainsKey("CloudSourceURI") ? this.Settings["CloudSourceURI"] : string.Empty; string sourceAccount = this.Settings.ContainsKey("SourceStorageAccount") ? this.Settings["SourceStorageAccount"] : string.Empty; // Repeat for source if it exists - if (!string.IsNullOrWhiteSpace(amazonS3SourceBucketName)) + if (!string.IsNullOrWhiteSpace(this.amazonS3SourceBucketName)) { - string awsSourceAccessKey = Settings.ContainsKey("AwsSourceAccessKey") ? Settings["AwsSourceAccessKey"] : string.Empty; - string awsSourceSecretKey = Settings.ContainsKey("AwsSourceSecretKey") ? Settings["AwsSourceSecretKey"] : string.Empty; - string sourceEndPointRegion = Settings.ContainsKey("SourceRegionEndpoint") ? Settings["SourceRegionEndpoint"] : string.Empty; - RegionEndpoint awsSourceRegionEndpoint = GetRegionEndpoint(sourceEndPointRegion); + string awsSourceAccessKey = this.Settings.ContainsKey("AwsSourceAccessKey") ? this.Settings["AwsSourceAccessKey"] : string.Empty; + string awsSourceSecretKey = this.Settings.ContainsKey("AwsSourceSecretKey") ? this.Settings["AwsSourceSecretKey"] : string.Empty; + string sourceEndPointRegion = this.Settings.ContainsKey("SourceRegionEndpoint") ? this.Settings["SourceRegionEndpoint"] : string.Empty; + RegionEndpoint awsSourceRegionEndpoint = this.GetRegionEndpoint(sourceEndPointRegion); if (!string.IsNullOrWhiteSpace(awsSourceAccessKey) && !string.IsNullOrWhiteSpace(awsSourceSecretKey)) { // If Keys are provided then use these, otherwise we'll use IAM access keys - amazonS3SourceCache = new AmazonS3Client(awsSourceAccessKey, awsSourceSecretKey, awsSourceRegionEndpoint); + this.amazonS3SourceCache = new AmazonS3Client(awsSourceAccessKey, awsSourceSecretKey, awsSourceRegionEndpoint); } else { - amazonS3SourceCache = new AmazonS3Client(awsSourceRegionEndpoint); + this.amazonS3SourceCache = new AmazonS3Client(awsSourceRegionEndpoint); } } } @@ -181,9 +178,8 @@ public AmazonS3Cache(string requestPath, string fullPath, string querystring) // This setting was added to facilitate streaming of the blob resource directly instead of a redirect. This is beneficial for CDN purposes // but caution should be taken if not used with a CDN as it will add quite a bit of overhead to the site. - this.streamCachedImage = this.Settings.ContainsKey("StreamCachedImage") && this.Settings["StreamCachedImage"].ToLower() == "true"; - - + this.streamCachedImage = this.Settings.ContainsKey("StreamCachedImage") + && string.Equals(this.Settings["StreamCachedImage"], "true", StringComparison.OrdinalIgnoreCase); } /// @@ -205,7 +201,7 @@ public override async Task IsNewOrUpdatedAsync() // TODO: Before this check is performed it should be throttled. For example, only perform this check // if the last time it was checked is greater than 5 seconds. This would be much better for perf // if there is a high throughput of image requests. - string cachedFileName = await this.CreateCachedFileNameAsync(); + string cachedFileName = await this.CreateCachedFileNameAsync().ConfigureAwait(false); // Collision rate of about 1 in 10000 for the folder structure. // That gives us massive scope to store millions of files. @@ -220,7 +216,7 @@ public override async Task IsNewOrUpdatedAsync() if (new Uri(this.CachedPath).IsFile) { - FileInfo fileInfo = new FileInfo(this.CachedPath); + var fileInfo = new FileInfo(this.CachedPath); if (fileInfo.Exists) { @@ -246,13 +242,13 @@ public override async Task IsNewOrUpdatedAsync() string filename = Path.GetFileName(this.CachedPath); string key = this.GetKey(path, filename); - GetObjectMetadataRequest objectMetaDataRequest = new GetObjectMetadataRequest + var objectMetaDataRequest = new GetObjectMetadataRequest { BucketName = this.awsBucketName, Key = key, }; - GetObjectMetadataResponse response = await this.amazonS3ClientCache.GetObjectMetadataAsync(objectMetaDataRequest); + GetObjectMetadataResponse response = await this.amazonS3ClientCache.GetObjectMetadataAsync(objectMetaDataRequest).ConfigureAwait(false); if (response != null) { @@ -266,7 +262,7 @@ public override async Task IsNewOrUpdatedAsync() CacheIndexer.Add(cachedImage, this.ImageCacheMaxMinutes); } } - catch (AmazonS3Exception ex) + catch (AmazonS3Exception) { // Nothing in S3 so we should return true. isUpdated = true; @@ -282,7 +278,7 @@ public override async Task IsNewOrUpdatedAsync() { // Check to see if the cached image is set to expire // or a new file with the same name has replaced our current image - if (this.IsExpired(cachedImage.CreationTimeUtc) || await this.IsUpdatedAsync(cachedImage.CreationTimeUtc)) + if (this.IsExpired(cachedImage.CreationTimeUtc) || await this.IsUpdatedAsync(cachedImage.CreationTimeUtc).ConfigureAwait(false)) { CacheIndexer.Remove(this.CachedPath); isUpdated = true; @@ -306,13 +302,13 @@ public override async Task IsNewOrUpdatedAsync() /// public override async Task AddImageToCacheAsync(Stream stream, string contentType) { - TransferUtility transferUtility = new TransferUtility(this.amazonS3ClientCache); + var transferUtility = new TransferUtility(this.amazonS3ClientCache); string path = this.GetFolderStructureForAmazon(this.CachedPath); string filename = Path.GetFileName(this.CachedPath); string key = this.GetKey(path, filename); - TransferUtilityUploadRequest transferUtilityUploadRequest = new TransferUtilityUploadRequest + var transferUtilityUploadRequest = new TransferUtilityUploadRequest { BucketName = this.awsBucketName, InputStream = stream, @@ -327,7 +323,7 @@ public override async Task AddImageToCacheAsync(Stream stream, string contentTyp transferUtilityUploadRequest.Metadata.Add("x-amz-meta-ImageProcessedBy", "ImageProcessor.Web/" + AssemblyVersion); - await transferUtility.UploadAsync(transferUtilityUploadRequest); + await transferUtility.UploadAsync(transferUtilityUploadRequest).ConfigureAwait(false); } /// @@ -342,18 +338,18 @@ public override async Task TrimCacheAsync() string directory = path.Substring(0, path.LastIndexOf('/')); string parent = directory.Substring(0, directory.LastIndexOf('/') + 1); - ListObjectsRequest request = new ListObjectsRequest + var request = new ListObjectsRequest { BucketName = this.awsBucketName, Prefix = parent, - Delimiter = @"/" + Delimiter = "/" }; - List results = new List(); + var results = new List(); do { - ListObjectsResponse response = await this.amazonS3ClientCache.ListObjectsAsync(request); + ListObjectsResponse response = await this.amazonS3ClientCache.ListObjectsAsync(request).ConfigureAwait(false); results.AddRange(response.S3Objects); @@ -382,73 +378,10 @@ await this.amazonS3ClientCache.DeleteObjectAsync(new DeleteObjectRequest { BucketName = this.awsBucketName, Key = file.Key - }); + }).ConfigureAwait(false); } } - /// - /// Gets a string identifying the cached file name. - /// - /// - /// The asynchronous returning the value. - /// - //public override async Task CreateCachedFileNameAsync() - //{ - // string streamHash = string.Empty; - - // try - // { - // if (new Uri(this.RequestPath).IsFile) - // { - // // Get the hash for the filestream. That way we can ensure that if the image is - // // updated but has the same name we will know. - // FileInfo imageFileInfo = new FileInfo(this.RequestPath); - // if (imageFileInfo.Exists) - // { - // // Pull the latest info. - // imageFileInfo.Refresh(); - - // // Checking the stream itself is far too processor intensive so we make a best guess. - // string creation = imageFileInfo.CreationTimeUtc.ToString(CultureInfo.InvariantCulture); - // string length = imageFileInfo.Length.ToString(CultureInfo.InvariantCulture); - // streamHash = string.Format("{0}{1}", creation, length); - // } - // } - // else - // { - // // Try and get the headers for the file, this should allow cache busting for remote files. - // HttpWebRequest request = (HttpWebRequest)WebRequest.Create(this.RequestPath); - // request.Method = "HEAD"; - - // using (HttpWebResponse response = (HttpWebResponse)(await request.GetResponseAsync())) - // { - // string lastModified = response.LastModified.ToUniversalTime().ToString(CultureInfo.InvariantCulture); - // string length = response.ContentLength.ToString(CultureInfo.InvariantCulture); - // streamHash = string.Format("{0}{1}", lastModified, length); - // } - // } - - // // TODO: Pull from other cloud folder/bucket to match the AzureBlobCache behaviour. - // } - // catch (Exception ex) - // { - // streamHash = string.Empty; - // } - - // // Use an sha1 hash of the full path including the querystring to create the image name. - // // That name can also be used as a key for the cached image and we should be able to use - // // The characters of that hash as sub-folders. - // string parsedExtension = ImageHelpers.Instance.GetExtension(this.FullPath, this.Querystring); - // string encryptedName = (streamHash + this.FullPath).ToSHA1Fingerprint(); - - // string cachedFileName = string.Format( - // "{0}.{1}", - // encryptedName, - // !string.IsNullOrWhiteSpace(parsedExtension) ? parsedExtension.Replace(".", string.Empty) : "jpg"); - - // return cachedFileName; - //} - /// /// Rewrites the path to point to the cached image. /// @@ -457,7 +390,7 @@ await this.amazonS3ClientCache.DeleteObjectAsync(new DeleteObjectRequest /// public override void RewritePath(HttpContext context) { - HttpWebRequest request = (HttpWebRequest)WebRequest.Create(this.cachedRewritePath); + var request = (HttpWebRequest)WebRequest.Create(this.cachedRewritePath); if (this.streamCachedImage) { @@ -614,31 +547,6 @@ protected string GetFolderStructureForAmazon(string path) return output; } - /// - /// Tries to execute a delegate action five times. - /// - /// The delegate to be executed - /// The delegate to throw on error. - private static void TryFiveTimes(Action delegateAction, Action exceptionAction) - { - for (int retry = 0; retry < 5; retry++) - { - try - { - delegateAction(); - break; - } - catch (Exception) - { - if (retry == 4) - { - exceptionAction(); - throw; - } - } - } - } - /// /// Helper to construct object key from path /// @@ -659,15 +567,20 @@ private string GetKey(string path, string fileName) /// /// Helper to get AWS Region Endpoint from configuration file /// + /// /// Region Endpoint private RegionEndpoint GetRegionEndpoint(string endpoint) { string lclEndpoint = endpoint.ToLower(); - if (!String.IsNullOrEmpty(lclEndpoint)) - return RegionEndpoint.GetBySystemName(lclEndpoint); + if (!string.IsNullOrEmpty(lclEndpoint)) + { + return RegionEndpoint.GetBySystemName(lclEndpoint); + } else + { return RegionEndpoint.EUWest1; + } } /// @@ -681,7 +594,7 @@ protected virtual async Task IsUpdatedAsync(DateTime creationDate) try { - if ((Uri.IsWellFormedUriString(this.RequestPath,UriKind.Absolute)) && (new Uri(this.RequestPath).IsFile)) + if ((Uri.IsWellFormedUriString(this.RequestPath, UriKind.Absolute)) && (new Uri(this.RequestPath).IsFile)) { if (File.Exists(this.RequestPath)) { @@ -689,19 +602,19 @@ protected virtual async Task IsUpdatedAsync(DateTime creationDate) isUpdated = File.GetLastWriteTimeUtc(this.RequestPath) > creationDate; } } - else if(amazonS3SourceCache != null) + else if (this.amazonS3SourceCache != null) { string container = RemoteRegex.Replace(this.cloudSourceUri, string.Empty); string s3Path = RemoteRegex.Replace(this.RequestPath, string.Empty); string key = s3Path.Replace(container, string.Empty).TrimStart('/'); - GetObjectMetadataRequest objectMetaDataRequest = new GetObjectMetadataRequest + var objectMetaDataRequest = new GetObjectMetadataRequest { BucketName = this.amazonS3SourceBucketName, Key = key, }; - GetObjectMetadataResponse response = await this.amazonS3ClientCache.GetObjectMetadataAsync(objectMetaDataRequest); + GetObjectMetadataResponse response = await this.amazonS3ClientCache.GetObjectMetadataAsync(objectMetaDataRequest).ConfigureAwait(false); if (response != null) { @@ -711,10 +624,10 @@ protected virtual async Task IsUpdatedAsync(DateTime creationDate) else { // Try and get the headers for the file, this should allow cache busting for remote files. - HttpWebRequest request = (HttpWebRequest)WebRequest.Create(this.RequestPath); + var request = (HttpWebRequest)WebRequest.Create(this.RequestPath); request.Method = "HEAD"; - using (HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync()) + using (var response = (HttpWebResponse)await request.GetResponseAsync().ConfigureAwait(false)) { isUpdated = response.LastModified.ToUniversalTime() > creationDate; } @@ -737,17 +650,15 @@ protected virtual async Task IsUpdatedAsync(DateTime creationDate) /// The current request private static void TrySetIfModifiedSinceDate(HttpContext context, HttpWebRequest request) { - DateTime ifModifiedDate; - string ifModifiedFromRequest = context.Request.Headers["If-Modified-Since"]; - if (DateTime.TryParse(ifModifiedFromRequest, out ifModifiedDate)) + if (DateTime.TryParse(ifModifiedFromRequest, out DateTime ifModifiedDate)) { request.IfModifiedSince = ifModifiedDate; } else { - if (ifModifiedFromRequest.ToLower().Contains("utc")) + if (ifModifiedFromRequest.IndexOf("utc", StringComparison.OrdinalIgnoreCase) >= 0) { ifModifiedFromRequest = ifModifiedFromRequest.ToLower().Replace("utc", string.Empty); diff --git a/src/ImageProcessor.Web/HttpModules/ImageProcessingModule.cs b/src/ImageProcessor.Web/HttpModules/ImageProcessingModule.cs index eac002306..bb32b1cc0 100644 --- a/src/ImageProcessor.Web/HttpModules/ImageProcessingModule.cs +++ b/src/ImageProcessor.Web/HttpModules/ImageProcessingModule.cs @@ -135,17 +135,6 @@ public class ImageProcessingModule : IHttpModule this.Dispose(false); } - /// - /// The process querystring event handler. DO NOT USE! - /// - /// The sender. - /// The . - /// - /// Returns the processed querystring. - [Obsolete("Use ValidatingRequest instead")] - [EditorBrowsable(EditorBrowsableState.Never)] - public delegate string ProcessQuerystringEventHandler(object sender, ProcessQueryStringEventArgs e); - /// /// Event to use to validate the request or manipulate the request parameters /// From 58cbc3a7deceb200fa639ba217104b5592630864 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Fri, 31 Aug 2018 13:15:38 +0100 Subject: [PATCH 091/113] Fix build script --- build/build.ps1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/build.ps1 b/build/build.ps1 index 3eb934ea2..92baa608f 100644 --- a/build/build.ps1 +++ b/build/build.ps1 @@ -81,7 +81,7 @@ $projects = @( $imageprocessorWeb, $imageprocessorWebConfig, $imageProcessorWebPluginsAzureBlobCache, - $imageProcessorWebPluginsAmazonS3Cache + $imageProcessorWebPluginsAmazonS3Cache, $imageProcessorWebPluginsPostProcessor ); From d65e947d6943844ee72ce3c8956c2dcb067d69ce Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Mon, 24 Sep 2018 17:07:34 +0100 Subject: [PATCH 092/113] Allow private blob storage to be served and cached. --- .../AzureBlobCache.cs | 253 ++++++++++-------- .../AzureImageService.cs | 127 +++++++++ ...rocessor.Web.Plugins.AzureBlobCache.csproj | 4 + .../app.config | 20 +- .../packages.config | 1 + tests/ImageProcessor.TestWebsite/Web.config | 6 +- 6 files changed, 280 insertions(+), 131 deletions(-) create mode 100644 src/ImageProcessor.Web.Plugins.AzureBlobCache/AzureImageService.cs diff --git a/src/ImageProcessor.Web.Plugins.AzureBlobCache/AzureBlobCache.cs b/src/ImageProcessor.Web.Plugins.AzureBlobCache/AzureBlobCache.cs index 79f03ba8c..14e2a9234 100644 --- a/src/ImageProcessor.Web.Plugins.AzureBlobCache/AzureBlobCache.cs +++ b/src/ImageProcessor.Web.Plugins.AzureBlobCache/AzureBlobCache.cs @@ -33,6 +33,8 @@ namespace ImageProcessor.Web.Plugins.AzureBlobCache /// public class AzureBlobCache : ImageCacheBase { + private static readonly object SyncLock = new object(); + /// /// The regular expression for parsing a remote uri. /// @@ -62,17 +64,22 @@ public class AzureBlobCache : ImageCacheBase /// /// The cached root url for a content delivery network. /// - private readonly string cachedCdnRoot; + private static string cachedCdnRoot; /// /// Determines if the CDN request is redirected or rewritten /// - private readonly bool streamCachedImage; + private static bool streamCachedImage; /// /// The timeout length for requesting the CDN url. /// - private readonly int timeout = 1000; + private static int timeout = 1000; + + /// + /// Whether to use the cached container name in the Url. + /// + private static bool useCachedContainerInUrl; /// /// The cached rewrite path. @@ -94,23 +101,27 @@ public class AzureBlobCache : ImageCacheBase public AzureBlobCache(string requestPath, string fullPath, string querystring) : base(requestPath, fullPath, querystring) { - if (cloudCachedBlobClient == null) + if (!(cloudCachedBlobContainer is null)) + { + return; + } + + lock (SyncLock) { // Retrieve storage accounts from connection string. var cloudCachedStorageAccount = CloudStorageAccount.Parse(this.Settings["CachedStorageAccount"]); // Create the blob clients. cloudCachedBlobClient = cloudCachedStorageAccount.CreateCloudBlobClient(); - } - if (cloudCachedBlobContainer == null) - { - // Retrieve references to a container. - cloudCachedBlobContainer = CreateContainer(cloudCachedBlobClient, this.Settings["CachedBlobContainer"], BlobContainerPublicAccessType.Blob); - } + // Set cloud cache container. + BlobContainerPublicAccessType accessType = this.Settings.ContainsKey("AccessType") + ? (BlobContainerPublicAccessType)Enum.Parse(typeof(BlobContainerPublicAccessType), this.Settings["AccessType"]) + : BlobContainerPublicAccessType.Blob; - if (cloudSourceBlobContainer == null) - { + cloudCachedBlobContainer = CreateContainer(cloudCachedBlobClient, this.Settings["CachedBlobContainer"], accessType); + + // Set cloud source container. string sourceAccount = this.Settings.ContainsKey("SourceStorageAccount") ? this.Settings["SourceStorageAccount"] : string.Empty; @@ -122,22 +133,27 @@ public AzureBlobCache(string requestPath, string fullPath, string querystring) CloudBlobClient cloudSourceBlobClient = cloudSourceStorageAccount.CreateCloudBlobClient(); cloudSourceBlobContainer = cloudSourceBlobClient.GetContainerReference(this.Settings["SourceBlobContainer"]); } - } - this.cachedCdnRoot = this.Settings.ContainsKey("CachedCDNRoot") - ? this.Settings["CachedCDNRoot"] - : cloudCachedBlobContainer.Uri.ToString().TrimEnd(cloudCachedBlobContainer.Name.ToCharArray()); + // This setting was added to facilitate streaming of the blob resource directly instead of a redirect. This is beneficial for CDN purposes + // but caution should be taken if not used with a CDN as it will add quite a bit of overhead to the site. + // See: https://github.com/JimBobSquarePants/ImageProcessor/issues/161 + // If it's private, we also stream the response rather than redirect. + streamCachedImage = accessType.Equals(BlobContainerPublicAccessType.Off) || (this.Settings.ContainsKey("StreamCachedImage") && string.Equals(this.Settings["StreamCachedImage"], "true", StringComparison.OrdinalIgnoreCase)); - if (this.Settings.ContainsKey("CachedCDNTimeout")) - { - int.TryParse(this.Settings["CachedCDNTimeout"], out int t); - this.timeout = t; - } + cachedCdnRoot = this.Settings.ContainsKey("CachedCDNRoot") + ? this.Settings["CachedCDNRoot"] + : cloudCachedBlobContainer.Uri.ToString().TrimEnd(cloudCachedBlobContainer.Name.ToCharArray()); + + if (this.Settings.ContainsKey("CachedCDNTimeout")) + { + int.TryParse(this.Settings["CachedCDNTimeout"], out int t); + timeout = t; + } - // This setting was added to facilitate streaming of the blob resource directly instead of a redirect. This is beneficial for CDN purposes - // but caution should be taken if not used with a CDN as it will add quite a bit of overhead to the site. - // See: https://github.com/JimBobSquarePants/ImageProcessor/issues/161 - this.streamCachedImage = this.Settings.ContainsKey("StreamCachedImage") && string.Equals(this.Settings["StreamCachedImage"], "true", StringComparison.OrdinalIgnoreCase); + // Do we insert the cache container? This seems to break some setups. + useCachedContainerInUrl = this.Settings.ContainsKey("UseCachedContainerInUrl") + && !string.Equals(this.Settings["UseCachedContainerInUrl"], "false", StringComparison.OrdinalIgnoreCase); + } } /// @@ -154,30 +170,26 @@ public override async Task IsNewOrUpdatedAsync() string cachedFileName = await this.CreateCachedFileNameAsync().ConfigureAwait(false); this.CachedPath = CachedImageHelper.GetCachedPath(cloudCachedBlobContainer.Uri.ToString(), cachedFileName, true, this.FolderDepth); - // Do we insert the cache container? This seems to break some setups. - bool useCachedContainerInUrl = this.Settings.ContainsKey("UseCachedContainerInUrl") && !string.Equals(this.Settings["UseCachedContainerInUrl"], "false", StringComparison.OrdinalIgnoreCase); - - this.cachedRewritePath = CachedImageHelper.GetCachedPath(useCachedContainerInUrl ? Path.Combine(this.cachedCdnRoot, cloudCachedBlobContainer.Name) : this.cachedCdnRoot, cachedFileName, true, this.FolderDepth); + this.cachedRewritePath = CachedImageHelper.GetCachedPath(useCachedContainerInUrl + ? Path.Combine(cachedCdnRoot, cloudCachedBlobContainer.Name) + : cachedCdnRoot, cachedFileName, true, this.FolderDepth); bool isUpdated = false; CachedImage cachedImage = CacheIndexer.Get(this.CachedPath); - if (new Uri(this.CachedPath).IsFile) + if (new Uri(this.CachedPath).IsFile && File.Exists(this.CachedPath)) { - if (File.Exists(this.CachedPath)) + cachedImage = new CachedImage { - cachedImage = new CachedImage - { - Key = Path.GetFileNameWithoutExtension(this.CachedPath), - Path = this.CachedPath, - CreationTimeUtc = File.GetCreationTimeUtc(this.CachedPath) - }; + Key = Path.GetFileNameWithoutExtension(this.CachedPath), + Path = this.CachedPath, + CreationTimeUtc = File.GetCreationTimeUtc(this.CachedPath) + }; - CacheIndexer.Add(cachedImage, this.ImageCacheMaxMinutes); - } + CacheIndexer.Add(cachedImage, this.ImageCacheMaxMinutes); } - if (cachedImage == null) + if (cachedImage is null) { string blobPath = this.CachedPath.Substring(cloudCachedBlobContainer.Uri.ToString().Length + 1); CloudBlockBlob blockBlob = cloudCachedBlobContainer.GetBlockBlobReference(blobPath); @@ -201,7 +213,7 @@ public override async Task IsNewOrUpdatedAsync() } } - if (cachedImage == null) + if (cachedImage is null) { // Nothing in the cache so we should return true. isUpdated = true; @@ -312,83 +324,77 @@ CloudBlockBlob blob in /// public override void RewritePath(HttpContext context) { - var request = (HttpWebRequest)WebRequest.Create(this.cachedRewritePath); - - if (this.streamCachedImage) + if (streamCachedImage) { - // Map headers to enable 304s to pass through - if (context.Request.Headers["If-Modified-Since"] != null) - { - TrySetIfModifiedSinceDate(context, request); - } + string blobPath = this.CachedPath.Substring(cloudCachedBlobContainer.Uri.ToString().Length + 1); + CloudBlockBlob blockBlob = cloudCachedBlobContainer.GetBlockBlobReference(blobPath); - string[] mapRequestHeaders = { "Cache-Control", "If-None-Match" }; - foreach (string h in mapRequestHeaders) + if (blockBlob.Exists()) { - if (context.Request.Headers[h] != null) + using (MemoryStream cachedStream = MemoryStreamPool.Shared.GetStream()) { - request.Headers.Add(h, context.Request.Headers[h]); - } - } + // Map headers to enable 304s to pass through + TrySetIfModifiedSinceDate(context, out AccessCondition accessCondition); + const string IfNoneMatch = "If-None-Match"; - // Write the blob storage directly to the stream - request.Method = "GET"; - request.Timeout = this.timeout; + // TODO: Cache-Control? + if (context.Request.Headers[IfNoneMatch] != null) + { + accessCondition.IfNoneMatchETag = context.Request.Headers[IfNoneMatch]; + } - HttpWebResponse response = null; - try - { - response = (HttpWebResponse)request.GetResponse(); - } - catch (WebException ex) - { - // A 304 is not an error - // It appears that some CDN's on Azure (Akamai) do not work properly when making head requests. - // They will return a response url and other headers but a 500 status code. - if (ex.Response != null && (((HttpWebResponse)ex.Response).StatusCode == HttpStatusCode.NotModified - || ex.Response.ResponseUri.AbsoluteUri.Equals(this.cachedRewritePath, StringComparison.OrdinalIgnoreCase))) - { - response = (HttpWebResponse)ex.Response; - } - else - { - response?.Dispose(); - ImageProcessorBootstrapper.Instance.Logger.Log("Unable to stream cached path: " + this.cachedRewritePath); - return; - } - } + bool is304 = false; + try + { + blockBlob.DownloadToStream(cachedStream, accessCondition); + cachedStream.Position = 0; + } + catch (StorageException ex) + { + // A 304 is not a true error, we still need to feed back. + var webException = ex.InnerException as WebException; + if (!(webException is null)) + { + if (webException.Response != null && (((HttpWebResponse)webException.Response).StatusCode == HttpStatusCode.NotModified)) + { + is304 = true; + } + else + { + ImageProcessorBootstrapper.Instance.Logger.Log("Unable to stream cached path: " + this.cachedRewritePath); + return; + } + } + } - Stream cachedStream = response.GetResponseStream(); + BlobProperties properties = blockBlob.Properties; + HttpResponse contextResponse = context.Response; - if (cachedStream != null) - { - HttpResponse contextResponse = context.Response; + if (!string.IsNullOrWhiteSpace(properties.ETag)) + { + contextResponse.Headers.Add("ETag", properties.ETag); + } - // If streaming but not using a CDN the headers will be null. - // See https://github.com/JimBobSquarePants/ImageProcessor/pull/466 - string etagHeader = response.Headers["ETag"]; - if (!string.IsNullOrWhiteSpace(etagHeader)) - { - contextResponse.Headers.Add("ETag", etagHeader); - } + if (properties.LastModified.HasValue) + { + contextResponse.Headers.Add("Last-Modified", properties.LastModified.Value.UtcDateTime.ToString("R")); + } - string lastModifiedHeader = response.Headers["Last-Modified"]; - if (!string.IsNullOrWhiteSpace(lastModifiedHeader)) - { - contextResponse.Headers.Add("Last-Modified", lastModifiedHeader); - } + cachedStream.CopyTo(contextResponse.OutputStream); // Will be empty on 304s - cachedStream.CopyTo(contextResponse.OutputStream); // Will be empty on 304s - ImageProcessingModule.SetHeaders( - context, - response.StatusCode == HttpStatusCode.NotModified ? null : response.ContentType, - null, - this.BrowserMaxDays, - response.StatusCode); - } + if (contextResponse.OutputStream.CanSeek) + { + contextResponse.OutputStream.Position = 0; + } - cachedStream?.Dispose(); - response.Dispose(); + ImageProcessingModule.SetHeaders( + context, + !is304 ? properties.ContentType : null, + null, + this.BrowserMaxDays, + !is304 ? HttpStatusCode.OK : HttpStatusCode.NotModified); + } + } } else { @@ -400,9 +406,11 @@ public override void RewritePath(HttpContext context) return; } + var request = (HttpWebRequest)WebRequest.Create(this.cachedRewritePath); + // Redirect the request to the blob URL request.Method = "HEAD"; - request.Timeout = this.timeout; + request.Timeout = timeout; HttpWebResponse response; try @@ -457,7 +465,7 @@ protected virtual async Task IsUpdatedAsync(DateTime creationDate) try { - if ((Uri.IsWellFormedUriString(this.RequestPath, UriKind.Absolute)) && (new Uri(this.RequestPath).IsFile)) + if (new Uri(this.RequestPath).IsFile) { if (File.Exists(this.RequestPath)) { @@ -483,7 +491,7 @@ protected virtual async Task IsUpdatedAsync(DateTime creationDate) } } } - else + else if (Uri.IsWellFormedUriString(this.RequestPath, UriKind.Absolute)) { // Try and get the headers for the file, this should allow cache busting for remote files. var request = (HttpWebRequest)WebRequest.Create(this.RequestPath); @@ -504,34 +512,43 @@ protected virtual async Task IsUpdatedAsync(DateTime creationDate) } /// - /// Tries to set IfModifiedSince header however this crashes when context.Request.Headers["If-Modified-Since"] exists, + /// Tries to set If-Modified-Since header however this crashes when context.Request.Headers["If-Modified-Since"] exists, /// but cannot be parsed. It cannot be parsed when it comes from Google Bot as UTC Sun, 27 Nov 2016 20:01:45 UTC /// so DateTime.TryParse. If it returns false, then log the error. /// /// The current context - /// The current request - private static void TrySetIfModifiedSinceDate(HttpContext context, HttpWebRequest request) + /// The access condition. + private static void TrySetIfModifiedSinceDate(HttpContext context, out AccessCondition accessCondition) { - string ifModifiedFromRequest = context.Request.Headers["If-Modified-Since"]; + accessCondition = new AccessCondition(); + const string IfModifiedSince = "If-Modified-Since"; + + if (context.Request.Headers[IfModifiedSince] is null) + { + return; + } + + string ifModifiedFromRequest = context.Request.Headers[IfModifiedSince]; if (DateTime.TryParse(ifModifiedFromRequest, out DateTime ifModifiedDate)) { - request.IfModifiedSince = ifModifiedDate; + accessCondition.IfModifiedSinceTime = ifModifiedDate; } else { - if (ifModifiedFromRequest.IndexOf("utc", StringComparison.OrdinalIgnoreCase) >= 0) + const string Utc = "utc"; + if (ifModifiedFromRequest.IndexOf(Utc, StringComparison.OrdinalIgnoreCase) >= 0) { - ifModifiedFromRequest = ifModifiedFromRequest.ToLower().Replace("utc", string.Empty); + ifModifiedFromRequest = ifModifiedFromRequest.ToLower().Replace(Utc, string.Empty); if (DateTime.TryParse(ifModifiedFromRequest, out ifModifiedDate)) { - request.IfModifiedSince = ifModifiedDate; + accessCondition.IfModifiedSinceTime = ifModifiedDate; } } else { - ImageProcessorBootstrapper.Instance.Logger.Log($"Unable to parse date {context.Request.Headers["If-Modified-Since"]} for {context.Request.Url}"); + ImageProcessorBootstrapper.Instance.Logger.Log($"Unable to parse date {context.Request.Headers[IfModifiedSince]} for {context.Request.Url}"); } } } diff --git a/src/ImageProcessor.Web.Plugins.AzureBlobCache/AzureImageService.cs b/src/ImageProcessor.Web.Plugins.AzureBlobCache/AzureImageService.cs new file mode 100644 index 000000000..0a61e4f71 --- /dev/null +++ b/src/ImageProcessor.Web.Plugins.AzureBlobCache/AzureImageService.cs @@ -0,0 +1,127 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Threading.Tasks; +using ImageProcessor.Web.Caching; +using ImageProcessor.Web.Helpers; +using ImageProcessor.Web.Services; +using Microsoft.WindowsAzure.Storage; +using Microsoft.WindowsAzure.Storage.Blob; + +namespace ImageProcessor.Web.Plugins.AzureBlobCache +{ + /// + /// An image service for retrieving images from Azure. + /// + public class AzureImageService : IImageService + { + private CloudBlobContainer blobContainer; + private Dictionary settings = new Dictionary(); + + /// + /// Gets or sets the prefix for the given implementation. + /// + /// This value is used as a prefix for any image requests that should use this service. + /// + /// + public string Prefix { get; set; } = string.Empty; + + /// + /// Gets a value indicating whether the image service requests files from + /// the locally based file system. + /// + public bool IsFileLocalService => false; + + /// + /// Gets or sets any additional settings required by the service. + /// + public Dictionary Settings + { + get => this.settings; + set + { + this.settings = value; + this.InitService(); + } + } + + /// + /// Gets or sets the white list of . + /// + public Uri[] WhiteList { get; set; } + + /// + /// Gets the image using the given identifier. + /// + /// The value identifying the image to fetch. + /// + /// The array containing the image data. + /// + public async Task GetImage(object id) + { + CloudBlockBlob blockBlob = this.blobContainer.GetBlockBlobReference(id.ToString()); + + if (blockBlob.Exists()) + { + using (MemoryStream memoryStream = MemoryStreamPool.Shared.GetStream()) + { + await blockBlob.DownloadToStreamAsync(memoryStream).ConfigureAwait(false); + return memoryStream.ToArray(); + } + } + + return null; + } + + /// + /// Gets a value indicating whether the current request passes sanitizing rules. + /// + /// The image path. + /// + /// True if the request is valid; otherwise, False. + /// + public bool IsValidRequest(string path) => ImageHelpers.IsValidImageExtension(path); + + /// + /// Initialise the service. + /// + private void InitService() + { + // Retrieve storage accounts from connection string. + var cloudCachedStorageAccount = CloudStorageAccount.Parse(this.Settings["StorageAccount"]); + + // Create the blob client. + CloudBlobClient blobClient = cloudCachedStorageAccount.CreateCloudBlobClient(); + + string container = this.Settings.ContainsKey("Container") + ? this.Settings["Container"] + : string.Empty; + + BlobContainerPublicAccessType accessType = this.Settings.ContainsKey("AccessType") + ? (BlobContainerPublicAccessType)Enum.Parse(typeof(BlobContainerPublicAccessType), this.Settings["AccessType"]) + : BlobContainerPublicAccessType.Blob; + + this.blobContainer = CreateContainer(blobClient, container, accessType); + } + + /// + /// Returns the cache container, creating a new one if none exists. + /// + /// where the container is stored. + /// The name of the container. + /// indicating the access permissions. + /// The + private static CloudBlobContainer CreateContainer(CloudBlobClient cloudBlobClient, string containerName, BlobContainerPublicAccessType accessType) + { + CloudBlobContainer container = cloudBlobClient.GetContainerReference(containerName); + + if (!container.Exists()) + { + container.Create(); + container.SetPermissions(new BlobContainerPermissions { PublicAccess = accessType }); + } + + return container; + } + } +} diff --git a/src/ImageProcessor.Web.Plugins.AzureBlobCache/ImageProcessor.Web.Plugins.AzureBlobCache.csproj b/src/ImageProcessor.Web.Plugins.AzureBlobCache/ImageProcessor.Web.Plugins.AzureBlobCache.csproj index bdf153fc2..8298772ef 100644 --- a/src/ImageProcessor.Web.Plugins.AzureBlobCache/ImageProcessor.Web.Plugins.AzureBlobCache.csproj +++ b/src/ImageProcessor.Web.Plugins.AzureBlobCache/ImageProcessor.Web.Plugins.AzureBlobCache.csproj @@ -47,6 +47,9 @@ False ..\..\packages\Microsoft.Data.Services.Client.5.6.2\lib\net40\Microsoft.Data.Services.Client.dll + + ..\..\packages\Microsoft.IO.RecyclableMemoryStream.1.2.2\lib\net45\Microsoft.IO.RecyclableMemoryStream.dll + ..\..\packages\Microsoft.WindowsAzure.ConfigurationManager.1.8.0.0\lib\net35-full\Microsoft.WindowsAzure.Configuration.dll @@ -73,6 +76,7 @@ + diff --git a/src/ImageProcessor.Web.Plugins.AzureBlobCache/app.config b/src/ImageProcessor.Web.Plugins.AzureBlobCache/app.config index dc083ec4c..a4a4e29b4 100644 --- a/src/ImageProcessor.Web.Plugins.AzureBlobCache/app.config +++ b/src/ImageProcessor.Web.Plugins.AzureBlobCache/app.config @@ -1,23 +1,23 @@ - + - - + + - - + + - - + + - - + + - + diff --git a/src/ImageProcessor.Web.Plugins.AzureBlobCache/packages.config b/src/ImageProcessor.Web.Plugins.AzureBlobCache/packages.config index f3e5f45a8..bec920ab4 100644 --- a/src/ImageProcessor.Web.Plugins.AzureBlobCache/packages.config +++ b/src/ImageProcessor.Web.Plugins.AzureBlobCache/packages.config @@ -3,6 +3,7 @@ + diff --git a/tests/ImageProcessor.TestWebsite/Web.config b/tests/ImageProcessor.TestWebsite/Web.config index a763231ad..c33838b9b 100644 --- a/tests/ImageProcessor.TestWebsite/Web.config +++ b/tests/ImageProcessor.TestWebsite/Web.config @@ -23,9 +23,9 @@ - - - + + + From 52d21e82e07e1748362653b977bdb592f4b1fc3c Mon Sep 17 00:00:00 2001 From: Ronald Barendse Date: Mon, 24 Sep 2018 22:59:08 +0200 Subject: [PATCH 093/113] Updated comments and fixed tests using obsolete methods --- .../PostProcessorApplicationEvents.cs | 20 +- .../ProcessEx.cs | 364 +++++++++--------- .../DirectoryInfoExtensionsUnitTests.cs | 7 +- 3 files changed, 196 insertions(+), 195 deletions(-) diff --git a/src/ImageProcessor.Web.Plugins.PostProcessor/PostProcessorApplicationEvents.cs b/src/ImageProcessor.Web.Plugins.PostProcessor/PostProcessorApplicationEvents.cs index b1d5be956..4c99be20c 100644 --- a/src/ImageProcessor.Web.Plugins.PostProcessor/PostProcessorApplicationEvents.cs +++ b/src/ImageProcessor.Web.Plugins.PostProcessor/PostProcessorApplicationEvents.cs @@ -14,13 +14,12 @@ namespace ImageProcessor.Web.Plugins.PostProcessor { - using ImageProcessor.Web.Helpers; using ImageProcessor.Web.HttpModules; /// /// Binds the PostProcessor to process any image requests within the web application. - /// Many thanks to Azure Image Optimizer + /// Many thanks to Azure Image Optimizer /// public static class PostProcessorApplicationEvents { @@ -33,9 +32,12 @@ public static void Start() } /// - /// Sets the timeout limit in ms for the post processor. This defaults to 5000ms + /// Sets the timeout limit in milliseconds for the post processor. /// - /// + /// The timeout limit in milliseconds. + /// + /// The default timeout is 5000 milliseconds. Timeouts lower or equal to 0 are ignored (to prevent waiting indefinitely for the post processor processes to exit). + /// public static void SetPostProcessingTimeout(int milliseconds) { if (milliseconds > 0) @@ -45,14 +47,10 @@ public static void SetPostProcessingTimeout(int milliseconds) } /// - /// Asynchronously post-processes cached images. + /// Post-processes cached images. /// - /// - /// The source of the event. - /// - /// - /// An EventArgs that contains the event data. - /// + /// The source of the event. + /// An EventArgs that contains the event data. private static void PostProcess(object sender, PostProcessingEventArgs e) { e.ImageStream = PostProcessor.PostProcessImageAsync(e.Context, e.ImageStream, e.ImageExtension).Result; diff --git a/src/ImageProcessor.Web.Plugins.PostProcessor/ProcessEx.cs b/src/ImageProcessor.Web.Plugins.PostProcessor/ProcessEx.cs index eb7d9cf31..dc1211828 100644 --- a/src/ImageProcessor.Web.Plugins.PostProcessor/ProcessEx.cs +++ b/src/ImageProcessor.Web.Plugins.PostProcessor/ProcessEx.cs @@ -6,185 +6,187 @@ namespace ImageProcessor.Web.Plugins.PostProcessor { - /// - /// Provides methods to run a process asynchronously. - /// - /// - /// Copyright (c) 2013 James Manning - /// - /// https://github.com/jamesmanning/RunProcessAsTask - /// - public static class ProcessEx - { - /// - /// Asynchronously runs the process. - /// - /// Name of the file. - /// The arguments. - /// The cancellation token. - /// - /// A task that represents the asynchronous process. - /// - public static Task RunAsync(string fileName, string arguments = null, CancellationToken cancellationToken = default(CancellationToken)) => RunAsync(new ProcessStartInfo(fileName, arguments), cancellationToken); - - /// - /// Asynchronously runs the process. - /// - /// The process start information. - /// The cancellation token. - /// - /// A task that represents the asynchronous process. - /// - public static async Task RunAsync(ProcessStartInfo processStartInfo, CancellationToken cancellationToken = default(CancellationToken)) - { - // Force some settings in the start info so we can capture the output - processStartInfo.UseShellExecute = false; - processStartInfo.RedirectStandardOutput = true; - processStartInfo.RedirectStandardError = true; - - var process = new Process - { - StartInfo = processStartInfo, - EnableRaisingEvents = true - }; - - var processStartTime = new TaskCompletionSource(); - - var standardOutput = new StringBuilder(); - var standardOutputResults = new TaskCompletionSource(); - process.OutputDataReceived += (sender, args) => - { - if (args.Data != null) - { - standardOutput.AppendLine(args.Data); - } - else - { - standardOutputResults.SetResult(standardOutput.ToString()); - } - }; - - var standardError = new StringBuilder(); - var standardErrorResults = new TaskCompletionSource(); - process.ErrorDataReceived += (sender, args) => - { - if (args.Data != null) - { - standardError.AppendLine(args.Data); - } - else - { - standardErrorResults.SetResult(standardError.ToString()); - } - }; - - var tcs = new TaskCompletionSource(); - - process.Exited += async (sender, args) => - { - tcs.TrySetResult(new ProcessResults(process, await processStartTime.Task.ConfigureAwait(false), await standardOutputResults.Task.ConfigureAwait(false), await standardErrorResults.Task.ConfigureAwait(false))); - }; - - using (cancellationToken.Register(() => - { - tcs.TrySetCanceled(); - - try - { - if (!process.HasExited) - { - process.Kill(); - } - } - catch (InvalidOperationException) - { } - })) - { - cancellationToken.ThrowIfCancellationRequested(); - - if (!process.Start()) - { - tcs.TrySetException(new InvalidOperationException("Failed to start process.")); - } - - processStartTime.SetResult(process.StartTime); - - process.BeginOutputReadLine(); - process.BeginErrorReadLine(); - - return await tcs.Task.ConfigureAwait(false); - } - } - } - - /// - /// Specifies the process results. - /// - /// - public sealed class ProcessResults : IDisposable - { - /// - /// Gets the process. - /// - /// - /// The process. - /// - public Process Process { get; } - - /// - /// Gets the exit code. - /// - /// - /// The exit code. - /// - public int ExitCode { get; } - - /// - /// Gets the run time. - /// - /// - /// The run time. - /// - public TimeSpan RunTime { get; } - - /// - /// Gets the standard output. - /// - /// - /// The standard output. - /// - public string StandardOutput { get; } - - /// - /// Gets the standard error output. - /// - /// - /// The standard error output. - /// - public string StandardError { get; } - - /// - /// Initializes a new instance of the class. - /// - /// The process. - /// The process start time. - /// The standard output. - /// The standard error. - public ProcessResults(Process process, DateTime processStartTime, string standardOutput, string standardError) - { - this.Process = process; - this.ExitCode = process.ExitCode; - this.RunTime = process.ExitTime - processStartTime; - this.StandardOutput = standardOutput; - this.StandardError = standardError; - } - - /// - /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. - /// - public void Dispose() - { - this.Process.Dispose(); - } - } + /// + /// Provides methods to run a process asynchronously. + /// + /// + /// Copyright (c) 2013 James Manning + /// + /// https://github.com/jamesmanning/RunProcessAsTask + /// + public static class ProcessEx + { + /// + /// Asynchronously runs the process. + /// + /// Name of the file. + /// The arguments. + /// The cancellation token. + /// + /// A task that represents the asynchronous process. + /// + public static Task RunAsync(string fileName, string arguments = null, CancellationToken cancellationToken = default(CancellationToken)) => RunAsync(new ProcessStartInfo(fileName, arguments), cancellationToken); + + /// + /// Asynchronously runs the process. + /// + /// The process start information. + /// The cancellation token. + /// + /// A task that represents the asynchronous process. + /// + public static async Task RunAsync(ProcessStartInfo processStartInfo, CancellationToken cancellationToken = default(CancellationToken)) + { + // Force some settings in the start info so we can capture the output + processStartInfo.UseShellExecute = false; + processStartInfo.RedirectStandardOutput = true; + processStartInfo.RedirectStandardError = true; + + var process = new Process + { + StartInfo = processStartInfo, + EnableRaisingEvents = true + }; + + var processStartTime = new TaskCompletionSource(); + + var standardOutput = new StringBuilder(); + var standardOutputResults = new TaskCompletionSource(); + process.OutputDataReceived += (sender, args) => + { + if (args.Data != null) + { + standardOutput.AppendLine(args.Data); + } + else + { + standardOutputResults.SetResult(standardOutput.ToString()); + } + }; + + var standardError = new StringBuilder(); + var standardErrorResults = new TaskCompletionSource(); + process.ErrorDataReceived += (sender, args) => + { + if (args.Data != null) + { + standardError.AppendLine(args.Data); + } + else + { + standardErrorResults.SetResult(standardError.ToString()); + } + }; + + var tcs = new TaskCompletionSource(); + + process.Exited += async (sender, args) => + { + tcs.TrySetResult(new ProcessResults(process, await processStartTime.Task.ConfigureAwait(false), await standardOutputResults.Task.ConfigureAwait(false), await standardErrorResults.Task.ConfigureAwait(false))); + }; + + using (cancellationToken.Register(() => + { + tcs.TrySetCanceled(); + + try + { + if (!process.HasExited) + { + process.Kill(); + } + } + catch (InvalidOperationException) + { + // The process has already exited + } + })) + { + cancellationToken.ThrowIfCancellationRequested(); + + if (!process.Start()) + { + tcs.TrySetException(new InvalidOperationException("Failed to start process.")); + } + + processStartTime.SetResult(process.StartTime); + + process.BeginOutputReadLine(); + process.BeginErrorReadLine(); + + return await tcs.Task.ConfigureAwait(false); + } + } + } + + /// + /// Specifies the process results. + /// + /// + public sealed class ProcessResults : IDisposable + { + /// + /// Gets the process. + /// + /// + /// The process. + /// + public Process Process { get; } + + /// + /// Gets the exit code. + /// + /// + /// The exit code. + /// + public int ExitCode { get; } + + /// + /// Gets the run time. + /// + /// + /// The run time. + /// + public TimeSpan RunTime { get; } + + /// + /// Gets the standard output. + /// + /// + /// The standard output. + /// + public string StandardOutput { get; } + + /// + /// Gets the standard error output. + /// + /// + /// The standard error output. + /// + public string StandardError { get; } + + /// + /// Initializes a new instance of the class. + /// + /// The process. + /// The process start time. + /// The standard output. + /// The standard error. + public ProcessResults(Process process, DateTime processStartTime, string standardOutput, string standardError) + { + this.Process = process; + this.ExitCode = process.ExitCode; + this.RunTime = process.ExitTime - processStartTime; + this.StandardOutput = standardOutput; + this.StandardError = standardError; + } + + /// + /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + /// + public void Dispose() + { + this.Process.Dispose(); + } + } } diff --git a/tests/ImageProcessor.Web.UnitTests/Extensions/DirectoryInfoExtensionsUnitTests.cs b/tests/ImageProcessor.Web.UnitTests/Extensions/DirectoryInfoExtensionsUnitTests.cs index 6683ab210..68bf13b95 100644 --- a/tests/ImageProcessor.Web.UnitTests/Extensions/DirectoryInfoExtensionsUnitTests.cs +++ b/tests/ImageProcessor.Web.UnitTests/Extensions/DirectoryInfoExtensionsUnitTests.cs @@ -7,14 +7,13 @@ namespace ImageProcessor.Web.UnitTests.Extensions { + using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Threading.Tasks; - - using Web.Extensions; - using NUnit.Framework; + using Web.Extensions; /// /// The directory info extensions unit tests. @@ -142,6 +141,7 @@ public void RemoveDirectories() /// Then should return enumerable directories asynchronously given path with subdirectories /// [Test] + [Obsolete("This test method uses an obsolete method.")] public async Task ThenShouldReturnEnumerableDirectoriesAsyncGivenPathWithSubDirectories() { // Arrange @@ -159,6 +159,7 @@ public async Task ThenShouldReturnEnumerableDirectoriesAsyncGivenPathWithSubDire /// Then return empty enumerable directories asynchronously given invalid directory /// [Test] + [Obsolete("This test method uses an obsolete method.")] public async Task ThenReturnEmptyEnumerableGivenInvalidDirectory() { // Arrange From 22bee7f1d07c728a99e2772e63680e6e9d9c46bb Mon Sep 17 00:00:00 2001 From: Ronald Barendse Date: Tue, 25 Sep 2018 20:45:00 +0200 Subject: [PATCH 094/113] Made ProcessEx internal and fixed dispose pattern --- .../ProcessEx.cs | 379 +++++++++--------- 1 file changed, 196 insertions(+), 183 deletions(-) diff --git a/src/ImageProcessor.Web.Plugins.PostProcessor/ProcessEx.cs b/src/ImageProcessor.Web.Plugins.PostProcessor/ProcessEx.cs index dc1211828..36210df2d 100644 --- a/src/ImageProcessor.Web.Plugins.PostProcessor/ProcessEx.cs +++ b/src/ImageProcessor.Web.Plugins.PostProcessor/ProcessEx.cs @@ -6,187 +6,200 @@ namespace ImageProcessor.Web.Plugins.PostProcessor { - /// - /// Provides methods to run a process asynchronously. - /// - /// - /// Copyright (c) 2013 James Manning - /// - /// https://github.com/jamesmanning/RunProcessAsTask - /// - public static class ProcessEx - { - /// - /// Asynchronously runs the process. - /// - /// Name of the file. - /// The arguments. - /// The cancellation token. - /// - /// A task that represents the asynchronous process. - /// - public static Task RunAsync(string fileName, string arguments = null, CancellationToken cancellationToken = default(CancellationToken)) => RunAsync(new ProcessStartInfo(fileName, arguments), cancellationToken); - - /// - /// Asynchronously runs the process. - /// - /// The process start information. - /// The cancellation token. - /// - /// A task that represents the asynchronous process. - /// - public static async Task RunAsync(ProcessStartInfo processStartInfo, CancellationToken cancellationToken = default(CancellationToken)) - { - // Force some settings in the start info so we can capture the output - processStartInfo.UseShellExecute = false; - processStartInfo.RedirectStandardOutput = true; - processStartInfo.RedirectStandardError = true; - - var process = new Process - { - StartInfo = processStartInfo, - EnableRaisingEvents = true - }; - - var processStartTime = new TaskCompletionSource(); - - var standardOutput = new StringBuilder(); - var standardOutputResults = new TaskCompletionSource(); - process.OutputDataReceived += (sender, args) => - { - if (args.Data != null) - { - standardOutput.AppendLine(args.Data); - } - else - { - standardOutputResults.SetResult(standardOutput.ToString()); - } - }; - - var standardError = new StringBuilder(); - var standardErrorResults = new TaskCompletionSource(); - process.ErrorDataReceived += (sender, args) => - { - if (args.Data != null) - { - standardError.AppendLine(args.Data); - } - else - { - standardErrorResults.SetResult(standardError.ToString()); - } - }; - - var tcs = new TaskCompletionSource(); - - process.Exited += async (sender, args) => - { - tcs.TrySetResult(new ProcessResults(process, await processStartTime.Task.ConfigureAwait(false), await standardOutputResults.Task.ConfigureAwait(false), await standardErrorResults.Task.ConfigureAwait(false))); - }; - - using (cancellationToken.Register(() => - { - tcs.TrySetCanceled(); - - try - { - if (!process.HasExited) - { - process.Kill(); - } - } - catch (InvalidOperationException) - { - // The process has already exited - } - })) - { - cancellationToken.ThrowIfCancellationRequested(); - - if (!process.Start()) - { - tcs.TrySetException(new InvalidOperationException("Failed to start process.")); - } - - processStartTime.SetResult(process.StartTime); - - process.BeginOutputReadLine(); - process.BeginErrorReadLine(); - - return await tcs.Task.ConfigureAwait(false); - } - } - } - - /// - /// Specifies the process results. - /// - /// - public sealed class ProcessResults : IDisposable - { - /// - /// Gets the process. - /// - /// - /// The process. - /// - public Process Process { get; } - - /// - /// Gets the exit code. - /// - /// - /// The exit code. - /// - public int ExitCode { get; } - - /// - /// Gets the run time. - /// - /// - /// The run time. - /// - public TimeSpan RunTime { get; } - - /// - /// Gets the standard output. - /// - /// - /// The standard output. - /// - public string StandardOutput { get; } - - /// - /// Gets the standard error output. - /// - /// - /// The standard error output. - /// - public string StandardError { get; } - - /// - /// Initializes a new instance of the class. - /// - /// The process. - /// The process start time. - /// The standard output. - /// The standard error. - public ProcessResults(Process process, DateTime processStartTime, string standardOutput, string standardError) - { - this.Process = process; - this.ExitCode = process.ExitCode; - this.RunTime = process.ExitTime - processStartTime; - this.StandardOutput = standardOutput; - this.StandardError = standardError; - } - - /// - /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. - /// - public void Dispose() - { - this.Process.Dispose(); - } - } + /// + /// Provides methods to run a process asynchronously. + /// + /// + /// Copyright (c) 2013 James Manning + /// + /// https://github.com/jamesmanning/RunProcessAsTask + /// + internal static class ProcessEx + { + /// + /// Asynchronously runs the process. + /// + /// Name of the file. + /// The arguments. + /// The cancellation token. + /// + /// A task that represents the asynchronous process. + /// + public static Task RunAsync(string fileName, string arguments = null, CancellationToken cancellationToken = default(CancellationToken)) => RunAsync(new ProcessStartInfo(fileName, arguments), cancellationToken); + + /// + /// Asynchronously runs the process. + /// + /// The process start information. + /// The cancellation token. + /// + /// A task that represents the asynchronous process. + /// + public static async Task RunAsync(ProcessStartInfo processStartInfo, CancellationToken cancellationToken = default(CancellationToken)) + { + // Force some settings in the start info so we can capture the output + processStartInfo.UseShellExecute = false; + processStartInfo.RedirectStandardOutput = true; + processStartInfo.RedirectStandardError = true; + + var process = new Process + { + StartInfo = processStartInfo, + EnableRaisingEvents = true + }; + + var processStartTime = new TaskCompletionSource(); + + var standardOutput = new StringBuilder(); + var standardOutputResults = new TaskCompletionSource(); + process.OutputDataReceived += (sender, args) => + { + if (args.Data != null) + { + standardOutput.AppendLine(args.Data); + } + else + { + standardOutputResults.SetResult(standardOutput.ToString()); + } + }; + + var standardError = new StringBuilder(); + var standardErrorResults = new TaskCompletionSource(); + process.ErrorDataReceived += (sender, args) => + { + if (args.Data != null) + { + standardError.AppendLine(args.Data); + } + else + { + standardErrorResults.SetResult(standardError.ToString()); + } + }; + + var tcs = new TaskCompletionSource(); + + process.Exited += async (sender, args) => + { + tcs.TrySetResult(new ProcessResults(process, await processStartTime.Task.ConfigureAwait(false), await standardOutputResults.Task.ConfigureAwait(false), await standardErrorResults.Task.ConfigureAwait(false))); + }; + + using (cancellationToken.Register(() => + { + tcs.TrySetCanceled(); + + try + { + if (!process.HasExited) + { + process.Kill(); + } + } + catch (InvalidOperationException) + { + // The process has already exited + } + })) + { + cancellationToken.ThrowIfCancellationRequested(); + + if (!process.Start()) + { + tcs.TrySetException(new InvalidOperationException("Failed to start process.")); + } + + processStartTime.SetResult(process.StartTime); + + process.BeginOutputReadLine(); + process.BeginErrorReadLine(); + + return await tcs.Task.ConfigureAwait(false); + } + } + } + + /// + /// Specifies the process results. + /// + /// + internal sealed class ProcessResults : IDisposable + { + /// + /// Gets the process. + /// + /// + /// The process. + /// + public Process Process { get; } + + /// + /// Gets the exit code. + /// + /// + /// The exit code. + /// + public int ExitCode { get; } + + /// + /// Gets the run time. + /// + /// + /// The run time. + /// + public TimeSpan RunTime { get; } + + /// + /// Gets the standard output. + /// + /// + /// The standard output. + /// + public string StandardOutput { get; } + + /// + /// Gets the standard error output. + /// + /// + /// The standard error output. + /// + public string StandardError { get; } + + /// + /// Initializes a new instance of the class. + /// + /// The process. + /// The process start time. + /// The standard output. + /// The standard error. + public ProcessResults(Process process, DateTime processStartTime, string standardOutput, string standardError) + { + this.Process = process; + this.ExitCode = process.ExitCode; + this.RunTime = process.ExitTime - processStartTime; + this.StandardOutput = standardOutput; + this.StandardError = standardError; + } + + /// + /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + /// + public void Dispose() + { + this.Dispose(true); + GC.SuppressFinalize(this); + } + + /// + /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + /// + /// true to release both managed and unmanaged resources; false to release only unmanaged resources. + public void Dispose(bool disposing) + { + if (disposing) + { + this.Process?.Dispose(); + } + } + } } From 580294c5c54fcb4f165a22d960ef76f4beb41445 Mon Sep 17 00:00:00 2001 From: Ronald Barendse Date: Tue, 25 Sep 2018 20:45:31 +0200 Subject: [PATCH 095/113] Small code and documentation cleanup --- .../PostProcessingResultEventArgs.cs | 138 ++++---- .../PostProcessor.cs | 326 +++++++++--------- .../PostProcessorApplicationEvents.cs | 80 ++--- .../PostProcessorBootstrapper.cs | 284 +++++++-------- 4 files changed, 425 insertions(+), 403 deletions(-) diff --git a/src/ImageProcessor.Web.Plugins.PostProcessor/PostProcessingResultEventArgs.cs b/src/ImageProcessor.Web.Plugins.PostProcessor/PostProcessingResultEventArgs.cs index 78fd4a307..a9e951150 100644 --- a/src/ImageProcessor.Web.Plugins.PostProcessor/PostProcessingResultEventArgs.cs +++ b/src/ImageProcessor.Web.Plugins.PostProcessor/PostProcessingResultEventArgs.cs @@ -11,72 +11,90 @@ namespace ImageProcessor.Web.Plugins.PostProcessor { - using System; - using System.IO; - using System.Text; + using System; + using System.IO; + using System.Text; - /// - /// The post processing result event arguments. - /// Many thanks to Azure Image Optimizer - /// - public class PostProcessingResultEventArgs : EventArgs - { - /// - /// Initializes a new instance of the class. - /// - /// The original file name. - /// The original file length in bytes. - public PostProcessingResultEventArgs(string resultFileName, long length) - { - FileInfo result = new FileInfo(resultFileName); - this.OriginalFileSize = length; - if (result.Exists) - { - this.ResultFileName = result.FullName; - this.ResultFileSize = result.Length; - } - } + /// + /// The post processing result event arguments. + /// + /// + /// + /// Many thanks to Azure Image Optimizer . + /// + public class PostProcessingResultEventArgs : EventArgs + { + /// + /// Initializes a new instance of the class. + /// + /// The original file name. + /// The original file length in bytes. + public PostProcessingResultEventArgs(string resultFileName, long length) + { + var result = new FileInfo(resultFileName); + this.OriginalFileSize = length; + if (result.Exists) + { + this.ResultFileName = result.FullName; + this.ResultFileSize = result.Length; + } + } - /// - /// Gets or sets the original file size in bytes. - /// - public long OriginalFileSize { get; set; } + /// + /// Gets or sets the original file size in bytes. + /// + /// + /// The size of the original file. + /// + public long OriginalFileSize { get; set; } - /// - /// Gets or sets the result file size in bytes. - /// - public long ResultFileSize { get; set; } + /// + /// Gets or sets the result file size in bytes. + /// + /// + /// The size of the result file. + /// + public long ResultFileSize { get; set; } - /// - /// Gets or sets the result file name. - /// - public string ResultFileName { get; set; } + /// + /// Gets or sets the result file name. + /// + /// + /// The name of the result file. + /// + public string ResultFileName { get; set; } - /// - /// Gets the difference in file size in bytes. - /// - public long Saving => this.OriginalFileSize - this.ResultFileSize; + /// + /// Gets the difference in file size in bytes. + /// + /// + /// The difference in file size in bytes. + /// + public long Saving => this.OriginalFileSize - this.ResultFileSize; - /// - /// Gets the difference in file size as a percentage. - /// - public double Percent => Math.Round(100 - ((this.ResultFileSize / (double)this.OriginalFileSize) * 100), 1); + /// + /// Gets the difference in file size as a percentage. + /// + /// + /// The difference in file size as a percentage. + /// + public double Percent => Math.Round(100 - ((this.ResultFileSize / (double)this.OriginalFileSize) * 100), 1); - /// - /// Returns a string that represents the current object. - /// - /// - /// A string that represents the current object. - /// - public override string ToString() - { - StringBuilder stringBuilder = new StringBuilder(); - stringBuilder.AppendLine("Optimized " + Path.GetFileName(this.ResultFileName)); - stringBuilder.AppendLine("Before: " + this.OriginalFileSize + " bytes"); - stringBuilder.AppendLine("After: " + this.ResultFileSize + " bytes"); - stringBuilder.AppendLine("Saving: " + this.Saving + " bytes / " + this.Percent + "%"); + /// + /// Returns a string that represents the current object. + /// + /// + /// A string that represents the current object. + /// + public override string ToString() + { + var stringBuilder = new StringBuilder(); + stringBuilder.AppendLine("Optimized " + Path.GetFileName(this.ResultFileName)); + stringBuilder.AppendLine("Before: " + this.OriginalFileSize + " bytes"); + stringBuilder.AppendLine("After: " + this.ResultFileSize + " bytes"); + stringBuilder.AppendLine("Saving: " + this.Saving + " bytes / " + this.Percent + "%"); - return stringBuilder.ToString(); - } - } + return stringBuilder.ToString(); + } + } } \ No newline at end of file diff --git a/src/ImageProcessor.Web.Plugins.PostProcessor/PostProcessor.cs b/src/ImageProcessor.Web.Plugins.PostProcessor/PostProcessor.cs index 3a0e71350..f9766bb98 100644 --- a/src/ImageProcessor.Web.Plugins.PostProcessor/PostProcessor.cs +++ b/src/ImageProcessor.Web.Plugins.PostProcessor/PostProcessor.cs @@ -11,180 +11,180 @@ namespace ImageProcessor.Web.Plugins.PostProcessor { - using System; - using System.Collections.Generic; - using System.Diagnostics; - using System.IO; - using System.Linq; - using System.Threading; - using System.Threading.Tasks; - using System.Web; + using System; + using System.Collections.Generic; + using System.Diagnostics; + using System.IO; + using System.Linq; + using System.Threading; + using System.Threading.Tasks; + using System.Web; - using ImageProcessor.Configuration; + using ImageProcessor.Configuration; - /// - /// The image post processor. - /// - /// - /// Many thanks to Azure Image Optimizer . - /// - internal static class PostProcessor - { - /// - /// Post processes the image. - /// - /// The current context. - /// The source image stream. - /// The image extension. - /// - /// The . - /// - public static async Task PostProcessImageAsync(HttpContext context, MemoryStream stream, string extension) - { - if (!PostProcessorBootstrapper.Instance.IsInstalled) - { - return stream; - } + /// + /// The image post processor. + /// + /// + /// Many thanks to Azure Image Optimizer . + /// + internal static class PostProcessor + { + /// + /// Post processes the image. + /// + /// The current context. + /// The source image stream. + /// The image extension. + /// + /// The . + /// + public static async Task PostProcessImageAsync(HttpContext context, MemoryStream stream, string extension) + { + if (!PostProcessorBootstrapper.Instance.IsInstalled) + { + return stream; + } - string sourceFile = null, destinationFile = null; - int timeout = PostProcessorBootstrapper.Instance.Timout; - try - { - // Save source file length - long length = stream.Length; + string sourceFile = null, destinationFile = null; + var timeout = PostProcessorBootstrapper.Instance.Timout; + try + { + // Save source file length + var length = stream.Length; - // Create a temporary source file with the correct extension - string tempSourceFile = Path.GetTempFileName(); - sourceFile = Path.ChangeExtension(tempSourceFile, extension); - File.Move(tempSourceFile, sourceFile); + // Create a temporary source file with the correct extension + var tempSourceFile = Path.GetTempFileName(); + sourceFile = Path.ChangeExtension(tempSourceFile, extension); + File.Move(tempSourceFile, sourceFile); - // Give our destination file a unique name - destinationFile = sourceFile.Replace(extension, "-out" + extension); + // Give our destination file a unique name + destinationFile = sourceFile.Replace(extension, "-out" + extension); - // Get processes to start - var processStartInfos = GetProcessStartInfos(extension, length, sourceFile, destinationFile).ToList(); - if (processStartInfos.Count > 0) - { - // Save the input stream to our source temp file for post processing - using (FileStream fileStream = File.Create(sourceFile)) - { - await stream.CopyToAsync(fileStream).ConfigureAwait(false); - } + // Get processes to start + var processStartInfos = GetProcessStartInfos(extension, length, sourceFile, destinationFile).ToList(); + if (processStartInfos.Count > 0) + { + // Save the input stream to our source temp file for post processing + using (var fileStream = File.Create(sourceFile)) + { + await stream.CopyToAsync(fileStream).ConfigureAwait(false); + } - // Create cancellation token with timeout - using (var cancellationTokenSource = new CancellationTokenSource(timeout)) - { - foreach (var processStartInfo in processStartInfos) - { - // Use destination file as new source (if previous process created one). - if (File.Exists(destinationFile)) - { - File.Copy(destinationFile, sourceFile, true); - } + // Create cancellation token with timeout + using (var cancellationTokenSource = new CancellationTokenSource(timeout)) + { + foreach (var processStartInfo in processStartInfos) + { + // Use destination file as new source (if previous process created one). + if (File.Exists(destinationFile)) + { + File.Copy(destinationFile, sourceFile, true); + } - // Set default properties - processStartInfo.FileName = Path.Combine(PostProcessorBootstrapper.Instance.WorkingPath, processStartInfo.FileName); - processStartInfo.CreateNoWindow = true; - processStartInfo.WindowStyle = ProcessWindowStyle.Hidden; + // Set default properties + processStartInfo.FileName = Path.Combine(PostProcessorBootstrapper.Instance.WorkingPath, processStartInfo.FileName); + processStartInfo.CreateNoWindow = true; + processStartInfo.WindowStyle = ProcessWindowStyle.Hidden; - // Run process - using (var processResults = await ProcessEx.RunAsync(processStartInfo, cancellationTokenSource.Token).ConfigureAwait(false)) - { - if (processResults.ExitCode == 1) - { - ImageProcessorBootstrapper.Instance.Logger.Log(typeof(PostProcessor), $"Unable to post process image for request {context.Request.Unvalidated.Url}, {processStartInfo.FileName} {processStartInfo.Arguments} exited with error code 1. Original image returned."); - break; - } - } - } - } + // Run process + using (var processResults = await ProcessEx.RunAsync(processStartInfo, cancellationTokenSource.Token).ConfigureAwait(false)) + { + if (processResults.ExitCode == 1) + { + ImageProcessorBootstrapper.Instance.Logger.Log(typeof(PostProcessor), $"Unable to post process image for request {context.Request.Unvalidated.Url}, {processStartInfo.FileName} {processStartInfo.Arguments} exited with error code 1. Original image returned."); + break; + } + } + } + } - // Save result - var result = new PostProcessingResultEventArgs(destinationFile, length); - if (result.ResultFileSize > 0 && result.Saving > 0) - { - using (FileStream fileStream = File.OpenRead(destinationFile)) - { - stream.SetLength(0); - await fileStream.CopyToAsync(stream).ConfigureAwait(false); - } - } - } - } - catch (OperationCanceledException) - { - ImageProcessorBootstrapper.Instance.Logger.Log(typeof(PostProcessor), $"Unable to post process image for request {context.Request.Unvalidated.Url} within {timeout}ms. Original image returned."); - } - catch (Exception ex) - { - // Some security policies don't allow execution of programs in this way - ImageProcessorBootstrapper.Instance.Logger.Log(typeof(PostProcessor), ex.Message); - } - finally - { - // Always cleanup files - try - { - // Ensure files exist, are not read only, and delete - if (sourceFile != null && File.Exists(sourceFile)) - { - File.SetAttributes(sourceFile, FileAttributes.Normal); - File.Delete(sourceFile); - } + // Save result + var result = new PostProcessingResultEventArgs(destinationFile, length); + if (result.ResultFileSize > 0 && result.Saving > 0) + { + using (var fileStream = File.OpenRead(destinationFile)) + { + stream.SetLength(0); + await fileStream.CopyToAsync(stream).ConfigureAwait(false); + } + } + } + } + catch (OperationCanceledException) + { + ImageProcessorBootstrapper.Instance.Logger.Log(typeof(PostProcessor), $"Unable to post process image for request {context.Request.Unvalidated.Url} within {timeout}ms. Original image returned."); + } + catch (Exception ex) + { + // Some security policies don't allow execution of programs in this way + ImageProcessorBootstrapper.Instance.Logger.Log(typeof(PostProcessor), ex.Message); + } + finally + { + // Always cleanup files + try + { + // Ensure files exist, are not read only, and delete + if (sourceFile != null && File.Exists(sourceFile)) + { + File.SetAttributes(sourceFile, FileAttributes.Normal); + File.Delete(sourceFile); + } - if (destinationFile != null && File.Exists(destinationFile)) - { - File.SetAttributes(destinationFile, FileAttributes.Normal); - File.Delete(destinationFile); - } - } - catch - { - // Normally a no no, but logging would be excessive + temp files get cleaned up eventually. - } - } + if (destinationFile != null && File.Exists(destinationFile)) + { + File.SetAttributes(destinationFile, FileAttributes.Normal); + File.Delete(destinationFile); + } + } + catch + { + // Normally a no no, but logging would be excessive + temp files get cleaned up eventually. + } + } - // ALways return stream (even if it's not optimized) - stream.Position = 0; - return stream; - } + // ALways return stream (even if it's not optimized) + stream.Position = 0; + return stream; + } - /// - /// Gets the process start infos. - /// - /// The extension. - /// The length. - /// The source file. - /// The destination file. - /// - /// The process start infos. - /// - private static IEnumerable GetProcessStartInfos(string extension, long length, string sourceFile, string destinationFile) - { - // Make sure the commands overwrite the destination file (in case multiple are executed) - switch (extension.ToLowerInvariant()) - { - case ".png": - yield return new ProcessStartInfo("pngquant.exe", $"--quality=90-99 --output \"{destinationFile}\" \"{sourceFile}\""); - yield return new ProcessStartInfo("truepng.exe", $"-o4 -y -out \"{destinationFile}\" \"{sourceFile}\""); - break; - case ".jpg": - case ".jpeg": - if (length > 10000) - { - // If it's greater than 10Kb use progressive - // http://yuiblog.com/blog/2008/12/05/imageopt-4/ - yield return new ProcessStartInfo("cjpeg.exe", $"-quality 80,60 -smooth 5 -outfile \"{destinationFile}\" \"{sourceFile}\""); - } - else - { - yield return new ProcessStartInfo("jpegtran.exe", $"-copy all -optimize -outfile \"{destinationFile}\" \"{sourceFile}\""); - } - break; - case ".gif": - yield return new ProcessStartInfo("gifsicle.exe", $"--optimize=3 \"{sourceFile}\" --output=\"{destinationFile}\""); - break; - } - } - } + /// + /// Gets the process start infos. + /// + /// The extension. + /// The length. + /// The source file. + /// The destination file. + /// + /// The process start infos. + /// + private static IEnumerable GetProcessStartInfos(string extension, long length, string sourceFile, string destinationFile) + { + // Make sure the commands overwrite the destination file (in case multiple are executed) + switch (extension.ToLowerInvariant()) + { + case ".png": + yield return new ProcessStartInfo("pngquant.exe", $"--quality=90-99 --output \"{destinationFile}\" \"{sourceFile}\""); + yield return new ProcessStartInfo("truepng.exe", $"-o4 -y -out \"{destinationFile}\" \"{sourceFile}\""); + break; + case ".jpg": + case ".jpeg": + if (length > 10000) + { + // If it's greater than 10Kb use progressive + // http://yuiblog.com/blog/2008/12/05/imageopt-4/ + yield return new ProcessStartInfo("cjpeg.exe", $"-quality 80,60 -smooth 5 -outfile \"{destinationFile}\" \"{sourceFile}\""); + } + else + { + yield return new ProcessStartInfo("jpegtran.exe", $"-copy all -optimize -outfile \"{destinationFile}\" \"{sourceFile}\""); + } + break; + case ".gif": + yield return new ProcessStartInfo("gifsicle.exe", $"--optimize=3 \"{sourceFile}\" --output=\"{destinationFile}\""); + break; + } + } + } } \ No newline at end of file diff --git a/src/ImageProcessor.Web.Plugins.PostProcessor/PostProcessorApplicationEvents.cs b/src/ImageProcessor.Web.Plugins.PostProcessor/PostProcessorApplicationEvents.cs index 4c99be20c..0c664792b 100644 --- a/src/ImageProcessor.Web.Plugins.PostProcessor/PostProcessorApplicationEvents.cs +++ b/src/ImageProcessor.Web.Plugins.PostProcessor/PostProcessorApplicationEvents.cs @@ -14,46 +14,48 @@ namespace ImageProcessor.Web.Plugins.PostProcessor { - using ImageProcessor.Web.Helpers; - using ImageProcessor.Web.HttpModules; + using ImageProcessor.Web.Helpers; + using ImageProcessor.Web.HttpModules; - /// - /// Binds the PostProcessor to process any image requests within the web application. - /// Many thanks to Azure Image Optimizer - /// - public static class PostProcessorApplicationEvents - { - /// - /// The initial startup method. - /// - public static void Start() - { - ImageProcessingModule.OnPostProcessing += PostProcess; - } + /// + /// Binds the PostProcessor to process any image requests within the web application. + /// + /// + /// Many thanks to Azure Image Optimizer . + /// + public static class PostProcessorApplicationEvents + { + /// + /// The initial startup method. + /// + public static void Start() + { + ImageProcessingModule.OnPostProcessing += PostProcess; + } - /// - /// Sets the timeout limit in milliseconds for the post processor. - /// - /// The timeout limit in milliseconds. - /// - /// The default timeout is 5000 milliseconds. Timeouts lower or equal to 0 are ignored (to prevent waiting indefinitely for the post processor processes to exit). - /// - public static void SetPostProcessingTimeout(int milliseconds) - { - if (milliseconds > 0) - { - PostProcessorBootstrapper.Instance.Timout = milliseconds; - } - } + /// + /// Sets the timeout limit in milliseconds for the post processor. + /// + /// The timeout limit in milliseconds. + /// + /// The default timeout is 5000 milliseconds. Timeouts lower or equal to 0 are ignored (to prevent waiting indefinitely for the post processor processes to exit). + /// + public static void SetPostProcessingTimeout(int milliseconds) + { + if (milliseconds > 0) + { + PostProcessorBootstrapper.Instance.Timout = milliseconds; + } + } - /// - /// Post-processes cached images. - /// - /// The source of the event. - /// An EventArgs that contains the event data. - private static void PostProcess(object sender, PostProcessingEventArgs e) - { - e.ImageStream = PostProcessor.PostProcessImageAsync(e.Context, e.ImageStream, e.ImageExtension).Result; - } - } + /// + /// Post-processes cached images. + /// + /// The source of the event. + /// An EventArgs that contains the event data. + private static void PostProcess(object sender, PostProcessingEventArgs e) + { + e.ImageStream = PostProcessor.PostProcessImageAsync(e.Context, e.ImageStream, e.ImageExtension).Result; + } + } } diff --git a/src/ImageProcessor.Web.Plugins.PostProcessor/PostProcessorBootstrapper.cs b/src/ImageProcessor.Web.Plugins.PostProcessor/PostProcessorBootstrapper.cs index 8bc3c808d..63912fbf8 100644 --- a/src/ImageProcessor.Web.Plugins.PostProcessor/PostProcessorBootstrapper.cs +++ b/src/ImageProcessor.Web.Plugins.PostProcessor/PostProcessorBootstrapper.cs @@ -11,145 +11,147 @@ namespace ImageProcessor.Web.Plugins.PostProcessor { - using System; - using System.Collections.Generic; - using System.IO; - using System.Reflection; - - using ImageProcessor.Configuration; - - /// - /// The postprocessor bootstrapper. - /// Many thanks to Azure Image Optimizer - /// - internal sealed class PostProcessorBootstrapper - { - /// - /// The assembly version. - /// - private static readonly string AssemblyVersion = Assembly.GetExecutingAssembly().GetName().Version.ToString(); - - /// - /// A new instance of the class. - /// with lazy initialization. - /// - private static readonly Lazy Lazy = - new Lazy(() => new PostProcessorBootstrapper()); - - /// - /// Prevents a default instance of the class from being created. - /// - private PostProcessorBootstrapper() - { - if (!Lazy.IsValueCreated) - { - this.RegisterExecutables(); - } - } - - /// - /// Gets the current instance of the class. - /// - public static PostProcessorBootstrapper Instance => Lazy.Value; - - /// - /// Gets the working directory path. - /// - public string WorkingPath { get; private set; } - - /// - /// Gets or a value indicating whether the post processor has been installed. - /// - public bool IsInstalled { get; private set; } - - /// - /// Gets the allowed time in milliseconds for postprocessing an image file. - /// - public int Timout { get; internal set; } = 5000; - - /// - /// Registers the embedded executables. - /// - public void RegisterExecutables() - { - // None of the tools used here are called using dllimport so we don't go through the normal registration channel. - string folder = ImageProcessorBootstrapper.Instance.NativeBinaryFactory.Is64BitEnvironment ? "x64" : "x86"; - var assembly = Assembly.GetExecutingAssembly(); - - if (assembly.Location == null) - { - ImageProcessorBootstrapper.Instance.Logger.Log( - typeof(PostProcessorBootstrapper), - "Unable to install postprocessor - No images will be post-processed. Unable to map location for assembly."); - - return; - } - - this.WorkingPath = Path.GetFullPath( - Path.Combine(new Uri(assembly.Location).LocalPath, - "..\\imageprocessor.postprocessor" + AssemblyVersion + "\\")); - - string path = Path.GetDirectoryName(this.WorkingPath); - - if (string.IsNullOrWhiteSpace(path)) - { - ImageProcessorBootstrapper.Instance.Logger.Log( - typeof(PostProcessorBootstrapper), - "Unable to install postprocessor - No images will be post-processed. Unable to map working path for processors."); - - return; - } - - // Create the folder for storing the executables. - // Delete any previous instances to make sure we copy over the new files. - try - { - if (Directory.Exists(path)) - { - Directory.Delete(path, true); - } - - Directory.CreateDirectory(path); - } - catch (Exception ex) - { - ImageProcessorBootstrapper.Instance.Logger.Log(typeof(PostProcessorBootstrapper), - $"{ex.Message}, {ex.StackTrace}. Inner: {ex.InnerException?.Message}, {ex.InnerException?.StackTrace}"); - ImageProcessorBootstrapper.Instance.Logger.Log( - typeof(PostProcessorBootstrapper), - "Unable to install postprocessor - No images will be post-processed. Unable to map working path for processors."); - - return; - } - - // Get the resources and copy them across. - var resources = new Dictionary - { - { "gifsicle.exe", "ImageProcessor.Web.Plugins.PostProcessor.Resources.Unmanaged." + folder + ".gifsicle.exe" }, - { "jpegtran.exe", "ImageProcessor.Web.Plugins.PostProcessor.Resources.Unmanaged.x86.jpegtran.exe" }, - { "cjpeg.exe", "ImageProcessor.Web.Plugins.PostProcessor.Resources.Unmanaged.x86.cjpeg.exe" }, - { "libjpeg-62.dll", "ImageProcessor.Web.Plugins.PostProcessor.Resources.Unmanaged.x86.libjpeg-62.dll" }, - { "pngquant.exe", "ImageProcessor.Web.Plugins.PostProcessor.Resources.Unmanaged.x86.pngquant.exe" }, - { "pngout.exe", "ImageProcessor.Web.Plugins.PostProcessor.Resources.Unmanaged.x86.pngout.exe" }, - { "TruePNG.exe", "ImageProcessor.Web.Plugins.PostProcessor.Resources.Unmanaged.x86.TruePNG.exe" } - }; - - // Write the files out to the bin folder. - foreach (KeyValuePair resource in resources) - { - using (Stream resourceStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resource.Value)) - { - if (resourceStream != null) - { - using (FileStream fileStream = File.OpenWrite(Path.Combine(this.WorkingPath, resource.Key))) - { - resourceStream.CopyTo(fileStream); - } - } - } - } - - this.IsInstalled = true; - } - } + using System; + using System.Collections.Generic; + using System.IO; + using System.Reflection; + + using ImageProcessor.Configuration; + + /// + /// The post processor bootstrapper. + /// + /// + /// Many thanks to Azure Image Optimizer . + /// + internal sealed class PostProcessorBootstrapper + { + /// + /// The assembly version. + /// + private static readonly string AssemblyVersion = Assembly.GetExecutingAssembly().GetName().Version.ToString(); + + /// + /// A new instance of the class. + /// with lazy initialization. + /// + private static readonly Lazy Lazy = + new Lazy(() => new PostProcessorBootstrapper()); + + /// + /// Prevents a default instance of the class from being created. + /// + private PostProcessorBootstrapper() + { + if (!Lazy.IsValueCreated) + { + this.RegisterExecutables(); + } + } + + /// + /// Gets the current instance of the class. + /// + public static PostProcessorBootstrapper Instance => Lazy.Value; + + /// + /// Gets the working directory path. + /// + public string WorkingPath { get; private set; } + + /// + /// Gets or a value indicating whether the post processor has been installed. + /// + public bool IsInstalled { get; private set; } + + /// + /// Gets the allowed time in milliseconds for postprocessing an image file. + /// + public int Timout { get; internal set; } = 5000; + + /// + /// Registers the embedded executables. + /// + public void RegisterExecutables() + { + // None of the tools used here are called using dllimport so we don't go through the normal registration channel. + var folder = ImageProcessorBootstrapper.Instance.NativeBinaryFactory.Is64BitEnvironment ? "x64" : "x86"; + var assembly = Assembly.GetExecutingAssembly(); + + if (assembly.Location == null) + { + ImageProcessorBootstrapper.Instance.Logger.Log( + typeof(PostProcessorBootstrapper), + "Unable to install postprocessor - No images will be post-processed. Unable to map location for assembly."); + + return; + } + + this.WorkingPath = Path.GetFullPath( + Path.Combine(new Uri(assembly.Location).LocalPath, + "..\\imageprocessor.postprocessor" + AssemblyVersion + "\\")); + + var path = Path.GetDirectoryName(this.WorkingPath); + + if (string.IsNullOrWhiteSpace(path)) + { + ImageProcessorBootstrapper.Instance.Logger.Log( + typeof(PostProcessorBootstrapper), + "Unable to install postprocessor - No images will be post-processed. Unable to map working path for processors."); + + return; + } + + // Create the folder for storing the executables. + // Delete any previous instances to make sure we copy over the new files. + try + { + if (Directory.Exists(path)) + { + Directory.Delete(path, true); + } + + Directory.CreateDirectory(path); + } + catch (Exception ex) + { + ImageProcessorBootstrapper.Instance.Logger.Log(typeof(PostProcessorBootstrapper), + $"{ex.Message}, {ex.StackTrace}. Inner: {ex.InnerException?.Message}, {ex.InnerException?.StackTrace}"); + ImageProcessorBootstrapper.Instance.Logger.Log( + typeof(PostProcessorBootstrapper), + "Unable to install postprocessor - No images will be post-processed. Unable to map working path for processors."); + + return; + } + + // Get the resources and copy them across. + var resources = new Dictionary + { + { "gifsicle.exe", "ImageProcessor.Web.Plugins.PostProcessor.Resources.Unmanaged." + folder + ".gifsicle.exe" }, + { "jpegtran.exe", "ImageProcessor.Web.Plugins.PostProcessor.Resources.Unmanaged.x86.jpegtran.exe" }, + { "cjpeg.exe", "ImageProcessor.Web.Plugins.PostProcessor.Resources.Unmanaged.x86.cjpeg.exe" }, + { "libjpeg-62.dll", "ImageProcessor.Web.Plugins.PostProcessor.Resources.Unmanaged.x86.libjpeg-62.dll" }, + { "pngquant.exe", "ImageProcessor.Web.Plugins.PostProcessor.Resources.Unmanaged.x86.pngquant.exe" }, + { "pngout.exe", "ImageProcessor.Web.Plugins.PostProcessor.Resources.Unmanaged.x86.pngout.exe" }, + { "TruePNG.exe", "ImageProcessor.Web.Plugins.PostProcessor.Resources.Unmanaged.x86.TruePNG.exe" } + }; + + // Write the files out to the bin folder. + foreach (var resource in resources) + { + using (var resourceStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resource.Value)) + { + if (resourceStream != null) + { + using (var fileStream = File.OpenWrite(Path.Combine(this.WorkingPath, resource.Key))) + { + resourceStream.CopyTo(fileStream); + } + } + } + } + + this.IsInstalled = true; + } + } } \ No newline at end of file From 3e396c2e41e5d2d8e8787a8cc617f94fe21618cf Mon Sep 17 00:00:00 2001 From: Ronald Barendse Date: Tue, 25 Sep 2018 23:09:25 +0200 Subject: [PATCH 096/113] Adds immutable cache extension when cache busting variables are used --- .../HttpModules/ImageProcessingModule.cs | 33 +++++++++++++++---- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/src/ImageProcessor.Web/HttpModules/ImageProcessingModule.cs b/src/ImageProcessor.Web/HttpModules/ImageProcessingModule.cs index eac002306..3e88753df 100644 --- a/src/ImageProcessor.Web/HttpModules/ImageProcessingModule.cs +++ b/src/ImageProcessor.Web/HttpModules/ImageProcessingModule.cs @@ -202,7 +202,15 @@ public static void SetHeaders(HttpContext context, string responseType, string[] cache.SetExpires(DateTime.Now.ToUniversalTime().AddDays(maxDays)); cache.SetMaxAge(new TimeSpan(maxDays, 0, 0, 0)); - cache.SetRevalidation(HttpCacheRevalidation.AllCaches); + + if (ParseCacheBuster(context.Request.QueryString)) + { + cache.AppendCacheExtension("immutable"); + } + else + { + cache.SetRevalidation(HttpCacheRevalidation.AllCaches); + } AddCorsRequestHeaders(context); } @@ -543,7 +551,7 @@ private async Task ProcessImageAsync(HttpContext context) // Are we processing or cache busting? processing = processors != null && (processors.Length > 0 || processAnimation); - bool cacheBusting = this.ParseCacheBuster(queryString); + bool cacheBusting = ParseCacheBuster(queryString); if (!processing && !cacheBusting) { // No? Someone is either attacking the server or hasn't read the instructions. @@ -702,14 +710,25 @@ private async Task ProcessImageAsync(HttpContext context) /// /// The query string to search. /// - /// The . + /// true if the query string contains cache buster variables; otherwise, false. + /// + private static bool ParseCacheBuster(string queryString) + { + return ParseCacheBuster(HttpUtility.ParseQueryString(queryString)); + } + + /// + /// Return a value indicating whether common cache buster variables are being passed through. + /// + /// The query string to search. + /// + /// true if the query string contains cache buster variables; otherwise, false. /// - private bool ParseCacheBuster(string queryString) + private static bool ParseCacheBuster(NameValueCollection queryString) { - NameValueCollection queryCollection = HttpUtility.ParseQueryString(queryString); return allowCacheBuster != null && allowCacheBuster.Value - && (queryCollection.AllKeys.Contains("v", StringComparer.InvariantCultureIgnoreCase) - || queryCollection.AllKeys.Contains("rnd", StringComparer.InvariantCultureIgnoreCase)); + && (queryString.AllKeys.Contains("v", StringComparer.InvariantCultureIgnoreCase) + || queryString.AllKeys.Contains("rnd", StringComparer.InvariantCultureIgnoreCase)); } /// From 0e579b9b43b53f94403dfad70cea059887721b31 Mon Sep 17 00:00:00 2001 From: Ronald Barendse Date: Mon, 1 Oct 2018 09:36:51 +0200 Subject: [PATCH 097/113] Add null and Length guard for crop coordinates --- src/ImageProcessor.Web/Processors/Crop.cs | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/ImageProcessor.Web/Processors/Crop.cs b/src/ImageProcessor.Web/Processors/Crop.cs index 4d0572a16..0ab041fd1 100644 --- a/src/ImageProcessor.Web/Processors/Crop.cs +++ b/src/ImageProcessor.Web/Processors/Crop.cs @@ -10,7 +10,6 @@ namespace ImageProcessor.Web.Processors { - using System.Collections.Specialized; using System.Text.RegularExpressions; using System.Web; @@ -60,17 +59,20 @@ public class Crop : IWebGraphicsProcessor public int MatchRegexIndex(string queryString) { this.SortOrder = int.MaxValue; - Match match = this.RegexPattern.Match(queryString); + var match = this.RegexPattern.Match(queryString); if (match.Success) { - this.SortOrder = match.Index; - NameValueCollection queryCollection = HttpUtility.ParseQueryString(queryString); - float[] coordinates = QueryParamParser.Instance.ParseValue(queryCollection["crop"]); + var queryCollection = HttpUtility.ParseQueryString(queryString); + var coordinates = QueryParamParser.Instance.ParseValue(queryCollection["crop"]); + if (coordinates?.Length == 4) + { + this.SortOrder = match.Index; - // Default CropMode.Pixels will be returned. - CropMode cropMode = QueryParamParser.Instance.ParseValue(queryCollection["cropmode"]); - this.Processor.DynamicParameter = (CropLayer)new CropLayer(coordinates[0], coordinates[1], coordinates[2], coordinates[3], cropMode); + // Default CropMode.Pixels will be returned. + var cropMode = QueryParamParser.Instance.ParseValue(queryCollection["cropmode"]); + this.Processor.DynamicParameter = (CropLayer)new CropLayer(coordinates[0], coordinates[1], coordinates[2], coordinates[3], cropMode); + } } return this.SortOrder; From c17facb6b21e4b15a86b757c06163588ba2b3c30 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Tue, 29 Jan 2019 00:19:59 +1100 Subject: [PATCH 098/113] Reuse AmazonS3Client --- .../AmazonS3Cache.cs | 133 ++++++++++-------- .../AzureBlobCache.cs | 5 + 2 files changed, 83 insertions(+), 55 deletions(-) diff --git a/src/ImageProcessor.Web.Plugins.AmazonS3Cache/AmazonS3Cache.cs b/src/ImageProcessor.Web.Plugins.AmazonS3Cache/AmazonS3Cache.cs index 179eae480..407af2a9f 100644 --- a/src/ImageProcessor.Web.Plugins.AmazonS3Cache/AmazonS3Cache.cs +++ b/src/ImageProcessor.Web.Plugins.AmazonS3Cache/AmazonS3Cache.cs @@ -35,6 +35,8 @@ namespace ImageProcessor.Web.Plugins.AmazonS3Cache /// public class AmazonS3Cache : ImageCacheBase { + private static readonly object SyncLock = new object(); + /// /// The regular expression for parsing a remote uri. /// @@ -48,7 +50,7 @@ public class AmazonS3Cache : ImageCacheBase /// /// The Amazon S3 client. /// - private readonly AmazonS3Client amazonS3ClientCache; + private static AmazonS3Client amazonS3ClientCache; /// /// The cached root url for a content delivery network. @@ -120,66 +122,79 @@ public class AmazonS3Cache : ImageCacheBase public AmazonS3Cache(string requestPath, string fullPath, string querystring) : base(requestPath, fullPath, querystring) { - this.awsAccessKey = this.Settings.ContainsKey("AwsAccessKey") ? this.Settings["AwsAccessKey"] : string.Empty; - this.awsSecretKey = this.Settings.ContainsKey("AwsSecretKey") ? this.Settings["AwsSecretKey"] : string.Empty; - - this.awsBucketName = this.Settings["AwsBucketName"]; - this.awsCacheKeyPrefix = this.Settings["AwsCacheKeyPrefix"]; - string endPointRegion = this.Settings.ContainsKey("RegionEndpoint") ? this.Settings["RegionEndpoint"] : string.Empty; - RegionEndpoint awsRegionEndpoint = this.GetRegionEndpoint(endPointRegion); - - if (this.AwsIsValid) + if (!(amazonS3ClientCache is null)) { - // If Keys are provided then use these, otherwise we'll use IAM access keys - this.amazonS3ClientCache = new AmazonS3Client(this.awsAccessKey, this.awsSecretKey, awsRegionEndpoint); + return; } - else if (!string.IsNullOrWhiteSpace(this.awsBucketName)) + + lock (SyncLock) { - this.amazonS3ClientCache = new AmazonS3Client(awsRegionEndpoint); - } + if (!(amazonS3ClientCache is null)) + { + return; + } - this.cachedCdnRoot = this.Settings.ContainsKey("CachedCDNRoot") ? this.Settings["CachedCDNRoot"] : string.Empty; + this.awsAccessKey = this.Settings.ContainsKey("AwsAccessKey") ? this.Settings["AwsAccessKey"] : string.Empty; + this.awsSecretKey = this.Settings.ContainsKey("AwsSecretKey") ? this.Settings["AwsSecretKey"] : string.Empty; - if (this.amazonS3SourceCache == null) - { - this.amazonS3SourceBucketName = this.Settings.ContainsKey("SourceS3Bucket") ? this.Settings["SourceS3Bucket"] : string.Empty; - this.cloudSourceUri = this.Settings.ContainsKey("CloudSourceURI") ? this.Settings["CloudSourceURI"] : string.Empty; + this.awsBucketName = this.Settings["AwsBucketName"]; + this.awsCacheKeyPrefix = this.Settings["AwsCacheKeyPrefix"]; + string endPointRegion = this.Settings.ContainsKey("RegionEndpoint") ? this.Settings["RegionEndpoint"] : string.Empty; + RegionEndpoint awsRegionEndpoint = this.GetRegionEndpoint(endPointRegion); - string sourceAccount = this.Settings.ContainsKey("SourceStorageAccount") - ? this.Settings["SourceStorageAccount"] - : string.Empty; + if (this.AwsIsValid) + { + // If Keys are provided then use these, otherwise we'll use IAM access keys + amazonS3ClientCache = new AmazonS3Client(this.awsAccessKey, this.awsSecretKey, awsRegionEndpoint); + } + else if (!string.IsNullOrWhiteSpace(this.awsBucketName)) + { + amazonS3ClientCache = new AmazonS3Client(awsRegionEndpoint); + } - // Repeat for source if it exists - if (!string.IsNullOrWhiteSpace(this.amazonS3SourceBucketName)) + this.cachedCdnRoot = this.Settings.ContainsKey("CachedCDNRoot") ? this.Settings["CachedCDNRoot"] : string.Empty; + + if (this.amazonS3SourceCache == null) { - string awsSourceAccessKey = this.Settings.ContainsKey("AwsSourceAccessKey") ? this.Settings["AwsSourceAccessKey"] : string.Empty; - string awsSourceSecretKey = this.Settings.ContainsKey("AwsSourceSecretKey") ? this.Settings["AwsSourceSecretKey"] : string.Empty; - string sourceEndPointRegion = this.Settings.ContainsKey("SourceRegionEndpoint") ? this.Settings["SourceRegionEndpoint"] : string.Empty; - RegionEndpoint awsSourceRegionEndpoint = this.GetRegionEndpoint(sourceEndPointRegion); + this.amazonS3SourceBucketName = this.Settings.ContainsKey("SourceS3Bucket") ? this.Settings["SourceS3Bucket"] : string.Empty; + this.cloudSourceUri = this.Settings.ContainsKey("CloudSourceURI") ? this.Settings["CloudSourceURI"] : string.Empty; - if (!string.IsNullOrWhiteSpace(awsSourceAccessKey) - && !string.IsNullOrWhiteSpace(awsSourceSecretKey)) - { - // If Keys are provided then use these, otherwise we'll use IAM access keys - this.amazonS3SourceCache = new AmazonS3Client(awsSourceAccessKey, awsSourceSecretKey, awsSourceRegionEndpoint); - } - else + string sourceAccount = this.Settings.ContainsKey("SourceStorageAccount") + ? this.Settings["SourceStorageAccount"] + : string.Empty; + + // Repeat for source if it exists + if (!string.IsNullOrWhiteSpace(this.amazonS3SourceBucketName)) { - this.amazonS3SourceCache = new AmazonS3Client(awsSourceRegionEndpoint); + string awsSourceAccessKey = this.Settings.ContainsKey("AwsSourceAccessKey") ? this.Settings["AwsSourceAccessKey"] : string.Empty; + string awsSourceSecretKey = this.Settings.ContainsKey("AwsSourceSecretKey") ? this.Settings["AwsSourceSecretKey"] : string.Empty; + string sourceEndPointRegion = this.Settings.ContainsKey("SourceRegionEndpoint") ? this.Settings["SourceRegionEndpoint"] : string.Empty; + RegionEndpoint awsSourceRegionEndpoint = this.GetRegionEndpoint(sourceEndPointRegion); + + if (!string.IsNullOrWhiteSpace(awsSourceAccessKey) + && !string.IsNullOrWhiteSpace(awsSourceSecretKey)) + { + // If Keys are provided then use these, otherwise we'll use IAM access keys + this.amazonS3SourceCache = new AmazonS3Client(awsSourceAccessKey, awsSourceSecretKey, awsSourceRegionEndpoint); + } + else + { + this.amazonS3SourceCache = new AmazonS3Client(awsSourceRegionEndpoint); + } } } - } - if (this.Settings.ContainsKey("CachedCDNTimeout")) - { - int.TryParse(this.Settings["CachedCDNTimeout"], out int t); - this.timeout = t; - } + if (this.Settings.ContainsKey("CachedCDNTimeout")) + { + int.TryParse(this.Settings["CachedCDNTimeout"], out int t); + this.timeout = t; + } - // This setting was added to facilitate streaming of the blob resource directly instead of a redirect. This is beneficial for CDN purposes - // but caution should be taken if not used with a CDN as it will add quite a bit of overhead to the site. - this.streamCachedImage = this.Settings.ContainsKey("StreamCachedImage") - && string.Equals(this.Settings["StreamCachedImage"], "true", StringComparison.OrdinalIgnoreCase); + // This setting was added to facilitate streaming of the blob resource directly instead of a redirect. This is beneficial for CDN purposes + // but caution should be taken if not used with a CDN as it will add quite a bit of overhead to the site. + this.streamCachedImage = this.Settings.ContainsKey("StreamCachedImage") + && string.Equals(this.Settings["StreamCachedImage"], "true", StringComparison.OrdinalIgnoreCase); + } } /// @@ -248,7 +263,7 @@ public override async Task IsNewOrUpdatedAsync() Key = key, }; - GetObjectMetadataResponse response = await this.amazonS3ClientCache.GetObjectMetadataAsync(objectMetaDataRequest).ConfigureAwait(false); + GetObjectMetadataResponse response = await amazonS3ClientCache.GetObjectMetadataAsync(objectMetaDataRequest).ConfigureAwait(false); if (response != null) { @@ -302,7 +317,7 @@ public override async Task IsNewOrUpdatedAsync() /// public override async Task AddImageToCacheAsync(Stream stream, string contentType) { - var transferUtility = new TransferUtility(this.amazonS3ClientCache); + var transferUtility = new TransferUtility(amazonS3ClientCache); string path = this.GetFolderStructureForAmazon(this.CachedPath); string filename = Path.GetFileName(this.CachedPath); @@ -349,7 +364,7 @@ public override async Task TrimCacheAsync() do { - ListObjectsResponse response = await this.amazonS3ClientCache.ListObjectsAsync(request).ConfigureAwait(false); + ListObjectsResponse response = await amazonS3ClientCache.ListObjectsAsync(request).ConfigureAwait(false); results.AddRange(response.S3Objects); @@ -374,7 +389,7 @@ public override async Task TrimCacheAsync() } CacheIndexer.Remove(file.Key); - await this.amazonS3ClientCache.DeleteObjectAsync(new DeleteObjectRequest + await amazonS3ClientCache.DeleteObjectAsync(new DeleteObjectRequest { BucketName = this.awsBucketName, Key = file.Key @@ -614,7 +629,7 @@ protected virtual async Task IsUpdatedAsync(DateTime creationDate) Key = key, }; - GetObjectMetadataResponse response = await this.amazonS3ClientCache.GetObjectMetadataAsync(objectMetaDataRequest).ConfigureAwait(false); + GetObjectMetadataResponse response = await amazonS3ClientCache.GetObjectMetadataAsync(objectMetaDataRequest).ConfigureAwait(false); if (response != null) { @@ -650,7 +665,14 @@ protected virtual async Task IsUpdatedAsync(DateTime creationDate) /// The current request private static void TrySetIfModifiedSinceDate(HttpContext context, HttpWebRequest request) { - string ifModifiedFromRequest = context.Request.Headers["If-Modified-Since"]; + const string IfModifiedSince = "If-Modified-Since"; + + if (context.Request.Headers[IfModifiedSince] is null) + { + return; + } + + string ifModifiedFromRequest = context.Request.Headers[IfModifiedSince]; if (DateTime.TryParse(ifModifiedFromRequest, out DateTime ifModifiedDate)) { @@ -658,9 +680,10 @@ private static void TrySetIfModifiedSinceDate(HttpContext context, HttpWebReques } else { - if (ifModifiedFromRequest.IndexOf("utc", StringComparison.OrdinalIgnoreCase) >= 0) + const string Utc = "utc"; + if (ifModifiedFromRequest.IndexOf(Utc, StringComparison.OrdinalIgnoreCase) >= 0) { - ifModifiedFromRequest = ifModifiedFromRequest.ToLower().Replace("utc", string.Empty); + ifModifiedFromRequest = ifModifiedFromRequest.ToLower().Replace(Utc, string.Empty); if (DateTime.TryParse(ifModifiedFromRequest, out ifModifiedDate)) { diff --git a/src/ImageProcessor.Web.Plugins.AzureBlobCache/AzureBlobCache.cs b/src/ImageProcessor.Web.Plugins.AzureBlobCache/AzureBlobCache.cs index 14e2a9234..59d414cda 100644 --- a/src/ImageProcessor.Web.Plugins.AzureBlobCache/AzureBlobCache.cs +++ b/src/ImageProcessor.Web.Plugins.AzureBlobCache/AzureBlobCache.cs @@ -108,6 +108,11 @@ public AzureBlobCache(string requestPath, string fullPath, string querystring) lock (SyncLock) { + if (!(cloudCachedBlobContainer is null)) + { + return; + } + // Retrieve storage accounts from connection string. var cloudCachedStorageAccount = CloudStorageAccount.Parse(this.Settings["CachedStorageAccount"]); From 547fdb4f10bb35f7eac049e94edce70308a096de Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Tue, 29 Jan 2019 00:27:11 +1100 Subject: [PATCH 099/113] Make other settings static --- .../AmazonS3Cache.cs | 98 +++++++++---------- 1 file changed, 49 insertions(+), 49 deletions(-) diff --git a/src/ImageProcessor.Web.Plugins.AmazonS3Cache/AmazonS3Cache.cs b/src/ImageProcessor.Web.Plugins.AmazonS3Cache/AmazonS3Cache.cs index 407af2a9f..8532c1a3c 100644 --- a/src/ImageProcessor.Web.Plugins.AmazonS3Cache/AmazonS3Cache.cs +++ b/src/ImageProcessor.Web.Plugins.AmazonS3Cache/AmazonS3Cache.cs @@ -52,60 +52,60 @@ public class AmazonS3Cache : ImageCacheBase /// private static AmazonS3Client amazonS3ClientCache; + /// + /// The cloud source S3 container. + /// + private static AmazonS3Client amazonS3SourceCache; + /// /// The cached root url for a content delivery network. /// - private readonly string cachedCdnRoot; + private static string cachedCdnRoot; /// /// The Amazon S3 Access Key. /// - private readonly string awsAccessKey; + private static string awsAccessKey; /// /// The Amazon S3 Secret Key. /// - private readonly string awsSecretKey; + private static string awsSecretKey; /// /// The Amazon S3 Bucket Name. /// - private readonly string awsBucketName; + private static string awsBucketName; /// /// The Key prefix to use for cache files /// - private readonly string awsCacheKeyPrefix; + private static string awsCacheKeyPrefix; /// /// Determines if the CDN request is redirected or rewritten /// - private readonly bool streamCachedImage; + private static bool streamCachedImage; /// /// The timeout length for requesting the CDN url. /// - private readonly int timeout = 1000; - - /// - /// The cached rewrite path. - /// - private string cachedRewritePath; + private static int timeout = 1000; /// - /// The cloud source S3 container. + /// The Amazon S3 Source URI. /// - private readonly AmazonS3Client amazonS3SourceCache; + private static string cloudSourceUri; /// - /// The Amazon S3 Source URI. + /// The Amazon S3 Source Bucket Name. /// - private readonly string cloudSourceUri; + private static string amazonS3SourceBucketName; /// - /// The Amazon S3 Source Bucket Name. + /// The cached rewrite path. /// - private readonly string amazonS3SourceBucketName; + private string cachedRewritePath; /// /// Initializes a new instance of the class. @@ -134,37 +134,37 @@ public AmazonS3Cache(string requestPath, string fullPath, string querystring) return; } - this.awsAccessKey = this.Settings.ContainsKey("AwsAccessKey") ? this.Settings["AwsAccessKey"] : string.Empty; - this.awsSecretKey = this.Settings.ContainsKey("AwsSecretKey") ? this.Settings["AwsSecretKey"] : string.Empty; + awsAccessKey = this.Settings.ContainsKey("AwsAccessKey") ? this.Settings["AwsAccessKey"] : string.Empty; + awsSecretKey = this.Settings.ContainsKey("AwsSecretKey") ? this.Settings["AwsSecretKey"] : string.Empty; - this.awsBucketName = this.Settings["AwsBucketName"]; - this.awsCacheKeyPrefix = this.Settings["AwsCacheKeyPrefix"]; + awsBucketName = this.Settings["AwsBucketName"]; + awsCacheKeyPrefix = this.Settings["AwsCacheKeyPrefix"]; string endPointRegion = this.Settings.ContainsKey("RegionEndpoint") ? this.Settings["RegionEndpoint"] : string.Empty; RegionEndpoint awsRegionEndpoint = this.GetRegionEndpoint(endPointRegion); - if (this.AwsIsValid) + if (AwsIsValid) { // If Keys are provided then use these, otherwise we'll use IAM access keys - amazonS3ClientCache = new AmazonS3Client(this.awsAccessKey, this.awsSecretKey, awsRegionEndpoint); + amazonS3ClientCache = new AmazonS3Client(awsAccessKey, awsSecretKey, awsRegionEndpoint); } - else if (!string.IsNullOrWhiteSpace(this.awsBucketName)) + else if (!string.IsNullOrWhiteSpace(awsBucketName)) { amazonS3ClientCache = new AmazonS3Client(awsRegionEndpoint); } - this.cachedCdnRoot = this.Settings.ContainsKey("CachedCDNRoot") ? this.Settings["CachedCDNRoot"] : string.Empty; + cachedCdnRoot = this.Settings.ContainsKey("CachedCDNRoot") ? this.Settings["CachedCDNRoot"] : string.Empty; - if (this.amazonS3SourceCache == null) + if (amazonS3SourceCache == null) { - this.amazonS3SourceBucketName = this.Settings.ContainsKey("SourceS3Bucket") ? this.Settings["SourceS3Bucket"] : string.Empty; - this.cloudSourceUri = this.Settings.ContainsKey("CloudSourceURI") ? this.Settings["CloudSourceURI"] : string.Empty; + amazonS3SourceBucketName = this.Settings.ContainsKey("SourceS3Bucket") ? this.Settings["SourceS3Bucket"] : string.Empty; + cloudSourceUri = this.Settings.ContainsKey("CloudSourceURI") ? this.Settings["CloudSourceURI"] : string.Empty; string sourceAccount = this.Settings.ContainsKey("SourceStorageAccount") ? this.Settings["SourceStorageAccount"] : string.Empty; // Repeat for source if it exists - if (!string.IsNullOrWhiteSpace(this.amazonS3SourceBucketName)) + if (!string.IsNullOrWhiteSpace(amazonS3SourceBucketName)) { string awsSourceAccessKey = this.Settings.ContainsKey("AwsSourceAccessKey") ? this.Settings["AwsSourceAccessKey"] : string.Empty; string awsSourceSecretKey = this.Settings.ContainsKey("AwsSourceSecretKey") ? this.Settings["AwsSourceSecretKey"] : string.Empty; @@ -175,11 +175,11 @@ public AmazonS3Cache(string requestPath, string fullPath, string querystring) && !string.IsNullOrWhiteSpace(awsSourceSecretKey)) { // If Keys are provided then use these, otherwise we'll use IAM access keys - this.amazonS3SourceCache = new AmazonS3Client(awsSourceAccessKey, awsSourceSecretKey, awsSourceRegionEndpoint); + amazonS3SourceCache = new AmazonS3Client(awsSourceAccessKey, awsSourceSecretKey, awsSourceRegionEndpoint); } else { - this.amazonS3SourceCache = new AmazonS3Client(awsSourceRegionEndpoint); + amazonS3SourceCache = new AmazonS3Client(awsSourceRegionEndpoint); } } } @@ -187,12 +187,12 @@ public AmazonS3Cache(string requestPath, string fullPath, string querystring) if (this.Settings.ContainsKey("CachedCDNTimeout")) { int.TryParse(this.Settings["CachedCDNTimeout"], out int t); - this.timeout = t; + timeout = t; } // This setting was added to facilitate streaming of the blob resource directly instead of a redirect. This is beneficial for CDN purposes // but caution should be taken if not used with a CDN as it will add quite a bit of overhead to the site. - this.streamCachedImage = this.Settings.ContainsKey("StreamCachedImage") + streamCachedImage = this.Settings.ContainsKey("StreamCachedImage") && string.Equals(this.Settings["StreamCachedImage"], "true", StringComparison.OrdinalIgnoreCase); } } @@ -201,9 +201,9 @@ public AmazonS3Cache(string requestPath, string fullPath, string querystring) /// Gets a value indicating whether Amazon S3 Access Key, Secret Key or Bucket Name are empty strings: /// i.e. whether . /// - private bool AwsIsValid => !string.IsNullOrWhiteSpace(this.awsAccessKey) - && !string.IsNullOrWhiteSpace(this.awsSecretKey) - && !string.IsNullOrWhiteSpace(this.awsBucketName); + private static bool AwsIsValid => !string.IsNullOrWhiteSpace(awsAccessKey) + && !string.IsNullOrWhiteSpace(awsSecretKey) + && !string.IsNullOrWhiteSpace(awsBucketName); /// /// Gets a value indicating whether the image is new or updated in an asynchronous manner. @@ -221,7 +221,7 @@ public override async Task IsNewOrUpdatedAsync() // Collision rate of about 1 in 10000 for the folder structure. // That gives us massive scope to store millions of files. string pathFromKey = string.Join("\\", cachedFileName.ToCharArray().Take(6)); - this.CachedPath = Path.Combine(this.cachedCdnRoot, this.awsCacheKeyPrefix, pathFromKey, cachedFileName) + this.CachedPath = Path.Combine(cachedCdnRoot, awsCacheKeyPrefix, pathFromKey, cachedFileName) .Replace(@"\", "/"); this.cachedRewritePath = this.CachedPath; @@ -259,7 +259,7 @@ public override async Task IsNewOrUpdatedAsync() var objectMetaDataRequest = new GetObjectMetadataRequest { - BucketName = this.awsBucketName, + BucketName = awsBucketName, Key = key, }; @@ -325,7 +325,7 @@ public override async Task AddImageToCacheAsync(Stream stream, string contentTyp var transferUtilityUploadRequest = new TransferUtilityUploadRequest { - BucketName = this.awsBucketName, + BucketName = awsBucketName, InputStream = stream, Key = key, CannedACL = S3CannedACL.PublicRead, @@ -355,7 +355,7 @@ public override async Task TrimCacheAsync() var request = new ListObjectsRequest { - BucketName = this.awsBucketName, + BucketName = awsBucketName, Prefix = parent, Delimiter = "/" }; @@ -391,7 +391,7 @@ public override async Task TrimCacheAsync() CacheIndexer.Remove(file.Key); await amazonS3ClientCache.DeleteObjectAsync(new DeleteObjectRequest { - BucketName = this.awsBucketName, + BucketName = awsBucketName, Key = file.Key }).ConfigureAwait(false); } @@ -407,7 +407,7 @@ public override void RewritePath(HttpContext context) { var request = (HttpWebRequest)WebRequest.Create(this.cachedRewritePath); - if (this.streamCachedImage) + if (streamCachedImage) { // Map headers to enable 304s to pass through if (context.Request.Headers["If-Modified-Since"] != null) @@ -426,7 +426,7 @@ public override void RewritePath(HttpContext context) // Write the blob storage directly to the stream request.Method = "GET"; - request.Timeout = this.timeout; + request.Timeout = timeout; HttpWebResponse response = null; try @@ -495,7 +495,7 @@ public override void RewritePath(HttpContext context) // Redirect the request to the blob URL request.Method = "HEAD"; - request.Timeout = this.timeout; + request.Timeout = timeout; HttpWebResponse response = null; try @@ -546,7 +546,7 @@ public override void RewritePath(HttpContext context) /// Key value protected string GetFolderStructureForAmazon(string path) { - string output = path.Replace(this.cachedCdnRoot, string.Empty); + string output = path.Replace(cachedCdnRoot, string.Empty); output = output.Replace(Path.GetFileName(output), string.Empty); if (output.StartsWith("/")) @@ -617,15 +617,15 @@ protected virtual async Task IsUpdatedAsync(DateTime creationDate) isUpdated = File.GetLastWriteTimeUtc(this.RequestPath) > creationDate; } } - else if (this.amazonS3SourceCache != null) + else if (amazonS3SourceCache != null) { - string container = RemoteRegex.Replace(this.cloudSourceUri, string.Empty); + string container = RemoteRegex.Replace(cloudSourceUri, string.Empty); string s3Path = RemoteRegex.Replace(this.RequestPath, string.Empty); string key = s3Path.Replace(container, string.Empty).TrimStart('/'); var objectMetaDataRequest = new GetObjectMetadataRequest { - BucketName = this.amazonS3SourceBucketName, + BucketName = amazonS3SourceBucketName, Key = key, }; From c7205e73a98f09f97071c16f4831e6ed97cc3def Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Tue, 29 Jan 2019 00:43:46 +1100 Subject: [PATCH 100/113] Add additional context overload. Fix #718 --- .../HttpModules/ImageProcessingModule.cs | 14 +++++++++----- .../Services/IImageService.cs | 19 +++++++++++++++++++ 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/src/ImageProcessor.Web/HttpModules/ImageProcessingModule.cs b/src/ImageProcessor.Web/HttpModules/ImageProcessingModule.cs index 3e88753df..389796cba 100644 --- a/src/ImageProcessor.Web/HttpModules/ImageProcessingModule.cs +++ b/src/ImageProcessor.Web/HttpModules/ImageProcessingModule.cs @@ -578,7 +578,14 @@ private async Task ProcessImageAsync(HttpContext context) try { - imageBuffer = await currentService.GetImage(requestPath).ConfigureAwait(false); + if (currentService is IImageService2 imageService2) + { + imageBuffer = await imageService2.GetImage(requestPath, context).ConfigureAwait(false); + } + else + { + imageBuffer = await currentService.GetImage(requestPath).ConfigureAwait(false); + } } catch (HttpException ex) { @@ -712,10 +719,7 @@ private async Task ProcessImageAsync(HttpContext context) /// /// true if the query string contains cache buster variables; otherwise, false. /// - private static bool ParseCacheBuster(string queryString) - { - return ParseCacheBuster(HttpUtility.ParseQueryString(queryString)); - } + private static bool ParseCacheBuster(string queryString) => ParseCacheBuster(HttpUtility.ParseQueryString(queryString)); /// /// Return a value indicating whether common cache buster variables are being passed through. diff --git a/src/ImageProcessor.Web/Services/IImageService.cs b/src/ImageProcessor.Web/Services/IImageService.cs index 2df5c7d1e..95446c107 100644 --- a/src/ImageProcessor.Web/Services/IImageService.cs +++ b/src/ImageProcessor.Web/Services/IImageService.cs @@ -13,6 +13,7 @@ namespace ImageProcessor.Web.Services using System; using System.Collections.Generic; using System.Threading.Tasks; + using System.Web; /// /// Defines properties and methods for allowing retrieval of images from different sources. @@ -65,4 +66,22 @@ public interface IImageService /// Task GetImage(object id); } + + /// + /// An extension to IImageService that allows the passing of the current request context. + /// + public interface IImageService2 : IImageService + { + /// + /// Gets the image using the given identifier. + /// + /// + /// The value identifying the image to fetch. + /// + /// The request context. + /// + /// The array containing the image data. + /// + Task GetImage(object id, HttpContext context); + } } From 1a8e712e43261dfbe75b0b8d3a52367a1ef06ef8 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Tue, 29 Jan 2019 21:42:11 +1100 Subject: [PATCH 101/113] Update TruePng.exe to 0.6.2.5 Fix #713 --- .../Resources/Unmanaged/x86/TruePNG.exe | Bin 310272 -> 311296 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/ImageProcessor.Web.Plugins.PostProcessor/Resources/Unmanaged/x86/TruePNG.exe b/src/ImageProcessor.Web.Plugins.PostProcessor/Resources/Unmanaged/x86/TruePNG.exe index a27b5975157aeddcb1cb2a84ad95516fe3dfc118..afe5d6d29bbd9cb8a01381249dc50851c7b95785 100644 GIT binary patch delta 63125 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%0DX*%G) z`mO^!Oq26aAH;?+xc@y{ldb8h20GwX6GZRyhFyX>^<5i;_b|NgAKXsYvw5q7gX1(g zgTUcI8cjR=^k`WrF-}t>KPTv#2hHC9s-Sz8>tvkYM>7V$4E#3XSB&2&{3`IP#xG>S z{-Gw_fFSvhS?7^6EV>v^4&=ak{0i~gjo(51PT_YMziRwK@ugoRe%F$5T{``95r}EV+G6#*s15^G#zHfYEtn#i67l@RE;5QtBbsihahll( zhw*V;H5Y&o0zf*DZUKQl6e|WS8uZf5&KH2Fn=d!9>e{uVFBcP0Kp_e!0nR4;PG$Dd zl+pVO@*u0O^|&IWxdNO`NSBCT6>#Yq*u9h&h}3|9b4U}9G;aa64ZrY7ahgz+Hx;nz zLh_`F#NIsr>oNAF-T|PxfglTed8yQb|)lY6~c5~R1Th7 zGW%FGu~Zlm(WRAieK?PBA)c`)_!f{75uUvk86xuzsO)9H?q

    ZMxRZUBEkta6Aai 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 q;^s@ppcw;QVuUWW8Js#If_4r Date: Thu, 31 Jan 2019 21:44:07 +1100 Subject: [PATCH 102/113] Clone autorotated image. Fix #709 --- src/ImageProcessor/Processors/AutoRotate.cs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/ImageProcessor/Processors/AutoRotate.cs b/src/ImageProcessor/Processors/AutoRotate.cs index aa78af075..2b663e445 100644 --- a/src/ImageProcessor/Processors/AutoRotate.cs +++ b/src/ImageProcessor/Processors/AutoRotate.cs @@ -19,6 +19,7 @@ namespace ImageProcessor.Processors using System.Drawing; using ImageProcessor.Common.Exceptions; + using ImageProcessor.Common.Extensions; using ImageProcessor.Imaging.MetaData; ///

    @@ -71,8 +72,7 @@ public Image ProcessImage(ImageFactory factory) const int Orientation = (int)ExifPropertyTag.Orientation; if (!factory.PreserveExifData && factory.ExifPropertyItems.ContainsKey(Orientation)) { - int rotationValue = factory.ExifPropertyItems[Orientation].Value[0]; - switch (rotationValue) + switch (factory.ExifPropertyItems[Orientation].Value[0]) { case 8: // Rotated 90 right @@ -99,9 +99,17 @@ public Image ProcessImage(ImageFactory factory) image.RotateFlip(RotateFlipType.RotateNoneFlipX); break; } + + // System.Drawing incorrectly limits future drawing operations to the old dimensions + // The workaround is to clone the image. + // https://github.com/JimBobSquarePants/ImageProcessor/issues/709 + Image copy = image.Copy(factory.AnimationProcessMode, image.PixelFormat, false); + image.Dispose(); + return factory.Image = copy; } return image; + } catch (Exception ex) { From 89e704b3b67882e93a21fa7c8c8fe9c48b8824f3 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Mon, 4 Feb 2019 15:34:51 +1100 Subject: [PATCH 103/113] Better bitdepth preservation. Fix #724 --- .../Imaging/Formats/BitmapFormat.cs | 50 ++++++++++++++ .../Imaging/Formats/PngFormat.cs | 65 ++++++++++--------- 2 files changed, 84 insertions(+), 31 deletions(-) diff --git a/src/ImageProcessor/Imaging/Formats/BitmapFormat.cs b/src/ImageProcessor/Imaging/Formats/BitmapFormat.cs index 4a640e133..1c31603c2 100644 --- a/src/ImageProcessor/Imaging/Formats/BitmapFormat.cs +++ b/src/ImageProcessor/Imaging/Formats/BitmapFormat.cs @@ -10,8 +10,11 @@ namespace ImageProcessor.Imaging.Formats { + using System.Drawing; using System.Drawing.Imaging; + using System.IO; using System.Text; + using ImageProcessor.Common.Extensions; /// /// Provides the necessary information to support bitmap images. @@ -43,5 +46,52 @@ public class BitmapFormat : FormatBase /// Gets the . /// public override ImageFormat ImageFormat => ImageFormat.Bmp; + + /// + public override Image Save(Stream stream, Image image, long bitDepth) + { + PixelFormat pixelFormat = PixelFormat.Format32bppPArgb; + switch (bitDepth) + { + case 24L: + pixelFormat = PixelFormat.Format24bppRgb; + break; + + case 8L: + pixelFormat = PixelFormat.Format8bppIndexed; + break; + } + + using (Image clone = image.Copy(pixelFormat)) + { + clone.Save(stream, this.ImageFormat); + } + + return image; + } + + /// + public override Image Save(string path, Image image, long bitDepth) + { + // Bmps can be saved with different bit depths. + PixelFormat pixelFormat = PixelFormat.Format32bppPArgb; + switch (bitDepth) + { + case 24L: + pixelFormat = PixelFormat.Format24bppRgb; + break; + + case 8L: + pixelFormat = PixelFormat.Format8bppIndexed; + break; + } + + using (Image clone = image.Copy(pixelFormat)) + { + clone.Save(path, this.ImageFormat); + } + + return image; + } } } \ No newline at end of file diff --git a/src/ImageProcessor/Imaging/Formats/PngFormat.cs b/src/ImageProcessor/Imaging/Formats/PngFormat.cs index b5a7c6265..d97f32615 100644 --- a/src/ImageProcessor/Imaging/Formats/PngFormat.cs +++ b/src/ImageProcessor/Imaging/Formats/PngFormat.cs @@ -13,7 +13,7 @@ namespace ImageProcessor.Imaging.Formats using System.Drawing; using System.Drawing.Imaging; using System.IO; - + using ImageProcessor.Common.Extensions; using ImageProcessor.Imaging.Quantizers; using ImageProcessor.Imaging.Quantizers.WuQuantizer; @@ -53,52 +53,55 @@ public class PngFormat : FormatBase, IQuantizableImageFormat /// public IQuantizer Quantizer { get; set; } = new WuQuantizer(); - /// - /// Saves the current image to the specified output stream. - /// - /// - /// The to save the image information to. - /// - /// - /// The to save. - /// - /// - /// The color depth in number of bits per pixel to save the image with. - /// - /// - /// The . - /// + /// public override Image Save(Stream stream, Image image, long bitDepth) { if (this.IsIndexed) { image = this.Quantizer.Quantize(image); + + return base.Save(stream, image, bitDepth); + } + + PixelFormat pixelFormat = PixelFormat.Format32bppPArgb; + switch (bitDepth) + { + case 24L: + pixelFormat = PixelFormat.Format24bppRgb; + break; + } + + using (Image clone = image.Copy(pixelFormat)) + { + clone.Save(stream, this.ImageFormat); } - return base.Save(stream, image, bitDepth); + return image; } - /// - /// Saves the current image to the specified file path. - /// - /// The path to save the image to. - /// - /// The to save. - /// - /// - /// The color depth in number of bits per pixel to save the image with. - /// - /// - /// The . - /// + /// public override Image Save(string path, Image image, long bitDepth) { if (this.IsIndexed) { image = this.Quantizer.Quantize(image); + return base.Save(path, image, bitDepth); + } + + PixelFormat pixelFormat = PixelFormat.Format32bppPArgb; + switch (bitDepth) + { + case 24L: + pixelFormat = PixelFormat.Format24bppRgb; + break; + } + + using (Image clone = image.Copy(pixelFormat)) + { + clone.Save(path, this.ImageFormat); } - return base.Save(path, image, bitDepth); + return image; } } } \ No newline at end of file From a9dca09b14098beff0927db0b2bda42d56b543e7 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Mon, 4 Feb 2019 21:50:10 +1100 Subject: [PATCH 104/113] Update security warning dependency --- src/ImageProcessor.Web.Plugins.AzureBlobCache/packages.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ImageProcessor.Web.Plugins.AzureBlobCache/packages.config b/src/ImageProcessor.Web.Plugins.AzureBlobCache/packages.config index bec920ab4..9673d722b 100644 --- a/src/ImageProcessor.Web.Plugins.AzureBlobCache/packages.config +++ b/src/ImageProcessor.Web.Plugins.AzureBlobCache/packages.config @@ -1,7 +1,7 @@  - + From 21c4e284a80a8f3c63f89e0bdad2814740b4a0ba Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Mon, 4 Feb 2019 22:40:42 +1100 Subject: [PATCH 105/113] Allow prefix on localimageservice. --- .../HttpModules/ImageProcessingModule.cs | 371 +++++++++--------- 1 file changed, 181 insertions(+), 190 deletions(-) diff --git a/src/ImageProcessor.Web/HttpModules/ImageProcessingModule.cs b/src/ImageProcessor.Web/HttpModules/ImageProcessingModule.cs index 0e0e96ba2..0c56060de 100644 --- a/src/ImageProcessor.Web/HttpModules/ImageProcessingModule.cs +++ b/src/ImageProcessor.Web/HttpModules/ImageProcessingModule.cs @@ -13,7 +13,6 @@ namespace ImageProcessor.Web.HttpModules using System; using System.Collections.Generic; using System.Collections.Specialized; - using System.ComponentModel; using System.IO; using System.Linq; using System.Net; @@ -462,241 +461,243 @@ private async Task ProcessImageAsync(HttpContext context) IImageService currentService = this.GetImageServiceForRequest(url, applicationPath); - if (currentService != null) + if (currentService == null) { - // Parse url - UrlParser.ParseUrl(url, currentService.Prefix, out string requestPath, out string queryString); - string originalQueryString = queryString; + return; + } - // Replace any presets in the querystring with the actual value. - queryString = this.ReplacePresetsInQueryString(queryString); + // Parse url + UrlParser.ParseUrl(url, currentService.Prefix, out string requestPath, out string queryString); + string originalQueryString = queryString; - var httpContextBase = new HttpContextWrapper(context); + // Replace any presets in the querystring with the actual value. + queryString = this.ReplacePresetsInQueryString(queryString); - // Execute the handler which can change the querystring - var validatingArgs = new ValidatingRequestEventArgs(httpContextBase, queryString); - this.OnValidatingRequest(validatingArgs); + var httpContextBase = new HttpContextWrapper(context); - // If the validation has failed based on events, return - if (validatingArgs.Cancel) - { - ImageProcessorBootstrapper.Instance.Logger.Log($"Image processing for {url} has been cancelled by an event"); - return; - } + // Execute the handler which can change the querystring + var validatingArgs = new ValidatingRequestEventArgs(httpContextBase, queryString); + this.OnValidatingRequest(validatingArgs); - // Re-assign based on event handlers - queryString = validatingArgs.QueryString; - url = Regex.Replace(url, originalQueryString, queryString, RegexOptions.IgnoreCase); + // If the validation has failed based on events, return + if (validatingArgs.Cancel) + { + ImageProcessorBootstrapper.Instance.Logger.Log($"Image processing for {url} has been cancelled by an event"); + return; + } - // Map the request path if file local. - bool isFileLocal = currentService.IsFileLocalService; - if (currentService.IsFileLocalService) - { - requestPath = HostingEnvironment.MapPath(requestPath); - } + // Re-assign based on event handlers + queryString = validatingArgs.QueryString; + url = Regex.Replace(url, originalQueryString, queryString, RegexOptions.IgnoreCase); - if (string.IsNullOrWhiteSpace(requestPath)) - { - return; - } + // Map the request path if file local. + bool isFileLocal = currentService.IsFileLocalService; + if (currentService.IsFileLocalService) + { + requestPath = HostingEnvironment.MapPath(requestPath); + } - // Parse any protocol values from settings if no protocol is present. - if (currentService.Settings.ContainsKey("Protocol") && (ProtocolRegex.Matches(requestPath).Count == 0 || ProtocolRegex.Matches(requestPath)[0].Index > 0)) - { - // ReSharper disable once PossibleNullReferenceException - requestPath = currentService.Settings["Protocol"] + "://" + requestPath.TrimStart('/'); - } + if (string.IsNullOrWhiteSpace(requestPath)) + { + return; + } - // Break out if we don't meet critera. - // First check that the request path is valid and whether we are intercepting all requests or the querystring is valid. - bool interceptAll = interceptAllRequests != null && interceptAllRequests.Value; - if (string.IsNullOrWhiteSpace(requestPath) || (!interceptAll && string.IsNullOrWhiteSpace(queryString))) - { - return; - } + // Parse any protocol values from settings if no protocol is present. + if (currentService.Settings.ContainsKey("Protocol") && (ProtocolRegex.Matches(requestPath).Count == 0 || ProtocolRegex.Matches(requestPath)[0].Index > 0)) + { + // ReSharper disable once PossibleNullReferenceException + requestPath = currentService.Settings["Protocol"] + "://" + requestPath.TrimStart('/'); + } - // Check whether the path is valid for other requests. - // We've already checked the unprefixed requests in GetImageServiceForRequest(). - if (!string.IsNullOrWhiteSpace(currentService.Prefix) && !currentService.IsValidRequest(requestPath)) - { - return; - } + // Break out if we don't meet critera. + // First check that the request path is valid and whether we are intercepting all requests or the querystring is valid. + bool interceptAll = interceptAllRequests != null && interceptAllRequests.Value; + if (string.IsNullOrWhiteSpace(requestPath) || (!interceptAll && string.IsNullOrWhiteSpace(queryString))) + { + return; + } - using (await Locker.LockAsync(rawUrl).ConfigureAwait(false)) - { - // Parse the url to see whether we should be doing any work. - // If we're not intercepting all requests and we don't have valid instructions we shoul break here. - IWebGraphicsProcessor[] processors = null; - AnimationProcessMode mode = AnimationProcessMode.First; - bool processing = false; + // Check whether the path is valid for other requests. + // We've already checked the unprefixed requests in GetImageServiceForRequest(). + if (!string.IsNullOrWhiteSpace(currentService.Prefix) && !currentService.IsValidRequest(requestPath)) + { + return; + } - if (!string.IsNullOrWhiteSpace(queryString)) - { - // Attempt to match querystring and processors. - processors = ImageFactoryExtensions.GetMatchingProcessors(queryString); + using (await Locker.LockAsync(rawUrl).ConfigureAwait(false)) + { + // Parse the url to see whether we should be doing any work. + // If we're not intercepting all requests and we don't have valid instructions we shoul break here. + IWebGraphicsProcessor[] processors = null; + AnimationProcessMode mode = AnimationProcessMode.First; + bool processing = false; - // Animation is not a processor but can be a specific request so we should allow it. - mode = this.ParseAnimationMode(queryString, out bool processAnimation); + if (!string.IsNullOrWhiteSpace(queryString)) + { + // Attempt to match querystring and processors. + processors = ImageFactoryExtensions.GetMatchingProcessors(queryString); - // Are we processing or cache busting? - processing = processors != null && (processors.Length > 0 || processAnimation); - bool cacheBusting = ParseCacheBuster(queryString); - if (!processing && !cacheBusting) - { - // No? Someone is either attacking the server or hasn't read the instructions. - string message = $"The request {request.Unvalidated.RawUrl} could not be understood by the server due to malformed syntax."; - ImageProcessorBootstrapper.Instance.Logger.Log(message); - return; - } + // Animation is not a processor but can be a specific request so we should allow it. + mode = this.ParseAnimationMode(queryString, out bool processAnimation); + + // Are we processing or cache busting? + processing = processors != null && (processors.Length > 0 || processAnimation); + bool cacheBusting = ParseCacheBuster(queryString); + if (!processing && !cacheBusting) + { + // No? Someone is either attacking the server or hasn't read the instructions. + string message = $"The request {request.Unvalidated.RawUrl} could not be understood by the server due to malformed syntax."; + ImageProcessorBootstrapper.Instance.Logger.Log(message); + return; } + } - // Create a new cache to help process and cache the request. - this.imageCache = (IImageCache)ImageProcessorConfiguration.Instance - .ImageCache.GetInstance(requestPath, url, queryString); + // Create a new cache to help process and cache the request. + this.imageCache = (IImageCache)ImageProcessorConfiguration.Instance + .ImageCache.GetInstance(requestPath, url, queryString); - // Is the file new or updated? - bool isNewOrUpdated = await this.imageCache.IsNewOrUpdatedAsync().ConfigureAwait(false); - string cachedPath = this.imageCache.CachedPath; + // Is the file new or updated? + bool isNewOrUpdated = await this.imageCache.IsNewOrUpdatedAsync().ConfigureAwait(false); + string cachedPath = this.imageCache.CachedPath; - // Only process if the file has been updated. - if (isNewOrUpdated) - { - // Ok let's get the image - byte[] imageBuffer = null; - string mimeType; + // Only process if the file has been updated. + if (isNewOrUpdated) + { + // Ok let's get the image + byte[] imageBuffer = null; + string mimeType; - try + try + { + if (currentService is IImageService2 imageService2) { - if (currentService is IImageService2 imageService2) - { - imageBuffer = await imageService2.GetImage(requestPath, context).ConfigureAwait(false); - } - else - { - imageBuffer = await currentService.GetImage(requestPath).ConfigureAwait(false); - } + imageBuffer = await imageService2.GetImage(requestPath, context).ConfigureAwait(false); } - catch (HttpException ex) + else { - // We want 404's to be handled by IIS so that other handlers/modules can still run. - if (ex.GetHttpCode() == (int)HttpStatusCode.NotFound) - { - ImageProcessorBootstrapper.Instance.Logger.Log(ex.Message); - return; - } + imageBuffer = await currentService.GetImage(requestPath).ConfigureAwait(false); } - - if (imageBuffer == null) + } + catch (HttpException ex) + { + // We want 404's to be handled by IIS so that other handlers/modules can still run. + if (ex.GetHttpCode() == (int)HttpStatusCode.NotFound) { + ImageProcessorBootstrapper.Instance.Logger.Log(ex.Message); return; } + } - // Using recyclable streams here should dramatically reduce the overhead required - using (MemoryStream inStream = MemoryStreamPool.Shared.GetStream("inStream", imageBuffer, 0, imageBuffer.Length)) - { - // Process the Image. Use a recyclable stream here to reduce the allocations - MemoryStream outStream = MemoryStreamPool.Shared.GetStream(); + if (imageBuffer == null) + { + return; + } - if (!string.IsNullOrWhiteSpace(queryString)) + // Using recyclable streams here should dramatically reduce the overhead required + using (MemoryStream inStream = MemoryStreamPool.Shared.GetStream("inStream", imageBuffer, 0, imageBuffer.Length)) + { + // Process the Image. Use a recyclable stream here to reduce the allocations + MemoryStream outStream = MemoryStreamPool.Shared.GetStream(); + + if (!string.IsNullOrWhiteSpace(queryString)) + { + if (processing) { - if (processing) - { - // Process the image. - bool exif = preserveExifMetaData != null && preserveExifMetaData.Value; - MetaDataMode metaMode = !exif ? MetaDataMode.None : metaDataMode.Value; - bool gamma = fixGamma != null && fixGamma.Value; + // Process the image. + bool exif = preserveExifMetaData != null && preserveExifMetaData.Value; + MetaDataMode metaMode = !exif ? MetaDataMode.None : metaDataMode.Value; + bool gamma = fixGamma != null && fixGamma.Value; - try - { - using (var imageFactory = new ImageFactory(metaMode, gamma) { AnimationProcessMode = mode }) - { - imageFactory.Load(inStream).AutoProcess(processors).Save(outStream); - mimeType = imageFactory.CurrentImageFormat.MimeType; - } - } - catch (ImageFormatException) + try + { + using (var imageFactory = new ImageFactory(metaMode, gamma) { AnimationProcessMode = mode }) { - ImageProcessorBootstrapper.Instance.Logger.Log($"Request {url} is not a valid image."); - return; + imageFactory.Load(inStream).AutoProcess(processors).Save(outStream); + mimeType = imageFactory.CurrentImageFormat.MimeType; } } - else + catch (ImageFormatException) { - // We're cache-busting. Allow the value to be cached - await inStream.CopyToAsync(outStream).ConfigureAwait(false); - mimeType = FormatUtilities.GetFormat(outStream).MimeType; + ImageProcessorBootstrapper.Instance.Logger.Log($"Request {url} is not a valid image."); + return; } } else { - // We're capturing all requests. + // We're cache-busting. Allow the value to be cached await inStream.CopyToAsync(outStream).ConfigureAwait(false); mimeType = FormatUtilities.GetFormat(outStream).MimeType; } + } + else + { + // We're capturing all requests. + await inStream.CopyToAsync(outStream).ConfigureAwait(false); + mimeType = FormatUtilities.GetFormat(outStream).MimeType; + } - // Fire the post processing event. - EventHandler handler = OnPostProcessing; - if (handler != null) + // Fire the post processing event. + EventHandler handler = OnPostProcessing; + if (handler != null) + { + string extension = Path.GetExtension(cachedPath); + var args = new PostProcessingEventArgs { - string extension = Path.GetExtension(cachedPath); - var args = new PostProcessingEventArgs - { - Context = context, - ImageStream = outStream, - ImageExtension = extension - }; + Context = context, + ImageStream = outStream, + ImageExtension = extension + }; - handler(this, args); - outStream = args.ImageStream; - } + handler(this, args); + outStream = args.ImageStream; + } - // Add to the cache. - await this.imageCache.AddImageToCacheAsync(outStream, mimeType).ConfigureAwait(false); + // Add to the cache. + await this.imageCache.AddImageToCacheAsync(outStream, mimeType).ConfigureAwait(false); - // Cleanup - outStream.Dispose(); - } + // Cleanup + outStream.Dispose(); + } - // Store the response type and cache dependency in the context for later retrieval. - context.Items[CachedResponseTypeKey] = mimeType; - bool isFileCached = new Uri(cachedPath).IsFile; + // Store the response type and cache dependency in the context for later retrieval. + context.Items[CachedResponseTypeKey] = mimeType; + bool isFileCached = new Uri(cachedPath).IsFile; - if (isFileLocal) + if (isFileLocal) + { + if (isFileCached) { - if (isFileCached) - { - // Some services might only provide filename so we can't monitor for the browser. - context.Items[CachedResponseFileDependency] = Path.GetFileName(requestPath) == requestPath - ? new[] { cachedPath } - : new[] { requestPath, cachedPath }; - } - else - { - context.Items[CachedResponseFileDependency] = Path.GetFileName(requestPath) == requestPath - ? null - : new[] { requestPath }; - } + // Some services might only provide filename so we can't monitor for the browser. + context.Items[CachedResponseFileDependency] = Path.GetFileName(requestPath) == requestPath + ? new[] { cachedPath } + : new[] { requestPath, cachedPath }; } - else if (isFileCached) + else { - context.Items[CachedResponseFileDependency] = new[] { cachedPath }; + context.Items[CachedResponseFileDependency] = Path.GetFileName(requestPath) == requestPath + ? null + : new[] { requestPath }; } } - - // The cached file is valid so just rewrite the path. - this.imageCache.RewritePath(context); - - // Redirect if not a locally store file. - if (!new Uri(cachedPath).IsFile) + else if (isFileCached) { - context.ApplicationInstance.CompleteRequest(); + context.Items[CachedResponseFileDependency] = new[] { cachedPath }; } + } - if (isNewOrUpdated) - { - // Trim the cache. - await this.imageCache.TrimCacheAsync().ConfigureAwait(false); - } + // The cached file is valid so just rewrite the path. + this.imageCache.RewritePath(context); + + // Redirect if not a locally store file. + if (!new Uri(cachedPath).IsFile) + { + context.ApplicationInstance.CompleteRequest(); + } + + if (isNewOrUpdated) + { + // Trim the cache. + await this.imageCache.TrimCacheAsync().ConfigureAwait(false); } } } @@ -814,18 +815,8 @@ private IImageService GetImageServiceForRequest(string url, string applicationPa } } - // Return the file based service. - if (services.Any(s => s.GetType() == typeof(LocalFileImageService))) - { - IImageService service = services.First(s => s.GetType() == typeof(LocalFileImageService)); - if (service.IsValidRequest(path)) - { - return service; - } - } - // Return the next unprefixed service. - return services.FirstOrDefault(s => string.IsNullOrWhiteSpace(s.Prefix) && s.IsValidRequest(path) && s.GetType() != typeof(LocalFileImageService)); + return services.FirstOrDefault(s => string.IsNullOrWhiteSpace(s.Prefix) && s.IsValidRequest(path)); } } } \ No newline at end of file From 9c97c4921143896add317bf22a78e6466efb970b Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Tue, 5 Feb 2019 23:13:44 +1100 Subject: [PATCH 106/113] Update ImageProcessor.Web.Plugins.AzureBlobCache.nuspec --- build/NuSpecs/ImageProcessor.Web.Plugins.AzureBlobCache.nuspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/NuSpecs/ImageProcessor.Web.Plugins.AzureBlobCache.nuspec b/build/NuSpecs/ImageProcessor.Web.Plugins.AzureBlobCache.nuspec index 63078428e..653430df0 100644 --- a/build/NuSpecs/ImageProcessor.Web.Plugins.AzureBlobCache.nuspec +++ b/build/NuSpecs/ImageProcessor.Web.Plugins.AzureBlobCache.nuspec @@ -26,7 +26,7 @@ - + From a91fe15ae332b0f7b1c88b939c212cd06d7a8209 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Sat, 9 Feb 2019 21:17:05 +1100 Subject: [PATCH 107/113] Handle multiple substring matches --- src/ImageProcessor.Web/Helpers/UrlParser.cs | 10 +++++- .../Helpers/UrlParserUnitTests.cs | 33 +++++++++---------- 2 files changed, 24 insertions(+), 19 deletions(-) diff --git a/src/ImageProcessor.Web/Helpers/UrlParser.cs b/src/ImageProcessor.Web/Helpers/UrlParser.cs index 11b23a949..cda4f3cd4 100644 --- a/src/ImageProcessor.Web/Helpers/UrlParser.cs +++ b/src/ImageProcessor.Web/Helpers/UrlParser.cs @@ -34,8 +34,16 @@ public static void ParseUrl(string url, string servicePrefix, out string request // Remove any service identifier prefixes from the url. if (!string.IsNullOrWhiteSpace(servicePrefix)) { + // Handle when prefix is contained in filename. string[] split = Regex.Split(url, servicePrefix, RegexOptions.IgnoreCase); - url = split.Length > 1 ? split[1].TrimStart("?") : split[0].TrimStart("?"); + if (split.Length > 1) + { + url = string.Join(servicePrefix, split.Skip(1).ToArray()).TrimStart("?"); + } + else + { + url = split[0].TrimStart("?"); + } } // Workaround for handling entirely encoded path for https://github.com/JimBobSquarePants/ImageProcessor/issues/478 diff --git a/tests/ImageProcessor.Web.UnitTests/Helpers/UrlParserUnitTests.cs b/tests/ImageProcessor.Web.UnitTests/Helpers/UrlParserUnitTests.cs index d9b3a36a8..d3fe09e33 100644 --- a/tests/ImageProcessor.Web.UnitTests/Helpers/UrlParserUnitTests.cs +++ b/tests/ImageProcessor.Web.UnitTests/Helpers/UrlParserUnitTests.cs @@ -24,8 +24,7 @@ public class UrlParserUnitTests [TestCase("/some+path+with+plus/q_w-e+rty.jpeg", "width=100&height=100")] public void TestLocalUrl(string url, string query) { - string requestPath, queryString; - Web.Helpers.UrlParser.ParseUrl(url + "?" + query, "", out requestPath, out queryString); + Web.Helpers.UrlParser.ParseUrl(url + "?" + query, "", out string requestPath, out string queryString); Assert.True(requestPath.Equals(url)); Assert.True(queryString.Equals(query)); } @@ -37,12 +36,10 @@ public void TestLocalUrl(string url, string query) [TestCase("/", "remote.axd", "http://www.remotedomain.com/some+path/?a=qwerty&b=123&comment=some+comment+with+spaces", "width=100&height=100")] public void TestRemoteUrlUnencdoded(string baseUrl, string prefix, string path, string query) { - //Passed url should not have been changed - string requestPath, queryString; //Test url string url = baseUrl + "/" + prefix + "?" + path + "?" + query; - Web.Helpers.UrlParser.ParseUrl(url, prefix, out requestPath, out queryString); + Web.Helpers.UrlParser.ParseUrl(url, prefix, out string requestPath, out string queryString); Assert.True(queryString.Equals(query)); Assert.True(requestPath.Equals(path)); @@ -58,12 +55,10 @@ public void TestRemoteUrlUnencdoded(string baseUrl, string prefix, string path, [TestCase("/", "remote.axd", "http://www.remotedomain.com/?url=http%3A%2F%2Fwww.myotherdomain.com%2Fmedia%2F1566%2Fimage.jpg%3Fanchor%3Dcenter%26mode%3Dcrop%26width%3D1024%26rnd%3D130921477360000000", "width=100&height=100")] public void TestRemoteUrlWithEncodedQuerystring(string baseUrl, string prefix, string path, string query) { - //Requestpath should be urldecoded resulting in an invalid requestpath - string requestPath, queryString; // Test legacy url string legacyUrl = baseUrl + "/" + prefix + "?" + path + "?" + query; - Web.Helpers.UrlParser.ParseUrl(legacyUrl, prefix, out requestPath, out queryString); + Web.Helpers.UrlParser.ParseUrl(legacyUrl, prefix, out string requestPath, out string queryString); Assert.True(queryString.Equals(query)); Assert.True(requestPath.Equals(path)); @@ -79,12 +74,10 @@ public void TestRemoteUrlWithEncodedQuerystring(string baseUrl, string prefix, s [TestCase("/", "remote.axd", "http%3A%2F%2Fwww.remotedomain.com%2Fsome%2Bpath%2F%3Fa%3Dqwerty%26b%3D123%26comment%3Dsome%2Bcomment%2Bwith%2Bspaces", "width=100&height=100", "http://www.remotedomain.com/some+path/?a=qwerty&b=123&comment=some+comment+with+spaces")] public void TestRemoteUrlEncodedWithQuerystring(string baseUrl, string prefix, string path, string query, string expectedPath) { - // Requestpath should be urldecoded resulting in an invalid requestpath - string requestPath, queryString; // Test legacy url string legacyUrl = baseUrl + "/" + prefix + "?" + path + "?" + query; - Web.Helpers.UrlParser.ParseUrl(legacyUrl, prefix, out requestPath, out queryString); + Web.Helpers.UrlParser.ParseUrl(legacyUrl, prefix, out string requestPath, out string queryString); Assert.True(queryString.Equals(query)); Assert.True(requestPath.Equals(expectedPath)); @@ -95,12 +88,10 @@ public void TestRemoteUrlEncodedWithQuerystring(string baseUrl, string prefix, s [TestCase("/", "remote.axd", "http%3A%2F%2Fwww.remotedomain.com%2F%3Furl%3Dhttp%253A%252F%252Fwww.myotherdomain.com%252Fmedia%252F1566%252Fimage.jpg%253Fanchor%253Dcenter%2526mode%253Dcrop%2526width%253D1024%2526rnd%253D130921477360000000", "width=100&height=100", "http://www.remotedomain.com/?url=http%3A%2F%2Fwww.myotherdomain.com%2Fmedia%2F1566%2Fimage.jpg%3Fanchor%3Dcenter%26mode%3Dcrop%26width%3D1024%26rnd%3D130921477360000000")] public void TestRemoteUrlEncodedWithEncodedQuerystring(string baseUrl, string prefix, string path, string query, string expectedPath) { - //Requestpath should be urldecoded resulting in an invalid requestpath - string requestPath, queryString; //Test legacy url string legacyUrl = baseUrl + "/" + prefix + "?" + path + "?" + query; - Web.Helpers.UrlParser.ParseUrl(legacyUrl, prefix, out requestPath, out queryString); + Web.Helpers.UrlParser.ParseUrl(legacyUrl, prefix, out string requestPath, out string queryString); Assert.True(queryString.Equals(query)); Assert.True(requestPath.Equals(expectedPath)); @@ -111,11 +102,10 @@ public void TestRemoteUrlEncodedWithEncodedQuerystring(string baseUrl, string pr [TestCase("/", "remote.axd", "https%3A%2F%2Fi.scdn.co%2Fimage%2F8851b36688b767d01a00c7d1f0981997db0062d2%3Fwidth=512&startcolor=aad774&endcolor=ac2833", "https://i.scdn.co/image/8851b36688b767d01a00c7d1f0981997db0062d2", "width=512&startcolor=aad774&endcolor=ac2833")] public void TestRemoteUrlCompletelyEncoded(string baseUrl, string prefix, string path, string expectedPath, string expectedQuery) { - string requestPath, queryString; //Test legacy url string legacyUrl = baseUrl + "/" + prefix + "?" + path; - Web.Helpers.UrlParser.ParseUrl(legacyUrl, prefix, out requestPath, out queryString); + Web.Helpers.UrlParser.ParseUrl(legacyUrl, prefix, out string requestPath, out string queryString); Assert.True(queryString.Equals(expectedQuery)); Assert.True(requestPath.Equals(expectedPath)); @@ -126,8 +116,15 @@ public void TestRemoteUrlCompletelyEncoded(string baseUrl, string prefix, string [TestCase("http://www.mydomain.com/MyPrefix/image.jpg", "myprefix", "/image.jpg")] public void TestParseUrlPrefixIsCaseInsensitive(string url, string prefix, string expectedPath) { - string requestPath, queryString; - Web.Helpers.UrlParser.ParseUrl(url, prefix, out requestPath, out queryString); + Web.Helpers.UrlParser.ParseUrl(url, prefix, out string requestPath, out string queryString); + Assert.True(requestPath.Equals(expectedPath)); + } + + [Test] + [TestCase("http://localhost/ec/123/Deck.jpg?width=100", "ec", "/123/Deck.jpg")] + public void TestPrefixMatchesPartialUrl(string url, string prefix, string expectedPath) + { + Web.Helpers.UrlParser.ParseUrl(url, prefix, out string requestPath, out string queryString); Assert.True(requestPath.Equals(expectedPath)); } } From 917f7d632cdc063716152a93c74759d33334d680 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Sun, 10 Feb 2019 00:53:38 +1100 Subject: [PATCH 108/113] Update AsyncLock --- .../Caching/AsyncKeyLock.cs | 119 ++++++---- src/ImageProcessor.Web/Caching/Doorman.cs | 156 +++++++++++-- src/ImageProcessor.Web/Caching/DoormanPool.cs | 47 ---- .../HttpModules/ImageProcessingModule.cs | 215 ++++++++++-------- .../ImageProcessor.Web.csproj | 3 +- .../Caching/AsyncKeyLockTests.cs | 15 +- .../Caching/DoormanPoolTests.cs | 51 ----- .../Caching/DoormanTests.cs | 29 --- .../ImageProcessor.Web.UnitTests.csproj | 4 +- 9 files changed, 343 insertions(+), 296 deletions(-) delete mode 100644 src/ImageProcessor.Web/Caching/DoormanPool.cs delete mode 100644 tests/ImageProcessor.Web.UnitTests/Caching/DoormanPoolTests.cs delete mode 100644 tests/ImageProcessor.Web.UnitTests/Caching/DoormanTests.cs diff --git a/src/ImageProcessor.Web/Caching/AsyncKeyLock.cs b/src/ImageProcessor.Web/Caching/AsyncKeyLock.cs index 3bcd3cfe5..f5864e05b 100644 --- a/src/ImageProcessor.Web/Caching/AsyncKeyLock.cs +++ b/src/ImageProcessor.Web/Caching/AsyncKeyLock.cs @@ -24,77 +24,112 @@ internal sealed class AsyncKeyLock private static readonly Dictionary Keys = new Dictionary(); /// - /// Locks the current thread asynchronously. + /// A pool of unused doorman counters that can be re-used to avoid allocations. + /// + private static readonly Stack Pool = new Stack(MaxPoolSize); + + /// + /// Maximum size of the doorman pool. If the pool is already full when releasing + /// a doorman, it is simply left for garbage collection. + /// + private const int MaxPoolSize = 20; + + /// + /// SpinLock used to protect access to the Keys and Pool collections. + /// + private static SpinLock spinLock = new SpinLock(false); + + /// + /// Locks the current thread in read mode asynchronously. /// /// The key identifying the specific object to lock against. /// /// The that will release the lock. /// - public async Task LockAsync(string key) + public async Task ReaderLockAsync(string key) { - string lowerKey = key.ToLowerInvariant(); - await GetOrCreate(lowerKey).WaitAsync().ConfigureAwait(false); - return new Releaser(lowerKey); + Doorman doorman = GetDoorman(key); + + return await doorman.ReaderLockAsync().ConfigureAwait(false); } /// - /// Returns a matching on the given key - /// or a new one if none is found. + /// Locks the current thread in write mode asynchronously. /// - /// The key identifying the semaphore. + /// The key identifying the specific object to lock against. /// - /// The . + /// The that will release the lock. /// - private static SemaphoreSlim GetOrCreate(string key) + public async Task WriterLockAsync(string key) + { + Doorman doorman = GetDoorman(key); + + return await doorman.WriterLockAsync().ConfigureAwait(false); + } + + /// + /// Gets the doorman for the specified key. If no such doorman exists, an unused doorman + /// is obtained from the pool (or a new one is allocated if the pool is empty), and it's + /// assigned to the requested key. + /// + /// The key for the desired doorman. + /// The . + private static Doorman GetDoorman(string key) { - Doorman item; - lock (Keys) + Doorman doorman; + bool lockTaken = false; + try { - if (Keys.TryGetValue(key, out item)) + spinLock.Enter(ref lockTaken); + + if (!Keys.TryGetValue(key, out doorman)) { - ++item.RefCount; + doorman = (Pool.Count > 0) ? Pool.Pop() : new Doorman(ReleaseDoorman); + doorman.Key = key; + Keys.Add(key, doorman); } - else + + doorman.RefCount++; + } + finally + { + if (lockTaken) { - item = DoormanPool.Rent(); - Keys[key] = item; + spinLock.Exit(); } } - return item.Semaphore; + return doorman; } /// - /// The disposable releaser tasked with releasing the semaphore. + /// Releases a reference to a doorman. If the ref-count hits zero, then the doorman is + /// returned to the pool (or is simply left for the garbage collector to cleanup if the + /// pool is already full). /// - private sealed class Releaser : IDisposable + /// The . + private static void ReleaseDoorman(Doorman doorman) { - /// - /// The key identifying the that limits the number of threads. - /// - private readonly string key; - - /// - /// Initializes a new instance of the class. - /// - /// The key identifying the doorman that limits the number of threads. - public Releaser(string key) => this.key = key; - - /// - public void Dispose() + bool lockTaken = false; + try { - lock (Keys) + spinLock.Enter(ref lockTaken); + + if (--doorman.RefCount == 0) { - Doorman doorman = Keys[this.key]; - --doorman.RefCount; - if (doorman.RefCount == 0) + Keys.Remove(doorman.Key); + if (Pool.Count < MaxPoolSize) { - Keys.Remove(this.key); - doorman.Reset(); - DoormanPool.Return(doorman); + doorman.Key = null; + Pool.Push(doorman); } - - doorman.Semaphore.Release(); + } + } + finally + { + if (lockTaken) + { + spinLock.Exit(); } } } diff --git a/src/ImageProcessor.Web/Caching/Doorman.cs b/src/ImageProcessor.Web/Caching/Doorman.cs index f23d55c1e..c2405f767 100644 --- a/src/ImageProcessor.Web/Caching/Doorman.cs +++ b/src/ImageProcessor.Web/Caching/Doorman.cs @@ -6,44 +6,170 @@ // -------------------------------------------------------------------------------------------------------------------- using System; -using System.Threading; +using System.Collections.Generic; +using System.Threading.Tasks; namespace ImageProcessor.Web.Caching { /// - /// A wrapper around that operates a one-in-one out policy + /// An asynchronous locker that provides read and write locking policies. /// - internal sealed class Doorman : IDisposable + internal sealed class Doorman { + private readonly Queue> waitingWriters; + private readonly Task readerReleaser; + private readonly Task writerReleaser; + private readonly Action reset; + private TaskCompletionSource waitingReader; + private int readersWaiting; + private int status; + /// /// Initializes a new instance of the class. /// - public Doorman() + /// The reset action. + public Doorman(Action reset) { - this.Semaphore = new SemaphoreSlim(1, 1); - this.RefCount = 1; + this.waitingWriters = new Queue>(); + this.waitingReader = new TaskCompletionSource(); + this.status = 0; + + this.readerReleaser = Task.FromResult(new Releaser(this, false)); + this.writerReleaser = Task.FromResult(new Releaser(this, true)); + this.reset = reset; } /// - /// Gets the SemaphoreSlim that performs the limiting + /// Gets or sets the key that this doorman is mapped to. /// - public SemaphoreSlim Semaphore { get; } + public string Key { get; set; } /// - /// Gets or sets the number of references to this doorman. + /// Gets or sets the current reference count on this doorman. /// public int RefCount { get; set; } - public void Reset() + /// + /// Locks the current thread in read mode asynchronously. + /// + /// The . + public Task ReaderLockAsync() + { + lock (this.waitingWriters) + { + if (this.status >= 0 && this.waitingWriters.Count == 0) + { + ++this.status; + return this.readerReleaser; + } + else + { + ++this.readersWaiting; + return this.waitingReader.Task.ContinueWith(t => t.Result); + } + } + } + + /// + /// Locks the current thread in write mode asynchronously. + /// + /// The . + public Task WriterLockAsync() + { + lock (this.waitingWriters) + { + if (this.status == 0) + { + this.status = -1; + return this.writerReleaser; + } + else + { + var waiter = new TaskCompletionSource(); + this.waitingWriters.Enqueue(waiter); + return waiter.Task; + } + } + } + + private void ReaderRelease() { - this.RefCount = 1; + TaskCompletionSource toWake = null; + + lock (this.waitingWriters) + { + --this.status; + + if (this.status == 0) + { + if (this.waitingWriters.Count > 0) + { + this.status = -1; + toWake = this.waitingWriters.Dequeue(); + } + } + } + + this.reset(this); + + toWake?.SetResult(new Releaser(this, true)); + } + + private void WriterRelease() + { + TaskCompletionSource toWake = null; + bool toWakeIsWriter = false; + + lock (this.waitingWriters) + { + if (this.waitingWriters.Count > 0) + { + toWake = this.waitingWriters.Dequeue(); + toWakeIsWriter = true; + } + else if (this.readersWaiting > 0) + { + toWake = this.waitingReader; + this.status = this.readersWaiting; + this.readersWaiting = 0; + this.waitingReader = new TaskCompletionSource(); + } + else + { + this.status = 0; + } + } + + this.reset(this); + + toWake?.SetResult(new Releaser(this, toWakeIsWriter)); } - /// - public void Dispose() + public readonly struct Releaser : IDisposable { - this.RefCount = 1; - this.Semaphore.Dispose(); + private readonly Doorman toRelease; + private readonly bool writer; + + internal Releaser(Doorman toRelease, bool writer) + { + this.toRelease = toRelease; + this.writer = writer; + } + + public void Dispose() + { + if (this.toRelease != null) + { + if (this.writer) + { + this.toRelease.WriterRelease(); + } + else + { + this.toRelease.ReaderRelease(); + } + } + } } } } diff --git a/src/ImageProcessor.Web/Caching/DoormanPool.cs b/src/ImageProcessor.Web/Caching/DoormanPool.cs deleted file mode 100644 index 9d7e1e20a..000000000 --- a/src/ImageProcessor.Web/Caching/DoormanPool.cs +++ /dev/null @@ -1,47 +0,0 @@ -// -------------------------------------------------------------------------------------------------------------------- -// -// Copyright (c) James Jackson-South. -// Licensed under the Apache License, Version 2.0. -// -// -------------------------------------------------------------------------------------------------------------------- - -using System; -using System.Collections.Concurrent; - -namespace ImageProcessor.Web.Caching -{ - /// - /// Provides a resource pool that enables reusing instances of - /// - internal static class DoormanPool - { - private static readonly ConcurrentBag Pool = new ConcurrentBag(); - - /// - /// Retrieves a from the pool or a new one if the pool is empty - /// - /// Tre - public static Doorman Rent() => Pool.TryTake(out var doorman) ? doorman : new Doorman(); - - /// - /// Returns an doorman to the pool that was previously obtained using the - /// method on the same instance. - /// - /// The doorman to return - public static void Return(Doorman doorman) - { - if (doorman == null) - { - throw new ArgumentNullException(nameof(doorman)); - } - - Pool.Add(doorman); - } - - /// - /// Gets the number of items contained within the pool - /// - /// The - public static int Count() => Pool.Count; - } -} diff --git a/src/ImageProcessor.Web/HttpModules/ImageProcessingModule.cs b/src/ImageProcessor.Web/HttpModules/ImageProcessingModule.cs index 0c56060de..ee3e22bec 100644 --- a/src/ImageProcessor.Web/HttpModules/ImageProcessingModule.cs +++ b/src/ImageProcessor.Web/HttpModules/ImageProcessingModule.cs @@ -524,14 +524,16 @@ private async Task ProcessImageAsync(HttpContext context) return; } - using (await Locker.LockAsync(rawUrl).ConfigureAwait(false)) + bool isNewOrUpdated = false; + string cachedPath = string.Empty; + bool processing = false; + IWebGraphicsProcessor[] processors = null; + AnimationProcessMode mode = AnimationProcessMode.First; + + using (await Locker.ReaderLockAsync(rawUrl).ConfigureAwait(false)) { // Parse the url to see whether we should be doing any work. // If we're not intercepting all requests and we don't have valid instructions we shoul break here. - IWebGraphicsProcessor[] processors = null; - AnimationProcessMode mode = AnimationProcessMode.First; - bool processing = false; - if (!string.IsNullOrWhiteSpace(queryString)) { // Attempt to match querystring and processors. @@ -557,135 +559,149 @@ private async Task ProcessImageAsync(HttpContext context) .ImageCache.GetInstance(requestPath, url, queryString); // Is the file new or updated? - bool isNewOrUpdated = await this.imageCache.IsNewOrUpdatedAsync().ConfigureAwait(false); - string cachedPath = this.imageCache.CachedPath; + isNewOrUpdated = await this.imageCache.IsNewOrUpdatedAsync().ConfigureAwait(false); + cachedPath = this.imageCache.CachedPath; - // Only process if the file has been updated. - if (isNewOrUpdated) + if (!isNewOrUpdated) { - // Ok let's get the image - byte[] imageBuffer = null; - string mimeType; + // The cached file is valid so just rewrite the path. + this.imageCache.RewritePath(context); - try + // Redirect if not a locally store file. + if (!new Uri(cachedPath).IsFile) { - if (currentService is IImageService2 imageService2) - { - imageBuffer = await imageService2.GetImage(requestPath, context).ConfigureAwait(false); - } - else - { - imageBuffer = await currentService.GetImage(requestPath).ConfigureAwait(false); - } + context.ApplicationInstance.CompleteRequest(); + } + + return; + } + } + + // Only process if the file has been updated. + using (await Locker.WriterLockAsync(rawUrl).ConfigureAwait(false)) + { + // Ok let's get the image + byte[] imageBuffer = null; + string mimeType; + + try + { + if (currentService is IImageService2 imageService2) + { + imageBuffer = await imageService2.GetImage(requestPath, context).ConfigureAwait(false); } - catch (HttpException ex) + else { - // We want 404's to be handled by IIS so that other handlers/modules can still run. - if (ex.GetHttpCode() == (int)HttpStatusCode.NotFound) - { - ImageProcessorBootstrapper.Instance.Logger.Log(ex.Message); - return; - } + imageBuffer = await currentService.GetImage(requestPath).ConfigureAwait(false); } - - if (imageBuffer == null) + } + catch (HttpException ex) + { + // We want 404's to be handled by IIS so that other handlers/modules can still run. + if (ex.GetHttpCode() == (int)HttpStatusCode.NotFound) { + ImageProcessorBootstrapper.Instance.Logger.Log(ex.Message); return; } + } - // Using recyclable streams here should dramatically reduce the overhead required - using (MemoryStream inStream = MemoryStreamPool.Shared.GetStream("inStream", imageBuffer, 0, imageBuffer.Length)) - { - // Process the Image. Use a recyclable stream here to reduce the allocations - MemoryStream outStream = MemoryStreamPool.Shared.GetStream(); + if (imageBuffer == null) + { + return; + } - if (!string.IsNullOrWhiteSpace(queryString)) + // Using recyclable streams here should dramatically reduce the overhead required + using (MemoryStream inStream = MemoryStreamPool.Shared.GetStream("inStream", imageBuffer, 0, imageBuffer.Length)) + { + // Process the Image. Use a recyclable stream here to reduce the allocations + MemoryStream outStream = MemoryStreamPool.Shared.GetStream(); + + if (!string.IsNullOrWhiteSpace(queryString)) + { + if (processing) { - if (processing) - { - // Process the image. - bool exif = preserveExifMetaData != null && preserveExifMetaData.Value; - MetaDataMode metaMode = !exif ? MetaDataMode.None : metaDataMode.Value; - bool gamma = fixGamma != null && fixGamma.Value; + // Process the image. + bool exif = preserveExifMetaData != null && preserveExifMetaData.Value; + MetaDataMode metaMode = !exif ? MetaDataMode.None : metaDataMode.Value; + bool gamma = fixGamma != null && fixGamma.Value; - try - { - using (var imageFactory = new ImageFactory(metaMode, gamma) { AnimationProcessMode = mode }) - { - imageFactory.Load(inStream).AutoProcess(processors).Save(outStream); - mimeType = imageFactory.CurrentImageFormat.MimeType; - } - } - catch (ImageFormatException) + try + { + using (var imageFactory = new ImageFactory(metaMode, gamma) { AnimationProcessMode = mode }) { - ImageProcessorBootstrapper.Instance.Logger.Log($"Request {url} is not a valid image."); - return; + imageFactory.Load(inStream).AutoProcess(processors).Save(outStream); + mimeType = imageFactory.CurrentImageFormat.MimeType; } } - else + catch (ImageFormatException) { - // We're cache-busting. Allow the value to be cached - await inStream.CopyToAsync(outStream).ConfigureAwait(false); - mimeType = FormatUtilities.GetFormat(outStream).MimeType; + ImageProcessorBootstrapper.Instance.Logger.Log($"Request {url} is not a valid image."); + return; } } else { - // We're capturing all requests. + // We're cache-busting. Allow the value to be cached await inStream.CopyToAsync(outStream).ConfigureAwait(false); mimeType = FormatUtilities.GetFormat(outStream).MimeType; } + } + else + { + // We're capturing all requests. + await inStream.CopyToAsync(outStream).ConfigureAwait(false); + mimeType = FormatUtilities.GetFormat(outStream).MimeType; + } - // Fire the post processing event. - EventHandler handler = OnPostProcessing; - if (handler != null) + // Fire the post processing event. + EventHandler handler = OnPostProcessing; + if (handler != null) + { + string extension = Path.GetExtension(cachedPath); + var args = new PostProcessingEventArgs { - string extension = Path.GetExtension(cachedPath); - var args = new PostProcessingEventArgs - { - Context = context, - ImageStream = outStream, - ImageExtension = extension - }; + Context = context, + ImageStream = outStream, + ImageExtension = extension + }; - handler(this, args); - outStream = args.ImageStream; - } + handler(this, args); + outStream = args.ImageStream; + } - // Add to the cache. - await this.imageCache.AddImageToCacheAsync(outStream, mimeType).ConfigureAwait(false); + // Add to the cache. + await this.imageCache.AddImageToCacheAsync(outStream, mimeType).ConfigureAwait(false); - // Cleanup - outStream.Dispose(); - } + // Cleanup + outStream.Dispose(); + } - // Store the response type and cache dependency in the context for later retrieval. - context.Items[CachedResponseTypeKey] = mimeType; - bool isFileCached = new Uri(cachedPath).IsFile; + // Store the response type and cache dependency in the context for later retrieval. + context.Items[CachedResponseTypeKey] = mimeType; + bool isFileCached = new Uri(cachedPath).IsFile; - if (isFileLocal) + if (isFileLocal) + { + if (isFileCached) { - if (isFileCached) - { - // Some services might only provide filename so we can't monitor for the browser. - context.Items[CachedResponseFileDependency] = Path.GetFileName(requestPath) == requestPath - ? new[] { cachedPath } - : new[] { requestPath, cachedPath }; - } - else - { - context.Items[CachedResponseFileDependency] = Path.GetFileName(requestPath) == requestPath - ? null - : new[] { requestPath }; - } + // Some services might only provide filename so we can't monitor for the browser. + context.Items[CachedResponseFileDependency] = Path.GetFileName(requestPath) == requestPath + ? new[] { cachedPath } + : new[] { requestPath, cachedPath }; } - else if (isFileCached) + else { - context.Items[CachedResponseFileDependency] = new[] { cachedPath }; + context.Items[CachedResponseFileDependency] = Path.GetFileName(requestPath) == requestPath + ? null + : new[] { requestPath }; } } + else if (isFileCached) + { + context.Items[CachedResponseFileDependency] = new[] { cachedPath }; + } - // The cached file is valid so just rewrite the path. + // The cached file has been saved so now rewrite the path. this.imageCache.RewritePath(context); // Redirect if not a locally store file. @@ -694,11 +710,8 @@ private async Task ProcessImageAsync(HttpContext context) context.ApplicationInstance.CompleteRequest(); } - if (isNewOrUpdated) - { - // Trim the cache. - await this.imageCache.TrimCacheAsync().ConfigureAwait(false); - } + // Trim the cache. + await this.imageCache.TrimCacheAsync().ConfigureAwait(false); } } diff --git a/src/ImageProcessor.Web/ImageProcessor.Web.csproj b/src/ImageProcessor.Web/ImageProcessor.Web.csproj index df05f493d..720e0c83c 100644 --- a/src/ImageProcessor.Web/ImageProcessor.Web.csproj +++ b/src/ImageProcessor.Web/ImageProcessor.Web.csproj @@ -24,6 +24,7 @@ prompt 4 bin\Debug\ImageProcessor.Web.xml + 7.3 pdbonly @@ -33,6 +34,7 @@ prompt 4 bin\Release\ImageProcessor.Web.xml + 7.3 @@ -54,7 +56,6 @@ - diff --git a/tests/ImageProcessor.Web.UnitTests/Caching/AsyncKeyLockTests.cs b/tests/ImageProcessor.Web.UnitTests/Caching/AsyncKeyLockTests.cs index b9e1b161f..2e9d8f50d 100644 --- a/tests/ImageProcessor.Web.UnitTests/Caching/AsyncKeyLockTests.cs +++ b/tests/ImageProcessor.Web.UnitTests/Caching/AsyncKeyLockTests.cs @@ -1,5 +1,4 @@ using System.Linq; -using System.Threading; using System.Threading.Tasks; using ImageProcessor.Web.Caching; using NUnit.Framework; @@ -9,9 +8,9 @@ namespace ImageProcessor.Web.UnitTests.Caching public class AsyncKeyLockTests { private readonly AsyncKeyLock asyncKeyLock = new AsyncKeyLock(); - const string AsyncKey = "ASYNC_KEY"; - const string AsyncKey1 = "ASYNC_KEY1"; - const string AsyncKey2 = "ASYNC_KEY2"; + private const string AsyncKey = "ASYNC_KEY"; + private const string AsyncKey1 = "ASYNC_KEY1"; + private const string AsyncKey2 = "ASYNC_KEY2"; [Test] public void AsyncLockCanLockByKey() @@ -21,13 +20,13 @@ public void AsyncLockCanLockByKey() int index = 0; Task[] tasks = Enumerable.Range(0, 5).Select(i => Task.Run(async () => { - using (await this.asyncKeyLock.LockAsync(AsyncKey)) + using (await this.asyncKeyLock.WriterLockAsync(AsyncKey).ConfigureAwait(false)) { if (i == 0) { entered = true; zeroEntered = true; - Thread.Sleep(3000); + await Task.Delay(3000).ConfigureAwait(false); entered = false; } else if (zeroEntered) @@ -52,13 +51,13 @@ public void AsyncLockAllowsDifferentKeysToRun() int index = 0; Task[] tasks = Enumerable.Range(0, 5).Select(i => Task.Run(async () => { - using (await this.asyncKeyLock.LockAsync(i > 0 ? AsyncKey2 : AsyncKey1)) + using (await this.asyncKeyLock.WriterLockAsync(i > 0 ? AsyncKey2 : AsyncKey1).ConfigureAwait(false)) { if (i == 0) { entered = true; zeroEntered = true; - Thread.Sleep(2000); + await Task.Delay(2000).ConfigureAwait(false); entered = false; } else if (zeroEntered) diff --git a/tests/ImageProcessor.Web.UnitTests/Caching/DoormanPoolTests.cs b/tests/ImageProcessor.Web.UnitTests/Caching/DoormanPoolTests.cs deleted file mode 100644 index ee4152bd4..000000000 --- a/tests/ImageProcessor.Web.UnitTests/Caching/DoormanPoolTests.cs +++ /dev/null @@ -1,51 +0,0 @@ -using System; -using ImageProcessor.Web.Caching; -using NUnit.Framework; - -namespace ImageProcessor.Web.UnitTests.Caching -{ - public class DoormanPoolTests - { - [Test] - public void RentingGivesDifferentInstances() - { - Doorman first = DoormanPool.Rent(); - Doorman second = DoormanPool.Rent(); - - Assert.AreNotSame(first, second); - - DoormanPool.Return(first); - DoormanPool.Return(second); - } - - [Test] - public void DoormanPoolReusesItems() - { - int initialCount = DoormanPool.Count(); - Doorman first = DoormanPool.Rent(); - - int currentCount = DoormanPool.Count(); - if (currentCount > 0) - { - Assert.AreEqual(initialCount - 1, currentCount); - DoormanPool.Return(first); - Assert.AreEqual(initialCount, DoormanPool.Count()); - } - else - { - Assert.AreEqual(0, currentCount); - DoormanPool.Return(first); - Assert.AreEqual(initialCount + 1, DoormanPool.Count()); - } - } - - [Test] - public void CallingReturnWithNullThrows() - { - Assert.Throws(() => - { - DoormanPool.Return(null); - }); - } - } -} \ No newline at end of file diff --git a/tests/ImageProcessor.Web.UnitTests/Caching/DoormanTests.cs b/tests/ImageProcessor.Web.UnitTests/Caching/DoormanTests.cs deleted file mode 100644 index a1f472f75..000000000 --- a/tests/ImageProcessor.Web.UnitTests/Caching/DoormanTests.cs +++ /dev/null @@ -1,29 +0,0 @@ -using ImageProcessor.Web.Caching; -using NUnit.Framework; - -namespace ImageProcessor.Web.UnitTests.Caching -{ - public class DoormanTests - { - [Test] - public void DoormanInitializesSemaphoreSlim() - { - var doorman = new Doorman(); - Assert.NotNull(doorman.Semaphore); - Assert.AreEqual(1, doorman.Semaphore.CurrentCount); - } - - [Test] - public void DoormanResetsRefCounter() - { - var doorman = new Doorman(); - Assert.AreEqual(1, doorman.RefCount); - doorman.RefCount--; - - Assert.AreEqual(0, doorman.RefCount); - - doorman.Reset(); - Assert.AreEqual(1, doorman.RefCount); - } - } -} \ No newline at end of file diff --git a/tests/ImageProcessor.Web.UnitTests/ImageProcessor.Web.UnitTests.csproj b/tests/ImageProcessor.Web.UnitTests/ImageProcessor.Web.UnitTests.csproj index 937bdd886..4ff1ce2f1 100644 --- a/tests/ImageProcessor.Web.UnitTests/ImageProcessor.Web.UnitTests.csproj +++ b/tests/ImageProcessor.Web.UnitTests/ImageProcessor.Web.UnitTests.csproj @@ -24,6 +24,7 @@ DEBUG;TRACE prompt 4 + 7.3 pdbonly @@ -32,6 +33,7 @@ TRACE prompt 4 + 7.3 @@ -50,8 +52,6 @@ - - From db10b82ac3fb0a6f0f413e36d4a6730c2e24c115 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Sun, 10 Feb 2019 20:16:27 +1100 Subject: [PATCH 109/113] Only use regex when original is not null. Fix #710 --- .../HttpModules/ImageProcessingModule.cs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/ImageProcessor.Web/HttpModules/ImageProcessingModule.cs b/src/ImageProcessor.Web/HttpModules/ImageProcessingModule.cs index ee3e22bec..8bd5e21b8 100644 --- a/src/ImageProcessor.Web/HttpModules/ImageProcessingModule.cs +++ b/src/ImageProcessor.Web/HttpModules/ImageProcessingModule.cs @@ -488,7 +488,14 @@ private async Task ProcessImageAsync(HttpContext context) // Re-assign based on event handlers queryString = validatingArgs.QueryString; - url = Regex.Replace(url, originalQueryString, queryString, RegexOptions.IgnoreCase); + if (string.IsNullOrWhiteSpace(originalQueryString) && !string.IsNullOrWhiteSpace(queryString)) + { + url = url + "?" + queryString; + } + else + { + url = Regex.Replace(url, originalQueryString, queryString, RegexOptions.IgnoreCase); + } // Map the request path if file local. bool isFileLocal = currentService.IsFileLocalService; From 36ef48e1a34623174c01a6d4ff9a83a0b894aab7 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Sun, 10 Feb 2019 22:42:02 +1100 Subject: [PATCH 110/113] Add missed conditional. Thanks Dirk. --- src/ImageProcessor.Web/HttpModules/ImageProcessingModule.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ImageProcessor.Web/HttpModules/ImageProcessingModule.cs b/src/ImageProcessor.Web/HttpModules/ImageProcessingModule.cs index 8bd5e21b8..65df9e4dc 100644 --- a/src/ImageProcessor.Web/HttpModules/ImageProcessingModule.cs +++ b/src/ImageProcessor.Web/HttpModules/ImageProcessingModule.cs @@ -492,7 +492,7 @@ private async Task ProcessImageAsync(HttpContext context) { url = url + "?" + queryString; } - else + else if (!string.IsNullOrWhiteSpace(queryString)) { url = Regex.Replace(url, originalQueryString, queryString, RegexOptions.IgnoreCase); } From da5bca66e33dd7df408257ecc07b75564419c160 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Sun, 10 Feb 2019 22:45:45 +1100 Subject: [PATCH 111/113] Make the bootstrapper log finder actually work. --- .../Configuration/ImageProcessorBootstrapper.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ImageProcessor/Configuration/ImageProcessorBootstrapper.cs b/src/ImageProcessor/Configuration/ImageProcessorBootstrapper.cs index 9266a8c73..3883666c2 100644 --- a/src/ImageProcessor/Configuration/ImageProcessorBootstrapper.cs +++ b/src/ImageProcessor/Configuration/ImageProcessorBootstrapper.cs @@ -120,8 +120,8 @@ private void LoadLogger() .Where(t => type.IsAssignableFrom(t) && t.IsClass && !t.IsAbstract) .ToList(); - // There's more than one so load the first that is not our default. - if (availableTypes.Count > 1) + // Load the first that is not our default. + if (availableTypes.Count > 0) { this.Logger = availableTypes.Where(l => l != typeof(DefaultLogger)) .Select(f => (Activator.CreateInstance(f) as ILogger)) From e2da3a8c8b63716ff334ec6a7cbe00371eb79f12 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Mon, 11 Feb 2019 22:57:39 +1100 Subject: [PATCH 112/113] Version Bump --- build/NuSpecs/ImageProcessor.Plugins.Cair.nuspec | 2 +- build/NuSpecs/ImageProcessor.Plugins.WebP.nuspec | 2 +- build/NuSpecs/ImageProcessor.Web.Config.nuspec | 2 +- ...ageProcessor.Web.Plugins.AmazonS3Cache.nuspec | 4 ++-- ...geProcessor.Web.Plugins.AzureBlobCache.nuspec | 7 ++++--- .../ImageProcessor.Web.PostProcessor.nuspec | 2 +- build/NuSpecs/ImageProcessor.Web.nuspec | 2 +- build/build.ps1 | 16 ++++++++-------- .../imageprocessor/security.config.transform | 11 +++++++++++ 9 files changed, 30 insertions(+), 18 deletions(-) create mode 100644 build/content/ImageProcessor.Web.Plugins.AzureBlobCache/config/imageprocessor/security.config.transform diff --git a/build/NuSpecs/ImageProcessor.Plugins.Cair.nuspec b/build/NuSpecs/ImageProcessor.Plugins.Cair.nuspec index c2770d024..fd1d97b2d 100644 --- a/build/NuSpecs/ImageProcessor.Plugins.Cair.nuspec +++ b/build/NuSpecs/ImageProcessor.Plugins.Cair.nuspec @@ -23,7 +23,7 @@ Image Resize Crop Rotate Quality Watermark Gif Jpg Jpeg Bitmap Png Tiff Cair Seam Carving - + diff --git a/build/NuSpecs/ImageProcessor.Plugins.WebP.nuspec b/build/NuSpecs/ImageProcessor.Plugins.WebP.nuspec index df2cc9f71..8f2504417 100644 --- a/build/NuSpecs/ImageProcessor.Plugins.WebP.nuspec +++ b/build/NuSpecs/ImageProcessor.Plugins.WebP.nuspec @@ -23,7 +23,7 @@ Image Resize Crop Rotate Quality Watermark Gif Jpg Jpeg Bitmap Png Tiff WebP - + diff --git a/build/NuSpecs/ImageProcessor.Web.Config.nuspec b/build/NuSpecs/ImageProcessor.Web.Config.nuspec index 749f68098..382a8e19f 100644 --- a/build/NuSpecs/ImageProcessor.Web.Config.nuspec +++ b/build/NuSpecs/ImageProcessor.Web.Config.nuspec @@ -23,7 +23,7 @@ Image Resize Crop Rotate Quality Watermark Gif Jpg Jpeg Bitmap Png Tiff ASP Cache EXIF - + diff --git a/build/NuSpecs/ImageProcessor.Web.Plugins.AmazonS3Cache.nuspec b/build/NuSpecs/ImageProcessor.Web.Plugins.AmazonS3Cache.nuspec index 224411d95..7c7ed95fb 100644 --- a/build/NuSpecs/ImageProcessor.Web.Plugins.AmazonS3Cache.nuspec +++ b/build/NuSpecs/ImageProcessor.Web.Plugins.AmazonS3Cache.nuspec @@ -23,8 +23,8 @@ Image Resize Crop Rotate Quality Watermark Gif Jpg Jpeg Bitmap Png Tiff Amazon S3 Cache Asp - - + + diff --git a/build/NuSpecs/ImageProcessor.Web.Plugins.AzureBlobCache.nuspec b/build/NuSpecs/ImageProcessor.Web.Plugins.AzureBlobCache.nuspec index 653430df0..305407092 100644 --- a/build/NuSpecs/ImageProcessor.Web.Plugins.AzureBlobCache.nuspec +++ b/build/NuSpecs/ImageProcessor.Web.Plugins.AzureBlobCache.nuspec @@ -10,7 +10,7 @@ https://raw.githubusercontent.com/JimBobSquarePants/ImageProcessor/develop/build/icons/imageprocessor-logo-128.png false - Adds a self cleaning cache to ImageProcessor.Web that uses Azure Blob Containers to store processed images. + Adds an image service and cache to ImageProcessor.Web that uses Azure Blob Containers. If you use ImageProcessor.Web please get in touch via my twitter @james_m_south @@ -23,8 +23,8 @@ Image Resize Crop Rotate Quality Watermark Gif Jpg Jpeg Bitmap Png Tiff Azure Cache Asp - - + + @@ -36,6 +36,7 @@ + diff --git a/build/NuSpecs/ImageProcessor.Web.PostProcessor.nuspec b/build/NuSpecs/ImageProcessor.Web.PostProcessor.nuspec index 3001bc341..fe85f6bd2 100644 --- a/build/NuSpecs/ImageProcessor.Web.PostProcessor.nuspec +++ b/build/NuSpecs/ImageProcessor.Web.PostProcessor.nuspec @@ -23,7 +23,7 @@ Image Resize Crop Rotate Quality Watermark Gif Jpg Jpeg Bitmap Png Tiff ASP Cache EXIF - + diff --git a/build/NuSpecs/ImageProcessor.Web.nuspec b/build/NuSpecs/ImageProcessor.Web.nuspec index 7ac97fb82..ab153e5f7 100644 --- a/build/NuSpecs/ImageProcessor.Web.nuspec +++ b/build/NuSpecs/ImageProcessor.Web.nuspec @@ -25,7 +25,7 @@ Image Resize Crop Rotate Quality Watermark Gif Jpg Jpeg Bitmap Png Tiff ASP Cache EXIF - + diff --git a/build/build.ps1 b/build/build.ps1 index 92baa608f..732280f30 100644 --- a/build/build.ps1 +++ b/build/build.ps1 @@ -8,7 +8,7 @@ $nugetOutput = Join-Path $binPath "NuGets"; # Projects. Nuget Dependencies are handled in the nuspec files themselves and depend on the Major.Minor.Build number only. $imageprocessor = @{ name = "ImageProcessor" - version = "2.6.2.${buildNumber}" + version = "2.7.0.${buildNumber}" folder = Join-Path $buildPath "src\ImageProcessor" output = Join-Path $binPath "ImageProcessor\lib\net452" csproj = "ImageProcessor.csproj" @@ -17,7 +17,7 @@ $imageprocessor = @{ $imageProcessorPluginsCair = @{ name = "ImageProcessor.Plugins.Cair" - version = "1.1.0.${buildNumber}" + version = "1.2.0.${buildNumber}" folder = Join-Path $buildPath "src\ImageProcessor.Plugins.Cair" output = Join-Path $binPath "ImageProcessor.Plugins.Cair\lib\net452" csproj = "ImageProcessor.Plugins.Cair.csproj" @@ -26,7 +26,7 @@ $imageProcessorPluginsCair = @{ $imageProcessorPluginsWebP = @{ name = "ImageProcessor.Plugins.WebP" - version = "1.1.0.${buildNumber}" + version = "1.2.0.${buildNumber}" folder = Join-Path $buildPath "src\ImageProcessor.Plugins.WebP" output = Join-Path $binPath "ImageProcessor.Plugins.WebP\lib\net452" csproj = "ImageProcessor.Plugins.WebP.csproj" @@ -35,7 +35,7 @@ $imageProcessorPluginsWebP = @{ $imageprocessorWeb = @{ name = "ImageProcessor.Web" - version = "4.9.4.${buildNumber}" + version = "4.10.0.${buildNumber}" folder = Join-Path $buildPath "src\ImageProcessor.Web" output = Join-Path $binPath "ImageProcessor.Web\lib\net452" csproj = "ImageProcessor.Web.csproj" @@ -43,13 +43,13 @@ $imageprocessorWeb = @{ }; $imageprocessorWebConfig = @{ - version = "2.4.1.${buildNumber}" + version = "2.5.0.${buildNumber}" nuspec = Join-Path $nuspecsPath "ImageProcessor.Web.Config.nuspec" }; $imageProcessorWebPluginsAzureBlobCache = @{ name = "ImageProcessor.Web.Plugins.AzureBlobCache" - version = "1.4.3.${buildNumber}" + version = "1.5.0.${buildNumber}" folder = Join-Path $buildPath "src\ImageProcessor.Web.Plugins.AzureBlobCache" output = Join-Path $binPath "ImageProcessor.Web.Plugins.AzureBlobCache\lib\net452" csproj = "ImageProcessor.Web.Plugins.AzureBlobCache.csproj" @@ -57,7 +57,7 @@ $imageProcessorWebPluginsAzureBlobCache = @{ }; $imageProcessorWebPluginsAmazonS3Cache = @{ - name = "ImageProcessor.Web.Plugins.AzureBlobCache" + name = "ImageProcessor.Web.Plugins.AmazonS3Cache" version = "1.0.0.${buildNumber}" folder = Join-Path $buildPath "src\ImageProcessor.Web.Plugins.AmazonS3Cache" output = Join-Path $binPath "ImageProcessor.Web.Plugins.AmazonS3Cache\lib\net452" @@ -67,7 +67,7 @@ $imageProcessorWebPluginsAmazonS3Cache = @{ $imageProcessorWebPluginsPostProcessor = @{ name = "ImageProcessor.Web.Plugins.PostProcessor" - version = "1.3.2.${buildNumber}" + version = "1.4.0.${buildNumber}" folder = Join-Path $buildPath "src\ImageProcessor.Web.Plugins.PostProcessor" output = Join-Path $binPath "ImageProcessor.Web.Plugins.PostProcessor\lib\net452" csproj = "ImageProcessor.Web.Plugins.PostProcessor.csproj" diff --git a/build/content/ImageProcessor.Web.Plugins.AzureBlobCache/config/imageprocessor/security.config.transform b/build/content/ImageProcessor.Web.Plugins.AzureBlobCache/config/imageprocessor/security.config.transform new file mode 100644 index 000000000..3fa5dc19e --- /dev/null +++ b/build/content/ImageProcessor.Web.Plugins.AzureBlobCache/config/imageprocessor/security.config.transform @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file From bab08e8f370989616d2283de1921cd41e3f04d41 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Mon, 11 Feb 2019 23:46:00 +1100 Subject: [PATCH 113/113] Update Readme. skip ci --- README.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index e0902a657..e0574adfe 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,10 @@ It's fast, extensible, easy to use, comes bundled with some great features and i For full documentation please see [http://imageprocessor.org/](http://imageprocessor.org/) +## Contributing to ImageProcessor +### ImageProcessor is in Soft Archive Mode. +Focus for the ImageProcessor libraries has switched to a new library [**ImageSharp**](https://github.com/SixLabors/ImageSharp). +As such, no new features will be added to this library. Bug fixes will continue to be added and only via PR. ### Latest Releases | Library | Version | @@ -28,11 +32,6 @@ For full documentation please see [http://imageprocessor.org/](http://imageproce | **ImageProcessor.Web.Plugins.AzureBlobCache** | [![NuGet](https://buildstats.info/nuget/ImageProcessor.Web.Plugins.AzureBlobCache)](https://www.nuget.org/packages/ImageProcessor.Web.Plugins.AzureBlobCache) | | **ImageProcessor.Web.PostProcessor** | [![NuGet](https://buildstats.info/nuget/ImageProcessor.Web.PostProcessor)](https://www.nuget.org/packages/ImageProcessor.Web.PostProcessor) | - -## Contributing to ImageProcessor -**ImageProcessor is in maintainance mode only**. Focus for the ImageProcessor libraries has switched to a new library [**ImageSharp**](https://github.com/SixLabors/ImageSharp). -As such, no new features will be added to this library. Bug fixes will continue to be added. - ## Documentation ImageProcessor's documentation, included in this repo in the gh-pages branch, is built with [Jekyll](http://jekyllrb.com) and publicly hosted on GitHub Pages at . The docs may also be run locally.