From 51e964dae394ae4a211482d562dbc28e79c00c3c Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Tue, 29 Jul 2014 23:31:35 -0400 Subject: [PATCH] support channels with dlna --- .../Playback/BaseStreamingService.cs | 2 +- .../Playback/Hls/DynamicHlsService.cs | 2 +- .../Playback/Hls/VideoHlsService.cs | 2 +- .../Playback/Progressive/VideoService.cs | 2 +- .../Tasks/ReloadLoggerFileTask.cs | 2 +- MediaBrowser.Common/Net/IServerManager.cs | 6 - .../Channels/IChannelManager.cs | 16 ++ .../Entities/BasePluginFolder.cs | 2 +- MediaBrowser.Controller/Entities/UserView.cs | 31 +++ MediaBrowser.Controller/Library/TVUtils.cs | 89 ++++++- .../Channels/DlnaChannelFactory.cs | 23 +- .../ContentDirectory/ContentDirectory.cs | 11 +- .../ContentDirectory/ControlHandler.cs | 220 +++++++++++++----- MediaBrowser.Dlna/Didl/DidlBuilder.cs | 10 +- MediaBrowser.Dlna/Images/logo120.jpg | Bin 6745 -> 8879 bytes MediaBrowser.Dlna/Images/logo120.png | Bin 4124 -> 13621 bytes MediaBrowser.Dlna/Images/logo240.jpg | Bin 0 -> 22073 bytes MediaBrowser.Dlna/Images/logo240.png | Bin 0 -> 33252 bytes MediaBrowser.Dlna/Images/logo48.jpg | Bin 2484 -> 2997 bytes MediaBrowser.Dlna/Images/logo48.png | Bin 1661 -> 3837 bytes MediaBrowser.Dlna/MediaBrowser.Dlna.csproj | 4 + MediaBrowser.Dlna/PlayTo/Device.cs | 4 +- MediaBrowser.Dlna/PlayTo/PlayToManager.cs | 69 +++--- MediaBrowser.Dlna/Profiles/DefaultProfile.cs | 2 + MediaBrowser.Dlna/Profiles/Xml/Android.xml | 2 +- MediaBrowser.Dlna/Profiles/Xml/Default.xml | 2 +- MediaBrowser.Dlna/Profiles/Xml/Denon AVR.xml | 2 +- .../Profiles/Xml/LG Smart TV.xml | 2 +- .../Profiles/Xml/Linksys DMA2100.xml | 2 +- .../Profiles/Xml/MediaMonkey.xml | 2 +- .../Profiles/Xml/Panasonic Viera.xml | 2 +- .../Profiles/Xml/Sony Blu-ray Player 2013.xml | 2 +- .../Profiles/Xml/Sony Blu-ray Player.xml | 2 +- .../Profiles/Xml/Sony Bravia (2010).xml | 2 +- .../Profiles/Xml/Sony Bravia (2011).xml | 2 +- .../Profiles/Xml/Sony Bravia (2012).xml | 2 +- .../Profiles/Xml/Sony Bravia (2013).xml | 2 +- .../Profiles/Xml/Sony PlayStation 3.xml | 2 +- MediaBrowser.Dlna/Profiles/Xml/WDTV Live.xml | 2 +- .../Profiles/Xml/Windows 8 RT.xml | 2 +- .../Profiles/Xml/Windows Phone.xml | 2 +- MediaBrowser.Dlna/Profiles/Xml/Xbox 360.xml | 2 +- MediaBrowser.Dlna/Profiles/Xml/Xbox One.xml | 2 +- MediaBrowser.Dlna/Profiles/Xml/foobar2000.xml | 2 +- .../Server/DescriptionXmlBuilder.cs | 18 ++ MediaBrowser.Dlna/Ssdp/SsdpHandler.cs | 9 +- MediaBrowser.Model/Dlna/SortCriteria.cs | 8 +- .../Channels/ChannelDownloadScheduledTask.cs | 2 +- .../Channels/ChannelManager.cs | 77 ++++-- .../EntryPoints/ExternalPortForwarding.cs | 5 - .../EntryPoints/UdpServerEntryPoint.cs | 7 +- .../Resolvers/Audio/MusicAlbumResolver.cs | 43 ++-- .../Resolvers/Audio/MusicArtistResolver.cs | 8 +- .../Library/Resolvers/TV/SeriesResolver.cs | 18 +- .../Library/UserViewManager.cs | 42 +++- .../LiveTv/CleanDatabaseScheduledTask.cs | 2 +- .../Localization/JavaScript/javascript.json | 1 - .../Localization/JavaScript/kk.json | 8 +- .../Localization/JavaScript/pt_PT.json | 2 +- .../Localization/JavaScript/ru.json | 6 +- .../Localization/Server/ar.json | 12 +- .../Localization/Server/ca.json | 12 +- .../Localization/Server/cs.json | 12 +- .../Localization/Server/da.json | 12 +- .../Localization/Server/de.json | 12 +- .../Localization/Server/el.json | 12 +- .../Localization/Server/en_GB.json | 12 +- .../Localization/Server/en_US.json | 12 +- .../Localization/Server/es.json | 12 +- .../Localization/Server/es_MX.json | 14 +- .../Localization/Server/fr.json | 12 +- .../Localization/Server/he.json | 12 +- .../Localization/Server/it.json | 12 +- .../Localization/Server/kk.json | 26 ++- .../Localization/Server/ko.json | 12 +- .../Localization/Server/ms.json | 12 +- .../Localization/Server/nb.json | 12 +- .../Localization/Server/nl.json | 46 ++-- .../Localization/Server/pl.json | 12 +- .../Localization/Server/pt_BR.json | 22 +- .../Localization/Server/pt_PT.json | 44 ++-- .../Localization/Server/ru.json | 28 ++- .../Localization/Server/sv.json | 12 +- .../Localization/Server/vi.json | 12 +- .../Localization/Server/zh_TW.json | 12 +- .../ServerManager/ServerManager.cs | 9 - .../Session/WebSocketController.cs | 25 ++ .../Udp/UdpServer.cs | 14 +- .../Native/ServerAuthorization.cs | 2 +- .../ApplicationHost.cs | 14 +- .../FFMpeg/FFMpegDownloadInfo.cs | 8 +- .../FFMpeg/FFMpegDownloader.cs | 8 +- MediaBrowser.Tests/Resolvers/TvUtilTests.cs | 2 + 93 files changed, 957 insertions(+), 326 deletions(-) create mode 100644 MediaBrowser.Dlna/Images/logo240.jpg create mode 100644 MediaBrowser.Dlna/Images/logo240.png diff --git a/MediaBrowser.Api/Playback/BaseStreamingService.cs b/MediaBrowser.Api/Playback/BaseStreamingService.cs index 5cae4c3f7f..df85ca3cbc 100644 --- a/MediaBrowser.Api/Playback/BaseStreamingService.cs +++ b/MediaBrowser.Api/Playback/BaseStreamingService.cs @@ -626,7 +626,7 @@ namespace MediaBrowser.Api.Playback /// The state. /// The output video codec. /// System.String. - protected string GetInternalGraphicalSubtitleParam(StreamState state, string outputVideoCodec) + protected string GetGraphicalSubtitleParam(StreamState state, string outputVideoCodec) { var outputSizeParam = string.Empty; diff --git a/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs b/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs index fc1c627e94..ccaa918ec7 100644 --- a/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs +++ b/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs @@ -522,7 +522,7 @@ namespace MediaBrowser.Api.Playback.Hls // This is for internal graphical subs if (hasGraphicalSubs) { - args += GetInternalGraphicalSubtitleParam(state, codec); + args += GetGraphicalSubtitleParam(state, codec); } return args; diff --git a/MediaBrowser.Api/Playback/Hls/VideoHlsService.cs b/MediaBrowser.Api/Playback/Hls/VideoHlsService.cs index 28c0219fce..1dffa54114 100644 --- a/MediaBrowser.Api/Playback/Hls/VideoHlsService.cs +++ b/MediaBrowser.Api/Playback/Hls/VideoHlsService.cs @@ -186,7 +186,7 @@ namespace MediaBrowser.Api.Playback.Hls // This is for internal graphical subs if (hasGraphicalSubs) { - args += GetInternalGraphicalSubtitleParam(state, codec); + args += GetGraphicalSubtitleParam(state, codec); } return args; diff --git a/MediaBrowser.Api/Playback/Progressive/VideoService.cs b/MediaBrowser.Api/Playback/Progressive/VideoService.cs index bedacc0d29..cdaa99130b 100644 --- a/MediaBrowser.Api/Playback/Progressive/VideoService.cs +++ b/MediaBrowser.Api/Playback/Progressive/VideoService.cs @@ -167,7 +167,7 @@ namespace MediaBrowser.Api.Playback.Progressive // This is for internal graphical subs if (hasGraphicalSubs) { - args += GetInternalGraphicalSubtitleParam(state, codec); + args += GetGraphicalSubtitleParam(state, codec); } return args; diff --git a/MediaBrowser.Common.Implementations/ScheduledTasks/Tasks/ReloadLoggerFileTask.cs b/MediaBrowser.Common.Implementations/ScheduledTasks/Tasks/ReloadLoggerFileTask.cs index 38b6b4ad68..78f60632fa 100644 --- a/MediaBrowser.Common.Implementations/ScheduledTasks/Tasks/ReloadLoggerFileTask.cs +++ b/MediaBrowser.Common.Implementations/ScheduledTasks/Tasks/ReloadLoggerFileTask.cs @@ -94,7 +94,7 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks.Tasks public bool IsHidden { - get { return false; } + get { return true; } } public bool IsEnabled diff --git a/MediaBrowser.Common/Net/IServerManager.cs b/MediaBrowser.Common/Net/IServerManager.cs index f6ac0ab68a..84e5785799 100644 --- a/MediaBrowser.Common/Net/IServerManager.cs +++ b/MediaBrowser.Common/Net/IServerManager.cs @@ -10,12 +10,6 @@ namespace MediaBrowser.Common.Net /// public interface IServerManager : IDisposable { - /// - /// Gets the web socket port number. - /// - /// The web socket port number. - int WebSocketPortNumber { get; } - /// /// Starts this instance. /// diff --git a/MediaBrowser.Controller/Channels/IChannelManager.cs b/MediaBrowser.Controller/Channels/IChannelManager.cs index 744eab96e0..252e2aee53 100644 --- a/MediaBrowser.Controller/Channels/IChannelManager.cs +++ b/MediaBrowser.Controller/Channels/IChannelManager.cs @@ -43,6 +43,14 @@ namespace MediaBrowser.Controller.Channels /// Channel. Channel GetChannel(string id); + /// + /// Gets the channels internal. + /// + /// The query. + /// The cancellation token. + /// Task<QueryResult<Channel>>. + Task> GetChannelsInternal(ChannelQuery query, CancellationToken cancellationToken); + /// /// Gets the channels. /// @@ -75,6 +83,14 @@ namespace MediaBrowser.Controller.Channels /// Task{QueryResult{BaseItemDto}}. Task> GetChannelItems(ChannelItemQuery query, CancellationToken cancellationToken); + /// + /// Gets the channel items internal. + /// + /// The query. + /// The cancellation token. + /// Task<QueryResult<BaseItem>>. + Task> GetChannelItemsInternal(ChannelItemQuery query, CancellationToken cancellationToken); + /// /// Gets the cached channel item media sources. /// diff --git a/MediaBrowser.Controller/Entities/BasePluginFolder.cs b/MediaBrowser.Controller/Entities/BasePluginFolder.cs index e1383923f6..fa2b49a60b 100644 --- a/MediaBrowser.Controller/Entities/BasePluginFolder.cs +++ b/MediaBrowser.Controller/Entities/BasePluginFolder.cs @@ -14,7 +14,7 @@ namespace MediaBrowser.Controller.Entities public virtual string CollectionType { - get { return Model.Entities.CollectionType.BoxSets; } + get { return null; } } } } diff --git a/MediaBrowser.Controller/Entities/UserView.cs b/MediaBrowser.Controller/Entities/UserView.cs index 619a497f5f..be426d99eb 100644 --- a/MediaBrowser.Controller/Entities/UserView.cs +++ b/MediaBrowser.Controller/Entities/UserView.cs @@ -1,6 +1,7 @@ using MediaBrowser.Controller.Entities.Movies; using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Model.Entities; +using MoreLinq; using System; using System.Collections.Generic; using System.Linq; @@ -29,6 +30,10 @@ namespace MediaBrowser.Controller.Entities case CollectionType.Trailers: return mediaFolders.SelectMany(i => i.GetRecursiveChildren(user, includeLinkedChildren)) .OfType(); + case CollectionType.Movies: + return mediaFolders.SelectMany(i => i.GetRecursiveChildren(user, includeLinkedChildren)) + .Where(i => i is Movie || i is BoxSet) + .DistinctBy(i => i.Id); default: return mediaFolders.SelectMany(i => i.GetChildren(user, includeLinkedChildren)); } @@ -70,4 +75,30 @@ namespace MediaBrowser.Controller.Entities return standaloneTypes.Contains(collectionFolder.CollectionType ?? string.Empty); } } + + public class SpecialFolder : Folder + { + public SpecialFolderType SpecialFolderType { get; set; } + public string ItemTypeName { get; set; } + public string ParentId { get; set; } + + public override IEnumerable GetChildren(User user, bool includeLinkedChildren) + { + var parent = (Folder)LibraryManager.GetItemById(new Guid(ParentId)); + + if (SpecialFolderType == SpecialFolderType.ItemsByType) + { + var items = parent.GetRecursiveChildren(user, includeLinkedChildren); + + return items.Where(i => string.Equals(i.GetType().Name, ItemTypeName, StringComparison.OrdinalIgnoreCase)); + } + + return new List(); + } + } + + public enum SpecialFolderType + { + ItemsByType = 1 + } } diff --git a/MediaBrowser.Controller/Library/TVUtils.cs b/MediaBrowser.Controller/Library/TVUtils.cs index 86699272e8..6ef1fb6f72 100644 --- a/MediaBrowser.Controller/Library/TVUtils.cs +++ b/MediaBrowser.Controller/Library/TVUtils.cs @@ -8,6 +8,7 @@ using System.Globalization; using System.IO; using System.Linq; using System.Text.RegularExpressions; +using MediaBrowser.Model.Logging; namespace MediaBrowser.Controller.Library { @@ -136,6 +137,16 @@ namespace MediaBrowser.Controller.Library return val; } + if (filename.StartsWith("s", StringComparison.OrdinalIgnoreCase)) + { + var testFilename = filename.Substring(1); + + if (int.TryParse(testFilename, NumberStyles.Integer, CultureInfo.InvariantCulture, out val)) + { + return val; + } + } + // Look for one of the season folder names foreach (var name in SeasonFolderNames) { @@ -182,7 +193,7 @@ namespace MediaBrowser.Controller.Library return null; } - return int.Parse(path.Substring(numericStart, length)); + return int.Parse(path.Substring(numericStart, length), CultureInfo.InvariantCulture); } /// @@ -194,21 +205,59 @@ namespace MediaBrowser.Controller.Library /// true if [is season folder] [the specified path]; otherwise, false. private static bool IsSeasonFolder(string path, IDirectoryService directoryService, IFileSystem fileSystem) { + var seasonNumber = GetSeasonNumberFromPath(path); + var hasSeasonNumber = seasonNumber != null; + + if (!hasSeasonNumber) + { + return false; + } + // It's a season folder if it's named as such and does not contain any audio files, apart from theme.mp3 - return GetSeasonNumberFromPath(path) != null && - !directoryService.GetFiles(path) - .Any(i => EntityResolutionHelper.IsAudioFile(i.FullName) && !string.Equals(fileSystem.GetFileNameWithoutExtension(i), BaseItem.ThemeSongFilename)); + foreach (var fileSystemInfo in directoryService.GetFileSystemEntries(path)) + { + var attributes = fileSystemInfo.Attributes; + + if ((attributes & FileAttributes.Hidden) == FileAttributes.Hidden) + { + continue; + } + + if ((attributes & FileAttributes.System) == FileAttributes.System) + { + continue; + } + + if ((attributes & FileAttributes.Directory) == FileAttributes.Directory) + { + //if (IsBadFolder(fileSystemInfo.Name)) + //{ + // return false; + //} + } + else + { + if (EntityResolutionHelper.IsAudioFile(fileSystemInfo.FullName) && + !string.Equals(fileSystem.GetFileNameWithoutExtension(fileSystemInfo), BaseItem.ThemeSongFilename)) + { + return false; + } + } + } + + return true; } /// /// Determines whether [is series folder] [the specified path]. /// /// The path. - /// if set to true [consider seasonless series]. + /// if set to true [consider seasonless entries]. /// The file system children. /// The directory service. + /// The file system. /// true if [is series folder] [the specified path]; otherwise, false. - public static bool IsSeriesFolder(string path, bool considerSeasonlessSeries, IEnumerable fileSystemChildren, IDirectoryService directoryService, IFileSystem fileSystem) + public static bool IsSeriesFolder(string path, bool considerSeasonlessEntries, IEnumerable fileSystemChildren, IDirectoryService directoryService, IFileSystem fileSystem, ILogger logger) { // A folder with more than 3 non-season folders in will not becounted as a series var nonSeriesFolders = 0; @@ -231,15 +280,20 @@ namespace MediaBrowser.Controller.Library { if (IsSeasonFolder(child.FullName, directoryService, fileSystem)) { + logger.Debug("{0} is a series because of season folder {1}.", path, child.FullName); return true; } - if (!EntityResolutionHelper.IgnoreFolders.Contains(child.Name, StringComparer.OrdinalIgnoreCase)) + + if (IsBadFolder(child.Name)) { + logger.Debug("Invalid folder under series: {0}", child.FullName); + nonSeriesFolders++; } if (nonSeriesFolders >= 3) { + logger.Debug("{0} not a series due to 3 or more invalid folders.", path); return false; } } @@ -249,7 +303,7 @@ namespace MediaBrowser.Controller.Library if (EntityResolutionHelper.IsVideoFile(fullName) || EntityResolutionHelper.IsVideoPlaceHolder(fullName)) { - if (GetEpisodeNumberFromFile(fullName, considerSeasonlessSeries).HasValue) + if (GetEpisodeNumberFromFile(fullName, considerSeasonlessEntries).HasValue) { return true; } @@ -257,9 +311,28 @@ namespace MediaBrowser.Controller.Library } } + logger.Debug("{0} is not a series folder.", path); return false; } + private static bool IsBadFolder(string name) + { + if (string.Equals(name, BaseItem.ThemeSongsFolderName, StringComparison.OrdinalIgnoreCase)) + { + return false; + } + if (string.Equals(name, BaseItem.ThemeVideosFolderName, StringComparison.OrdinalIgnoreCase)) + { + return false; + } + if (string.Equals(name, BaseItem.TrailerFolderName, StringComparison.OrdinalIgnoreCase)) + { + return false; + } + + return !EntityResolutionHelper.IgnoreFolders.Contains(name, StringComparer.OrdinalIgnoreCase); + } + /// /// Episodes the number from file. /// diff --git a/MediaBrowser.Dlna/Channels/DlnaChannelFactory.cs b/MediaBrowser.Dlna/Channels/DlnaChannelFactory.cs index cc5cb1b1a2..78db68f63f 100644 --- a/MediaBrowser.Dlna/Channels/DlnaChannelFactory.cs +++ b/MediaBrowser.Dlna/Channels/DlnaChannelFactory.cs @@ -45,7 +45,7 @@ namespace MediaBrowser.Dlna.Channels _localServersLookup = localServersLookup; _deviceDiscovery = deviceDiscovery; - deviceDiscovery.DeviceDiscovered += deviceDiscovery_DeviceDiscovered; + //deviceDiscovery.DeviceDiscovered += deviceDiscovery_DeviceDiscovered; deviceDiscovery.DeviceLeft += deviceDiscovery_DeviceLeft; } @@ -196,25 +196,16 @@ namespace MediaBrowser.Dlna.Channels public class ServerChannel : IChannel, IFactoryChannel { - private readonly List _servers = new List(); private readonly IHttpClient _httpClient; private readonly ILogger _logger; - private readonly string _controlUrl; + public string ControlUrl { get; set; } + public List Servers { get; set; } - /// - /// Prevents core from throwing an exception - /// - public ServerChannel() + public ServerChannel(IHttpClient httpClient, ILogger logger) { - - } - - public ServerChannel(List servers, IHttpClient httpClient, ILogger logger, string controlUrl) - { - _servers = servers; _httpClient = httpClient; _logger = logger; - _controlUrl = controlUrl; + Servers = new List(); } public string Name @@ -272,7 +263,7 @@ namespace MediaBrowser.Dlna.Channels if (string.IsNullOrWhiteSpace(query.FolderId)) { - items = _servers.Select(i => new ChannelItemInfo + items = Servers.Select(i => new ChannelItemInfo { FolderType = ChannelFolderType.Container, Id = GetServerId(i), @@ -291,7 +282,7 @@ namespace MediaBrowser.Dlna.Channels Limit = query.Limit, StartIndex = query.StartIndex, ParentId = folderId, - ContentDirectoryUrl = _controlUrl + ContentDirectoryUrl = ControlUrl }, cancellationToken).ConfigureAwait(false); diff --git a/MediaBrowser.Dlna/ContentDirectory/ContentDirectory.cs b/MediaBrowser.Dlna/ContentDirectory/ContentDirectory.cs index f594b4471d..f5731b8938 100644 --- a/MediaBrowser.Dlna/ContentDirectory/ContentDirectory.cs +++ b/MediaBrowser.Dlna/ContentDirectory/ContentDirectory.cs @@ -1,4 +1,5 @@ using MediaBrowser.Common.Net; +using MediaBrowser.Controller.Channels; using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Dlna; using MediaBrowser.Controller.Drawing; @@ -21,6 +22,8 @@ namespace MediaBrowser.Dlna.ContentDirectory private readonly IDlnaManager _dlna; private readonly IServerConfigurationManager _config; private readonly IUserManager _userManager; + private readonly IUserViewManager _userViewManager; + private readonly IChannelManager _channelManager; public ContentDirectory(IDlnaManager dlna, IUserDataManager userDataManager, @@ -29,7 +32,7 @@ namespace MediaBrowser.Dlna.ContentDirectory IServerConfigurationManager config, IUserManager userManager, ILogger logger, - IHttpClient httpClient) + IHttpClient httpClient, IUserViewManager userViewManager, IChannelManager channelManager) : base(logger, httpClient) { _dlna = dlna; @@ -38,6 +41,8 @@ namespace MediaBrowser.Dlna.ContentDirectory _libraryManager = libraryManager; _config = config; _userManager = userManager; + _userViewManager = userViewManager; + _channelManager = channelManager; } private int SystemUpdateId @@ -73,7 +78,9 @@ namespace MediaBrowser.Dlna.ContentDirectory _userDataManager, user, SystemUpdateId, - _config) + _config, + _userViewManager, + _channelManager) .ProcessControlRequest(request); } diff --git a/MediaBrowser.Dlna/ContentDirectory/ControlHandler.cs b/MediaBrowser.Dlna/ContentDirectory/ControlHandler.cs index b4f918e68b..1553435aeb 100644 --- a/MediaBrowser.Dlna/ContentDirectory/ControlHandler.cs +++ b/MediaBrowser.Dlna/ContentDirectory/ControlHandler.cs @@ -1,4 +1,5 @@ using MediaBrowser.Common.Extensions; +using MediaBrowser.Controller.Channels; using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Drawing; using MediaBrowser.Controller.Entities; @@ -9,8 +10,10 @@ using MediaBrowser.Controller.Library; using MediaBrowser.Dlna.Didl; using MediaBrowser.Dlna.Server; using MediaBrowser.Dlna.Service; +using MediaBrowser.Model.Channels; using MediaBrowser.Model.Dlna; using MediaBrowser.Model.Entities; +using MediaBrowser.Model.Library; using MediaBrowser.Model.Logging; using MediaBrowser.Model.Querying; using System; @@ -19,6 +22,7 @@ using System.Globalization; using System.Linq; using System.Text; using System.Threading; +using System.Threading.Tasks; using System.Xml; namespace MediaBrowser.Dlna.ContentDirectory @@ -40,14 +44,18 @@ namespace MediaBrowser.Dlna.ContentDirectory private readonly DidlBuilder _didlBuilder; private readonly DeviceProfile _profile; + private readonly IUserViewManager _userViewManager; + private readonly IChannelManager _channelManager; - public ControlHandler(ILogger logger, ILibraryManager libraryManager, DeviceProfile profile, string serverAddress, IImageProcessor imageProcessor, IUserDataManager userDataManager, User user, int systemUpdateId, IServerConfigurationManager config) + public ControlHandler(ILogger logger, ILibraryManager libraryManager, DeviceProfile profile, string serverAddress, IImageProcessor imageProcessor, IUserDataManager userDataManager, User user, int systemUpdateId, IServerConfigurationManager config, IUserViewManager userViewManager, IChannelManager channelManager) : base(config, logger) { _libraryManager = libraryManager; _userDataManager = userDataManager; _user = user; _systemUpdateId = systemUpdateId; + _userViewManager = userViewManager; + _channelManager = channelManager; _profile = profile; _didlBuilder = new DidlBuilder(profile, user, imageProcessor, serverAddress); @@ -69,7 +77,7 @@ namespace MediaBrowser.Dlna.ContentDirectory return HandleGetSystemUpdateID(); if (string.Equals(methodName, "Browse", StringComparison.OrdinalIgnoreCase)) - return HandleBrowse(methodParams, user, deviceId); + return HandleBrowse(methodParams, user, deviceId).Result; if (string.Equals(methodName, "X_GetFeatureList", StringComparison.OrdinalIgnoreCase)) return HandleXGetFeatureList(); @@ -78,7 +86,7 @@ namespace MediaBrowser.Dlna.ContentDirectory return HandleXSetBookmark(methodParams, user); if (string.Equals(methodName, "Search", StringComparison.OrdinalIgnoreCase)) - return HandleSearch(methodParams, user, deviceId); + return HandleSearch(methodParams, user, deviceId).Result; throw new ResourceNotFoundException("Unexpected control request name: " + methodName); } @@ -141,7 +149,7 @@ namespace MediaBrowser.Dlna.ContentDirectory return builder.ToString(); } - private IEnumerable> HandleBrowse(Headers sparams, User user, string deviceId) + private async Task>> HandleBrowse(Headers sparams, User user, string deviceId) { var id = sparams["ObjectID"]; var flag = sparams["BrowseFlag"]; @@ -149,16 +157,20 @@ namespace MediaBrowser.Dlna.ContentDirectory var sortCriteria = new SortCriteria(sparams.GetValueOrDefault("SortCriteria", "")); var provided = 0; - var requested = 0; - var start = 0; - if (sparams.ContainsKey("RequestedCount") && int.TryParse(sparams["RequestedCount"], out requested) && requested <= 0) + int? requested = 0; + int? start = 0; + + int requestedVal; + if (sparams.ContainsKey("RequestedCount") && int.TryParse(sparams["RequestedCount"], out requestedVal) && requestedVal > 0) { - requested = 0; + requested = requestedVal; } - if (sparams.ContainsKey("StartingIndex") && int.TryParse(sparams["StartingIndex"], out start) && start <= 0) + + int startVal; + if (sparams.ContainsKey("StartingIndex") && int.TryParse(sparams["StartingIndex"], out startVal) && startVal > 0) { - start = 0; + start = startVal; } //var root = GetItem(id) as IMediaFolder; @@ -173,34 +185,26 @@ namespace MediaBrowser.Dlna.ContentDirectory var folder = (Folder)GetItemFromObjectId(id, user); - var children = GetChildrenSorted(folder, user, sortCriteria).ToList(); + var childrenResult = (await GetChildrenSorted(folder, user, sortCriteria, start, requested).ConfigureAwait(false)); - var totalCount = children.Count; + var totalCount = childrenResult.TotalRecordCount; if (string.Equals(flag, "BrowseMetadata")) { - result.DocumentElement.AppendChild(_didlBuilder.GetFolderElement(result, folder, children.Count, filter)); + result.DocumentElement.AppendChild(_didlBuilder.GetFolderElement(result, folder, totalCount, filter)); provided++; } else { - if (start > 0) - { - children = children.Skip(start).ToList(); - } - if (requested > 0) - { - children = children.Take(requested).ToList(); - } + provided = childrenResult.Items.Length; - provided = children.Count; - - foreach (var i in children) + foreach (var i in childrenResult.Items) { if (i.IsFolder) { var f = (Folder)i; - var childCount = GetChildrenSorted(f, user, sortCriteria).Count(); + var childCount = (await GetChildrenSorted(f, user, sortCriteria, null, 0).ConfigureAwait(false)) + .TotalRecordCount; result.DocumentElement.AppendChild(_didlBuilder.GetFolderElement(result, f, childCount, filter)); } @@ -222,7 +226,7 @@ namespace MediaBrowser.Dlna.ContentDirectory }; } - private IEnumerable> HandleSearch(Headers sparams, User user, string deviceId) + private async Task>> HandleSearch(Headers sparams, User user, string deviceId) { var searchCriteria = new SearchCriteria(sparams.GetValueOrDefault("SearchCriteria", "")); var sortCriteria = new SortCriteria(sparams.GetValueOrDefault("SortCriteria", "")); @@ -230,16 +234,19 @@ namespace MediaBrowser.Dlna.ContentDirectory // sort example: dc:title, dc:date - var requested = 0; - var start = 0; + int? requested = 0; + int? start = 0; - if (sparams.ContainsKey("RequestedCount") && int.TryParse(sparams["RequestedCount"], out requested) && requested <= 0) + int requestedVal; + if (sparams.ContainsKey("RequestedCount") && int.TryParse(sparams["RequestedCount"], out requestedVal) && requestedVal > 0) { - requested = 0; + requested = requestedVal; } - if (sparams.ContainsKey("StartingIndex") && int.TryParse(sparams["StartingIndex"], out start) && start <= 0) + + int startVal; + if (sparams.ContainsKey("StartingIndex") && int.TryParse(sparams["StartingIndex"], out startVal) && startVal > 0) { - start = 0; + start = startVal; } //var root = GetItem(id) as IMediaFolder; @@ -259,27 +266,19 @@ namespace MediaBrowser.Dlna.ContentDirectory var folder = (Folder)GetItemFromObjectId(sparams["ContainerID"], user); - var children = GetChildrenSorted(folder, user, searchCriteria, sortCriteria).ToList(); + var childrenResult = (await GetChildrenSorted(folder, user, searchCriteria, sortCriteria, start, requested).ConfigureAwait(false)); - var totalCount = children.Count; + var totalCount = childrenResult.TotalRecordCount; - if (start > 0) - { - children = children.Skip(start).ToList(); - } - if (requested > 0) - { - children = children.Take(requested).ToList(); - } + var provided = childrenResult.Items.Length; - var provided = children.Count; - - foreach (var i in children) + foreach (var i in childrenResult.Items) { if (i.IsFolder) { var f = (Folder)i; - var childCount = GetChildrenSorted(f, user, searchCriteria, sortCriteria).Count(); + var childCount = (await GetChildrenSorted(f, user, searchCriteria, sortCriteria, null, 0).ConfigureAwait(false)) + .TotalRecordCount; result.DocumentElement.AppendChild(_didlBuilder.GetFolderElement(result, f, childCount, filter)); } @@ -300,15 +299,16 @@ namespace MediaBrowser.Dlna.ContentDirectory }; } - private IEnumerable GetChildrenSorted(Folder folder, User user, SearchCriteria search, SortCriteria sort) + private async Task> GetChildrenSorted(Folder folder, User user, SearchCriteria search, SortCriteria sort, int? startIndex, int? limit) { if (search.SearchType == SearchType.Unknown) { - return GetChildrenSorted(folder, user, sort); + return await GetChildrenSorted(folder, user, sort, startIndex, limit).ConfigureAwait(false); } - var items = folder.GetRecursiveChildren(user); - items = FilterUnsupportedContent(items); + var result = await GetChildrenSorted(folder, user, sort, null, null).ConfigureAwait(false); + + var items = FilterUnsupportedContent(result.Items); if (search.SearchType == SearchType.Audio) { @@ -324,12 +324,123 @@ namespace MediaBrowser.Dlna.ContentDirectory } else if (search.SearchType == SearchType.Playlist) { + } - return SortItems(items, user, sort); + items = SortItems(items, user, sort); + + return ToResult(items, startIndex, limit); } - private IEnumerable GetChildrenSorted(Folder folder, User user, SortCriteria sort) + private async Task> GetChildrenSorted(Folder folder, User user, SortCriteria sort, int? startIndex, int? limit) + { + if (folder is UserRootFolder) + { + var result = await _userViewManager.GetUserViews(new UserViewQuery + { + UserId = user.Id.ToString("N") + + }, CancellationToken.None).ConfigureAwait(false); + + return ToResult(result, startIndex, limit); + } + + var view = folder as UserView; + + if (view != null) + { + var result = await GetUserViewChildren(view, user, sort).ConfigureAwait(false); + + return ToResult(result, startIndex, limit); + } + + var channel = folder as Channel; + + if (channel != null) + { + return await _channelManager.GetChannelItemsInternal(new ChannelItemQuery + { + ChannelId = channel.Id.ToString("N"), + Limit = limit, + StartIndex = startIndex, + UserId = user.Id.ToString("N") + + }, CancellationToken.None); + } + + var channelFolderItem = folder as ChannelFolderItem; + + if (channelFolderItem != null) + { + return await _channelManager.GetChannelItemsInternal(new ChannelItemQuery + { + ChannelId = channelFolderItem.ChannelId, + FolderId = channelFolderItem.Id.ToString("N"), + Limit = limit, + StartIndex = startIndex, + UserId = user.Id.ToString("N") + + }, CancellationToken.None); + } + + return ToResult(GetPlainFolderChildrenSorted(folder, user, sort), startIndex, limit); + } + + private QueryResult ToResult(IEnumerable items, int? startIndex, int? limit) + { + var list = items.ToArray(); + var totalCount = list.Length; + + if (startIndex.HasValue) + { + list = list.Skip(startIndex.Value).ToArray(); + } + + if (limit.HasValue) + { + list = list.Take(limit.Value).ToArray(); + } + + return new QueryResult + { + Items = list, + TotalRecordCount = totalCount + }; + } + + private async Task> GetUserViewChildren(UserView folder, User user, SortCriteria sort) + { + if (string.Equals(folder.ViewType, CollectionType.LiveTv, StringComparison.OrdinalIgnoreCase)) + { + return new List(); + } + if (string.Equals(folder.ViewType, CollectionType.Channels, StringComparison.OrdinalIgnoreCase)) + { + var result = await _channelManager.GetChannelsInternal(new ChannelQuery() + { + UserId = user.Id.ToString("N") + + }, CancellationToken.None).ConfigureAwait(false); + + return result.Items; + } + if (string.Equals(folder.ViewType, CollectionType.TvShows, StringComparison.OrdinalIgnoreCase)) + { + return SortItems(folder.GetChildren(user, true).OfType(), user, sort); + } + if (string.Equals(folder.ViewType, CollectionType.Movies, StringComparison.OrdinalIgnoreCase)) + { + return GetPlainFolderChildrenSorted(folder, user, sort); + } + if (string.Equals(folder.ViewType, CollectionType.Music, StringComparison.OrdinalIgnoreCase)) + { + return SortItems(folder.GetChildren(user, true).OfType(), user, sort); + } + + return GetPlainFolderChildrenSorted(folder, user, sort); + } + + private IEnumerable GetPlainFolderChildrenSorted(Folder folder, User user, SortCriteria sort) { var items = folder.GetChildren(user, true); @@ -345,7 +456,7 @@ namespace MediaBrowser.Dlna.ContentDirectory private IEnumerable SortItems(IEnumerable items, User user, SortCriteria sort) { - return _libraryManager.Sort(items, user, new[] { ItemSortBy.SortName }, SortOrder.Ascending); + return _libraryManager.Sort(items, user, new[] { ItemSortBy.SortName }, sort.SortOrder); } private IEnumerable FilterUnsupportedContent(IEnumerable items) @@ -353,14 +464,12 @@ namespace MediaBrowser.Dlna.ContentDirectory return items.Where(i => { // Unplayable - // TODO: Display and prevent playback with restricted flag? if (i.LocationType == LocationType.Virtual) { return false; } // Unplayable - // TODO: Display and prevent playback with restricted flag? var supportsPlaceHolder = i as ISupportsPlaceHolders; if (supportsPlaceHolder != null && supportsPlaceHolder.IsPlaceHolder) { @@ -368,7 +477,6 @@ namespace MediaBrowser.Dlna.ContentDirectory } // Upnp renderers won't understand these - // TODO: Display and prevent playback with restricted flag? if (i is Game || i is Book) { return false; diff --git a/MediaBrowser.Dlna/Didl/DidlBuilder.cs b/MediaBrowser.Dlna/Didl/DidlBuilder.cs index 739793c032..649ba2c8ff 100644 --- a/MediaBrowser.Dlna/Didl/DidlBuilder.cs +++ b/MediaBrowser.Dlna/Didl/DidlBuilder.cs @@ -1,4 +1,5 @@ using MediaBrowser.Common.Net; +using MediaBrowser.Controller.Channels; using MediaBrowser.Controller.Drawing; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Audio; @@ -612,6 +613,13 @@ namespace MediaBrowser.Dlna.Didl { return GetImageInfo(item, ImageType.Thumb); } + if (item.HasImage(ImageType.Backdrop)) + { + if (item is Channel) + { + return GetImageInfo(item, ImageType.Backdrop); + } + } if (item is Audio || item is Episode) { @@ -633,7 +641,7 @@ namespace MediaBrowser.Dlna.Didl try { - tag = _imageProcessor.GetImageCacheTag(item, ImageType.Primary); + tag = _imageProcessor.GetImageCacheTag(item, type); } catch { diff --git a/MediaBrowser.Dlna/Images/logo120.jpg b/MediaBrowser.Dlna/Images/logo120.jpg index 1de803c8fad9750c75ec994c27ac580f9514c277..394c8e1376892774d2ca41e7e260d31e3a0a4a31 100644 GIT binary patch literal 8879 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 z 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 UEEodDe+VX&5B^_;!25;&0v-EG?f?J) diff --git a/MediaBrowser.Dlna/Images/logo120.png b/MediaBrowser.Dlna/Images/logo120.png index 2dd04d46818eefc3ec7f569975e7f1ca8fb7b0a1..97bdef818b4be06a9923eb9efcd20d3ba56b7730 100644 GIT binary patch literal 13621 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 literal 4124 zcmV+%5aaKOP)@q>@?c5}Lyh)r<7jS@x&8sZ} zLO5rFpZmcb)^&~jIpkkEw ze?UltC=(bP9yYn;^8IKXYlyUWM`jH3y3r4wgP0Px%FK$# zcf-V@9wUMXJk@K@1%3|n-7|dyn*F!irlQCVVT*JxPuvqJfwP7B zN<@UWUw-Ue36K@V`TzB@u&}VOu&|(jh=_?Gc#C-80Vs%I2=P7&V|m0oi7_UUBQgFp z9-6}>S``iEFG5*~Nk~v5NHn^NiG?DlC6*Xa2)J^%94ou~=F5Ej-tJ)w=Fkwsv4}6#K8Kq#r*STEQ$CIHk{4lz7?!*&9wt=tdvg9_%vR$w5pRcXP6?gs> ze&{UHz>d!*wGyk>Z^7hmJ_5$@K~?z6PtQe!-z|6*ch7whj4QuA&xIW=HBaN|@QfAA16Hf-94 zlfwEKgZuZw-|x8)5#}vgfuGEN4vdRWI~3nK|JdTT!K~`yv)d|b3M`2QY$=UE^0{1D z5RmI#vW!(Hf6RO0?Fa&SoWFgnB@9H{Sb9Z&i<@A!aYF`Fvc!bny%0xrZ?=n_SdD4B z8pmFJE3)5J6`{Sg703RAs*Lo+F|c1xT~|eDhkJ$gI|8ft;e)GC7Pev7z}{N5N9d8e zmsRb6svd}=U)Vmrm+flL@-jr|)}=ITLm#e>`zHHj)Oo+katIWm4Ng(qHkiTovS#`F z>~t9QMnvq5YUyG$G-c4(6lkXkx~!8f4=Cr*1OXyXizSC8t0^pOXlMeWXTt0J4x(&* zncTZniFVYqR0TxrksH;@5+6Bn+_pw8Q_5-|-?~$`!PFPFp%e-*^~L*?_2|oS^5H{^ zbD1P@)!hrQ^8JnYykXYN6L8+dQN>L#&+tuK>+yNS#&9j(3b51gYgWbe4?0)Pxa;auG3n_2Q7Aa8 z#pH5cnZaSq7nZHrlf38@yg}f)pFL?ZP4`?g2~#}kS|%izT>fURqu(*q!h2c zvmVEN?LmA{TL;FSp}PM1*<<0uQ3nphv-e$${(X9Yam~F?VD7@@d-6Is1#inabJk-z zsiGaFX@@&WJ~AYC_N?h(MC3m6%BnQb@mV2x;`P60RclBdd(dD+=+(Up59i3;R^Nar zH_X`;a??NuC;canJpg?wx`keEBib9B-hAsnwOFz0LyS9Qh*{r87`b1yrPg^f!0`v~ zqu0~z{of=grS!&&Czrg#>+9km`0_K3z*kQ{Y|oL5*k-=tM(?9PyBoY~=0^`bTNEnV zY+Xf)_|~N&x4|h=g41jg1;|1n3qmuLb#6eUKc6aO6IA?tXggAZDK~~>kFSCuQIbg% z=#S(;xrmCDk^U#D+d(enZc+r0sMx`B3Ld8*QDRCdb_1cA0ScNaBT$Qa6_ad;Vp4L4 zl>7LEknCfnpNn(K2RXiDlR+*$-hA&v)NS9XcV6meRT~sVf#oXZ=;{641Z>_`k98ky zmCsmk&tV&?zktWf`hNN__w zC(K-P+GocowNy<6Ncya4W4n^N#Ce~;KY}FLeu@0o-S4259ILp=qKv33lPxFZTQVKP*+?gc4fs~l>ZVE@kA@Ic~T<3$G<*@3)X^o=to z;*r0-jNU!VHQ~tT`x$4l_1Y_H?!bPPh)~(13<#RIO!P`6R1rD3;%zFQ3J?yzbR5aw zr^Ho+E4)Phr5FJoCo7X^<4fa`Xo${3@Z{r0=}$*t$lg`b$#Oa;5FV={2bWF)40(b8 z)k57<{(yzosZ>(1jQ8tzg>0WGN3ik>7fY}(SjmcP)5qKK%Q;VDb6q_~4BH!*op~Z6 zELrw0<~^}Q-#z1$BQWmpFCfCAC2!zQinRX7u2A3V;wfsZng+s{L%_M_5AC4psu}OA`{$FHK`UWaN$HL zj~URt6>C`GV3C6}DZTv6t_EDhD&1ekhc?0HoLm73Bf;*OZk!tuuglp#{VhY7k;;&P z5JjL&#%<#>`ni^C+aPexP#`yRTj|7+V+5!*PM4DgF}AW$Qq{_3oD!PDUI*)OvvpBm z1*;6fvIAy*6JQPepaE65|A&`g>-Ktm9LLm?4#U9yee}#abi`1^alzDMF>3f=RCMo( zp@aJ&j=R2n9zIyV3HuGMMjTh3Hv!|vjzpJGMfdAdVb9#$Bx@feJAPF7^;j)=$t^6N zA7t!t$TUf_(R^+>S+SdBBRlD4m7NBK?69ta+YCs8DT?S3 zi6)s|nssoZZhHKw8ve8~^CHjN7T&r2#*6Tk$;W{4#ye}cqlK{uPnOE%jfq4xxsoC9 z?|~=;lypozLT z54@_s)VWX=cRB3?@ml(3I zC!6fNo}Mr9MHI-@gr_QHV$puNaoJCO-ZDsFpX8shc|pk%Y)p$kP3eyIJL^@g&qDYv zCoYonERB>)ZOSA>;LMAYCo9Vd|72&1{O9C}+bYWjI$Zde@>U|j?zH;Kk?;?!c8g=j z4w~Gt)r^)JRW4TqCvGNnKb-1L8Oc`p(v^JdNl}tqCJ7s?5;i21nuM{+qe4{M-2Z&S zKzXmbc2#C2nBaB@-8(ql8lT+eso;J)?!~l1a&B67X!|EZ+6~#L4omR5TMS2*@~> z5MrkH?p47Z^=;*H=gwP^@FAi0n`sGRBnDRUg8cn$eL{o$<-ID(g$)kO5XvoY9sm1a zrLtaNrb&91iJAFJ&OZY^x_3j})@|roR+h96y=V{wg!=kVFm=*6yN?ur+%u>n2$qr? zfSMYNJF5auAV^4Xx2|QFdCpX%NZR<`krJ$wb`FBZPqL>*#|W!W1d`r-3b_szKOV6B zgbpCMq?6t#Kn?ZHPMc$6l#G5+%COrm6XpB?=8G?9Ppb9nSQe8-?AHs%Ub{ z({3e~UHYBdO;A2XvHS@K#cDZ6E=ZG|;xkUL@qtT90Bv(Sg4`6P?XH%a8bOWqDY?Z) zuu?g1xp4=d?J~LlUb+I)r;NvzkL&dRgZO!dQovsQ`(gE(wfXNIa@aIaJXWjfAaIZ6J?d_uns+80xNE=ub0^_?!Fk@f$0?LK>KmOG+_)X z0?u1ReJ)gR=ZxrUEdP9=+Ri(8i*Hl^j#*V9BU*s-YUVujl#adHtS0e&cm9uH`(h<2;Y!Jl@CqI8Nbr z;WT28rTIm3#Fi~v5EtMdgph`~bw1qZCIWH!GC~u9Kx{{B-6D?=g}-fq57ZWg|Nd^i zMI9mXpYwmf7f&GI-v}xAu!fI+KX7aRdFDTVuekdJgz8wIw?A}GPe)(p#0i9O0%7)V zzyDXCe;fI~YT)08g)NA^+Yw9zQ)J5##21O z*!CUb67UUGdk}wY5fS-gtB9!R)~)c>X!tr}>t0c*!za#dleTdeI})_-3z$`Hzf4#y|D0z$VZQ#JdJ%87oYs{RZ42w>o@7|b8_?Yi606I%PT6Ys%vWN>f0#o z9i3gDK6eic4h@ftejgjB&Cq|&{+gR#_{~~fTi;-Bf*kI@a&19~{P&Rkmt_BoTzg@; z{@A)zWUJV}a&7q|>|eq6ZWTRzVw==C8!`7F=_4l}Y~T0ii+5$MJCyZonKB;1{o=AJ zr)a9Ie?|L`WdCP^J^cS9*?$Z6|H?Iv*eS9Fo;;Dg2s8qM)ZfP={{J|B>I)IiP=7E> ze%w=1XOSP97(^dCGNWY*w5OlOhpFuRQe<+Eo4C~2CvmboPDWhTVN3ZgcOjx}9yAsr z&U?~`kX($c5HVW<5Y##XpG|3k?^tS`Qz%w-Su`m;r$b3)xXRVVwz)Pn;zs(+s_j4L ze^u;1R!m!6Ts$^25$NT$RW`N1YwL;kOthbA&lbiD?7;WHoQ(stdCcDSjl*uC1--=@ zUO_49);7;GeR{*c_uhFPpc(x5dP*)$VU-X+!V1Xs9ZFP8mdZQu*)HW$XwI2)r*kwq z4R7WgtqQWX)Sh@Vz9Nt%(?W1aA>uuWIVwa*kR*hN)qyPdTN-W00?Uy`hU8HDVJY%} zEZZq1RLI6BAp*&qDN&t=HZK8t;D6@Q#{^2u=a6rv*#zWe&nN#j9-Z@Ir18)HFefmd zSio)ljsS+#<^s(G(r8)`{|MY0kx7To<9Gf)y*;97EU+wS{X#_D1O>~lAgwjWGb7iQ zTL3(^yR<6|8WF=ZB>QhnTJhU zAx1!31kcje0^IX;+GJ?Sc|30s=7dXZo!YX5z}x;QhqFVH_$c)I>OVf zOA{g>SvN(vmlU`c{1fuJZQ~Xp;t4($;CN!^exy0Aj1I?wL0p0Fz~oL(Gh*-BZ5rtnrHkQoswD{joVO!*~ zn+cpf!%qleDnbN(h&+Qmo)u1nTYOsR_V28KxIQr9dv+%JoDeZ-4iA_dA)7HL;KCL% z1pXa~vtY_WG7vlwvx$Z{JMcy%&YXFe8&0Oo2@%0Edh47wdz}lglIf!c41HBa@N>ISmEs($* zS_fmNJ=a+Q_kq-R)<|iTq7q?`$)1>Ot#25JI?61&$x;5W&>PYfK<=*RZR0hCFbEVD z9Y1@0jj6B$$tft4?BVHT3lX5REerqekjWn;|8%$Orml%G=3sdOJ!dQ^6@y*P5@^i6 zd2jec(c6KluX3(Wtr8`#4QynD-&oBfSPp6H@ApW%1!!LMKl(=Ma_;HQzb7sjwvuLS zKgZ531AV4VMvn8beCenT=n!*r>HKuGg5^-De-A`$l!=0PpQBwkoMKnp;B(o zw$&*=(?2^UGMwIA`o|#sS*uzKwyn=Zk(lD;l;m!P%05ymB8EM%=sT@!DdYJxpJ7j2 zIvoFjre>}86PJAbN8v@aFHI&n9ZtUvWQ%OU9!(Sv|KYk*xd?MWvz%yh{=xteb=9)N#fmZAtIlv{+_%O?IEuI{{H`bpub99Yk-xkx#%;Jb+UQd0Lj|W4G>$f zmtCWt5h89&LgWP}qpyAZ%NuTD{KupwVD2~8w^uHF;Qa^FOgJ=%=Q( z0;8oeeh@kdI}Ru{ zqCPtnRdKv(I20oW#$FxNNo-toxh@gK+hr8xlpuG!C-8WZ!zwZULhhFSR{?6Rq(or- z0!ke=nGP}wo-<8=SYp;iJM_aVj?!s!FFEx{a!^ozerBc5{K%%(@7gyi^w=WxTH*oC ztJ+%QBR;t(qUH?1iXksC4+9%oLCSP@}s*2s`SI+Kuy_Mm|RFGomAz_roiM zh!o_UOeFddS$>-yGj`_wh7b`i))5Ub?Fgl4lsXsMn|IqmA!>rLk8oA6+?@3$qirUV zRwP7Br{iljW1uPXzZ^4J8$8PTM&D}5{*~Q^YRZD<$p*k^7(XpUbmF-xWN8cZ`XP{n z=jX0}#XhG=b^=@#suW9z@Ic1b9+)eA2}ORZ*eTyX^Kp_qr4bSOYmJ}a^`w2B;$akM zo{twI5bGy%8Wlsj8X^Ue5O$zcdnA1S9Px|fddX{O5B~-oy(30-EfXFxv6)Pz+J(HU zL*RK9{vm1~&Pr^eC0heFX3W~D5#y~J++~G9#=b^!b3Lw##|k&WTrvexc0eyy8x~5_ zUrPjag{-4#wt0P~0#hLZ&C(yxZNnr)L;G-+fy4(US0thI%a(*4s1vY*=pcfxP|cz& z3wV;uHDkz+9I!5J>q0~td^8AV=Qg=mbfJeGdAMkDgRQSW!D}WAo@ovF!~nB3+pf>m zGQNFO+mPv3Ytv2mivU(3r3{6L0)-AFA0FH@MK*k8klY!wkAGn$6GV0(&y8BW`?cTL z$%8qmA0CgwPC=y&-?8=`KDYlBfCJovutAA|C=6(@-f4=~oG<>xt7AjDeI`+WW`jR7 zZDzg|R%sWO!UrMZ4YHk%BBIBDIo4cGC5U19CGd5@r$#s6HBe>-3pwl-G?8_DU-RKr z(1ilS4eWv+zyp9)4fhjTkb9X@c3X66%`DZ=C0h1NQm6G}-i?4R4!?ry=tcb8!rx{f zIk?u>bh?M;*kMxxdy_-Eqd>iO&o$T-1N24{Sk5)s`&iyjJ!{h1v-h*)VrS~Z;>TS> z{u)|;y?i6l?4qJ%wBH}y^ToxC12@nAeGPFw2qX8jKy|;zE$iS&bD4J<=nI|xHGWMp zi&cYB;gQVeujWS*u4cTN?>%AlSLwKoHQSMqS6SBJrF*chh4G#1I4MLhG2W9r7e4a9 z+!CbHqLz)5oB1<{0Y#tT3lZgn2QBnw%q3WZj%}IH-%R66ce+xmsIC3~gnS6kAPX*{ zROeA-I`%{d2|Ceyhzk8xN1#6}79x~KXjG1RFp{S@n}z;u^gv+We_n?F7l3`T&*rS? z|8yW{c_pqNNAzz8(Cx^-gMw-YRvJla_@2IB`v9%xE ztC^WH6r+FgW$$TRAo!w&Ed^VxMm`shlsqHenI9Blb%FqMNysUXZ+rtyKAG;4*Ca&w|T@h=(`$ zA{hs~hMG@*-1SKnb%t-*8KH=4oK7wndU-WII;P zlYG!3i08;4h~Mb<1n<(m>+6Dl-foO8oR=Lj!zK;+9$7X$IkJ7iX6-!XQ;FV*n@4j6 z@8JRYK&}p>kU;g=IJ7ra9Gqxllf^6h@Y$kFnNoZZlR*g^e+YWJ4x4EE6*xCH=ok4) z2B{e3&0CGU?0Z~)^7x5TlqnwCEiNdPV)|+^b=gMvE7BRH8Z`FzR?* zBRlx|7nL;$sg82r9(c-IfU2rt8o3r!;3-{>8OU9V(xs5%f+yd6d-zfz4Qv@aaOHi< zKg}DOxyVV1QZ->?o>9C}8vlu0p`^g`7U^C?`Wz4<{AxBXYXz%GdiQ+w!A|&i zPg}(uk7*qcBCc1+*!+5aa4FR#F8CVC+A&R~NOy7#6%gY;QpqLw0*1Ja*Mksr-s9c$kNzx*A^DbR_JCj$ZGj zZ5!HkN{EpA`Qo9v_}iLpm{;&9odjBA0KY`%8w49rgLnA1w922N>6^5<_MST1eL6kj zpV6H=4th9*Y2JS<`ue_vd;(JB*DKY3EXlDEr;na-bH(m>WA4-|3f!LY9cUXQCY3-v zXm8tu`QZ;as;)I|7cV3lYQGj)vdM8 zT;IV*$!s4@tI4oR0EVU0Z>dZh^f-AMc^~aj0?-1V^G$Pn3Gyh!LNgkCqAEl@IJGO- z)S`XV8T}~mXkGbJXxx6_Z=QKsOpo_1DTK;j<6CWps8wkGJ~X=obmvJy6oNcXjxH&= zK-~iw+?qPv2;vKVfYN7&iZ_fCje0JpjunSKZ}6_@Z%O@i^F~FY$WIO0`4|8rM2NBk zB^xr;NxW(DVqDn4%p($~8o(&lX_~hC7W;FzD{$DLt!IyHQFPz4)uu-LgfAAy}jfOMzC~T{LcR^B5_LvZ0SF{AF(~|%ARc@9p=&x^de6M8{NgB zK9}kB1l9hqc6V^<6tyy-%y=dw?o{>Ka5B2nW^#Flx$WIo*;2BP&!lO#v)o)A^8Jji zd%n5y)L7!_yGM_Mzu2d`Iy`TSx_$m=kxqn%X`+{^Z-8ba^;9vZnaA4X@6%(Ke1pd} z4GR0K z{>rW4{?(Ar^ycqVV;7A8)2U=Qg!Y+$^$Co@Bq~XRth{h(v(c9=^*fz!C@C~Ffj;}# zgW*BiooRQ^Ja4bBm-u`{Pd7_p+vL`8a4&hfky=%pYU7iPlNY?eT0gZrWfX-o0aHh8 zE_JLOb0E^UJWxg5e*Ec0>`{xKE4RN8m~P1N{@XVO?WX4z6Y6i5$K?$U!fM*;sX}p= z`s|C+-L7=SGa*j?B)!Lska9<7Yp;y@Aj}g)y{zks1F8>VmJ)W&rkFU^K&^hismoAD zF}kV&uSxz`)sJM{b6J7|#L;6t$xiY;_ULk!Lz3sBvK7x6ngDx=E3U@aH&shvFL|SE z7$H1-3=IQPWOu>@h8~!JbEolE;*i_0ZFCx&hDatPPBP2WpXnA#SeF75;K-M+zS|gyH4UuKZ3*$!;|)nTBZ9C zI)HOw)x>U4Mg3wFS^4h(cOoc8$wt=sH7QWSBC`oce4YJ^9c_vo@4O2iW?y<^@yU?X zD=>z3iwMe!e^vBe>@Mr~km9~NtjO4+yXd@rYn13BXa4<~=1Y>%P+{*0wziQLHD$ePSLd6nGA}h7 z{nI^^u<<0U;*?zio?Rkeb;~+isf1ybe9GNAbTF;*^3|8KiRl0k(@Xw$@g#N$5jB#J zA@T5r8Of)C%}77AY@;_#D{GtNAE3AOkZOPEGn_3qy3)C-s@zxW6ngC5?al2_=z9aH zvNZ+ND6FZiBmSX)2-H{Zdg}h=86iSZ^VqHH6-Q&=OJ|?mFP7N8J8JYZP-elGp|F!+ zRAtXU0A8kJpP{R6(^MtYgidmsd6sjP;yY`-IXi1j>zwN~m&vWQCSfbTXG3({@WI0T z4a2#Edh1`K&+}Ab`i*p3`^KedVeNtYd{*HQ;RH<(={5SZQul6zPoAH=+q-v@zxTLw z$yZT)%6u=!_~-1>?shqK{E^Btt!XO_%xDq>ig3JThMg|O*d&_*(s=BpsE~Ei{3Xh< zR?m;Gi)F$u_IJ87XnxMYcI<2E)+yGGg$Z>xIbPn~Tw~-z_llivl5&qbzhz#%ee~#4 z%@mrPq|cwlT4w1wqxe&Dr|cY^kJg}TC-vBMf>iw|1y}Pvb^@qUz4=crGf#+UUlH>$ zC`=L&tsB&L_2{uJe=V{$G3D&?oYgHZ)i0*{7dDEhTs#*_bC;3#xg%@V>4+p-UN{}*q zpBTJqx!8Jjk6s0?FgH7VZo1l0foj~PlCsPMLz^R)e!1%^uH6_&GE1wTOy+hTU22lL zs8#|mHgH@^vf-J>^m!AzfJYV!EOe`w5E1ff1-wNX<3Z1ft$qA6Q#;_0c@j7=r69;6 z-_qUZ(iQQJF9Q<7e2x@#g{VEmo%0MldHhrAjtvE^3&g~y;#Sfp4QH=EN(Y|Bh~Pq) zkELA0GiYM%B}cktPGUY_roTq7gL`(S5w6sfrS@)B~bDH{GDeKD@A2J$vo1OIbVnZD;$}qAbi(M@BZ$`S8mU{+E|U zGW*dLn*uq^BLW!GC@nYA|9VQ>p??kG? z&!nO`S)TR47gGsi4t0%h6alc5DzMx=vqFT4xmt6RBts06S7XP(Oy~kLM2OfO_7LEN zxj>2_nVHdP6n_ia3%+BnbQm>0TZKJWNavLN$c9|fiTaCDU6+QIOP%&c+`AV4VfL8} zKWRA-`we*FJ6}IiLYu^18m)BUW$8Nhuas12>s_e~k@=dnk@?xQs{N$K&TP#XFws_@zUqQ5pG1l(!$%4D@c1_cXF(n%t z*Bzw~eluBNbcPJBApk-fspDSonXS=5U7QtcwZ`4ajlkYj zLN9G1k+Qll!Dl(!Tz}~JYi^8u%#&FvtJQnXB#glc!FQElp@9o~KA-xm=r=sczKMl_v(-FdR&OyH84bRM^Eu1E_coQ3(Nz6_CD_(y# z-NOD{(rktZC(1FwHJm2B=^V@{8SHy~veWpcA?Up!8Xr1O*;dz+=)8I5&Ssd@r7+yv zWM%6}6~D)rR`aNruJ-fY&fVW!6~M;gN|%yAFjMB{`=+6vY=(aWBPt?v$#Y`GB#1ci z^5BQ4&tjX`EW`u?uVYmE#8+!;;>vwdDHQa z+12T}k&e%b^%b@b`TLVrN|sh^w}kAJOS7@i>*Vi>s@{GX4(!NNRW7L}KDQSHY|NB37jgPAZhi%Nk~2+R(ktYv|x3Vor1?vO07rezK1 z0CWUNv6wMqHk>V?NHc3-MRn$16&yL)o2ie-Zkom}!MrX|gu@SzXCz=gWj+c{fwWon z)d)=8fY=`Xgti*uQOnOzcTUu5Ov-nkO~iD7$o^$Ch0hHmt=~kJr7hx&V!F{4*SI(d z&<&mTr0~2T34KGKM=q~foFXstcY_}AS;m>@!@-}`VidYyvhejH8pC_&$Uld>Oa2-0 zxW4+kCD*@-p$Ed;^+T6S3T&<*trfk7_T4`R<&ySgXBmkLKEapxpQKyR6;7Y#IwABy z;P;ldcm}otg%qR-5jP1t81ld~oEFcRzmwVb?9`idy5*<|n)$ND=yX~B^;5QI2N$^6 zSu~#C#F_LRc~A1HvkgvIsd!Zzi;RSKO|P_}pZ)WFf`1ltV$!=DxYsK%`RC|J5zxE+ z+rr?FBNjpW3C<&FxYXo6#h}~)m*PN8^Z3~md&%AqK>E%bg5r(qE{Y^+%Osme;m)tm zcxYIb+=H6yXjjjfO9;x14ABpSh?6yAvyEHgTJ9tTQBHojWnc7W#^H$JhyD)*12sdW z19l<7FM+F(1r{^TxBAvt6}3oR>mS|=36K&5r3{Y$*jW_xXpry|tveSFF=7`pc*k}V zDl8Tu6k%KQLCINK_dhY+K>7Rv?=)ZJAP5>WnZR-b)=&4~>X;T#1g`M4-wh6=*2kPi zod9){fHjjg7^CMRYD;!+rxLM3CWanm|pbir4uoK$_ zspy-B2Vn!)jUsGEA>sahv+#JrN3q2P7J)WWKszW+Bj1N)!(ZRzQBVd<$%i;&S_$UD zhsE=s4r0ukQr>0Dt}VF@+SZgeSKFKTcWXK3S?zsEzf-AcpP)H| zDzhYiOh|uTq#5+s+x9q^w;vT_&#}+D)og-&I99CgP!#+1V|Y4~s9{H`*S{4N(cx;# zE-z3&*V}vI)u@`@_0@zxRZxy68`BwMASk(;Wp?G!ReT##qEWk`BR`zf>2K_9sFgsr@%FbPjQfP2m*574zGbMLo(kytP;73H{)vk37THq5xId;)v`X_52W119O z&F&W@GiKD10vB(x?$reMORH8!F2CPR3=0bvslTOkFkT@-LCY)m1ILe3#Uwoke9++0 z(WM>5P9=@bZZ(QQW8oET&N*0DIQT80xek^lmbzF4_)krrb#o!_0+ZX%70qv=1N!go zw^1DpJ!6b~N`TiTUrA8CuOrc=BR#)N?V0!BvJ`qx_*#e5bth1SHj)+IIYXtm?Hf2G zUGi>K?2Q+#>5oa0E+L>`#`K&@eeFoLVTJnF@JBLs$k(jX(z??Z+&_4H7;U>+={H!I zQqY^6aV_(&Jmye=<|_d=h(epaIz&_qw>#Bs7$#vQlFF>sJ4qj#@pJe4)-iY;j2M_I z*0Mw{)_Ni1v(yI*!tGO!Hu@Ca_2TKy0H9XbVqK1#l^<ulbZ%CK|@ zM)0h2rd=&MQ`sjqB>`Do%jGfos1L-bwzEVljZqmS=Hsr*eVQh(kENG z|I%v(s3(8o`|rpEo4I9)#Cr>@WS4(riS3f03aKsH3X=sL05>~h_Ku_)oc;*Ds1zb( z=1*EZbkLZ2+GjpYOYD`&zij!lT>?FpZ)nNi{0+%iVy|9XKKuxD@YDhsIjI7CCT!-FU$0+zNd|7h-X}m@TwiC@;7mHk>IH%&wP(y z^>{@`NXRBtvVqDjzH|lsn4^4jH|Tw3NX4aR@}$=D5<8kjr=+CwWku|{q7Q$|KlEX5qM1qI zl5HaPRfDIRlrL869&<*Avbf?+5cz~e9{ z83)Ho`wEPF?1)IeXC%1PqQhgpJ2^P7&)P8EU!$;Z*8!s+gz+XgdjoZ+2cQT9#?(jD z_beQo2f_;xI#mkTBMB?$`zFv`ZmjZRTHj{?zVejHs*)RbHRkx_P`Tq>Yf&Uupnc6r zw6(M31D>CmF$7q4^W3M!Y&JwV(+&Ym!RB=(yXc9IHppA>y0#t#xW3_qF7%{hXVUToldxlRME7H$?SJxMMlOX=(c^uF3^G1#AeEZc zMY!=0f{(pN=~U99Bmiwzr9WqZd5ybW%6LnNPo935*Z}RY;2G};Mp0Q*F^DnOfy4kp zgcE7)H!Ja*(h1hzy9V32%fS>i=x7a2ayDt0Bl&c#Mg~ma%{gMhJ70NR0UISmBzWSU zKRy++?3PO15K9Xrz6dbxR91LJueMn0nm^(AzCoF+RCf@)mlMhz-MPtXJ&^2lRoTty zx#TCr4wZGpAJL*Aj?G7E>%W{{{^k;Dc-u;SA=Z7<9zQK6n3)t?I`wm|sw8^c)t}_u zOf{%SpGvP8iyqDBU+-6?x?~d~W@@$dWa{J$M9v&gy5vo0o_5C<9{&7OPoyJ6@Aqih zs#rbjN8j&0a*4idetcilY8UuAyU|`+$pAS@dP_%s;*I2HSWb5V?M<`}nYa zw9aJBV89e1y3eREvu2{kfh2ZLnIdZdecignb{V0sb3qkvi02es8*Q zQb=Z07=)eU#K4*I*4pww7>_&w@o)yMQ-^=W6#e@xUx7`U8#q(Z8}xg}FEW6ho~Sbb zTFr15;LQ6=7cl4F4E*ya%-eITqy&}{$>0x`W;5ru0K4LI52`^udblw0{G^3<{z+XS zLM2tu9BoXPECCFV`(TBkW1hkVCXhPL0`v;u9pj%H(P=&iu5>hSs~cWwJ_0(AQ0)nA zkAncPVDOs(Kc7#6BC=1hlqK{HIB<^B zggOG^YX-=fxTCaV_~$3;zA7$1ab9PJU)OdPPd!q7u=B2;{o{#HFFCCb9V*MIB~FCO z@Yr@IlB9d^c%7?rC^4?xk$83Jopt#ucWbG5%lG%f02XLWI~c-09c%$>rYdCkWWMY*@Tm89?dVk2%FnXmdJ-JV&ymR@DE*b&Znd zM)^X79xsF$a=&;fZDvJ?@HFvG6PQ9(i!nAZd8n5VSgO0Tf%Jg}Ttkj7Vwu5el+UrB zd20N#lSv}DOUw_*IQbo2v(D92W>DaR03)c|&Di>NSNn zjY7 zGhzFIZ*B^3Inwbd?2kc6@}1xukuNvVwtEY*d^1r@FhtlDGzh&l*?{Btt1w!gZgP`) zNnE7Rb@^vd@N=`0aKf7Z$z@8W>x*@y7x@xzj>&cSBKP{x)5E~j9Dj2eZ8Cys3xFr; z?M@7&7?etec5wn1ex$)&Ysb{Zu5*)Q0!P7Ulw0I?L8G9MJe>!Kz?rl_1VJ2ZV0*A) z;$~crVM3NaijV?E=DiM#MKV-{XT$-&I*1oMTfk^2n=&Zi2JC|wX@NM|;d(rm(9KUtyR^8UqF!5h-T^J8n_f$byg zfk_`n+aA$&gYomrd3jSf$H2&-&5GX=N&pfIEF}0*aN(3a!RY6F*0RwiDN3yE%uz9o z_Mf32?2A%nO6MMT%xKLNwDzU+eCPS}+AE|K5-)a`7qUOj7DOO*@iPf43hA_v?i8Q? zug42bUVqV1N|Fz;8PFt`CwMydHyJE>Y7M;1Q&||-+Q7^Z`1=CcEg)@XSKt-qXkz0z zCb@O|wwzI=(oXQQZ}r!=xAsiAjCB=&gwDA9%QMf%JW|=6qc%h7a1xx!X{>*sT^VJN zew+vV0nZtcP=#*O_Wc1?bOf>(EdwtPZa#@Q)RdU^thoP0^;CG&%(geV2i7Z|A#Q zh8itMzR(e-X-Dd#U5$OaQv!5vuTPp^T+#1YGPaDL8n-d+fAQ{V;31I4dI^UJa?PrK z&4x_xHjD&cipeIbagmQqG=LA-_WdRa-0b`{tKEr#g>Fynf_!L+a)0*wKYU{4((@>& zz?Huq?sv2#v4go}y}ON~PNCgd&B^>TW&hf6(e}ClcHbDC_zY%9zLhvQk5}Yxq>=2N z>HR=S>}U@Kd*qH$_r{mVkD2_oFW5gowD~a1tq*CnkW?iOGy2~a*L_&a>p|u%>5^|@ zCno5dQ-Lx#GnQ5ADxG(k_z<-p)Eu8XyvHCjUGA}oNgCpSiXNOu9nM$CaA3(6zo)a! z=yQu*)4F4x&<;B5B}GXVvxM3E`!rROgbSi)d{@R_V+E8Gq;UK5old7gef`BIpAUVj z)QZ?un&JCpdDA&-B&WcQ3~e8NH-93gXMFCt_Nk2Rxbri}cqR3+k*dn-1mDP%)F*zq zX1PwTQ-6O|%}=i}Fz+1&UTjSZv+a`a2{9&rLo@9(E+Id{{E>!*f;Mg&fR0CP$1S-Uy`2YicmC~Twk7#zqgl#y0Zl!stlge+bDsv!vcM_I@H5)e%AT-tbJq4EW&Jk( z2@?#E>@&O5Y9&GhWd+PXUcv>d6`NgHw~b`o{UQILGA?$}A(;-#hC5IDek5hbqhr&l z7&~^v(cJal0}as|3k%hA+;gz&{Ufu6FBQlR33P#BotprK=G!6jwfL)z5e2Hm=X_U{ zMA&Dbn)jaT(c9&)@?<|_r9~v!PapwI-`_=scBt_T4NBl49~2@oL|Kjlh8ole` zj7~{q*{*n#vj}LPO_A%g`l4wxM(rqBi@ADl2ERwaN8{!uoC^THDrLKDpy=w_ofAn4qty-*cJwCpGi5kA- z8ozMeHWW^G5%)t?JQKe$mCEXorM1zXU+jKlhIM8QwRa_2rg?Uvte>Jm=We2jmx3c5 zUfG7Uc9BeC2qbH?_}r0K34doo`xQe`Am8s#jiz8z(>~HVV>B;N@$wSMD}Tiwip+eO z%hhtCMqxjPa)8t<#SrhrNz5jhw7yZYf3{aI2~AWcV&|@pUpOnG5`7k)Av}G>Q8_b7 z(vG??2>acQqVO4$^|2VGBJO;M^~jE9uS}F_VrkmT!=md>5lWy()-6Gu&eFl%PkMNpJUN=TJu{ zn*3c{cRt+C=Rj_c*7;z#w=!#boes-R@V})aPR~rz1H+V{CdoX&GRkd$?CrOZx4FKY z+C?kPh}K<$%-r>F#&TV4%DPoS}}xL`4YhmV?cn>+{?)b4krc` zUH#+WX#$5&8eBKMH??^W?3Rik1Pl>i=Hk0;tuPes>atZn&yCv@jqdpx(;O=^ch`McuWu+gq!SR_&D#Zj z>hWZCqOy#(^hHj4Hf{=lUUZ*+jPVcVMLG*jQe*MK;*1e4S3n*8b#uW#$1RQTxUps` zt|dgUA8cj4gaD$OCO`5aex}PBPIr?Cl(&4p-kc_M+ZbGcIe2J&14{9^yVFzU=UP%M z2e6D)g=^m&mSGb|eC}uXaZzrQ{v2H2q8_xpPB)8ppkfZq3X3_kbE8-J8w~kKey~F3 zSp9_BkV-!ns(V_{qz>#Kc(_Ia_NC@&y@I$DL5waRE|`bc9<`~a21vY0Ero}Gz9olF zxHEYhV8!%d?wkxiB>`Ynz+KOmQ>Xw}!4_R`{5hoG=o!e#)zShcHQ!hD(O><(zgywV zQY~Rrh#0<_I~=(hnLUTT?oIHBmXv9!&KHAW+A+9j(e9-^BAVWnFUdi5t&$jC{=5ln zPY4J5U9BIoB3>p>2matYvi9XbQU}BT0DkHfhN9O6Xt$K40GTZ}O}4!3#eDlaJEZeO zdRSb(#EdCUWYA^U;))Tr4|Fs*wkSj#HQ(}cP6TZYLU&j971fBxtk$UDn!f-fvUv>A zu++zgbgI6YO$FMzxQ?*ZHZ6|=%nQ`956pa5D>_#vawi1WmB{pm?U6i}*e+=o4+Y#M zfu}9lzgfums)?^!^w>owG`qQ`==bSVE0*0%W!lu`;ia!Lxv6kE?ho%H*J!xjvQzO- zu)Dh(@au3SyKSxLB0Szt1#kKzyoboQL=Qf=DR_@Mwxus0V>gk`_k}0P1!z?u2d<38 zLgF?|GCL9MV2)C_l5K&z`~W$Ueu;0-4F16e?~{L{)3oHlTSf{xvAK-R^sLWy!}?99 z)h?8{mZUnQyDQ%L)B`$*obK>CLsp#m_@-G*yGSuWr}Fss?o$lR@hn9L)SaBzInu>W zU(Acu&Z2-~(@AaJ;h;CsJ1M#}=luy}xkTbI9r?^6_d@H;J3$4pt>$-&Y6sGTd_r`* zMR|38H^({RXz;Wgd)e=W2SJhS5!0xcMFmB`H0&;GRyuS+&Cz(6Xbcp^=`rCDqBYBroeBEGsJvZ| ze}#$4!a;kOzev*!P0s6J# z-Q>!H-VZ6O$E-4y1z8Z640Qj1^tFJVW@4<)!5+c$0;u%Yvej`ep@KUc;BA(c!5}Y> zvJI}+YXLD_r1}q_6|T9gxk)%t-2_s3vQ9rf*fL#l_8@8NwBgR&4uh7*cMe=ow_M$> ze53@vxg1+_GefiE1I}OYyjb}o{M=svAyKVWutS&ryJM?p1;WAJ3ScWb@Qi=rGK`H?2i z4=sm=jx8%&q>eeNO^0kLq0a1+P(;iN8ZY0k}5BX$jOvTvV*GyBbvsSfG!?!i+*U;1_yk|a8vI(%mL z669_e-hDmI@CXXY7LybrcBB*xQhH%J^80t9Lvdm6UR$>HdhU=?e>z`3&CcmLe)q2p zHwkI$rw7esoWb8AS=V~@S_o2_FQ}Ubre(#fqE;OOrzP;Z%D(?V2PCb`sIY3v%J@9p31GqHEgArKr;}oyVPB|M1tj z3Fffe)O8R)Ga?Anwq3^$Y~|ekzExhZ4Ytx^pj89#Cyl4k;0+WM3VK^J@|N4-5x7cp zEY=G2VOdJRHCoNPnOq;GF?enCYHhaf+jXyVzSQJ&eQs3M0wIdSn{_xhmy zsh}!)sfi)dLopmK!L=sn@BKj<}OlBn! zU-v9jN}Vl`IsyZa}+8cQ!z)i=|I$MXx%fwouiPD7pJXv(BG zoxVcBk7L}x#2K#rA@+#OW`kn8y5xmilzm7P$sb0*{o}K&QlHnN+oXT;DJBbVRr3Xda__+V}LHY1Z zYpI0U&-grB!}{bz`NH(f2%lb)3ajypPR)zN*mAy3(ETDSl`qWlr*e`>*Sf*<3d*bcyGt4!L`R-S!HgT!)6@Ltr;8!y<{{xf&={I$uj* z>&O3qzU@P%!%>KDP)aw{Pf#$1{jViUm+U*wv?d<)%$^(vO^!@JgrOgEEK8H`$MSi{ ztPjJKiRL{MOO2#R7J&#ufAswl^?>a#Kp=uZw$Z4T;*Uout(!2QWfYZJ>pe8LzyN`3 z3)uenh6Pnls9OvnKXxYgeT@}H8-^{IH)H35EkYJX`A}0+RH$rP0)nFW2vQ;wuwBZ^ zeeW_O?^}?Og1|uEk(&DPNIZ;A=^$M8S|W2^YmyyB?T6E}`6qK`Yy6FU1fknxWbQfur96!m3|aNtF`eI5G*X zB*3q&m++!51g*u8v5ffcUjc-5$jy!XfN|&dway(~#6SvpbbZA+=(pyb9m*4Eh%^M_ zn21aA>8v%+7gYYb38A<0{ZJRufUz?Afg5sV_7|B}GB*kx+_r5#^@tM_QP5emOoZKhFZKCPKumuHMrNRLL{zeH~PUBm)bdYTb5o zO^EpWyNcKuu!nWbdp=Zm4GMBwf}QHaw9oLfLC`??oWiNTSPL~OU6Rr-@Z;zmfYr+s zMlsjnu$^0-3tXaIZ8S;n7a~q&T@B>r+oNN>hs-f6`+=5NEQ`D5H0T@Nx3YurBQk^m zCP+roZVaapUWcp@Fn!DgrI}sRdK8J6u71)7Y)dTSmWxPvKi1_yB%tv^epx`|2 zl%uL!5|OiT}0ULNbd zTzh&VswNt@aq3#Jy{%3A%#ruW30Hkz#9NMB)NoSux{+peJ8Bgg!dAi&_qaDZo{eNS zLYg74MYK6O$g$rGi1+8%Zv^j~AJGXNm{CZxo+*0ANGX~Hze2%PA);w;=;|?95$}ip z=D78D!*x4EU=*Vf-gpys4(;px9-16&)8+0-%-jDo7KdcLL{^?dvadrLLd2R==I{d^ z1{%b!2g54qNN4rTyn**l7B&OBYxnmW1DS*T!4-~p)x#E7;3Lgo;`b1)!7Pux8gmot z(%A!fuud=BK5x$jA}7c_U$~-x4@`32B5=-N#}DCoI@o>W>mVu51v4JSeti(|!Hz3a zAzgfj?jWRDG05lP*6~S10&WZ5@}ug(IDzCwiRZ(XyRGgj^#a0)Ex1Tj zwpk;bXH_LgZC0nc_{121&*{2y3#p?8EXnD1ji^8(_}qD@c)IC=clN&e_3O`?aHx%zv%|x$|1D8{uW04ycLtOR`!DPkKC` zP#oK9J+$fy_xU;m*%B|Ssal`(F|}8~0cg9`{Lu@8^P?LfYt6<9bQQ_#H-OBrCC8b%Rs?=C{Ce5yd)-M$IC8Ox^xbNx`{c`YczZ2`FhI?nPZDaA8tS-S%{5}!USOvA#(KTrWk3B zJ9mJO=5A~j0JG)X3(dK6ac*NrIa8*%p@-e5!Qg#!uU8&FYv?kZj1fX zbJeD>f^B@geXigiv0mfdO-7+z3w*{>EqVF{l4-j!4SfQnyObek&<@U*eB#3!J+XLb z2NHe-Z8vhcZaYng@W*Kh5nuPhHK8548!r#R+q&79LFi_q7`Vt1O?w=(SOktIP7c1iBs~F?^>(el)iM>hU|Bqg-{HuwiYvVSI zxI{J)P%|SaAYxR&04hB*8Y3V?KwwxTCqS?hI?Y#%-*?{m3%(z6PM@6WTUA|E&%MvBd#^$OE=Rio7B*RU0Pdy9 zjV;UA$lHRz29PeUl#a*h4*l|F{wT0GTI3CoE>mJVuHw(kon2GyoC%;{Rko!tOOIq}hebBFbq&#ek2&|;9# zB<#~Pl6X~b^dJ+f)i{zI%ryh+@+cAHGKZhXJLcTg16j9gq)Y>hyfc#5hNMo~=h0uM z+UMA0df5ddn@oZ{tqgTKZk9O#JUK;HZM3k{u1xFH{~|FcwjQ9KEH!Q`q21QCEwajW zle?GU-`!}PaVaTBbHTI0;0sl-YESVI@)cufO!#u_g}X(uHmJpVA=r!s+ytV&Z(_M_U=ol!I zKyDyyn8;ETvLhItL!0!^wuzh_OI=T}&OQez;=iuS8x)Lr?hhX_RxRUHkSh5QSPF+DSN(Qde z&H{|G7h2d;0+ax-jYe(BFO}iX?w0V!M_4tF3AaH_Gr9In_LwmqymE=KBm=+t9VINw zoS+R7adjAw$GJ2XdWHy4>+>B<1B5I34)o);K$*Wjo98Q5>;#A813XXuOhO|?p`(HQ z(zgJ>QnH8F5}#-ZT25_exk!e25-DgFjw+Zilu&bMCL-aCjLdb=>L*zEuYq7T3H1E$Vf(%&@tQkUR5~Yr{un~XD`0jCrcJs* zU!X7*fJO04aBW#er}%c!5}C=7^krVp^@dh4H+uEh=lSSmJW*Kem>08WZP(E zb@|`#hr@@~pGi*8xfmFvc_`k##y*F)=W(*A(u81X66ScWH?Qjry&T#+vCyL9+CwU) z!SqK*yoaZ|vxiSU9bOa1M5JDLEHuDt1Rln9yM(?~Q|Ut6+EDBisw3fz(Xg#+76Z|M zC2ep}kHa3c2xz@Q>qCY~TLpb%aN;X`he9(*b1fHgBLWHATt07A;A$rBAenarr8isd zF+Mk3)vi%q5whE3BYSRas(#6l0ZU_XjdKhaX*%<}s(Luep--{1hH#Bt5XsOPiXh(- zy|6gZDbmwlA~!niL2?Uv3<;Y*e<6CuHTdpY(uvc(8SU9dtA3Ybx@)jlP-j#(`b;k9 zz)ZEDwH@E;k+K89qw~*cU7g84pPO2&<|mAmyWh34AT@H7Uqss`24+0evNU`3#nWl} zi0=nrY8UHb94e;5!{s`FNw4Z{%rOF+%vhi@w=9$3X0L*80MNe9!&hAGC~?P6jlHB# z3OI;{>o&iQ$Ovwa%v_WoS(Z7I1uVc;koEO35f9^om8R?;hu>4PMFCP$A$y(*()fHa z<6 z1&V`+mTKOBsFFEK!P9q;fI=imqD1%uJbA%ETtdQB(s8-hG%Pa{w0RDMz_W*@ZCEHt z3sa83<2V4vL7d-9KMYs3W6K%EFU!0;X*(g@mJI~YW2%sF%Tq)6)30i9d$g%DTn@OM z1JsrPJa&d60HFe~?hagf4`=eL7+)Yxu9q=h>>a#!eRDS7weA1RIcN4)$!Rq zZzqY1)Y`T1{L><^B)+)ZvruN&H9G3C0ul3N1+Z-eNYP?b|%rKa3RpCv(~mxDH3 zO_{<^G)#}&*IMvrZ9pSerMm@Be26J+ts6Dkcg~I`9~BTNK-28<|Hx9%X=&UIR3de?DxYAlAun6JkD!XZZ;b%qg#GScGbN*o_ za*}V)zNmE#{S@|ztM*%`&zLWCf3(M}@mkPi(?iovpWVZZk737N{D4>7PRLl5_=bO@ z?=e+pAmHVqa;seIm4z1zlU0|_Yfmh`NbALAt;S}*U<%a54lu)z;Jp^a?k_8uh`N{z zuZDcR&^&96v@nQ$(^a*r!k1uH=u%!Xh{SL=vrO~ghg3iPJ@LYCjIPWC{=8F{q(qU% z$}Y~NNHc?-@$~>4*1i-Xk>#wdC~5JeGy!uQq;L7qJCUYx=cu8e|D{@AM5$-hDa}fx zP2_Xv?dU6<6a1gxD?aY`Rh33ucw+ZQzYlMZkEoLo@iU~}Q*bwRQ7U}`UGSk!)5{#1 zXj@SNC2N{(2t`)0J%_lrBpq!=-VY23k$rn2Yz0#)*X}+)5_^$a(N-ZkspnJT{HBru zEa^MJM|PyzXC2XO0To0j)D~M=2h}@qTXTE5&bqCyiu4bC=5L;UW!$!FS;jry&s0&? zeB0^X{q+|-ZOe6riUtcUw+mI#hgU-tfe32CTeME=bas@cz@D+D z3)-Y_GND(oPVLP1=Jg>E%ivC~%dl+1tJOcq{=$(RQ%0|`1oOjwEycOhs_);qIVtqC z7+r9-@Qprr-6O1F`)tHygSmdQXVtHK=k;3~H9-*FvG4eZaHJ<>Et z(27D}X23zoh6ggCg-iWqR9p>`1s2a!WX;hK;FF%Wl=`>sipipoI+$eWBMMg5@he+%2cUfBy zGoRrqR6p0nlK=Nq{>F_eutE(zsMM>HtP@{mBd~ffkUpY2_jb*JV?S?JjW)u1N`|?baZ|(R`%cHetDlGbs*mjXjTZ_E(-vs#&hvb)m z04L2ZLz+CA=+uds4e9yM`B0sOgeXIc7Tij!zJRz--iC9V;&sSr22qANjX`mA@5pVWE(pq%~FdQGqfT*Bn^+)FiQGj zeAbEYhh@T-&&GKC^5ogZ-8#m$c_)*NIx;G4+4f39Bbw>ub`RA*r+>*x>2bhV_zO~x zLk9uf0H5x1Ppd_mF^_o%o*0e|qgRCWi+o8yk%?!2#SnH%!cr_$&Ib5g>y$XHi&KFE zxQx*$!s&eK*B2Mr)p+R$&{2_POggXmO<3cNzZY=2^h&=It(<5rR(m+gW&_=>cJ%98 zpo6jA=6vK@>UHvnl)+lm{4-h?&BgQnT|sK)8RAsqn;oSYwfj*}Fk};-$Vx*ZDyq;Q zh1tNJM%aH;gFkuh@C3ge>cLe6uCW8sfLD_HrAjpSg5c=3`Jc$G<0%0Yzo0yNH{DtD zukt?H{G)^$+>0z%*c<>vvF<_)`?bjfCjI71?%ufX2esQDs{PgY{OJ2UWw~qlf{N1J z-{$FB79FY9oMMwEu-DsThUzTf2BFzAoKBb0CsWh z?{SeBZg;5SR3>ZOG0Hf%*k&ETb?WtlILqVb1KE7iz4fTq|7Edi5BwSh?` z;>i50eXAtnDh}ht09K-P?S@L|^ShSjX*5a71Bl=Ym^X|8N;BJ62{qPf@(W-<2pr8! zt((|zz%+d-mf|El&lcYkAy_Po?cfy=g`5AWc#{e$(cw^|c=sCPotb!TC+WfTiU*@a z%F+fbDGFFXpMM1TSajf{yNiF%DFx+lKxZ~Ut4ZSKrr@|!sZ5B4+SYJ=c|f_*r#vY( z!mAeeB^6N%Xjjt)52=Ic002G61>_x&HHkCkk9}=T{lC6qwF|&;3Z*a504Z|-Mhwy^ z-3PxWgVIY}{9^X940v)_s6t1?S^aF_Z(!;70*eyxGc{`}Mj3}&0d)N{#Fb`$0rRdO zFMz~xFxD@nxApT=Mz61slcWC~BT=Z52h3+McQ+VQ2aTGrvL#D~wV;u;yQL&2ImwBXlsst>>8>f09Ni@i(j9`p zcdz&7ulW9O&Uu{uu-oHYk1Oxj{X)FdRVO84AbRxZ5vitziaz#v{J#r?kG;zo?R>;O zaD4UEl^%T`X4=8N038)|6dygRNhbbhjfZ_F^wKc%ee{SJ{J#rld@1Z7_D6=ds-|xZ zJRRN!So_#NdTH(K@s?j#)ezz@!Y{@zB&2?(B=P7G+(1)B(J;{Rpd+B3X{w>B;;M)7 zs8jxTvtvR)GVW72#emdyj&G91{P?u-@c)*>W*SNW=wk|^h$xL7Izc)Px12|~J(6JF z;Lhb7*Y8FZUn>GWh8#-CiS=Hq`2|cJRtJP%WV;&q9VuyYrWxx0|LwLk^YvrR=5ltT zlw8rTKOA-0$#OEiUTDE5q_)XKd_640B8Rg%>FY@&{t5DOZPX&GDnylBGU62%=v3<` zxxz2x#43h1CPWrq1if~0&3fnHu;A?ID0sl6hjEfv8V&176?slq5|H`#u_V{qoL@N- zn6P=l?Hy<4?bo2pU~BWz7TO=hFsY;Q`r$JH9a7&QmuR*E0@jWjLFmfuDjQ8{&_TbuE9Ap-70_h{EhXWrnR1gdmc|rpQ)d1PsG&7 z2wn5m->fXx{Cp`8iRIPLZ{IEiFbuV;Tl@Qo5{~2xZ(T2shXjV{Yw+AUWCJEI7kt%^ z0)q}`nFU4|o6gdL)&n|(J=gL~w)N(3cmMU@T3QJDExQtz9)yRkp5s;tn?_2|jL1FV{apV*K*e1P=`R)*MAjCZy&Ol2rRUSfwOSn>1yvdY|FK(m(f| zK$mXH=bP`%ilHXIzl8DR7lu{j72a2n(!)@nx1Cq!x4C@}h(EQEee2SUlvphKM%wh$ zb)Ao)c1LvpU%6?qq`<Qi@vV`h)@KIa)23;y@xo# zR)r_GmbdujvKq@_noF)?%%N@pJaM~JJhiw#d#qKH*xB>_B$3gON?T4f;ifBVM5s)G z>RJk>6P1VN&oZ(}9`-e~i5;jIY0q`E?@xNAJ!+`Ep?R@u`SovR z_fcVVNeJ#vVJ0(9CK|>?QE*|0|FQH@3tJs7*rI4C1}(={;0UaDgm^2AIyA+O90G_Wj4b|IXi%!E+Vl{s2}9F$numd1m*T>V67}GbeWPu>~63x;~#$FYkhhG`n$7q>CV?OWHm))_M?p!DZ zA5-!rB3~v$B2gSt@BksF!ho**hEY1=qu{ijqwoWsglL{!3&HZ>a)(0lj%AyFny1cE zEbq6}G@L-+>TN=@l=bt~ltd`z*!3A}BE8S%D8_{9G~9le&Iv`H6qA9UL+d4s$?U|H z7NW=~Dd$tb|(ovc%ClLgXzJ&LcNK)n@J#OrHc*y*d1Y3>6%^}z9co#-5l@rr^?_%|jR`ky_T z`<%WXPzeJJ>KZE{6g<^hOyD`9Z(wb0J^(J)aoyws5lIdT1qxwaU#UjPFv^0!7Mrp(S9r~ zNKG#C`~62IAC6&B+l_e1Ake-;aa74l5o@bKSwFNE$+VTXh9#>7=H>}vK5pUR)*Zfn``H$Ljm-(fSvMFZfN*bcCwV>ka{nwDY#w(2Q1Qg4FEbo{0Al3g`1dI6AFeTZ%!Wd z?K_}VT|n-XH6sivPO{}H7H;{+{p=Ky!tuEV>;!@Ar4)H2X9)LR-yii`PCsOo4jNP! zcAKFz2%M&ISw#V4riHWK$|eOJ_$q_mnWIL>I$d&tDBD$QLV!^!63as>FOAC^)G_&Na+@|K)I=GWkvNpIs7|tC3CeQ?YX{@srBRK71*R z{RBN7ob(NCrhjX8ALD4~nEfseBG?67hweb4L*0l;O<_;E2}77q-#17Yu53FALWkd@ z)mCT)@wd7)CD@Mn7>46e0!k~iMzBcvEHVF)K~YQaH8tp;5Bu?5nG7LDVe&PnE@dVH zIRgeu5+ICLOc6rHNmP<_9JgR!a4aVo;lAc;2z*RyTSaRy7uOpQkCq}Lp|O15{Af*> zU2xD9FQ&aCLkNyiWF$qHyrF^B#esssvH z&UcYNOI*>(b0rwxBe~gTQNg_hKU(%D-kB2~f+Rv>Rnu_Rl8>9ilV4bOCR14lciAJDR5P z6gmJSq9rW`#Vec~8;ZF4fYu}q?HT}u0BePLeSSOBuvc8%^s*C% zf)ON7gf*PvF_yP<$b$lIwvWU38W_N>WEOH(*N#-U_`fI6tCh z@!|%(*eg)%HE_;ETdlkWD^J&hgMV&;pgOUXl4@&ZC<+O6IPDgsx^Y|)AkPSD|BTmJ zvJTV0REiQ~M8;A~fWOgn*pocL>nsMGnP!r6(FY}>1Q4k8|8olrt=qb(lK%&LqSr_8b`6BM3O{1_(X5u>Zb4FREo}d0|41h?Xlt5l6OVjpd)surz?*G|m z;r>zpL$V}L)3>z0?`iBh{VxTdWJtd)IGDuzSV+TJ9rD&!)5)HxyRuO@Z|qavai*pN z&D;|o5BCPuk8|38UOulwQw9Qf`LpPYyq@b*NvpZ2=|5N7O+m%z(r7Hwzs(}pvWh^_ zLimY8kgf5kCx|<2q&=qxVHDOjP0CpHo8_UyFA)STM2_sysxarmd@6WdLn6zE$1IKX z8br%Qlosxc?kkU3I?lust^ILyS7imT(W1&Fvx8>@U~vi+S|`j2N01I>)x7u(ZFKk7 zuAh~eqo$cF@zMn^KpO$QnoLEf9hyv(Ghp|oG_pFr6p3dwM7)H&+$0Di7*Y}{_!1r* z4A5pA0#~3)5<6qOtEsPJsAiKQRbdW;Iz?5~bZ*-ThQB)qHu6h;CQWv2fi(vO=Nou%9wsupE~~{laL~dFiK8K2O_*q z><$`SByq-wl3S;m!Tazzd`4Y*iJ5sxK8NxJIR90^F zF9`EkH(_SOUbzD36oW>YoVhKl?jH(fE^Y%u~DB5VkJPOTh@kR)X|i+?v7us314FONn6QPB8CG&a-Iq zWgP2RLFvSaLnbj!tiaaK;-;Uk#hEC7CvBD;+djW}!E}W7Eru}#rw2*!^=4I+=TyJG zC6sk&xzAhQAnoQJ^p!83_<8&G=I_;x_a=roAgWFxi#&?UgInM}frcdrk2_>2A#z69 zGKQSTn<%m%WwxkVao$ODEt`&583sMcd_xf!z)h`UG3dzuJN@EyRr^V2%aS*KPKm_w-OK5RJJyFURNEe7ANiU?_sn`*Ww-wf%4cq0 zl*)&zy87pf>@~_NYU5bR`CJCw5QOFJElGE!FJyRx3qP8%x*KCQ8_AaS-V|#IrLXJe zH93;g%MZCMc01#fTOPZg zk>BqYzAXd|SMM=Z0$J~G43^$IZ6hk`0Zo;&ewI?|3rUv9W$78me{Gxj-DegJ+s>OZ zvZ3p-wRwB??Tu5n{2nb!NWDEkxX$0uwxAx7N>!Ae;$BrDTG)e zCnCR;l0VvW{7-IECwoOr&;sxx@ES|wllBvRaZ3BN%1A+dJon^>ux?2Ij~RpE1b#Wgn3F9hZFi841WSuO zx*%{bcom;CzWm^UZoL@~ZVqJ>!~AxpYo%K7{ITA}zGrrhC(S=_kQj6DpISFgI-iMNPV>bSXtWvZCQU`$E4k)oXc0y?)CP|#yMwi(#%1}uLrc|39<@&)%&t{k3uhonriR2ua_E` z>N3prBvmT8SW3jdTwLSU`z+g=jrg4oB$su6;+XWF7uprQll1%So%38*PC+8v$=`g; z22P-`@&e@6^YhsWz6J@rj?GJaBTY00rQG=CmofhO<%>l*uZhI)gxSjwg8z34j;JkZ zKQ`MqMJa=k*rua42Ec>n16r{LHAk$gcq)q%8StufOd4`*WuHwhfAjt``L^+5E%{Yj zq(hZF&t8kJ+*wRfM|fEUze>mPVzQkqv5a50sz_mFZ$^+q+d)|_#q||d>Rk^a4b0&n zB_J0Do=php5a0``G4N1syY>(xA&Nq^}r!IdN_c>9zB=);5aY$%yxdm3zdpjBB zn;Qm`E(6XkvQwijKds*#bjTY7c`2X&U?!r7JH9_P2k~Y(k>DQ zkNtAapnjjv9{c6pV%L5##;mRU*e_fTjBOo~SC^%=`jV&3|FWu>w)}RncV{{|ti&QJ z9&gz6f`s&SfDzOI|9giTt^)p_rW>F>TZv%j@CA!$}xGI?**94Z#(-<{Z7 zdem_dzPBJ){@(ZiC;M=cxt`c&>rv5}HDT!P`Jm!TGzFczzbxpf-NApuui!}0i#k%$ zn8RP8N-Lz+a7MdWysaXvsIzP3C``$fPj<37Ajf~`;AX#tVtP0@09^wB*7wc4RYWq+ z0^kdfDJ8(jWVb;oM5r4ea0v{1;Bb*UEMxJEL4BDE1cltFnvHA%^KK+J@F*I@fcJ2& zI~We!=}2J3vo<^mRi#hvwh+3*x!ZaT_A?7X zJ{M?J$)$Nyq#KguY2lOA%4?rj@O=>FLvu|}*&GWZ`C(#p=Z~J=e)8x4efB+tB$bV@ z_i0Zp6@Y%%;qc4zP~&3iz`lQ}ry@C%fUw4ivI96OFjb7zW8NDV%37c6@C)h{S#Yaj zY5CuUIx#c!_!B8@^)QpcmPp5Srtbn$`X?Yca<-6+nAfL}^41wMt^r7Xk2*9x6>{^9 z(6u}T{>Fu~HOWp?a68G80mA=q3C6n{To*Bgv()}E998lKBuAr6xfC`WD4u^pl|lrk z`&;HUR*iE|vp5}>>zTkjhmFm_yRE!9=&|Omqy-gS9EzZ-|K0bA8MBqrvTb%y!sEk+ z4R*h5-_IVMCvXqS@1)5~CDV0zU;NL84Q_+<3}XM%mUX`;p7h26Vo?@fS|pu<4JGz( zz7S|9ygejD23K|746W!$kUgE3CvBkT` z2P7+;in6rEeukK3^~|-E_g?3o$I8>g!{I;=k$0?O^o<#xpXt;FjJE6O4PZA(S9)?V z1bHn|^kgEiPrUU!Bn2fRVfEjZ#t6+%YZn|!>BJ>f)=(GVJrf|{^V=x%B)pVjYA2yB zh>mH{JYmRsgS2TlUFEK~dVCGR&bdg{;5(YYx%)jjJ*9cgtz3YX#JimlHKeB2d(Q|fcCH$`G$l)k_$Kw*7aY!b6eY#W-n`v@L zCjD<{&ypiU&;EPWbf{rHUT>}F{U(;w_ODJ#4+xfh-t zvU{QDn0LS0WA7Mt{RQ;8LLR8gQ$a12)=K6!BP|F2OB%kNkw2Cl*nQJ}`=ggX@p|a; zGWYmK0{OD*dT6^gFMe}<;cuenwMt`6Z{CUEsYB@AFxP;m{a-Sc?QGAX>?}uz<-ZZ0 z1g4#Q8S(}Bce^5HBNvBUt7!lp(jT& zO~@Leb@XuR8N~k(}Iwdzf~9$h~?U&aUn2t%dM}3!JWE`G-x{rT2gCtU`6= z@1;Dh0?DPp(hEaf3jtyG+#P4D+dtcC|0RT-m1hZU-<-$GuV0;TcSPR?th9ubOV2u) z!56kwVJpOo%-DL54}e9_*R4S>DCk~ufnJ1)zb@=#{BF>dC;HHnLqRo4>sNJ$V4%h&DAcSBlAWaN&SQUXa3DW0FF5b{mox{2^m|?6EaFK#b_+z?2Xsc+Lap{>sMLx$!?_(|Oe_1bnsmqI zSFMC%PzWg&pt+4lkBmiBDsT=PB2;05bYRCIu%k4>N*`fWV$FWSlR~F0xb~Eak{*(n zi{bS)-4ZO+>p?Z~c(gIarA~sII_z)CXOd~YPSFCCf4 z#Pv;jyHUG17Ac1HysXMT?*}7|U%C#i zq&b^Xr!;(?k21BTTSGFBP7A+v|4pB+9#cg%Pqh6Xlyq?T#y!6L3a3dSgA|>}CJ%Bi+`3$UM19F3^F}ib3*LdmWrAwaf{QY{mspt<1k=X9$6r_3=m8XZ=cgxb#pI`Raz^^ zK~rQd?5t7*X7XB5C7|U6wfkJH;RoZrv;lUX`WmlNmBenobr|s2#%q{Wgv+fQMDrOI z_STxhgGkb)_9&+Q)aALHztI!({bIaKYU=UD{EnBA^e#)sFuT9nttYAb{kB}nk6|d4 zG&6y}Qe@_V;f%247fYJDZb3V)S=9@^xi;LGLrMn0ZX3Ez6DK-*bY}#zT=bN_VR_6{ zQb8v~jq&;tpM&gW?tX`%`zZg{%$mq&5g%|-s9dFDOs*mQ-d90vUN`llt=xRtsAJ2cV6xik)+1|2Y-S4oM&sW(afE;KE=srv4Hj1H}{M8U;Z22_k-@iT%!{EtRUqx=7PBHr?>?X>pUGy>&aFwk_^_Goc z!CJAbw;vf2e(TLx2I)O~Shay$49O_FZ!4@w>HU}JfEZC+@pUR>JNbF$R5)VbsJr%y zSBN--(p}V)DE*CSWj#hi#HrXsHd377;G7}C`14K&*(@QS=IR~=-TEq@1T>n!4R?X< zgiP1kQ{PphX`J_juSl?I9Hogl5S5Jb78(!yW9QAMBDs=rPW-= zPk01j@E;0klBt~OkFlv6I39(f%FIwEYuAXpWFHE!EJogXjPCbZ7Kv?Jl^%?A>Ja2T z5HffEWnm6k<*MJCPj+64mT>x!W#aUYa`EV%7V_Xu8H`4l7!=1-q-ADsD{a4j5V_w} znhLJ$G$>>R(m?F;V5@xDW$&&ycP#$Q^lLUD- zGoldby0JDUdk&+cMo9vAGQ+AOA90kpf=#h_R8ls?)=tSCqHiuJOu+R~#m*nW)W^FG zTTpSx`kUjbW2b3P-NHr%p6g?Rid3@?ngHmt-UKsqR!+vm%$8ifgg)Kim4`LGv|h z^@ub6%(?a0g9O0{V+uP+6SZAgmnffl3zE4dbm`R~!X}guA9amIN^pQV%8Mw!ls`TJ zor8Wu-?!+_9nlwJstLvKNa<0tL4hNGyW+4KD}m3fIZL`ULUM&gv7HuN4J;6ikHETn z&Mna%pV9BzPJNe-&T~5p=WEhkQ3+fBB7*tk4j;B+^T!(guYxM?8i@D(md0 zZ4l&e`x91}-`WidN7RUBQ}DwXA9>?_tC;qCMV4x+Zr7G_e#e_PYy9WaC*zvXax=TU zqJb#Pyv+j<>}t_!8wx9-G2cSjg_2Vf(F7_h4Be0#PzVUX8iRTy4Mv*k z(_zi6m+hF4I?yT!(3IopyHd&~cnsWv9^8J}a~adHw8Sp$zN^M_W`)JVIW_aMe%-jq>9koLstoN~~WB+KD~)g&xS) z$^E^{-`P0GA6JQ!Nl=xuHg~h^=?^$+{|TsSHs~06H;_x}+#io(yAjG}Viz$#`NC(S z#7=PF&*xFa=IyTWnh`9mvZmlbIj`&A52Y<+Kike^tA2!VkAE}bTD7OVazl~9>7M|@ zxOqj!^>HiEl*sYd)u*w!|4n#f*!ZCPtXIJjXU%+o+%BbuQf1=>zB2~A-q~FFUB(oS zTGaI=_AqzWNO)UChDCW3w;#b>>#&fovW-WvpKt{Z&;tZ-N&KE4iE=f9$$f%i(LsNT z*@WmsbV=GJ5I>iOBhk#xqm<2S#-2n!5Dyn&VvZQoFHAcm49c?9She(*A%Wj2t%PMi z($C~PBu5No(y`ZJ^{Ib0#`~H+cB6ml}BRrn9Gh&KNBPpuI(_}(% zyVbBWX6Zb06((1U=TlhYeL|5%&L~wo<`9pDJuPG>cXR{uuzM+VBVUN7k@_KLjgXg{ z1p86-(n_Dse!SEE3s0by`l3{Vrzztku_0#2(%zdAExPrXI zPqzfuNT>;ZQ-5+Hh+id7#w~MC2UH`{lfi*sjZf7Bx*oyx^!KtHA;)H*5MzB)XkIMT zVT%Jn8xgHnj#dETYn$3Y033)6tCt7?C71@bgl=K@2JdslN$;3uL(GV1*dXaN+v&lc zEktl+AFogpb9F9fC*05EY4Ai)>)+|vQ#|4a=?@lrP2qp(hvfXSYsr`YTkW;-A77#! zEfITls+YJTMRNhC#-)TpKtOCEE^W05?gFtY9EFpTYc_5PEZFqWM_EWFMP`$+GM zaS|Rx(-QOPXB%#`Cv}&xr z(^&mK_mwWrFv*w|iRy(M8-iqT0cV8Fyh0#z=X7jOpQDDEI3E3lxV!RPKgPlt#Jg@? zKVkeoZjT_xy0u4f{**C;7uNVtkjM!-{VU5`Q9c=;$gol?I^^;idCu|Qvwy`Pnof_A zr4i4&%{@=&qlTuZw`z~rD~T7yAd0Dn(6HH!Yk1Zyl!}E0A(AwbSyv_D+5oa!}jRU z>}ZHzhpP+&nj%n@4l-o$k(U<8Syti-lTGHz zo-yL~Iie+3jYt`5S&*w;-};Af^3$}|@Vgtvo8!Wfo$-Sv=k@YE(a_#h(U2wX0n>M% zZg}Nh+|@9(UP5)|-lb17g{S8Q9>$*E3xsQj-?$zZd|dpHeWmUBFGuaaVwN7hhCVtj zJKfoQA(9DBpd}I9Y+TIx-CtNJ!`E|kt-(7u0Y>tv^m~fXY0bS{TUQpXjcQC|hq!{1 zd*u+&q`ARA_030g7=yB%hTEu0x_3>iYo(Ecb0u5dhu5?-uIxiR4hoZU7TxD~ccwP! zS*pgSE-#0<#`PKD-G&OT?t)+w73m>E26Q#LjqQlVd5)C#L=M!>3J^&#)xZ8i6cV?q zwDvBgxl?PAf_o8E`L=^H*oX33h_d+t)5|6ZO$W+pAIKu4|4VD+Ud+N4f8vDS;?R~v z%9a^Fd8=JZ1%kQV%y&8&^Zd9M12}s6c!tNRB*Jq_i#AS<1?2xSGk2a7B`yV~xAMz; z@V|d-e&OrXB`_AjY$BA@=`ic3^ZjbUhdw!&Wg)kS%=gmZa=^C!4&!^CN-jS6GCKm z{lW8SaYHKh{v2B+*JtsV&e811w+>mHS!RFSEuV2D@{OA-!?Ie$op}-a`g3{?(z*`F zN=$H>__R@fgd4BR5nn_GrHY+EB7G;>fKanXTp!6m9h!utTL?yAL;(39`D$V7Ck>KZ=#$tx0E|A{(*E*{U;r>;qI zdVEjvQbQDc36jzza4U{-+emHuyFPI0&4FTYD^|X z`uprX6UXp;czlc?f#u^`a$&mOT^~@o*{vnYG`q`egV)dMZPeC5=;z<9XRd$mHVnhB z2Teq`(K-z8{-`>a#%@NwU7-ECXn&IXOx9Q#9SkvnBiDFqG8U(R0%>?wF!C9j1x-O7 zAq55zhqb{EBueE>9+gYb4EM?dw+1RxPJaNS3tJ1%<${*|JNJ@tS&3K9yo2X9aNFaF z%vBZq;$V*=2M+&N6=T69wwEQN@Af+*yko>!+~vRC4{^ z{@AjKjqXY30qb3v3y@!yzu}+f%os_nC55Z3-m>0r>yy6XnZEB^^`sSO^TH#;Zs%yZ z-JXZ#-tZ~Jw_JNOR9};jn)<}x^ULzs@rS<0=L>$1FA)3@U%9f@uWyJ&Ln3Qm&Ammcxy6*Z@+;XCt+qNE+IW;#L3UURtp}4v zOS^6(J8ysfvYmUQw^+oYVZm`|B!z*l9Y#0PAg@c1rmDmK>^!j^%1Y^cSH<4_6zMeOM9sRC7?9^NW-F^~)sS z{`Nv8zrK_03|=jY?KiU34OXKyd^QG$!wb%8F$IQj*u_D~k6PTTxFCbcrtKry2g(?bhooLN4U}n!VOHU2DiFyKA>) zKk-DOWeWe1!~kSzm{i+>b@ffi#1vQH()r!j>8r|mbbD*}J_8JN|vdSU#ML zSdF>W&vs19tC|sb=!=g_Fs@P4-3O6#c&Q8wyg9=k%&tHguz5*P(;51eq1X&zIODC2 z3ycyA#@SSJPinq^i5*_MMYQwQ=!@7^C<8B_w41J(Yb-pw8wJ!AEkSrE-cTaF+a5W$ zBqsf2zp_I%(II3_&tvB?+Q3foiy!J%qfgTV#jxkh2QJKYKu95CD<#!p`8%|hXk^to zrY%KdKeyZdqF?y_YFTGww2#@uX*rE`%z`yc%j(|_542HEq3C)`{{DjThMOg0r15hY zQ+eBMjOG?@$&^DNNp8&nkzZzTgm_-N+S#R*Qou@ou)HFpRhdmGUcfWIH@bfv@$4iF z-Q;;HQFm z8l-1|PM2B-#N(lIByOW*N_;#zj!HypaRf&<3?$Q~0I&$+39#S?Jn-kD3;=N4pml7m z?Uu1BI;;tc#xurTo9>K&8SO%t+$(FoEfW0nvmo}Kd1MKAtw(9vhXpA-D{@hcY{!dO zx`%1k^+85C_8<=1a0U}iHY979c(z2EygDSzcN$7PX|7e0olcrkSXxiS?GHNn|NGGQ z0pm1ipE?XEqAF;()8%RG{`UgZA<+4tMExAoW>7vT{B_cv`#6KLHKrT`#u9Z*Y7Sn2 znB);to&zi#?a8Uj-CFLiviP`_lV$S=sl#sOb}&O(a^-`%Mz`TxGTv3#y&Cl>gU z*!9AfOqORyelw0zR(Du(e>j3Z;kH&}g8~cXTLLK4bcL?>nB$jfm9lqQK$!CHDj#1f zFb-D+Mrhi_*DuQQVn+#rsL^kjM;X~;q0@u&#&swouMRg_(1JIfEI`ZO2IB1)KR^;> z28)kdOsrwAif*T|vQstRGt{~;RsUr%q6@s|N_*jEjhS=3zypPtt!&r_%E;JE5#FGs z(QoDB9kXefHcl=%HCKNGvz5h>jCtj5=K8G=g_b-3y-t5HI^2cH!J!2I?HRoeZmxLw z*WXtzF0GLY*bw(k&a}!9)wt=QZ_MxY-4-Tdvf8m-m|sqIy*pMaw~ zX5Rcq=9@e=TD(PJ@cP6#^CK{ip_4e^5pYfhtaL-B9_4N$ZS z_w*%5y|PP037aUozF}FD8xNyTqe%bE33XuE!74oUXA2j_kCGbeA1RulKz_okEOpMr zZY(yHc*y|nJ$X7!?U@GpH}c&o^rl#2(RWJKx%{u8c6wH7%hEo_r-p0TA3O5xuH{kadIY$2R$tBvI`NI~%H?Hh!-d7hv1>vd#K-=cOUTGI<&GvVrYwoHd0l*T1K!Lm+#T$%hP!q_|P0I zsGEqR^P6Bwq%fGtB)SxOuSl~YP83Z;JBGz8$Fk`xmso$m1Q@6ad zB)6olO0SE=2msUOWH+zD)6BK6#lQSYv|T@`5OrKO+O1j3(ZV=m+%GtH8+M&t8}&l!SNm>P04ZlC7vKpJ7k9+-HcJoxu6u(?V{h zq8e(`&5IiL04wER7F&8N8NdHYrTsW6fIg=gEWBQ#OJ_K~<^Hu2U_jKBJx&tFYM;r% zQ^xD>W*_{$$mh??fh%FdKOLW+U79JUDQtGqd7N8l8{JeDf4!S|HI;CoB=#~C_3o>X z7w!~hQA3Qt{XcWF?DET$N<*$-o+;+m#9dO`MuWRm>9QXnK_3D!rj}HO#Cgp`^`nv= zTYm#8hkX{8fdt!2eUZVaj>(XpaxOyF@(r2I`JeUB_PiFtsi+OyNuL267qLx9gF^{R zk+=aleF<}k_(V+(oYP5q9n_E;WauQZC+TN-Ea_(z#!@NTQ_3p@L*PNZuk7_8ek0a7 zA%yF832A09d z@k!;2iN73X>9&_k#k|i&M=;Nnz04AyIQrx&pL~iByreAf4j$Cp!ON>=1_-=_)av6P zc(J6}KJHZeyuKeQnf6jfD0j{U#d%|5l1dzH5*CM?KJi4_!bR426k;53Q#ZhZUgf-?RW^;oY+Z?VS$zzy*%~oMYk3 z&Z+{XE*+SN(VwoYXAW+Z&q!yr(ym|B!57N3w#2_acak>3ogz5;!e9pL)BW0?-#GAF zwITMfgE2o6am!&kx_lL}usNd&+ z9>L|&pdV%hgGyV3yRC7Gw?wUc)`FIAZlHcv?}n=rr1WGVUdhyY1|w;D96@Fq#Ozho zTYw9sA%05cPREUm{kQIe=AnVbWq>zs0V(~n#)!cV<9w>1u7AG&!UO8XtVfI(Kyy-+ z>nXWEreUS1V>7#-jTK2s_U3wB28~NH1I$o&B8N9wTT~N7i?08~pYi-uPhC(p_qXz( zdHxZTlIe|D^ed0EXvK|klVx3d7LtYMK?<)SA>1F_BXonoYd9!mg50Gmo!x**8g8o7 z_T~s;-edf}K{{-+T?mkIQ~`+ma3>2_w8xH6n4AE=4+9))P|~vSA6^{ZvNVB3L^3yz z#G+7%J&HCobfVE{UavaM6jQuLaMOG28seRRN&tm?ejWo2lSv80!G#-Havj^?gK?38 z@k_#n05FD9;HdS)F&s>{i)+@c6`4*PA z+}$54Msq)^N=Hp=>(j!&keRDiAY54zNa&{s(E|Sk zM1r9)Vo-TkeV#Xh;taySPV5E^n^6XfICy;+UP8H3d9jvOcGR2wG6myLVFlXK|L#D9FDL(yzF zSkC&%n$T=o+*f~ffx0bM&)LnO_3!mLc0i0lBUyYg;@sGdgqd>gN$s!1EY&~148Jmi z8-FqN3DN>AwqAM1VTwwGnkGvs#n~;gBE5yQ|HUcWt1-m(_IweswIf?GbIsj^>nmu4@8DHYwPow4{Aivg7bJwM%cF zei?_+lp(2n3q>$0*l5~RVXL@oEwHi;H%PY${BEad-mUhYAG?fabmu^Uty#sQMKF}-8t^QC^BOR2Gcp|Fu ziL*}Vh1KE{n9Ofl!lRYFpCS~^zdn%<)aU8o)M0893*LhIKKm^2K3gIIgd=rV_$Wfj z(wqramFcnuua)94YEH^nw&9F+eV+EO&m(|3HoyLiaK*GTv@lBydQKc+WaCk)u3)2U<0-?0o!h$xSM*tG4{0vCJlFn)ZM5jFRHNBz zsRQ^0LJ>bgit4o7EcO&^AYg)`xCBv$R<^`8tVy;=>$gY~%eaPX!1(X0$35A$KXuHM zam^oCQe>*qOrNb5`_`ZJ(+>3neG`(drizG&;gR~X0NJ!hoHrd8@PTCL0d@5hH5V^% zwYkxK3@(OKNG56(8H{>qqD-e}NyQ$ykIRB&?dR5L4WB&Hjh72-h@L^Ie)VsyuJ7VacwI(Cd1Bi#2!YW+Uj$E zM?U`TI=}PkcH@CdjA`)T9LKqoFwA`u1aA#^TZz-%#W~eo`NUw>nc$ z;cd48H$U1~$1@vBH(Z0?eOKH|{Qs(Z^M9z{?|(dF-^bW@1}Xba_GM`7lI$VIz7CN! zCRxTl$-X7~Guzl@X=E@mN|Zfht&lYm@qP4qfBuPYw_9_oewZGv$90|Socp=o@8=*` zT9YT?Kz7RiEW2$D?eK>=;?>86^otmY(tHZGMYll_zrb%5`y0Adh30==JQQbRhthyQ zKL|9Ar*ZsmuB#1n`V?1%!I60N_|yKZk`={fGR+Gg2{mk4U_IpPYAx#v3|GK~!_cP6 z=IhwJVGom?ue3W#B@oqUz{=i1q^#JVm=TXP)>VJ<4Z%wbP)r{j5dU_K>_G)%^Y}CH{d6Mo{rpg zCCFIibarVbN$g`2?+QsI=MEor3KBiqjKjE;w!1)Lsp!;aFQ{UpfDG~QT|@%2zQs6d>w z9hRm=3yF_a^$-&LJ_D0xl=3`7!hlLivRt8*9x2$$YDZQ|i9#7aNEC6p=KZmdRt%|- zt}~iptnP~VNwme>jd-5TIp#WEqrH;(OZj;e8mD1>_dA~iQp{bjQvlKw-<$gjY^wt~ zhuFMxv31SH-_yPacf6mSFVaYj_VtEvqaWS5FO1ZXMxVvrP-H=$zQR)q9O%G_yT^j? zXbzBkG5&hG-Rd+H3&JeKb-)oq2X3Dj(2D`Nziu)qTfW10pZGNV^#oG1uLJO}Mb?p-(Pur` zwq#4@>Gy%y&!lp1HP@@g!4MJ!#4Tu$K#R0&4OSYfCrrVF)`Lo~SLJZj;_v4cC$ufv z`$jc@I!nUhURR_CD7tI?+-qxFRF5AQeY($KCmgmf%t7WvhWfDXyi#grV0zq6*Ld`- zsi#u8xtS!~&*Ixhk2S3upM$wJO1?7%Ib`#Y@wH-%Itv?DKj3T^cCNjXfd}c??mv^n zw3$|0ejJX=lfXhjYAWgULxQasm14YyNxk-FlD@}8B2ZQfv<#w&USgfj@J#JZutZB$ zMcI3?V6XaKx*45k-Gno>Z4tt61}2%7Ndj)v*#A8_{opro)6 zUb>ww5bTz`NM^Xm0#z;v$||fQj0*0vqq!(?~yytm-{2px~E7(I6=XqJSs>m{yi;!5>EP? zvqYd`@DVxF1oh~XAAaF+w-(*A`;$o3m>-guls~(Ja)9m649VpfDe{$Auke-P44lMU zq?-YJYKl=gsW!caOkp6jii0-Iip`Zg0}ixCz3WKPb}qD)znJIRKT9+Z8Ko&~cBtyR z!nZ|R4sRF}<l{p+%`dl`rA|5Cmf78`A zNM<6=t0o=qRn>rpuQlW0t`iVo2Ne(Z6a1_B84Za*2_jxy#UQ*nXjcAkvtyo}Gnt^2 z6H%|ukCuSyxth5fZq^dPvu~je>gBt#n`Yqf^R+XUaON82Fc8T3M7Hx30j>LRU;9zo z(74$;4{K!Q_gO|hf7u-1H~IeLlWj@KuAhRFVlDUAFyG1f`cOvgPrgZDtJ-gKQ_&mg z{8%-uvA_&xlNQQ!nckd#J~ey2#k;PmA>h6CIvZQtw4`8&ak8KH&@2{+p$-#Ho$W9B z67e3k#8U8YuU> z7eh+-M*Ky(msHPc}Z9B;Uv0*`ztka7e2#CuPo)Gi|f|X#?!j1BDP{t&J zP?(;p3=K3hk?;&3=itN1yxo;QWh+cEX&L3MuITlusvRKfx9HFRC?I)8XpN~Sx-bMa z{JJ@1ZyZHm&RaZjf(PULl`?Z8D7c}m#6?%`t}mNyCyd57!3Ez{u2}rXYH&hIheYN1 z5LS#V`trGuZ4z&ydqKH){D_p*%h6diks@=EK^D?Vy77wo zHr3zDmo?+Ep-3j#E-i!q+4lRAsvhEiI=YUn#!4f#a`MS3B!b)lDy#>91hR2_YJo5U z6-je;IQ#Hmk1U^(;XfYUEn^;^x)6*l>_jA2fk8N6E43bS4y9ZJGFVTi;GTN<*-eY* ztenOI(2-Gz{jWE3e;fXgxe_LO>~!TC@#-sg_-2tv`Uo{G%-VcDP85SP9oBY%-!Mt6 zrE#8K;2%#YCi^Mt(>IfHdwuBF?dG)`^IlL^CV|GGQFYD+1sAlW^`^(&dw|@%5Fi}r zxq8=$pi$QWOpK4YCL^^0FOna|Cf+I?1h}BgwS9W*+W-=(OH~@L!3FBB1dItvR{#gz zU~|%|Nzxq(&HE*+bhFobWN;BkZNz;bMPY>^OUc$;+N(bB)fXj8KZF~{oAHxodob|^ zKy;dppSR5XQsd@&4ImgOK`5b=kPu^_^)_kAZ=4fuAP}r301@}7=V9XXZ)di1@2Kd4ce#&Am8k?-(W*)HAba+?P| zB1_a2;mYhkqOue;GNcGp8gP1~9gumOD+6AJtC&u(REHmV9|y@-`VLZCb$x}EQ!z7j z-+-~9cv1Kv0j!J22~6re!~xTQcjD4o-`BS;P{bH(BW|lX>8?1=`vlY(C&uAb&6Ggq z5^*>Vy+;p-UvDtYqUj<8s|9m1-&i*3?BtsHK3cc74FD(0CyLd1n?>V+k+c3-lZbZ0_Q1jVC8Jni~8aOSdnB` zvCg@=56?zOk)k=pTi!xbiO`OWA`Og4P7Is8r|gNQ&VrdnO)R$e^L{A!6MvwdQL1r7 z&Zhz9z{Sn&u97lFGCp#YsP25+GjFPn1NSnx2p5C7cu?mZUqK02<~}%#E`dA4#@2Nr z8AVjWaGP79G%z2n<$=|}LEUa!5UY_#-ogDyB!&YHER4>pf~>GyO5p(ia9bH@o;FvW z*LDSj7QTL>i6W@a-GhwsP(Y7VIP+4KN-VTd<6Dm#2p8SXI?wXSofy1h&?K=8wwknl zFsT{e91MrIBcIi`K?qRBEUQxW^4;tu0R_h4TviPJqd>oE#m6h@tw>riLuTHA^g14> z11Yzh!~p}mm-!|SCOj=Cyvz_-TL(;$P&%j3fgqd?qwgw{^8lTx>o}ap0lb0ao%;b= zMJPf@zV>1C+F*6GvqRTm`ddn#_^<+6q`5B z>6Mv8ZYJ$#W)g=R3}#cAEMyOSi&itcgXXrouI)q)IM1jG0OI841abVagg%OINbe)UKHNUMf5OO2rG;gZIQ+T z@j`03h+4QY-^^7Qo6|)xj5jd_qDKcL{&iMYsVI_E^nlNBb=ca~AGq5XEkank6RKs6 z0kM2GMZ);%YH4IT{lV4WMSudCN}z{IFljC){uervyEXwA@B;r_!u=0Jac z&@-j(d11BLC-6W zUfD{28H%)f^@Of^UG@h8tpo4;Ziv;<6*d#I1*AyJKfaS6!VEu=Zefm8)xf*#`~^?` zF3%#OCK&Y))v%(u6w$Vv*SyTRXG{+?$rx^Uf5*9g7zyFeGe^Z5xcB^Ce#>N$qTivt zI(a`&#|3EkghNb(4UF%by(x&-S6U{L07#vp6-FOek9VBgbu_TXAHqvyD7*D>_^M=9 zcC^t)93nBnvc0S1~+IKfIADDcL??0x{Xi z_&zo;4aiWOU8l?({>4{sKM{sbpxLC9-rWHFW!^_fHV#(~>yQk!LQoN*AwXL|zGM6Z zrqs~RG&^D>sqLckY_2*aYog;zN04fdY};hVHIQeMDzot4XlJ6#Iy-?#&-on?h)NRHYbLpTNrdL?rXUwjew*0Gd)-K6K&>*8Ez`g_(<<4`nr{cHkUban9U~EV5pVfg|+D`;=WD&H(k$>#hUCfc*!<5DW(ulGWtd7 z_gthMSmhV@p52PnppE56ii+<8kri~mI2~-O?<(E_84w2?Y9h}3M21)Wat@Y`XgBCfd$?K}2n$euC( zzHRMNO4SN+sK@scQ1~id9iV#2<3>%viOaT}@Lo2Myus>!&;yG9C@^ax(@1RFR4E>; zA|^|_=tY;Ao=!03$m#kX&N^q9b^sKB$;7&P==ndFs)9i%zwEA}y_2}K^j%o#cjxyy z9#y|Sfv9?U+&nM*D9s+-4k}|4_jNE|>U&DeKjQSlM1!azVPJ5u#a>K;VK ze?Q76yZo^oSQ|4vslD=t1h93Ph(iJ1Vf36rK}-~eJa1DL5$bq%0omcL=rqMF+o@U8 zfSVFX+Uwvm!Rjh=E5yY7evmI4P(&m`o|uKV|H?v3QRo6C>;AWBnhTPgpTt8c3$%`C zD%05=ssLdIgjB)-vaZn>gw_YN#kQi|K-Ojl(C)3@;dB4a&(XwK>$xT`2BsVJvfcFS z59{DERu3W-UV=U?4Q(^L(^(P8 zdi0cXz5O?Igy2Y)m#Xc7Q4tGSL&{Y+umG?59-@elHAl3FO2%nk$M8QP2-?euwPfD{ z&sQR~sYxIXFb@e4bi>5;g4C5q1+l2J=I2QSBAKq1*i(0@1Z;>m3P|MaT!rO~9XooU zQ0bcBtb*(=bs?Y=z|o8s3ugWM)9Z4{i>+G~)+o5l-LT9{kKQ=15Dexua}&oV`}OP1 zrx2F~cVT>PumD$mwu1BtsGL`Zl~U_xiI#VMsEG!F)+$BPI$pR@u3f*meL}z(T+YD? zvDXo1lJZGR$xAUp%U=_D?_Y!&7?VldD0wSEp0_ZJI^QZWlBxD=CVhJpKrgTlrc#GM zpCqQ`%nYLaH+~K5cGIXku1iY%KCEWuSha__(9!~TZ!Ml9y9S;Hle!LxQgB1lTdyQ# z4KvPFx#(w9%SuH-wdy${Dr)gisnmMVTF2YpF^~5jXp;X#Tput}jRsCuW|%#YlGJ74 zwWqpFit+IE;G2*p7PPoMn#9=AuAi(_#Hq&lvJtSld4+$`QH_Py1MLI4MfL$bgs5zm zbUY>W-)9nGGj*i_Z-BteLNMJq1izk?8)5 zs*4Ts!V3wnluD9@0}fD_YDb0F&`Kzam~|kbWR>2)k|t|TMl4r5$nUPQybUV7*C^&X z6sfb`4yqA8_|3DS7!FF>C+mQyMeI&qmnAdc+A;+!;nqTz*imlJX5l=BU!Mzi+^mO0 z0roN!UNsH4XZRQpTD%Sq;No~QSE?PLENj3onvKByVAkl5)~)zSOJ4`xWWPxjeE?~d z0Cp24W~wGQjz9<7OzyJYtepTJe*6v2_;(RJ$XPRTxwxKU>Q7STPzcMuYWO#cTCcu( zwIQxFf!lf>U9L?@Hv@Eh*aM%se?fVZ2jsPLfEcG(D1J$L)kw}hkV)Xp;#5nL0dt`P z<0eeps3h}q?dN@phD~F#2;&phM_(l*QcpZGrykXDhpTZ(eprZ7#+*BB@}=bp(ZCSJiNr?eMTy zov*u_pTwH0Oxl7^+`nh6ME=EWI=3ot4553Op?aILbYpZ`!zS6t#OgJ{cIX=7Y(^rH zEt?o#;5}fX)W%}cBk6MSuC0)3h{``#%#yA_`v@K7HFe$*Z4 z-YpTAF&qSL5{z?pD1RB+x+Fb)t)=>!oe+y>F;1x*+h`VvT2MntinS2@M5cvL$UAH! zV(M{EuD2SyiU$XW4i*U=JNQ;rgEG!WR0!;fd($YC|^O^02hrqV>J~>^TMgW}S4e0)AkQ0_R?r4%4 zES!k0hZbGE!b29QrH-z0fDY4air?kPGr$>eJ5i#AP!FV0tpu@FPSI9EAu;Uj7;~W~ zcHAT^zYEzW-9eDl_Mp(U>y{iB-KjPmITYQ;4RNUToNtbxUYua{@_93(-XE$ynYmXB z|1z-0?k|&;qC2lrJRy~H_ols?5G9ITXSzH^T5du?%5R`ZjeJKqg{p#uZ5ER3*oFmM zAsJJ5s*tiw90KVDs|;*hDg`>UsnT+jw%5Dq7-_}ipV?)xbQtH_4un1~Ib-W0{owim z)tr_y2dn~9w=iT5&LgnqR@s8Fo$A_#21fUify4_5VNb@|KNk=8*|<0op-oTmuWIFB zN6G-MBuTV6C!FKyFR%Oz?G;Mjx{7RkOha@o1$4A$TNN}M=-b!sRc)H6W)4W(*# z?D9pB56s2lA@Jw{{65DALAsyZYFW^XuM|5npmKVBSvF~!y1QU3X^PGdS5xh~W41C< zFl05SR{$rYK93D>X18n zqp}g}|AQ1WDfq15lb>7|yFalBM=Q|W$N%V!Sp8`)%r|rJo5!Y|&ap}Tgf%VPDg-51uT}Av z%9!ZQGi1E+OajR8eCq^dAagi5U%;8wA1IO))AbRCK=IQI=s_!y5ft7M5TSH^pl6v% z0O#v)*#NLOhF}0RiZ}DIOx;SUehWTnm~9{E%-tVCIlvt;P0x{r(MOoNGuZ)^Wa}iJ z`Ss1UF~2+IBA<7N9g|NU)P}7J%~-Q${Eha0?dD7r$d;oulqE z&W=zf^C)l&f)tENwNFhTKAl9(=Os?rEG%-tG|zUJgv4sECGb#8NF zdwLw#E7%)4G$F@Mp3p7XNE%U~0J>TOjJTGgFK+(bVSht?Fy|PXznc%-X zta$FP`FDpFu*ygRJT2Tcjzss$Zp0pb-?N;)TD9SyTD}aknQm3*UyXcNlo@;8UBC6` z$hkkIerxL&M!mnmTq(Nq`hO4Y7{Ig+j0nmW5Tlk^v+Ef+huSl4$ zg$B~V06?GF4l#Z5dVng&4#Bp00Y5{?E<7bu1l4GLQP|w^Seg zfCPMaF-cGF&gD)}GIvyP77jc8x$OPB?Q>U*cCzYj(#IyPKUN)Ql3`Se3k)@K>GC-` zEkvHqPrD{kPO)|Y;tL2F0wi4RakNx!$h()jRvkB|6?s={r#)2q&M%W%#+~2%DdY+* zgKreN-|gPiqwiXb`4)}obpb`m&t-(y8Eb#L*7l`;0&F)tV&*ekiPak(x#XCmX=qT) z%(PoiCN5gqtRS(KNFRXU@#=(<6C4r8$^Y+k*{x?0xm^(yS+^t&i=XFsVv( z04RdtPh(OnJzQhpjbHQVtP9?HK1d}NbXpQ3a}kc&a@BADkmF3cS4p<3`TLjdN?I8k zDhtW-t1fV5fi!}W`a4;!VLh??SbLo0Si1rB_7qvLyzdLuP$f! z*))BPOVvNUerrBt6~Y$?)<_?)&Ejd&jodP>eG+Z`pNhuh`-gZc< z?p&4!U6BLYKlO2wpCivw5d&a%vyEaA21`!J7@17~ zWJI_{6v>)1YZ8n?!8gvYw}^mm-P>%QQ2Lnm$wa^s-lFh{zdvDm%VuScQa5u=^wp5& zOjcXCWPoSFjKjA9drmD$M|RgZ=pBJHy+F5t`YsByl~N!V)e0xkAZU3Ge6aCVlM~*r zFilE*E+;g8_@L;))C^#?q>*`lcvr6$K3IP335wE(k&0G5f)pR0pKidx#ZYr7d3!=S zmYK@2Ly@1G!J{TZspouO#B3$R#)AjiY#r|UF4!u?_9Xv(Sgn)GKx%-rTxywg zS7H7KjaUmOcPmg>h+~c2oPmy_Z$kxCZ?z5jifFK2OWYg}&}Zme(3D6s8axb7cI@|a zd;5vIzhIhQ?!LX#s}J?0H#4W=214M5_UeJ980Gw#VfkMdg|w`VpRa24e=s~L_Kq{r z|Do+i&*$_zP=clxR~(Fnhv7ef^cM4^R&2I+3~-xh&Au^)I(27|0Ajtrz-5+CdM}{8~kY z_ob-R4MaAdCg3DTU}U9@NhQ}O^rF={pLKHfHm`s>H{9MKNAlA@iP$2_6m)NkzBaPA zLMSUuAIJ*1Avi_dqUj3AW25Wk@^<_4-|1`~iUpH10SG}cVXO{d;}DyqdAmm*;(ZV)5w=wY^3=7~e`-2J;D-BJU_w~JOGRZw zgRbBEVCu5iB)#uM<%p+|K-4gW-@v=0lE&m3a5Q73tvI-M+o!L9D|VL#IGiUZfQhMV zOaY^$@;JH)RJ2AobpR;XfX4>V_i{j!V)R|i){^n=te7q}V?g3iOJL<>Ef5KVrs9`o zfn-)4b8nNY@SWm45Ak4s9eo2iHH=2VHX5L-z36A1Uq$ok!jz1oZsqKT_tLlhd=Zhk z-X1wVTk|Zkww591v*5_P^e***krFEVZ;$s_8`Z#1uhL@Je8*j;*gy!D2l^yX|mN{8k-*z@BnMw%f#~^y4Gv zg4p@-XBowv*?&yuc;fs$>Q!&N$$UbqJ|qCSjR=sZpKQVN`P;ej3$+mK0iMi_?{Rou z?U7qzSW&t8ZObQ21zKeQtn>WAYsn|Lw4B*$S=jJzTi8$cT4C>A9>_lxt$yQt+1KgF zcBTj%SI(>pkl-?~C+%ON(wgCbU>2P~41@sY@fdFUgwB8EszZ~aR zA$CL~cNaor7*=n3O;;+ewWrF~%l7zwJ7=%i<1gT@y(ojF8>B4GOC(^WoQI&0zr2Bw zY{Dtd$Zb0|hv@DX3%^-AHKX~-W2GJs^?NK@zgWXb1aap+YAIJV_B%iTstQ}zGVRUV z^E&G%5{DAWzIQNcaT%?GjnZ=86lSu+HOV||0e%$9sMkVRYUD+g)CZSnqLqt4@Q_m) zD`zs0`-}Zm0FpKVXgtX)K{*6p7X^TB34}DH_|+=r+hxKi#6ox}zI!D!jv*Xuy~rh- z2bhaE*^+2}ezB&^?E9&GN%r$rjLrUU+z#Tn`}>h%{>;}fiFzzdr^!j zmBrO}ZYe&no3y8K4$D`#e9Qn6Wwp{F>;F4!UI(;pYd6-f2_tbANe{@d&k2 z@e+!mZN{Ft^UT*curY>d3jK>nvX@D9ieB^$8vAYk>JE+SpGFZ3f_FI81JAjB|C*f{ zZkp=%5Nb~5qT&|0=Oom)5p^$WVqm1ST7IkPi)drb;c+aBvTkvDu;9Cph)rZ~hT=lT zJ44Y3Nv5uL(ZCeEfr}6lw!(t$hPhCB-HA)EnwiQZAt^3WYW_bhA(jLqWq@T8GdBh_S~xT3t^ z{^bSrV$8eu`)jH7sOFPf4iD1X)cIYUD(J*zdT$*6<&p?eh@dx^rn_Ig6{YxR;*HG? z?CMo?5*05!>q{4h%vjI;qbnzDhEG_lc)+m~;GdB45?5L*>Hyf`Kt6a;^V3RA@qiYKjoef`%rs-)X6w)5Y?V7moh z9ZTDh5w^A|1J^2f`)v#8hZ;Gkti8_wz_Mt#JMY`}nYF9Iz<4|#rc~!QJSwh$(TN?d zJ`|JAiAOXFHgt3>$bKjOrXJ6qR`YsO0r#mXAI9Bl^SFxmo4V2P+H{U7^1|Y+9JF3D z7Bk&@y>syG_Qni7>ipuV=R>{ZHk00FhPE$h{%;1i70W}5u4zz{?WY~bhjMD*S*n&+ zY!}l)|30KEe@mag6PI`=QEZUsM8*nZz^2)#UYugjl}Y6#C-=5CuA2CbCFQ}F(}VMk z)(?mFC>(Q0)@(Jvi#7wy-f{fQ=b$aSf8$MdQi;0{ISuT8G!wqc$^{t~_YfNU*f2J) z0aoJsRw7dOh@%h=O94p$f ztcz$#eKYb(0VX8`aAfTTLT=F_q?UPS6+9vnMSBq~#w!Keabm^9!uR(ivtDxn1{6&% ze>};FR7AK%V`nT(2U60<#GX~I{X?@7r&4Ew)rynp$Y!2Z$X*3JE+=@}Pi z<~N$>_Gh6XwDhQoNx3sjE;>8cP&7a_qQEL*obv&ggW8v%?<5`sUkyj;9ok2u6hrsy zTo-fq$S%vJgH!?5#cDF{Ccr3R5bl8L*^6RVg-<-|O@T6Q5Sj8M3=a+Hww#W%M;x1Ffnfi|HBvm?_D$EGNow7+b|LtYE z-O4o~>?GdR{p0~EhDK~Z%BqDmRn6%R#=*WGk0Soe%8mzE^yhi^JldvD_Ok)ecECt8 zE^HL~;b|`&EO*)-nN<4REJQ#CD7fh+obs5$qt*E#;`iCLT_@)N>?tapK~7yCDw< zM0##2tXqtG3=tpV(y=#olrvV z=DmxyBc~AI5SOh%a+|pp4PUymaz1tN8LTKK(8O}`-+e6vOcn{|9Jnq==An>d%H`|e z@8E0d!DN?hhoHz&$>9yxYb8Pzmew`H2W|B2sY_WttCag2x!LiKT}$Rk%K1`36DIuX zblrUA{aOcECga7Hd)X_(k3NR)D#wb4z>yyZz1bcs;+rz4@qDoYGs}KUGHe zx%)7`{#q%{XT?pl^-xT4|L(l02bQ48R3{iD0biXEX2)MX9=|+e?-D7?9d+It%xAQq zf+H?pJUzRVO30o)7f2Xrn;t;qJ(?52PI~;8Li7&}I=r2)?Ydy!!`7phMKo{)##gjW z>&TtgIa2(iv+V-X$5}*&ZV$rD)YH42)6`4oA%}Q-{FLeByzvfIamx4F#VFZ^`J>8z zH%-Z~KaCcpfpEIIbM8HvrZGCvCo@IyIOMZU6M+CeGJ`Q5a}s>};ij=ms%VomQV4)9 zMFGl#FE#|j0g5#zyKKMY3~91Lg*@XhrXuDIf?nax9Gy2+(Ebj)Wdp35MaJ5`_d&Z4 ztyXWtT!mVU5&jJ^m~>)wAJEFxMqEQlZoH0?GcFpp#jx&;`{THs+}ZxffOU~CkK19D zmfd=J=oLr$q)pMQ!T1K{%ym9Xrn=&LiTKaOV+w-YvIw%#l?<2YtE8OFH!cL!88 z@1TYDBR+dm4Zo#>nHj@8(h~0O!=xa_#YB^097!ESJe||ogWL^4*%;g8@diXioXq$I zObP+o3N*uj)fGQ{F$D{a%KOqaOKK?LEwL&Gp1*$rMt^hynv6za`P311u8h3m#$s;8 zeiMM^kp4P`-n}3|qIDpd$HfCn&l+i8KaqMc?5SQCb)+)SZJhdvBu5WMZeFGPA)!sK z4D^VjRWLkyK)q?==+o9uTJD{$Yfg{K_hxp^1FQ(Py5EUwD>t&_d7;w6<0SHI?@<>7 z-zg5VY)7Q_?DK=x>gHrRZ=uTf*0)h@cO0R5D_k*0l0j&;i_w}JS$TlT&YG)^ewh69 z6H`};$=6jzX~GP{BPLnH)g?-6ZXt7euxW)8(H_TCdNk%;rfczzMZwvE5;^O9`?L~} zFxJl+N*mwGo$Ht@oY>GP7gqt1h$Y4e2dMLsTgnQKuHIaZA!%65(Lya`&VwVPuOe@)9A%}TPui{(Pby}0s%Y%v;+ zT-?O^P;J9xqWsLo7bgP`a(|_}MhIY*nc4be7)4KrHm9Mxo?WV`rwfAN#s_T)A%$;P zFx1wHPB?VPHhPp@Z~Zt(H+N4p(|Sks)jy2q{Lc2`n(>HBS@x;=myoR)rid7jQzs1% z#`?yKHj~Pd$Jz%&?uXZ<)Ze^U|gf6BwCm0<73YRhqbD;?m(du(z9BXdD`YC5QQ zkI6tg%IjCg{BI;ZXX$pkv79b@lRfpF^8m>KOKyW-&0L%7?Mt!%*FZgp@mI}8^Bro5`{630hXR4g+N;oR2*!r&#NNx8Pqa4$5c^lQh(Oy+ z-5lRH;Q)vJDAkisArIHl+z;1Bx4wDxM`#l7eh(L9519NILMP=GA<;>vyMDtH-LOw|x$QWKY;IPBq{Q+6JGnzpgMEf_x zKaU;JI|CPj$_~N{IkS?HnnR?wcp1Hm3(Jjy7 zt^oC7c2`8>nD#mtg)3Lc?NF80c5Qoq3nCt*ZR=W9ZVvOv<;Z*EpuwbalPx@l>GRv* zVZpbqR80DbtgVxPxs=>%O-jd9UZdrQ+Gd?;VDS)!!%a%9gb=7yfyQKJ0cSF|ktbE! z#-mrKMr39w_Kf#$x>Bs2XHbNCl*rLqg=B3#Q9YAu#Eb?B8;V0%bbmh}GH5y$V{thR{f z%CVCM08)of84EwOUnLtyXZ4D$S?jPegK@qzD%;$Ry@QvI2T*(S%6IY0j79XI#kjXmpa!$*%x zsV7{Bt+Kq6wcI1u++9j_XnD;w z9zdj;DEUE^p*~_schJbQo_jr_AW?lu3d!=@0xm4h?;+7YyNf#t`93SxJz*Jczal*h zpm?-qzkMxN8T`AQzt0$$vat~hz1)``*t>kSf39UYg-T6((O(|{R!Zq-%@*_0d3QyE zG-qiXaoc>j=E2&1De&jy-R?(EKb@&aV*8ByDOVxfyi;J?()0t=wahwP7T7PsuG;H@l0^DrK_l>DQGipmcMp)pWaKC@->mq-$`eU7s|M%QS%Y60O2i3P2 zb~EowX4wokk$gQs!n_2bEw@!Lf>?7auQO{f>m20ST(&*l1Jefsn0q2(52@h9aLXFg z@4Z>jha5-g(6F;*=KmY9Ap`u_AuNErC&;112Kcicy1sJ`eZ&06L~LPmwh7WwO+c2J zN$t~WP70d&TT8C02an9-g6$p8E5^@~nQU%i#tL7h?@LpI@Srh)D}SP9Ju_r-!jAhcPz zNPwD`*c+@uwW=!6s6Uk-dxHAW=XLP<@A0_u@{b7JE7f0lZyxJ2v+rh=uyt-orT;}_ z^j&@st{G8s9ft6_Ui;r-Bs@>2;t@23QkLbnK+c0`9MlU+a2U?*S(uVH&$)Y)6W7tB z6b*}Z%5jHou8gG6+cSu{PqTN zVGG^0l}q`53ozUd?gC){Bdif8H!u@#kU#494myN`n;lt8pyzN#sMiGmArOWV!gvV*F=Y=<-dVyLkDZ{l%7aKtZ0rs>#r{YfbXZ4f!?GyPiW=IsfnI zK|rSoIKcif<-GSH3!5$4a3hNd4a%Q|dB9d~oHS>%&M|Wt@?6jAmYF^}n_sS*Eto&% zG*=Gz8`uALVc9DCD*D$i<>kpUPv^?(8lsb@zU~BSi2=hKSM%TgH#XH4HDy$PxM>Iw z5%w~10+gr?Iw>~J(aXLcecw>;O1$^G^dFwLcYX_u?RhnSu_s-s_$H&oxasTBcb$v= z?zJpN6MXN-t9!D0xXPb(0@ulYlA`|Ayfi#XT4of2Xd$@@R=Nycz!?*Z9b%s2Rqo)x zOr@t!J!b0TWp5?U<}RG=S$#Lte-&EAXD9z{abxTIcGH_X>6dHU=CPNwCDA|Zey9Yg zvSu%T*XA4?qrM)@^(~hF|Gnnks}pTgDo5r+n((`_*6ZM`=@D}TB|g**k-Tkz($jWI zHFcvTqX?*;UlqlYuG$MU7B#TRXbvk~{9b-Fo!W0x$9ylKP>0rf_a*oUgv)=RCiO?#062oUa=H*<5&1#`5<2<=oz5^T4Zh&xgN1>2s;NiyW{sMt2%9 zs{g#Eep_8s^Yh*JbC-MR|GNj|K&Mi1IDy-!3dn6hlg1++RG2BgX#)^kI}w<0$^mE1 z{k|VD>)=nPGER-t!7`y-DmlaBPR6e~`O4RTAsu5g&M)(15;yUW*8pQ*?!Z3Lyudeq zuHSzhR+LfN4-;4Bf1BY#AIc$<^IseB<(|#1)alshhYxo1>##-e|IPzV%jLqU?{Oq^ z);09q??N0{(t^Qbd2J81uN%xcb0nC-?E8_k)N(b^4>1cqa2^9jHJ!~*v5OuHKW?ag zb$?KR+6trQ{pxzc01$Uwl>^>K0W+#D}pp z!8Vl<=7f}G=0_sxRx9sO{CT3E1pIZ?|L<_V$;GXd2{x0zrH<^A2^`as&Xg5qeN4AR zQ76@s(!3eZmiSva;EB%vZl-eo3@RQGu$}#mg|GhsYy@@HMJO=^uP5tVp3tFqSJK)HlULG3D;`m(-8uA zX5301JVOF(j#~Ttnf*Yo7W|a)pM0Py_NLBEVlne z)tp#V2u7s=*N+!#&ITs;ie#{I;Hh^Ei>WT0|8LIIFYR$BaF;0APijL+B;@qTi!|xr zvE$JXJ;gh@Nq&e~|bf9Sh3MP{E@1uAtqCcY(dMZ3&C*tO(r)q$7) zi?jk8S5MmlpORIQVDPMO!(lf&*)DcJ&RfK4^qCjq7qTy zNS4cz!89up^bgrCCd&{$=%d-OR51aD+pY1h=rz+t+bo9}isV>X{{QjgD*cs3`4xXL XJ$(7glp66G@XJu&4A!XY^5p*mYb8n| literal 0 HcmV?d00001 diff --git a/MediaBrowser.Dlna/Images/logo48.jpg b/MediaBrowser.Dlna/Images/logo48.jpg index f1e7302aae0ebf94bdcc26fc5f3575ebab835570..52b98535413b4a3fb9f188d336163011d0412458 100644 GIT binary patch literal 2997 zcmbu9cT|(f8iywkq{-5aAP|&AN)S|F>Ev31QiP=ll28^|wwXlHzRmeo{}@D!j5T(}d1=R+8k-yM+XvtYaAoQ3~t@ zd&LpEfS4jeToD2H0JLcL5`V`2hO? zU}0%xedsXG;mA=(Cr_{A-aaRM@gXNqg@%O_PshZ@#U~^tUATNDJtH$Kn{xd|L1EF& zTR#_-U z%bz~4e1TTiHn|W${I4VXlkC5^6h&NONTfJYa+3=omaqw~h?Lm5Z;R3acgdh={|1)!f06wK_8%@L*eZ??U7oliz=Dmn z+}bLP%2|hAUq^4xgh;g$8VUz)Xs1bOFUjMvbTihP)Cm|&`!ism(X>1Qq50k)IjGe3 z(?uuh^J-!rSW@wfrNzkgrxwJ1M^6y@Dg`$3{;rZS5>68i_D?SLE5$ zk96u(ZM3zUQ3*Xxqb0*&>NI4R|1YYi93l6V`lpk3@rvw*V>s7Hg;Gq3?bCA%qZw|+ zr_=9eF+F}Gv3K#MG6o(skM8P~yv{U>FA3Sc|pJON}GQE9Dr9Rxd)!wR<)Z0;ZrSk5RMEq!6M&(wSB?py}B3>(H4vWCXcI z(|+kIiv69Zl|vEg+I(=dxm`uLI}E&=y-H3Od>Cq+dm3jdv7;@v&iP^)x8jYP8g%p4 z>uSTXJE(MZl~rAQ)5?O@=>k3P5>+b)OXG-`;cCsI`*`Z_y!{l2q?x&4&!qp5(iv-GaSu?u}%!B^bIi!~E2j{}2CSXyq?UV^@RV0wT*O^KeN#1q$N2-@~;lqF{v6?V*hTBUAs*}cv0Y3{PI9t zAkDERHT1#qT3!Zrx-#%yN()4u?Y2@+bPL>j@ zvla#tnt~m2=pOYQers>D$m{k`eD$medyR13XLHSoee`LHd4k7i5qFw~Eu%5$ZP>;4?FbfU>WI))?H3H9N{sI-@OSE_M~K)DBh z_GT{0tF1blHt7U|ZYDW<(cG7`r_4>W__T!&YBX5>{h`CZL4_LO=qD-GNMIi&{gJbT z9fv_4^hJ15SVIb{g#tIE4MfjH*gi}(`IK`I1~aWZw911Eh4feHZ-Y%V67!xfpKUCs z#4hg|H%jL0;Kb#hZ>VU94=kKrt(FhoYwXbz+=9CqjPdCm?VB+S!rou@bADfcwLXh# zI8ddPZjoIu8(?`MLZ;3TRkfaYNV9nM=M5BERb!6^<0EuIWiRcVnZb-mWS817*Nc=2 zWt=GKXK;aaHFfgJ?lY4XSx$8uR~xa@S*3iZ$G5W=Dup>ITGElBMM;OPzw{8oN&Ws6 zWJBh}(`Z7c);k;RG<|kxzdI~r{N{-ls+vnk)|q9g|YGAuM}m>CraRk66VNG*sQg)2F{~*i)Id=pCEQ zyPD-e)FWcO$tO!8V{(t1R=CABG@Z4s60%YVp*e(z#~H1ow&Gv)H=eN+?KS4tLadU# zm#8UQEpljf!KzU$fB4#8rOvgAp<8=tGV{9JXwZo`W!t5tYZ3oe@53OCsSoXbKEkP~5y}v~=aA z3|z+V-FV%+&ee9GTGlI@Bf76v=uzw!1gW6Cou}#@6T=1>x@6)aWT3~p@%0QbK%U>q z(-fQ!q^Kuc{(N=Pv&;HS0Dy>WgEMg#Lz!~c3r8!Uom&-j>7QEjF<^w> zhiS1``{lL&qbT&r)xhT3jA^d?NKK4oNC`>KHq7kCwTe3SlC_Lnmq&W7L-E_Q1aH<4 u7MGWex|v-J<=`nTY5|{;Yn&Li{b4_Du&H?Dypy|!@NLx)y@SGn$Nvp1PjONJ delta 2343 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 delta 1644 zcmV-y29x>y9sLZDB!3BTNLh0L01FcU01FcV0GgZ_000IrNkl0pFh+=m_}~%H7?l`}4-=yh{_ukz8VperO-ziUkqC;K zR6)UjmInkW6pC$WC2av=X-nw?x;wKo*SU9RyEAKd-IhX2vVSMJoqOlIbLTtXckW}l zgi?yz88+P3ND)X8ND&}Ymw)&L051RqBL_QxzW}VoARz)+IZ84yaVP|s<9!$%2n=-& z$QT_^QmfGI2+`blVaY5kTQ~zXjTcdvlL3!QLQRt&6;lgw?s6BpuLV&$AqOY*dw1k{ zVHa(vZ*Ipux_`Z{r457-loVy*Sp7e^t0)_yU_)JV8_G)x^lLjLQNZMJnK)W^0Tp+T z!_NoL;JvR83||Jyit~}@OT*SZwaE6mF+P6`w*6L%{45Wy2Ne9NJ64dDj;fkgWa;+e zaaq{$dmXo*Y3;z@7p`#o4^{P;P%s7)$NI4Ia3jBW>VK@C2Z8n7zV|d3rcKO+33RCY zz!d;K)>yY{4puChfy1ZIqxs@hI3xjqU)s*Y7}<607X$D=+U(if}mb!{g|DB zMLj61knA=P{MXK&VfCf+N>Qn2VC^S+U|=7B`8OmXk6Yr`&nm02|70s}CLX?bGO{z= zFrk#a8h?NQfF!y3b(;xr4Kt`3#c+b@e&dS^@QxmBCNl<>1v6GID$AWabNsWfZr;h{ zIs#AV-EeXE z2rOSX9Zx+t4TFVK5?SF3#;0#DL9*C)ycsVwRGK8js8LSQM3Qwllx zhL*Pe_gf=oC8kk|M`xEHGu^5CruILf=TPQV%AX4x7%8eMzyL$inBjB0F21{N`f@Lt z&UaWSQ;_h;q`w{4P1@fr8Y~jS!zmKXE`PfdFnpst1FT_mjAXN;vkRPM4XlhYnl@`Apah8~DtPyE*8?|J|?Gzy^A<&TA-%q4Uus;&rJ=emg(#P+^uKlMW zNg}emY4CS+!{c_qA=%M!wHMjGbo5>iuuX>_`1s%w(FYFVhG5nzF{g#YPzcp8!GEZP zXeeM1CP+8VLRClW@y4nJC@RRpo9}ML`)@77f#Z!h)o>2$o__?JKHrJePtQZ9*MsH@ zVGS4Md7+PG_9humDnj3!{ImvaF>+_(xwh2WcH}UgKMOkrpdF#B&G7u-aiB}kq_+-t|pj6e1W|69> z882nsDt8~iPkKq5cB?}lZ+rzsV{_p5x5v*wV&{^FssdEAW&k1C7u~C9l7EAesBfBP zY#j1IthGN33(Ei~wPrwX95eniN0a=n3jss~!6XXU?8ec%?Xn-x z2c{$$^6@1`6HJxvt{(oy$5$a5AwboN=$tnXLSlv`k>yRJTF47ZTNv@Ko}Ta**8B=M z9ReJZ1kiyL7o#OQI0Y$+f`9Vq#pvnjW&42nFh?{X8GYISLKu6!gsw#n9+xh)ArO@D z`kEEI+-!XN<8IR_fj~@phaondd0$w6grrf%#yE`K%AcwDTQzl%A2i(g057a=&Q7M! z3zyS@TZR0*Y)e~A-uWP}$70|9qx__pp5}(ED7aZ*S$4Z!s5*Ge>Sf;e@+Hwm>?G#S z2cwaX!V928@h diff --git a/MediaBrowser.Dlna/MediaBrowser.Dlna.csproj b/MediaBrowser.Dlna/MediaBrowser.Dlna.csproj index 461470b7ac..962c2a211e 100644 --- a/MediaBrowser.Dlna/MediaBrowser.Dlna.csproj +++ b/MediaBrowser.Dlna/MediaBrowser.Dlna.csproj @@ -184,6 +184,10 @@ + + + +