From 7e0c9dbf2d5b10066819cdee116ad9cdae6c8d23 Mon Sep 17 00:00:00 2001 From: berkansasmaz Date: Tue, 1 Mar 2022 13:33:02 +0300 Subject: [PATCH 001/143] Update en.json --- .../AbpIoLocalization/Base/Localization/Resources/en.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json index 3bb6320874..ff1305a336 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json @@ -103,6 +103,7 @@ "PreviousEvents": "Previous Events", "WatchTheEvent": "Watch the Event", "RegisterNow": "Register Now", - "ThereIsNoEvent": "There is no event." + "ThereIsNoEvent": "There is no event.", + "Events": "Events" } } From 64bb78f9dcf86b4bb8e67c42ea75815ef5dbe449 Mon Sep 17 00:00:00 2001 From: Engincan VESKE Date: Sat, 5 Mar 2022 20:34:33 +0300 Subject: [PATCH 002/143] Update en.json --- .../AbpIoLocalization/Admin/Localization/Resources/en.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json index 3af6d451e4..54c1660f18 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json @@ -384,6 +384,7 @@ "SpeakerDeletionConfirmationMessage": "Are you sure you want to delete this speaker?", "Menu:Speakers": "Speakers", "ChooseSpeakerImage": "Choose a speaker image...", - "SpeakerImage": "Speaker image" + "SpeakerImage": "Speaker image", + "AddSpeaker": "Add Speaker" } } From 1355b55a980ee68de88b849f2688bdc4cb66b426 Mon Sep 17 00:00:00 2001 From: Engincan VESKE Date: Tue, 8 Mar 2022 11:42:25 +0300 Subject: [PATCH 003/143] Add new localizations for abp.io --- .../AbpIoLocalization/Www/Localization/Resources/en.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json index 21a64a34ef..68a6b254ff 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json @@ -318,6 +318,7 @@ "InstallingTheABPCLI": "Installing the ABP CLI", "CreateYourProjectNow": "Create Your Project Now", "OrderOn": "Order on {0}", - "DownloadFreeDDDBook": "Download Free DDD Book" + "DownloadFreeDDDBook": "Download Free DDD Book", + "WhatIsABPFramework": "What is the ABP Framework?" } } From abf75f88953e6ac006a3a6fbff28bbedd1d23e5c Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Tue, 8 Mar 2022 13:55:05 +0300 Subject: [PATCH 004/143] Blogging: Convert tags to lowercase resolves https://github.com/abpframework/abp/issues/11699 --- .../Volo/Blogging/Posts/PostAppService.cs | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Posts/PostAppService.cs b/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Posts/PostAppService.cs index 457656291f..15506ecf70 100644 --- a/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Posts/PostAppService.cs +++ b/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Posts/PostAppService.cs @@ -231,11 +231,16 @@ namespace Volo.Blogging.Posts return url; } - private async Task SaveTags(ICollection newTags, Post post) + private async Task SaveTags(ICollection tags, Post post) { - await RemoveOldTags(newTags, post); - - await AddNewTags(newTags, post); + tags = tags + .Select(t => t.ToLowerInvariant()) + .Distinct() + .ToList(); + + await RemoveOldTags(tags, post); + + await AddNewTags(tags, post); } private async Task RemoveOldTags(ICollection newTags, Post post) From db7daeda5ba410837c7545a34955ade6250e66b1 Mon Sep 17 00:00:00 2001 From: rqx110 Date: Thu, 10 Mar 2022 13:55:07 +0800 Subject: [PATCH 005/143] feat(cms-kit): using codemirror as global resources editor --- .../Pages/CmsKit/GlobalResources/Index.cshtml | 8 ++++++++ .../Pages/CmsKit/GlobalResources/index.js | 19 +++++++++++++++++-- npm/packs/cms-kit.admin/package.json | 3 ++- npm/packs/codemirror/abp.resourcemapping.js | 5 ++++- 4 files changed, 31 insertions(+), 4 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/GlobalResources/Index.cshtml b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/GlobalResources/Index.cshtml index b67a147baa..615ef31477 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/GlobalResources/Index.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/GlobalResources/Index.cshtml @@ -2,6 +2,7 @@ @using Microsoft.AspNetCore.Mvc.Localization @using Volo.Abp.AspNetCore.Mvc.UI.Layout +@using Volo.Abp.AspNetCore.Mvc.UI.Packages.Codemirror @using Volo.CmsKit.Admin.Web.Pages.CmsKit.GlobalResources @using Volo.CmsKit.Admin.Web.Menus @using Volo.CmsKit.Localization @@ -17,8 +18,15 @@ PageLayout.Content.MenuItemName = CmsKitAdminMenus.GlobalResources.GlobalResourcesMenu; } +@section styles{ + +} + @section scripts { + + + diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/GlobalResources/index.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/GlobalResources/index.js index 72fb11e8dc..c58447b22d 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/GlobalResources/index.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/GlobalResources/index.js @@ -3,11 +3,26 @@ $(function (){ var service = volo.cmsKit.admin.globalResources.globalResourceAdmin; + var scriptEditor = CodeMirror.fromTextArea(document.getElementById("ScriptContent"),{ + mode:"javascript", + lineNumbers:true + }); + + var styleEditor = CodeMirror.fromTextArea(document.getElementById("StyleContent"),{ + mode:"css", + lineNumbers:true + }); + + $('.nav-tabs a').on('shown.bs.tab', function() { + scriptEditor.refresh(); + styleEditor.refresh(); + }); + $('#SaveResourcesButton').on('click','',function(){ service.setGlobalResources( { - style: $('#StyleContent').val(), - script: $('#ScriptContent').val() + style: styleEditor.getValue(), + script: scriptEditor.getValue() } ).then(function () { abp.message.success(l("SavedSuccessfully")); diff --git a/npm/packs/cms-kit.admin/package.json b/npm/packs/cms-kit.admin/package.json index 528bdb3ac0..524583a187 100644 --- a/npm/packs/cms-kit.admin/package.json +++ b/npm/packs/cms-kit.admin/package.json @@ -8,7 +8,8 @@ "@abp/jstree": "~5.2.0-rc.1", "@abp/slugify": "~5.2.0-rc.1", "@abp/tui-editor": "~5.2.0-rc.1", - "@abp/uppy": "~5.2.0-rc.1" + "@abp/uppy": "~5.2.0-rc.1", + "@abp/codemirror": "~5.2.0-rc.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" } diff --git a/npm/packs/codemirror/abp.resourcemapping.js b/npm/packs/codemirror/abp.resourcemapping.js index 71731c389b..d7f349b54a 100644 --- a/npm/packs/codemirror/abp.resourcemapping.js +++ b/npm/packs/codemirror/abp.resourcemapping.js @@ -1,5 +1,8 @@ module.exports = { mappings: { - "@node_modules/codemirror/lib/*.*": "@libs/codemirror/" + "@node_modules/codemirror/lib/*.*": "@libs/codemirror/", + "@node_modules/codemirror/mode/**/*.*": "@libs/codemirror/mode/", + "@node_modules/codemirror/theme/**/*.*": "@libs/codemirror/theme/", + "@node_modules/codemirror/addon/**/*.*": "@libs/codemirror/addon/" } } \ No newline at end of file From 7317e493279e09d2f11322b04310c7442916bf27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 10 Mar 2022 18:49:39 +0300 Subject: [PATCH 006/143] Increment version --- common.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common.props b/common.props index 12a177739b..facc92f0bc 100644 --- a/common.props +++ b/common.props @@ -1,7 +1,7 @@ latest - 5.2.0-rc.1 + 5.3.0 $(NoWarn);CS1591;CS0436 https://abp.io/assets/abp_nupkg.png https://abp.io/ From eb7fa083356f10c5f251379093b90d3fb92bba5d Mon Sep 17 00:00:00 2001 From: William Obando Date: Thu, 10 Mar 2022 22:49:14 -0500 Subject: [PATCH 007/143] Add option to disable service bus --- .../Abp/EventBus/Azure/AbpAzureEventBusOptions.cs | 2 ++ .../Abp/EventBus/Azure/AbpEventBusAzureModule.cs | 15 +++++++++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/framework/src/Volo.Abp.EventBus.Azure/Volo/Abp/EventBus/Azure/AbpAzureEventBusOptions.cs b/framework/src/Volo.Abp.EventBus.Azure/Volo/Abp/EventBus/Azure/AbpAzureEventBusOptions.cs index a6aa2f9857..57fa4b7f48 100644 --- a/framework/src/Volo.Abp.EventBus.Azure/Volo/Abp/EventBus/Azure/AbpAzureEventBusOptions.cs +++ b/framework/src/Volo.Abp.EventBus.Azure/Volo/Abp/EventBus/Azure/AbpAzureEventBusOptions.cs @@ -7,4 +7,6 @@ public class AbpAzureEventBusOptions public string SubscriberName { get; set; } public string TopicName { get; set; } + + public bool IsServiceBusDisabled { get; set; } } diff --git a/framework/src/Volo.Abp.EventBus.Azure/Volo/Abp/EventBus/Azure/AbpEventBusAzureModule.cs b/framework/src/Volo.Abp.EventBus.Azure/Volo/Abp/EventBus/Azure/AbpEventBusAzureModule.cs index 64c8b2fcd3..129004c871 100644 --- a/framework/src/Volo.Abp.EventBus.Azure/Volo/Abp/EventBus/Azure/AbpEventBusAzureModule.cs +++ b/framework/src/Volo.Abp.EventBus.Azure/Volo/Abp/EventBus/Azure/AbpEventBusAzureModule.cs @@ -1,4 +1,5 @@ using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; using Volo.Abp.AzureServiceBus; using Volo.Abp.Modularity; @@ -19,9 +20,15 @@ public class AbpEventBusAzureModule : AbpModule public override void OnApplicationInitialization(ApplicationInitializationContext context) { - context - .ServiceProvider - .GetRequiredService() - .Initialize(); + var options = context.ServiceProvider.GetRequiredService>().Value; + + if (!options.IsServiceBusDisabled) + { + context + .ServiceProvider + .GetRequiredService() + .Initialize(); + } + } } From 41cd83240f09bda635b2a00e56945d77f735db2d Mon Sep 17 00:00:00 2001 From: hpstory <33348162+hpstory@users.noreply.github.com> Date: Fri, 11 Mar 2022 21:22:44 +0800 Subject: [PATCH 008/143] Update abp/docs/zh-Hans/Modules/Background-Jobs.md --- docs/zh-Hans/Modules/Background-Jobs.md | 56 ++++++++++++++++++++++++- 1 file changed, 54 insertions(+), 2 deletions(-) diff --git a/docs/zh-Hans/Modules/Background-Jobs.md b/docs/zh-Hans/Modules/Background-Jobs.md index b183febd80..87c57acde7 100644 --- a/docs/zh-Hans/Modules/Background-Jobs.md +++ b/docs/zh-Hans/Modules/Background-Jobs.md @@ -1,3 +1,55 @@ -# Background Jobs Module +# 后台作业模块 -待添加 \ No newline at end of file +后台作业模块实现了 `IBackgroundJobStore` 接口,并且可以使用ABP框架的默认后台作业管理。如果你不想使用这个模块,那么你需要自己实现 `IBackgroundJobStore` 接口。 + +> 本文档仅介绍后台作业模块,该模块将后台作业持久化到数据库。有关后台作业系统的更多信息,请参阅[后台作业](../Background-Jobs.md)文档。 + +## 如何使用 + +当您使用ABP框架[创建一个新的解决方案](https://abp.io/get-started)时,这个模块是(作为NuGet/NPM包)预先安装的。您可以继续将其作为软件包使用并轻松获取更新,也可以将其源代码包含到解决方案中(请参阅 `get-source` [CLI](../CLI.md)命令)以开发自定义模块。 + +### 源代码 + +此模块的源代码可在[此处](https://github.com/abpframework/abp/tree/dev/modules/background-jobs)访问。源代码是由[麻省理工学院](https://choosealicense.com/licenses/mit/)授权的,所以你可以自由使用和定制它。 + +## 内部结构 + +### 领域层 + +#### 聚合 + +- `BackgroundJobRecord` (聚合根): 表示后台工作记录. + +#### 仓储 + +为该模块定义了以下自定义仓储: + +- `IBackgroundJobRepository` + +### 数据库提供程序 + +#### 通用 + +##### 表/集合的前缀与架构 + +默认情况下,所有表/集合都使用 `Abp` 前缀。如果需要更改表前缀或设置架构名称(如果数据库提供程序支持),请在 `BackgroundJobsDbProperties` 类上设置静态属性。 + +##### 连接字符串 + +此模块使用 `AbpBackgroundJobs` 作为连接字符串名称。如果不使用此名称定义连接字符串,它将返回 `Default` 连接字符串。有关详细信息,请参阅[连接字符串](https://docs.abp.io/en/abp/latest/Connection-Strings)文档。 + +#### Entity Framework Core + +##### 表 + +- **AbpBackgroundJobs** + +#### MongoDB + +##### 集合 + +- **AbpBackgroundJobs** + +## 另请参阅 + +* [后台作业系统](../Background-Jobs.md) From 1a4d44ce9fb3185019001f5dab70cb6b44345dfa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 11 Mar 2022 16:41:21 +0300 Subject: [PATCH 009/143] Added discord channel link --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index dbf8bce537..1d7b7e51a7 100644 --- a/README.md +++ b/README.md @@ -108,6 +108,10 @@ ABP is a community-driven open source project. See [the contribution guide](http Love ABP Framework? **Please give a star** to this repository :star: +## Discord Channel + +You can use this link to join the ABP Community Discord Server: https://discord.gg/uVGt6hyhcm + ## ABP Commercial See also [ABP Commercial](https://commercial.abp.io/) if you are looking for pre-built application modules, professional themes, code generation tooling and premium support for the ABP Framework. From 4c67d1a1dc8a63108d1d21d7def67effbe1f12b7 Mon Sep 17 00:00:00 2001 From: hpstory <33348162+hpstory@users.noreply.github.com> Date: Fri, 11 Mar 2022 22:45:11 +0800 Subject: [PATCH 010/143] Update Specification.md --- docs/zh-Hans/Specifications.md | 258 ++++++++++++++++++++++++++++++++- 1 file changed, 256 insertions(+), 2 deletions(-) diff --git a/docs/zh-Hans/Specifications.md b/docs/zh-Hans/Specifications.md index f927c80255..bc5c67101b 100644 --- a/docs/zh-Hans/Specifications.md +++ b/docs/zh-Hans/Specifications.md @@ -1,3 +1,257 @@ -## 规约 +## 规范 -TODO.. \ No newline at end of file +规范模式用于为实体和其他业务对象定义 **命名、可复用、可组合和可测试的过滤器** 。 + +> 规范是领域层的一部分。 + +## 安装 + +> 这个包 **已经安装** 在启动模板中。所以,大多数时候你不需要手动去安装。 + +添加 [Volo.Abp.Specifications](https://abp.io/package-detail/Volo.Abp.Specifications) 包到你的项目. 如果当前文件夹是您的项目的根目录(`.csproj`)时,您可以在命令行终端中使用 [ABP CLI](CLI.md) *add package* 命令: + +````bash +abp add-package Volo.Abp.Specifications +```` + +## 定义规范 + +假设您定义了如下的顾客实体: + +````csharp +using System; +using Volo.Abp.Domain.Entities; + +namespace MyProject +{ + public class Customer : AggregateRoot + { + public string Name { get; set; } + + public byte Age { get; set; } + + public long Balance { get; set; } + + public string Location { get; set; } + } +} +```` + +您可以创建一个由 `Specification` 派生的新规范类。 + +**例如:规定选择一个18岁以上的顾客** + +````csharp +using System; +using System.Linq.Expressions; +using Volo.Abp.Specifications; + +namespace MyProject +{ + public class Age18PlusCustomerSpecification : Specification + { + public override Expression> ToExpression() + { + return c => c.Age >= 18; + } + } +} +```` + +您只需通过定义一个lambda[表达式](https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/operators/lambda-expressions)来定义规范。 + +> 您也可以直接实现`ISpecification`接口,但是基类`Specification`做了大量简化。 + +## 使用规范 + +这里有两种常见的规范用例。 + +### IsSatisfiedBy + +`IsSatisfiedBy` 方法可以用于检查单个对象是否满足规范。 + +**例如:如果顾客不满足年龄规定,则抛出异常** + +````csharp +using System; +using System.Threading.Tasks; +using Volo.Abp.DependencyInjection; + +namespace MyProject +{ + public class CustomerService : ITransientDependency + { + public async Task BuyAlcohol(Customer customer) + { + if (!new Age18PlusCustomerSpecification().IsSatisfiedBy(customer)) + { + throw new Exception( + "这位顾客不满足年龄规定!" + ); + } + + //TODO... + } + } +} +```` + +### ToExpression & Repositories + +`ToExpression()` 方法可用于将规范转化为表达式。通过这种方式,您可以使用规范在**数据库查询时过滤实体**。 + +````csharp +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Domain.Repositories; +using Volo.Abp.Domain.Services; + +namespace MyProject +{ + public class CustomerManager : DomainService, ITransientDependency + { + private readonly IRepository _customerRepository; + + public CustomerManager(IRepository customerRepository) + { + _customerRepository = customerRepository; + } + + public async Task> GetCustomersCanBuyAlcohol() + { + var queryable = await _customerRepository.GetQueryableAsync(); + var query = queryable.Where( + new Age18PlusCustomerSpecification().ToExpression() + ); + + return await AsyncExecuter.ToListAsync(query); + } + } +} +```` + +> 规范被正确地转换为SQL/数据库查询语句,并且在DBMS端高效执行。虽然它与规范无关,但如果您想了解有关 `AsyncExecuter` 的更多信息,请参阅[仓储](Repositories.md)文档。 + +实际上,没有必要使用 `ToExpression()` 方法,因为规范会自动转换为表达式。这也会起作用: + +````csharp +var queryable = await _customerRepository.GetQueryableAsync(); +var query = queryable.Where( + new Age18PlusCustomerSpecification() +); +```` + +## 编写规范 + +规范有一个强大的功能是,它们可以与`And`、`Or`、`Not`以及`AndNot`扩展方法组合使用。 + +假设您有另一个规范,定义如下: + +```csharp +using System; +using System.Linq.Expressions; +using Volo.Abp.Specifications; + +namespace MyProject +{ + public class PremiumCustomerSpecification : Specification + { + public override Expression> ToExpression() + { + return (customer) => (customer.Balance >= 100000); + } + } +} +``` + +您可以将 `PremiumCustomerSpecification` 和 `Age18PlusCustomerSpecification` 结合起来,查询优质成人顾客的数量,如下所示: + +````csharp +using System; +using System.Threading.Tasks; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Domain.Repositories; +using Volo.Abp.Domain.Services; +using Volo.Abp.Specifications; + +namespace MyProject +{ + public class CustomerManager : DomainService, ITransientDependency + { + private readonly IRepository _customerRepository; + + public CustomerManager(IRepository customerRepository) + { + _customerRepository = customerRepository; + } + + public async Task GetAdultPremiumCustomerCountAsync() + { + return await _customerRepository.CountAsync( + new Age18PlusCustomerSpecification() + .And(new PremiumCustomerSpecification()).ToExpression() + ); + } + } +} +```` + +如果你想让这个组合成为一个可复用的规范,你可以创建这样一个组合的规范类,它派生自`AndSpecification`: + +````csharp +using Volo.Abp.Specifications; + +namespace MyProject +{ + public class AdultPremiumCustomerSpecification : AndSpecification + { + public AdultPremiumCustomerSpecification() + : base(new Age18PlusCustomerSpecification(), + new PremiumCustomerSpecification()) + { + } + } +} +```` + +现在,您就可以向下面一样重新编写 `GetAdultPremiumCustomerCountAsync` 方法: + +````csharp +public async Task GetAdultPremiumCustomerCountAsync() +{ + return await _customerRepository.CountAsync( + new AdultPremiumCustomerSpecification() + ); +} +```` + +> 你可以从这些例子中看到规范的强大之处。如果您之后想要更改 `PremiumCustomerSpecification` ,比如将余额从 `100.000` 修改为 `200.000` ,所有查询语句和合并的规范都将受到本次更改的影响。这是减少代码重复的好方法! + +## 讨论 + +虽然规范模式通常与C#的lambda表达式相比较,算是一种更老的方式。一些开发人员可能认为不再需要它,我们可以直接将表达式传入到仓储或领域服务中,如下所示: + +````csharp +var count = await _customerRepository.CountAsync(c => c.Balance > 100000 && c.Age => 18); +```` + +自从ABP的[仓储](Repositories.md)支持表达式,这是一个完全有效的用法。您不必在应用程序中定义或使用任何规范,可以直接使用表达式。 + +所以,规范的意义是什么?为什么或者应该在什么时候考虑去使用它? + +### 何时使用? + +使用规范的一些好处: + +- **可复用**:假设您在代码库的许多地方都需要用到优质顾客过滤器。如果使用表达式而不创建规范,那么如果以后更改“优质顾客”的定义会发生什么?假设您想将最低余额从100000美元更改为250000美元,并添加另一个条件,成为顾客超过3年。如果使用了规范,只需修改一个类。如果在任何其他地方重复(复制/粘贴)相同的表达式,则需要更改所有的表达式。 +- **可组合**:可以组合多个规范来创建新规范。这是另一种可复用性。 +- **命名**:`PremiumCustomerSpecification` 更好地解释了为什么使用规范,而不是复杂的表达式。因此,如果在您的业务中使用了一个有意义的表达式,请考虑使用规范。 +- **可测试**:规范是一个单独(且易于)测试的对象。 + +### 什么时侯不要使用? + +- **没有业务含义的表达式**:不要对与业务无关的表达式和操作使用规范。 +- **报表**:如果只是创建报表,不要创建规范,而是直接使用 `IQueryable` 和LINQ表达式。您甚至可以使用普通SQL、视图或其他工具生成报表。DDD不关心报表,因此从性能角度来看,查询底层数据存储的方式可能很重要。 From 8d5dd8260a1c2dee6d49d88d85901a5261fb3bf3 Mon Sep 17 00:00:00 2001 From: Berkan Sasmaz Date: Fri, 11 Mar 2022 17:59:43 +0300 Subject: [PATCH 011/143] Move some localizations in AdminResources to BaseResources --- .../Admin/Localization/Resources/en.json | 12 ------------ .../Base/Localization/Resources/en.json | 12 ++++++++++++ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json index d2702c83b9..023a4b18ed 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json @@ -337,18 +337,6 @@ "Expired": "Expired", "TrialLicenseDeletionWarningMessage": "Are you sure you want to delete the trial license? Trial license, organization, support accounts will be deleted!", "LicenseCategoryFilter": "License category", - "Volo.AbpIo.Commercial:030000": "You already used your trial period.", - "Volo.AbpIo.Commercial:030001": "This organization name already exists.", - "Volo.AbpIo.Commercial:030002": "Once activated, trial license cannot be set to requested!", - "Volo.AbpIo.Commercial:030003": "There is no such status!", - "Volo.AbpIo.Commercial:030004": "Status could not be changed due to an unexpected error!", - "Volo.AbpIo.Commercial:030005": "Start and end date can be updated when the trial license is in the -activated- status!", - "Volo.AbpIo.Commercial:030006": "End date must always be greater than start date!", - "Volo.AbpIo.Commercial:030007": "This trial license has already been activated once!", - "Volo.AbpIo.Commercial:030008": "Purchase date can be set only when status is Purchased!", - "Volo.AbpIo.Commercial:030009": "User not found!", - "Volo.AbpIo.Commercial:030010": "To purchase the trial license, first you need to activate your trial license!", - "Volo.AbpIo.Commercial:030011": "You cannot delete a trial license when it is purchased!", "Permission:SendWelcomeEmail": "Send Welcome Email", "SendWelcomeEmail": "Send Welcome Email", "SendWelcomeEmailWarningMessage": "Are you sure you want to send welcome email to the organization members?", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json index a214e251af..bfb5da247b 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json @@ -14,6 +14,18 @@ "Volo.AbpIo.Domain:020002": "Could not delete this NPM Package because \"{Modules}\" Modules are using this package.", "Volo.AbpIo.Domain:020003": "Could not delete this NPM Package because \"{Modules}\" Modules are using this package and \"{NugetPackages}\" Nuget Packages are dependent to this package.", "Volo.AbpIo.Domain:020004": "Could not delete this Nuget Package because \"{Modules}\" Modules are using this package.", + "Volo.AbpIo.Domain:030000": "You already used your trial period.", + "Volo.AbpIo.Domain:030001": "This organization name already exists.", + "Volo.AbpIo.Domain:030002": "Once activated, trial license cannot be set to requested!", + "Volo.AbpIo.Domain:030003": "There is no such status!", + "Volo.AbpIo.Domain:030004": "Status could not be changed due to an unexpected error!", + "Volo.AbpIo.Domain:030005": "Start and end date can be updated when the trial license is in the -activated- status!", + "Volo.AbpIo.Domain:030006": "End date must always be greater than start date!", + "Volo.AbpIo.Domain:030007": "This trial license has already been activated once!", + "Volo.AbpIo.Domain:030008": "Purchase date can be set only when status is Purchased!", + "Volo.AbpIo.Domain:030009": "User not found!", + "Volo.AbpIo.Domain:030010": "To purchase the trial license, first you need to activate your trial license!", + "Volo.AbpIo.Domain:030011": "You cannot delete a trial license when it is purchased!", "WantToLearn?": "Want to learn?", "ReadyToGetStarted?": "Ready to get started?", "JoinOurCommunity": "Join our community", From 1263bf51e6a82494d77926513bdfc4dca913640e Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Sat, 12 Mar 2022 13:27:44 +0800 Subject: [PATCH 012/143] Update Background-Jobs.md --- docs/zh-Hans/Modules/Background-Jobs.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/zh-Hans/Modules/Background-Jobs.md b/docs/zh-Hans/Modules/Background-Jobs.md index 87c57acde7..fe021f1a56 100644 --- a/docs/zh-Hans/Modules/Background-Jobs.md +++ b/docs/zh-Hans/Modules/Background-Jobs.md @@ -1,16 +1,16 @@ # 后台作业模块 -后台作业模块实现了 `IBackgroundJobStore` 接口,并且可以使用ABP框架的默认后台作业管理。如果你不想使用这个模块,那么你需要自己实现 `IBackgroundJobStore` 接口。 +后台作业模块实现了 `IBackgroundJobStore` 接口,并且可以使用ABP框架的默认后台作业管理.如果你不想使用这个模块,那么你需要自己实现 `IBackgroundJobStore` 接口. -> 本文档仅介绍后台作业模块,该模块将后台作业持久化到数据库。有关后台作业系统的更多信息,请参阅[后台作业](../Background-Jobs.md)文档。 +> 本文档仅介绍后台作业模块,该模块将后台作业持久化到数据库.有关后台作业系统的更多信息,请参阅[后台作业](../Background-Jobs.md)文档. ## 如何使用 -当您使用ABP框架[创建一个新的解决方案](https://abp.io/get-started)时,这个模块是(作为NuGet/NPM包)预先安装的。您可以继续将其作为软件包使用并轻松获取更新,也可以将其源代码包含到解决方案中(请参阅 `get-source` [CLI](../CLI.md)命令)以开发自定义模块。 +当你使用ABP框架[创建一个新的解决方案](https://abp.io/get-started)时,这个模块是(作为NuGet/NPM包)预先安装的.你可以继续将其作为软件包使用并轻松获取更新,也可以将其源代码包含到解决方案中(请参阅 `get-source` [CLI](../CLI.md)命令)以开发自定义模块. ### 源代码 -此模块的源代码可在[此处](https://github.com/abpframework/abp/tree/dev/modules/background-jobs)访问。源代码是由[麻省理工学院](https://choosealicense.com/licenses/mit/)授权的,所以你可以自由使用和定制它。 +此模块的源代码可在[此处](https://github.com/abpframework/abp/tree/dev/modules/background-jobs)访问.源代码是由[MIT](https://choosealicense.com/licenses/mit/)授权的,所以你可以自由使用和定制它. ## 内部结构 @@ -32,11 +32,11 @@ ##### 表/集合的前缀与架构 -默认情况下,所有表/集合都使用 `Abp` 前缀。如果需要更改表前缀或设置架构名称(如果数据库提供程序支持),请在 `BackgroundJobsDbProperties` 类上设置静态属性。 +默认情况下,所有表/集合都使用 `Abp` 前缀.如果需要更改表前缀或设置架构名称(如果数据库提供程序支持),请在 `BackgroundJobsDbProperties` 类上设置静态属性. ##### 连接字符串 -此模块使用 `AbpBackgroundJobs` 作为连接字符串名称。如果不使用此名称定义连接字符串,它将返回 `Default` 连接字符串。有关详细信息,请参阅[连接字符串](https://docs.abp.io/en/abp/latest/Connection-Strings)文档。 +此模块使用 `AbpBackgroundJobs` 作为连接字符串名称.如果不使用此名称定义连接字符串,它将返回 `Default` 连接字符串.有关详细信息,请参阅[连接字符串](https://docs.abp.io/en/abp/latest/Connection-Strings)文档. #### Entity Framework Core From 00014eee2f58f50d5b3508cffe5b42ede6694e69 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Sat, 12 Mar 2022 13:30:19 +0800 Subject: [PATCH 013/143] Update Specifications.md --- docs/zh-Hans/Specifications.md | 70 +++++++++++++++++----------------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/docs/zh-Hans/Specifications.md b/docs/zh-Hans/Specifications.md index bc5c67101b..40a473dbc0 100644 --- a/docs/zh-Hans/Specifications.md +++ b/docs/zh-Hans/Specifications.md @@ -1,22 +1,22 @@ -## 规范 +## 规约 -规范模式用于为实体和其他业务对象定义 **命名、可复用、可组合和可测试的过滤器** 。 +规约模式用于为实体和其他业务对象定义 **命名、可复用、可组合和可测试的过滤器** . -> 规范是领域层的一部分。 +> 规约是领域层的一部分. ## 安装 -> 这个包 **已经安装** 在启动模板中。所以,大多数时候你不需要手动去安装。 +> 这个包 **已经安装** 在启动模板中.所以,大多数时候你不需要手动去安装. -添加 [Volo.Abp.Specifications](https://abp.io/package-detail/Volo.Abp.Specifications) 包到你的项目. 如果当前文件夹是您的项目的根目录(`.csproj`)时,您可以在命令行终端中使用 [ABP CLI](CLI.md) *add package* 命令: +添加 [Volo.Abp.Specifications](https://abp.io/package-detail/Volo.Abp.Specifications) 包到你的项目. 如果当前文件夹是你的项目的根目录(`.csproj`)时,你可以在命令行终端中使用 [ABP CLI](CLI.md) *add package* 命令: ````bash abp add-package Volo.Abp.Specifications ```` -## 定义规范 +## 定义规约 -假设您定义了如下的顾客实体: +假设你定义了如下的顾客实体: ````csharp using System; @@ -37,9 +37,9 @@ namespace MyProject } ```` -您可以创建一个由 `Specification` 派生的新规范类。 +你可以创建一个由 `Specification` 派生的新规约类. -**例如:规定选择一个18岁以上的顾客** +**例如:规定选择一个18岁以上的顾客** ````csharp using System; @@ -58,19 +58,19 @@ namespace MyProject } ```` -您只需通过定义一个lambda[表达式](https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/operators/lambda-expressions)来定义规范。 +你只需通过定义一个lambda[表达式](https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/operators/lambda-expressions)来定义规约. -> 您也可以直接实现`ISpecification`接口,但是基类`Specification`做了大量简化。 +> 你也可以直接实现`ISpecification`接口,但是基类`Specification`做了大量简化. -## 使用规范 +## 使用规约 -这里有两种常见的规范用例。 +这里有两种常见的规约用例. ### IsSatisfiedBy -`IsSatisfiedBy` 方法可以用于检查单个对象是否满足规范。 +`IsSatisfiedBy` 方法可以用于检查单个对象是否满足规约. -**例如:如果顾客不满足年龄规定,则抛出异常** +**例如:如果顾客不满足年龄规定,则抛出异常** ````csharp using System; @@ -98,7 +98,7 @@ namespace MyProject ### ToExpression & Repositories -`ToExpression()` 方法可用于将规范转化为表达式。通过这种方式,您可以使用规范在**数据库查询时过滤实体**。 +`ToExpression()` 方法可用于将规约转化为表达式.通过这种方式,你可以使用规约在**数据库查询时过滤实体**. ````csharp using System; @@ -133,9 +133,9 @@ namespace MyProject } ```` -> 规范被正确地转换为SQL/数据库查询语句,并且在DBMS端高效执行。虽然它与规范无关,但如果您想了解有关 `AsyncExecuter` 的更多信息,请参阅[仓储](Repositories.md)文档。 +> 规约被正确地转换为SQL/数据库查询语句,并且在DBMS端高效执行.虽然它与规约无关,但如果你想了解有关 `AsyncExecuter` 的更多信息,请参阅[仓储](Repositories.md)文档. -实际上,没有必要使用 `ToExpression()` 方法,因为规范会自动转换为表达式。这也会起作用: +实际上,没有必要使用 `ToExpression()` 方法,因为规约会自动转换为表达式.这也会起作用: ````csharp var queryable = await _customerRepository.GetQueryableAsync(); @@ -144,11 +144,11 @@ var query = queryable.Where( ); ```` -## 编写规范 +## 编写规约 -规范有一个强大的功能是,它们可以与`And`、`Or`、`Not`以及`AndNot`扩展方法组合使用。 +规约有一个强大的功能是,它们可以与`And`、`Or`、`Not`以及`AndNot`扩展方法组合使用. -假设您有另一个规范,定义如下: +假设你有另一个规约,定义如下: ```csharp using System; @@ -167,7 +167,7 @@ namespace MyProject } ``` -您可以将 `PremiumCustomerSpecification` 和 `Age18PlusCustomerSpecification` 结合起来,查询优质成人顾客的数量,如下所示: +你可以将 `PremiumCustomerSpecification` 和 `Age18PlusCustomerSpecification` 结合起来,查询优质成人顾客的数量,如下所示: ````csharp using System; @@ -199,7 +199,7 @@ namespace MyProject } ```` -如果你想让这个组合成为一个可复用的规范,你可以创建这样一个组合的规范类,它派生自`AndSpecification`: +如果你想让这个组合成为一个可复用的规约,你可以创建这样一个组合的规约类,它派生自`AndSpecification`: ````csharp using Volo.Abp.Specifications; @@ -217,7 +217,7 @@ namespace MyProject } ```` -现在,您就可以向下面一样重新编写 `GetAdultPremiumCustomerCountAsync` 方法: +现在,你就可以向下面一样重新编写 `GetAdultPremiumCustomerCountAsync` 方法: ````csharp public async Task GetAdultPremiumCustomerCountAsync() @@ -228,30 +228,30 @@ public async Task GetAdultPremiumCustomerCountAsync() } ```` -> 你可以从这些例子中看到规范的强大之处。如果您之后想要更改 `PremiumCustomerSpecification` ,比如将余额从 `100.000` 修改为 `200.000` ,所有查询语句和合并的规范都将受到本次更改的影响。这是减少代码重复的好方法! +> 你可以从这些例子中看到规约的强大之处.如果你之后想要更改 `PremiumCustomerSpecification` ,比如将余额从 `100.000` 修改为 `200.000` ,所有查询语句和合并的规约都将受到本次更改的影响.这是减少代码重复的好方法! ## 讨论 -虽然规范模式通常与C#的lambda表达式相比较,算是一种更老的方式。一些开发人员可能认为不再需要它,我们可以直接将表达式传入到仓储或领域服务中,如下所示: +虽然规约模式通常与C#的lambda表达式相比较,算是一种更老的方式.一些开发人员可能认为不再需要它,我们可以直接将表达式传入到仓储或领域服务中,如下所示: ````csharp var count = await _customerRepository.CountAsync(c => c.Balance > 100000 && c.Age => 18); ```` -自从ABP的[仓储](Repositories.md)支持表达式,这是一个完全有效的用法。您不必在应用程序中定义或使用任何规范,可以直接使用表达式。 +自从ABP的[仓储](Repositories.md)支持表达式,这是一个完全有效的用法.你不必在应用程序中定义或使用任何规约,可以直接使用表达式. -所以,规范的意义是什么?为什么或者应该在什么时候考虑去使用它? +所以,规约的意义是什么?为什么或者应该在什么时候考虑去使用它? ### 何时使用? -使用规范的一些好处: +使用规约的一些好处: -- **可复用**:假设您在代码库的许多地方都需要用到优质顾客过滤器。如果使用表达式而不创建规范,那么如果以后更改“优质顾客”的定义会发生什么?假设您想将最低余额从100000美元更改为250000美元,并添加另一个条件,成为顾客超过3年。如果使用了规范,只需修改一个类。如果在任何其他地方重复(复制/粘贴)相同的表达式,则需要更改所有的表达式。 -- **可组合**:可以组合多个规范来创建新规范。这是另一种可复用性。 -- **命名**:`PremiumCustomerSpecification` 更好地解释了为什么使用规范,而不是复杂的表达式。因此,如果在您的业务中使用了一个有意义的表达式,请考虑使用规范。 -- **可测试**:规范是一个单独(且易于)测试的对象。 +- **可复用**:假设你在代码库的许多地方都需要用到优质顾客过滤器.如果使用表达式而不创建规约,那么如果以后更改“优质顾客”的定义会发生什么?假设你想将最低余额从100000美元更改为250000美元,并添加另一个条件,成为顾客超过3年.如果使用了规约,只需修改一个类.如果在任何其他地方重复(复制/粘贴)相同的表达式,则需要更改所有的表达式. +- **可组合**:可以组合多个规约来创建新规约.这是另一种可复用性. +- **命名**:`PremiumCustomerSpecification` 更好地解释了为什么使用规约,而不是复杂的表达式.因此,如果在你的业务中使用了一个有意义的表达式,请考虑使用规约. +- **可测试**:规约是一个单独(且易于)测试的对象. ### 什么时侯不要使用? -- **没有业务含义的表达式**:不要对与业务无关的表达式和操作使用规范。 -- **报表**:如果只是创建报表,不要创建规范,而是直接使用 `IQueryable` 和LINQ表达式。您甚至可以使用普通SQL、视图或其他工具生成报表。DDD不关心报表,因此从性能角度来看,查询底层数据存储的方式可能很重要。 +- **没有业务含义的表达式**:不要对与业务无关的表达式和操作使用规约. +- **报表**:如果只是创建报表,不要创建规约,而是直接使用 `IQueryable` 和LINQ表达式.你甚至可以使用普通SQL、视图或其他工具生成报表.DDD不关心报表,因此从性能角度来看,查询底层数据存储的方式可能很重要. From 848c4947b87cc88d3a18f6079ea2a21fefd6e62a Mon Sep 17 00:00:00 2001 From: albert <9526587+ebicoglu@users.noreply.github.com> Date: Sat, 12 Mar 2022 19:39:18 +0300 Subject: [PATCH 014/143] Update en.json --- .../Base/Localization/Resources/en.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json index bfb5da247b..fe0947da89 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json @@ -14,17 +14,17 @@ "Volo.AbpIo.Domain:020002": "Could not delete this NPM Package because \"{Modules}\" Modules are using this package.", "Volo.AbpIo.Domain:020003": "Could not delete this NPM Package because \"{Modules}\" Modules are using this package and \"{NugetPackages}\" Nuget Packages are dependent to this package.", "Volo.AbpIo.Domain:020004": "Could not delete this Nuget Package because \"{Modules}\" Modules are using this package.", - "Volo.AbpIo.Domain:030000": "You already used your trial period.", + "Volo.AbpIo.Domain:030000": "You have already completed your trial period.", "Volo.AbpIo.Domain:030001": "This organization name already exists.", - "Volo.AbpIo.Domain:030002": "Once activated, trial license cannot be set to requested!", + "Volo.AbpIo.Domain:030002": "Once activated, you cannot switch the trial license to -requested- status!", "Volo.AbpIo.Domain:030003": "There is no such status!", "Volo.AbpIo.Domain:030004": "Status could not be changed due to an unexpected error!", "Volo.AbpIo.Domain:030005": "Start and end date can be updated when the trial license is in the -activated- status!", - "Volo.AbpIo.Domain:030006": "End date must always be greater than start date!", - "Volo.AbpIo.Domain:030007": "This trial license has already been activated once!", - "Volo.AbpIo.Domain:030008": "Purchase date can be set only when status is Purchased!", + "Volo.AbpIo.Domain:030006": "The end date must be greater than the start date!", + "Volo.AbpIo.Domain:030007": "This trial license has already been activated!", + "Volo.AbpIo.Domain:030008": "The purchase date can be set only when the status is -purchased-!", "Volo.AbpIo.Domain:030009": "User not found!", - "Volo.AbpIo.Domain:030010": "To purchase the trial license, first you need to activate your trial license!", + "Volo.AbpIo.Domain:030010": "To purchase the trial license, you first need to activate your trial license!", "Volo.AbpIo.Domain:030011": "You cannot delete a trial license when it is purchased!", "WantToLearn?": "Want to learn?", "ReadyToGetStarted?": "Ready to get started?", From b870fbe4769add75cab464791b546bad18f61af0 Mon Sep 17 00:00:00 2001 From: Enis Necipoglu Date: Mon, 14 Mar 2022 08:54:31 +0300 Subject: [PATCH 015/143] Add code-mirror mapping for test app --- .../Volo.CmsKit.Web.Unified/abp.resourcemapping.js | 5 ++++- .../host/Volo.CmsKit.Web.Unified/package.json | 3 ++- .../cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock | 13 +++++++++++++ 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/abp.resourcemapping.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/abp.resourcemapping.js index 82b2d4b649..b473302023 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/abp.resourcemapping.js +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/abp.resourcemapping.js @@ -7,6 +7,9 @@ module.exports = { "@libs" ], mappings: { - + "@node_modules/codemirror/lib/*.*": "@libs/codemirror/", + "@node_modules/codemirror/mode/**/*.*": "@libs/codemirror/mode/", + "@node_modules/codemirror/theme/**/*.*": "@libs/codemirror/theme/", + "@node_modules/codemirror/addon/**/*.*": "@libs/codemirror/addon/" } } \ No newline at end of file diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/package.json b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/package.json index c27b4dc457..909a876b9d 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/package.json +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/package.json @@ -4,6 +4,7 @@ "private": true, "dependencies": { "@abp/aspnetcore.mvc.ui.theme.basic": "^5.2.0-rc.1", - "@abp/cms-kit": "5.2.0-rc.1" + "@abp/cms-kit": "5.2.0-rc.1", + "@abp/codemirror": "~5.2.0-rc.1" } } \ No newline at end of file diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock index 47305a1cad..e69e2daced 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock @@ -90,6 +90,14 @@ "@abp/cms-kit.admin" "~5.2.0-rc.1" "@abp/cms-kit.public" "~5.2.0-rc.1" +"@abp/codemirror@~5.2.0-rc.1": + version "5.2.0-rc.1" + resolved "https://registry.yarnpkg.com/@abp/codemirror/-/codemirror-5.2.0-rc.1.tgz#0f06b4396056d1f3c854e67127d84781690d554f" + integrity sha512-iYl9LnHJTZFGUF/WJdGwXwTDUtfrodqr4RAEG+OBETe55yjGLmEW9cRjqgyZdX8UZvYGv9kSD3ScVUrv3woa/A== + dependencies: + "@abp/core" "~5.2.0-rc.1" + codemirror "^5.65.1" + "@abp/core@~5.2.0-rc.1": version "5.2.0-rc.1" resolved "https://registry.yarnpkg.com/@abp/core/-/core-5.2.0-rc.1.tgz#28dd4949d6b45a2a75f4b76fe0b78b9fa809755d" @@ -987,6 +995,11 @@ code-point-at@^1.0.0: resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= +codemirror@^5.65.1: + version "5.65.2" + resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.65.2.tgz#5799a70cb3d706e10f60e267245e3a75205d3dd9" + integrity sha512-SZM4Zq7XEC8Fhroqe3LxbEEX1zUPWH1wMr5zxiBuiUF64iYOUH/JI88v4tBag8MiBS8B8gRv8O1pPXGYXQ4ErA== + collection-map@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/collection-map/-/collection-map-1.0.0.tgz#aea0f06f8d26c780c2b75494385544b2255af18c" From 68194d7f85b736e5834aeab6700b4c97a1dcf8d1 Mon Sep 17 00:00:00 2001 From: Enis Necipoglu Date: Mon, 14 Mar 2022 09:08:52 +0300 Subject: [PATCH 016/143] Add style & script editor for Page Create/Update --- .../Pages/CmsKit/Pages/Create.cshtml | 9 ++++++-- .../Pages/CmsKit/Pages/Update.cshtml | 5 +++++ .../Pages/CmsKit/Pages/create.js | 22 +++++++++++++++++-- .../Pages/CmsKit/Pages/update.js | 18 +++++++++++++++ 4 files changed, 50 insertions(+), 4 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/Create.cshtml b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/Create.cshtml index 841576e761..4671cb2ca2 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/Create.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/Create.cshtml @@ -1,6 +1,7 @@ @page @using System.Globalization +@using Volo.Abp.AspNetCore.Mvc.UI.Packages.Codemirror @using Volo.Abp.AspNetCore.Mvc.UI.Packages.TuiEditor @using Volo.Abp.AspNetCore.Mvc.UI.Packages.Uppy @using Volo.CmsKit.Admin.Web.Pages @@ -22,6 +23,9 @@ + + + @@ -31,6 +35,7 @@ @section styles { + } @@ -56,11 +61,11 @@ - + - + diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/Update.cshtml b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/Update.cshtml index 1271502946..499ad1b633 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/Update.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/Update.cshtml @@ -1,6 +1,7 @@ @page "{Id}" @using System.Globalization +@using Volo.Abp.AspNetCore.Mvc.UI.Packages.Codemirror @using Volo.Abp.AspNetCore.Mvc.UI.Packages.TuiEditor @using Volo.Abp.AspNetCore.Mvc.UI.Packages.Uppy @using Volo.Abp.AspNetCore.Mvc.UI.Packages.Slugify @@ -23,6 +24,9 @@ + + + @@ -32,6 +36,7 @@ @section styles { + } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/create.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/create.js index ffe37fe5a8..1de6021a7d 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/create.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/create.js @@ -6,22 +6,40 @@ $(function () { var $slug = $('#ViewModel_Slug'); var $buttonSubmit = $('#button-page-create'); + var scriptEditor = CodeMirror.fromTextArea(document.getElementById("ViewModel_Script"), { + mode: "javascript", + lineNumbers: true + }); + + var styleEditor = CodeMirror.fromTextArea(document.getElementById("ViewModel_Style"), { + mode: "css", + lineNumbers: true + }); + + $('.nav-tabs a').on('shown.bs.tab', function () { + scriptEditor.refresh(); + styleEditor.refresh(); + }); + $createForm.data('validator').settings.ignore = ":hidden, [contenteditable='true']:not([name]), .tui-popup-wrapper"; $createForm.on('submit', function (e) { e.preventDefault(); - + if ($createForm.valid()) { abp.ui.setBusy(); + $("#ViewModel_Style").val(styleEditor.getValue()); + $("#ViewModel_Script").val(scriptEditor.getValue()); + $createForm.ajaxSubmit({ success: function (result) { abp.notify.success(l('SuccessfullySaved')); abp.ui.clearBusy(); location.href = "../Pages"; }, - error: function(result){ + error: function (result) { abp.ui.clearBusy(); abp.notify.error(result.responseJSON.error.message); } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/update.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/update.js index 99af38b70c..6bd90dd934 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/update.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/update.js @@ -7,6 +7,21 @@ $(function () { $formUpdate.data('validator').settings.ignore = ":hidden, [contenteditable='true']:not([name]), .tui-popup-wrapper"; + var scriptEditor = CodeMirror.fromTextArea(document.getElementById("ViewModel_Script"), { + mode: "javascript", + lineNumbers: true + }); + + var styleEditor = CodeMirror.fromTextArea(document.getElementById("ViewModel_Style"), { + mode: "css", + lineNumbers: true + }); + + $('.nav-tabs a').on('shown.bs.tab', function () { + scriptEditor.refresh(); + styleEditor.refresh(); + }); + $formUpdate.on('submit', function (e) { e.preventDefault(); @@ -14,6 +29,9 @@ $(function () { abp.ui.setBusy(); + $("#ViewModel_Style").val(styleEditor.getValue()); + $("#ViewModel_Script").val(scriptEditor.getValue()); + $formUpdate.ajaxSubmit({ success: function (result) { abp.notify.success(l('SuccessfullySaved')); From 880d23357af54ef7afca428dedc6bac10a089d9a Mon Sep 17 00:00:00 2001 From: Enis Necipoglu Date: Mon, 14 Mar 2022 09:32:21 +0300 Subject: [PATCH 017/143] Revert local changes for Volo.CmsKit.Web.Unified --- .../host/Volo.CmsKit.Web.Unified/abp.resourcemapping.js | 4 ---- modules/cms-kit/host/Volo.CmsKit.Web.Unified/package.json | 3 +-- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/abp.resourcemapping.js b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/abp.resourcemapping.js index b473302023..26cdc6aad9 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/abp.resourcemapping.js +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/abp.resourcemapping.js @@ -7,9 +7,5 @@ module.exports = { "@libs" ], mappings: { - "@node_modules/codemirror/lib/*.*": "@libs/codemirror/", - "@node_modules/codemirror/mode/**/*.*": "@libs/codemirror/mode/", - "@node_modules/codemirror/theme/**/*.*": "@libs/codemirror/theme/", - "@node_modules/codemirror/addon/**/*.*": "@libs/codemirror/addon/" } } \ No newline at end of file diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/package.json b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/package.json index 909a876b9d..c27b4dc457 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/package.json +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/package.json @@ -4,7 +4,6 @@ "private": true, "dependencies": { "@abp/aspnetcore.mvc.ui.theme.basic": "^5.2.0-rc.1", - "@abp/cms-kit": "5.2.0-rc.1", - "@abp/codemirror": "~5.2.0-rc.1" + "@abp/cms-kit": "5.2.0-rc.1" } } \ No newline at end of file From e40dfb586e18ac522614e0180aafbdc31a36d5b4 Mon Sep 17 00:00:00 2001 From: Enis Necipoglu Date: Mon, 14 Mar 2022 09:33:14 +0300 Subject: [PATCH 018/143] Update yarn.lock --- .../cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock index e69e2daced..47305a1cad 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock @@ -90,14 +90,6 @@ "@abp/cms-kit.admin" "~5.2.0-rc.1" "@abp/cms-kit.public" "~5.2.0-rc.1" -"@abp/codemirror@~5.2.0-rc.1": - version "5.2.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/codemirror/-/codemirror-5.2.0-rc.1.tgz#0f06b4396056d1f3c854e67127d84781690d554f" - integrity sha512-iYl9LnHJTZFGUF/WJdGwXwTDUtfrodqr4RAEG+OBETe55yjGLmEW9cRjqgyZdX8UZvYGv9kSD3ScVUrv3woa/A== - dependencies: - "@abp/core" "~5.2.0-rc.1" - codemirror "^5.65.1" - "@abp/core@~5.2.0-rc.1": version "5.2.0-rc.1" resolved "https://registry.yarnpkg.com/@abp/core/-/core-5.2.0-rc.1.tgz#28dd4949d6b45a2a75f4b76fe0b78b9fa809755d" @@ -995,11 +987,6 @@ code-point-at@^1.0.0: resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= -codemirror@^5.65.1: - version "5.65.2" - resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.65.2.tgz#5799a70cb3d706e10f60e267245e3a75205d3dd9" - integrity sha512-SZM4Zq7XEC8Fhroqe3LxbEEX1zUPWH1wMr5zxiBuiUF64iYOUH/JI88v4tBag8MiBS8B8gRv8O1pPXGYXQ4ErA== - collection-map@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/collection-map/-/collection-map-1.0.0.tgz#aea0f06f8d26c780c2b75494385544b2255af18c" From d703bfedae34bd110d0cd0e387335f00fdad66be Mon Sep 17 00:00:00 2001 From: mehmetuken Date: Mon, 14 Mar 2022 09:50:51 +0300 Subject: [PATCH 019/143] add imports.razor --- .../_Imports.razor | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/_Imports.razor diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/_Imports.razor b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/_Imports.razor new file mode 100644 index 0000000000..fe27745143 --- /dev/null +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/_Imports.razor @@ -0,0 +1,13 @@ +@using System.Net.Http +@using Microsoft.AspNetCore.Authorization +@using Microsoft.AspNetCore.Components.Authorization +@using Microsoft.AspNetCore.Components.Forms +@using Microsoft.AspNetCore.Components.Routing +@using Microsoft.AspNetCore.Components.Web +@using Microsoft.AspNetCore.Components.Web.Virtualization +@using Microsoft.JSInterop +@using MyCompanyName.MyProjectName.Blazor.Server +@using Blazorise +@using Blazorise.DataGrid +@using Volo.Abp.BlazoriseUI +@using Volo.Abp.BlazoriseUI.Components \ No newline at end of file From d6157e632f75e5859e0b65f10cde06df2333a46c Mon Sep 17 00:00:00 2001 From: Engincan VESKE Date: Mon, 14 Mar 2022 13:14:56 +0300 Subject: [PATCH 020/143] Add new localizations for abp.io website --- .../AbpIoLocalization/Base/Localization/Resources/en.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json index fe0947da89..f772006632 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json @@ -84,7 +84,7 @@ "WouldLikeToReceiveMarketingMaterials": "I would like to receive marketing materials like product deals & special offers.", "JoinOurMarketingNewsletter": "Join our marketing newsletter", "CommunityPrivacyPolicyConfirmation": "I agree to the Terms & Conditions and Privacy Policy.", - "ABPIO-Common": "ABPIO-Common", + "WouldLikeToReceiveNotification": "I would like to receive the latest news from abp.io websites.", "CommercialNewsletterConfirmationMessage": "I agree to the Terms & Conditions and Privacy Policy.", "FreeDDDEBook": "Free DDD E-Book", "AdditionalServices": "Additional Services", @@ -118,6 +118,7 @@ "ThereIsNoEvent": "There is no event.", "Events": "Events", "Volo.AbpIo.Domain:080000": "There is already a purchase item named \"{Name}\"", - "MasteringAbpFrameworkBook": "Book: Mastering ABP Framework" + "MasteringAbpFrameworkBook": "Book: Mastering ABP Framework", + "ABPIO-CommonPreferenceDefinition": "Get latest news about ABP Platform like new posts, events and more." } } From c543dd5c6b27a588918f43bc15981659780c7280 Mon Sep 17 00:00:00 2001 From: hpstory <33348162+hpstory@users.noreply.github.com> Date: Mon, 14 Mar 2022 20:47:18 +0800 Subject: [PATCH 021/143] Update distributed-Event-Bus.md Update Distributed-Event-Bus-RabbitMQ-Integration.md --- .../zh-Hans/Distributed-Event-Bus-RabbitMQ-Integration.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/zh-Hans/Distributed-Event-Bus-RabbitMQ-Integration.md b/docs/zh-Hans/Distributed-Event-Bus-RabbitMQ-Integration.md index ab7cb68bd7..1cd6b5b9dd 100644 --- a/docs/zh-Hans/Distributed-Event-Bus-RabbitMQ-Integration.md +++ b/docs/zh-Hans/Distributed-Event-Bus-RabbitMQ-Integration.md @@ -1,10 +1,10 @@ # 分布式事件总线RabbitMQ集成 -> 本文解释了**如何配置[RabbitMQ](https://www.rabbitmq.com/)**做为分布式总线提供程序. 参阅[分布式事件总线文档](Distributed-Event-Bus.md)了解如何使用分布式事件总线系统. +> 本文解释了 **如何配置[RabbitMQ](https://www.rabbitmq.com/)** 做为分布式总线提供程序. 参阅[分布式事件总线文档](Distributed-Event-Bus.md)了解如何使用分布式事件总线系统. ## 安装 -使用ABP CLI添加[Volo.Abp.EventBus.RabbitMQ[Volo.Abp.EventBus.RabbitMQ](https://www.nuget.org/packages/Volo.Abp.EventBus.RabbitMQ)NuGet包到你的项目: +使用ABP CLI添加[Volo.Abp.EventBus.RabbitMQ](https://www.nuget.org/packages/Volo.Abp.EventBus.RabbitMQ)NuGet包到你的项目: * 安装[ABP CLI](https://docs.abp.io/en/abp/latest/CLI),如果你还没有安装. * 在你想要安装 `Volo.Abp.EventBus.RabbitMQ` 包的 `.csproj` 文件目录打开命令行(终端). @@ -18,7 +18,7 @@ ### `appsettings.json` 文件配置 -这是配置RabbitMQ设置最简单的方法. 它也非常强大,因为你可以使用[由AspNet Core支持的](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/)的任何其他配置源(如环境变量). +这是配置RabbitMQ设置最简单的方法. 它也非常强大,因为你可以使用[由AspNet Core支持](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/)的任何其他配置源(如环境变量). **示例:最小化配置与默认配置连接到本地的RabbitMQ服务器** @@ -151,4 +151,4 @@ Configure(options => }); ```` -使用这些选项类可以与 `appsettings.json` 组合在一起. 在代码中配置选项属性会覆盖配置文件中的值. \ No newline at end of file +使用这些选项类可以与 `appsettings.json` 组合在一起. 在代码中配置选项属性会覆盖配置文件中的值. From d2e1863bbf9cbb5bcf4bbfd0d8ec75199d59eac4 Mon Sep 17 00:00:00 2001 From: hpstory <33348162+hpstory@users.noreply.github.com> Date: Mon, 14 Mar 2022 20:49:42 +0800 Subject: [PATCH 022/143] Update Rebus-Integration.md Update Distributed-Event-Bus-Rebus-Integration.md --- docs/zh-Hans/Distributed-Event-Bus-Rebus-Integration.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/zh-Hans/Distributed-Event-Bus-Rebus-Integration.md b/docs/zh-Hans/Distributed-Event-Bus-Rebus-Integration.md index 409b935ace..64fce06d1b 100644 --- a/docs/zh-Hans/Distributed-Event-Bus-Rebus-Integration.md +++ b/docs/zh-Hans/Distributed-Event-Bus-Rebus-Integration.md @@ -1,10 +1,10 @@ # 分布式事件总线Rebus集成 -> 本文解释了**如何配置[Rebus](http://mookid.dk/category/rebus/)**做为分布式总线提供程序. 参阅[分布式事件总线文档](Distributed-Event-Bus.md)了解如何使用分布式事件总线系统. +> 本文解释了 **如何配置[Rebus](http://mookid.dk/category/rebus/)** 做为分布式总线提供程序. 参阅[分布式事件总线文档](Distributed-Event-Bus.md)了解如何使用分布式事件总线系统. ## 安装 -使用ABP CLI添加[Volo.Abp.EventBus.Rebus[Volo.Abp.EventBus.Rebus](https://www.nuget.org/packages/Volo.Abp.EventBus.Rebus)NuGet包到你的项目: +使用ABP CLI添加[Volo.Abp.EventBus.Rebus](https://www.nuget.org/packages/Volo.Abp.EventBus.Rebus)NuGet包到你的项目: * 安装[ABP CLI](https://docs.abp.io/en/abp/latest/CLI),如果你还没有安装. * 在你想要安装 `Volo.Abp.EventBus.Rebus` 包的 `.csproj` 文件目录打开命令行(终端). From 069c338dcbf0037b01cee7c2a999faf9c94b2e62 Mon Sep 17 00:00:00 2001 From: hpstory <33348162+hpstory@users.noreply.github.com> Date: Mon, 14 Mar 2022 20:51:29 +0800 Subject: [PATCH 023/143] Update Kafka-Integration.md Update Distributed-Event-Bus-Kafka-Integration.md --- docs/zh-Hans/Distributed-Event-Bus-Kafka-Integration.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/zh-Hans/Distributed-Event-Bus-Kafka-Integration.md b/docs/zh-Hans/Distributed-Event-Bus-Kafka-Integration.md index f621a95fae..171fe3c23b 100644 --- a/docs/zh-Hans/Distributed-Event-Bus-Kafka-Integration.md +++ b/docs/zh-Hans/Distributed-Event-Bus-Kafka-Integration.md @@ -1,10 +1,10 @@ # 分布式事件总线Kafka集成 -> 本文解释了**如何配置[Kafka](https://kafka.apache.org/)**做为分布式总线提供程序. 参阅[分布式事件总线文档](Distributed-Event-Bus.md)了解如何使用分布式事件总线系统. +> 本文解释了 **如何配置[Kafka](https://kafka.apache.org/)** 做为分布式总线提供程序. 参阅[分布式事件总线文档](Distributed-Event-Bus.md)了解如何使用分布式事件总线系统. ## 安装 -使用ABP CLI添加[Volo.Abp.EventBus.Kafka[Volo.Abp.EventBus.Kafka](https://www.nuget.org/packages/Volo.Abp.EventBus.Kafka)NuGet包到你的项目: +使用ABP CLI添加[Volo.Abp.EventBus.Kafka](https://www.nuget.org/packages/Volo.Abp.EventBus.Kafka)NuGet包到你的项目: * 安装[ABP CLI](https://docs.abp.io/en/abp/latest/CLI),如果你还没有安装. * 在你想要安装 `Volo.Abp.EventBus.Kafka` 包的 `.csproj` 文件目录打开命令行(终端). @@ -18,7 +18,7 @@ ### `appsettings.json` 文件配置 -这是配置Kafka设置最简单的方法. 它也非常强大,因为你可以使用[由AspNet Core支持的](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/)的任何其他配置源(如环境变量). +这是配置Kafka设置最简单的方法. 它也非常强大,因为你可以使用[由AspNet Core支持](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/)的任何其他配置源(如环境变量). **示例:最小化配置与默认配置连接到本地的Kafka服务器** @@ -160,4 +160,4 @@ Configure(options => }); ```` -使用这些选项类可以与 `appsettings.json` 组合在一起. 在代码中配置选项属性会覆盖配置文件中的值. \ No newline at end of file +使用这些选项类可以与 `appsettings.json` 组合在一起. 在代码中配置选项属性会覆盖配置文件中的值. From 2bb482deec38d4916baebb4103e90f03ed89b544 Mon Sep 17 00:00:00 2001 From: hpstory <33348162+hpstory@users.noreply.github.com> Date: Mon, 14 Mar 2022 20:52:43 +0800 Subject: [PATCH 024/143] Update Distributed-Event-Bus.md --- docs/zh-Hans/Distributed-Event-Bus.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/zh-Hans/Distributed-Event-Bus.md b/docs/zh-Hans/Distributed-Event-Bus.md index f16aa0610f..e59fa5e726 100644 --- a/docs/zh-Hans/Distributed-Event-Bus.md +++ b/docs/zh-Hans/Distributed-Event-Bus.md @@ -264,7 +264,7 @@ Configure(options => 因此可以实现 `IDistributedEventHandler>` 订阅事件. 但是订阅这样的通用事件不是一个好方法,你可以为实体类型定义对应的ETO. -**示例: 为 `Product` 声明使用 `ProductDto`** +**示例: 为 `Product` 声明使用 `ProductEto`** ````csharp Configure(options => From 8b57594b4b78e672be40fd066ca2d1a1ba9d660f Mon Sep 17 00:00:00 2001 From: hpstory <33348162+hpstory@users.noreply.github.com> Date: Mon, 14 Mar 2022 22:23:26 +0800 Subject: [PATCH 025/143] Update Caching.md --- docs/zh-Hans/Caching.md | 259 +++++++++++++++++++++++++--------------- 1 file changed, 162 insertions(+), 97 deletions(-) diff --git a/docs/zh-Hans/Caching.md b/docs/zh-Hans/Caching.md index a75199ce47..491e60eb29 100644 --- a/docs/zh-Hans/Caching.md +++ b/docs/zh-Hans/Caching.md @@ -1,164 +1,180 @@ # 缓存 -ABP框架扩展了ASP.NET Core的分布式缓存系统. +ABP框架扩展了 [ASP.NET Core的分布式缓存系统](https://docs.microsoft.com/en-us/aspnet/core/performance/caching/distributed). -## Volo.Abp.Caching Package +## 安装 -> 默认情况下启动模板已经安装了这个包,所以大部分情况下你不需要手动安装. +> 默认情况下 [启动模板](Startup-Templates/Application.md) 已经安装了这个包. 所以大部分情况下你不需要手动安装. -Volo.Abp.Caching是缓存系统的核心包.使用包管理控制台(PMC)安装到项目: +[Volo.Abp.Caching](https://www.nuget.org/packages/Volo.Abp.Caching)是缓存系统的核心包. 可以使用 [ABP CLI](CLI.md) 的add-package命令将其安装到项目中: ``` -Install-Package Volo.Abp.Caching +abp add-package Volo.Abp.Caching ``` +你需要在包含 `csproj` 文件的文件夹中的命令行终端上运行此命令(请参阅 [其他选项](https://abp.io/package-detail/Volo.Abp.Caching) 安装). -然后将 **AbpCachingModule** 依赖添加到你的模块: +## 使用方式 -```c# -using Volo.Abp.Modularity; -using Volo.Abp.Caching; - -namespace MyCompany.MyProject -{ - [DependsOn(typeof(AbpCachingModule))] - public class MyModule : AbpModule - { - //... - } -} -``` - -## `IDistributedCache` 接口 +### `IDistributedCache` 接口 -ASP.NET Core 定义了 `IDistributedCache` 接口用于 get/set 缓存值 . 但是会有以下问题: +ASP.NET Core 定义了 `IDistributedCache` 接口用于 get/set 缓存值. 但是会有以下问题: * 它适用于 **byte 数组** 而不是 .NET 对象. 因此你需要对缓存的对象进行**序列化/反序列化**. -* 它为所有的缓存项提供了 **单个 key 池** , 因此 ; +* 它为所有的缓存项提供了 **单个 key 池** , 因此; * 你需要注意键区分 **不同类型的对象**. * 你需要注意**不同租户**(参见[多租户](Multi-Tenancy.md))的缓存项. > `IDistributedCache` 定义在 `Microsoft.Extensions.Caching.Abstractions` 包中. 这使它不仅适用于ASP.NET Core应用程序, 也可用于**任何类型的程序**. -> `IDistributedCache` 接口的默认实现是 `MemoryDistributedCache` 它使用**内存**工作. 参见 [ASP.NET Core文档](https://docs.microsoft.com/zh-cn/aspnet/core/performance/caching/distributed) 了解如何切换到 **Redis** 或其他缓存提供程序. +> `IDistributedCache` 接口的默认实现是 `MemoryDistributedCache` 它使用**内存**工作. 参见 [ASP.NET Core文档](https://docs.microsoft.com/zh-cn/aspnet/core/performance/caching/distributed) 了解如何切换到 **Redis** 或其他缓存提供程序. 此外, 如果要将Redis用作分布式缓存服务器, [Redis缓存](Redis-Cache.md) 文档. 有关更多信息, 参见 [ASP.NET Core 分布式缓存文档](https://docs.microsoft.com/zh-cn/aspnet/core/performance/caching/distributed). -## `IDistributedCache` 接口 +### `IDistributedCache` 接口 ABP框架在[Volo.Abp.Caching](https://www.nuget.org/packages/Volo.Abp.Caching/)包定义了通用的泛型 `IDistributedCache` 接口. `TCacheItem` 是存储在缓存中的对象类型. -`IDistributedCache` 接口了上述中的问题; +`IDistributedCache` 接口解决了上述中的问题; * 它在内部 **序列化/反序列化** 缓存对象. 默认使用 **JSON** 序列化, 但可以替换[依赖注入](Dependency-Injection.md)系统中 `IDistributedCacheSerializer` 服务的实现来覆盖默认的处理. -* 它根据缓存中对象类型自动向缓存key添加 **缓存名称** 前缀. 默认缓存名是缓存对象类的全名(如果你的类名以`CacheItem` 结尾, 那么`CacheItem` 会被忽略,不应用到缓存名称上). 你也可以在缓存类上使用 `CacheName` 设置换缓存的名称. -* 它自动将当前的**租户id**添加到缓存键中, 以区分不同租户的缓存项 (只有在你的应用程序是[多租户](Multi-Tenancy.md)的情况下生效). 在缓存类上应用 `IgnoreMultiTenancy` attribute, 可以在所有的租户间共享缓存. -* 允许为每个应用程序定义 **全局缓存键前缀** ,不同的应用程序可以在共享的分布式缓存中拥有自己的隔离池. +* 它根据缓存中对象类型自动向缓存key添加 **缓存名称** 前缀. 默认缓存名是缓存对象类的全名(如果你的类名以`CacheItem` 结尾, 那么`CacheItem` 会被忽略,不应用到缓存名称上). 你也可以在缓存类上使用 **`CacheName` 特性** 设置缓存的名称. +* 它自动将**当前的租户id**添加到缓存键中, 以区分不同租户的缓存项 (只有在你的应用程序是[多租户](Multi-Tenancy.md)的情况下生效). 如果要在多租户应用程序中的所有租户之间共享缓存对象, 请在缓存项类上定义`IgnoreMultiTenancy`特性以禁用此选项. +* 允许为每个应用程序定义 **全局缓存键前缀** , 不同的应用程序可以在共享的分布式缓存中拥有自己的隔离池. +* 它可以在任何可能绕过缓存的情况下 **容忍错误** 的发生. 这在缓存服务器出现临时问题时非常有用. +* 它有 `GetManyAsync` 和 `SetManyAsync` 等方法, 可以显著提高**批处理**的性能. -### 使用方式 - -缓存中存储项的示例类: +**示例: 在缓存中存储图书名称和价格** ````csharp -public class BookCacheItem +namespace MyProject { - public string Name { get; set; } + public class BookCacheItem + { + public string Name { get; set; } - public float Price { get; set; } + public float Price { get; set; } + } } ```` 你可以注入 `IDistributedCache` 服务用于 get/set `BookCacheItem` 对象. -使用示例: - ````csharp -public class BookService : ITransientDependency -{ - private readonly IDistributedCache _cache; - - public BookService(IDistributedCache cache) - { - _cache = cache; - } - - public async Task GetAsync(Guid bookId) - { - return await _cache.GetOrAddAsync( - bookId.ToString(), //Cache key - async () => await GetBookFromDatabaseAsync(bookId), - () => new DistributedCacheEntryOptions - { - AbsoluteExpiration = DateTimeOffset.Now.AddHours(1) - } - ); - } +using System; +using System.Threading.Tasks; +using Microsoft.Extensions.Caching.Distributed; +using Volo.Abp.Caching; +using Volo.Abp.DependencyInjection; - private Task GetBookFromDatabaseAsync(Guid bookId) +namespace MyProject +{ + public class BookService : ITransientDependency { - //TODO: get from database + private readonly IDistributedCache _cache; + + public BookService(IDistributedCache cache) + { + _cache = cache; + } + + public async Task GetAsync(Guid bookId) + { + return await _cache.GetOrAddAsync( + bookId.ToString(), //缓存键 + async () => await GetBookFromDatabaseAsync(bookId), + () => new DistributedCacheEntryOptions + { + AbsoluteExpiration = DateTimeOffset.Now.AddHours(1) + } + ); + } + + private Task GetBookFromDatabaseAsync(Guid bookId) + { + //TODO: 从数据库获取数据 + } } } ```` -* 示例服务代码中的 `GetOrAddAsync()` 方法从缓存中获取图书项. +* 示例服务代码中的 `GetOrAddAsync()` 方法从缓存中获取图书项. `GetOrAddAsync`是ABP框架在 ASP.NET Core 分布式缓存方法中添增的附加方法. * 如果没有在缓存中找到图书,它会调用工厂方法 (本示例中是 `GetBookFromDatabaseAsync`)从原始数据源中获取图书项. * `GetOrAddAsync` 有一个可选参数 `DistributedCacheEntryOptions` , 可用于设置缓存的生命周期. -`IDistributedCache` 的其他方法与ASP.NET Core的`IDistributedCache` 接口相同, 你可以参考 [ASP.NET Core文档](https://docs.microsoft.com/zh-cn/aspnet/core/performance/caching/distributed). +`IDistributedCache` 与ASP.NET Core的`IDistributedCache` 接口拥有相同的方法, 你可以参考 [ASP.NET Core文档](https://docs.microsoft.com/zh-cn/aspnet/core/performance/caching/distributed). -## `IDistributedCache` 接口 +### `IDistributedCache` 接口 -`IDistributedCache` 接口默认了键是 `string` 类型 (如果你的键不是string类型需要进行手动类型转换). `IDistributedCache` 将键的类型泛型化试图简化手动转换的操作. +`IDistributedCache` 接口默认了**缓存键**是 `string` 类型 (如果你的键不是string类型需要进行手动类型转换). 但当缓存键的类型不是`string`时, 可以使用`IDistributedCache`. -### 使用示例 +**示例: 在缓存中存储图书名称和价格** 示例缓存项 ````csharp -public class BookCacheItem +using Volo.Abp.Caching; + +namespace MyProject { - public string Name { get; set; } + [CacheName("Books")] + public class BookCacheItem + { + public string Name { get; set; } - public float Price { get; set; } + public float Price { get; set; } + } } ```` -用法示例 (这里假设你的键类型是 `Guid`): +* 在本例中使用`CacheName`特性给`BookCacheItem`类设置缓存名称. -````csharp -public class BookService : ITransientDependency -{ - private readonly IDistributedCache _cache; +你可以注入 `IDistributedCache` 服务用于 get/set `BookCacheItem` 对象. - public BookService(IDistributedCache cache) - { - _cache = cache; - } +````csharp +using System; +using System.Threading.Tasks; +using Microsoft.Extensions.Caching.Distributed; +using Volo.Abp.Caching; +using Volo.Abp.DependencyInjection; - public async Task GetAsync(Guid bookId) - { - return await _cache.GetOrAddAsync( - bookId, //Guid type used as the cache key - async () => await GetBookFromDatabaseAsync(bookId), - () => new DistributedCacheEntryOptions - { - AbsoluteExpiration = DateTimeOffset.Now.AddHours(1) - } - ); - } - private Task GetBookFromDatabaseAsync(Guid bookId) +namespace MyProject +{ + public class BookService : ITransientDependency { - //TODO: get from database + private readonly IDistributedCache _cache; + + public BookService(IDistributedCache cache) + { + _cache = cache; + } + + public async Task GetAsync(Guid bookId) + { + return await _cache.GetOrAddAsync( + bookId, //Guid类型作为缓存键 + async () => await GetBookFromDatabaseAsync(bookId), + () => new DistributedCacheEntryOptions + { + AbsoluteExpiration = DateTimeOffset.Now.AddHours(1) + } + ); + } + private Task GetBookFromDatabaseAsync(Guid bookId) + { + //TODO: 从数据库获取数据 + } } } ```` * 示例服务中 `GetOrAddAsync()` 方法获取缓存的图书项. -* 我们采用了 `Guid` 做为键,在 `_cache_GetOrAddAsync()` 方法中传入 `Guid` 类型的bookid. +* 我们采用了 `Guid` 做为键, 在 `_cache_GetOrAddAsync()` 方法中传入 `Guid` 类型的bookid. + +#### 复杂类型的缓存键 -`IDistributedCache` 在内部使用键对象的 `ToString()` 方法转换类型为string. 如果你的将复杂对象做为键,那么需要重写类的 `ToString` 方法. +`IDistributedCache` 在内部使用键对象的 `ToString()` 方法转换类型为string. 如果你的将复杂对象做为缓存键,那么需要重写类的 `ToString` 方法. -示例: +举例一个作为缓存键的类: ````csharp public class UserInOrganizationCacheKey @@ -187,23 +203,72 @@ public class BookService : ITransientDependency { _cache = cache; } - + ... } ```` +## 配置 + +### AbpDistributedCacheOptions +`AbpDistributedCacheOptions` 是配置缓存的主要[Option类](Options.md). + +**示例:为应用程序设置缓存键前缀** + +```csharp +Configure(options => +{ + options.KeyPrefix = "MyApp1"; +}); +``` +> 在[模块类](Module-Development-Basics.md)的`ConfigureServices`方法中添加代码. + +#### 可用选项 + +* `HideErrors` (`bool`, 默认: `true`): 启用/禁用隐藏从缓存服务器写入/读取值时的错误. +* `KeyPrefix` (`string`, 默认: `null`): 如果你的缓存服务器由多个应用程序共同使用, 则可以为应用程序的缓存键设置一个前缀. 在这种情况下, 不同的应用程序不能覆盖彼此的缓存内容. +* `GlobalCacheEntryOptions` (`DistributedCacheEntryOptions`): 用于设置保存缓内容却没有指定选项时, 默认的分布式缓存选项 (例如 `AbsoluteExpiration` 和 `SlidingExpiration`). `SlidingExpiration`的默认值设置为20分钟. + +## 错误处理 + +当为你的对象设计缓存时, 通常会首先尝试从缓存中获取值. 如果在缓存中找不到该值, 则从**来源**查询对象. 它可能在**数据库**中, 或者可能需要通过HTTP调用远程服务器. + +在大多数情况下, 你希望**容忍缓存错误**; 如果缓存服务器出现错误, 也不希望取消该操作. 相反, 你可以默默地隐藏(并记录)错误并**从来源查询**. 这就是ABP框架默认的功能. + +ABP的分布式缓存 [异常处理](Exception-Handling.md), 默认记录并隐藏错误. 有一个全局修改该功能的选项(参见下面的选项内容). + +所有的`IDistributedCache` (和 `IDistributedCache`)方法都有一个可选的参数`hideErrors`, 默认值为`null`. 如果此参数设置为`null`, 则全局生效, 否则你可以选择单个方法调用时隐藏或者抛出异常. + ## 批量操作 ABP的分布式缓存接口定义了以下批量操作方法,当你需要在一个方法中调用多次缓存操作时,这些方法可以提高性能 -* `SetManyAsync` 和 `SetMany` 方法可以用来设置多个值. +* `SetManyAsync` 和 `SetMany` 方法可以用来向缓存中设置多个值. * `GetManyAsync` 和 `GetMany` 方法可以用来从缓存中获取多个值. * `GetOrAddManyAsync` 和 `GetOrAddMany` 方法可以用来从缓存中获取并添加缺少的值. * `RefreshManyAsync` 和 `RefreshMany` 方法可以来用重置多个值的滚动过期时间. -* `RemoveManyAsync` 和 `RemoveMany` 方法呆以用来删除多个值. +* `RemoveManyAsync` 和 `RemoveMany` 方法可以用来从缓存中删除多个值. > 这些不是标准的ASP.NET Core缓存方法, 所以某些提供程序可能不支持. [ABP Redis集成包](Redis-Cache.md)实现了它们. 如果提供程序不支持,会回退到 `SetAsync` 和 `GetAsync` ... 方法(循环调用). -### DistributedCacheOptions +## 高级主题 + +### 工作单元级别的缓存 + +分布式缓存服务提供了一个有趣的功能. 假设你已经更新了数据库中某本书的价格, 然后将新价格设置到缓存中, 以便以后使用缓存的值. 如果设置缓存后出现异常, 并且更新图书价格的**事务被回滚了**, 该怎么办?在这种情况下, 缓存值是错误的. + +`IDistributedCache<..>`方法提供一个可选参数, `considerOuw`, 默认为`false`. 如果将其设置为`true`, 则你对缓存所做的更改不会应用于真正的缓存存储, 而是与当前的[工作单元](Unit-Of-Work.md)关联. 你将获得在同一工作单元中设置的缓存值, 但**仅当前工作单元成功时**更改才会生效. + +### IDistributedCacheSerializer + +`IDistributedCacheSerializer`服务用于序列化和反序列化缓存内容. 默认实现是`Utf8JsonDistributedCacheSerializer`类, 它使用`IJsonSerializer`服务将对象转换为[JSON](Json-Serialization.md), 反之亦然. 然后, 它使用UTC8编码将JSON字符串转换为分布式缓存接受的字节数组. + +如果你想实现自己的序列化逻辑, 可以自己实现并[替换](Dependency-Injection.md) 此服务. + +### IDistributedCacheKeyNormalizer + +默认情况下, `IDistributedCacheKeyNormalizer`是由`DistributedCacheKeyNormalizer`类实现的. 它将缓存名称、应用程序缓存前缀和当前租户id添加到缓存键中. 如果需要更高级的键规范化, 可以自己实现并[替换](Dependency-Injection.md)此服务. + +## 另请参阅 -TODO \ No newline at end of file +* [Redis 缓存](Redis-Cache.md) From 2a62c18ee685a6f2b6ea35f9622ff7a4a42e7c98 Mon Sep 17 00:00:00 2001 From: "gerardo.greco@porini.it" Date: Thu, 17 Mar 2022 16:23:30 +0100 Subject: [PATCH 026/143] pass option from appsettings to servicebusadminclient --- .../Volo/Abp/AzureServiceBus/ConnectionPool.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.AzureServiceBus/Volo/Abp/AzureServiceBus/ConnectionPool.cs b/framework/src/Volo.Abp.AzureServiceBus/Volo/Abp/AzureServiceBus/ConnectionPool.cs index 5f9d9eacfd..d616e1264f 100644 --- a/framework/src/Volo.Abp.AzureServiceBus/Volo/Abp/AzureServiceBus/ConnectionPool.cs +++ b/framework/src/Volo.Abp.AzureServiceBus/Volo/Abp/AzureServiceBus/ConnectionPool.cs @@ -47,7 +47,7 @@ public class ConnectionPool : IConnectionPool, ISingletonDependency connectionName, new Lazy(() => { var config = _options.Connections.GetOrDefault(connectionName); - return new ServiceBusAdministrationClient(config.ConnectionString); + return new ServiceBusAdministrationClient(config.ConnectionString, config.Admin); }) ).Value; } From dfb6025654a2112d3a2088cc393900cf2235a110 Mon Sep 17 00:00:00 2001 From: gaoabout Date: Fri, 18 Mar 2022 16:55:37 +0800 Subject: [PATCH 027/143] docs: fix typo in Caching.md --- docs/en/Caching.md | 2 +- docs/zh-Hans/Caching.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/en/Caching.md b/docs/en/Caching.md index 13129bbc95..074d6d951f 100644 --- a/docs/en/Caching.md +++ b/docs/en/Caching.md @@ -258,7 +258,7 @@ ABP's distributed cache interfaces provide methods to perform batch methods thos Distributed cache service provides an interesting feature. Assume that you've updated the price of a book in the database, then set the new price to the cache, so you can use the cached value later. What if you have an exception after setting the cache and you **rollback the transaction** that updates the price of the book? In this case, cache value will be incorrect. -`IDistributedCache<..>` methods gets an optional parameter, named `considerOuw`, which is `false` by default. If you set it to `true`, then the changes you made for the cache are not actually applied to the real cache store, but associated with the current [unit of work](Unit-Of-Work.md). You get the value you set in the same unit of work, but the changes are applied **only if the current unit of work succeed**. +`IDistributedCache<..>` methods gets an optional parameter, named `considerUow`, which is `false` by default. If you set it to `true`, then the changes you made for the cache are not actually applied to the real cache store, but associated with the current [unit of work](Unit-Of-Work.md). You get the value you set in the same unit of work, but the changes are applied **only if the current unit of work succeed**. ### IDistributedCacheSerializer diff --git a/docs/zh-Hans/Caching.md b/docs/zh-Hans/Caching.md index 491e60eb29..d8f064a24e 100644 --- a/docs/zh-Hans/Caching.md +++ b/docs/zh-Hans/Caching.md @@ -257,7 +257,7 @@ ABP的分布式缓存接口定义了以下批量操作方法,当你需要在一 分布式缓存服务提供了一个有趣的功能. 假设你已经更新了数据库中某本书的价格, 然后将新价格设置到缓存中, 以便以后使用缓存的值. 如果设置缓存后出现异常, 并且更新图书价格的**事务被回滚了**, 该怎么办?在这种情况下, 缓存值是错误的. -`IDistributedCache<..>`方法提供一个可选参数, `considerOuw`, 默认为`false`. 如果将其设置为`true`, 则你对缓存所做的更改不会应用于真正的缓存存储, 而是与当前的[工作单元](Unit-Of-Work.md)关联. 你将获得在同一工作单元中设置的缓存值, 但**仅当前工作单元成功时**更改才会生效. +`IDistributedCache<..>`方法提供一个可选参数, `considerUow`, 默认为`false`. 如果将其设置为`true`, 则你对缓存所做的更改不会应用于真正的缓存存储, 而是与当前的[工作单元](Unit-Of-Work.md)关联. 你将获得在同一工作单元中设置的缓存值, 但**仅当前工作单元成功时**更改才会生效. ### IDistributedCacheSerializer From 13d6864843ce9ee9bfb12035c11110a2f8d74c4f Mon Sep 17 00:00:00 2001 From: Bishnu Rawal Date: Fri, 18 Mar 2022 17:20:49 +0545 Subject: [PATCH 028/143] Update Background-Workers-Hangfire.md --- docs/en/Background-Workers-Hangfire.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/en/Background-Workers-Hangfire.md b/docs/en/Background-Workers-Hangfire.md index 2ea7fd633e..4cbaf8cc24 100644 --- a/docs/en/Background-Workers-Hangfire.md +++ b/docs/en/Background-Workers-Hangfire.md @@ -1,6 +1,6 @@ # Hangfire Background Worker Manager -[Hangfire](https://https://www.hangfire.io/) is an advanced background jobs and worker manager. You can integrate Hangfire with the ABP Framework to use it instead of the [default background worker manager](Background-Workers.md). +[Hangfire](https://www.hangfire.io/) is an advanced background jobs and worker manager. You can integrate Hangfire with the ABP Framework to use it instead of the [default background worker manager](Background-Workers.md). The major advantage is that you can use the same server farm to manage your Background Jobs and Workers, as well as leverage the advanced scheduling that is available from Hangfire for [Recurring Jobs](https://docs.hangfire.io/en/latest/background-methods/performing-recurrent-tasks.html?highlight=recurring), aka Background Workers. @@ -126,4 +126,4 @@ context.ServiceProvider So, it resolves the given background worker and adds to the `IBackgroundWorkerManager`. -While we generally add workers in OnApplicationInitialization, there are no restrictions on that. You can inject IBackgroundWorkerManager anywhere and add workers at runtime. Background worker manager will stop and release all the registered workers when your application is being shut down. \ No newline at end of file +While we generally add workers in OnApplicationInitialization, there are no restrictions on that. You can inject IBackgroundWorkerManager anywhere and add workers at runtime. Background worker manager will stop and release all the registered workers when your application is being shut down. From 86d89ebba52b99927f37ef9a592ed01d2b80d8e5 Mon Sep 17 00:00:00 2001 From: Necati Meral Date: Sat, 19 Mar 2022 20:44:44 +0100 Subject: [PATCH 029/143] Allow the exchange type to be specified --- .../RabbitMq/AbpRabbitMqEventBusOptions.cs | 20 ++++++++++++++++++- .../RabbitMq/RabbitMqDistributedEventBus.cs | 2 +- .../Volo/Abp/RabbitMQ/RabbitMqConsts.cs | 11 ++++++++++ 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/AbpRabbitMqEventBusOptions.cs b/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/AbpRabbitMqEventBusOptions.cs index ad09223f05..dd451d2127 100644 --- a/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/AbpRabbitMqEventBusOptions.cs +++ b/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/AbpRabbitMqEventBusOptions.cs @@ -1,10 +1,28 @@ -namespace Volo.Abp.EventBus.RabbitMq; +using Volo.Abp.RabbitMQ; + +namespace Volo.Abp.EventBus.RabbitMq; public class AbpRabbitMqEventBusOptions { + public const string DefaultExchangeType = RabbitMqConsts.ExchangeTypes.Direct; + public string ConnectionName { get; set; } public string ClientName { get; set; } public string ExchangeName { get; set; } + + public string ExchangeType { get; set; } + + public AbpRabbitMqEventBusOptions() + { + ExchangeType = "direct"; + } + + public string GetExchangeTypeOrDefault() + { + return string.IsNullOrEmpty(ExchangeType) + ? DefaultExchangeType + : ExchangeType; + } } diff --git a/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs b/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs index c57d9e9417..38070ae7ce 100644 --- a/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs +++ b/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs @@ -69,7 +69,7 @@ public class RabbitMqDistributedEventBus : DistributedEventBusBase, ISingletonDe Consumer = MessageConsumerFactory.Create( new ExchangeDeclareConfiguration( AbpRabbitMqEventBusOptions.ExchangeName, - type: "direct", + type: AbpRabbitMqEventBusOptions.ExchangeType, durable: true ), new QueueDeclareConfiguration( diff --git a/framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/RabbitMqConsts.cs b/framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/RabbitMqConsts.cs index 19b8ddb573..996e88959b 100644 --- a/framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/RabbitMqConsts.cs +++ b/framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/RabbitMqConsts.cs @@ -8,4 +8,15 @@ public static class RabbitMqConsts public const int Persistent = 2; } + + public static class ExchangeTypes + { + public const string Direct = "direct"; + + public const string Topic = "topic"; + + public const string Fanout = "fanout"; + + public const string Headers = "headers"; + } } From 5cfd2fa012817a521b12987ff68eec5ad5a6c5a6 Mon Sep 17 00:00:00 2001 From: Necati Meral Date: Sat, 19 Mar 2022 20:45:53 +0100 Subject: [PATCH 030/143] fix hardcoded reference --- .../Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs b/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs index 38070ae7ce..33663086c4 100644 --- a/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs +++ b/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs @@ -244,7 +244,7 @@ public class RabbitMqDistributedEventBus : DistributedEventBusBase, ISingletonDe { channel.ExchangeDeclare( AbpRabbitMqEventBusOptions.ExchangeName, - "direct", + AbpRabbitMqEventBusOptions.ExchangeType, durable: true ); From ff9ebdbcabbf0e3806644378a39d127bbccb882f Mon Sep 17 00:00:00 2001 From: Necati Meral Date: Sat, 19 Mar 2022 20:46:56 +0100 Subject: [PATCH 031/143] Update usage of default value --- .../Volo/Abp/EventBus/RabbitMq/AbpRabbitMqEventBusOptions.cs | 5 ----- .../Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs | 4 ++-- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/AbpRabbitMqEventBusOptions.cs b/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/AbpRabbitMqEventBusOptions.cs index dd451d2127..addbc49171 100644 --- a/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/AbpRabbitMqEventBusOptions.cs +++ b/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/AbpRabbitMqEventBusOptions.cs @@ -14,11 +14,6 @@ public class AbpRabbitMqEventBusOptions public string ExchangeType { get; set; } - public AbpRabbitMqEventBusOptions() - { - ExchangeType = "direct"; - } - public string GetExchangeTypeOrDefault() { return string.IsNullOrEmpty(ExchangeType) diff --git a/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs b/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs index 33663086c4..a2932de52e 100644 --- a/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs +++ b/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs @@ -69,7 +69,7 @@ public class RabbitMqDistributedEventBus : DistributedEventBusBase, ISingletonDe Consumer = MessageConsumerFactory.Create( new ExchangeDeclareConfiguration( AbpRabbitMqEventBusOptions.ExchangeName, - type: AbpRabbitMqEventBusOptions.ExchangeType, + type: AbpRabbitMqEventBusOptions.GetExchangeTypeOrDefault(), durable: true ), new QueueDeclareConfiguration( @@ -244,7 +244,7 @@ public class RabbitMqDistributedEventBus : DistributedEventBusBase, ISingletonDe { channel.ExchangeDeclare( AbpRabbitMqEventBusOptions.ExchangeName, - AbpRabbitMqEventBusOptions.ExchangeType, + AbpRabbitMqEventBusOptions.GetExchangeTypeOrDefault(), durable: true ); From 9082870eec79dfb271561e3ab6721f61e32f003a Mon Sep 17 00:00:00 2001 From: Musa Demir Date: Mon, 21 Mar 2022 00:01:25 +0300 Subject: [PATCH 032/143] add filter by user --- .../Volo/CmsKit/Admin/Blogs/BlogPostGetListInput.cs | 2 ++ .../CmsKit/Admin/Blogs/BlogPostAdminAppService.cs | 3 ++- .../Volo/CmsKit/Blogs/IBlogPostRepository.cs | 3 ++- .../Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs | 4 +++- .../CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs | 4 +++- .../Volo/CmsKit/Public/Blogs/BlogPostGetListInput.cs | 11 +++++++++++ .../CmsKit/Public/Blogs/IBlogPostPublicAppService.cs | 2 +- .../CmsKit/Public/Blogs/BlogPostPublicAppService.cs | 7 ++++--- .../CmsKit/Public/Blogs/BlogPostPublicController.cs | 5 ++--- .../Pages/Public/CmsKit/Blogs/Index.cshtml.cs | 3 +-- 10 files changed, 31 insertions(+), 13 deletions(-) create mode 100644 modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/BlogPostGetListInput.cs diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogPostGetListInput.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogPostGetListInput.cs index e8fa497e15..3b2d4c2c93 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogPostGetListInput.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogPostGetListInput.cs @@ -8,4 +8,6 @@ public class BlogPostGetListInput : PagedAndSortedResultRequestDto public string Filter { get; set; } public Guid? BlogId { get; set; } + + public Guid? AuthorId { get; set; } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs index 83899199f0..fbea1d81c7 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs @@ -89,7 +89,8 @@ public class BlogPostAdminAppService : CmsKitAppServiceBase, IBlogPostAdminAppSe { var blogs = (await BlogRepository.GetListAsync()).ToDictionary(x => x.Id); - var blogPosts = await BlogPostRepository.GetListAsync(input.Filter, input.BlogId, input.MaxResultCount, input.SkipCount, input.Sorting); + var blogPosts = await BlogPostRepository.GetListAsync(input.Filter, input.BlogId, input.AuthorId, + input.MaxResultCount, input.SkipCount, input.Sorting); var count = await BlogPostRepository.GetCountAsync(input.Filter); diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostRepository.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostRepository.cs index 8b1e86f8b7..5b04ffee07 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostRepository.cs @@ -16,6 +16,7 @@ public interface IBlogPostRepository : IBasicRepository Task> GetListAsync( string filter = null, Guid? blogId = null, + Guid? authorId = null, int maxResultCount = int.MaxValue, int skipCount = 0, string sorting = null, @@ -24,4 +25,4 @@ public interface IBlogPostRepository : IBasicRepository Task SlugExistsAsync(Guid blogId, string slug, CancellationToken cancellationToken = default); Task GetBySlugAsync(Guid blogId, string slug, CancellationToken cancellationToken = default); -} +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs index f0a6aa61ee..64fe2e2e02 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs @@ -54,6 +54,7 @@ public class EfCoreBlogPostRepository : EfCoreRepository> GetListAsync( string filter = null, Guid? blogId = null, + Guid? authorId = null, int maxResultCount = int.MaxValue, int skipCount = 0, string sorting = null, @@ -66,7 +67,8 @@ public class EfCoreBlogPostRepository : EfCoreRepository x.BlogId == blogId) - .WhereIf(!string.IsNullOrWhiteSpace(filter), x => x.Title.Contains(filter) || x.Slug.Contains(filter)); + .WhereIf(!string.IsNullOrWhiteSpace(filter), x => x.Title.Contains(filter) || x.Slug.Contains(filter)) + .WhereIf(authorId.HasValue, x => x.AuthorId == authorId); queryable = queryable.OrderBy(sorting.IsNullOrEmpty() ? $"{nameof(BlogPost.CreationTime)} desc" : sorting); diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs index f52dc3add4..adf394b90f 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs @@ -55,6 +55,7 @@ public class MongoBlogPostRepository : MongoDbRepository> GetListAsync( string filter = null, Guid? blogId = null, + Guid? authorId = null, int maxResultCount = int.MaxValue, int skipCount = 0, string sorting = null, @@ -68,7 +69,8 @@ public class MongoBlogPostRepository : MongoDbRepository x.BlogId == blogId) - .WhereIf(!string.IsNullOrWhiteSpace(filter), x => x.Title.Contains(filter) || x.Slug.Contains(filter)); + .WhereIf(!string.IsNullOrWhiteSpace(filter), x => x.Title.Contains(filter) || x.Slug.Contains(filter)) + .WhereIf(authorId.HasValue, x => x.AuthorId == authorId); queryable = queryable.OrderBy(sorting.IsNullOrEmpty() ? $"{nameof(BlogPost.CreationTime)} desc" : sorting); diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/BlogPostGetListInput.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/BlogPostGetListInput.cs new file mode 100644 index 0000000000..82388fdb42 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/BlogPostGetListInput.cs @@ -0,0 +1,11 @@ +using System; +using Volo.Abp.Application.Dtos; + +namespace Volo.CmsKit.Public.Blogs; + +public class BlogPostGetListInput : PagedAndSortedResultRequestDto +{ + public string BlogSlug { get; set; } + + public Guid? AuthorId { get; set; } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs index f561a289cf..89103979ba 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs @@ -7,7 +7,7 @@ namespace Volo.CmsKit.Public.Blogs; public interface IBlogPostPublicAppService : IApplicationService { - Task> GetListAsync([NotNull] string blogSlug, PagedAndSortedResultRequestDto input); + Task> GetListAsync(BlogPostGetListInput input); Task GetAsync([NotNull] string blogSlug, [NotNull] string blogPostSlug); } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs index 4160639815..39e5e75128 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs @@ -32,11 +32,12 @@ public class BlogPostPublicAppService : CmsKitPublicAppServiceBase, IBlogPostPub return ObjectMapper.Map(blogPost); } - public virtual async Task> GetListAsync([NotNull] string blogSlug, PagedAndSortedResultRequestDto input) + public virtual async Task> GetListAsync(BlogPostGetListInput input) { - var blog = await BlogRepository.GetBySlugAsync(blogSlug); + var blog = await BlogRepository.GetBySlugAsync(input.BlogSlug); - var blogPosts = await BlogPostRepository.GetListAsync(null, blog.Id, input.MaxResultCount, input.SkipCount, input.Sorting); + var blogPosts = await BlogPostRepository.GetListAsync(null, blog.Id, input.AuthorId, input.MaxResultCount, + input.SkipCount, input.Sorting); return new PagedResultDto( await BlogPostRepository.GetCountAsync(blogId: blog.Id), diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs index bdd0b2cf32..b89939627f 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs @@ -30,9 +30,8 @@ public class BlogPostPublicController : CmsKitPublicControllerBase, IBlogPostPub } [HttpGet] - [Route("{blogSlug}")] - public virtual Task> GetListAsync(string blogSlug, PagedAndSortedResultRequestDto input) + public virtual Task> GetListAsync(BlogPostGetListInput input) { - return BlogPostPublicAppService.GetListAsync(blogSlug, input); + return BlogPostPublicAppService.GetListAsync(input); } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml.cs index 30d4c6bcf2..b93a5d5f40 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml.cs @@ -34,8 +34,7 @@ public class IndexModel : CmsKitPublicPageModelBase public async Task OnGetAsync() { Blogs = await BlogPostPublicAppService.GetListAsync( - BlogSlug, - new PagedAndSortedResultRequestDto + new BlogPostGetListInput { SkipCount = PageSize * (CurrentPage - 1), MaxResultCount = PageSize From 02ab0c64520b997a77db759f993fa82adf8fd20c Mon Sep 17 00:00:00 2001 From: maliming Date: Mon, 21 Mar 2022 14:20:47 +0800 Subject: [PATCH 033/143] Upgrade Minio to 4.0.1. Resolve #11995 --- .../Volo.Abp.BlobStoring.Minio.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/framework/src/Volo.Abp.BlobStoring.Minio/Volo.Abp.BlobStoring.Minio.csproj b/framework/src/Volo.Abp.BlobStoring.Minio/Volo.Abp.BlobStoring.Minio.csproj index 822189c677..a78b131962 100644 --- a/framework/src/Volo.Abp.BlobStoring.Minio/Volo.Abp.BlobStoring.Minio.csproj +++ b/framework/src/Volo.Abp.BlobStoring.Minio/Volo.Abp.BlobStoring.Minio.csproj @@ -3,7 +3,7 @@ - netstandard2.0 + net6.0 Volo.Abp.BlobStoring.Minio Volo.Abp.BlobStoring.Minio $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; @@ -15,7 +15,7 @@ - + From 4dc23548a58795d8fd7274a31f7ffe51fb47a0bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=97=A8=E6=AC=A3?= Date: Mon, 21 Mar 2022 15:45:53 +0800 Subject: [PATCH 034/143] Update Domain-Services.md --- docs/zh-Hans/Domain-Services.md | 129 +++++++++++++++++++++++++++++++- 1 file changed, 127 insertions(+), 2 deletions(-) diff --git a/docs/zh-Hans/Domain-Services.md b/docs/zh-Hans/Domain-Services.md index 9c9bb7dfd2..692d16ab2e 100644 --- a/docs/zh-Hans/Domain-Services.md +++ b/docs/zh-Hans/Domain-Services.md @@ -1,3 +1,128 @@ -# ABP Documentation +# 领域服务 -待添加 +## 介绍 + +在 [领域驱动设计](Domain-Driven-Design.md) (DDD) 解决方案中,核心业务逻辑通常在聚合 ([实体](Entities.md)) 和领域服务中实现. 在以下情况下特别需要创建域服务: + +* 您实现了依赖于某些服务(如存储库或其他外部服务)的核心域逻辑. +* 您需要实现的逻辑与多个聚合/实体相关,因此它不适合任何聚合. + +## ABP 领域服务基础设施 + +域服务是简单的无状态类.虽然您不必从任何服务或接口派生,但 ABP 框架提供了一些有用的基类和约定. + +### DomainService 和 IDomainService + +从基类派生域服务 `DomainService` 或直接实现 `IDomainService` 接口. + +**示例: 创建从 `DomainService` 基类派生的领域服务.** + +````csharp +using Volo.Abp.Domain.Services; +namespace MyProject.Issues +{ + public class IssueManager : DomainService + { + + } +} +```` + +当你这样做时: + +* ABP 框架自动将类注册到具有瞬态生命周期的依赖注入系统. +* 您可以直接使用一些常用服务作为基础属性,而无需手动注入 (例如 [ILogger](Logging.md) and [IGuidGenerator](Guid-Generation.md)). + +> 建议使用 `Manager` 或 `Service` 后缀命名领域服务. 我们通常使用如上面示例中的 `Manager` 后缀. +**示例: 实现将问题分配给用户的领域逻辑** + +````csharp +public class IssueManager : DomainService +{ + private readonly IRepository _issueRepository; + public IssueManager(IRepository issueRepository) + { + _issueRepository = issueRepository; + } + + public async Task AssignAsync(Issue issue, AppUser user) + { + var currentIssueCount = await _issueRepository + .CountAsync(i => i.AssignedUserId == user.Id); + + //Implementing a core business validation + if (currentIssueCount >= 3) + { + throw new IssueAssignmentException(user.UserName); + } + issue.AssignedUserId = user.Id; + } +} +```` + +问题是定义如下所示的 [聚合根](Entities.md): + +````csharp +public class Issue : AggregateRoot +{ + public Guid? AssignedUserId { get; internal set; } + + //... +} +```` + +* 使用 `internal` 的 set 确保外层调用者不能直接在调用 set ,并强制始终使用 `IssueManager` 为 `User` 分配 `Issue`. + +### 使用领域服务 + +域服务通常用于 [应用程序服务](Application-Services.md). + +**示例: 使用 `IssueManager` 将问题分配给用户** + +````csharp +using System; +using System.Threading.Tasks; +using MyProject.Users; +using Volo.Abp.Application.Services; +using Volo.Abp.Domain.Repositories; +namespace MyProject.Issues +{ + public class IssueAppService : ApplicationService, IIssueAppService + { + private readonly IssueManager _issueManager; + private readonly IRepository _userRepository; + private readonly IRepository _issueRepository; + public IssueAppService( + IssueManager issueManager, + IRepository userRepository, + IRepository issueRepository) + { + _issueManager = issueManager; + _userRepository = userRepository; + _issueRepository = issueRepository; + } + public async Task AssignAsync(Guid id, Guid userId) + { + var issue = await _issueRepository.GetAsync(id); + var user = await _userRepository.GetAsync(userId); + await _issueManager.AssignAsync(issue, user); + await _issueRepository.UpdateAsync(issue); + } + } +} +```` + +由于 `IssueAppService` 在应用层, 它不能直接将问题分配给用户。因此,它使用 `IssueManager`. + +## 应用程序服务与领域服务 + +虽然应用服务和领域服务都实现了业务规则,但存在根本的逻辑和形式差异; +虽然 [应用服务](Application-Services.md) 和领域服务都实现了业务规则,但存在根本的逻辑和形式差异: + +* 应用程序服务实现应用程序的 **用例** (典型 Web 应用程序中的用户交互), 而域服务实现 **核心的、用例独立的域逻辑**. +* 应用程序服务获取/返回 [数据传输对象](Data-Transfer-Objects.md), 域服务方法通常获取和返回 **域对象** ([实体](Entities.md), [值对象](Value-Objects.md)). +* 领域服务通常由应用程序服务或其他领域服务使用,而应用程序服务由表示层或客户端应用程序使用. + +## 生命周期 + +领域服务的生命周期是 [瞬态](https://docs.abp.io/en/abp/latest/Dependency-Injection) 的,它们会自动注册到依赖注入服务. From efd92737b22f8e627b7a66d46c85322c5c43ae29 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Mon, 21 Mar 2022 16:38:23 +0800 Subject: [PATCH 035/143] Update Domain-Services.md --- docs/zh-Hans/Domain-Services.md | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/docs/zh-Hans/Domain-Services.md b/docs/zh-Hans/Domain-Services.md index 692d16ab2e..a617aea645 100644 --- a/docs/zh-Hans/Domain-Services.md +++ b/docs/zh-Hans/Domain-Services.md @@ -2,18 +2,18 @@ ## 介绍 -在 [领域驱动设计](Domain-Driven-Design.md) (DDD) 解决方案中,核心业务逻辑通常在聚合 ([实体](Entities.md)) 和领域服务中实现. 在以下情况下特别需要创建域服务: +在 [领域驱动设计](Domain-Driven-Design.md) (DDD) 解决方案中,核心业务逻辑通常在聚合 ([实体](Entities.md)) 和领域服务中实现. 在以下情况下特别需要创建领域服务 -* 您实现了依赖于某些服务(如存储库或其他外部服务)的核心域逻辑. -* 您需要实现的逻辑与多个聚合/实体相关,因此它不适合任何聚合. +* 你实现了依赖于某些服务(如存储库或其他外部服务)的核心域逻辑. +* 你需要实现的逻辑与多个聚合/实体相关,因此它不适合任何聚合. ## ABP 领域服务基础设施 -域服务是简单的无状态类.虽然您不必从任何服务或接口派生,但 ABP 框架提供了一些有用的基类和约定. +领域服务是简单的无状态类. 虽然你不必从任何服务或接口派生,但 ABP 框架提供了一些有用的基类和约定. ### DomainService 和 IDomainService -从基类派生域服务 `DomainService` 或直接实现 `IDomainService` 接口. +从 `DomainService` 基类派生领域服务或直接实现 `IDomainService` 接口. **示例: 创建从 `DomainService` 基类派生的领域服务.** @@ -30,8 +30,8 @@ namespace MyProject.Issues 当你这样做时: -* ABP 框架自动将类注册到具有瞬态生命周期的依赖注入系统. -* 您可以直接使用一些常用服务作为基础属性,而无需手动注入 (例如 [ILogger](Logging.md) and [IGuidGenerator](Guid-Generation.md)). +* ABP 框架自动将类注册为瞬态生命周期到依赖注入系统. +* 你可以直接使用一些常用服务作为基础属性,而无需手动注入 (例如 [ILogger](Logging.md) and [IGuidGenerator](Guid-Generation.md)). > 建议使用 `Manager` 或 `Service` 后缀命名领域服务. 我们通常使用如上面示例中的 `Manager` 后缀. **示例: 实现将问题分配给用户的领域逻辑** @@ -75,7 +75,7 @@ public class Issue : AggregateRoot ### 使用领域服务 -域服务通常用于 [应用程序服务](Application-Services.md). +领域服务通常用于 [应用程序服务](Application-Services.md). **示例: 使用 `IssueManager` 将问题分配给用户** @@ -112,16 +112,16 @@ namespace MyProject.Issues } ```` -由于 `IssueAppService` 在应用层, 它不能直接将问题分配给用户。因此,它使用 `IssueManager`. +由于 `IssueAppService` 在应用层, 它不能直接将问题分配给用户.因此,它使用 `IssueManager`. ## 应用程序服务与领域服务 -虽然应用服务和领域服务都实现了业务规则,但存在根本的逻辑和形式差异; -虽然 [应用服务](Application-Services.md) 和领域服务都实现了业务规则,但存在根本的逻辑和形式差异: +虽然应用服务和领域服务都实现了业务规则,但存在根本的逻辑和形式差异; +虽然 [应用服务](Application-Services.md) 和领域服务都实现了业务规则,但存在根本的逻辑和形式差异: -* 应用程序服务实现应用程序的 **用例** (典型 Web 应用程序中的用户交互), 而域服务实现 **核心的、用例独立的域逻辑**. -* 应用程序服务获取/返回 [数据传输对象](Data-Transfer-Objects.md), 域服务方法通常获取和返回 **域对象** ([实体](Entities.md), [值对象](Value-Objects.md)). -* 领域服务通常由应用程序服务或其他领域服务使用,而应用程序服务由表示层或客户端应用程序使用. +* 应用程序服务实现应用程序的 **用例** (典型 Web 应用程序中的用户交互), 而领域服务实现 **核心的、用例独立的领域逻辑**. +* 应用程序服务获取/返回 [数据传输对象](Data-Transfer-Objects.md), 领域服务方法通常获取和返回 **领域对象** ([实体](Entities.md), [值对象](Value-Objects.md)). +* 领域服务通常由应用程序服务或其他领域服务使用,而应用程序服务由表示层或客户端应用程序使用. ## 生命周期 From 9b0b1a8e6d61135f2024789db503de9dd1cfc1b0 Mon Sep 17 00:00:00 2001 From: maliming Date: Tue, 22 Mar 2022 15:52:08 +0800 Subject: [PATCH 036/143] Provide Global Features in application configuration. Resolve #12042 --- .../ApplicationConfigurationDto.cs | 2 ++ ...pplicationGlobalFeatureConfigurationDto.cs | 18 +++++++++++++++++ .../AbpApplicationConfigurationAppService.cs | 20 +++++++++++++++++++ 3 files changed, 40 insertions(+) create mode 100644 framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/ApplicationGlobalFeatureConfigurationDto.cs diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/ApplicationConfigurationDto.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/ApplicationConfigurationDto.cs index 9b6a66992f..eb29c5c7cb 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/ApplicationConfigurationDto.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/ApplicationConfigurationDto.cs @@ -17,6 +17,8 @@ public class ApplicationConfigurationDto public ApplicationFeatureConfigurationDto Features { get; set; } + public ApplicationGlobalFeatureConfigurationDto GlobalFeatures { get; set; } + public MultiTenancyInfoDto MultiTenancy { get; set; } public CurrentTenantDto CurrentTenant { get; set; } diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/ApplicationGlobalFeatureConfigurationDto.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/ApplicationGlobalFeatureConfigurationDto.cs new file mode 100644 index 0000000000..e911cd911d --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/ApplicationGlobalFeatureConfigurationDto.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; + +namespace Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations; + +[Serializable] +public class ApplicationGlobalFeatureConfigurationDto +{ + public HashSet EnabledFeatures { get; set; } + + public Dictionary> ModuleEnabledFeatures { get; set; } + + public ApplicationGlobalFeatureConfigurationDto() + { + EnabledFeatures = new HashSet(); + ModuleEnabledFeatures = new Dictionary>(); + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationAppService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationAppService.cs index 6ecd9fc195..bfa2e6a285 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationAppService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationAppService.cs @@ -14,6 +14,7 @@ using Volo.Abp.AspNetCore.Mvc.MultiTenancy; using Volo.Abp.Authorization; using Volo.Abp.Authorization.Permissions; using Volo.Abp.Features; +using Volo.Abp.GlobalFeatures; using Volo.Abp.Localization; using Volo.Abp.MultiTenancy; using Volo.Abp.Settings; @@ -87,6 +88,7 @@ public class AbpApplicationConfigurationAppService : ApplicationService, IAbpApp { Auth = await GetAuthConfigAsync(), Features = await GetFeaturesConfigAsync(), + GlobalFeatures = await GetGlobalFeaturesConfigAsync(), Localization = await GetLocalizationConfigAsync(), CurrentUser = GetCurrentUser(), Setting = await GetSettingConfigAsync(), @@ -284,6 +286,24 @@ public class AbpApplicationConfigurationAppService : ApplicationService, IAbpApp return result; } + protected virtual Task GetGlobalFeaturesConfigAsync() + { + var result = new ApplicationGlobalFeatureConfigurationDto(); + + foreach (var enabledFeatureName in GlobalFeatureManager.Instance.GetEnabledFeatureNames()) + { + result.EnabledFeatures.AddIfNotContains(enabledFeatureName); + } + + foreach (var module in GlobalFeatureManager.Instance.Modules) + { + result.ModuleEnabledFeatures.AddIfNotContains(new KeyValuePair>(module.Key, module.Value.GetFeatures().Select(x => x.FeatureName).ToList())); + } + + return Task.FromResult(result); + } + + protected virtual async Task GetTimingConfigAsync() { var windowsTimeZoneId = await _settingProvider.GetOrNullAsync(TimingSettingNames.TimeZone); From 59fed8a9ddb2b7fb2f6afb87aac04a740c3f9f69 Mon Sep 17 00:00:00 2001 From: Berkan Sasmaz Date: Tue, 22 Mar 2022 15:51:28 +0300 Subject: [PATCH 037/143] Update en.json --- .../Commercial/Localization/Resources/en.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json index 8fa96b5ee2..8aa62afbb4 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json @@ -495,7 +495,9 @@ "LicenseTypeNotCorrect": "The license type is not correct!", "Trainings": "Trainings", "ChoseTrainingPlaceholder": "Chose the training...", - "ContactUsToGetQuote": "Contact us to get a quote", + "DoYouNeedTrainings": "Do you need one of these trainings?", + "DoYouNeedTraining": "Do you need {0} training?", + "GetInTouchUs": "Get in touch with us", "ForMoreInformationClickHere": "For more information, click here.", "IsGetOnboardingTraining": "Would you like to get onboarding & web application development training?", "OnboardingWebApplicationDevelopmentTrainingMessage": "To schedule your training calendar, please contact {0} after creating the organization", From cf226dca5297bb6f89891c5aeead11c6336dee32 Mon Sep 17 00:00:00 2001 From: Musa Demir Date: Tue, 22 Mar 2022 16:03:56 +0300 Subject: [PATCH 038/143] filter by user completed --- .../Volo/CmsKit/Blogs/IBlogPostRepository.cs | 3 ++ .../CmsKit/Blogs/EfCoreBlogPostRepository.cs | 6 +++ .../MongoDB/Blogs/MongoBlogPostRepository.cs | 6 +++ .../Public/Blogs/BlogPostGetListInput.cs | 2 - .../Public/Blogs/IBlogPostPublicAppService.cs | 8 +++- .../Public/Blogs/BlogPostPublicAppService.cs | 12 +++++- .../Public/Blogs/BlogPostPublicController.cs | 15 +++++-- .../Pages/Public/CmsKit/Blogs/BlogPost.cshtml | 4 +- .../Pages/Public/CmsKit/Blogs/Index.cshtml | 39 ++++++++++++++++--- .../Pages/Public/CmsKit/Blogs/Index.cshtml.cs | 13 ++++++- .../Pages/Public/CmsKit/Blogs/index.css | 4 ++ .../Pages/Public/CmsKit/Blogs/index.js | 18 +++++++++ 12 files changed, 113 insertions(+), 17 deletions(-) create mode 100644 modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/index.js diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostRepository.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostRepository.cs index 5b04ffee07..6e650113d3 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostRepository.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using Volo.Abp.Domain.Repositories; +using Volo.CmsKit.Users; namespace Volo.CmsKit.Blogs; @@ -25,4 +26,6 @@ public interface IBlogPostRepository : IBasicRepository Task SlugExistsAsync(Guid blogId, string slug, CancellationToken cancellationToken = default); Task GetBySlugAsync(Guid blogId, string slug, CancellationToken cancellationToken = default); + + Task> GetAuthorsHasBlogPosts(CancellationToken cancellationToken = default); } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs index 64fe2e2e02..cbd8fa3cfe 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs @@ -97,4 +97,10 @@ public class EfCoreBlogPostRepository : EfCoreRepository x.BlogId == blogId && x.Slug.ToLower() == slug, GetCancellationToken(cancellationToken)); } + + public async Task> GetAuthorsHasBlogPosts(CancellationToken cancellationToken = default) + { + return await (await GetDbContextAsync()).BlogPosts.Select(x => x.Author).Distinct() + .ToListAsync(GetCancellationToken(cancellationToken)); + } } diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs index adf394b90f..a2bae9e317 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs @@ -101,4 +101,10 @@ public class MongoBlogPostRepository : MongoDbRepository x.BlogId == blogId && x.Slug.ToLower() == slug, token); } + + public async Task> GetAuthorsHasBlogPosts(CancellationToken cancellationToken = default) + { + var queryable = (await GetQueryableAsync()).Select(x => x.Author).Distinct(); + return await AsyncExecuter.ToListAsync(queryable, GetCancellationToken(cancellationToken)); + } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/BlogPostGetListInput.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/BlogPostGetListInput.cs index 82388fdb42..b471171f3b 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/BlogPostGetListInput.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/BlogPostGetListInput.cs @@ -5,7 +5,5 @@ namespace Volo.CmsKit.Public.Blogs; public class BlogPostGetListInput : PagedAndSortedResultRequestDto { - public string BlogSlug { get; set; } - public Guid? AuthorId { get; set; } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs index 89103979ba..7f2b50c2a5 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs @@ -1,13 +1,17 @@ -using JetBrains.Annotations; +using System.Collections.Generic; +using JetBrains.Annotations; using System.Threading.Tasks; using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Services; +using Volo.CmsKit.Users; namespace Volo.CmsKit.Public.Blogs; public interface IBlogPostPublicAppService : IApplicationService { - Task> GetListAsync(BlogPostGetListInput input); + Task> GetListAsync(string blogSlug, BlogPostGetListInput input); Task GetAsync([NotNull] string blogSlug, [NotNull] string blogPostSlug); + + Task> GetAuthorsHasBlogPosts(); } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs index 39e5e75128..12543b0ed4 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs @@ -5,6 +5,7 @@ using Volo.Abp.Application.Dtos; using Volo.Abp.GlobalFeatures; using Volo.CmsKit.Blogs; using Volo.CmsKit.GlobalFeatures; +using Volo.CmsKit.Users; namespace Volo.CmsKit.Public.Blogs; @@ -14,6 +15,7 @@ public class BlogPostPublicAppService : CmsKitPublicAppServiceBase, IBlogPostPub protected IBlogRepository BlogRepository { get; } protected IBlogPostRepository BlogPostRepository { get; } + public BlogPostPublicAppService( IBlogRepository blogRepository, @@ -32,9 +34,9 @@ public class BlogPostPublicAppService : CmsKitPublicAppServiceBase, IBlogPostPub return ObjectMapper.Map(blogPost); } - public virtual async Task> GetListAsync(BlogPostGetListInput input) + public virtual async Task> GetListAsync(string blogSlug, BlogPostGetListInput input) { - var blog = await BlogRepository.GetBySlugAsync(input.BlogSlug); + var blog = await BlogRepository.GetBySlugAsync(blogSlug); var blogPosts = await BlogPostRepository.GetListAsync(null, blog.Id, input.AuthorId, input.MaxResultCount, input.SkipCount, input.Sorting); @@ -43,4 +45,10 @@ public class BlogPostPublicAppService : CmsKitPublicAppServiceBase, IBlogPostPub await BlogPostRepository.GetCountAsync(blogId: blog.Id), ObjectMapper.Map, List>(blogPosts)); } + + public virtual async Task> GetAuthorsHasBlogPosts() + { + var authors = await BlogPostRepository.GetAuthorsHasBlogPosts(); + return ObjectMapper.Map, List>(authors); + } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs index b89939627f..6db900c6ad 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs @@ -1,11 +1,13 @@ using Microsoft.AspNetCore.Mvc; using System; +using System.Collections.Generic; using System.Threading.Tasks; using Volo.Abp; using Volo.Abp.Application.Dtos; using Volo.Abp.Content; using Volo.Abp.GlobalFeatures; using Volo.CmsKit.GlobalFeatures; +using Volo.CmsKit.Users; namespace Volo.CmsKit.Public.Blogs; @@ -30,8 +32,15 @@ public class BlogPostPublicController : CmsKitPublicControllerBase, IBlogPostPub } [HttpGet] - public virtual Task> GetListAsync(BlogPostGetListInput input) + [Route("{blogSlug}")] + public virtual Task> GetListAsync(string blogSlug, BlogPostGetListInput input) { - return BlogPostPublicAppService.GetListAsync(input); + return BlogPostPublicAppService.GetListAsync(blogSlug, input); } -} + + [HttpGet] + public virtual Task> GetAuthorsHasBlogPosts() + { + return BlogPostPublicAppService.GetAuthorsHasBlogPosts(); + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/BlogPost.cshtml b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/BlogPost.cshtml index d8c1f428da..496ce7f8c5 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/BlogPost.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/BlogPost.cshtml @@ -41,7 +41,9 @@

@Model.BlogPost.Title

- @@@Model.BlogPost.Author?.UserName + + @@@Model.BlogPost.Author?.UserName + @Model.BlogPost.CreationTime

diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml index 32c5585f8e..dbc0d699ef 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml @@ -8,12 +8,40 @@ @model IndexModel @section styles{ - + } + +@section scripts { + + + +} + @{ const string dummyImageSource = "https://dummyimage.com/320x180/a3a3a3/fff.png"; } + + +
+ + +
+
+
@foreach (var blog in Model.Blogs.Items) { @@ -21,16 +49,16 @@ @if (blog.CoverImageMediaId != null) { - + } else { - + }
@blog.Title

- @@@blog.Author?.UserName + @@@blog.Author?.UserName @blog.CreationTime

@blog.ShortDescription

@@ -42,11 +70,10 @@
- }
- + \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml.cs index b93a5d5f40..92c4ff235c 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml.cs @@ -7,6 +7,7 @@ using System.Threading.Tasks; using Volo.Abp.Application.Dtos; using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Pagination; using Volo.CmsKit.Public.Blogs; +using Volo.CmsKit.Users; namespace Volo.CmsKit.Public.Web.Pages.Public.CmsKit.Blogs; @@ -19,10 +20,16 @@ public class IndexModel : CmsKitPublicPageModelBase [BindProperty(SupportsGet = true)] public int CurrentPage { get; set; } = 1; + + [BindProperty(SupportsGet = true)] + public Guid? AuthorId { get; set; } public PagedResultDto Blogs { get; private set; } public PagerModel PagerModel => new PagerModel(Blogs.TotalCount, Blogs.Items.Count, CurrentPage, PageSize, Request.Path.ToString()); + + [BindProperty(SupportsGet = true)] + public List Authors { get; set; } protected IBlogPostPublicAppService BlogPostPublicAppService { get; } @@ -34,10 +41,14 @@ public class IndexModel : CmsKitPublicPageModelBase public async Task OnGetAsync() { Blogs = await BlogPostPublicAppService.GetListAsync( + BlogSlug, new BlogPostGetListInput { SkipCount = PageSize * (CurrentPage - 1), - MaxResultCount = PageSize + MaxResultCount = PageSize, + AuthorId = AuthorId }); + + Authors = await BlogPostPublicAppService.GetAuthorsHasBlogPosts(); } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/index.css b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/index.css index 161bb41190..19137de2cb 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/index.css +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/index.css @@ -3,4 +3,8 @@ .popover { min-width: 276px; +} + +.author-name-span{ + cursor: pointer; } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/index.js b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/index.js new file mode 100644 index 0000000000..0d567d1650 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/index.js @@ -0,0 +1,18 @@ +$(function () { + var $selectAuthor = $('#AuthorSelect'); + var $authorNameSpan = $('.author-name-span'); + + $selectAuthor.on('change', function () { + var authorId = $selectAuthor.val(); + reloadPageWithQueryString({'authorId': authorId}); + }); + + $authorNameSpan.click(function () { + var authorId = $(this).data('author-id'); + reloadPageWithQueryString({'authorId': authorId}); + }); + + function reloadPageWithQueryString(param) { + window.location.href = window.location.pathname + "?" + $.param(param); + } +}); From 8fa4afa2601c3510f3406a000b5089fbee91aa7d Mon Sep 17 00:00:00 2001 From: Musa Demir Date: Tue, 22 Mar 2022 16:32:13 +0300 Subject: [PATCH 039/143] Update BlogPostPublicClientProxy.Generated.cs --- .../BlogPostPublicClientProxy.Generated.cs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/BlogPostPublicClientProxy.Generated.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/BlogPostPublicClientProxy.Generated.cs index c96e37f579..62a79cf6a5 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/BlogPostPublicClientProxy.Generated.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/BlogPostPublicClientProxy.Generated.cs @@ -1,5 +1,6 @@ // This file is automatically generated by ABP framework to use MVC Controllers from CSharp using System; +using System.Collections.Generic; using System.Threading.Tasks; using Volo.Abp.Application.Dtos; using Volo.Abp.Http.Client; @@ -7,6 +8,7 @@ using Volo.Abp.Http.Modeling; using Volo.Abp.DependencyInjection; using Volo.Abp.Http.Client.ClientProxying; using Volo.CmsKit.Public.Blogs; +using Volo.CmsKit.Users; // ReSharper disable once CheckNamespace namespace Volo.CmsKit.Public.Blogs.ClientProxies; @@ -23,13 +25,18 @@ public partial class BlogPostPublicClientProxy : ClientProxyBase> GetListAsync(string blogSlug, PagedAndSortedResultRequestDto input) + + public virtual async Task> GetListAsync(string blogSlug, BlogPostGetListInput input) { return await RequestAsync>(nameof(GetListAsync), new ClientProxyRequestTypeValue { { typeof(string), blogSlug }, - { typeof(PagedAndSortedResultRequestDto), input } + { typeof(BlogPostGetListInput), input } }); } + + public virtual async Task> GetAuthorsHasBlogPosts() + { + return await RequestAsync>(nameof(GetAuthorsHasBlogPosts)); + } } From c9f348db49fd5d8afe19a8789759cdb36468a8d7 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Wed, 23 Mar 2022 12:55:19 +0800 Subject: [PATCH 040/143] Always use GetCancellationToken --- .../CmsKit/Blogs/IBlogFeatureRepository.cs | 7 +- .../Volo/CmsKit/Tags/ITagRepository.cs | 8 +- .../Blogs/EfCoreBlogFeatureRepository.cs | 13 +- .../Volo/CmsKit/Tags/EfCoreTagRepository.cs | 8 +- .../Blogs/MongoBlogFeatureRepository.cs | 17 +- .../MongoDB/Blogs/MongoBlogPostRepository.cs | 18 +- .../MongoDB/Blogs/MongoBlogRepository.cs | 2 +- .../CmsKit/MongoDB/Tags/MongoTagRepository.cs | 12 +- .../Documents/EFCoreDocumentRepository.cs | 12 +- .../Docs/Documents/MongoDocumentRepository.cs | 10 +- .../EfCoreOrganizationUnitRepository.cs | 8 +- .../MongoDB/MongoIdentityUserRepository.cs | 20 +- .../MongoOrganizationUnitRepository.cs | 11 +- .../EfCoreTenantRepository.cs | 2 +- .../MongoDb/MongoTenantRepository.cs | 2 +- .../MyCompanyName.MyProjectName.Web/yarn.lock | 343 +++++++++--------- 16 files changed, 246 insertions(+), 247 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogFeatureRepository.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogFeatureRepository.cs index 1854353429..8ce64ac4df 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogFeatureRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogFeatureRepository.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using System.Threading; using System.Threading.Tasks; using Volo.Abp.Domain.Repositories; @@ -9,9 +10,9 @@ namespace Volo.CmsKit.Blogs; public interface IBlogFeatureRepository : IBasicRepository { - Task> GetListAsync(Guid blogId); + Task> GetListAsync(Guid blogId, CancellationToken cancellationToken = default); - Task> GetListAsync(Guid blogId, List featureNames); + Task> GetListAsync(Guid blogId, List featureNames, CancellationToken cancellationToken = default); - Task FindAsync(Guid blogId, string featureName); + Task FindAsync(Guid blogId, string featureName, CancellationToken cancellationToken = default); } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/ITagRepository.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/ITagRepository.cs index 7ac48eeb1a..e74b767078 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/ITagRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/ITagRepository.cs @@ -24,9 +24,13 @@ public interface ITagRepository : IBasicRepository [NotNull] string name, CancellationToken cancellationToken = default); - Task> GetListAsync(string filter); + Task> GetListAsync( + string filter, + CancellationToken cancellationToken = default); - Task GetCountAsync(string filter); + Task GetCountAsync( + string filter, + CancellationToken cancellationToken = default); Task> GetAllRelatedTagsAsync( [NotNull] string entityType, diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogFeatureRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogFeatureRepository.cs index 8c674e11f5..3f0a9cf726 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogFeatureRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogFeatureRepository.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Threading; using System.Threading.Tasks; using Volo.Abp.Domain.Repositories.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore; @@ -15,22 +16,22 @@ public class EfCoreBlogFeatureRepository : EfCoreRepository FindAsync(Guid blogId, string featureName) + public Task FindAsync(Guid blogId, string featureName, CancellationToken cancellationToken = default) { - return base.FindAsync(x => x.BlogId == blogId && x.FeatureName == featureName); + return base.FindAsync(x => x.BlogId == blogId && x.FeatureName == featureName, cancellationToken: cancellationToken); } - public async Task> GetListAsync(Guid blogId) + public async Task> GetListAsync(Guid blogId, CancellationToken cancellationToken = default) { return await (await GetQueryableAsync()) .Where(x => x.BlogId == blogId) - .ToListAsync(); + .ToListAsync(GetCancellationToken(cancellationToken)); } - public async Task> GetListAsync(Guid blogId, List featureNames) + public async Task> GetListAsync(Guid blogId, List featureNames, CancellationToken cancellationToken = default) { return await (await GetQueryableAsync()) .Where(x => x.BlogId == blogId && featureNames.Contains(x.FeatureName)) - .ToListAsync(); + .ToListAsync(GetCancellationToken(cancellationToken)); } } diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Tags/EfCoreTagRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Tags/EfCoreTagRepository.cs index dc026b32aa..9b750eaac5 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Tags/EfCoreTagRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Tags/EfCoreTagRepository.cs @@ -80,14 +80,14 @@ public class EfCoreTagRepository : EfCoreRepository return await query.ToListAsync(cancellationToken: GetCancellationToken(cancellationToken)); } - public async Task> GetListAsync(string filter) + public async Task> GetListAsync(string filter, CancellationToken cancellationToken = default) { - return await (await GetQueryableByFilterAsync(filter)).ToListAsync(); + return await (await GetQueryableByFilterAsync(filter)).ToListAsync(GetCancellationToken(cancellationToken)); } - public async Task GetCountAsync(string filter) + public async Task GetCountAsync(string filter, CancellationToken cancellationToken = default) { - return await (await GetQueryableByFilterAsync(filter)).CountAsync(); + return await (await GetQueryableByFilterAsync(filter)).CountAsync(GetCancellationToken(cancellationToken)); } private async Task> GetQueryableByFilterAsync(string filter) diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogFeatureRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogFeatureRepository.cs index 45253b3991..334debe8c8 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogFeatureRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogFeatureRepository.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using MongoDB.Driver.Linq; using System.Text; +using System.Threading; using System.Threading.Tasks; using Volo.Abp.Domain.Repositories.MongoDB; using Volo.Abp.MongoDB; @@ -17,22 +18,22 @@ public class MongoBlogFeatureRepository : MongoDbRepository FindAsync(Guid blogId, string featureName) + public Task FindAsync(Guid blogId, string featureName, CancellationToken cancellationToken = default) { - return base.FindAsync(x => x.BlogId == blogId && x.FeatureName == featureName); + return base.FindAsync(x => x.BlogId == blogId && x.FeatureName == featureName, cancellationToken: cancellationToken); } - public virtual async Task> GetListAsync(Guid blogId) + public virtual async Task> GetListAsync(Guid blogId, CancellationToken cancellationToken = default) { - return await (await GetMongoQueryableAsync()) + return await (await GetMongoQueryableAsync(cancellationToken)) .Where(x => x.BlogId == blogId) - .ToListAsync(); + .ToListAsync(GetCancellationToken(cancellationToken)); } - public virtual async Task> GetListAsync(Guid blogId, List featureNames) + public virtual async Task> GetListAsync(Guid blogId, List featureNames, CancellationToken cancellationToken = default) { - return await (await GetMongoQueryableAsync()) + return await (await GetMongoQueryableAsync(cancellationToken)) .Where(x => x.BlogId == blogId && featureNames.Contains(x.FeatureName)) - .ToListAsync(); + .ToListAsync(GetCancellationToken(cancellationToken)); } } diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs index f52dc3add4..3583fdfc68 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs @@ -44,12 +44,12 @@ public class MongoBlogPostRepository : MongoDbRepository>(!string.IsNullOrWhiteSpace(filter), x => x.Title.Contains(filter) || x.Slug.Contains(filter)) .WhereIf>(blogId.HasValue, x => x.BlogId == blogId) - .CountAsync(GetCancellationToken(cancellationToken)); + .CountAsync(cancellationToken); } public virtual async Task> GetListAsync( @@ -60,8 +60,8 @@ public class MongoBlogPostRepository : MongoDbRepository().AsQueryable(); @@ -81,7 +81,7 @@ public class MongoBlogPostRepository : MongoDbRepository { @@ -95,8 +95,8 @@ public class MongoBlogPostRepository : MongoDbRepository x.BlogId == blogId && x.Slug.ToLower() == slug, token); + cancellationToken = GetCancellationToken(cancellationToken); + var queryable = await GetMongoQueryableAsync(cancellationToken); + return await queryable.AnyAsync(x => x.BlogId == blogId && x.Slug.ToLower() == slug, cancellationToken); } } diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogRepository.cs index 00d12a0246..b34c452621 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogRepository.cs @@ -66,7 +66,7 @@ public class MongoBlogRepository : MongoDbRepository> GetListQueryAsync(string filter = null, CancellationToken cancellationToken = default) { - return (await GetMongoQueryableAsync(GetCancellationToken(cancellationToken))) + return (await GetMongoQueryableAsync(cancellationToken)) .WhereIf(!filter.IsNullOrWhiteSpace(), b => b.Name.Contains(filter)); } } diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Tags/MongoTagRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Tags/MongoTagRepository.cs index 2230c36f19..6b4be3dbbf 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Tags/MongoTagRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Tags/MongoTagRepository.cs @@ -82,19 +82,19 @@ public class MongoTagRepository : MongoDbRepository> GetListAsync(string filter) + public async Task> GetListAsync(string filter, CancellationToken cancellationToken = default) { - return await (await GetQueryableByFilterAsync(filter)).ToListAsync(); + return await (await GetQueryableByFilterAsync(filter, cancellationToken)).ToListAsync(GetCancellationToken(cancellationToken)); } - public async Task GetCountAsync(string filter) + public async Task GetCountAsync(string filter, CancellationToken cancellationToken = default) { - return await (await GetQueryableByFilterAsync(filter)).CountAsync(); + return await (await GetQueryableByFilterAsync(filter, cancellationToken)).CountAsync(GetCancellationToken(cancellationToken)); } - private async Task> GetQueryableByFilterAsync(string filter) + private async Task> GetQueryableByFilterAsync(string filter, CancellationToken cancellationToken = default) { - var mongoQueryable = await GetMongoQueryableAsync(); + var mongoQueryable = await GetMongoQueryableAsync(cancellationToken: cancellationToken); if (!filter.IsNullOrWhiteSpace()) { diff --git a/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/Documents/EFCoreDocumentRepository.cs b/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/Documents/EFCoreDocumentRepository.cs index a322120c3d..d1d78cc24a 100644 --- a/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/Documents/EFCoreDocumentRepository.cs +++ b/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/Documents/EFCoreDocumentRepository.cs @@ -29,13 +29,13 @@ namespace Volo.Docs.Documents LanguageCode = x.LanguageCode, Format = x.Format, }) - .ToListAsync(cancellationToken: cancellationToken); + .ToListAsync(GetCancellationToken(cancellationToken)); } public async Task> GetListByProjectId(Guid projectId, CancellationToken cancellationToken = default) { - return await (await GetDbSetAsync()).Where(d => d.ProjectId == projectId).ToListAsync(cancellationToken: cancellationToken); + return await (await GetDbSetAsync()).Where(d => d.ProjectId == projectId).ToListAsync(GetCancellationToken(cancellationToken)); } public async Task> GetListAsync(Guid? projectId, string version, string name, CancellationToken cancellationToken = default) @@ -44,7 +44,7 @@ namespace Volo.Docs.Documents .WhereIf(version != null, x => x.Version == version) .WhereIf(name != null, x => x.Name == name) .WhereIf(projectId.HasValue, x => x.ProjectId == projectId) - .ToListAsync(cancellationToken: cancellationToken); + .ToListAsync(GetCancellationToken(cancellationToken)); } public async Task> GetAllAsync( @@ -86,7 +86,7 @@ namespace Volo.Docs.Documents ); query = query.OrderBy(string.IsNullOrWhiteSpace(sorting) ? nameof(Document.Name) : sorting); - return await query.PageBy(skipCount, maxResultCount).ToListAsync(cancellationToken); + return await query.PageBy(skipCount, maxResultCount).ToListAsync(GetCancellationToken(cancellationToken)); } public async Task GetAllCountAsync( @@ -138,7 +138,7 @@ namespace Volo.Docs.Documents .FirstOrDefaultAsync(x => x.ProjectId == projectId && x.Name == name && x.LanguageCode == languageCode && x.Version == version, - cancellationToken); + GetCancellationToken(cancellationToken)); } public async Task DeleteAsync(Guid projectId, string name, string languageCode, string version, CancellationToken cancellationToken = default) @@ -150,7 +150,7 @@ namespace Volo.Docs.Documents public async Task GetAsync(Guid id, CancellationToken cancellationToken = default) { - return await (await GetDbSetAsync()).Where(x => x.Id == id).SingleAsync(cancellationToken: cancellationToken); + return await (await GetDbSetAsync()).Where(x => x.Id == id).SingleAsync(cancellationToken: GetCancellationToken(cancellationToken)); } protected virtual IQueryable ApplyFilterForGetAll( diff --git a/modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/Documents/MongoDocumentRepository.cs b/modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/Documents/MongoDocumentRepository.cs index 3a57330557..c812947388 100644 --- a/modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/Documents/MongoDocumentRepository.cs +++ b/modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/Documents/MongoDocumentRepository.cs @@ -31,12 +31,12 @@ namespace Volo.Docs.Documents LanguageCode = x.LanguageCode, Format = x.Format }) - .ToListAsync(cancellationToken); + .ToListAsync(GetCancellationToken(cancellationToken)); } public async Task> GetListByProjectId(Guid projectId, CancellationToken cancellationToken = default) { - return await (await GetMongoQueryableAsync(cancellationToken)).Where(d => d.ProjectId == projectId).ToListAsync(cancellationToken); + return await (await GetMongoQueryableAsync(cancellationToken)).Where(d => d.ProjectId == projectId).ToListAsync(GetCancellationToken(cancellationToken)); } public async Task FindAsync(Guid projectId, string name, string languageCode, string version, @@ -46,7 +46,7 @@ namespace Volo.Docs.Documents return await (await GetMongoQueryableAsync(cancellationToken)).FirstOrDefaultAsync(x => x.ProjectId == projectId && x.Name == name && x.LanguageCode == languageCode && - x.Version == version, cancellationToken); + x.Version == version, GetCancellationToken(cancellationToken)); } public async Task DeleteAsync(Guid projectId, string name, string languageCode, string version, @@ -64,7 +64,7 @@ namespace Volo.Docs.Documents .WhereIf(name != null, x => x.Name == name) .WhereIf(projectId.HasValue, x => x.ProjectId == projectId) .As>() - .ToListAsync(cancellationToken); + .ToListAsync(GetCancellationToken(cancellationToken)); } public async Task> GetAllAsync( @@ -156,7 +156,7 @@ namespace Volo.Docs.Documents public async Task GetAsync(Guid id, CancellationToken cancellationToken = default) { - return await (await GetMongoQueryableAsync(cancellationToken)).Where(x => x.Id == id).SingleAsync(cancellationToken); + return await (await GetMongoQueryableAsync(cancellationToken)).Where(x => x.Id == id).SingleAsync(GetCancellationToken(cancellationToken)); } protected virtual IMongoQueryable ApplyFilterForGetAll( diff --git a/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreOrganizationUnitRepository.cs b/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreOrganizationUnitRepository.cs index eae1306975..cd2e2af595 100644 --- a/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreOrganizationUnitRepository.cs +++ b/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreOrganizationUnitRepository.cs @@ -137,7 +137,7 @@ public class EfCoreOrganizationUnitRepository .WhereIf(!filter.IsNullOrWhiteSpace(), r => r.Name.Contains(filter)) .OrderBy(sorting.IsNullOrEmpty() ? nameof(IdentityRole.Name) : sorting) .PageBy(skipCount, maxResultCount) - .ToListAsync(cancellationToken); + .ToListAsync(GetCancellationToken(cancellationToken)); } public virtual async Task GetUnaddedRolesCountAsync( @@ -151,7 +151,7 @@ public class EfCoreOrganizationUnitRepository return await dbContext.Roles .Where(r => !roleIds.Contains(r.Id)) .WhereIf(!filter.IsNullOrWhiteSpace(), r => r.Name.Contains(filter)) - .CountAsync(cancellationToken); + .CountAsync(GetCancellationToken(cancellationToken)); } public virtual async Task> GetMembersAsync( @@ -211,7 +211,7 @@ public class EfCoreOrganizationUnitRepository .IncludeDetails(includeDetails) .OrderBy(sorting.IsNullOrEmpty() ? nameof(IdentityUser.Name) : sorting) .PageBy(skipCount, maxResultCount) - .ToListAsync(cancellationToken); + .ToListAsync(GetCancellationToken(cancellationToken)); } public virtual async Task GetUnaddedUsersCountAsync( @@ -231,7 +231,7 @@ public class EfCoreOrganizationUnitRepository u.UserName.Contains(filter) || u.Email.Contains(filter) || (u.PhoneNumber != null && u.PhoneNumber.Contains(filter))) - .CountAsync(cancellationToken); + .CountAsync(GetCancellationToken(cancellationToken)); } [Obsolete("Use WithDetailsAsync method.")] diff --git a/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoIdentityUserRepository.cs b/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoIdentityUserRepository.cs index 7a953ed81e..2edcff0388 100644 --- a/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoIdentityUserRepository.cs +++ b/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoIdentityUserRepository.cs @@ -36,7 +36,8 @@ public class MongoIdentityUserRepository : MongoDbRepository r.OrganizationUnitId) .ToArray(); @@ -47,14 +48,15 @@ public class MongoIdentityUserRepository : MongoDbRepository x.Roles.Select(r => r.RoleId)).ToArray(); var roleIds = user.Roles.Select(r => r.RoleId).ToArray(); var allRoleIds = orgUnitRoleIds.Union(roleIds); - return await (await GetMongoQueryableAsync(cancellationToken)).Where(r => allRoleIds.Contains(r.Id)).Select(r => r.Name).ToListAsync(GetCancellationToken(cancellationToken)); + return await (await GetMongoQueryableAsync(cancellationToken)).Where(r => allRoleIds.Contains(r.Id)).Select(r => r.Name).ToListAsync(cancellationToken); } public virtual async Task> GetRoleNamesInOrganizationUnitAsync( Guid id, CancellationToken cancellationToken = default) { - var user = await GetAsync(id, cancellationToken: GetCancellationToken(cancellationToken)); + cancellationToken = GetCancellationToken(cancellationToken); + var user = await GetAsync(id, cancellationToken: cancellationToken); var organizationUnitIds = user.OrganizationUnits .Select(r => r.OrganizationUnitId) @@ -71,7 +73,7 @@ public class MongoIdentityUserRepository : MongoDbRepository roleIds.Contains(r.Id)) .Select(r => r.Name) - .ToListAsync(GetCancellationToken(cancellationToken)); + .ToListAsync(cancellationToken); } public virtual async Task FindByLoginAsync( @@ -172,7 +174,8 @@ public class MongoIdentityUserRepository : MongoDbRepository r.OrganizationUnitId) .ToArray(); @@ -183,7 +186,7 @@ public class MongoIdentityUserRepository : MongoDbRepository x.Roles.Select(r => r.RoleId)).ToArray(); var roleIds = user.Roles.Select(r => r.RoleId).ToArray(); var allRoleIds = orgUnitRoleIds.Union(roleIds); - return await (await GetMongoQueryableAsync(cancellationToken)).Where(r => allRoleIds.Contains(r.Id)).ToListAsync(GetCancellationToken(cancellationToken)); + return await (await GetMongoQueryableAsync(cancellationToken)).Where(r => allRoleIds.Contains(r.Id)).ToListAsync(cancellationToken); } public virtual async Task> GetOrganizationUnitsAsync( @@ -191,12 +194,13 @@ public class MongoIdentityUserRepository : MongoDbRepository r.OrganizationUnitId); return await (await GetMongoQueryableAsync(cancellationToken)) .Where(ou => organizationUnitIds.Contains(ou.Id)) - .ToListAsync(GetCancellationToken(cancellationToken)); + .ToListAsync(cancellationToken); } public virtual async Task GetCountAsync( diff --git a/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoOrganizationUnitRepository.cs b/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoOrganizationUnitRepository.cs index 5f0f5fd097..23726693ad 100644 --- a/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoOrganizationUnitRepository.cs +++ b/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoOrganizationUnitRepository.cs @@ -95,7 +95,7 @@ public class MongoOrganizationUnitRepository .OrderBy(sorting.IsNullOrEmpty() ? nameof(IdentityRole.Name) : sorting) .As>() .PageBy>(skipCount, maxResultCount) - .ToListAsync(cancellationToken); + .ToListAsync(GetCancellationToken(cancellationToken)); } public virtual async Task GetRolesCountAsync( @@ -104,7 +104,7 @@ public class MongoOrganizationUnitRepository { var roleIds = organizationUnit.Roles.Select(r => r.RoleId).ToArray(); - return await (await GetMongoQueryableAsync(cancellationToken)).Where(r => roleIds.Contains(r.Id)).CountAsync(cancellationToken); + return await (await GetMongoQueryableAsync(cancellationToken)).Where(r => roleIds.Contains(r.Id)).CountAsync(GetCancellationToken(cancellationToken)); } public virtual async Task> GetUnaddedRolesAsync( @@ -124,7 +124,7 @@ public class MongoOrganizationUnitRepository .OrderBy(sorting.IsNullOrEmpty() ? nameof(IdentityRole.Name) : sorting) .As>() .PageBy>(skipCount, maxResultCount) - .ToListAsync(cancellationToken); + .ToListAsync(GetCancellationToken(cancellationToken)); } public virtual async Task GetUnaddedRolesCountAsync( @@ -138,7 +138,7 @@ public class MongoOrganizationUnitRepository .Where(r => !roleIds.Contains(r.Id)) .WhereIf(!filter.IsNullOrWhiteSpace(), r => r.Name.Contains(filter)) .As>() - .CountAsync(cancellationToken); + .CountAsync(GetCancellationToken(cancellationToken)); } public virtual async Task> GetMembersAsync( @@ -218,12 +218,13 @@ public class MongoOrganizationUnitRepository public virtual async Task RemoveAllMembersAsync(OrganizationUnit organizationUnit, CancellationToken cancellationToken = default) { + cancellationToken = GetCancellationToken(cancellationToken); var userQueryable = await GetMongoQueryableAsync(cancellationToken); var dbContext = await GetDbContextAsync(cancellationToken); var users = await userQueryable .Where(u => u.OrganizationUnits.Any(uou => uou.OrganizationUnitId == organizationUnit.Id)) .As>() - .ToListAsync(GetCancellationToken(cancellationToken)); + .ToListAsync(cancellationToken); foreach (var user in users) { diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/Volo/Abp/TenantManagement/EntityFrameworkCore/EfCoreTenantRepository.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/Volo/Abp/TenantManagement/EntityFrameworkCore/EfCoreTenantRepository.cs index 1fdeeb562b..34d350d242 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/Volo/Abp/TenantManagement/EntityFrameworkCore/EfCoreTenantRepository.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/Volo/Abp/TenantManagement/EntityFrameworkCore/EfCoreTenantRepository.cs @@ -74,7 +74,7 @@ public class EfCoreTenantRepository : EfCoreRepository u.Name.Contains(filter) - ).CountAsync(cancellationToken: cancellationToken); + ).CountAsync(cancellationToken: GetCancellationToken(cancellationToken)); } [Obsolete("Use WithDetailsAsync method.")] diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.MongoDB/Volo/Abp/TenantManagement/MongoDb/MongoTenantRepository.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.MongoDB/Volo/Abp/TenantManagement/MongoDb/MongoTenantRepository.cs index 5da1dad761..321dcf365f 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.MongoDB/Volo/Abp/TenantManagement/MongoDb/MongoTenantRepository.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.MongoDB/Volo/Abp/TenantManagement/MongoDb/MongoTenantRepository.cs @@ -69,6 +69,6 @@ public class MongoTenantRepository : MongoDbRepository u.Name.Contains(filter) - ).CountAsync(cancellationToken: cancellationToken); + ).CountAsync(cancellationToken: GetCancellationToken(cancellationToken)); } } diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/yarn.lock b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/yarn.lock index 4eb7e9ff11..ba1ca22dfb 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/yarn.lock +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-5.0.1.tgz#884a4bc9ea043654891be56cd7e7c7bbf9bbad8c" - integrity sha512-JGTQyg3Zyfda84yg/Geq6rGuBN2SX4gIOaFL2h8BX9bA8CVuBC+zcwfO1bBsP89xfTyPvdSAGBvSfhCjPwsukQ== - dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~5.0.1" - -"@abp/aspnetcore.mvc.ui.theme.shared@~5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-5.0.1.tgz#77a4900424603e0be048f3507aa852701f3139a2" - integrity sha512-mn9HEOHBkmBr7d/VUt0bfg9K58IyRDb7j3ZiDoHo263WLXJkf0+C7MEbv/zxfDHW4NeztsNCd3ugA7PdTxPzmA== - dependencies: - "@abp/aspnetcore.mvc.ui" "~5.0.1" - "@abp/bootstrap" "~5.0.1" - "@abp/bootstrap-datepicker" "~5.0.1" - "@abp/datatables.net-bs5" "~5.0.1" - "@abp/font-awesome" "~5.0.1" - "@abp/jquery-form" "~5.0.1" - "@abp/jquery-validation-unobtrusive" "~5.0.1" - "@abp/lodash" "~5.0.1" - "@abp/luxon" "~5.0.1" - "@abp/malihu-custom-scrollbar-plugin" "~5.0.1" - "@abp/select2" "~5.0.1" - "@abp/sweetalert2" "~5.0.1" - "@abp/timeago" "~5.0.1" - "@abp/toastr" "~5.0.1" - -"@abp/aspnetcore.mvc.ui@~5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-5.0.1.tgz#f5aa4e0dcc10878f590e30836887f3f9861e91e3" - integrity sha512-bN15UcNhTqeo0RXlIYws7Jd8ZfSBsVM6Y5wiAqbq1Q3Lvs1uLmryhZpn6sHmKw2Z3Lnhec7VjnZN0FwNpzEqUw== +"@abp/aspnetcore.mvc.ui.theme.basic@^5.2.0-rc.2": + version "5.2.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-5.2.0-rc.2.tgz#d2cf4a0f2b8a93f1fe53a0bc6c66d9c3233b620a" + integrity sha512-aQk3RSl31UT4gEqiHT3oV06BZ/k6q1DVKBwVOj+YQEIb8ojptJtbGv+aUhHEql5I7zwiWe4EWf2rM2Ve0JQa6Q== + dependencies: + "@abp/aspnetcore.mvc.ui.theme.shared" "~5.2.0-rc.2" + +"@abp/aspnetcore.mvc.ui.theme.shared@~5.2.0-rc.2": + version "5.2.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-5.2.0-rc.2.tgz#9ff2eb2a1b5f438d8f848659400100e20f74fc77" + integrity sha512-m06zMEt0C9P3f7+Qg7SjvP+k4wHPqvAOzsd5jDNN0JekeWH4gIMsqgDAoRB2SA72HUUpMbGe8Utune7EgE/T1Q== + dependencies: + "@abp/aspnetcore.mvc.ui" "~5.2.0-rc.2" + "@abp/bootstrap" "~5.2.0-rc.2" + "@abp/bootstrap-datepicker" "~5.2.0-rc.2" + "@abp/datatables.net-bs5" "~5.2.0-rc.2" + "@abp/font-awesome" "~5.2.0-rc.2" + "@abp/jquery-form" "~5.2.0-rc.2" + "@abp/jquery-validation-unobtrusive" "~5.2.0-rc.2" + "@abp/lodash" "~5.2.0-rc.2" + "@abp/luxon" "~5.2.0-rc.2" + "@abp/malihu-custom-scrollbar-plugin" "~5.2.0-rc.2" + "@abp/select2" "~5.2.0-rc.2" + "@abp/sweetalert2" "~5.2.0-rc.2" + "@abp/timeago" "~5.2.0-rc.2" + "@abp/toastr" "~5.2.0-rc.2" + +"@abp/aspnetcore.mvc.ui@~5.2.0-rc.2": + version "5.2.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-5.2.0-rc.2.tgz#427811f66eb738dbb89434e926b36a2309fe43b2" + integrity sha512-+ss9MctYTF9Ewn7VEsMqszEoiX51G070kN2bIepgyXnYetrQRFsTgQGa4yi1bAqyAF9rZ1j0hSB0eM2clFyJMg== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,152 +41,151 @@ merge-stream "^2.0.0" micromatch "^4.0.2" -"@abp/bootstrap-datepicker@~5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-5.0.1.tgz#52116a154e343d84c87257ad1ef10b54012f4c33" - integrity sha512-ZJWaZKzGzshBAfyBqaUScfWqeBVfWGbZIwIplF8VKtDGcyI8R54bqDsydhS88CCnolRz4+tfq3QY6yAXrUEKAw== +"@abp/bootstrap-datepicker@~5.2.0-rc.2": + version "5.2.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-5.2.0-rc.2.tgz#bfb648e7b8e5d2a9806301417c7864abb4cc26e2" + integrity sha512-wKR+5g/xx7zqFGFaOZVO9XySlrOmOFH/ZidDpq9QYjE+OoHSlS8X5DUnkbXj2MbQy4etZuvz9ILcmnBPonrQ7g== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-5.0.1.tgz#d542a8fd7151e22eda1643e313a67f9892c50533" - integrity sha512-wyVAp6a4OIwlqK7AZozs7wpsBZgzG55EKeChBBfUXloJPuirQHxccFNE41aAYWfKur+wj25WD5NBnzFuKyNYiQ== +"@abp/bootstrap@~5.2.0-rc.2": + version "5.2.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-5.2.0-rc.2.tgz#0375b38317c5d1f5f6cb7d46a0ee6bf9b85a6f4f" + integrity sha512-hsgxY8WNRonQZP3cmMKvBNHnyCSBfbBB4savLW5r7CxysjnRt6MDyhmmj7XVwVTC1siBviUcWClOHCJisaNRSw== dependencies: - "@abp/core" "~5.0.1" - bootstrap "^5.1.0" - bootstrap-v4-rtl "4.6.0-1" + "@abp/core" "~5.2.0-rc.2" + bootstrap "^5.1.3" -"@abp/core@~5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-5.0.1.tgz#904fa2c22bcbf42deb56abf772c3a53362807a2f" - integrity sha512-QzX35Oa+Vncu2OP1tXvGjAVFznmD1tZRn4tlDQgn36B2MU06UEO0JSx7JVedPvhzQZceUe5+WWMfuYNM2xeBTw== +"@abp/core@~5.2.0-rc.2": + version "5.2.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-5.2.0-rc.2.tgz#f0c3dd7f0b12e8e13a702a3b0a53aa4525da673e" + integrity sha512-zotgZOXmkh+aD0KExBr4QytQfDDHxrG15e2HFzYKywhd0mpnwAVdR2Z2Ye01C360wJ2opv0mtgaSuEZniXNO3Q== dependencies: - "@abp/utils" "~5.0.1" + "@abp/utils" "~5.2.0-rc.2" -"@abp/datatables.net-bs5@~5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-5.0.1.tgz#b8afa2255e374c86c50e57bd57c2b36a86d6a890" - integrity sha512-1fuCk+K4xW3XnDFo2+kPXHMoOTol4HLRcWVRELjoBQ5YbTxEPsbrhfNUeUsECDAmkxoqY7G3MEdtIVwmy5NPpg== +"@abp/datatables.net-bs5@~5.2.0-rc.2": + version "5.2.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-5.2.0-rc.2.tgz#df5cbe004ba3a2330cc667b3724440c4881cc6b2" + integrity sha512-Q2Sy6MMWM3EuELHeHxKkDflPTX09ictonjB5vn/Cau2PHuOkWTnL0Ystl91a1DetQIa1ejJL/YB+Pz1TUVoUNA== dependencies: - "@abp/datatables.net" "~5.0.1" - datatables.net-bs5 "^1.10.25" + "@abp/datatables.net" "~5.2.0-rc.2" + datatables.net-bs5 "^1.11.4" -"@abp/datatables.net@~5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-5.0.1.tgz#0ce5bdf7aa5bf224b93a22758a016c50562d6569" - integrity sha512-x9D2YNtnOJRrKXi2Pwrqzz9sIOrn3o6x2c8ZxjyC54vh+SLQtLycAzQw7OyaZGdbFkudlJiCuME/FiuZvht8Og== +"@abp/datatables.net@~5.2.0-rc.2": + version "5.2.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-5.2.0-rc.2.tgz#bfdc01302d19eab0d73eff908238bf88c5806e74" + integrity sha512-TG1b8moW4RqCyNtzQKB7RnCmDt1cDEy/5WD++Maz2x4/yvu1uBBa6qLR7Mn6UNgoC51Y/op+LzaabkwXUSJl4w== dependencies: - "@abp/jquery" "~5.0.1" - datatables.net "^1.10.21" + "@abp/jquery" "~5.2.0-rc.2" + datatables.net "^1.11.4" -"@abp/font-awesome@~5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-5.0.1.tgz#661753403499925661f880c53214841dd34f5210" - integrity sha512-C+alReNvHZzST55ITBTyFqhdTehPo5ondzfqc9QlyB3Kwk1DIq0CaLqfS2xU5glYGDSqKi7xfkyQnJdwu2hKRA== +"@abp/font-awesome@~5.2.0-rc.2": + version "5.2.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-5.2.0-rc.2.tgz#0292cb22c0280dccfe148ad3d46947ede26f8b14" + integrity sha512-FzjH/lnAglswqU7/YAXZP0H/ocGBrDkegMiQ7OjzZVcgGPS9BnqRPbiHDz7mjBHaQHzBtTCcZrXnU0l3GXCdbw== dependencies: - "@abp/core" "~5.0.1" - "@fortawesome/fontawesome-free" "^5.13.0" + "@abp/core" "~5.2.0-rc.2" + "@fortawesome/fontawesome-free" "^5.15.4" -"@abp/jquery-form@~5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-5.0.1.tgz#20fa51946f68a7acd6ef3dd3d8d1349307f681b4" - integrity sha512-Q7GG0+XFXs7pDoa4p3r7vm8+sUh5ohwovedPNVghtX8Rm2I1sfVfJKamPr24PCAyJcFVntU1WCt/CngneES3pw== +"@abp/jquery-form@~5.2.0-rc.2": + version "5.2.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-5.2.0-rc.2.tgz#797e3b72a91435d74f19ddaa9b2e6e04fcfed616" + integrity sha512-cVbReCeM5q7nqeQDjSIH7VmuMwX8lE36D9sariUw8xSUn5GJlnrGYNV4kE7G9JLIlIRanIlS3SPuA3RFA2z9ZA== dependencies: - "@abp/jquery" "~5.0.1" + "@abp/jquery" "~5.2.0-rc.2" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-5.0.1.tgz#50798d3c087d0b103944b3a9e7c39a1f51db9fdc" - integrity sha512-w5SAYB0EZRbOhIFcCUXWvoGB/dWj3zyQOarbvzJ9LelgrXvvoissaaSSqq6BySjr1UigIWBCVuruAQssizmXBQ== +"@abp/jquery-validation-unobtrusive@~5.2.0-rc.2": + version "5.2.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-5.2.0-rc.2.tgz#ec0c22cecef3016c1da0b8dca4374a263915a835" + integrity sha512-b+ttLlnRPgDB7V2tnYp8+1Q3niM4ZmiU/ZaQB4z6gSMk/2tPAIhOOwAQt7DYRWSMUsgGFI0NvsgEBM9aLTikFA== dependencies: - "@abp/jquery-validation" "~5.0.1" - jquery-validation-unobtrusive "^3.2.11" + "@abp/jquery-validation" "~5.2.0-rc.2" + jquery-validation-unobtrusive "^3.2.12" -"@abp/jquery-validation@~5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-5.0.1.tgz#5932060d1fdf04a81e998caac959188aefdf1669" - integrity sha512-T5p0U2cWh6Jov55AiUxJYRw92L6ubFXfqL0EkaePV5AnoetVXheluhq9gQAKnwVAqtc/3Rxkr/lO047catUkjw== +"@abp/jquery-validation@~5.2.0-rc.2": + version "5.2.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-5.2.0-rc.2.tgz#a98383e6c7fb21b74ecde937c25d7fa46810a333" + integrity sha512-6lVxJyMfL0kHmv8tpxLhVfK0Rf+qjLMPkm1qHd0pSwvH+GM0QMN39s9TaexCvH3QO70BlEnwXJ2PWVY9OQY5uw== dependencies: - "@abp/jquery" "~5.0.1" - jquery-validation "^1.19.2" + "@abp/jquery" "~5.2.0-rc.2" + jquery-validation "^1.19.3" -"@abp/jquery@~5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-5.0.1.tgz#1522ba1e0c488bffdc30a230ab35e225ae32d028" - integrity sha512-AacK4cy/RpzBfRYf7Jjn+TmVm72TW0jEjRoQ3TOXmlOrunRph05mQm72Ux2o8+Z1lOwxJKRz5gKSbRTfa6Tgpw== +"@abp/jquery@~5.2.0-rc.2": + version "5.2.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-5.2.0-rc.2.tgz#3235b92834cbca4d3e22fb0b19122aa2a24b8262" + integrity sha512-u7xpQcaMpzlXq018qBdzwWmPx+65QHPq5VhI7aAvZAUlQrvQjiiCeG25egxOeCL0aROcCjsAlnTItT1U/q9loQ== dependencies: - "@abp/core" "~5.0.1" + "@abp/core" "~5.2.0-rc.2" jquery "~3.6.0" -"@abp/lodash@~5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-5.0.1.tgz#ad22895772ce65e52941dddb84d0a7d26c521d59" - integrity sha512-r1QqZCXfDd0YQnE4MkcY291H5jWFdZtGeYmwjIkn7aeOZ0PP9qsDPkWTwPwbpfmnz4DhmIdO5a1rveWz/J5ZwQ== +"@abp/lodash@~5.2.0-rc.2": + version "5.2.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-5.2.0-rc.2.tgz#e55f11279d4f374785a56ec68ed99cdf2495a9aa" + integrity sha512-BR6d1NbTcuk772RK8VdeHBokbqZ1OHUgRKdPG3MXlDGKZmUS4/ijFdRiIvo7Rd0WFqgk2QdbHw3lfKQ/CGqyhw== dependencies: - "@abp/core" "~5.0.1" - lodash "^4.17.15" + "@abp/core" "~5.2.0-rc.2" + lodash "^4.17.21" -"@abp/luxon@~5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-5.0.1.tgz#7930e30db60e63b486a51030c60e09b54bcb3867" - integrity sha512-cXbnyAI9Gn2bZBQuCN46UFOkzb+djA3LMgpeMlTTv0aA87PrjzT60EPQ4a9FLovESqNnblaQ9Je43QwoGH8kZA== +"@abp/luxon@~5.2.0-rc.2": + version "5.2.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-5.2.0-rc.2.tgz#0d263482b9a73269164a8a58562ce8bd69b57f36" + integrity sha512-KIhpvl9kf43Bc/E/u6bmb1lp0asf81NoUoERQTRz7JqmH1XYJvJCqGHxommvItcu7zNjCLL6FK/JtO0v7DUiEw== dependencies: - "@abp/core" "~5.0.1" - luxon "^1.24.1" + "@abp/core" "~5.2.0-rc.2" + luxon "^2.3.0" -"@abp/malihu-custom-scrollbar-plugin@~5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-5.0.1.tgz#268ec30eef8ba72a0c8cb997e55d48a1508b2719" - integrity sha512-mqF6OizoWp6kg5pztNfF78+mbfyX3JAXDfv+ZUCvjtAqllIzyOUIqRSXULDkAcDeCC1+PluRsd+uSltIppC5hA== +"@abp/malihu-custom-scrollbar-plugin@~5.2.0-rc.2": + version "5.2.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-5.2.0-rc.2.tgz#5136c0d59d5d385350f560c6d8a3d10f6393dea7" + integrity sha512-7Q8yZbU9YRA5/Y+rRLLiPD724rjfrVBuCpfp1+b99LyeFTFTSD2oNG3r/I6FC7tE5HLaFscJLJyOca4GPS1mww== dependencies: - "@abp/core" "~5.0.1" + "@abp/core" "~5.2.0-rc.2" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@~5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-5.0.1.tgz#644c46c7c942a6b9d36bc76c7132f32ad577933b" - integrity sha512-FHVqEebQS3XiYn5TMEhGaQJOAYnPqxivKpeOB0F0F2bEDGqt3OXh05KcQBOm+sDSScq3c7T7HLr9mMzlYtyHXw== +"@abp/select2@~5.2.0-rc.2": + version "5.2.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-5.2.0-rc.2.tgz#2eef30442957ac02133357604a1256e995a9ebe7" + integrity sha512-1cFOavpWP6zRfrpXi0zozFkL6W0tEEBkWj7AiHU3AGctAQEZ0qWGKSTIExqnEsDb3LsjAKMdBycGdkLFbK97Og== dependencies: - "@abp/core" "~5.0.1" + "@abp/core" "~5.2.0-rc.2" select2 "^4.0.13" -"@abp/sweetalert2@~5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-5.0.1.tgz#acf2acfc04619c7907237238bfaeb63f2d75fb22" - integrity sha512-CPqXIaHK7Ff6i8gNhxoZ9r3te9LIEiDCUpdHNtgRVMCaLbywfkiLyirlfRIB6lxRWSw8BZ+M/azdp5uzidW8Vw== +"@abp/sweetalert2@~5.2.0-rc.2": + version "5.2.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-5.2.0-rc.2.tgz#15b6718b1378e8bd7e0ea019b965e7b51f0cb1ea" + integrity sha512-1ROKcfpu0Xyk7ebUFMNBhFgENcHCMj48+1Lj/OxdJH3U7KhyF5WEs54uYgn8EvY2wTCgOkHCnqeK9bRCp5M9+g== dependencies: - "@abp/core" "~5.0.1" - sweetalert2 "^11.0.18" + "@abp/core" "~5.2.0-rc.2" + sweetalert2 "^11.3.6" -"@abp/timeago@~5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-5.0.1.tgz#09ca6302304de09baa5ac8c72b950515ab0d0451" - integrity sha512-6onXho8R6eiWfncONZFBn18OwgQPKIaRM73rVevpRGJTf2pylcHtCp4uHGsoqgCc+TQU7FyoKTTkg4lfvCQa0A== +"@abp/timeago@~5.2.0-rc.2": + version "5.2.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-5.2.0-rc.2.tgz#e6ad0cb584515b95e47258976d726fd996b7f47d" + integrity sha512-D9Y7xfpP6neURDkP/WMrFh25G++0SUiGIDaCIElgymhNdVp2gm9pC633ShetMOFrPCSuOUvlzC2p4YkUdq0Lnw== dependencies: - "@abp/jquery" "~5.0.1" + "@abp/jquery" "~5.2.0-rc.2" timeago "^1.6.7" -"@abp/toastr@~5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-5.0.1.tgz#a3959df1de0c4640fabf508da9ccd3ed37ae2b03" - integrity sha512-ndL1uj2ce4PbGDzxh+QCIWYu+GAmW1Xwma4aJcq5zKo+xhlLJJnTe6QFGKr7wSsTVZMB7z1Pp2olvXH6an82+g== +"@abp/toastr@~5.2.0-rc.2": + version "5.2.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-5.2.0-rc.2.tgz#b5f013f1f00dab648da2fe1cf4ece6691e6eafc7" + integrity sha512-FSkva7zP3kJFSh6SlmvrgjPFJscJbmrgCilxGxPGVxlg5p9LNORgkotNk2yKsGHX0F0rnKJ4kHepTq7g+oGMdw== dependencies: - "@abp/jquery" "~5.0.1" + "@abp/jquery" "~5.2.0-rc.2" toastr "^2.1.4" -"@abp/utils@~5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-5.0.1.tgz#57934383004a21172bf7e08130813c08946894fb" - integrity sha512-WLCWe7iJ8krxsz8Z7E+8GDaGZuG/6PZDdqPcMIh95opi0kvcLxb+mjPXXpiXdtFzW7O09a+NaNOxorsEFxjoKw== +"@abp/utils@~5.2.0-rc.2": + version "5.2.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-5.2.0-rc.2.tgz#1280059ff3e948ae0827eaf06d916e5a90f8907b" + integrity sha512-/mo4dSXPkhCEbqyKunuURcF1cEzuJqRTPOGpjSrjDwOgymVSWp/AqqjJPBXuc4qrMfB4q9y+Iod5nslXp2cXeA== dependencies: just-compare "^1.3.0" -"@fortawesome/fontawesome-free@^5.13.0": - version "5.13.1" - resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-5.13.1.tgz#c53b4066edae16cd1fd669f687baf031b45fb9d6" - integrity sha512-D819f34FLHeBN/4xvw0HR0u7U2G7RqjPSggXqf7LktsxWQ48VAfGwvMrhcVuaZV2fF069c/619RdgCCms0DHhw== +"@fortawesome/fontawesome-free@^5.15.4": + version "5.15.4" + resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-5.15.4.tgz#ecda5712b61ac852c760d8b3c79c96adca5554e5" + integrity sha512-eYm8vijH/hpzr/6/1CJ/V/Eb1xQFW2nnUKArb3z+yUWv7HTwj6M7SP957oMjfZjAHU6qpoNc2wQvIxBLWYa/Jg== abbrev@1: version "1.1.1" @@ -391,12 +390,7 @@ bootstrap-datepicker@^1.9.0: dependencies: jquery ">=1.7.1 <4.0.0" -bootstrap-v4-rtl@4.6.0-1: - version "4.6.0-1" - resolved "https://registry.yarnpkg.com/bootstrap-v4-rtl/-/bootstrap-v4-rtl-4.6.0-1.tgz#8fc502e800308fb725151128dd288df1c027cd8e" - integrity sha512-ChcbO5JeEQx6/Yz40YZLq3A4RIWcCmCCiRpweF5wg32/Q8CfWrwDNpcDTJ2SU+aSAewUJoCSzf/tRxhAgnZuog== - -bootstrap@^5.1.0: +bootstrap@^5.1.3: version "5.1.3" resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-5.1.3.tgz#ba081b0c130f810fa70900acbc1c6d3c28fa8f34" integrity sha512-fcQztozJ8jToQWXxVuEyXWW+dSo8AiXWKwiSSrKWsRB/Qt+Ewwza+JWoLKiTuQLaEPhdNAJ7+Dosc9DOIqNy7Q== @@ -603,25 +597,18 @@ d@1: dependencies: es5-ext "^0.10.9" -datatables.net-bs5@^1.10.25: - version "1.11.3" - resolved "https://registry.yarnpkg.com/datatables.net-bs5/-/datatables.net-bs5-1.11.3.tgz#939d0e66fbf518718a519534a88fc88cd29405b0" - integrity sha512-u0tosKUR1XNpXzxOOt2NInnNYayt7GQoG+OM1xPRhdkZ7ZBD4oNF8S0aKve8yvSUq/ZwTMh4WJeh80GdmrJAdQ== +datatables.net-bs5@^1.11.4: + version "1.11.5" + resolved "https://registry.yarnpkg.com/datatables.net-bs5/-/datatables.net-bs5-1.11.5.tgz#593608d54aeb7f91bcbd80bde304155ba3795663" + integrity sha512-1zyh972GtuK1uAb9h8nP3jJ7f/3UgCDq69LAaZS2bVd4mEHECJ6vrZLacxrkOHOs/q/H3v5sEMeZ46vXz8ox4w== dependencies: - datatables.net ">=1.10.25" + datatables.net ">=1.11.3" jquery ">=1.7" -datatables.net@>=1.10.25: - version "1.11.3" - resolved "https://registry.yarnpkg.com/datatables.net/-/datatables.net-1.11.3.tgz#80e691036efcd62467558ee64c07dd566cb761b4" - integrity sha512-VMj5qEaTebpNurySkM6jy6sGpl+s6onPK8xJhYr296R/vUBnz1+id16NVqNf9z5aR076OGcpGHCuiTuy4E05oQ== - dependencies: - jquery ">=1.7" - -datatables.net@^1.10.21: - version "1.10.21" - resolved "https://registry.yarnpkg.com/datatables.net/-/datatables.net-1.10.21.tgz#f1d35c8e5c3eb7f5caef39e80cd5b836a8c77103" - integrity sha512-/bSZtxmf3GTpYcvEmwZ8q26I1yhSx8qklR2B+s1K8+/51UW/zc2zTYwJMqr/Z+iCYixAc00ildj4g2x0Qamolw== +datatables.net@>=1.11.3, datatables.net@^1.11.4: + version "1.11.5" + resolved "https://registry.yarnpkg.com/datatables.net/-/datatables.net-1.11.5.tgz#858a69953a01e1d5b18786769802117b04b8e3c9" + integrity sha512-nlFst2xfwSWaQgaOg5sXVG3cxYC0tH8E8d65289w9ROgF2TmLULOOpcdMpyxxUim/qEwVSEem42RjkTWEpr3eA== dependencies: jquery ">=1.7" @@ -1375,12 +1362,12 @@ jquery-mousewheel@>=3.0.6: version "3.1.13" resolved "https://registry.yarnpkg.com/jquery-mousewheel/-/jquery-mousewheel-3.1.13.tgz#06f0335f16e353a695e7206bf50503cb523a6ee5" -jquery-validation-unobtrusive@^3.2.11: - version "3.2.11" - resolved "https://registry.yarnpkg.com/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.2.11.tgz#175ee46380385a0e33ed320f255fad321f68f9f5" - integrity sha512-3FQPllaWdD+Aq55zJLGSW39+eXPDz1HhwAvrSwYi8zHQ8DVcu5IJ1HVeTiCl0BnCnrIBvfFU3zEB/DrGdcoRIQ== +jquery-validation-unobtrusive@^3.2.12: + version "3.2.12" + resolved "https://registry.yarnpkg.com/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.2.12.tgz#1d52841f653e516525c251e494b042e664dad8af" + integrity sha512-kPixGhVcuat7vZXngGFfSIksy4VlzZcHyRgnBIZdsfVneCU+D5sITC8T8dD/9c9K/Q+qkMlgp7ufJHz93nKSuQ== dependencies: - jquery ">=1.8" + jquery "^3.5.1" jquery-validation ">=1.16" jquery-validation@>=1.16: @@ -1389,12 +1376,12 @@ jquery-validation@>=1.16: dependencies: jquery "^1.7 || ^2.0 || ^3.1" -jquery-validation@^1.19.2: - version "1.19.2" - resolved "https://registry.yarnpkg.com/jquery-validation/-/jquery-validation-1.19.2.tgz#c602831b0d8c5881400af424e872757ce241eff9" - integrity sha512-yHaAqOGaAB7+p2u5lpzhhQVt3CBMUw3fHcuCJ7nXmXz0LWLHPN7yOhwnocp5nrn2SmnXR1jpV+whx2j1kLz1tQ== +jquery-validation@^1.19.3: + version "1.19.3" + resolved "https://registry.yarnpkg.com/jquery-validation/-/jquery-validation-1.19.3.tgz#50b350eba8b02bcfd119ba15f199487b7eb64086" + integrity sha512-iXxCS5W7STthSTMFX/NDZfWHBLbJ1behVK3eAgHXAV8/0vRa9M4tiqHvJMr39VGWHMGdlkhrtrkBuaL2UlE8yw== -jquery@>=1.12.0, jquery@>=1.7, jquery@>=1.7.2, jquery@>=1.8, "jquery@^1.7 || ^2.0 || ^3.1": +jquery@>=1.12.0, jquery@>=1.7, jquery@>=1.7.2, "jquery@^1.7 || ^2.0 || ^3.1": version "3.3.1" resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.3.1.tgz#958ce29e81c9790f31be7792df5d4d95fc57fbca" @@ -1403,7 +1390,7 @@ jquery@>=1.12.0, jquery@>=1.7, jquery@>=1.7.2, jquery@>=1.8, "jquery@^1.7 || ^2. resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.4.1.tgz#714f1f8d9dde4bdfa55764ba37ef214630d80ef2" integrity sha512-36+AdBzCL+y6qjw5Tx7HgzeGCzC81MDDgaUP8ld2zhx58HdqXGoBd+tHdrBMiyjGQs0Hxs/MLZTu/eHNJJuWPw== -jquery@~3.6.0: +jquery@^3.5.1, jquery@~3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.6.0.tgz#c72a09f15c1bdce142f49dbf1170bdf8adac2470" integrity sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw== @@ -1497,15 +1484,15 @@ load-json-file@^1.0.0: pinkie-promise "^2.0.0" strip-bom "^2.0.0" -lodash@^4.17.15: - version "4.17.15" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" - integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== +lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -luxon@^1.24.1: - version "1.24.1" - resolved "https://registry.yarnpkg.com/luxon/-/luxon-1.24.1.tgz#a8383266131ed4eaed4b5f430f96f3695403a52a" - integrity sha512-CgnIMKAWT0ghcuWFfCWBnWGOddM0zu6c4wZAWmD0NN7MZTnro0+833DF6tJep+xlxRPg4KtsYEHYLfTMBQKwYg== +luxon@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/luxon/-/luxon-2.3.1.tgz#f276b1b53fd9a740a60e666a541a7f6dbed4155a" + integrity sha512-I8vnjOmhXsMSlNMZlMkSOvgrxKJl0uOsEzdGgGNZuZPaS9KlefpE9KV95QFftlJSC+1UyCC9/I69R02cz/zcCA== make-iterator@^1.0.0: version "1.0.1" @@ -2356,10 +2343,10 @@ sver-compat@^1.5.0: es6-iterator "^2.0.1" es6-symbol "^3.1.1" -sweetalert2@^11.0.18: - version "11.3.3" - resolved "https://registry.yarnpkg.com/sweetalert2/-/sweetalert2-11.3.3.tgz#92ca0408380de8f29180788ce7ed5d5faf799cea" - integrity sha512-10Keqbmjng/+XpkpSOQ6dttpztl7XNohjnpC6bX6XFgm0WpRXM81YE0wmonGYOP6uyzd76vpfnZS04PdVvO31Q== +sweetalert2@^11.3.6: + version "11.4.6" + resolved "https://registry.yarnpkg.com/sweetalert2/-/sweetalert2-11.4.6.tgz#c17ae901150c8a89ea85b93cefe5c4791f32e68a" + integrity sha512-7UDJV8etrJQ6vJGh88k7D63qBKtwEl8JV7zIxmO2Frp8ZGQDgQQC6f9ivqiVwLRxoEyfxsn/v3T6Zykk7/vlEg== tar@^4: version "4.4.10" From 2c9b725554b280bea262941e8a5c8b3bc7210343 Mon Sep 17 00:00:00 2001 From: enisn Date: Wed, 23 Mar 2022 12:15:17 +0300 Subject: [PATCH 041/143] Fix CmsKit Tests --- .../Blogs/BlogPostPublicAppService_Tests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Blogs/BlogPostPublicAppService_Tests.cs b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Blogs/BlogPostPublicAppService_Tests.cs index 2301941920..f7a1ad3e7c 100644 --- a/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Blogs/BlogPostPublicAppService_Tests.cs +++ b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Blogs/BlogPostPublicAppService_Tests.cs @@ -26,7 +26,7 @@ public class BlogPostPublicAppService_Tests : CmsKitApplicationTestBase [Fact] public async Task GetListAsync_ShouldWorkProperly_WithExistingBlog() { - var blogPosts = await blogPostAppService.GetListAsync(cmsKitTestData.BlogSlug, new PagedAndSortedResultRequestDto { MaxResultCount = 2 }); + var blogPosts = await blogPostAppService.GetListAsync(cmsKitTestData.BlogSlug, new BlogPostGetListInput { MaxResultCount = 2 }); blogPosts.ShouldNotBeNull(); blogPosts.TotalCount.ShouldBe(2); From fe34681006020edd9a8cbc2a6d36c63be84cf55a Mon Sep 17 00:00:00 2001 From: enisn Date: Wed, 23 Mar 2022 12:15:35 +0300 Subject: [PATCH 042/143] Add simple test for GetAuthorsHasBlogPosts --- .../Blogs/BlogPostRepository_Test.cs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/modules/cms-kit/test/Volo.CmsKit.TestBase/Blogs/BlogPostRepository_Test.cs b/modules/cms-kit/test/Volo.CmsKit.TestBase/Blogs/BlogPostRepository_Test.cs index 0479ce75b2..4d696e916d 100644 --- a/modules/cms-kit/test/Volo.CmsKit.TestBase/Blogs/BlogPostRepository_Test.cs +++ b/modules/cms-kit/test/Volo.CmsKit.TestBase/Blogs/BlogPostRepository_Test.cs @@ -145,4 +145,14 @@ public abstract class BlogPostRepository_Test : CmsKitTestBase x.Id == testData.User1Id); + } } From df12120c4323c48f909f0ff7ee3ccfb30868b75f Mon Sep 17 00:00:00 2001 From: enisn Date: Wed, 23 Mar 2022 12:27:24 +0300 Subject: [PATCH 043/143] Fix MongoDB query for GetAuthorsHasBlogPosts --- .../MongoDB/Blogs/MongoBlogPostRepository.cs | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs index a2bae9e317..3b04f46fb6 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs @@ -104,7 +104,19 @@ public class MongoBlogPostRepository : MongoDbRepository> GetAuthorsHasBlogPosts(CancellationToken cancellationToken = default) { - var queryable = (await GetQueryableAsync()).Select(x => x.Author).Distinct(); + var blogPostQueryable = (await GetQueryableAsync()); + + var usersQueryable = (await GetDbContextAsync()).Collection().AsQueryable(); + + var queryable = blogPostQueryable + .Join( + usersQueryable, + o => o.AuthorId, + i => i.Id, + (blogPost, user) => new { blogPost, user }) + .Select(s => s.user) + .Distinct(); + return await AsyncExecuter.ToListAsync(queryable, GetCancellationToken(cancellationToken)); } } From c81536a91ab28fd3e2de9dca396e8e93a2108cda Mon Sep 17 00:00:00 2001 From: Hamza Albreem <94292623+braim23@users.noreply.github.com> Date: Wed, 23 Mar 2022 16:26:25 +0300 Subject: [PATCH 044/143] open link in new tab quick fix --- .../AbpIoLocalization/Www/Localization/Resources/en.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json index 2f2b4c8481..dbdd8b47ef 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json @@ -183,7 +183,7 @@ "InstallABPCLIInfo": "ABP CLI is the fastest way to start a new solution with the ABP framework. Install the ABP CLI using a command line window:", "DifferentLevelOfNamespaces": "You can use different levels of namespaces; e.g. BookStore, Acme.BookStore or Acme.Retail.BookStore.", "ABPCLIExamplesInfo": "The new command creates a layered MVC application with Entity Framework Core as the database provider. However, it has additional options.", - "SeeCliDocumentForMoreInformation": "Check out the ABP CLI document for more options or select the \"Direct Download\" tab above.", + "SeeCliDocumentForMoreInformation": "Check out the ABP CLI document for more options or select the \"Direct Download\" tab above.", "Optional": "Optional", "LocalFrameworkRef": "Keep the local project reference for the framework packages.", "BlobStoring": "BLOB Storing", From a676ab306760fbc2484db971ccbfe7c1d242e27b Mon Sep 17 00:00:00 2001 From: Musa Demir Date: Wed, 23 Mar 2022 22:40:20 +0300 Subject: [PATCH 045/143] rename GetAuthorsHasBlogPosts as GetAuthorsHasBlogPostsAsync --- .../Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs | 2 +- .../Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs | 2 +- .../ClientProxies/BlogPostPublicClientProxy.Generated.cs | 4 ++-- .../Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs | 4 ++-- .../Pages/Public/CmsKit/Blogs/Index.cshtml.cs | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs index 7f2b50c2a5..d411869bd2 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs @@ -13,5 +13,5 @@ public interface IBlogPostPublicAppService : IApplicationService Task GetAsync([NotNull] string blogSlug, [NotNull] string blogPostSlug); - Task> GetAuthorsHasBlogPosts(); + Task> GetAuthorsHasBlogPostsAsync(); } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs index 12543b0ed4..4d2af29f2d 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs @@ -46,7 +46,7 @@ public class BlogPostPublicAppService : CmsKitPublicAppServiceBase, IBlogPostPub ObjectMapper.Map, List>(blogPosts)); } - public virtual async Task> GetAuthorsHasBlogPosts() + public virtual async Task> GetAuthorsHasBlogPostsAsync() { var authors = await BlogPostRepository.GetAuthorsHasBlogPosts(); return ObjectMapper.Map, List>(authors); diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/BlogPostPublicClientProxy.Generated.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/BlogPostPublicClientProxy.Generated.cs index 62a79cf6a5..9cc926515d 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/BlogPostPublicClientProxy.Generated.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/BlogPostPublicClientProxy.Generated.cs @@ -35,8 +35,8 @@ public partial class BlogPostPublicClientProxy : ClientProxyBase> GetAuthorsHasBlogPosts() + public virtual async Task> GetAuthorsHasBlogPostsAsync() { - return await RequestAsync>(nameof(GetAuthorsHasBlogPosts)); + return await RequestAsync>(nameof(GetAuthorsHasBlogPostsAsync)); } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs index 6db900c6ad..a08ccdfa95 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs @@ -39,8 +39,8 @@ public class BlogPostPublicController : CmsKitPublicControllerBase, IBlogPostPub } [HttpGet] - public virtual Task> GetAuthorsHasBlogPosts() + public virtual Task> GetAuthorsHasBlogPostsAsync() { - return BlogPostPublicAppService.GetAuthorsHasBlogPosts(); + return BlogPostPublicAppService.GetAuthorsHasBlogPostsAsync(); } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml.cs index 92c4ff235c..c9dc49931d 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml.cs @@ -49,6 +49,6 @@ public class IndexModel : CmsKitPublicPageModelBase AuthorId = AuthorId }); - Authors = await BlogPostPublicAppService.GetAuthorsHasBlogPosts(); + Authors = await BlogPostPublicAppService.GetAuthorsHasBlogPostsAsync(); } } From 2e9a25dc0628a55a2af309b28da8d592c5cd2a45 Mon Sep 17 00:00:00 2001 From: Musa Demir Date: Wed, 23 Mar 2022 22:42:28 +0300 Subject: [PATCH 046/143] add [NotNullAttribute] --- .../Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs | 2 +- .../Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs index d411869bd2..02b6d2a5f4 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs @@ -9,7 +9,7 @@ namespace Volo.CmsKit.Public.Blogs; public interface IBlogPostPublicAppService : IApplicationService { - Task> GetListAsync(string blogSlug, BlogPostGetListInput input); + Task> GetListAsync([NotNull] string blogSlug, BlogPostGetListInput input); Task GetAsync([NotNull] string blogSlug, [NotNull] string blogPostSlug); diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs index 4d2af29f2d..62a970cf2f 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs @@ -34,7 +34,7 @@ public class BlogPostPublicAppService : CmsKitPublicAppServiceBase, IBlogPostPub return ObjectMapper.Map(blogPost); } - public virtual async Task> GetListAsync(string blogSlug, BlogPostGetListInput input) + public virtual async Task> GetListAsync([NotNull] string blogSlug, BlogPostGetListInput input) { var blog = await BlogRepository.GetBySlugAsync(blogSlug); From ae27b07a77f8b6157195f11da9be634687c98439 Mon Sep 17 00:00:00 2001 From: Musa Demir <48536631+demirmusa@users.noreply.github.com> Date: Wed, 23 Mar 2022 22:43:17 +0300 Subject: [PATCH 047/143] Update modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs Co-authored-by: Enis Necipoglu --- .../Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs index 6db900c6ad..b3ba981b43 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs @@ -39,6 +39,7 @@ public class BlogPostPublicController : CmsKitPublicControllerBase, IBlogPostPub } [HttpGet] + [Route("authors") public virtual Task> GetAuthorsHasBlogPosts() { return BlogPostPublicAppService.GetAuthorsHasBlogPosts(); From 0cd4c2bbf546bf8857e3448871079d554513a863 Mon Sep 17 00:00:00 2001 From: Musa Demir Date: Wed, 23 Mar 2022 23:14:53 +0300 Subject: [PATCH 048/143] allow filtering by user for GetCountAsync function --- .../Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs | 2 +- .../Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostRepository.cs | 1 + .../Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs | 2 ++ .../Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs | 2 ++ .../Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs | 2 +- 5 files changed, 7 insertions(+), 2 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs index fbea1d81c7..58ea5b9b83 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs @@ -92,7 +92,7 @@ public class BlogPostAdminAppService : CmsKitAppServiceBase, IBlogPostAdminAppSe var blogPosts = await BlogPostRepository.GetListAsync(input.Filter, input.BlogId, input.AuthorId, input.MaxResultCount, input.SkipCount, input.Sorting); - var count = await BlogPostRepository.GetCountAsync(input.Filter); + var count = await BlogPostRepository.GetCountAsync(input.Filter, input.BlogId, input.AuthorId); var dtoList = blogPosts.Select(x => { diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostRepository.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostRepository.cs index 6e650113d3..fed0eed037 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostRepository.cs @@ -12,6 +12,7 @@ public interface IBlogPostRepository : IBasicRepository Task GetCountAsync( string filter = null, Guid? blogId = null, + Guid? authorId = null, CancellationToken cancellationToken = default); Task> GetListAsync( diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs index cbd8fa3cfe..cfc39a62c7 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs @@ -41,10 +41,12 @@ public class EfCoreBlogPostRepository : EfCoreRepository GetCountAsync( string filter = null, Guid? blogId = null, + Guid? authorId = null, CancellationToken cancellationToken = default) { var queryable = (await GetDbSetAsync()) .WhereIf(blogId.HasValue, x => x.BlogId == blogId) + .WhereIf(authorId.HasValue, x => x.AuthorId == authorId) .WhereIf(!string.IsNullOrEmpty(filter), x => x.Title.Contains(filter) || x.Slug.Contains(filter)); var count = await queryable.CountAsync(GetCancellationToken(cancellationToken)); diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs index 3b04f46fb6..5f72246d93 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs @@ -42,6 +42,7 @@ public class MongoBlogPostRepository : MongoDbRepository GetCountAsync( string filter = null, Guid? blogId = null, + Guid? authorId = null, CancellationToken cancellationToken = default) { var token = GetCancellationToken(cancellationToken); @@ -49,6 +50,7 @@ public class MongoBlogPostRepository : MongoDbRepository>(!string.IsNullOrWhiteSpace(filter), x => x.Title.Contains(filter) || x.Slug.Contains(filter)) .WhereIf>(blogId.HasValue, x => x.BlogId == blogId) + .WhereIf>(authorId.HasValue, x => x.AuthorId == authorId) .CountAsync(GetCancellationToken(cancellationToken)); } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs index 62a970cf2f..a9121a5c2b 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs @@ -42,7 +42,7 @@ public class BlogPostPublicAppService : CmsKitPublicAppServiceBase, IBlogPostPub input.SkipCount, input.Sorting); return new PagedResultDto( - await BlogPostRepository.GetCountAsync(blogId: blog.Id), + await BlogPostRepository.GetCountAsync(blogId: blog.Id, authorId: input.AuthorId), ObjectMapper.Map, List>(blogPosts)); } From 859d7ceb218419a2ab5b789e80e3654f260d2b7c Mon Sep 17 00:00:00 2001 From: Musa Demir Date: Wed, 23 Mar 2022 23:15:12 +0300 Subject: [PATCH 049/143] Test user filter --- .../Blogs/BlogPostPublicAppService_Tests.cs | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Blogs/BlogPostPublicAppService_Tests.cs b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Blogs/BlogPostPublicAppService_Tests.cs index f7a1ad3e7c..64725fc700 100644 --- a/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Blogs/BlogPostPublicAppService_Tests.cs +++ b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Blogs/BlogPostPublicAppService_Tests.cs @@ -7,6 +7,7 @@ using System.Threading.Tasks; using Volo.Abp.Application.Dtos; using Volo.Abp.Domain.Entities; using Volo.CmsKit.Public.Blogs; +using Volo.CmsKit.Users; using Xunit; namespace Volo.CmsKit.Blogs; @@ -17,10 +18,20 @@ public class BlogPostPublicAppService_Tests : CmsKitApplicationTestBase private readonly CmsKitTestData cmsKitTestData; + private readonly ICmsUserRepository userRepository; + + private readonly IBlogRepository blogRepository; + private readonly IBlogPostRepository blogPostRepository; + + private readonly BlogPostManager blogPostManager; public BlogPostPublicAppService_Tests() { blogPostAppService = GetRequiredService(); cmsKitTestData = GetRequiredService(); + userRepository = GetRequiredService(); + blogRepository = GetRequiredService(); + blogPostManager = GetRequiredService(); + blogPostRepository = GetRequiredService(); } [Fact] @@ -62,4 +73,49 @@ public class BlogPostPublicAppService_Tests : CmsKitApplicationTestBase exception.EntityType.ShouldBe(typeof(Blog)); } + + [Fact] + public async Task GetListAsync_ShouldFilterByUser() + { + var user2 = await userRepository.GetAsync(cmsKitTestData.User2Id); + var blog = await blogRepository.GetAsync(cmsKitTestData.Blog_Id); + + var blogPost = await blogPostManager.CreateAsync( + user2, + blog, + cmsKitTestData.BlogPost_1_Title + "by user2", + cmsKitTestData.BlogPost_1_Slug + "by user2", + "Short desc 1", + "Blog Post 1 Content" + ); + + await blogPostRepository.InsertAsync(blogPost); + + //should get all not filtered by user + var blogPosts = await blogPostAppService.GetListAsync(cmsKitTestData.BlogSlug, + new BlogPostGetListInput {}); + + blogPosts.ShouldNotBeNull(); + blogPosts.TotalCount.ShouldBe(3); + blogPosts.Items.ShouldNotBeEmpty(); + blogPosts.Items.Count.ShouldBe(3); + + //should get only one filtered by user + blogPosts = await blogPostAppService.GetListAsync(cmsKitTestData.BlogSlug, + new BlogPostGetListInput {AuthorId = user2.Id}); + + blogPosts.ShouldNotBeNull(); + blogPosts.TotalCount.ShouldBe(1); + blogPosts.Items.ShouldNotBeEmpty(); + blogPosts.Items.Count.ShouldBe(1); + + //should get filtered by user1 + blogPosts = await blogPostAppService.GetListAsync(cmsKitTestData.BlogSlug, + new BlogPostGetListInput {AuthorId = cmsKitTestData.User1Id}); + + blogPosts.ShouldNotBeNull(); + blogPosts.TotalCount.ShouldBe(2); + blogPosts.Items.ShouldNotBeEmpty(); + blogPosts.Items.Count.ShouldBe(2); + } } From d5dc276f590da9f9ccbdabf60b2173c701ef84fa Mon Sep 17 00:00:00 2001 From: selman koc <64414348+skoc10@users.noreply.github.com> Date: Thu, 24 Mar 2022 17:44:34 +0300 Subject: [PATCH 050/143] unit test added trx --- nupkg/unit_test.ps1 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nupkg/unit_test.ps1 b/nupkg/unit_test.ps1 index 6f53d6c738..07cdfe3655 100644 --- a/nupkg/unit_test.ps1 +++ b/nupkg/unit_test.ps1 @@ -4,7 +4,7 @@ foreach($solution in $solutions) { $solutionFolder = Join-Path $rootFolder $solution Set-Location $solutionFolder - dotnet test --no-build + dotnet test --no-build --logger trx -} \ No newline at end of file +} From 9834f1e4182b3029a35f4430dd288cdcf68aba56 Mon Sep 17 00:00:00 2001 From: Musa Demir Date: Fri, 25 Mar 2022 02:34:50 +0300 Subject: [PATCH 051/143] add status to BlogPost --- .../CmsKit/Admin/Blogs/BlogPostListDto.cs | 3 +++ .../Admin/Blogs/BlogPostAdminAppService.cs | 16 +++++++------ .../Volo/CmsKit/Blogs/BlogPostStatus.cs | 7 ++++++ .../Volo/CmsKit/Blogs/BlogPost.cs | 19 +++++++++++++-- .../Volo/CmsKit/Blogs/BlogPostManager.cs | 24 ++++++++++--------- .../Volo/CmsKit/Blogs/IBlogPostRepository.cs | 2 ++ .../CmsKit/Blogs/EfCoreBlogPostRepository.cs | 12 ++++++---- 7 files changed, 59 insertions(+), 24 deletions(-) create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Blogs/BlogPostStatus.cs diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogPostListDto.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogPostListDto.cs index 0953bf2c00..fc8cbc9e0e 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogPostListDto.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogPostListDto.cs @@ -1,6 +1,7 @@ using System; using Volo.Abp.Application.Dtos; using Volo.Abp.Auditing; +using Volo.CmsKit.Blogs; namespace Volo.CmsKit.Admin.Blogs; @@ -24,4 +25,6 @@ public class BlogPostListDto : EntityDto, IHasCreationTime, IHasModificati public DateTime CreationTime { get; set; } public DateTime? LastModificationTime { get; set; } + + public BlogPostStatus? Status { get; set; } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs index 58ea5b9b83..9968f6610c 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs @@ -42,13 +42,15 @@ public class BlogPostAdminAppService : CmsKitAppServiceBase, IBlogPostAdminAppSe var blog = await BlogRepository.GetAsync(input.BlogId); var blogPost = await BlogPostManager.CreateAsync( - author, - blog, - input.Title, - input.Slug, - input.ShortDescription, - input.Content, - input.CoverImageMediaId); + author, + blog, + input.Title, + input.Slug, + BlogPostStatus.Draft, + input.ShortDescription, + input.Content, + input.CoverImageMediaId + ); await BlogPostRepository.InsertAsync(blogPost); diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Blogs/BlogPostStatus.cs b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Blogs/BlogPostStatus.cs new file mode 100644 index 0000000000..e0a2385d7e --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Blogs/BlogPostStatus.cs @@ -0,0 +1,7 @@ +namespace Volo.CmsKit.Blogs; + +public enum BlogPostStatus +{ + Draft, + Published +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogPost.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogPost.cs index faf6c4bcb6..5116d0a95e 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogPost.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogPost.cs @@ -29,7 +29,9 @@ public class BlogPost : FullAuditedAggregateRoot, IMultiTenant public Guid AuthorId { get; set; } public virtual CmsUser Author { get; set; } - + + public virtual BlogPostStatus Status { get; set; } + protected BlogPost() { } @@ -43,7 +45,9 @@ public class BlogPost : FullAuditedAggregateRoot, IMultiTenant [CanBeNull] string shortDescription = null, [CanBeNull] string content = null, [CanBeNull] Guid? coverImageMediaId = null, - [CanBeNull] Guid? tenantId = null) : base(id) + [CanBeNull] Guid? tenantId = null, + [CanBeNull] BlogPostStatus? state = null + ) : base(id) { TenantId = tenantId; BlogId = blogId; @@ -53,6 +57,7 @@ public class BlogPost : FullAuditedAggregateRoot, IMultiTenant SetShortDescription(shortDescription); SetContent(content); CoverImageMediaId = coverImageMediaId; + Status = state ?? BlogPostStatus.Draft; } public virtual void SetTitle(string title) @@ -76,4 +81,14 @@ public class BlogPost : FullAuditedAggregateRoot, IMultiTenant { Content = Check.Length(content, nameof(content), BlogPostConsts.MaxContentLength); } + + public virtual void SetDraft() + { + Status = BlogPostStatus.Draft; + } + + public virtual void SetPublished() + { + Status = BlogPostStatus.Published; + } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogPostManager.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogPostManager.cs index a19643308d..9e21078707 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogPostManager.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogPostManager.cs @@ -30,6 +30,7 @@ public class BlogPostManager : DomainService [NotNull] Blog blog, [NotNull] string title, [NotNull] string slug, + [NotNull] BlogPostStatus status, [CanBeNull] string shortDescription = null, [CanBeNull] string content = null, [CanBeNull] Guid? coverImageMediaId = null) @@ -40,17 +41,18 @@ public class BlogPostManager : DomainService Check.NotNullOrEmpty(slug, nameof(slug)); var blogPost = new BlogPost( - GuidGenerator.Create(), - blog.Id, - author.Id, - title, - slug, - shortDescription, - content, - coverImageMediaId, - CurrentTenant.Id - ); - + GuidGenerator.Create(), + blog.Id, + author.Id, + title, + slug, + shortDescription, + content, + coverImageMediaId, + CurrentTenant.Id, + status + ); + await CheckSlugExistenceAsync(blog.Id, blogPost.Slug); return blogPost; diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostRepository.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostRepository.cs index fed0eed037..d73512a204 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostRepository.cs @@ -13,12 +13,14 @@ public interface IBlogPostRepository : IBasicRepository string filter = null, Guid? blogId = null, Guid? authorId = null, + BlogPostStatus? statusFilter = null, CancellationToken cancellationToken = default); Task> GetListAsync( string filter = null, Guid? blogId = null, Guid? authorId = null, + BlogPostStatus? statusFilter = null, int maxResultCount = int.MaxValue, int skipCount = 0, string sorting = null, diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs index cfc39a62c7..cc78ffa698 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs @@ -42,12 +42,14 @@ public class EfCoreBlogPostRepository : EfCoreRepository x.BlogId == blogId) - .WhereIf(authorId.HasValue, x => x.AuthorId == authorId) - .WhereIf(!string.IsNullOrEmpty(filter), x => x.Title.Contains(filter) || x.Slug.Contains(filter)); + .WhereIf(blogId.HasValue, x => x.BlogId == blogId) + .WhereIf(authorId.HasValue, x => x.AuthorId == authorId) + .WhereIf(statusFilter.HasValue, x => x.Status == statusFilter) + .WhereIf(!string.IsNullOrEmpty(filter), x => x.Title.Contains(filter) || x.Slug.Contains(filter)); var count = await queryable.CountAsync(GetCancellationToken(cancellationToken)); return count; @@ -57,6 +59,7 @@ public class EfCoreBlogPostRepository : EfCoreRepository x.BlogId == blogId) .WhereIf(!string.IsNullOrWhiteSpace(filter), x => x.Title.Contains(filter) || x.Slug.Contains(filter)) - .WhereIf(authorId.HasValue, x => x.AuthorId == authorId); + .WhereIf(authorId.HasValue, x => x.AuthorId == authorId) + .WhereIf(statusFilter.HasValue, x => x.Status == statusFilter); queryable = queryable.OrderBy(sorting.IsNullOrEmpty() ? $"{nameof(BlogPost.CreationTime)} desc" : sorting); From c756673a26e00204e86e85fd28d1209c97bfe757 Mon Sep 17 00:00:00 2001 From: Musa Demir Date: Fri, 25 Mar 2022 02:35:36 +0300 Subject: [PATCH 052/143] add migration --- ...324203918_Added_BlogPostStatus.Designer.cs | 2118 +++++++++++++++++ .../20220324203918_Added_BlogPostStatus.cs | 26 + .../UnifiedDbContextModelSnapshot.cs | 3 + 3 files changed, 2147 insertions(+) create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20220324203918_Added_BlogPostStatus.Designer.cs create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20220324203918_Added_BlogPostStatus.cs diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20220324203918_Added_BlogPostStatus.Designer.cs b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20220324203918_Added_BlogPostStatus.Designer.cs new file mode 100644 index 0000000000..d04ca4c0ed --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20220324203918_Added_BlogPostStatus.Designer.cs @@ -0,0 +1,2118 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Volo.Abp.EntityFrameworkCore; +using Volo.CmsKit.EntityFrameworkCore; + +#nullable disable + +namespace Volo.CmsKit.Migrations +{ + [DbContext(typeof(UnifiedDbContext))] + [Migration("20220324203918_Added_BlogPostStatus")] + partial class Added_BlogPostStatus + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) + .HasAnnotation("ProductVersion", "6.0.0") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder, 1L, 1); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ApplicationName") + .HasMaxLength(96) + .HasColumnType("nvarchar(96)") + .HasColumnName("ApplicationName"); + + b.Property("BrowserInfo") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("BrowserInfo"); + + b.Property("ClientId") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("ClientId"); + + b.Property("ClientIpAddress") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("ClientIpAddress"); + + b.Property("ClientName") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("ClientName"); + + b.Property("Comments") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("Comments"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CorrelationId") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("CorrelationId"); + + b.Property("Exceptions") + .HasColumnType("nvarchar(max)"); + + b.Property("ExecutionDuration") + .HasColumnType("int") + .HasColumnName("ExecutionDuration"); + + b.Property("ExecutionTime") + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("HttpMethod") + .HasMaxLength(16) + .HasColumnType("nvarchar(16)") + .HasColumnName("HttpMethod"); + + b.Property("HttpStatusCode") + .HasColumnType("int") + .HasColumnName("HttpStatusCode"); + + b.Property("ImpersonatorTenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("ImpersonatorTenantId"); + + b.Property("ImpersonatorTenantName") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("ImpersonatorTenantName"); + + b.Property("ImpersonatorUserId") + .HasColumnType("uniqueidentifier") + .HasColumnName("ImpersonatorUserId"); + + b.Property("ImpersonatorUserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("ImpersonatorUserName"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("TenantName") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("TenantName"); + + b.Property("Url") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("Url"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier") + .HasColumnName("UserId"); + + b.Property("UserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("UserName"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "ExecutionTime"); + + b.HasIndex("TenantId", "UserId", "ExecutionTime"); + + b.ToTable("AbpAuditLogs", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("AuditLogId") + .HasColumnType("uniqueidentifier") + .HasColumnName("AuditLogId"); + + b.Property("ExecutionDuration") + .HasColumnType("int") + .HasColumnName("ExecutionDuration"); + + b.Property("ExecutionTime") + .HasColumnType("datetime2") + .HasColumnName("ExecutionTime"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("MethodName") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("MethodName"); + + b.Property("Parameters") + .HasMaxLength(2000) + .HasColumnType("nvarchar(2000)") + .HasColumnName("Parameters"); + + b.Property("ServiceName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("ServiceName"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("AuditLogId"); + + b.HasIndex("TenantId", "ServiceName", "MethodName", "ExecutionTime"); + + b.ToTable("AbpAuditLogActions", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("AuditLogId") + .HasColumnType("uniqueidentifier") + .HasColumnName("AuditLogId"); + + b.Property("ChangeTime") + .HasColumnType("datetime2") + .HasColumnName("ChangeTime"); + + b.Property("ChangeType") + .HasColumnType("tinyint") + .HasColumnName("ChangeType"); + + b.Property("EntityId") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("EntityId"); + + b.Property("EntityTenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("EntityTypeFullName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("EntityTypeFullName"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("AuditLogId"); + + b.HasIndex("TenantId", "EntityTypeFullName", "EntityId"); + + b.ToTable("AbpEntityChanges", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("EntityChangeId") + .HasColumnType("uniqueidentifier"); + + b.Property("NewValue") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("NewValue"); + + b.Property("OriginalValue") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("OriginalValue"); + + b.Property("PropertyName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("PropertyName"); + + b.Property("PropertyTypeFullName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("PropertyTypeFullName"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("EntityChangeId"); + + b.ToTable("AbpEntityPropertyChanges", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.BlobStoring.Database.DatabaseBlob", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("ContainerId") + .HasColumnType("uniqueidentifier"); + + b.Property("Content") + .HasMaxLength(2147483647) + .HasColumnType("varbinary(max)"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("ContainerId"); + + b.HasIndex("TenantId", "ContainerId", "Name"); + + b.ToTable("AbpBlobs", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.BlobStoring.Database.DatabaseBlobContainer", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Name"); + + b.ToTable("AbpBlobContainers", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.FeatureManagement.FeatureValue", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("ProviderKey") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ProviderName") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.HasKey("Id"); + + b.HasIndex("Name", "ProviderName", "ProviderKey") + .IsUnique() + .HasFilter("[ProviderName] IS NOT NULL AND [ProviderKey] IS NOT NULL"); + + b.ToTable("AbpFeatureValues", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityClaimType", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("Description") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsStatic") + .HasColumnType("bit"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("Regex") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)"); + + b.Property("RegexDescription") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("Required") + .HasColumnType("bit"); + + b.Property("ValueType") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("AbpClaimTypes", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityLinkUser", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("SourceTenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("SourceUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("TargetTenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("TargetUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("SourceUserId", "SourceTenantId", "TargetUserId", "TargetTenantId") + .IsUnique() + .HasFilter("[SourceTenantId] IS NOT NULL AND [TargetTenantId] IS NOT NULL"); + + b.ToTable("AbpLinkUsers", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsDefault") + .HasColumnType("bit") + .HasColumnName("IsDefault"); + + b.Property("IsPublic") + .HasColumnType("bit") + .HasColumnName("IsPublic"); + + b.Property("IsStatic") + .HasColumnType("bit") + .HasColumnName("IsStatic"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("NormalizedName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedName"); + + b.ToTable("AbpRoles", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ClaimType") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("ClaimValue") + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)"); + + b.Property("RoleId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.ToTable("AbpRoleClaims", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentitySecurityLog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Action") + .HasMaxLength(96) + .HasColumnType("nvarchar(96)"); + + b.Property("ApplicationName") + .HasMaxLength(96) + .HasColumnType("nvarchar(96)"); + + b.Property("BrowserInfo") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)"); + + b.Property("ClientId") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ClientIpAddress") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CorrelationId") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("CreationTime") + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("Identity") + .HasMaxLength(96) + .HasColumnType("nvarchar(96)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("TenantName") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("UserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Action"); + + b.HasIndex("TenantId", "ApplicationName"); + + b.HasIndex("TenantId", "Identity"); + + b.HasIndex("TenantId", "UserId"); + + b.ToTable("AbpSecurityLogs", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("AccessFailedCount") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasDefaultValue(0) + .HasColumnName("AccessFailedCount"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("Email") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("Email"); + + b.Property("EmailConfirmed") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("EmailConfirmed"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsActive") + .HasColumnType("bit"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("IsExternal") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsExternal"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("LockoutEnabled") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("LockoutEnabled"); + + b.Property("LockoutEnd") + .HasColumnType("datetimeoffset"); + + b.Property("Name") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("Name"); + + b.Property("NormalizedEmail") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("NormalizedEmail"); + + b.Property("NormalizedUserName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("NormalizedUserName"); + + b.Property("PasswordHash") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("PasswordHash"); + + b.Property("PhoneNumber") + .HasMaxLength(16) + .HasColumnType("nvarchar(16)") + .HasColumnName("PhoneNumber"); + + b.Property("PhoneNumberConfirmed") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("PhoneNumberConfirmed"); + + b.Property("SecurityStamp") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("SecurityStamp"); + + b.Property("Surname") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("Surname"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("TwoFactorEnabled") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("TwoFactorEnabled"); + + b.Property("UserName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("UserName"); + + b.HasKey("Id"); + + b.HasIndex("Email"); + + b.HasIndex("NormalizedEmail"); + + b.HasIndex("NormalizedUserName"); + + b.HasIndex("UserName"); + + b.ToTable("AbpUsers", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ClaimType") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("ClaimValue") + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AbpUserClaims", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b => + { + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("LoginProvider") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ProviderDisplayName") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("ProviderKey") + .IsRequired() + .HasMaxLength(196) + .HasColumnType("nvarchar(196)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("UserId", "LoginProvider"); + + b.HasIndex("LoginProvider", "ProviderKey"); + + b.ToTable("AbpUserLogins", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserOrganizationUnit", b => + { + b.Property("OrganizationUnitId") + .HasColumnType("uniqueidentifier"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("OrganizationUnitId", "UserId"); + + b.HasIndex("UserId", "OrganizationUnitId"); + + b.ToTable("AbpUserOrganizationUnits", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => + { + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("RoleId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("UserId", "RoleId"); + + b.HasIndex("RoleId", "UserId"); + + b.ToTable("AbpUserRoles", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b => + { + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("LoginProvider") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("Name") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("Value") + .HasColumnType("nvarchar(max)"); + + b.HasKey("UserId", "LoginProvider", "Name"); + + b.ToTable("AbpUserTokens", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Code") + .IsRequired() + .HasMaxLength(95) + .HasColumnType("nvarchar(95)") + .HasColumnName("Code"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("DisplayName"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("ParentId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("Code"); + + b.HasIndex("ParentId"); + + b.ToTable("AbpOrganizationUnits", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnitRole", b => + { + b.Property("OrganizationUnitId") + .HasColumnType("uniqueidentifier"); + + b.Property("RoleId") + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("OrganizationUnitId", "RoleId"); + + b.HasIndex("RoleId", "OrganizationUnitId"); + + b.ToTable("AbpOrganizationUnitRoles", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionGrant", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("ProviderKey") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ProviderName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Name", "ProviderName", "ProviderKey") + .IsUnique() + .HasFilter("[TenantId] IS NOT NULL"); + + b.ToTable("AbpPermissionGrants", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.SettingManagement.Setting", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("ProviderKey") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ProviderName") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(2048) + .HasColumnType("nvarchar(2048)"); + + b.HasKey("Id"); + + b.HasIndex("Name", "ProviderName", "ProviderKey") + .IsUnique() + .HasFilter("[ProviderName] IS NOT NULL AND [ProviderKey] IS NOT NULL"); + + b.ToTable("AbpSettings", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.TenantManagement.Tenant", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.HasKey("Id"); + + b.HasIndex("Name"); + + b.ToTable("AbpTenants", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.TenantManagement.TenantConnectionString", b => + { + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)"); + + b.HasKey("TenantId", "Name"); + + b.ToTable("AbpTenantConnectionStrings", (string)null); + }); + + modelBuilder.Entity("Volo.CmsKit.Blogs.Blog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("Slug") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("CmsBlogs", (string)null); + }); + + modelBuilder.Entity("Volo.CmsKit.Blogs.BlogFeature", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("BlogId") + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("FeatureName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("IsEnabled") + .HasColumnType("bit"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.HasKey("Id"); + + b.ToTable("CmsBlogFeatures", (string)null); + }); + + modelBuilder.Entity("Volo.CmsKit.Blogs.BlogPost", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("AuthorId") + .HasColumnType("uniqueidentifier"); + + b.Property("BlogId") + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("Content") + .HasMaxLength(2147483647) + .HasColumnType("nvarchar(max)"); + + b.Property("CoverImageMediaId") + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("ShortDescription") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("Slug") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("Status") + .HasColumnType("int"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("Title") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.HasKey("Id"); + + b.HasIndex("AuthorId"); + + b.HasIndex("Slug", "BlogId"); + + b.ToTable("CmsBlogPosts", (string)null); + }); + + modelBuilder.Entity("Volo.CmsKit.Comments.Comment", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("EntityId") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("EntityType") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("RepliedCommentId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("Text") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("nvarchar(512)"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "RepliedCommentId"); + + b.HasIndex("TenantId", "EntityType", "EntityId"); + + b.ToTable("CmsComments", (string)null); + }); + + modelBuilder.Entity("Volo.CmsKit.GlobalResources.GlobalResource", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(2147483647) + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("CmsGlobalResources", (string)null); + }); + + modelBuilder.Entity("Volo.CmsKit.MediaDescriptors.MediaDescriptor", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("EntityType") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("MimeType") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.Property("Size") + .HasMaxLength(2147483647) + .HasColumnType("bigint"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("CmsMediaDescriptors", (string)null); + }); + + modelBuilder.Entity("Volo.CmsKit.Menus.MenuItem", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("CssClass") + .HasColumnType("nvarchar(max)"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ElementId") + .HasColumnType("nvarchar(max)"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("Icon") + .HasColumnType("nvarchar(max)"); + + b.Property("IsActive") + .HasColumnType("bit"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Order") + .HasColumnType("int"); + + b.Property("PageId") + .HasColumnType("uniqueidentifier"); + + b.Property("ParentId") + .HasColumnType("uniqueidentifier"); + + b.Property("Target") + .HasColumnType("nvarchar(max)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("Url") + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)"); + + b.HasKey("Id"); + + b.ToTable("CmsMenuItems", (string)null); + }); + + modelBuilder.Entity("Volo.CmsKit.Pages.Page", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("Content") + .HasMaxLength(2147483647) + .HasColumnType("nvarchar(max)"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Script") + .HasColumnType("nvarchar(max)"); + + b.Property("Slug") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("Style") + .HasColumnType("nvarchar(max)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("Title") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Slug"); + + b.ToTable("CmsPages", (string)null); + }); + + modelBuilder.Entity("Volo.CmsKit.Ratings.Rating", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("EntityId") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("EntityType") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("StarCount") + .HasColumnType("smallint"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "EntityType", "EntityId", "CreatorId"); + + b.ToTable("CmsRatings", (string)null); + }); + + modelBuilder.Entity("Volo.CmsKit.Reactions.UserReaction", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("EntityId") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("EntityType") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ReactionName") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("nvarchar(32)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "EntityType", "EntityId", "ReactionName"); + + b.HasIndex("TenantId", "CreatorId", "EntityType", "EntityId", "ReactionName"); + + b.ToTable("CmsUserReactions", (string)null); + }); + + modelBuilder.Entity("Volo.CmsKit.Tags.EntityTag", b => + { + b.Property("EntityId") + .HasColumnType("nvarchar(450)"); + + b.Property("TagId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("EntityId", "TagId"); + + b.HasIndex("TenantId", "EntityId", "TagId"); + + b.ToTable("CmsEntityTags", (string)null); + }); + + modelBuilder.Entity("Volo.CmsKit.Tags.Tag", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("EntityType") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("nvarchar(32)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Name"); + + b.ToTable("CmsTags", (string)null); + }); + + modelBuilder.Entity("Volo.CmsKit.Users.CmsUser", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("Email") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("Email"); + + b.Property("EmailConfirmed") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("EmailConfirmed"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("Name") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("Name"); + + b.Property("PhoneNumber") + .HasMaxLength(16) + .HasColumnType("nvarchar(16)") + .HasColumnName("PhoneNumber"); + + b.Property("PhoneNumberConfirmed") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("PhoneNumberConfirmed"); + + b.Property("Surname") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("Surname"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("UserName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("UserName"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Email"); + + b.HasIndex("TenantId", "UserName"); + + b.ToTable("CmsUsers", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => + { + b.HasOne("Volo.Abp.AuditLogging.AuditLog", null) + .WithMany("Actions") + .HasForeignKey("AuditLogId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => + { + b.HasOne("Volo.Abp.AuditLogging.AuditLog", null) + .WithMany("EntityChanges") + .HasForeignKey("AuditLogId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b => + { + b.HasOne("Volo.Abp.AuditLogging.EntityChange", null) + .WithMany("PropertyChanges") + .HasForeignKey("EntityChangeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.BlobStoring.Database.DatabaseBlob", b => + { + b.HasOne("Volo.Abp.BlobStoring.Database.DatabaseBlobContainer", null) + .WithMany() + .HasForeignKey("ContainerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => + { + b.HasOne("Volo.Abp.Identity.IdentityRole", null) + .WithMany("Claims") + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Claims") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Logins") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserOrganizationUnit", b => + { + b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) + .WithMany() + .HasForeignKey("OrganizationUnitId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("OrganizationUnits") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => + { + b.HasOne("Volo.Abp.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Roles") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Tokens") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => + { + b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) + .WithMany() + .HasForeignKey("ParentId"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnitRole", b => + { + b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) + .WithMany("Roles") + .HasForeignKey("OrganizationUnitId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Volo.Abp.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.TenantManagement.TenantConnectionString", b => + { + b.HasOne("Volo.Abp.TenantManagement.Tenant", null) + .WithMany("ConnectionStrings") + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.CmsKit.Blogs.BlogPost", b => + { + b.HasOne("Volo.CmsKit.Users.CmsUser", "Author") + .WithMany() + .HasForeignKey("AuthorId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Author"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => + { + b.Navigation("Actions"); + + b.Navigation("EntityChanges"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => + { + b.Navigation("PropertyChanges"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b => + { + b.Navigation("Claims"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b => + { + b.Navigation("Claims"); + + b.Navigation("Logins"); + + b.Navigation("OrganizationUnits"); + + b.Navigation("Roles"); + + b.Navigation("Tokens"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => + { + b.Navigation("Roles"); + }); + + modelBuilder.Entity("Volo.Abp.TenantManagement.Tenant", b => + { + b.Navigation("ConnectionStrings"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20220324203918_Added_BlogPostStatus.cs b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20220324203918_Added_BlogPostStatus.cs new file mode 100644 index 0000000000..8624383a73 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20220324203918_Added_BlogPostStatus.cs @@ -0,0 +1,26 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Volo.CmsKit.Migrations +{ + public partial class Added_BlogPostStatus : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "Status", + table: "CmsBlogPosts", + type: "int", + nullable: false, + defaultValue: 0); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "Status", + table: "CmsBlogPosts"); + } + } +} diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs index 29bd29f91c..3299179fcb 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs @@ -1341,6 +1341,9 @@ namespace Volo.CmsKit.Migrations .HasMaxLength(256) .HasColumnType("nvarchar(256)"); + b.Property("Status") + .HasColumnType("int"); + b.Property("TenantId") .HasColumnType("uniqueidentifier") .HasColumnName("TenantId"); From 5697171ee1a672cfc99304df5e77f44423d0e29a Mon Sep 17 00:00:00 2001 From: Musa Demir Date: Fri, 25 Mar 2022 02:39:31 +0300 Subject: [PATCH 053/143] add publish --- .../Admin/Blogs/BlogPostGetListInput.cs | 7 ++-- .../Admin/Blogs/IBlogPostAdminAppService.cs | 3 ++ ...CmsKitAdminPermissionDefinitionProvider.cs | 2 ++ .../Permissions/CmsKitAdminPermissions.cs | 1 + .../Admin/Blogs/BlogPostAdminAppService.cs | 11 ++++++- .../BlogPostAdminClientProxy.Generated.cs | 9 +++++ .../Admin/Blogs/BlogPostAdminController.cs | 9 +++++ .../Pages/CmsKit/BlogPosts/Create.cshtml | 11 +++++-- .../Pages/CmsKit/BlogPosts/Create.cshtml.cs | 16 +++++++-- .../Pages/CmsKit/BlogPosts/create.js | 21 ++++++++++++ .../Pages/CmsKit/BlogPosts/index.js | 33 +++++++++++++++++-- .../client-proxies/cms-kit-admin-proxy.js | 10 +++++- .../CmsKit/Localization/Resources/en.json | 9 ++++- .../CmsKit/Localization/Resources/tr.json | 9 ++++- .../MongoDB/Blogs/MongoBlogPostRepository.cs | 7 ++-- .../Public/Blogs/BlogPostPublicAppService.cs | 2 +- .../CmsKitDataSeedContributor.cs | 2 ++ 17 files changed, 147 insertions(+), 15 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogPostGetListInput.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogPostGetListInput.cs index 3b2d4c2c93..f136fe6562 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogPostGetListInput.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogPostGetListInput.cs @@ -1,5 +1,6 @@ using System; using Volo.Abp.Application.Dtos; +using Volo.CmsKit.Blogs; namespace Volo.CmsKit.Admin.Blogs; @@ -8,6 +9,8 @@ public class BlogPostGetListInput : PagedAndSortedResultRequestDto public string Filter { get; set; } public Guid? BlogId { get; set; } - + public Guid? AuthorId { get; set; } -} + + public BlogPostStatus? Status { get; set; } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs index 314b7a1def..06617fea37 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs @@ -1,4 +1,5 @@ using System; +using System.Threading.Tasks; using Volo.Abp.Application.Services; namespace Volo.CmsKit.Admin.Blogs; @@ -12,4 +13,6 @@ public interface IBlogPostAdminAppService CreateBlogPostDto, UpdateBlogPostDto> { + Task PublishAsync(Guid id); + } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissionDefinitionProvider.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissionDefinitionProvider.cs index eb733cc36f..b89b38d43a 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissionDefinitionProvider.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissionDefinitionProvider.cs @@ -55,6 +55,8 @@ public class CmsKitAdminPermissionDefinitionProvider : PermissionDefinitionProvi .RequireGlobalFeatures(typeof(BlogsFeature)); blogPostManagement.AddChild(CmsKitAdminPermissions.BlogPosts.Delete, L("Permission:BlogPostManagement.Delete")) .RequireGlobalFeatures(typeof(BlogsFeature)); + blogPostManagement.AddChild(CmsKitAdminPermissions.BlogPosts.Publish, L("Permission:BlogPostManagement.Publish")) + .RequireGlobalFeatures(typeof(BlogsFeature)); var menuManagement = cmsGroup.AddPermission(CmsKitAdminPermissions.Menus.Default, L("Permission:MenuManagement")) .RequireGlobalFeatures(typeof(MenuFeature)); diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissions.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissions.cs index 49fa7c8ffc..b5d2a8eaa6 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissions.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissions.cs @@ -51,6 +51,7 @@ public class CmsKitAdminPermissions public const string Create = Default + ".Create"; public const string Update = Default + ".Update"; public const string Delete = Default + ".Delete"; + public const string Publish = Default + ".Publish"; } public static class Menus diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs index 9968f6610c..ed3d7693a3 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs @@ -92,6 +92,7 @@ public class BlogPostAdminAppService : CmsKitAppServiceBase, IBlogPostAdminAppSe var blogs = (await BlogRepository.GetListAsync()).ToDictionary(x => x.Id); var blogPosts = await BlogPostRepository.GetListAsync(input.Filter, input.BlogId, input.AuthorId, + statusFilter: input.Status, input.MaxResultCount, input.SkipCount, input.Sorting); var count = await BlogPostRepository.GetCountAsync(input.Filter, input.BlogId, input.AuthorId); @@ -112,4 +113,12 @@ public class BlogPostAdminAppService : CmsKitAppServiceBase, IBlogPostAdminAppSe { await BlogPostRepository.DeleteAsync(id); } -} + + [Authorize(CmsKitAdminPermissions.BlogPosts.Publish)] + public virtual async Task PublishAsync(Guid id) + { + var blogPost = await BlogPostRepository.GetAsync(id); + blogPost.SetPublished(); + } + +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/BlogPostAdminClientProxy.Generated.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/BlogPostAdminClientProxy.Generated.cs index 560ba4e2de..93e16e3172 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/BlogPostAdminClientProxy.Generated.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/BlogPostAdminClientProxy.Generated.cs @@ -55,4 +55,13 @@ public partial class BlogPostAdminClientProxy : ClientProxyBase
+
@@ -84,6 +87,10 @@ - + + @if ((await AuthorizationService.AuthorizeAsync(CmsKitAdminPermissions.BlogPosts.Publish)).Succeeded) + { + + } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/Create.cshtml.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/Create.cshtml.cs index 08d4d24b37..3e0fcd30b0 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/Create.cshtml.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/Create.cshtml.cs @@ -31,9 +31,17 @@ public class CreateModel : CmsKitAdminPageModel { var dto = ObjectMapper.Map(ViewModel); - var created = await BlogPostAdminAppService.CreateAsync(dto); + BlogPostDto createResult; + if (ViewModel.Status == BlogPostStatus.Published) + { + createResult = await BlogPostAdminAppService.CreateAndPublishAsync(dto); + } + else + { + createResult = await BlogPostAdminAppService.CreateAsync(dto); + } - return new OkObjectResult(created); + return new OkObjectResult(createResult); } [AutoMap(typeof(CreateBlogPostDto), ReverseMap = true)] @@ -65,5 +73,9 @@ public class CreateModel : CmsKitAdminPageModel [HiddenInput] public Guid? CoverImageMediaId { get; set; } + + [HiddenInput] + [DynamicFormIgnore] + public BlogPostStatus Status { get; set; } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/create.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/create.js index eba7f51654..b94e8b2353 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/create.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/create.js @@ -2,13 +2,20 @@ $(function () { var l = abp.localization.getResource("CmsKit"); + var blogPostStatus = { + Draft: 0, + Published: 1 + }; + var $selectBlog = $('#BlogSelectionSelect'); var $formCreate = $('#form-blog-post-create'); var $title = $('#ViewModel_Title'); var $shortDescription = $('#ViewModel_ShortDescription'); var $coverImage = $('#ViewModel_CoverImageMediaId'); var $url = $('#ViewModel_Slug'); + var $status = $('#ViewModel_Status'); var $buttonSubmit = $('#button-blog-post-create'); + var $buttonPublish = $('#button-blog-post-publish'); var $pageContentInput = $('#ViewModel_Content'); var $tagsInput = $('.tag-editor-form input[name=tags]'); var $fileInput = $('#BlogPostCoverImage'); @@ -59,9 +66,23 @@ $(function () { $buttonSubmit.click(function (e) { e.preventDefault(); + $status.val(blogPostStatus.Draft); submitCoverImage(); }); + $buttonPublish.click(function (e) { + abp.message.confirm( + l('BlogPostPublishConfirmationMessage', $title.val()), + function (isConfirmed) { + if (isConfirmed) { + e.preventDefault(); + $status.val(blogPostStatus.Published); + submitCoverImage(); + } + } + ); + }); + function submitEntityTags(blogPostId) { var tags = $tagsInput.val().split(',').map(x => x.trim()).filter(x => x); diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/index.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/index.js index 60d0de3cb5..9f3402d23a 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/index.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/index.js @@ -1,7 +1,11 @@ $(function () { var l = abp.localization.getResource("CmsKit"); - + var blogPostStatus = { + Draft: 0, + Published: 1 + }; + var blogsService = volo.cmsKit.admin.blogs.blogPostAdmin; var getFilter = function () { @@ -33,6 +37,23 @@ $(function () { location.href = "BlogPosts/Update/" + data.record.id } }, + { + text: l('Publish'), + visible: function(data) { + return data?.status !== blogPostStatus.Published && abp.auth.isGranted('CmsKit.BlogPosts.Publish'); + }, + confirmMessage: function (data) { + return l("BlogPostPublishConfirmationMessage", data.record.title) + }, + action: function (data) { + blogsService + .publish(data.record.id) + .then(function () { + dataTable.ajax.reload(); + abp.notify.success(l('SuccessfullyPublished')); + }); + } + }, { text: l('Delete'), visible: abp.auth.isGranted('CmsKit.BlogPosts.Delete'), @@ -71,7 +92,15 @@ $(function () { orderable: true, data: 'creationTime', dataFormat: "datetime" - } + }, + { + title: l("Status"), + orderable: true, + data: "status", + render: function (data) { + return l("CmsKit.BlogPost.Status." + data); + } + }, ] })); diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js index 0a1424d92a..f4c08efff2 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js @@ -378,7 +378,7 @@ volo.cmsKit.admin.blogs.blogPostAdmin.getList = function(input, ajaxParams) { return abp.ajax($.extend(true, { - url: abp.appPath + 'api/cms-kit-admin/blogs/blog-posts' + abp.utils.buildQueryString([{ name: 'filter', value: input.filter }, { name: 'blogId', value: input.blogId }, { name: 'sorting', value: input.sorting }, { name: 'skipCount', value: input.skipCount }, { name: 'maxResultCount', value: input.maxResultCount }]) + '', + url: abp.appPath + 'api/cms-kit-admin/blogs/blog-posts' + abp.utils.buildQueryString([{ name: 'filter', value: input.filter }, { name: 'blogId', value: input.blogId }, { name: 'authorId', value: input.authorId }, { name: 'status', value: input.status }, { name: 'sorting', value: input.sorting }, { name: 'skipCount', value: input.skipCount }, { name: 'maxResultCount', value: input.maxResultCount }]) + '', type: 'GET' }, ajaxParams)); }; @@ -391,6 +391,14 @@ }, ajaxParams)); }; + volo.cmsKit.admin.blogs.blogPostAdmin.publish = function(id, ajaxParams) { + return abp.ajax($.extend(true, { + url: abp.appPath + 'api/cms-kit-admin/blogs/blog-posts/publish/' + id + '', + type: 'POST', + dataType: null + }, ajaxParams)); + }; + })(); })(); diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json index 0dd826480d..9e8bb49d2e 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json @@ -85,6 +85,7 @@ "Permission:BlogPostManagement.Create": "Create", "Permission:BlogPostManagement.Delete": "Delete", "Permission:BlogPostManagement.Update": "Update", + "Permission:BlogPostManagement.Publish": "Publish", "Permission:CmsKit": "CmsKit", "Permission:Comments": "Comment Management", "Permission:Comments.Delete": "Delete", @@ -164,6 +165,12 @@ "GlobalResources": "Global Resources", "Script": "Script", "Style": "Style", - "SavedSuccessfully": "Saved successfully" + "SavedSuccessfully": "Saved successfully", + "CmsKit.BlogPost.Status.0": "Draft", + "CmsKit.BlogPost.Status.1": "Published", + "BlogPostPublishConfirmationMessage": "Are you sure to publish the blog post \"{0}\"?", + "SuccessfullyPublished": "Successfully published!", + "Draft": "Draft", + "Publish": "Publish", } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json index 95ef414c17..e1367ab204 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json @@ -85,6 +85,7 @@ "Permission:BlogPostManagement.Create": "Oluşturma", "Permission:BlogPostManagement.Delete": "Silme", "Permission:BlogPostManagement.Update": "Güncelleme", + "Permission:BlogPostManagement.Publish": "Yayınlama", "Permission:CmsKit": "CmsKit", "Permission:Comments": "Yorum Yönetimi", "Permission:Comments.Delete": "Silmek", @@ -163,6 +164,12 @@ "GlobalResources": "Global Kaynaklar", "Script": "Script", "Style": "Style", - "SavedSuccessfully": "Başarıyla kaydedildi" + "SavedSuccessfully": "Başarıyla kaydedildi", + "CmsKit.BlogPost.Status.0": "Taslak", + "CmsKit.BlogPost.Status.1": "Yayınlandı", + "BlogPostPublishConfirmationMessage": "\"{0}\" başlıklı gönderiyi yayınlamak istediğinize emin misiniz?", + "SuccessfullyPublished": "Başarıyla yayınlandı", + "Draft": "Taslak olarak kaydet", + "Publish": "Yayınla", } } diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs index 1db7fee75e..65a8bf9c13 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs @@ -43,6 +43,7 @@ public class MongoBlogPostRepository : MongoDbRepository>(!string.IsNullOrWhiteSpace(filter), x => x.Title.Contains(filter) || x.Slug.Contains(filter)) .WhereIf>(blogId.HasValue, x => x.BlogId == blogId) .WhereIf>(authorId.HasValue, x => x.AuthorId == authorId) + .WhereIf>(statusFilter.HasValue, x => x.Status == statusFilter) .CountAsync(cancellationToken); - } public virtual async Task> GetListAsync( string filter = null, Guid? blogId = null, Guid? authorId = null, + BlogPostStatus? statusFilter = null, int maxResultCount = int.MaxValue, int skipCount = 0, string sorting = null, @@ -73,7 +75,8 @@ public class MongoBlogPostRepository : MongoDbRepository x.BlogId == blogId) .WhereIf(!string.IsNullOrWhiteSpace(filter), x => x.Title.Contains(filter) || x.Slug.Contains(filter)) - .WhereIf(authorId.HasValue, x => x.AuthorId == authorId); + .WhereIf(authorId.HasValue, x => x.AuthorId == authorId) + .WhereIf(statusFilter.HasValue, x => x.Status == statusFilter); queryable = queryable.OrderBy(sorting.IsNullOrEmpty() ? $"{nameof(BlogPost.CreationTime)} desc" : sorting); diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs index a9121a5c2b..76232c69a3 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs @@ -38,7 +38,7 @@ public class BlogPostPublicAppService : CmsKitPublicAppServiceBase, IBlogPostPub { var blog = await BlogRepository.GetBySlugAsync(blogSlug); - var blogPosts = await BlogPostRepository.GetListAsync(null, blog.Id, input.AuthorId, input.MaxResultCount, + var blogPosts = await BlogPostRepository.GetListAsync(null, blog.Id, input.AuthorId, BlogPostStatus.Published, input.MaxResultCount, input.SkipCount, input.Sorting); return new PagedResultDto( diff --git a/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs b/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs index 13414b4573..af5ee0754a 100644 --- a/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs +++ b/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs @@ -367,6 +367,7 @@ public class CmsKitDataSeedContributor : IDataSeedContributor, ITransientDepende blog, _cmsKitTestData.BlogPost_1_Title, _cmsKitTestData.BlogPost_1_Slug, + BlogPostStatus.Published, "Short desc 1", "Blog Post 1 Content"))).Id; @@ -377,6 +378,7 @@ public class CmsKitDataSeedContributor : IDataSeedContributor, ITransientDepende blog, _cmsKitTestData.BlogPost_2_Title, _cmsKitTestData.BlogPost_2_Slug, + BlogPostStatus.Published, "Short desc 2", "Blog Post 2 Content"))).Id; } From 6b4dcecb6695db7f4a4b492ab152301328aa18a2 Mon Sep 17 00:00:00 2001 From: Musa Demir Date: Fri, 25 Mar 2022 02:40:18 +0300 Subject: [PATCH 054/143] add create and publish --- .../CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs | 2 ++ .../Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs | 10 ++++++++++ .../BlogPostAdminClientProxy.Generated.cs | 7 +++++++ .../Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs | 8 ++++++++ .../wwwroot/client-proxies/cms-kit-admin-proxy.js | 8 ++++++++ 5 files changed, 35 insertions(+) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs index 06617fea37..d90d5211c4 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs @@ -15,4 +15,6 @@ public interface IBlogPostAdminAppService { Task PublishAsync(Guid id); + + Task CreateAndPublishAsync(CreateBlogPostDto input); } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs index ed3d7693a3..d666b8e5d6 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs @@ -121,4 +121,14 @@ public class BlogPostAdminAppService : CmsKitAppServiceBase, IBlogPostAdminAppSe blogPost.SetPublished(); } + [Authorize(CmsKitAdminPermissions.BlogPosts.Create)] + [Authorize(CmsKitAdminPermissions.BlogPosts.Publish)] + public virtual async Task CreateAndPublishAsync(CreateBlogPostDto input) + { + var blogPost = await CreateAsync(input); + await CurrentUnitOfWork.SaveChangesAsync(); + + await PublishAsync(blogPost.Id); + return blogPost; + } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/BlogPostAdminClientProxy.Generated.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/BlogPostAdminClientProxy.Generated.cs index 93e16e3172..b0d733cc8c 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/BlogPostAdminClientProxy.Generated.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/BlogPostAdminClientProxy.Generated.cs @@ -64,4 +64,11 @@ public partial class BlogPostAdminClientProxy : ClientProxyBase CreateAndPublishAsync(CreateBlogPostDto input) + { + return await RequestAsync(nameof(CreateAndPublishAsync), new ClientProxyRequestTypeValue + { + { typeof(CreateBlogPostDto), input } + }); + } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs index f7304a5613..eedd8e5074 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs @@ -70,4 +70,12 @@ public class BlogPostAdminController : CmsKitAdminController, IBlogPostAdminAppS return BlogPostAdminAppService.PublishAsync(id); } + [HttpPost] + [Route("createandpublish")] + [Authorize(CmsKitAdminPermissions.BlogPosts.Create)] + [Authorize(CmsKitAdminPermissions.BlogPosts.Publish)] + public virtual Task CreateAndPublishAsync(CreateBlogPostDto input) + { + return BlogPostAdminAppService.CreateAndPublishAsync(input); + } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js index f4c08efff2..7513ae8956 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js @@ -399,6 +399,14 @@ }, ajaxParams)); }; + volo.cmsKit.admin.blogs.blogPostAdmin.createAndPublish = function(input, ajaxParams) { + return abp.ajax($.extend(true, { + url: abp.appPath + 'api/cms-kit-admin/blogs/blog-posts/createandpublish', + type: 'POST', + data: JSON.stringify(input) + }, ajaxParams)); + }; + })(); })(); From 425beff41db63833b4ad2f3078e385c8d92a14a8 Mon Sep 17 00:00:00 2001 From: Musa Demir Date: Fri, 25 Mar 2022 02:42:11 +0300 Subject: [PATCH 055/143] add draft --- .../Admin/Blogs/IBlogPostAdminAppService.cs | 1 + .../Admin/Blogs/BlogPostAdminAppService.cs | 7 +++++++ .../BlogPostAdminClientProxy.Generated.cs | 8 ++++++++ .../Admin/Blogs/BlogPostAdminController.cs | 8 ++++++++ .../Pages/CmsKit/BlogPosts/index.js | 17 +++++++++++++++++ .../client-proxies/cms-kit-admin-proxy.js | 8 ++++++++ .../Volo/CmsKit/Localization/Resources/en.json | 1 + .../Volo/CmsKit/Localization/Resources/tr.json | 1 + 8 files changed, 51 insertions(+) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs index d90d5211c4..d8f74d6d66 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs @@ -15,6 +15,7 @@ public interface IBlogPostAdminAppService { Task PublishAsync(Guid id); + Task DraftAsync(Guid id); Task CreateAndPublishAsync(CreateBlogPostDto input); } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs index d666b8e5d6..2635935efe 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs @@ -121,6 +121,13 @@ public class BlogPostAdminAppService : CmsKitAppServiceBase, IBlogPostAdminAppSe blogPost.SetPublished(); } + [Authorize(CmsKitAdminPermissions.BlogPosts.Update)] + public virtual async Task DraftAsync(Guid id) + { + var blogPost = await BlogPostRepository.GetAsync(id); + blogPost.SetDraft(); + } + [Authorize(CmsKitAdminPermissions.BlogPosts.Create)] [Authorize(CmsKitAdminPermissions.BlogPosts.Publish)] public virtual async Task CreateAndPublishAsync(CreateBlogPostDto input) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/BlogPostAdminClientProxy.Generated.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/BlogPostAdminClientProxy.Generated.cs index b0d733cc8c..25d8bcf9fd 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/BlogPostAdminClientProxy.Generated.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/BlogPostAdminClientProxy.Generated.cs @@ -64,6 +64,14 @@ public partial class BlogPostAdminClientProxy : ClientProxyBase CreateAndPublishAsync(CreateBlogPostDto input) { return await RequestAsync(nameof(CreateAndPublishAsync), new ClientProxyRequestTypeValue diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs index eedd8e5074..ccc2e4fd25 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs @@ -70,6 +70,14 @@ public class BlogPostAdminController : CmsKitAdminController, IBlogPostAdminAppS return BlogPostAdminAppService.PublishAsync(id); } + [HttpPost] + [Route("draft/{id}")] + [Authorize(CmsKitAdminPermissions.BlogPosts.Update)] + public virtual Task DraftAsync(Guid id) + { + return BlogPostAdminAppService.DraftAsync(id); + } + [HttpPost] [Route("createandpublish")] [Authorize(CmsKitAdminPermissions.BlogPosts.Create)] diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/index.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/index.js index 9f3402d23a..8b941f84b5 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/index.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/index.js @@ -54,6 +54,23 @@ $(function () { }); } }, + { + text: l('Draft'), + visible: function(data) { + return data?.status !== blogPostStatus.Draft && abp.auth.isGranted('CmsKit.BlogPosts.Update'); + }, + confirmMessage: function (data) { + return l("BlogPostDraftConfirmationMessage", data.record.title) + }, + action: function (data) { + blogsService + .draft(data.record.id) + .then(function () { + dataTable.ajax.reload(); + abp.notify.success(l('SuccessfullySaved')); + }); + } + }, { text: l('Delete'), visible: abp.auth.isGranted('CmsKit.BlogPosts.Delete'), diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js index 7513ae8956..aafdf7d245 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js @@ -399,6 +399,14 @@ }, ajaxParams)); }; + volo.cmsKit.admin.blogs.blogPostAdmin.draft = function(id, ajaxParams) { + return abp.ajax($.extend(true, { + url: abp.appPath + 'api/cms-kit-admin/blogs/blog-posts/draft/' + id + '', + type: 'POST', + dataType: null + }, ajaxParams)); + }; + volo.cmsKit.admin.blogs.blogPostAdmin.createAndPublish = function(input, ajaxParams) { return abp.ajax($.extend(true, { url: abp.appPath + 'api/cms-kit-admin/blogs/blog-posts/createandpublish', diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json index 9e8bb49d2e..1083826bf7 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json @@ -172,5 +172,6 @@ "SuccessfullyPublished": "Successfully published!", "Draft": "Draft", "Publish": "Publish", + "BlogPostDraftConfirmationMessage": "Are you sure to set the blog post \"{0}\" as draft?" } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json index e1367ab204..67ca5eeafd 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json @@ -171,5 +171,6 @@ "SuccessfullyPublished": "Başarıyla yayınlandı", "Draft": "Taslak olarak kaydet", "Publish": "Yayınla", + "BlogPostDraftConfirmationMessage": "\"{0}\" başlıklı gönderiyi taslak haline getirmek istediğinize emin misiniz?" } } From 4a78cc14b5c0bb6abca19bb4cbe60e212b4cd9e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 25 Mar 2022 09:37:39 +0300 Subject: [PATCH 056/143] Update discord server link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1d7b7e51a7..ebba20da41 100644 --- a/README.md +++ b/README.md @@ -110,7 +110,7 @@ Love ABP Framework? **Please give a star** to this repository :star: ## Discord Channel -You can use this link to join the ABP Community Discord Server: https://discord.gg/uVGt6hyhcm +You can use this link to join the ABP Community Discord Server: https://discord.gg/abp ## ABP Commercial From dca9f2965bcca342c226dc8a6cc302ee311aa76c Mon Sep 17 00:00:00 2001 From: Engincan VESKE Date: Fri, 25 Mar 2022 09:45:29 +0300 Subject: [PATCH 057/143] Add new localizations for admin website --- .../AbpIoLocalization/Admin/Localization/Resources/en.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json index 023a4b18ed..9f8e88f180 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json @@ -380,6 +380,7 @@ "PurchaseItems": "Purchase Items", "SuccessfullyUpdated": "Successfully updated", "SuccessfullyAdded": "Successfully added", - "PurchaseState": "Purchase State" + "PurchaseState": "Purchase State", + "ShowBetweenDayCount": "Show Between Days" } } \ No newline at end of file From c24446f7b7a975c2c95ced6b07816f16a134ebfa Mon Sep 17 00:00:00 2001 From: Musa Demir Date: Fri, 25 Mar 2022 10:06:43 +0300 Subject: [PATCH 058/143] Add BlogPostStatus to BlogPostDto --- .../Volo/CmsKit/Admin/Blogs/BlogPostDto.cs | 3 +++ .../Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs | 1 + 2 files changed, 4 insertions(+) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogPostDto.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogPostDto.cs index 6ea2fddd90..3e109a9eed 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogPostDto.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogPostDto.cs @@ -2,6 +2,7 @@ using Volo.Abp.Application.Dtos; using Volo.Abp.Auditing; using Volo.Abp.Domain.Entities; +using Volo.CmsKit.Blogs; namespace Volo.CmsKit.Admin.Blogs; @@ -25,4 +26,6 @@ public class BlogPostDto : EntityDto, IHasCreationTime, IHasModificationTi public DateTime? LastModificationTime { get; set; } public string ConcurrencyStamp { get; set; } + + public BlogPostStatus Status { get; set; } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs index 2635935efe..7e1c11bbcd 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs @@ -136,6 +136,7 @@ public class BlogPostAdminAppService : CmsKitAppServiceBase, IBlogPostAdminAppSe await CurrentUnitOfWork.SaveChangesAsync(); await PublishAsync(blogPost.Id); + blogPost.Status = BlogPostStatus.Published; return blogPost; } } \ No newline at end of file From e7928ff76acfa3bc2908db7c73c244eb62645e1a Mon Sep 17 00:00:00 2001 From: Musa Demir Date: Fri, 25 Mar 2022 10:07:47 +0300 Subject: [PATCH 059/143] Use status filter in GetCountAsync method in public blog post GetAllListAsync --- .../Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs index 76232c69a3..aa893f41c8 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs @@ -42,7 +42,7 @@ public class BlogPostPublicAppService : CmsKitPublicAppServiceBase, IBlogPostPub input.SkipCount, input.Sorting); return new PagedResultDto( - await BlogPostRepository.GetCountAsync(blogId: blog.Id, authorId: input.AuthorId), + await BlogPostRepository.GetCountAsync(blogId: blog.Id, statusFilter: BlogPostStatus.Published, authorId: input.AuthorId), ObjectMapper.Map, List>(blogPosts)); } From 0b282f88ac12091e1c205256c22dc7222e08ef1f Mon Sep 17 00:00:00 2001 From: Musa Demir Date: Fri, 25 Mar 2022 10:09:12 +0300 Subject: [PATCH 060/143] fix tests --- .../Volo.CmsKit.Domain.Tests/Blogs/BlogPostManager_Tests.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Blogs/BlogPostManager_Tests.cs b/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Blogs/BlogPostManager_Tests.cs index 40f552dfdb..5120138282 100644 --- a/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Blogs/BlogPostManager_Tests.cs +++ b/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Blogs/BlogPostManager_Tests.cs @@ -41,7 +41,7 @@ public class BlogPostManager_Tests : CmsKitDomainTestBase var blog = await blogRepository.GetAsync(cmsKitTestData.Blog_Id); - var blogPost = await blogPostManager.CreateAsync(author, blog, title, slug); + var blogPost = await blogPostManager.CreateAsync(author, blog, title, slug, BlogPostStatus.Published); blogPost.Id.ShouldNotBe(Guid.Empty); blogPost.Title.ShouldBe(title); @@ -57,7 +57,7 @@ public class BlogPostManager_Tests : CmsKitDomainTestBase var blog = await blogRepository.GetAsync(cmsKitTestData.Blog_Id); await Should.ThrowAsync(async () => - await blogPostManager.CreateAsync(author, blog, "Any New Title", cmsKitTestData.BlogPost_1_Slug)); + await blogPostManager.CreateAsync(author, blog, "Any New Title", cmsKitTestData.BlogPost_1_Slug, BlogPostStatus.Published)); } [Fact] From 39239d7c5e983f0bcfba359d8b81f960bbcee82e Mon Sep 17 00:00:00 2001 From: Musa Demir Date: Fri, 25 Mar 2022 10:13:13 +0300 Subject: [PATCH 061/143] add tests --- .../Blogs/BlogPostAdminAppService_Tests.cs | 82 ++++++++++++ .../Blogs/BlogPostPublicAppService_Tests.cs | 61 +++++++++ .../Blogs/BlogPostRepository_Test.cs | 121 +++++++++++++++++- 3 files changed, 263 insertions(+), 1 deletion(-) diff --git a/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Blogs/BlogPostAdminAppService_Tests.cs b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Blogs/BlogPostAdminAppService_Tests.cs index 1910e3b925..bc5d6b2a5e 100644 --- a/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Blogs/BlogPostAdminAppService_Tests.cs +++ b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Blogs/BlogPostAdminAppService_Tests.cs @@ -156,4 +156,86 @@ public class BlogPostAdminAppService_Tests : CmsKitApplicationTestBase exception.EntityType.ShouldBe(typeof(BlogPost)); exception.Id.ShouldBe(cmsKitTestData.Page_2_Id); } + + [Fact] + public async Task PublishAsync_ShouldWorkProperly() + { + var newPost = await CreateBlogPost(); + newPost.Status.ShouldBe(BlogPostStatus.Draft); + + await blogPostAdminAppService.PublishAsync(newPost.Id); + var post = await blogPostAdminAppService.GetAsync(newPost.Id); + post.Status.ShouldBe(BlogPostStatus.Published); + } + + [Fact] + public async Task DraftAsync_ShouldWorkProperly() + { + var newPost = await CreateBlogPost(); + newPost.Status.ShouldBe(BlogPostStatus.Draft); + + await blogPostAdminAppService.PublishAsync(newPost.Id); + var post = await blogPostAdminAppService.GetAsync(newPost.Id); + post.Status.ShouldBe(BlogPostStatus.Published); + + await blogPostAdminAppService.DraftAsync(newPost.Id); + post = await blogPostAdminAppService.GetAsync(newPost.Id); + post.Status.ShouldBe(BlogPostStatus.Draft); + } + + [Fact] + public async Task CreateAndPublishAsync_ShouldWorkProperly() + { + var title = "My awesome new Post"; + var slug = "my-awesome-new-post"; + var shortDescription = "This blog is all about awesomeness 🤗!"; + var content = "Another blog post shared on internet"; + + var created = await blogPostAdminAppService.CreateAndPublishAsync(new CreateBlogPostDto + { + BlogId = cmsKitTestData.Blog_Id, + Title = title, + Slug = slug, + ShortDescription = shortDescription, + Content = content + }); + + created.Id.ShouldNotBe(Guid.Empty); + created.Status.ShouldBe(BlogPostStatus.Published); + + var blogPost = await blogPostRepository.GetAsync(created.Id); + + blogPost.Title.ShouldBe(title); + blogPost.Slug.ShouldBe(slug); + blogPost.ShortDescription.ShouldBe(shortDescription); + blogPost.Content.ShouldBe(content); + blogPost.Status.ShouldBe(BlogPostStatus.Published); + } + + private async Task CreateBlogPost() + { + var title = "My awesome new Post"; + var slug = "my-awesome-new-post"; + var shortDescription = "This blog is all about awesomeness 🤗!"; + var content = "Another blog post shared on internet"; + + var created = await blogPostAdminAppService.CreateAsync(new CreateBlogPostDto + { + BlogId = cmsKitTestData.Blog_Id, + Title = title, + Slug = slug, + ShortDescription = shortDescription, + Content = content + }); + + created.Id.ShouldNotBe(Guid.Empty); + + var blogPost = await blogPostRepository.GetAsync(created.Id); + + blogPost.Title.ShouldBe(title); + blogPost.Slug.ShouldBe(slug); + blogPost.ShortDescription.ShouldBe(shortDescription); + blogPost.Content.ShouldBe(content); + return created; + } } diff --git a/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Blogs/BlogPostPublicAppService_Tests.cs b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Blogs/BlogPostPublicAppService_Tests.cs index 64725fc700..677e1ac086 100644 --- a/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Blogs/BlogPostPublicAppService_Tests.cs +++ b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Blogs/BlogPostPublicAppService_Tests.cs @@ -85,6 +85,7 @@ public class BlogPostPublicAppService_Tests : CmsKitApplicationTestBase blog, cmsKitTestData.BlogPost_1_Title + "by user2", cmsKitTestData.BlogPost_1_Slug + "by user2", + BlogPostStatus.Published, "Short desc 1", "Blog Post 1 Content" ); @@ -118,4 +119,64 @@ public class BlogPostPublicAppService_Tests : CmsKitApplicationTestBase blogPosts.Items.ShouldNotBeEmpty(); blogPosts.Items.Count.ShouldBe(2); } + + [Fact] + public async Task GetListAsync_ShouldNotGet_UnPublishedItems() + { + var user2 = await userRepository.GetAsync(cmsKitTestData.User2Id); + var blog = await blogRepository.GetAsync(cmsKitTestData.Blog_Id); + + var draftBlogPost1 = await blogPostManager.CreateAsync( + user2, + blog, + cmsKitTestData.BlogPost_1_Title + "draft1", + cmsKitTestData.BlogPost_1_Slug + "draft1", + BlogPostStatus.Draft, + "Short desc 1", + "Blog Post 1 Content" + ); + + var draftBlogPost2 = await blogPostManager.CreateAsync( + user2, + blog, + cmsKitTestData.BlogPost_1_Title + "draft2", + cmsKitTestData.BlogPost_1_Slug + "draft2", + BlogPostStatus.Draft, + "Short desc 1", + "Blog Post 1 Content" + ); + + var publishedBlogPost1 = await blogPostManager.CreateAsync( + user2, + blog, + cmsKitTestData.BlogPost_1_Title + "published1", + cmsKitTestData.BlogPost_1_Slug + "published1", + BlogPostStatus.Published, + "Short desc 1", + "Blog Post 1 Content" + ); + + await blogPostRepository.InsertAsync(draftBlogPost1); + await blogPostRepository.InsertAsync(draftBlogPost2); + await blogPostRepository.InsertAsync(publishedBlogPost1); + + //should get all not filtered by user + var blogPosts = await blogPostAppService.GetListAsync(cmsKitTestData.BlogSlug, + new BlogPostGetListInput {}); + + blogPosts.ShouldNotBeNull(); + blogPosts.TotalCount.ShouldBe(3); + blogPosts.Items.ShouldNotBeEmpty(); + blogPosts.Items.Count.ShouldBe(3); + blogPosts.Items.Any(x => x.Id == draftBlogPost1.Id).ShouldBeFalse(); + blogPosts.Items.Any(x => x.Id == draftBlogPost2.Id).ShouldBeFalse(); + blogPosts.Items.Any(x => x.Id == publishedBlogPost1.Id).ShouldBeTrue(); + + var allItemsFromRepository = await blogPostRepository.GetListAsync(); + allItemsFromRepository.ShouldNotBeNull(); + allItemsFromRepository.Count.ShouldBe(5);//3 new added 2 already existing + allItemsFromRepository.Any(x => x.Id == draftBlogPost1.Id).ShouldBeTrue(); + allItemsFromRepository.Any(x => x.Id == draftBlogPost2.Id).ShouldBeTrue(); + allItemsFromRepository.Any(x => x.Id == publishedBlogPost1.Id).ShouldBeTrue(); + } } diff --git a/modules/cms-kit/test/Volo.CmsKit.TestBase/Blogs/BlogPostRepository_Test.cs b/modules/cms-kit/test/Volo.CmsKit.TestBase/Blogs/BlogPostRepository_Test.cs index 4d696e916d..37ec33b83c 100644 --- a/modules/cms-kit/test/Volo.CmsKit.TestBase/Blogs/BlogPostRepository_Test.cs +++ b/modules/cms-kit/test/Volo.CmsKit.TestBase/Blogs/BlogPostRepository_Test.cs @@ -6,6 +6,7 @@ using System.Text; using System.Threading.Tasks; using Volo.Abp.Domain.Entities; using Volo.Abp.Modularity; +using Volo.CmsKit.Users; using Xunit; namespace Volo.CmsKit.Blogs; @@ -15,11 +16,16 @@ public abstract class BlogPostRepository_Test : CmsKitTestBase(); blogPostRepository = GetRequiredService(); + blogPostManager = GetRequiredService(); + userRepository = GetRequiredService(); + blogRepository = GetRequiredService(); } [Fact] @@ -155,4 +161,117 @@ public abstract class BlogPostRepository_Test : CmsKitTestBase x.Id == testData.User1Id); } + + [Fact] + public async Task ShouldCreateItem_WithDraftStatus() + { + var user2 = await userRepository.GetAsync(testData.User2Id); + var blog = await blogRepository.GetAsync(testData.Blog_Id); + + var draftPost = await blogPostManager.CreateAsync( + user2, + blog, + testData.BlogPost_1_Title + "draft", + testData.BlogPost_1_Slug + "draft", + BlogPostStatus.Draft, + "Short desc 1", + "Blog Post 1 Content" + ); + + + await blogPostRepository.InsertAsync(draftPost); + + var draftPostFromDb = await blogPostRepository.GetAsync(draftPost.Id); + + draftPostFromDb.Title.ShouldBe(draftPost.Title); + draftPostFromDb.Slug.ShouldBe(draftPost.Slug); + draftPostFromDb.ShortDescription.ShouldBe(draftPost.ShortDescription); + draftPostFromDb.Content.ShouldBe(draftPost.Content); + draftPostFromDb.Status.ShouldBe(BlogPostStatus.Draft); + } + + [Fact] + public async Task ShouldCreateItem_WithPublishedStatus() + { + var user2 = await userRepository.GetAsync(testData.User2Id); + var blog = await blogRepository.GetAsync(testData.Blog_Id); + + var publishedPost = await blogPostManager.CreateAsync( + user2, + blog, + testData.BlogPost_1_Title + "published", + testData.BlogPost_1_Slug + "published", + BlogPostStatus.Published, + "Short desc 1", + "Blog Post 1 Content" + ); + + await blogPostRepository.InsertAsync(publishedPost); + + var publishedPostFromDb = await blogPostRepository.GetAsync(publishedPost.Id); + + publishedPostFromDb.Title.ShouldBe(publishedPost.Title); + publishedPostFromDb.Slug.ShouldBe(publishedPost.Slug); + publishedPostFromDb.ShortDescription.ShouldBe(publishedPost.ShortDescription); + publishedPostFromDb.Content.ShouldBe(publishedPost.Content); + publishedPostFromDb.Status.ShouldBe(BlogPostStatus.Published); + } + + [Fact] + public async Task GetListAsync_ShouldFilter_ByStatus() + { + var user2 = await userRepository.GetAsync(testData.User2Id); + var blog = await blogRepository.GetAsync(testData.Blog_Id); + + var draftPost = await blogPostManager.CreateAsync( + user2, + blog, + testData.BlogPost_1_Title + "draft", + testData.BlogPost_1_Slug + "draft", + BlogPostStatus.Draft, + "Short desc 1", + "Blog Post 1 Content" + ); + + var publishedPost = await blogPostManager.CreateAsync( + user2, + blog, + testData.BlogPost_1_Title + "published", + testData.BlogPost_1_Slug + "published", + BlogPostStatus.Published, + "Short desc 1", + "Blog Post 1 Content" + ); + + await blogPostRepository.InsertAsync(draftPost); + await blogPostRepository.InsertAsync(publishedPost); + + var draftPostFromDb = await blogPostRepository.GetAsync(draftPost.Id); + + draftPostFromDb.Title.ShouldBe(draftPost.Title); + draftPostFromDb.Slug.ShouldBe(draftPost.Slug); + draftPostFromDb.ShortDescription.ShouldBe(draftPost.ShortDescription); + draftPostFromDb.Content.ShouldBe(draftPost.Content); + draftPostFromDb.Status.ShouldBe(BlogPostStatus.Draft); + + var publishedPostFromDb = await blogPostRepository.GetAsync(publishedPost.Id); + + publishedPostFromDb.Title.ShouldBe(publishedPost.Title); + publishedPostFromDb.Slug.ShouldBe(publishedPost.Slug); + publishedPostFromDb.ShortDescription.ShouldBe(publishedPost.ShortDescription); + publishedPostFromDb.Content.ShouldBe(publishedPost.Content); + publishedPostFromDb.Status.ShouldBe(BlogPostStatus.Published); + + var draftPosts = await blogPostRepository.GetListAsync(null, statusFilter: BlogPostStatus.Draft); + draftPosts.ShouldNotBeNull(); + draftPosts.Count.ShouldBe(1); + draftPosts.Any(x => x.Id == draftPost.Id).ShouldBeTrue(); + draftPosts.Any(x => x.Id == publishedPost.Id).ShouldBeFalse(); + + var publishedPosts = await blogPostRepository.GetListAsync(null, statusFilter: BlogPostStatus.Published); + publishedPosts.ShouldNotBeNull(); + publishedPosts.Count.ShouldBe(3);//1 new added 2 already existing + publishedPosts.Any(x => x.Id == draftPost.Id).ShouldBeFalse(); + publishedPosts.Any(x => x.Id == publishedPost.Id).ShouldBeTrue(); + } } From b8eb61cdec3ca833f773726f39158b31ad2c3694 Mon Sep 17 00:00:00 2001 From: Musa Demir Date: Fri, 25 Mar 2022 16:00:10 +0300 Subject: [PATCH 062/143] Implements send to admin approval to publish --- .../Admin/Blogs/IBlogPostAdminAppService.cs | 8 +++++-- .../Admin/Blogs/BlogPostAdminAppService.cs | 18 ++++++++++++++++ .../BlogPostAdminClientProxy.Generated.cs | 16 ++++++++++++++ .../Admin/Blogs/BlogPostAdminController.cs | 16 ++++++++++++++ .../Pages/CmsKit/BlogPosts/Create.cshtml | 5 ++++- .../Pages/CmsKit/BlogPosts/Create.cshtml.cs | 4 ++++ .../Pages/CmsKit/BlogPosts/create.js | 17 ++++++++++++++- .../Pages/CmsKit/BlogPosts/index.js | 21 ++++++++++++++++++- .../client-proxies/cms-kit-admin-proxy.js | 16 ++++++++++++++ .../Volo/CmsKit/Blogs/BlogPostStatus.cs | 3 ++- .../CmsKit/Localization/Resources/en.json | 8 ++++++- .../CmsKit/Localization/Resources/tr.json | 8 ++++++- .../Volo/CmsKit/Blogs/BlogPost.cs | 5 +++++ 13 files changed, 137 insertions(+), 8 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs index d8f74d6d66..061f9094b8 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs @@ -14,8 +14,12 @@ public interface IBlogPostAdminAppService UpdateBlogPostDto> { Task PublishAsync(Guid id); - + Task DraftAsync(Guid id); - + Task CreateAndPublishAsync(CreateBlogPostDto input); + + Task SendToReviewAsync(Guid id); + + Task CreateAndSendToReviewAsync(CreateBlogPostDto input); } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs index 7e1c11bbcd..b512406454 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs @@ -139,4 +139,22 @@ public class BlogPostAdminAppService : CmsKitAppServiceBase, IBlogPostAdminAppSe blogPost.Status = BlogPostStatus.Published; return blogPost; } + + [Authorize(CmsKitAdminPermissions.BlogPosts.Create)] + public virtual async Task SendToReviewAsync(Guid id) + { + var blogPost = await BlogPostRepository.GetAsync(id); + blogPost.SetWaitingForReview(); + } + + [Authorize(CmsKitAdminPermissions.BlogPosts.Create)] + public virtual async Task CreateAndSendToReviewAsync(CreateBlogPostDto input) + { + var blogPost = await CreateAsync(input); + await CurrentUnitOfWork.SaveChangesAsync(); + + await SendToReviewAsync(blogPost.Id); + blogPost.Status = BlogPostStatus.WaitingForReview; + return blogPost; + } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/BlogPostAdminClientProxy.Generated.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/BlogPostAdminClientProxy.Generated.cs index 25d8bcf9fd..c3f94e1992 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/BlogPostAdminClientProxy.Generated.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/BlogPostAdminClientProxy.Generated.cs @@ -79,4 +79,20 @@ public partial class BlogPostAdminClientProxy : ClientProxyBase CreateAndSendToReviewAsync(CreateBlogPostDto input) + { + return await RequestAsync(nameof(CreateAndSendToReviewAsync), new ClientProxyRequestTypeValue + { + { typeof(CreateBlogPostDto), input } + }); + } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs index ccc2e4fd25..0efb2bf2d5 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs @@ -86,4 +86,20 @@ public class BlogPostAdminController : CmsKitAdminController, IBlogPostAdminAppS { return BlogPostAdminAppService.CreateAndPublishAsync(input); } + + [HttpPost] + [Route("sendtoreview/{id}")] + [Authorize(CmsKitAdminPermissions.BlogPosts.Create)] + public virtual Task SendToReviewAsync(Guid id) + { + return BlogPostAdminAppService.SendToReviewAsync(id); + } + + [HttpPost] + [Route("createandsendtoreview")] + [Authorize(CmsKitAdminPermissions.BlogPosts.Create)] + public virtual Task CreateAndSendToReviewAsync(CreateBlogPostDto input) + { + return BlogPostAdminAppService.CreateAndSendToReviewAsync(input); + } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/Create.cshtml b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/Create.cshtml index 70b17ea9ad..eefc59e849 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/Create.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/Create.cshtml @@ -87,10 +87,13 @@ - + @if ((await AuthorizationService.AuthorizeAsync(CmsKitAdminPermissions.BlogPosts.Publish)).Succeeded) { + }else + { + } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/Create.cshtml.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/Create.cshtml.cs index 3e0fcd30b0..a76385491a 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/Create.cshtml.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/Create.cshtml.cs @@ -36,6 +36,10 @@ public class CreateModel : CmsKitAdminPageModel { createResult = await BlogPostAdminAppService.CreateAndPublishAsync(dto); } + else if (ViewModel.Status == BlogPostStatus.WaitingForReview) + { + createResult = await BlogPostAdminAppService.CreateAndSendToReviewAsync(dto); + } else { createResult = await BlogPostAdminAppService.CreateAsync(dto); diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/create.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/create.js index b94e8b2353..adc2e53c85 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/create.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/create.js @@ -4,7 +4,8 @@ $(function () { var blogPostStatus = { Draft: 0, - Published: 1 + Published: 1, + SendToReview: 2 }; var $selectBlog = $('#BlogSelectionSelect'); @@ -16,6 +17,7 @@ $(function () { var $status = $('#ViewModel_Status'); var $buttonSubmit = $('#button-blog-post-create'); var $buttonPublish = $('#button-blog-post-publish'); + var $buttonSendToReview = $('#button-blog-post-send-to-review'); var $pageContentInput = $('#ViewModel_Content'); var $tagsInput = $('.tag-editor-form input[name=tags]'); var $fileInput = $('#BlogPostCoverImage'); @@ -83,6 +85,19 @@ $(function () { ); }); + $buttonSendToReview.click(function (e) { + abp.message.confirm( + l('BlogPostSendToReviewConfirmationMessage', $title.val()), + function (isConfirmed) { + if (isConfirmed) { + e.preventDefault(); + $status.val(blogPostStatus.SendToReview); + submitCoverImage(); + } + } + ); + }); + function submitEntityTags(blogPostId) { var tags = $tagsInput.val().split(',').map(x => x.trim()).filter(x => x); diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/index.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/index.js index 8b941f84b5..a813a612ea 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/index.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/index.js @@ -3,7 +3,8 @@ $(function () { var l = abp.localization.getResource("CmsKit"); var blogPostStatus = { Draft: 0, - Published: 1 + Published: 1, + SendToReview: 2 }; var blogsService = volo.cmsKit.admin.blogs.blogPostAdmin; @@ -54,6 +55,24 @@ $(function () { }); } }, + { + text: l('SendToReview'), + visible: function(data) { + return data?.status === blogPostStatus.Draft && + !abp.auth.isGranted('CmsKit.BlogPosts.Publish'); + }, + confirmMessage: function (data) { + return l("BlogPostPublishConfirmationMessage", data.record.title) + }, + action: function (data) { + blogsService + .sendToReview(data.record.id) + .then(function () { + dataTable.ajax.reload(); + abp.notify.success(l('BlogPostSendToReviewSuccessMessage', data.record.title)); + }); + } + }, { text: l('Draft'), visible: function(data) { diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js index aafdf7d245..4c97f154a8 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js @@ -415,6 +415,22 @@ }, ajaxParams)); }; + volo.cmsKit.admin.blogs.blogPostAdmin.sendToReview = function(id, ajaxParams) { + return abp.ajax($.extend(true, { + url: abp.appPath + 'api/cms-kit-admin/blogs/blog-posts/sendtoreview/' + id + '', + type: 'POST', + dataType: null + }, ajaxParams)); + }; + + volo.cmsKit.admin.blogs.blogPostAdmin.createAndSendToReview = function(input, ajaxParams) { + return abp.ajax($.extend(true, { + url: abp.appPath + 'api/cms-kit-admin/blogs/blog-posts/createandsendtoreview', + type: 'POST', + data: JSON.stringify(input) + }, ajaxParams)); + }; + })(); })(); diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Blogs/BlogPostStatus.cs b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Blogs/BlogPostStatus.cs index e0a2385d7e..2d849e9d93 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Blogs/BlogPostStatus.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Blogs/BlogPostStatus.cs @@ -3,5 +3,6 @@ public enum BlogPostStatus { Draft, - Published + Published, + WaitingForReview } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json index 1083826bf7..48dc92ce92 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json @@ -168,10 +168,16 @@ "SavedSuccessfully": "Saved successfully", "CmsKit.BlogPost.Status.0": "Draft", "CmsKit.BlogPost.Status.1": "Published", + "CmsKit.BlogPost.Status.2": "Waiting for review", "BlogPostPublishConfirmationMessage": "Are you sure to publish the blog post \"{0}\"?", "SuccessfullyPublished": "Successfully published!", "Draft": "Draft", "Publish": "Publish", - "BlogPostDraftConfirmationMessage": "Are you sure to set the blog post \"{0}\" as draft?" + "BlogPostDraftConfirmationMessage": "Are you sure to set the blog post \"{0}\" as draft?", + "BlogPostSendToReviewConfirmationMessage": "Are you sure to send the blog post \"{0}\" to admin review for publishing?", + "SaveAsDraft": "Save as draft", + "SendToReview": "Send to review", + "SendToReviewToPublish": "Send to review to publish", + "BlogPostSendToReviewSuccessMessage": "The blog post \"{0}\" has been sent to admin review for publishing." } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json index 67ca5eeafd..38d8243ad6 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json @@ -167,10 +167,16 @@ "SavedSuccessfully": "Başarıyla kaydedildi", "CmsKit.BlogPost.Status.0": "Taslak", "CmsKit.BlogPost.Status.1": "Yayınlandı", + "CmsKit.BlogPost.Status.2": "İnceleme Bekliyor", "BlogPostPublishConfirmationMessage": "\"{0}\" başlıklı gönderiyi yayınlamak istediğinize emin misiniz?", "SuccessfullyPublished": "Başarıyla yayınlandı", "Draft": "Taslak olarak kaydet", "Publish": "Yayınla", - "BlogPostDraftConfirmationMessage": "\"{0}\" başlıklı gönderiyi taslak haline getirmek istediğinize emin misiniz?" + "BlogPostDraftConfirmationMessage": "\"{0}\" başlıklı gönderiyi taslak haline getirmek istediğinize emin misiniz?", + "BlogPostSendToReviewConfirmationMessage": "\"{0}\" başlıklı gönderiyi yayınlamak için admin incelemesine göndermek istediğinize emin misiniz?", + "SaveAsDraft": "Taslak olarak kaydet", + "SendToReview": "İncelemeye gönder", + "SendToReviewToPublish": "Yayınlamak için admin incelemesine gönder", + "BlogPostSendToReviewSuccessMessage": "\"{0}\" başlıklı gönderiyi yayınlamak için admin incelemesine gönderildi." } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogPost.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogPost.cs index 5116d0a95e..cca45bf4fe 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogPost.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogPost.cs @@ -91,4 +91,9 @@ public class BlogPost : FullAuditedAggregateRoot, IMultiTenant { Status = BlogPostStatus.Published; } + + public virtual void SetWaitingForReview() + { + Status = BlogPostStatus.WaitingForReview; + } } From 4784e3e7656faae625560e2de2f922ec93e4908b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 25 Mar 2022 16:24:25 +0300 Subject: [PATCH 063/143] Get user's name, surname and phone number from external login, if available. --- .../Claims/AbpClaimActionCollectionExtensions.cs | 14 ++++++++++++++ .../Pages/Account/Login.cshtml.cs | 12 ++++++++++++ 2 files changed, 26 insertions(+) diff --git a/framework/src/Volo.Abp.AspNetCore.Authentication.OAuth/Microsoft/AspNetCore/Authentication/OAuth/Claims/AbpClaimActionCollectionExtensions.cs b/framework/src/Volo.Abp.AspNetCore.Authentication.OAuth/Microsoft/AspNetCore/Authentication/OAuth/Claims/AbpClaimActionCollectionExtensions.cs index 01dc489c54..2aedea2608 100644 --- a/framework/src/Volo.Abp.AspNetCore.Authentication.OAuth/Microsoft/AspNetCore/Authentication/OAuth/Claims/AbpClaimActionCollectionExtensions.cs +++ b/framework/src/Volo.Abp.AspNetCore.Authentication.OAuth/Microsoft/AspNetCore/Authentication/OAuth/Claims/AbpClaimActionCollectionExtensions.cs @@ -13,6 +13,20 @@ public static class AbpClaimActionCollectionExtensions claimActions.DeleteClaim("name"); claimActions.RemoveDuplicate(AbpClaimTypes.UserName); } + + if (AbpClaimTypes.Name != "given_name") + { + claimActions.MapJsonKey(AbpClaimTypes.Name, "given_name"); + claimActions.DeleteClaim("given_name"); + claimActions.RemoveDuplicate(AbpClaimTypes.Name); + } + + if (AbpClaimTypes.SurName != "family_name") + { + claimActions.MapJsonKey(AbpClaimTypes.SurName, "family_name"); + claimActions.DeleteClaim("family_name"); + claimActions.RemoveDuplicate(AbpClaimTypes.SurName); + } if (AbpClaimTypes.Email != "email") { diff --git a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Login.cshtml.cs b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Login.cshtml.cs index fe94f47415..5ec85d4078 100644 --- a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Login.cshtml.cs +++ b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Login.cshtml.cs @@ -277,6 +277,18 @@ public class LoginModel : AccountPageModel CheckIdentityErrors(await UserManager.SetEmailAsync(user, emailAddress)); CheckIdentityErrors(await UserManager.AddLoginAsync(user, info)); CheckIdentityErrors(await UserManager.AddDefaultRolesAsync(user)); + + user.Name = info.Principal.FindFirstValue(AbpClaimTypes.Name); + user.Surname = info.Principal.FindFirstValue(AbpClaimTypes.SurName); + + var phoneNumber = info.Principal.FindFirstValue(AbpClaimTypes.PhoneNumber); + if (!phoneNumber.IsNullOrWhiteSpace()) + { + var phoneNumberConfirmed = string.Equals(info.Principal.FindFirstValue(AbpClaimTypes.PhoneNumberVerified), "true", StringComparison.InvariantCultureIgnoreCase); + user.SetPhoneNumber(phoneNumber, phoneNumberConfirmed); + } + + await UserManager.UpdateAsync(user); return user; } From 7d190a3d9ff2011b136551851f9c416d82a8ef62 Mon Sep 17 00:00:00 2001 From: Musa Demir Date: Fri, 25 Mar 2022 16:47:02 +0300 Subject: [PATCH 064/143] shows users with publish permission that they have blog posts waiting for review --- .../Admin/Blogs/IBlogPostAdminAppService.cs | 2 ++ .../Admin/Blogs/BlogPostAdminAppService.cs | 6 ++++ .../BlogPostAdminClientProxy.Generated.cs | 5 +++ .../Admin/Blogs/BlogPostAdminController.cs | 10 +++++- .../Pages/CmsKit/BlogPosts/Index.cshtml | 7 +++- .../Pages/CmsKit/BlogPosts/index.js | 34 +++++++++++++++++-- .../client-proxies/cms-kit-admin-proxy.js | 7 ++++ .../CmsKit/Localization/Resources/en.json | 3 +- .../CmsKit/Localization/Resources/tr.json | 3 +- .../Volo/CmsKit/Blogs/IBlogPostRepository.cs | 2 ++ .../CmsKit/Blogs/EfCoreBlogPostRepository.cs | 6 ++++ .../MongoDB/Blogs/MongoBlogPostRepository.cs | 8 +++++ 12 files changed, 87 insertions(+), 6 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs index 061f9094b8..5b7868627f 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs @@ -22,4 +22,6 @@ public interface IBlogPostAdminAppService Task SendToReviewAsync(Guid id); Task CreateAndSendToReviewAsync(CreateBlogPostDto input); + + Task HasBlogPostWaitingForReviewAsync(); } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs index b512406454..1fef52f0c8 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs @@ -157,4 +157,10 @@ public class BlogPostAdminAppService : CmsKitAppServiceBase, IBlogPostAdminAppSe blogPost.Status = BlogPostStatus.WaitingForReview; return blogPost; } + + [Authorize(CmsKitAdminPermissions.BlogPosts.Publish)] + public async Task HasBlogPostWaitingForReviewAsync() + { + return await BlogPostRepository.HasBlogPostWaitingForReviewAsync(); + } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/BlogPostAdminClientProxy.Generated.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/BlogPostAdminClientProxy.Generated.cs index c3f94e1992..974d0a279b 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/BlogPostAdminClientProxy.Generated.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/BlogPostAdminClientProxy.Generated.cs @@ -95,4 +95,9 @@ public partial class BlogPostAdminClientProxy : ClientProxyBase HasBlogPostWaitingForReviewAsync() + { + return await RequestAsync(nameof(HasBlogPostWaitingForReviewAsync)); + } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs index 0efb2bf2d5..b48350a361 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs @@ -102,4 +102,12 @@ public class BlogPostAdminController : CmsKitAdminController, IBlogPostAdminAppS { return BlogPostAdminAppService.CreateAndSendToReviewAsync(input); } -} + + [HttpGet] + [Route("hasblogpostwaitingforreview")] + [Authorize(CmsKitAdminPermissions.BlogPosts.Publish)] + public virtual Task HasBlogPostWaitingForReviewAsync() + { + return BlogPostAdminAppService.HasBlogPostWaitingForReviewAsync(); + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/Index.cshtml b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/Index.cshtml index 9eeb977e84..e9e882098a 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/Index.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/Index.cshtml @@ -27,6 +27,11 @@ @await Component.InvokeAsync(typeof(AbpPageToolbarViewComponent), new {pageName = typeof(IndexModel).FullName}) } + + +
@@ -43,4 +48,4 @@ - + \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/index.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/index.js index a813a612ea..1e3b898225 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/index.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/index.js @@ -8,11 +8,18 @@ $(function () { }; var blogsService = volo.cmsKit.admin.blogs.blogPostAdmin; - + var _statusFilter; var getFilter = function () { - return { + var filter = { filter: $('#CmsKitBlogPostsWrapper input.page-search-filter-text').val() }; + + if (_statusFilter) { + filter.status = _statusFilter; + _statusFilter = null; + } + + return filter; }; var dataTable = $("#BlogPostsTable").DataTable(abp.libs.datatables.normalizeConfiguration({ @@ -52,6 +59,7 @@ $(function () { .then(function () { dataTable.ajax.reload(); abp.notify.success(l('SuccessfullyPublished')); + checkHasBlogPostWaitingForReview(); }); } }, @@ -87,6 +95,7 @@ $(function () { .then(function () { dataTable.ajax.reload(); abp.notify.success(l('SuccessfullySaved')); + checkHasBlogPostWaitingForReview(); }); } }, @@ -149,4 +158,25 @@ $(function () { e.preventDefault(); window.location.href = "BlogPosts/Create" }); + + $('#button-show-waiting-for-review').on('click', function (e) { + e.preventDefault(); + _statusFilter = blogPostStatus.SendToReview; + dataTable.ajax.reload(); + }); + + function checkHasBlogPostWaitingForReview(){ + if (!abp.auth.isGranted('CmsKit.BlogPosts.Publish')){ + $('#alertHasBlogPostWaitingForReview').hide(); + } + + blogsService.hasBlogPostWaitingForReview().then(function (result) { + if (result) { + $('#alertHasBlogPostWaitingForReview').show('fast'); + } else { + $('#alertHasBlogPostWaitingForReview').hide('fast'); + } + }); + } + checkHasBlogPostWaitingForReview(); }); diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js index 4c97f154a8..754efd41b5 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js @@ -431,6 +431,13 @@ }, ajaxParams)); }; + volo.cmsKit.admin.blogs.blogPostAdmin.hasBlogPostWaitingForReview = function(ajaxParams) { + return abp.ajax($.extend(true, { + url: abp.appPath + 'api/cms-kit-admin/blogs/blog-posts/hasblogpostwaitingforreview', + type: 'GET' + }, ajaxParams)); + }; + })(); })(); diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json index 48dc92ce92..eeb81b7447 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json @@ -178,6 +178,7 @@ "SaveAsDraft": "Save as draft", "SendToReview": "Send to review", "SendToReviewToPublish": "Send to review to publish", - "BlogPostSendToReviewSuccessMessage": "The blog post \"{0}\" has been sent to admin review for publishing." + "BlogPostSendToReviewSuccessMessage": "The blog post \"{0}\" has been sent to admin review for publishing.", + "HasBlogPostWaitingForReviewMessage": "You have a blog post waiting for review. Click to list." } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json index 38d8243ad6..3dad725d5b 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json @@ -177,6 +177,7 @@ "SaveAsDraft": "Taslak olarak kaydet", "SendToReview": "İncelemeye gönder", "SendToReviewToPublish": "Yayınlamak için admin incelemesine gönder", - "BlogPostSendToReviewSuccessMessage": "\"{0}\" başlıklı gönderiyi yayınlamak için admin incelemesine gönderildi." + "BlogPostSendToReviewSuccessMessage": "\"{0}\" başlıklı gönderiyi yayınlamak için admin incelemesine gönderildi.", + "HasBlogPostWaitingForReviewMessage": "Yayınlanmak için onay bekleyen blog postlar var! Listelemek için tıklayın." } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostRepository.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostRepository.cs index d73512a204..aa1b2e134a 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostRepository.cs @@ -31,4 +31,6 @@ public interface IBlogPostRepository : IBasicRepository Task GetBySlugAsync(Guid blogId, string slug, CancellationToken cancellationToken = default); Task> GetAuthorsHasBlogPosts(CancellationToken cancellationToken = default); + + Task HasBlogPostWaitingForReviewAsync(CancellationToken cancellationToken = default); } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs index cc78ffa698..a5d36e2f01 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs @@ -109,4 +109,10 @@ public class EfCoreBlogPostRepository : EfCoreRepository x.Author).Distinct() .ToListAsync(GetCancellationToken(cancellationToken)); } + + public virtual async Task HasBlogPostWaitingForReviewAsync(CancellationToken cancellationToken = default) + { + return await (await GetDbSetAsync()) + .AnyAsync(x => x.Status == BlogPostStatus.WaitingForReview, GetCancellationToken(cancellationToken)); + } } diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs index 65a8bf9c13..8a8cf70d57 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs @@ -125,4 +125,12 @@ public class MongoBlogPostRepository : MongoDbRepository HasBlogPostWaitingForReviewAsync(CancellationToken cancellationToken = default) + { + cancellationToken = GetCancellationToken(cancellationToken); + + return await (await GetMongoQueryableAsync(cancellationToken)) + .AnyAsync(x => x.Status == BlogPostStatus.WaitingForReview, cancellationToken); + } } From df34d665e923b217e0b5a2d815de6759b3b80de7 Mon Sep 17 00:00:00 2001 From: Musa Demir Date: Fri, 25 Mar 2022 17:14:18 +0300 Subject: [PATCH 065/143] implements filter by status to index page --- .../Pages/CmsKit/BlogPosts/Index.cshtml | 13 +++++++++++-- .../Pages/CmsKit/BlogPosts/index.js | 11 ++++++----- .../Volo/CmsKit/Localization/Resources/en.json | 4 +++- .../Volo/CmsKit/Localization/Resources/tr.json | 4 +++- 4 files changed, 23 insertions(+), 9 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/Index.cshtml b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/Index.cshtml index e9e882098a..a3f8c7b37a 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/Index.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/Index.cshtml @@ -5,6 +5,7 @@ @using Volo.CmsKit.Admin.Web.Pages @using Volo.CmsKit.Admin.Web.Menus @using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Pages.Shared.Components.AbpPageToolbar +@using Volo.CmsKit.Blogs @inherits CmsKitAdminPageBase @@ -27,7 +28,6 @@ @await Component.InvokeAsync(typeof(AbpPageToolbarViewComponent), new {pageName = typeof(IndexModel).FullName}) } - @@ -36,7 +36,16 @@
- + + + + @await Component.InvokeAsync(typeof(AbpPageSearchBoxViewComponent)) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/index.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/index.js index 1e3b898225..73e19a178a 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/index.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/index.js @@ -1,6 +1,8 @@ $(function () { var l = abp.localization.getResource("CmsKit"); + var $statusFilter = $("#StatusSelect"); + var blogPostStatus = { Draft: 0, Published: 1, @@ -8,15 +10,14 @@ $(function () { }; var blogsService = volo.cmsKit.admin.blogs.blogPostAdmin; - var _statusFilter; + var getFilter = function () { var filter = { filter: $('#CmsKitBlogPostsWrapper input.page-search-filter-text').val() }; - if (_statusFilter) { - filter.status = _statusFilter; - _statusFilter = null; + if ($statusFilter.val()) { + filter.status = $statusFilter.val(); } return filter; @@ -161,7 +162,7 @@ $(function () { $('#button-show-waiting-for-review').on('click', function (e) { e.preventDefault(); - _statusFilter = blogPostStatus.SendToReview; + $statusFilter.val(blogPostStatus.SendToReview); dataTable.ajax.reload(); }); diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json index eeb81b7447..d81c3a8c89 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json @@ -179,6 +179,8 @@ "SendToReview": "Send to review", "SendToReviewToPublish": "Send to review to publish", "BlogPostSendToReviewSuccessMessage": "The blog post \"{0}\" has been sent to admin review for publishing.", - "HasBlogPostWaitingForReviewMessage": "You have a blog post waiting for review. Click to list." + "HasBlogPostWaitingForReviewMessage": "You have a blog post waiting for review. Click to list.", + "SelectAStatus": "Select a status", + "Status": "Status" } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json index 3dad725d5b..975c644224 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json @@ -178,6 +178,8 @@ "SendToReview": "İncelemeye gönder", "SendToReviewToPublish": "Yayınlamak için admin incelemesine gönder", "BlogPostSendToReviewSuccessMessage": "\"{0}\" başlıklı gönderiyi yayınlamak için admin incelemesine gönderildi.", - "HasBlogPostWaitingForReviewMessage": "Yayınlanmak için onay bekleyen blog postlar var! Listelemek için tıklayın." + "HasBlogPostWaitingForReviewMessage": "Yayınlanmak için onay bekleyen blog postlar var! Listelemek için tıklayın.", + "SelectAStatus": "Durum seçin", + "Status": "Durum" } } From 973b5789c8cabc211298f65a3b7f3ae6ba9b816f Mon Sep 17 00:00:00 2001 From: Musa Demir Date: Fri, 25 Mar 2022 17:38:43 +0300 Subject: [PATCH 066/143] move changes to dev based branch moved from https://github.com/abpframework/abp/pull/12064 --- .../Admin/Blogs/IBlogPostAdminAppService.cs | 2 ++ .../Admin/Blogs/BlogPostAdminAppService.cs | 23 +++++++++++++++++-- .../BlogPostAdminClientProxy.Generated.cs | 8 +++++++ .../Admin/Blogs/BlogPostAdminController.cs | 8 +++++++ .../Pages/CmsKit/BlogPosts/Update.cshtml | 18 +++++++++------ .../Pages/CmsKit/BlogPosts/update.js | 18 ++++++++++++++- .../client-proxies/cms-kit-admin-proxy.js | 8 +++++++ .../CmsKit/Localization/Resources/en.json | 3 ++- .../CmsKit/Localization/Resources/tr.json | 3 ++- 9 files changed, 79 insertions(+), 12 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs index 314b7a1def..23562020d4 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs @@ -1,4 +1,5 @@ using System; +using System.Threading.Tasks; using Volo.Abp.Application.Services; namespace Volo.CmsKit.Admin.Blogs; @@ -12,4 +13,5 @@ public interface IBlogPostAdminAppService CreateBlogPostDto, UpdateBlogPostDto> { + Task RemoveCoverImageAsync(Guid id); } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs index 83899199f0..d463f8dcb1 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs @@ -6,6 +6,7 @@ using Volo.Abp.Application.Dtos; using Volo.Abp.Data; using Volo.Abp.GlobalFeatures; using Volo.Abp.Users; +using Volo.CmsKit.Admin.MediaDescriptors; using Volo.CmsKit.Blogs; using Volo.CmsKit.GlobalFeatures; using Volo.CmsKit.Permissions; @@ -22,16 +23,20 @@ public class BlogPostAdminAppService : CmsKitAppServiceBase, IBlogPostAdminAppSe protected IBlogRepository BlogRepository { get; } protected ICmsUserLookupService UserLookupService { get; } + protected IMediaDescriptorAdminAppService MediaDescriptorAdminAppService { get; } + public BlogPostAdminAppService( BlogPostManager blogPostManager, IBlogPostRepository blogPostRepository, IBlogRepository blogRepository, - ICmsUserLookupService userLookupService) + ICmsUserLookupService userLookupService, + IMediaDescriptorAdminAppService mediaDescriptorAdminAppService) { BlogPostManager = blogPostManager; BlogPostRepository = blogPostRepository; BlogRepository = blogRepository; UserLookupService = userLookupService; + MediaDescriptorAdminAppService = mediaDescriptorAdminAppService; } [Authorize(CmsKitAdminPermissions.BlogPosts.Create)] @@ -109,4 +114,18 @@ public class BlogPostAdminAppService : CmsKitAppServiceBase, IBlogPostAdminAppSe { await BlogPostRepository.DeleteAsync(id); } -} + + [Authorize(CmsKitAdminPermissions.BlogPosts.Update)] + public virtual async Task RemoveCoverImageAsync(Guid id) + { + var blogPost = await BlogPostRepository.GetAsync(id); + if (blogPost?.CoverImageMediaId == null) + { + return; + } + + await MediaDescriptorAdminAppService.DeleteAsync(blogPost.CoverImageMediaId.Value); + + blogPost.CoverImageMediaId = null; + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/BlogPostAdminClientProxy.Generated.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/BlogPostAdminClientProxy.Generated.cs index 560ba4e2de..0f201fb469 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/BlogPostAdminClientProxy.Generated.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/BlogPostAdminClientProxy.Generated.cs @@ -55,4 +55,12 @@ public partial class BlogPostAdminClientProxy : ClientProxyBase
- @if (Model.ViewModel.CoverImageMediaId != null) - { - -
- } - - +
+ @if (Model.ViewModel.CoverImageMediaId != null) + { + +
+ +
+ } +
+ +
diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/update.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/update.js index 5902dc111b..65e9c89146 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/update.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/update.js @@ -10,6 +10,7 @@ $(function () { var $blogPostIdInput = $('#Id'); var $tagsInput = $('.tag-editor-form input[name=tags]'); var $fileInput = $('#BlogPostCoverImage'); + var $buttonRemoveCoverImage = $('#button-remove-cover-image'); var UPPY_FILE_ID = "uppy-upload-file"; @@ -152,7 +153,6 @@ $(function () { } } - // ----------------------------------- var fileUploadUri = "/api/cms-kit-admin/media/blogpost"; var fileUriPrefix = "/api/cms-kit/media/"; @@ -225,4 +225,20 @@ $(function () { } }); } + + $buttonRemoveCoverImage.on('click', function () { + abp.message.confirm( + l('RemoveCoverImageConfirmationMessage'), + function (isConfirmed) { + if (isConfirmed) { + volo.cmsKit.admin.blogs.blogPostAdmin + .removeCoverImage($blogPostIdInput.val()) + .then(function () { + $coverImage.val(null); + $('#CurrentCoverImageArea').remove(); + }); + } + } + ); + }); }); diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js index 0a1424d92a..9bce6416a3 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js @@ -391,6 +391,14 @@ }, ajaxParams)); }; + volo.cmsKit.admin.blogs.blogPostAdmin.removeCoverImage = function(id, ajaxParams) { + return abp.ajax($.extend(true, { + url: abp.appPath + 'api/cms-kit-admin/blogs/blog-posts/removeCoverImage/' + id + '', + type: 'DELETE', + dataType: null + }, ajaxParams)); + }; + })(); })(); diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json index 0dd826480d..8cbd7ef946 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json @@ -164,6 +164,7 @@ "GlobalResources": "Global Resources", "Script": "Script", "Style": "Style", - "SavedSuccessfully": "Saved successfully" + "SavedSuccessfully": "Saved successfully", + "RemoveCoverImageConfirmationMessage": "Are you sure to remove the cover image?" } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json index 95ef414c17..90b10f153c 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json @@ -163,6 +163,7 @@ "GlobalResources": "Global Kaynaklar", "Script": "Script", "Style": "Style", - "SavedSuccessfully": "Başarıyla kaydedildi" + "SavedSuccessfully": "Başarıyla kaydedildi", + "RemoveCoverImageConfirmationMessage": "Kapak resmini kaldırmak istediğinize emin misiniz?" } } From f08f00ad279d0fe299f5d377e914f48759213ca5 Mon Sep 17 00:00:00 2001 From: Musa Demir Date: Fri, 25 Mar 2022 17:44:16 +0300 Subject: [PATCH 067/143] change route requested in https://github.com/abpframework/abp/pull/12064#discussion_r835134372 --- .../Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs | 2 +- .../wwwroot/client-proxies/cms-kit-admin-proxy.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs index 5492633078..0dbf8ec10d 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs @@ -63,7 +63,7 @@ public class BlogPostAdminController : CmsKitAdminController, IBlogPostAdminAppS } [HttpDelete] - [Route("removeCoverImage/{id}")] + [Route("{id}/cover-image")] [Authorize(CmsKitAdminPermissions.BlogPosts.Update)] public Task RemoveCoverImageAsync(Guid id) { diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js index 9bce6416a3..2cb7d2ab98 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js @@ -393,7 +393,7 @@ volo.cmsKit.admin.blogs.blogPostAdmin.removeCoverImage = function(id, ajaxParams) { return abp.ajax($.extend(true, { - url: abp.appPath + 'api/cms-kit-admin/blogs/blog-posts/removeCoverImage/' + id + '', + url: abp.appPath + 'api/cms-kit-admin/blogs/blog-posts/' + id + '/cover-image', type: 'DELETE', dataType: null }, ajaxParams)); From 484e4952dba54aeba09d62c83fc1c160c749a42d Mon Sep 17 00:00:00 2001 From: Musa Demir Date: Fri, 25 Mar 2022 17:46:47 +0300 Subject: [PATCH 068/143] add localization --- .../Volo/CmsKit/Localization/Resources/en.json | 3 ++- .../Volo/CmsKit/Localization/Resources/tr.json | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json index 8cbd7ef946..43f620bfd9 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json @@ -165,6 +165,7 @@ "Script": "Script", "Style": "Style", "SavedSuccessfully": "Saved successfully", - "RemoveCoverImageConfirmationMessage": "Are you sure to remove the cover image?" + "RemoveCoverImageConfirmationMessage": "Are you sure to remove the cover image?", + "RemoveCoverImage": "Remove the cover image" } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json index 90b10f153c..527e119a2e 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json @@ -164,6 +164,7 @@ "Script": "Script", "Style": "Style", "SavedSuccessfully": "Başarıyla kaydedildi", - "RemoveCoverImageConfirmationMessage": "Kapak resmini kaldırmak istediğinize emin misiniz?" + "RemoveCoverImageConfirmationMessage": "Kapak resmini kaldırmak istediğinize emin misiniz?", + "RemoveCoverImage": "Kapak resmini kaldır" } } From 03e790547fbc0fb02589edb216218b657d9367d5 Mon Sep 17 00:00:00 2001 From: Musa Demir Date: Fri, 25 Mar 2022 17:52:37 +0300 Subject: [PATCH 069/143] update blog post when it's status changed It is required for MongoDb. It is requested in https://github.com/abpframework/abp/pull/12073#discussion_r835100870 --- .../Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs index 7e1c11bbcd..acb7620472 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs @@ -119,6 +119,7 @@ public class BlogPostAdminAppService : CmsKitAppServiceBase, IBlogPostAdminAppSe { var blogPost = await BlogPostRepository.GetAsync(id); blogPost.SetPublished(); + await BlogPostRepository.UpdateAsync(blogPost); } [Authorize(CmsKitAdminPermissions.BlogPosts.Update)] @@ -126,6 +127,7 @@ public class BlogPostAdminAppService : CmsKitAppServiceBase, IBlogPostAdminAppSe { var blogPost = await BlogPostRepository.GetAsync(id); blogPost.SetDraft(); + await BlogPostRepository.UpdateAsync(blogPost); } [Authorize(CmsKitAdminPermissions.BlogPosts.Create)] From 7aa9b086d2e300ee3e413e916fa5d5380e6a1f8f Mon Sep 17 00:00:00 2001 From: Musa Demir Date: Fri, 25 Mar 2022 18:00:32 +0300 Subject: [PATCH 070/143] use kebab-case in route --- .../Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs | 2 +- .../wwwroot/client-proxies/cms-kit-admin-proxy.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs index ccc2e4fd25..1ae18e01c5 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs @@ -79,7 +79,7 @@ public class BlogPostAdminController : CmsKitAdminController, IBlogPostAdminAppS } [HttpPost] - [Route("createandpublish")] + [Route("create-and-publish")] [Authorize(CmsKitAdminPermissions.BlogPosts.Create)] [Authorize(CmsKitAdminPermissions.BlogPosts.Publish)] public virtual Task CreateAndPublishAsync(CreateBlogPostDto input) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js index aafdf7d245..e7de57cb09 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js @@ -409,7 +409,7 @@ volo.cmsKit.admin.blogs.blogPostAdmin.createAndPublish = function(input, ajaxParams) { return abp.ajax($.extend(true, { - url: abp.appPath + 'api/cms-kit-admin/blogs/blog-posts/createandpublish', + url: abp.appPath + 'api/cms-kit-admin/blogs/blog-posts/create-and-publish', type: 'POST', data: JSON.stringify(input) }, ajaxParams)); From d58c40f1eec1886ee85e4e0d562a02c8f8c86aeb Mon Sep 17 00:00:00 2001 From: Musa Demir Date: Fri, 25 Mar 2022 18:07:07 +0300 Subject: [PATCH 071/143] update blog post when it's status changed --- .../Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs index 8c8caecb76..e0af645131 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs @@ -147,6 +147,7 @@ public class BlogPostAdminAppService : CmsKitAppServiceBase, IBlogPostAdminAppSe { var blogPost = await BlogPostRepository.GetAsync(id); blogPost.SetWaitingForReview(); + await BlogPostRepository.UpdateAsync(blogPost); } [Authorize(CmsKitAdminPermissions.BlogPosts.Create)] From 6a7ea6a0ffd6ac6c58bb2f7f40f2f385615c9b46 Mon Sep 17 00:00:00 2001 From: Musa Demir Date: Fri, 25 Mar 2022 18:11:34 +0300 Subject: [PATCH 072/143] use kebap case in route --- .../Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs | 6 +++--- .../wwwroot/client-proxies/cms-kit-admin-proxy.js | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs index f285e3a542..85f53bed42 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs @@ -88,7 +88,7 @@ public class BlogPostAdminController : CmsKitAdminController, IBlogPostAdminAppS } [HttpPost] - [Route("sendtoreview/{id}")] + [Route("{id}/send-to-review")] [Authorize(CmsKitAdminPermissions.BlogPosts.Create)] public virtual Task SendToReviewAsync(Guid id) { @@ -96,7 +96,7 @@ public class BlogPostAdminController : CmsKitAdminController, IBlogPostAdminAppS } [HttpPost] - [Route("createandsendtoreview")] + [Route("create-and-send-to-review")] [Authorize(CmsKitAdminPermissions.BlogPosts.Create)] public virtual Task CreateAndSendToReviewAsync(CreateBlogPostDto input) { @@ -104,7 +104,7 @@ public class BlogPostAdminController : CmsKitAdminController, IBlogPostAdminAppS } [HttpGet] - [Route("hasblogpostwaitingforreview")] + [Route("has-blogpost-waiting-for-review")] [Authorize(CmsKitAdminPermissions.BlogPosts.Publish)] public virtual Task HasBlogPostWaitingForReviewAsync() { diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js index af615bfb86..f424c921ee 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js @@ -417,7 +417,7 @@ volo.cmsKit.admin.blogs.blogPostAdmin.sendToReview = function(id, ajaxParams) { return abp.ajax($.extend(true, { - url: abp.appPath + 'api/cms-kit-admin/blogs/blog-posts/sendtoreview/' + id + '', + url: abp.appPath + 'api/cms-kit-admin/blogs/blog-posts/' + id + '/send-to-review', type: 'POST', dataType: null }, ajaxParams)); @@ -425,7 +425,7 @@ volo.cmsKit.admin.blogs.blogPostAdmin.createAndSendToReview = function(input, ajaxParams) { return abp.ajax($.extend(true, { - url: abp.appPath + 'api/cms-kit-admin/blogs/blog-posts/createandsendtoreview', + url: abp.appPath + 'api/cms-kit-admin/blogs/blog-posts/create-and-send-to-review', type: 'POST', data: JSON.stringify(input) }, ajaxParams)); @@ -433,7 +433,7 @@ volo.cmsKit.admin.blogs.blogPostAdmin.hasBlogPostWaitingForReview = function(ajaxParams) { return abp.ajax($.extend(true, { - url: abp.appPath + 'api/cms-kit-admin/blogs/blog-posts/hasblogpostwaitingforreview', + url: abp.appPath + 'api/cms-kit-admin/blogs/blog-posts/has-blogpost-waiting-for-review', type: 'GET' }, ajaxParams)); }; From 3dfa70bbef30fb2d048e25ff4a41c43730113e7d Mon Sep 17 00:00:00 2001 From: Musa Demir Date: Fri, 25 Mar 2022 18:15:08 +0300 Subject: [PATCH 073/143] change route --- .../Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs | 4 ++-- .../wwwroot/client-proxies/cms-kit-admin-proxy.js | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs index 1ae18e01c5..fe30fd481c 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs @@ -63,7 +63,7 @@ public class BlogPostAdminController : CmsKitAdminController, IBlogPostAdminAppS } [HttpPost] - [Route("publish/{id}")] + [Route("{id}/publish")] [Authorize(CmsKitAdminPermissions.BlogPosts.Publish)] public virtual Task PublishAsync(Guid id) { @@ -71,7 +71,7 @@ public class BlogPostAdminController : CmsKitAdminController, IBlogPostAdminAppS } [HttpPost] - [Route("draft/{id}")] + [Route("{id}/draft")] [Authorize(CmsKitAdminPermissions.BlogPosts.Update)] public virtual Task DraftAsync(Guid id) { diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js index e7de57cb09..6215960b6c 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js @@ -393,7 +393,7 @@ volo.cmsKit.admin.blogs.blogPostAdmin.publish = function(id, ajaxParams) { return abp.ajax($.extend(true, { - url: abp.appPath + 'api/cms-kit-admin/blogs/blog-posts/publish/' + id + '', + url: abp.appPath + 'api/cms-kit-admin/blogs/blog-posts/' + id + '/publish', type: 'POST', dataType: null }, ajaxParams)); @@ -401,7 +401,7 @@ volo.cmsKit.admin.blogs.blogPostAdmin.draft = function(id, ajaxParams) { return abp.ajax($.extend(true, { - url: abp.appPath + 'api/cms-kit-admin/blogs/blog-posts/draft/' + id + '', + url: abp.appPath + 'api/cms-kit-admin/blogs/blog-posts/' + id + '/draft', type: 'POST', dataType: null }, ajaxParams)); From 62d5bab0715a697ec8d80557acff66b66d85c7c2 Mon Sep 17 00:00:00 2001 From: Musa Demir Date: Fri, 25 Mar 2022 18:16:31 +0300 Subject: [PATCH 074/143] add forgetten localization key --- .../Volo/CmsKit/Localization/Resources/en.json | 3 ++- .../Volo/CmsKit/Localization/Resources/tr.json | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json index 1083826bf7..af0bc386d6 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json @@ -172,6 +172,7 @@ "SuccessfullyPublished": "Successfully published!", "Draft": "Draft", "Publish": "Publish", - "BlogPostDraftConfirmationMessage": "Are you sure to set the blog post \"{0}\" as draft?" + "BlogPostDraftConfirmationMessage": "Are you sure to set the blog post \"{0}\" as draft?", + "SelectAnAuthor": "Select an author" } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json index 67ca5eeafd..7842224900 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json @@ -171,6 +171,7 @@ "SuccessfullyPublished": "Başarıyla yayınlandı", "Draft": "Taslak olarak kaydet", "Publish": "Yayınla", - "BlogPostDraftConfirmationMessage": "\"{0}\" başlıklı gönderiyi taslak haline getirmek istediğinize emin misiniz?" + "BlogPostDraftConfirmationMessage": "\"{0}\" başlıklı gönderiyi taslak haline getirmek istediğinize emin misiniz?", + "SelectAnAuthor": "Bir yazar seçin" } } From d7d0bc42a6afbba71a703661f4ef444df0c39c1e Mon Sep 17 00:00:00 2001 From: Musa Demir Date: Fri, 25 Mar 2022 18:20:31 +0300 Subject: [PATCH 075/143] list author only has published posts --- .../Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs | 4 +++- .../Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs | 9 ++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs index cc78ffa698..0c1f748f10 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs @@ -106,7 +106,9 @@ public class EfCoreBlogPostRepository : EfCoreRepository> GetAuthorsHasBlogPosts(CancellationToken cancellationToken = default) { - return await (await GetDbContextAsync()).BlogPosts.Select(x => x.Author).Distinct() + return await (await GetDbContextAsync()).BlogPosts + .Where(x => x.Status == BlogPostStatus.Published) + .Select(x => x.Author).Distinct() .ToListAsync(GetCancellationToken(cancellationToken)); } } diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs index 65a8bf9c13..a57c0973ce 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs @@ -110,9 +110,12 @@ public class MongoBlogPostRepository : MongoDbRepository> GetAuthorsHasBlogPosts(CancellationToken cancellationToken = default) { - var blogPostQueryable = (await GetQueryableAsync()); + cancellationToken = GetCancellationToken(cancellationToken); + + var blogPostQueryable = (await GetQueryableAsync()) + .Where(x => x.Status == BlogPostStatus.Published); - var usersQueryable = (await GetDbContextAsync()).Collection().AsQueryable(); + var usersQueryable = (await GetDbContextAsync(cancellationToken)).Collection().AsQueryable(); var queryable = blogPostQueryable .Join( @@ -123,6 +126,6 @@ public class MongoBlogPostRepository : MongoDbRepository s.user) .Distinct(); - return await AsyncExecuter.ToListAsync(queryable, GetCancellationToken(cancellationToken)); + return await AsyncExecuter.ToListAsync(queryable, cancellationToken); } } From a38d0001456975cf10422d5df2399560bc38d763 Mon Sep 17 00:00:00 2001 From: Musa Demir <48536631+demirmusa@users.noreply.github.com> Date: Fri, 25 Mar 2022 18:58:17 +0300 Subject: [PATCH 076/143] use form select for select item --- .../Pages/Public/CmsKit/Blogs/Index.cshtml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml index dbc0d699ef..4ae3c007c7 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml @@ -25,7 +25,7 @@
- @foreach (var author in Model.Authors) { @@ -76,4 +76,4 @@ - \ No newline at end of file + From 50a11f2f53272250177072a099c34bcce6899923 Mon Sep 17 00:00:00 2001 From: Musa Demir <48536631+demirmusa@users.noreply.github.com> Date: Fri, 25 Mar 2022 19:01:49 +0300 Subject: [PATCH 077/143] use form select for select item --- .../Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/Index.cshtml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/Index.cshtml b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/Index.cshtml index a3f8c7b37a..6587509d11 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/Index.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/Index.cshtml @@ -37,7 +37,7 @@
- @foreach (var status in (BlogPostStatus[]) Enum.GetValues(typeof(BlogPostStatus))) { @@ -57,4 +57,4 @@ - \ No newline at end of file + From a23509a3be61360e3d762bf5bdd6189807af4ed5 Mon Sep 17 00:00:00 2001 From: Roc Date: Mon, 28 Mar 2022 02:32:28 +0800 Subject: [PATCH 078/143] Update CultureHelper.cs --- .../src/Volo.Abp.Core/Volo/Abp/Localization/CultureHelper.cs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Localization/CultureHelper.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Localization/CultureHelper.cs index d4d4a5bed0..dded0d794e 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Localization/CultureHelper.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/Localization/CultureHelper.cs @@ -57,8 +57,6 @@ public static class CultureHelper public static string GetBaseCultureName(string cultureName) { - return cultureName.Contains("-") - ? cultureName.Left(cultureName.IndexOf("-", StringComparison.Ordinal)) - : cultureName; + return new CultureInfo(cultureName).Parent.Name; } } From 5fac9c9d1d06db94212f27c99e7e4c7503e56d6b Mon Sep 17 00:00:00 2001 From: Roc Date: Mon, 28 Mar 2022 02:35:31 +0800 Subject: [PATCH 079/143] Update AbpLocalization_Tests.cs --- .../Abp/Localization/AbpLocalization_Tests.cs | 56 ++++++++++++++++++- 1 file changed, 55 insertions(+), 1 deletion(-) diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/AbpLocalization_Tests.cs b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/AbpLocalization_Tests.cs index b8375485f7..6c4bdfff08 100644 --- a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/AbpLocalization_Tests.cs +++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/AbpLocalization_Tests.cs @@ -1,4 +1,4 @@ -using System.Globalization; +using System.Globalization; using System.Linq; using Microsoft.Extensions.Localization; using Shouldly; @@ -183,6 +183,60 @@ public class AbpLocalization_Tests : AbpIntegratedTest Date: Mon, 28 Mar 2022 13:35:17 +0800 Subject: [PATCH 080/143] Support for exporting generic interfaces. --- .../ExposeServicesAttribute.cs | 6 ++++- .../AutoRegistrationHelper_Tests.cs | 25 +++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/ExposeServicesAttribute.cs b/framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/ExposeServicesAttribute.cs index 72e7870125..286b9a8c76 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/ExposeServicesAttribute.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/ExposeServicesAttribute.cs @@ -15,7 +15,7 @@ public class ExposeServicesAttribute : Attribute, IExposedServiceTypesProvider public ExposeServicesAttribute(params Type[] serviceTypes) { - ServiceTypes = serviceTypes ?? new Type[0]; + ServiceTypes = serviceTypes ?? Type.EmptyTypes; } public Type[] GetExposedServiceTypes(Type targetType) @@ -49,6 +49,10 @@ public class ExposeServicesAttribute : Attribute, IExposedServiceTypesProvider foreach (var interfaceType in type.GetTypeInfo().GetInterfaces()) { var interfaceName = interfaceType.Name; + if (interfaceType.IsGenericType) + { + interfaceName = interfaceType.Name.Left(interfaceType.Name.IndexOf('`')); + } if (interfaceName.StartsWith("I")) { diff --git a/framework/test/Volo.Abp.Core.Tests/Volo/Abp/DependencyInjection/AutoRegistrationHelper_Tests.cs b/framework/test/Volo.Abp.Core.Tests/Volo/Abp/DependencyInjection/AutoRegistrationHelper_Tests.cs index 3c7ccfbc6a..5d8716a70c 100644 --- a/framework/test/Volo.Abp.Core.Tests/Volo/Abp/DependencyInjection/AutoRegistrationHelper_Tests.cs +++ b/framework/test/Volo.Abp.Core.Tests/Volo/Abp/DependencyInjection/AutoRegistrationHelper_Tests.cs @@ -33,6 +33,21 @@ public class AutoRegistrationHelper_Tests exposedServices.ShouldContain(typeof(IDerivedService)); } + [Fact] + public void Should_Get_Conventional_Exposed_Generic_Types_By_Default() + { + //Act + var exposedServices = ExposedServiceExplorer.GetExposedServices(typeof(DefaultGenericService)); + + //Assert + exposedServices.Count.ShouldBe(4); + exposedServices.ShouldContain(typeof(IService)); + exposedServices.ShouldContain(typeof(IGenericService)); + exposedServices.ShouldContain(typeof(IGenericService)); + exposedServices.ShouldContain(typeof(DefaultGenericService)); + } + + public class DefaultDerivedService : IDerivedService { } @@ -50,4 +65,14 @@ public class AutoRegistrationHelper_Tests { } + + public interface IGenericService + { + + } + + public class DefaultGenericService : IService, IGenericService, IGenericService + { + + } } From a676e2ebbcb9faa3c7597a77d0660a35873ff209 Mon Sep 17 00:00:00 2001 From: Enis Necipoglu Date: Mon, 28 Mar 2022 09:37:27 +0300 Subject: [PATCH 081/143] CmsKit - Add AutoComplete Select for Author filtering --- .../Volo/CmsKit/Blogs/IBlogPostRepository.cs | 11 +- .../CmsKit/Blogs/EfCoreBlogPostRepository.cs | 27 ++- .../MongoDB/Blogs/MongoBlogPostRepository.cs | 31 ++- ...tFilteredPagedAndSortedResultRequestDto.cs | 8 + .../Public/Blogs/IBlogPostPublicAppService.cs | 7 +- .../Public/Blogs/BlogPostPublicAppService.cs | 19 +- .../BlogPostPublicClientProxy.Generated.cs | 18 +- ...obalResourcePublicClientProxy.Generated.cs | 27 +++ .../GlobalResourcePublicClientProxy.cs | 7 + .../ClientProxies/cms-kit-generate-proxy.json | 190 +++++++++++++++++- .../Public/Blogs/BlogPostPublicController.cs | 11 +- .../Pages/Public/CmsKit/Blogs/Index.cshtml | 26 +-- .../Pages/Public/CmsKit/Blogs/Index.cshtml.cs | 14 +- 13 files changed, 353 insertions(+), 43 deletions(-) create mode 100644 modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/BlogPostFilteredPagedAndSortedResultRequestDto.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/GlobalResourcePublicClientProxy.Generated.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/GlobalResourcePublicClientProxy.cs diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostRepository.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostRepository.cs index fed0eed037..16c4f066a3 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostRepository.cs @@ -28,5 +28,14 @@ public interface IBlogPostRepository : IBasicRepository Task GetBySlugAsync(Guid blogId, string slug, CancellationToken cancellationToken = default); - Task> GetAuthorsHasBlogPosts(CancellationToken cancellationToken = default); + Task> GetAuthorsHasBlogPostsAsync( + int skipCount, + int maxResultCount, + string sorting, + string filter, + CancellationToken cancellationToken = default); + + Task GetAuthorsHasBlogPostsCountAsync(string filter, CancellationToken cancellationToken = default); + + Task GetAuthorHasBlogPostAsync(Guid id, CancellationToken cancellationToken = default); } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs index cfc39a62c7..b7fce01be6 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs @@ -7,6 +7,7 @@ using System.Linq.Dynamic.Core; using System.Threading; using System.Threading.Tasks; using Volo.Abp; +using Volo.Abp.Domain.Entities; using Volo.Abp.Domain.Repositories.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore; using Volo.CmsKit.EntityFrameworkCore; @@ -100,9 +101,31 @@ public class EfCoreBlogPostRepository : EfCoreRepository> GetAuthorsHasBlogPosts(CancellationToken cancellationToken = default) + public async Task> GetAuthorsHasBlogPostsAsync(int skipCount, int maxResultCount, string sorting, string filter, CancellationToken cancellationToken = default) { - return await (await GetDbContextAsync()).BlogPosts.Select(x => x.Author).Distinct() + return await (await CreateAuthorsQueryableAsync()) + .Skip(skipCount) + .Take(maxResultCount) + .WhereIf(!filter.IsNullOrEmpty(), x => x.UserName.Contains(filter.ToLower())) + .OrderBy(sorting.IsNullOrEmpty() ? nameof(CmsUser.UserName) : sorting) .ToListAsync(GetCancellationToken(cancellationToken)); } + + public async Task GetAuthorsHasBlogPostsCountAsync(string filter, CancellationToken cancellationToken = default) + { + return await (await CreateAuthorsQueryableAsync()) + .WhereIf(!filter.IsNullOrEmpty(), x => x.UserName.Contains(filter.ToLower())) + .CountAsync(GetCancellationToken(cancellationToken)); + } + + public async Task GetAuthorHasBlogPostAsync(Guid id, CancellationToken cancellationToken = default) + { + return await (await CreateAuthorsQueryableAsync()).FirstOrDefaultAsync(x => x.Id == id, GetCancellationToken(cancellationToken)) + ?? throw new EntityNotFoundException(typeof(CmsUser), id); + } + + private async Task> CreateAuthorsQueryableAsync() + { + return (await GetDbContextAsync()).BlogPosts.Select(x => x.Author).Distinct(); + } } diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs index 1db7fee75e..84570810cd 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs @@ -8,6 +8,7 @@ using System.Linq.Dynamic.Core; using System.Threading; using System.Threading.Tasks; using Volo.Abp; +using Volo.Abp.Domain.Entities; using Volo.Abp.Domain.Repositories.MongoDB; using Volo.Abp.MongoDB; using Volo.CmsKit.Blogs; @@ -105,13 +106,37 @@ public class MongoBlogPostRepository : MongoDbRepository x.BlogId == blogId && x.Slug.ToLower() == slug, cancellationToken); } - public async Task> GetAuthorsHasBlogPosts(CancellationToken cancellationToken = default) + public async Task> GetAuthorsHasBlogPostsAsync(int skipCount, int maxResultCount, string sorting, string filter, CancellationToken cancellationToken = default) + { + var queryable = (await CreateAuthorsQueryableAsync()) + .Skip(skipCount) + .Take(maxResultCount) + .OrderBy(sorting.IsNullOrEmpty() ? nameof(CmsUser.UserName) : sorting) + .WhereIf(!filter.IsNullOrEmpty(), x => x.UserName.Contains(filter.ToLower())); + + return await AsyncExecuter.ToListAsync(queryable, GetCancellationToken(cancellationToken)); + } + + public async Task GetAuthorsHasBlogPostsCountAsync(string filter, CancellationToken cancellationToken = default) + { + return await AsyncExecuter.CountAsync( + (await CreateAuthorsQueryableAsync()) + .WhereIf(!filter.IsNullOrEmpty(), x => x.UserName.Contains(filter.ToLower()))); + } + + public async Task GetAuthorHasBlogPostAsync(Guid id, CancellationToken cancellationToken = default) + { + return await AsyncExecuter.FirstOrDefaultAsync(await CreateAuthorsQueryableAsync(), x => x.Id == id) + ?? throw new EntityNotFoundException(typeof(CmsUser), id); + } + + private async Task> CreateAuthorsQueryableAsync() { var blogPostQueryable = (await GetQueryableAsync()); var usersQueryable = (await GetDbContextAsync()).Collection().AsQueryable(); - var queryable = blogPostQueryable + return blogPostQueryable .Join( usersQueryable, o => o.AuthorId, @@ -119,7 +144,5 @@ public class MongoBlogPostRepository : MongoDbRepository new { blogPost, user }) .Select(s => s.user) .Distinct(); - - return await AsyncExecuter.ToListAsync(queryable, GetCancellationToken(cancellationToken)); } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/BlogPostFilteredPagedAndSortedResultRequestDto.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/BlogPostFilteredPagedAndSortedResultRequestDto.cs new file mode 100644 index 0000000000..cb930ea37c --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/BlogPostFilteredPagedAndSortedResultRequestDto.cs @@ -0,0 +1,8 @@ +using Volo.Abp.Application.Dtos; + +namespace Volo.CmsKit.Public.Blogs; + +public class BlogPostFilteredPagedAndSortedResultRequestDto : PagedAndSortedResultRequestDto +{ + public string Filter { get; set; } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs index 02b6d2a5f4..42161f884c 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs @@ -4,6 +4,7 @@ using System.Threading.Tasks; using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Services; using Volo.CmsKit.Users; +using System; namespace Volo.CmsKit.Public.Blogs; @@ -12,6 +13,8 @@ public interface IBlogPostPublicAppService : IApplicationService Task> GetListAsync([NotNull] string blogSlug, BlogPostGetListInput input); Task GetAsync([NotNull] string blogSlug, [NotNull] string blogPostSlug); - - Task> GetAuthorsHasBlogPostsAsync(); + + Task> GetAuthorsHasBlogPostsAsync(BlogPostFilteredPagedAndSortedResultRequestDto input); + + Task GetAuthorHasBlogPostAsync(Guid id); } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs index a9121a5c2b..fc9da1bffb 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs @@ -1,4 +1,5 @@ using JetBrains.Annotations; +using System; using System.Collections.Generic; using System.Threading.Tasks; using Volo.Abp.Application.Dtos; @@ -15,7 +16,6 @@ public class BlogPostPublicAppService : CmsKitPublicAppServiceBase, IBlogPostPub protected IBlogRepository BlogRepository { get; } protected IBlogPostRepository BlogPostRepository { get; } - public BlogPostPublicAppService( IBlogRepository blogRepository, @@ -46,9 +46,20 @@ public class BlogPostPublicAppService : CmsKitPublicAppServiceBase, IBlogPostPub ObjectMapper.Map, List>(blogPosts)); } - public virtual async Task> GetAuthorsHasBlogPostsAsync() + public virtual async Task> GetAuthorsHasBlogPostsAsync(BlogPostFilteredPagedAndSortedResultRequestDto input) { - var authors = await BlogPostRepository.GetAuthorsHasBlogPosts(); - return ObjectMapper.Map, List>(authors); + var authors = await BlogPostRepository.GetAuthorsHasBlogPostsAsync(input.SkipCount, input.MaxResultCount, input.Sorting, input.Filter); + var authorDtos = ObjectMapper.Map, List>(authors); + + return new PagedResultDto( + await BlogPostRepository.GetAuthorsHasBlogPostsCountAsync(input.Filter), + authorDtos); + } + + public async Task GetAuthorHasBlogPostAsync(Guid id) + { + var author = await BlogPostRepository.GetAuthorHasBlogPostAsync(id); + + return ObjectMapper.Map(author); } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/BlogPostPublicClientProxy.Generated.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/BlogPostPublicClientProxy.Generated.cs index 9cc926515d..b1bbf6be07 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/BlogPostPublicClientProxy.Generated.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/BlogPostPublicClientProxy.Generated.cs @@ -1,6 +1,5 @@ // This file is automatically generated by ABP framework to use MVC Controllers from CSharp using System; -using System.Collections.Generic; using System.Threading.Tasks; using Volo.Abp.Application.Dtos; using Volo.Abp.Http.Client; @@ -25,7 +24,7 @@ public partial class BlogPostPublicClientProxy : ClientProxyBase> GetListAsync(string blogSlug, BlogPostGetListInput input) { return await RequestAsync>(nameof(GetListAsync), new ClientProxyRequestTypeValue @@ -35,8 +34,19 @@ public partial class BlogPostPublicClientProxy : ClientProxyBase> GetAuthorsHasBlogPostsAsync() + public virtual async Task> GetAuthorsHasBlogPostsAsync(BlogPostFilteredPagedAndSortedResultRequestDto input) + { + return await RequestAsync>(nameof(GetAuthorsHasBlogPostsAsync), new ClientProxyRequestTypeValue + { + { typeof(BlogPostFilteredPagedAndSortedResultRequestDto), input } + }); + } + + public virtual async Task GetAuthorHasBlogPostAsync(Guid id) { - return await RequestAsync>(nameof(GetAuthorsHasBlogPostsAsync)); + return await RequestAsync(nameof(GetAuthorHasBlogPostAsync), new ClientProxyRequestTypeValue + { + { typeof(Guid), id } + }); } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/GlobalResourcePublicClientProxy.Generated.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/GlobalResourcePublicClientProxy.Generated.cs new file mode 100644 index 0000000000..d7354b9e87 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/GlobalResourcePublicClientProxy.Generated.cs @@ -0,0 +1,27 @@ +// This file is automatically generated by ABP framework to use MVC Controllers from CSharp +using System; +using System.Threading.Tasks; +using Volo.Abp.Application.Dtos; +using Volo.Abp.Http.Client; +using Volo.Abp.Http.Modeling; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Http.Client.ClientProxying; +using Volo.CmsKit.Public.GlobalResources; + +// ReSharper disable once CheckNamespace +namespace Volo.CmsKit.Public.GlobalResources.ClientProxies; + +[Dependency(ReplaceServices = true)] +[ExposeServices(typeof(IGlobalResourcePublicAppService), typeof(GlobalResourcePublicClientProxy))] +public partial class GlobalResourcePublicClientProxy : ClientProxyBase, IGlobalResourcePublicAppService +{ + public virtual async Task GetGlobalScriptAsync() + { + return await RequestAsync(nameof(GetGlobalScriptAsync)); + } + + public virtual async Task GetGlobalStyleAsync() + { + return await RequestAsync(nameof(GetGlobalStyleAsync)); + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/GlobalResourcePublicClientProxy.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/GlobalResourcePublicClientProxy.cs new file mode 100644 index 0000000000..76549aec1e --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/GlobalResourcePublicClientProxy.cs @@ -0,0 +1,7 @@ +// This file is part of GlobalResourcePublicClientProxy, you can customize it here +// ReSharper disable once CheckNamespace +namespace Volo.CmsKit.Public.GlobalResources.ClientProxies; + +public partial class GlobalResourcePublicClientProxy +{ +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/cms-kit-generate-proxy.json b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/cms-kit-generate-proxy.json index 0387176b02..d39e795845 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/cms-kit-generate-proxy.json +++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/cms-kit-generate-proxy.json @@ -7,6 +7,8 @@ "Volo.CmsKit.Public.Tags.TagPublicController": { "controllerName": "TagPublic", "controllerGroupName": "TagPublic", + "isRemoteService": true, + "apiVersion": null, "type": "Volo.CmsKit.Public.Tags.TagPublicController", "interfaces": [ { @@ -76,6 +78,8 @@ "Volo.CmsKit.Public.Reactions.ReactionPublicController": { "controllerName": "ReactionPublic", "controllerGroupName": "ReactionPublic", + "isRemoteService": true, + "apiVersion": null, "type": "Volo.CmsKit.Public.Reactions.ReactionPublicController", "interfaces": [ { @@ -299,6 +303,8 @@ "Volo.CmsKit.Public.Ratings.RatingPublicController": { "controllerName": "RatingPublic", "controllerGroupName": "RatingPublic", + "isRemoteService": true, + "apiVersion": null, "type": "Volo.CmsKit.Public.Ratings.RatingPublicController", "interfaces": [ { @@ -502,6 +508,8 @@ "Volo.CmsKit.Public.Pages.PagesPublicController": { "controllerName": "PagesPublic", "controllerGroupName": "PagesPublic", + "isRemoteService": true, + "apiVersion": null, "type": "Volo.CmsKit.Public.Pages.PagesPublicController", "interfaces": [ { @@ -551,6 +559,8 @@ "Volo.CmsKit.Public.Menus.MenuItemPublicController": { "controllerName": "MenuItemPublic", "controllerGroupName": "MenuItemPublic", + "isRemoteService": true, + "apiVersion": null, "type": "Volo.CmsKit.Public.Menus.MenuItemPublicController", "interfaces": [ { @@ -575,9 +585,55 @@ } } }, + "Volo.CmsKit.Public.GlobalResources.GlobalResourcePublicController": { + "controllerName": "GlobalResourcePublic", + "controllerGroupName": "GlobalResourcePublic", + "isRemoteService": true, + "apiVersion": null, + "type": "Volo.CmsKit.Public.GlobalResources.GlobalResourcePublicController", + "interfaces": [ + { + "type": "Volo.CmsKit.Public.GlobalResources.IGlobalResourcePublicAppService" + } + ], + "actions": { + "GetGlobalScriptAsync": { + "uniqueName": "GetGlobalScriptAsync", + "name": "GetGlobalScriptAsync", + "httpMethod": "GET", + "url": "api/cms-kit-public/global-resources/script", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.CmsKit.Public.GlobalResources.GlobalResourceDto", + "typeSimple": "Volo.CmsKit.Public.GlobalResources.GlobalResourceDto" + }, + "allowAnonymous": null, + "implementFrom": "Volo.CmsKit.Public.GlobalResources.IGlobalResourcePublicAppService" + }, + "GetGlobalStyleAsync": { + "uniqueName": "GetGlobalStyleAsync", + "name": "GetGlobalStyleAsync", + "httpMethod": "GET", + "url": "api/cms-kit-public/global-resources/style", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.CmsKit.Public.GlobalResources.GlobalResourceDto", + "typeSimple": "Volo.CmsKit.Public.GlobalResources.GlobalResourceDto" + }, + "allowAnonymous": null, + "implementFrom": "Volo.CmsKit.Public.GlobalResources.IGlobalResourcePublicAppService" + } + } + }, "Volo.CmsKit.Public.Comments.CommentPublicController": { "controllerName": "CommentPublic", "controllerGroupName": "CommentPublic", + "isRemoteService": true, + "apiVersion": null, "type": "Volo.CmsKit.Public.Comments.CommentPublicController", "interfaces": [ { @@ -818,6 +874,8 @@ "Volo.CmsKit.Public.Blogs.BlogPostPublicController": { "controllerName": "BlogPostPublic", "controllerGroupName": "BlogPostPublic", + "isRemoteService": true, + "apiVersion": null, "type": "Volo.CmsKit.Public.Blogs.BlogPostPublicController", "interfaces": [ { @@ -899,9 +957,9 @@ }, { "name": "input", - "typeAsString": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto, Volo.Abp.Ddd.Application.Contracts", - "type": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", - "typeSimple": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "typeAsString": "Volo.CmsKit.Public.Blogs.BlogPostGetListInput, Volo.CmsKit.Public.Application.Contracts", + "type": "Volo.CmsKit.Public.Blogs.BlogPostGetListInput", + "typeSimple": "Volo.CmsKit.Public.Blogs.BlogPostGetListInput", "isOptional": false, "defaultValue": null } @@ -919,6 +977,30 @@ "bindingSourceId": "Path", "descriptorName": "" }, + { + "nameOnMethod": "input", + "name": "AuthorId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, { "nameOnMethod": "input", "name": "SkipCount", @@ -942,6 +1024,43 @@ "constraintTypes": null, "bindingSourceId": "ModelBinding", "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + }, + "allowAnonymous": null, + "implementFrom": "Volo.CmsKit.Public.Blogs.IBlogPostPublicAppService" + }, + "GetAuthorsHasBlogPostsAsyncByInput": { + "uniqueName": "GetAuthorsHasBlogPostsAsyncByInput", + "name": "GetAuthorsHasBlogPostsAsync", + "httpMethod": "GET", + "url": "api/cms-kit-public/blog-posts/authors", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.CmsKit.Public.Blogs.BlogPostFilteredPagedAndSortedResultRequestDto, Volo.CmsKit.Public.Application.Contracts", + "type": "Volo.CmsKit.Public.Blogs.BlogPostFilteredPagedAndSortedResultRequestDto", + "typeSimple": "Volo.CmsKit.Public.Blogs.BlogPostFilteredPagedAndSortedResultRequestDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" }, { "nameOnMethod": "input", @@ -954,11 +1073,72 @@ "constraintTypes": null, "bindingSourceId": "ModelBinding", "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" } ], "returnValue": { - "type": "Volo.Abp.Application.Dtos.PagedResultDto", - "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + }, + "allowAnonymous": null, + "implementFrom": "Volo.CmsKit.Public.Blogs.IBlogPostPublicAppService" + }, + "GetAuthorHasBlogPostAsyncById": { + "uniqueName": "GetAuthorHasBlogPostAsyncById", + "name": "GetAuthorHasBlogPostAsync", + "httpMethod": "GET", + "url": "api/cms-kit-public/blog-posts/authors/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.CmsKit.Users.CmsUserDto", + "typeSimple": "Volo.CmsKit.Users.CmsUserDto" }, "allowAnonymous": null, "implementFrom": "Volo.CmsKit.Public.Blogs.IBlogPostPublicAppService" diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs index 8a788f7a34..9f43d65766 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs @@ -40,8 +40,15 @@ public class BlogPostPublicController : CmsKitPublicControllerBase, IBlogPostPub [HttpGet] [Route("authors")] - public virtual Task> GetAuthorsHasBlogPostsAsync() + public Task> GetAuthorsHasBlogPostsAsync(BlogPostFilteredPagedAndSortedResultRequestDto input) { - return BlogPostPublicAppService.GetAuthorsHasBlogPostsAsync(); + return BlogPostPublicAppService.GetAuthorsHasBlogPostsAsync(input); + } + + [HttpGet] + [Route("authors/{id}")] + public Task GetAuthorHasBlogPostAsync(Guid id) + { + return BlogPostPublicAppService.GetAuthorHasBlogPostAsync(id); } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml index 4ae3c007c7..32df5fb2fd 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml @@ -24,19 +24,19 @@
- - + + @if(Model.SelectedAuthor != null) + { + }
diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml.cs index c9dc49931d..c7f667382b 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml.cs @@ -20,16 +20,15 @@ public class IndexModel : CmsKitPublicPageModelBase [BindProperty(SupportsGet = true)] public int CurrentPage { get; set; } = 1; - + [BindProperty(SupportsGet = true)] public Guid? AuthorId { get; set; } public PagedResultDto Blogs { get; private set; } public PagerModel PagerModel => new PagerModel(Blogs.TotalCount, Blogs.Items.Count, CurrentPage, PageSize, Request.Path.ToString()); - - [BindProperty(SupportsGet = true)] - public List Authors { get; set; } + + public CmsUserDto SelectedAuthor { get; set; } protected IBlogPostPublicAppService BlogPostPublicAppService { get; } @@ -48,7 +47,10 @@ public class IndexModel : CmsKitPublicPageModelBase MaxResultCount = PageSize, AuthorId = AuthorId }); - - Authors = await BlogPostPublicAppService.GetAuthorsHasBlogPostsAsync(); + + if (AuthorId != null) + { + SelectedAuthor = await BlogPostPublicAppService.GetAuthorHasBlogPostAsync(AuthorId.Value); + } } } From 511540a2642e355b1a8bf7c3e78062abfc226563 Mon Sep 17 00:00:00 2001 From: Enis Necipoglu Date: Mon, 28 Mar 2022 09:50:07 +0300 Subject: [PATCH 082/143] Update resources --- .../Volo/CmsKit/Localization/Resources/en.json | 1 + .../Volo/CmsKit/Localization/Resources/tr.json | 1 + 2 files changed, 2 insertions(+) diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json index 0dd826480d..0e201329ef 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json @@ -130,6 +130,7 @@ "SelectAll": "Select All", "Send": "Send", "SendMessage": "Send Message", + "SelectedAuthor": "Author", "ShortDescription": "Short description", "Slug": "Slug", "Source": "Source", diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json index 95ef414c17..3f855f13a9 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json @@ -129,6 +129,7 @@ "SelectAll": "Hepsini seç", "Send": "Gönder", "SendMessage": "Mesajı Gönder", + "SelectedAuthor": "Yazar", "ShortDescription": "Kısa açıklama", "Slug": "Etiket", "Source": "Kaynak", From 5723fd0a924a65f0acb3c8024845fa73bc6c19c7 Mon Sep 17 00:00:00 2001 From: Enis Necipoglu Date: Mon, 28 Mar 2022 09:53:45 +0300 Subject: [PATCH 083/143] Update tests --- .../test/Volo.CmsKit.TestBase/Blogs/BlogPostRepository_Test.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/cms-kit/test/Volo.CmsKit.TestBase/Blogs/BlogPostRepository_Test.cs b/modules/cms-kit/test/Volo.CmsKit.TestBase/Blogs/BlogPostRepository_Test.cs index 4d696e916d..c9cc6472fe 100644 --- a/modules/cms-kit/test/Volo.CmsKit.TestBase/Blogs/BlogPostRepository_Test.cs +++ b/modules/cms-kit/test/Volo.CmsKit.TestBase/Blogs/BlogPostRepository_Test.cs @@ -149,7 +149,7 @@ public abstract class BlogPostRepository_Test : CmsKitTestBase Date: Mon, 28 Mar 2022 18:15:07 +0300 Subject: [PATCH 084/143] Update en.json --- .../Commercial/Localization/Resources/en.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json index 8fa96b5ee2..446d165f21 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json @@ -503,6 +503,7 @@ "AdditionalNote": "Additional Note", "OnboardingTrainingFaqTitle": "Do you have ABP onboarding training?", "OnboardingTrainingFaqExplanation": "Yes, we have ABP Training Services to help you get your ABP project started fast. You will learn about ABP from an ABP core team member and you will get the skills to begin your ABP project. In the onboarding training, we will explain how to set up your development environment, install the required tools, create a fully functional CRUD page. The training will be live and the Zoom application will be used, and we are open to using other online meeting platforms. The language of the training will be English. You can also ask your questions about ABP during the sessions. A convenient time and date will be planned for both parties. To get more information, contact us at info@abp.io.", - "AddBasket": "Add to Basket" + "AddBasket": "Add to Basket", + "SendTrainingRequest": "Send Training Request" } } From e8a810ba4bd94bd1d4ca447ec4d8645354c75d1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Tue, 29 Mar 2022 15:04:20 +0300 Subject: [PATCH 085/143] Check for null for receivedContext.TokenEndpointRequest --- .../DependencyInjection/AbpOpenIdConnectExtensions.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Authentication.OpenIdConnect/Microsoft/Extensions/DependencyInjection/AbpOpenIdConnectExtensions.cs b/framework/src/Volo.Abp.AspNetCore.Authentication.OpenIdConnect/Microsoft/Extensions/DependencyInjection/AbpOpenIdConnectExtensions.cs index 02b292a984..894ba470a8 100644 --- a/framework/src/Volo.Abp.AspNetCore.Authentication.OpenIdConnect/Microsoft/Extensions/DependencyInjection/AbpOpenIdConnectExtensions.cs +++ b/framework/src/Volo.Abp.AspNetCore.Authentication.OpenIdConnect/Microsoft/Extensions/DependencyInjection/AbpOpenIdConnectExtensions.cs @@ -57,8 +57,7 @@ public static class AbpOpenIdConnectExtensions if (receivedContext.Request.Cookies.ContainsKey(tenantKey)) { - receivedContext.TokenEndpointRequest.SetParameter(tenantKey, - receivedContext.Request.Cookies[tenantKey]); + receivedContext.TokenEndpointRequest?.SetParameter(tenantKey, receivedContext.Request.Cookies[tenantKey]); } } } From 45685fb58a92212266a6f286a11f47d811e304a9 Mon Sep 17 00:00:00 2001 From: Musa Demir Date: Tue, 29 Mar 2022 16:26:39 +0300 Subject: [PATCH 086/143] add scroll index to blog post page --- .../BlogPostScrollIndexFeature.cs | 17 ++ .../GlobalFeatures/GlobalCmsKitFeatures.cs | 3 + .../CmsKit/Localization/Resources/en.json | 4 +- .../CmsKit/Localization/Resources/tr.json | 4 +- .../Pages/Public/CmsKit/Blogs/BlogPost.cshtml | 167 +++++++++-------- .../Pages/Public/CmsKit/Blogs/blogPost.css | 17 ++ .../Pages/Public/CmsKit/Blogs/blogpost.js | 46 +++++ .../Public/CmsKit/Blogs/bootstrap-toc.css | 60 +++++++ .../Public/CmsKit/Blogs/bootstrap-toc.js | 168 ++++++++++++++++++ 9 files changed, 414 insertions(+), 72 deletions(-) create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/GlobalFeatures/BlogPostScrollIndexFeature.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/blogpost.js create mode 100644 modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/bootstrap-toc.css create mode 100644 modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/bootstrap-toc.js diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/GlobalFeatures/BlogPostScrollIndexFeature.cs b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/GlobalFeatures/BlogPostScrollIndexFeature.cs new file mode 100644 index 0000000000..9f03f973e1 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/GlobalFeatures/BlogPostScrollIndexFeature.cs @@ -0,0 +1,17 @@ +using JetBrains.Annotations; +using Volo.Abp.GlobalFeatures; + +namespace Volo.CmsKit.GlobalFeatures; + + +[GlobalFeatureName(Name)] +public class BlogPostScrollIndexFeature : GlobalFeature +{ + public const string Name = "CmsKit.BlogPost.ScrollIndex"; + + internal BlogPostScrollIndexFeature( + [NotNull] GlobalCmsKitFeatures cmsKit + ) : base(cmsKit) + { + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/GlobalFeatures/GlobalCmsKitFeatures.cs b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/GlobalFeatures/GlobalCmsKitFeatures.cs index 9c07101616..6a7ca3245a 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/GlobalFeatures/GlobalCmsKitFeatures.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/GlobalFeatures/GlobalCmsKitFeatures.cs @@ -26,6 +26,8 @@ public class GlobalCmsKitFeatures : GlobalModuleFeatures public MenuFeature Menu => GetFeature(); public GlobalResourcesFeature GlobalResources => GetFeature(); + + public BlogPostScrollIndexFeature BlogPostScrollIndex => GetFeature(); public GlobalCmsKitFeatures([NotNull] GlobalFeatureManager featureManager) : base(featureManager) @@ -40,5 +42,6 @@ public class GlobalCmsKitFeatures : GlobalModuleFeatures AddFeature(new CmsUserFeature(this)); AddFeature(new MenuFeature(this)); AddFeature(new GlobalResourcesFeature(this)); + AddFeature(new BlogPostScrollIndexFeature(this)); } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json index 0dd826480d..2634099fd1 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json @@ -164,6 +164,8 @@ "GlobalResources": "Global Resources", "Script": "Script", "Style": "Style", - "SavedSuccessfully": "Saved successfully" + "SavedSuccessfully": "Saved successfully", + "GoToTop": "Go to top", + "InThisDocument": "In this document" } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json index 95ef414c17..00cc5303d4 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json @@ -163,6 +163,8 @@ "GlobalResources": "Global Kaynaklar", "Script": "Script", "Style": "Style", - "SavedSuccessfully": "Başarıyla kaydedildi" + "SavedSuccessfully": "Başarıyla kaydedildi", + "GoToTop": "Yukarı Git", + "InThisDocument": "Bu belgede" } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/BlogPost.cshtml b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/BlogPost.cshtml index d8c1f428da..90f16c18fd 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/BlogPost.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/BlogPost.cshtml @@ -17,91 +17,118 @@ @inject IMarkdownToHtmlRenderer MarkdownRenderer @section styles{ - - - - + + + + + } @section scripts{ - - - - + + + + + + } @{ string dummyImageSource = "https://dummyimage.com/1280x720/a3a3a3/fff.png?text=" + Model.BlogPost.Title; + var isScrollIndexEnabled = GlobalFeatureManager.Instance.IsEnabled(); } - - - - -
-

@Model.BlogPost.Title

-

- @@@Model.BlogPost.Author?.UserName - @Model.BlogPost.CreationTime -

+
+
+ + + + +
+

@Model.BlogPost.Title

+

+ @@@Model.BlogPost.Author?.UserName + @Model.BlogPost.CreationTime +

- @if(!Model.BlogPost.Content.IsNullOrEmpty()) - { - @Html.Raw(await MarkdownRenderer.RenderAsync(Model.BlogPost.Content)) - } + @if (!Model.BlogPost.Content.IsNullOrEmpty()) + { + @Html.Raw(await MarkdownRenderer.RenderAsync(Model.BlogPost.Content)) + } -

- @if (Model.BlogPost.LastModificationTime != null) - { - @L["LastModification"].Value : @Model.BlogPost.LastModificationTime - } -

-
+

+ @if (Model.BlogPost.LastModificationTime != null) + { + @L["LastModification"].Value : @Model.BlogPost.LastModificationTime + } +

+
- @if (GlobalFeatureManager.Instance.IsEnabled()) - { - if (Model.TagsFeature?.IsEnabled == true) - { - @await Component.InvokeAsync(typeof(TagViewComponent), new - { - entityType = Volo.CmsKit.Blogs.BlogPostConsts.EntityType, - entityId = Model.BlogPost.Id.ToString() - }) - } - } -
-
+ @if (GlobalFeatureManager.Instance.IsEnabled()) + { + if (Model.TagsFeature?.IsEnabled == true) + { + @await Component.InvokeAsync(typeof(TagViewComponent), new + { + entityType = Volo.CmsKit.Blogs.BlogPostConsts.EntityType, + entityId = Model.BlogPost.Id.ToString() + }) + } + } +
+ - - - @if (GlobalFeatureManager.Instance.IsEnabled()) - { - if (Model.ReactionsFeature?.IsEnabled == true) - { - @await Component.InvokeAsync(typeof(ReactionSelectionViewComponent), new + + + @if (GlobalFeatureManager.Instance.IsEnabled()) { - entityType = Volo.CmsKit.Blogs.BlogPostConsts.EntityType, - entityId = Model.BlogPost.Id.ToString() - }) - } - } - - - @if (GlobalFeatureManager.Instance.IsEnabled()) - { - if (Model.RatingsFeature?.IsEnabled == true) - { - @await Component.InvokeAsync(typeof(RatingViewComponent), new + if (Model.ReactionsFeature?.IsEnabled == true) + { + @await Component.InvokeAsync(typeof(ReactionSelectionViewComponent), new + { + entityType = Volo.CmsKit.Blogs.BlogPostConsts.EntityType, + entityId = Model.BlogPost.Id.ToString() + }) + } + } + + + @if (GlobalFeatureManager.Instance.IsEnabled()) { - entityType = Volo.CmsKit.Blogs.BlogPostConsts.EntityType, - entityId = Model.BlogPost.Id.ToString() - }) - } - } - - - - + if (Model.RatingsFeature?.IsEnabled == true) + { + @await Component.InvokeAsync(typeof(RatingViewComponent), new + { + entityType = Volo.CmsKit.Blogs.BlogPostConsts.EntityType, + entityId = Model.BlogPost.Id.ToString() + }) + } + } + + + + +
+ @if (isScrollIndexEnabled) + { +
+
+
@L["InThisDocument"]
+ + + +
+
+ } + +
@if (GlobalFeatureManager.Instance.IsEnabled()) { diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/blogPost.css b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/blogPost.css index 98c4a3100d..d09be3150d 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/blogPost.css +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/blogPost.css @@ -20,4 +20,21 @@ span.area-title { } .popover { min-width: 276px; +} + +#scroll-index { + position: sticky; + top: 20px; +} + +#scroll-index .scroll-top-btn.showup{ + display: block; +} + +#scroll-index .scroll-top-btn{ + display: none; + font-size: .85em; + color: #aaa; + text-decoration: none; + padding-left: 18px; } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/blogpost.js b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/blogpost.js new file mode 100644 index 0000000000..603649e2c9 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/blogpost.js @@ -0,0 +1,46 @@ +$(function () { + var $myNav = $('#blog-post-sticky-index'); + var $scrollToTopBtn = $('.scroll-top-btn'); + + window.Toc.helpers.createNavList = function () { + return $(''); + }; + + window.Toc.helpers.createChildNavList = function ($parent) { + var $childList = this.createNavList(); + $parent.append($childList); + return $childList; + }; + + window.Toc.helpers.generateNavEl = function (anchor, text) { + var $a = $(''); + $a.attr('href', '#' + anchor); + $a.text(text); + var $li = $(''); + $li.append($a); + return $li; + }; + + Toc.init($myNav); + + $('body').scrollspy({ + target: $myNav, + }); + + $scrollToTopBtn.click(function () { + $('html, body').animate({scrollTop: 0}, 'fast'); + }); + + // When the user scrolls down 20px from the top of the document, show the button + window.onscroll = function () { + scrollFunction() + }; + + function scrollFunction() { + if (document.body.scrollTop > 20 || document.documentElement.scrollTop > 20) { + $scrollToTopBtn.addClass('showup'); + } else { + $scrollToTopBtn.removeClass('showup'); + } + } +}); diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/bootstrap-toc.css b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/bootstrap-toc.css new file mode 100644 index 0000000000..b15e18ee85 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/bootstrap-toc.css @@ -0,0 +1,60 @@ +/*! + * Bootstrap Table of Contents v<%= version %> (http://afeld.github.io/bootstrap-toc/) + * Copyright 2015 Aidan Feldman + * Licensed under MIT (https://github.com/afeld/bootstrap-toc/blob/gh-pages/LICENSE.md) */ + +/* modified from https://github.com/twbs/bootstrap/blob/94b4076dd2efba9af71f0b18d4ee4b163aa9e0dd/docs/assets/css/src/docs.css#L548-L601 */ + +/* All levels of nav */ +nav[data-toggle='toc'] .nav > li > a { + display: block; + padding: 4px 20px; + font-size: 13px; + font-weight: 500; + color: #767676; +} +nav[data-toggle='toc'] .nav > li > a:hover, +nav[data-toggle='toc'] .nav > li > a:focus { + padding-left: 19px; + color: #563d7c; + text-decoration: none; + background-color: transparent; + border-left: 1px solid #563d7c; +} +nav[data-toggle='toc'] .nav-link.active, +nav[data-toggle='toc'] .nav-link.active:hover, +nav[data-toggle='toc'] .nav-link.active:focus { + padding-left: 18px; + font-weight: bold; + color: #563d7c; + background-color: transparent; + border-left: 2px solid #563d7c; +} + +/* Nav: second level (shown on .active) */ +nav[data-toggle='toc'] .nav-link + ul { + display: none; /* Hide by default, but at >768px, show it */ + padding-bottom: 10px; +} + +nav[data-toggle='toc'] .nav .nav > li > a { + padding-top: 1px; + padding-bottom: 1px; + padding-left: 30px; + font-size: 12px; + font-weight: normal; +} +nav[data-toggle='toc'] .nav .nav > li > a:hover, +nav[data-toggle='toc'] .nav .nav > li > a:focus { + padding-left: 29px; +} +nav[data-toggle='toc'] .nav .nav > li > .active, +nav[data-toggle='toc'] .nav .nav > li > .active:hover, +nav[data-toggle='toc'] .nav .nav > li > .active:focus { + padding-left: 28px; + font-weight: 500; +} + +nav[data-toggle='toc'] .nav-link.active + ul { + display: block; +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/bootstrap-toc.js b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/bootstrap-toc.js new file mode 100644 index 0000000000..13a4d1f6a5 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/bootstrap-toc.js @@ -0,0 +1,168 @@ +/*! + * Bootstrap Table of Contents v1.0.0 (http://afeld.github.io/bootstrap-toc/) + * Copyright 2015 Aidan Feldman + * Licensed under MIT (https://github.com/afeld/bootstrap-toc/blob/gh-pages/LICENSE.md) */ +(function ($) { + 'use strict'; + + window.Toc = { + helpers: { + // return all matching elements in the set, or their descendants + findOrFilter: function ($el, selector) { + // http://danielnouri.org/notes/2011/03/14/a-jquery-find-that-also-finds-the-root-element/ + // http://stackoverflow.com/a/12731439/358804 + var $descendants = $el.find(selector); + return $el + .filter(selector) + .add($descendants) + .filter(':not([data-toc-skip])'); + }, + + generateUniqueIdBase: function (el) { + var text = $(el).text(); + var anchor = text + .trim() + .toLowerCase() + .replace(/[^A-Za-z0-9]+/g, '-'); + return anchor || el.tagName.toLowerCase(); + }, + + generateUniqueId: function (el) { + var anchorBase = this.generateUniqueIdBase(el); + for (var i = 0; ; i++) { + var anchor = anchorBase; + if (i > 0) { + // add suffix + anchor += '-' + i; + } + // check if ID already exists + if (!document.getElementById(anchor)) { + return anchor; + } + } + }, + + generateAnchor: function (el) { + if (el.id) { + return el.id; + } else { + var anchor = this.generateUniqueId(el); + el.id = anchor; + return anchor; + } + }, + + createNavList: function () { + return $(''); + }, + + createChildNavList: function ($parent) { + var $childList = this.createNavList(); + $parent.append($childList); + return $childList; + }, + + generateNavEl: function (anchor, text) { + var $a = $(''); + $a.attr('href', '#' + anchor); + $a.text(text); + var $li = $('
  • '); + $li.append($a); + return $li; + }, + + generateNavItem: function (headingEl) { + var anchor = this.generateAnchor(headingEl); + var $heading = $(headingEl); + var text = $heading.data('toc-text') || $heading.text(); + return this.generateNavEl(anchor, text); + }, + + // Find the first heading level (`

    `, then `

    `, etc.) that has more than one element. Defaults to 1 (for `

    `). + getTopLevel: function ($scope) { + for (var i = 1; i <= 6; i++) { + var $headings = this.findOrFilter($scope, 'h' + i); + if ($headings.length > 1) { + return i; + } + } + + return 1; + }, + + // returns the elements for the top level, and the next below it + getHeadings: function ($scope, topLevel) { + var topSelector = 'h' + topLevel; + + var secondaryLevel = topLevel + 1; + var secondarySelector = 'h' + secondaryLevel; + + return this.findOrFilter( + $scope, + topSelector + ',' + secondarySelector + ); + }, + + getNavLevel: function (el) { + return parseInt(el.tagName.charAt(1), 10); + }, + + populateNav: function ($topContext, topLevel, $headings) { + var $context = $topContext; + var $prevNav; + + var helpers = this; + $headings.each(function (i, el) { + var $newNav = helpers.generateNavItem(el); + var navLevel = helpers.getNavLevel(el); + + // determine the proper $context + if (navLevel === topLevel) { + // use top level + $context = $topContext; + } else if ($prevNav && $context === $topContext) { + // create a new level of the tree and switch to it + $context = helpers.createChildNavList($prevNav); + } // else use the current $context + + $context.append($newNav); + + $prevNav = $newNav; + }); + }, + + parseOps: function (arg) { + var opts; + if (arg.jquery) { + opts = { + $nav: arg, + }; + } else { + opts = arg; + } + opts.$scope = opts.$scope || $(document.body); + return opts; + }, + }, + + // accepts a jQuery object, or an options object + init: function (opts) { + opts = this.helpers.parseOps(opts); + + // ensure that the data attribute is in place for styling + opts.$nav.attr('data-toggle', 'toc'); + + var $topContext = this.helpers.createChildNavList(opts.$nav); + var topLevel = this.helpers.getTopLevel(opts.$scope); + var $headings = this.helpers.getHeadings(opts.$scope, topLevel); + this.helpers.populateNav($topContext, topLevel, $headings); + }, + }; + + $(function () { + $('nav[data-toggle="toc"]').each(function (i, el) { + var $nav = $(el); + Toc.init($nav); + }); + }); +})(jQuery); From db9a022d1aad8c48156d5a01a14a1f5906323e2d Mon Sep 17 00:00:00 2001 From: Musa Demir Date: Tue, 29 Mar 2022 23:55:11 +0300 Subject: [PATCH 087/143] import scroll index style and js file if feature enabled --- .../Pages/Public/CmsKit/Blogs/BlogPost.cshtml | 26 ++++++++++++++----- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/BlogPost.cshtml b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/BlogPost.cshtml index 2c29649dd3..d28a57889e 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/BlogPost.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/BlogPost.cshtml @@ -16,28 +16,40 @@ @inject IMarkdownToHtmlRenderer MarkdownRenderer + +@{ + string dummyImageSource = "https://dummyimage.com/1280x720/a3a3a3/fff.png?text=" + Model.BlogPost.Title; + var isScrollIndexEnabled = GlobalFeatureManager.Instance.IsEnabled(); +} + @section styles{ + @if (isScrollIndexEnabled) + { + + + + } - } @section scripts{ + @if (isScrollIndexEnabled) + { + + + + } + - } -@{ - string dummyImageSource = "https://dummyimage.com/1280x720/a3a3a3/fff.png?text=" + Model.BlogPost.Title; - var isScrollIndexEnabled = GlobalFeatureManager.Instance.IsEnabled(); -} -
    From 7e0b99201881ba6ddf85ac27199b035e0391fdb6 Mon Sep 17 00:00:00 2001 From: Musa Demir Date: Wed, 30 Mar 2022 00:12:57 +0300 Subject: [PATCH 088/143] use setting CoverImageMediaId to null and remove cover image in the update request --- .../Admin/Blogs/IBlogPostAdminAppService.cs | 1 - .../Admin/Blogs/BlogPostAdminAppService.cs | 21 ++++++------------- .../BlogPostAdminClientProxy.Generated.cs | 8 ------- .../Admin/Blogs/BlogPostAdminController.cs | 8 ------- .../Pages/CmsKit/BlogPosts/update.js | 8 ++----- 5 files changed, 8 insertions(+), 38 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs index 23562020d4..14704a26ad 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs @@ -13,5 +13,4 @@ public interface IBlogPostAdminAppService CreateBlogPostDto, UpdateBlogPostDto> { - Task RemoveCoverImageAsync(Guid id); } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs index ba346b752e..3c79e6220b 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs @@ -69,8 +69,13 @@ public class BlogPostAdminAppService : CmsKitAppServiceBase, IBlogPostAdminAppSe blogPost.SetShortDescription(input.ShortDescription); blogPost.SetContent(input.Content); blogPost.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp); + + if (blogPost.CoverImageMediaId != null && input.CoverImageMediaId == null) + { + await MediaDescriptorAdminAppService.DeleteAsync(blogPost.CoverImageMediaId.Value); + } blogPost.CoverImageMediaId = input.CoverImageMediaId; - + if (blogPost.Slug != input.Slug) { await BlogPostManager.SetSlugUrlAsync(blogPost, input.Slug); @@ -115,18 +120,4 @@ public class BlogPostAdminAppService : CmsKitAppServiceBase, IBlogPostAdminAppSe { await BlogPostRepository.DeleteAsync(id); } - - [Authorize(CmsKitAdminPermissions.BlogPosts.Update)] - public virtual async Task RemoveCoverImageAsync(Guid id) - { - var blogPost = await BlogPostRepository.GetAsync(id); - if (blogPost?.CoverImageMediaId == null) - { - return; - } - - await MediaDescriptorAdminAppService.DeleteAsync(blogPost.CoverImageMediaId.Value); - - blogPost.CoverImageMediaId = null; - } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/BlogPostAdminClientProxy.Generated.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/BlogPostAdminClientProxy.Generated.cs index 0f201fb469..560ba4e2de 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/BlogPostAdminClientProxy.Generated.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/BlogPostAdminClientProxy.Generated.cs @@ -55,12 +55,4 @@ public partial class BlogPostAdminClientProxy : ClientProxyBase Date: Wed, 30 Mar 2022 00:18:34 +0300 Subject: [PATCH 089/143] code clean --- .../Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs | 1 - .../Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs | 2 +- .../wwwroot/client-proxies/cms-kit-admin-proxy.js | 8 -------- 3 files changed, 1 insertion(+), 10 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs index 14704a26ad..314b7a1def 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs @@ -1,5 +1,4 @@ using System; -using System.Threading.Tasks; using Volo.Abp.Application.Services; namespace Volo.CmsKit.Admin.Blogs; diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs index 3c79e6220b..d78571ba21 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs @@ -64,7 +64,7 @@ public class BlogPostAdminAppService : CmsKitAppServiceBase, IBlogPostAdminAppSe public virtual async Task UpdateAsync(Guid id, UpdateBlogPostDto input) { var blogPost = await BlogPostRepository.GetAsync(id); - + blogPost.SetTitle(input.Title); blogPost.SetShortDescription(input.ShortDescription); blogPost.SetContent(input.Content); diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js index 2cb7d2ab98..0a1424d92a 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js @@ -391,14 +391,6 @@ }, ajaxParams)); }; - volo.cmsKit.admin.blogs.blogPostAdmin.removeCoverImage = function(id, ajaxParams) { - return abp.ajax($.extend(true, { - url: abp.appPath + 'api/cms-kit-admin/blogs/blog-posts/' + id + '/cover-image', - type: 'DELETE', - dataType: null - }, ajaxParams)); - }; - })(); })(); From 69e2be7ba99d66c151ccfd7a05b42c827aae7994 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Wed, 30 Mar 2022 11:30:34 +0800 Subject: [PATCH 090/143] Identity: Enhancements for Blazor UI --- .../Layout/PageHeader.razor | 2 +- .../Components/AbpExtensibleDataGrid.razor | 1 + .../Pages/Identity/RoleManagement.razor.cs | 5 ++++- .../Pages/Identity/UserManagement.razor | 6 ++++++ .../Pages/Identity/UserManagement.razor.cs | 15 +++++++++++++-- 5 files changed, 25 insertions(+), 4 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming/Layout/PageHeader.razor b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming/Layout/PageHeader.razor index e6959f1d3a..c9c704b471 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming/Layout/PageHeader.razor +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming/Layout/PageHeader.razor @@ -7,7 +7,7 @@ @if(Options.Value.RenderPageTitle) { -

    @PageLayout.Title

    +
    @PageLayout.Title
    } diff --git a/framework/src/Volo.Abp.BlazoriseUI/Components/AbpExtensibleDataGrid.razor b/framework/src/Volo.Abp.BlazoriseUI/Components/AbpExtensibleDataGrid.razor index e7ea795eee..c674ec3612 100644 --- a/framework/src/Volo.Abp.BlazoriseUI/Components/AbpExtensibleDataGrid.razor +++ b/framework/src/Volo.Abp.BlazoriseUI/Components/AbpExtensibleDataGrid.razor @@ -11,6 +11,7 @@ CurrentPage="@CurrentPage" PageSize="@PageSize" Responsive="@Responsive" + Striped Class="@Class"> diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor.cs b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor.cs index f14e5cef90..db5d7939d6 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor.cs +++ b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor.cs @@ -64,7 +64,10 @@ public partial class RoleManagement new EntityAction { Text = L["Delete"], - Visible = (data) => HasDeletePermission, + Visible = (data) => + { + return HasDeletePermission && !data.As().IsStatic + }, Clicked = async (data) => await DeleteEntityAsync(data.As()), ConfirmationMessage = (data) => GetDeleteConfirmationMessage(data.As()) } diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor index 2f632422c1..6fe89dd768 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor +++ b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor @@ -18,6 +18,12 @@ + + @L["Search"] + + + + @* ************************* DATA GRID ************************* *@ HasDeletePermission, + Visible = (data) => + { + return HasDeletePermission && CurrentUser.GetId() != data.As().Id; + }, Clicked = async (data) => await DeleteEntityAsync(data.As()), ConfirmationMessage = (data) => GetDeleteConfirmationMessage(data.As()) } @@ -180,7 +191,7 @@ public partial class UserManagement }, new TableColumn { - Title = L["Email"], + Title = L["EmailAddress"], Data = nameof(IdentityUserDto.Email), }, new TableColumn From c526630a38e067aa9bebaf52f9621fffc24076e7 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Wed, 30 Mar 2022 11:41:00 +0800 Subject: [PATCH 091/143] Improved --- .../Pages/Identity/RoleManagement.razor.cs | 5 +---- .../Pages/Identity/UserManagement.razor.cs | 5 +---- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor.cs b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor.cs index db5d7939d6..6a3052bea0 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor.cs +++ b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor.cs @@ -64,10 +64,7 @@ public partial class RoleManagement new EntityAction { Text = L["Delete"], - Visible = (data) => - { - return HasDeletePermission && !data.As().IsStatic - }, + Visible = (data) => HasDeletePermission && !data.As().IsStatic, Clicked = async (data) => await DeleteEntityAsync(data.As()), ConfirmationMessage = (data) => GetDeleteConfirmationMessage(data.As()) } diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor.cs b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor.cs index dd754ed07f..462ce6ec72 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor.cs +++ b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor.cs @@ -162,10 +162,7 @@ public partial class UserManagement new EntityAction { Text = L["Delete"], - Visible = (data) => - { - return HasDeletePermission && CurrentUser.GetId() != data.As().Id; - }, + Visible = (data) => HasDeletePermission && CurrentUser.GetId() != data.As().Id, Clicked = async (data) => await DeleteEntityAsync(data.As()), ConfirmationMessage = (data) => GetDeleteConfirmationMessage(data.As()) } From b12d8f71c993e34444bcffe8ae6d82be46de489d Mon Sep 17 00:00:00 2001 From: Musa Demir Date: Wed, 30 Mar 2022 09:37:16 +0300 Subject: [PATCH 092/143] load blogpost-scroll-index when it's feature is enabled --- .../Pages/Public/CmsKit/Blogs/BlogPost.cshtml | 2 +- .../CmsKit/Blogs/{blogpost.js => blogpost-scroll-index.js} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/{blogpost.js => blogpost-scroll-index.js} (100%) diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/BlogPost.cshtml b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/BlogPost.cshtml index d28a57889e..709d96182f 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/BlogPost.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/BlogPost.cshtml @@ -40,13 +40,13 @@ { + } - } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/blogpost.js b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/blogpost-scroll-index.js similarity index 100% rename from modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/blogpost.js rename to modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/blogpost-scroll-index.js From 7aad8e5a25940f06e227de90edd22cd13fe18a9f Mon Sep 17 00:00:00 2001 From: enisn Date: Wed, 30 Mar 2022 10:38:04 +0300 Subject: [PATCH 093/143] Make select clearable --- .../Pages/Public/CmsKit/Blogs/Index.cshtml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml index 32df5fb2fd..060f0c5c95 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml @@ -28,6 +28,8 @@ + +
    + +
    diff --git a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/EditModal.cshtml b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/EditModal.cshtml index 725a9610dd..db0dd8422e 100644 --- a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/EditModal.cshtml +++ b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/EditModal.cshtml @@ -7,6 +7,7 @@ @using Volo.Abp.Localization @using Volo.Abp.ObjectExtending @using Volo.Abp.Data +@using Volo.Abp.Identity @model EditModalModel @inject IHtmlLocalizer L @inject IStringLocalizerFactory StringLocalizerFactory @@ -25,7 +26,16 @@ - +
    + +
    + + +
    + +
    diff --git a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/Index.cshtml b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/Index.cshtml index 1f7f338ba4..48ad716306 100644 --- a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/Index.cshtml +++ b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/Index.cshtml @@ -19,6 +19,7 @@ @section styles { + } @section scripts { diff --git a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/index.css b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/index.css new file mode 100644 index 0000000000..acdafe715a --- /dev/null +++ b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/index.css @@ -0,0 +1,7 @@ +/* + By default Microsoft Edge, adds password reveal button inside the password input. + https://docs.microsoft.com/en-us/microsoft-edge/web-platform/password-reveal + */ +::-ms-reveal { + display: none; +} \ No newline at end of file diff --git a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/index.js b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/index.js index 96ee7e5361..fcd3a72f52 100644 --- a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/index.js +++ b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/index.js @@ -2,12 +2,51 @@ var l = abp.localization.getResource('AbpIdentity'); var _identityUserAppService = volo.abp.identity.identityUser; - var _editModal = new abp.ModalManager( - abp.appPath + 'Identity/Users/EditModal' - ); - var _createModal = new abp.ModalManager( - abp.appPath + 'Identity/Users/CreateModal' - ); + + var togglePasswordVisibility = function () { + $("#PasswordVisibilityButton").click(function (e) { + var button = $(this); + var passwordInput = button.parent().find("input"); + if(!passwordInput) { + return; + } + + if(passwordInput.attr("type") === "password") { + passwordInput.attr("type", "text"); + } + else { + passwordInput.attr("type", "password"); + } + + var icon = button.find("i"); + if(icon) { + icon.toggleClass("fa-eye-slash").toggleClass("fa-eye"); + } + }); + } + + abp.modals.createUser = function () { + var initModal = function (publicApi, args) { + togglePasswordVisibility(); + }; + return { initModal: initModal }; + } + + abp.modals.editUser = function () { + var initModal = function (publicApi, args) { + togglePasswordVisibility(); + }; + return { initModal: initModal }; + } + + var _editModal = new abp.ModalManager({ + viewUrl: abp.appPath + 'Identity/Users/EditModal', + modalClass: "editUser" + }); + var _createModal = new abp.ModalManager({ + viewUrl: abp.appPath + 'Identity/Users/CreateModal', + modalClass: "createUser" + }); var _permissionsModal = new abp.ModalManager( abp.appPath + 'AbpPermissionManagement/PermissionManagementModal' ); @@ -44,9 +83,9 @@ }, { text: l('Delete'), - visible: abp.auth.isGranted( - 'AbpIdentity.Users.Delete' - ), + visible: function(data) { + return abp.auth.isGranted('AbpIdentity.Users.Delete') && abp.currentUser.id !== data.id; + }, confirmMessage: function (data) { return l( 'UserDeletionConfirmationMessage', diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/AbpSettingManagementWebModule.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/AbpSettingManagementWebModule.cs index 1c83245c63..6bee4b3c3d 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/AbpSettingManagementWebModule.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/AbpSettingManagementWebModule.cs @@ -2,6 +2,7 @@ using Microsoft.Extensions.DependencyInjection; using Volo.Abp.AspNetCore.Mvc.UI.Bundling; using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared; +using Volo.Abp.AutoMapper; using Volo.Abp.Http.ProxyScripting.Generators.JQuery; using Volo.Abp.Modularity; using Volo.Abp.SettingManagement.Web.Navigation; @@ -14,6 +15,7 @@ namespace Volo.Abp.SettingManagement.Web; [DependsOn( typeof(AbpSettingManagementApplicationContractsModule), + typeof(AbpAutoMapperModule), typeof(AbpAspNetCoreMvcUiThemeSharedModule), typeof(AbpSettingManagementDomainSharedModule) )] @@ -58,5 +60,11 @@ public class AbpSettingManagementWebModule : AbpModule { options.DisableModule(SettingManagementRemoteServiceConsts.ModuleName); }); + + context.Services.AddAutoMapperObjectMapper(); + Configure(options => + { + options.AddProfile(validate: true); + }); } } diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/Default.cshtml b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/Default.cshtml index 974e316687..338c13f8a9 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/Default.cshtml +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/Default.cshtml @@ -1,14 +1,14 @@ @using Microsoft.AspNetCore.Mvc.Localization @using Volo.Abp.SettingManagement.Localization @inject IHtmlLocalizer L -@model Volo.Abp.SettingManagement.EmailSettingsDto +@model Volo.Abp.SettingManagement.UpdateEmailSettingsDto -
    +
    - - + + diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/Default.js b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/Default.js index a5b8288d41..c9871bb3d9 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/Default.js +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/Default.js @@ -6,8 +6,12 @@ $("#EmailSettingsForm").on('submit', function (event) { event.preventDefault(); + + if(!$(this).valid()) { + return; + } + var form = $(this).serializeFormToObject(); - volo.abp.settingManagement.emailSettings.update(form).then(function (result) { $(document).trigger("AbpSettingSaved"); }); diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/EmailSettingGroupViewComponent.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/EmailSettingGroupViewComponent.cs index bd0e8d924e..f9c24e1369 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/EmailSettingGroupViewComponent.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/EmailSettingGroupViewComponent.cs @@ -16,8 +16,8 @@ public class EmailSettingGroupViewComponent : AbpViewComponent public virtual async Task InvokeAsync() { - var model = await EmailSettingsAppService.GetAsync(); - + var emailSettings = await EmailSettingsAppService.GetAsync(); + var model = ObjectMapper.Map(emailSettings); return View("~/Pages/SettingManagement/Components/EmailSettingGroup/Default.cshtml", model); } } diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/SettingManagementWebAutoMapperProfile.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/SettingManagementWebAutoMapperProfile.cs new file mode 100644 index 0000000000..20ae382454 --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/SettingManagementWebAutoMapperProfile.cs @@ -0,0 +1,11 @@ +using AutoMapper; + +namespace Volo.Abp.SettingManagement.Web; + +public class SettingManagementWebAutoMapperProfile : Profile +{ + public SettingManagementWebAutoMapperProfile() + { + CreateMap(); + } +} \ No newline at end of file diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Volo.Abp.SettingManagement.Web.csproj b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Volo.Abp.SettingManagement.Web.csproj index c7cbc9c60b..b802865379 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Volo.Abp.SettingManagement.Web.csproj +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Volo.Abp.SettingManagement.Web.csproj @@ -15,6 +15,7 @@ + From 2b514b8da898b63b21bc73c7b688f98e555b07e7 Mon Sep 17 00:00:00 2001 From: Engincan VESKE Date: Wed, 30 Mar 2022 14:42:35 +0300 Subject: [PATCH 098/143] PermissionManagement: Inform before removing all permissions --- .../Localization/Domain/en.json | 3 ++- .../PermissionManagementModal.cshtml | 2 +- .../permission-management-modal.js | 22 +++++++++++++++++++ 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/en.json b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/en.json index ba775f3ab0..98f3a60216 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/en.json +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/en.json @@ -5,6 +5,7 @@ "OnlyProviderPermissons": "Only this provider", "All": "All", "SelectAllInAllTabs": "Grant all permissions", - "SelectAllInThisTab": "Select all" + "SelectAllInThisTab": "Select all", + "RemoveAllPermissionsWarningMessage": "Are you sure you want to remove all permissions?" } } \ No newline at end of file diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/PermissionManagementModal.cshtml b/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/PermissionManagementModal.cshtml index adc5547693..31639bf136 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/PermissionManagementModal.cshtml +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/PermissionManagementModal.cshtml @@ -9,7 +9,7 @@ Layout = null; } - + diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/permission-management-modal.js b/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/permission-management-modal.js index c33106d884..09063b8c26 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/permission-management-modal.js +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/permission-management-modal.js @@ -3,6 +3,8 @@ var abp = abp || {}; abp.modals = abp.modals || {}; abp.modals.PermissionManagement = function () { + var l = abp.localization.getResource("AbpPermissionManagement"); + function checkParents($tab, $checkBox) { var parentName = $checkBox .closest('.custom-checkbox') @@ -255,6 +257,26 @@ var abp = abp || {}; initSelectAllInThisTab(); setSelectAllInAllTabs(); + + var $form = $("#PermissionManagementForm"); + var $submitButton = $form.find("button[type='submit']"); + if($submitButton) { + $submitButton.click(function (e) { + e.preventDefault(); + + if(!$form.find("input:checked").length > 0) { + abp.message.confirm(l("RemoveAllPermissionsWarningMessage")) + .then(function (confirmed) { + if(!confirmed) { + return false; + } + }); + } + + $submitButton.submit(); + }); + } + }; }; })(jQuery); From 4cceac737d28d91a4470cbe06ea822fbedbcf9ed Mon Sep 17 00:00:00 2001 From: Engincan VESKE Date: Wed, 30 Mar 2022 15:29:42 +0300 Subject: [PATCH 099/143] Update permission-management-modal.js --- .../permission-management-modal.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/permission-management-modal.js b/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/permission-management-modal.js index 09063b8c26..208047314c 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/permission-management-modal.js +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/permission-management-modal.js @@ -267,13 +267,14 @@ var abp = abp || {}; if(!$form.find("input:checked").length > 0) { abp.message.confirm(l("RemoveAllPermissionsWarningMessage")) .then(function (confirmed) { - if(!confirmed) { - return false; + if(confirmed) { + $form.submit(); } }); } - - $submitButton.submit(); + else { + $form.submit(); + } }); } From 6f6993471d5fcf125729680b02e2cc252094355e Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 31 Mar 2022 10:05:56 +0800 Subject: [PATCH 100/143] Add `TimeZone` and `Queue` to `IHangfireBackgroundWorker`. Resolve #12095 --- .../Hangfire/HangfireBackgroundWorkerBase.cs | 13 ++++++++++++- .../Hangfire/HangfireBackgroundWorkerManager.cs | 7 ++++--- .../HangfirePeriodicBackgroundWorkerAdapter.cs | 2 +- .../Hangfire/IHangfireBackgroundWorker.cs | 7 ++++++- 4 files changed, 23 insertions(+), 6 deletions(-) diff --git a/framework/src/Volo.Abp.BackgroundWorkers.Hangfire/Volo/Abp/BackgroundWorkers/Hangfire/HangfireBackgroundWorkerBase.cs b/framework/src/Volo.Abp.BackgroundWorkers.Hangfire/Volo/Abp/BackgroundWorkers/Hangfire/HangfireBackgroundWorkerBase.cs index 466fbe457f..dfeda11df8 100644 --- a/framework/src/Volo.Abp.BackgroundWorkers.Hangfire/Volo/Abp/BackgroundWorkers/Hangfire/HangfireBackgroundWorkerBase.cs +++ b/framework/src/Volo.Abp.BackgroundWorkers.Hangfire/Volo/Abp/BackgroundWorkers/Hangfire/HangfireBackgroundWorkerBase.cs @@ -1,4 +1,5 @@ -using System.Threading.Tasks; +using System; +using System.Threading.Tasks; namespace Volo.Abp.BackgroundWorkers.Hangfire; @@ -7,6 +8,16 @@ public abstract class HangfireBackgroundWorkerBase : BackgroundWorkerBase, IHang public string RecurringJobId { get; set; } public string CronExpression { get; set; } + + public TimeZoneInfo TimeZone { get; set; } + + public string Queue { get; set; } public abstract Task DoWorkAsync(); + + protected HangfireBackgroundWorkerBase() + { + TimeZone = null; + Queue = "default"; + } } diff --git a/framework/src/Volo.Abp.BackgroundWorkers.Hangfire/Volo/Abp/BackgroundWorkers/Hangfire/HangfireBackgroundWorkerManager.cs b/framework/src/Volo.Abp.BackgroundWorkers.Hangfire/Volo/Abp/BackgroundWorkers/Hangfire/HangfireBackgroundWorkerManager.cs index 89d6105967..b2cb275dab 100644 --- a/framework/src/Volo.Abp.BackgroundWorkers.Hangfire/Volo/Abp/BackgroundWorkers/Hangfire/HangfireBackgroundWorkerManager.cs +++ b/framework/src/Volo.Abp.BackgroundWorkers.Hangfire/Volo/Abp/BackgroundWorkers/Hangfire/HangfireBackgroundWorkerManager.cs @@ -40,12 +40,13 @@ public class HangfireBackgroundWorkerManager : IBackgroundWorkerManager, ISingle var unProxyWorker = ProxyHelper.UnProxy(hangfireBackgroundWorker); if (hangfireBackgroundWorker.RecurringJobId.IsNullOrWhiteSpace()) { - RecurringJob.AddOrUpdate(() => ((IHangfireBackgroundWorker)unProxyWorker).DoWorkAsync(), hangfireBackgroundWorker.CronExpression); + RecurringJob.AddOrUpdate(() => ((IHangfireBackgroundWorker)unProxyWorker).DoWorkAsync(), + hangfireBackgroundWorker.CronExpression, hangfireBackgroundWorker.TimeZone, hangfireBackgroundWorker.Queue); } else { RecurringJob.AddOrUpdate(hangfireBackgroundWorker.RecurringJobId, () => ((IHangfireBackgroundWorker)unProxyWorker).DoWorkAsync(), - hangfireBackgroundWorker.CronExpression); + hangfireBackgroundWorker.CronExpression, hangfireBackgroundWorker.TimeZone, hangfireBackgroundWorker.Queue); } } else @@ -79,7 +80,7 @@ public class HangfireBackgroundWorkerManager : IBackgroundWorkerManager, ISingle var adapterType = typeof(HangfirePeriodicBackgroundWorkerAdapter<>).MakeGenericType(ProxyHelper.GetUnProxiedType(worker)); var workerAdapter = Activator.CreateInstance(adapterType) as IHangfireBackgroundWorker; - RecurringJob.AddOrUpdate(() => workerAdapter.DoWorkAsync(), GetCron(period.Value)); + RecurringJob.AddOrUpdate(() => workerAdapter.DoWorkAsync(), GetCron(period.Value), workerAdapter.TimeZone, workerAdapter.Queue); } return Task.CompletedTask; diff --git a/framework/src/Volo.Abp.BackgroundWorkers.Hangfire/Volo/Abp/BackgroundWorkers/Hangfire/HangfirePeriodicBackgroundWorkerAdapter.cs b/framework/src/Volo.Abp.BackgroundWorkers.Hangfire/Volo/Abp/BackgroundWorkers/Hangfire/HangfirePeriodicBackgroundWorkerAdapter.cs index 483210ace6..8fe24f10ed 100644 --- a/framework/src/Volo.Abp.BackgroundWorkers.Hangfire/Volo/Abp/BackgroundWorkers/Hangfire/HangfirePeriodicBackgroundWorkerAdapter.cs +++ b/framework/src/Volo.Abp.BackgroundWorkers.Hangfire/Volo/Abp/BackgroundWorkers/Hangfire/HangfirePeriodicBackgroundWorkerAdapter.cs @@ -17,7 +17,7 @@ public class HangfirePeriodicBackgroundWorkerAdapter : HangfireBackgrou _doWorkMethod = typeof(TWorker).GetMethod("DoWork", BindingFlags.Instance | BindingFlags.NonPublic); } - public override async Task DoWorkAsync() + public async override Task DoWorkAsync() { var workerContext = new PeriodicBackgroundWorkerContext(ServiceProvider); var worker = ServiceProvider.GetRequiredService(); diff --git a/framework/src/Volo.Abp.BackgroundWorkers.Hangfire/Volo/Abp/BackgroundWorkers/Hangfire/IHangfireBackgroundWorker.cs b/framework/src/Volo.Abp.BackgroundWorkers.Hangfire/Volo/Abp/BackgroundWorkers/Hangfire/IHangfireBackgroundWorker.cs index 0b8c89e95b..7402d8427a 100644 --- a/framework/src/Volo.Abp.BackgroundWorkers.Hangfire/Volo/Abp/BackgroundWorkers/Hangfire/IHangfireBackgroundWorker.cs +++ b/framework/src/Volo.Abp.BackgroundWorkers.Hangfire/Volo/Abp/BackgroundWorkers/Hangfire/IHangfireBackgroundWorker.cs @@ -1,4 +1,5 @@ -using System.Threading.Tasks; +using System; +using System.Threading.Tasks; namespace Volo.Abp.BackgroundWorkers.Hangfire; @@ -7,6 +8,10 @@ public interface IHangfireBackgroundWorker : IBackgroundWorker string RecurringJobId { get; set; } string CronExpression { get; set; } + + TimeZoneInfo TimeZone { get; set; } + + string Queue { get; set; } Task DoWorkAsync(); } From f373329a935994cb071a99ba2f8d5be19485c463 Mon Sep 17 00:00:00 2001 From: Engincan VESKE Date: Thu, 31 Mar 2022 14:22:10 +0300 Subject: [PATCH 101/143] Improve EmailSettingGroupViewComponent --- .../EmailSettingGroup/Default.cshtml | 2 +- .../EmailSettingGroupViewComponent.cs | 38 ++++++++++++++++++- .../SettingManagementWebAutoMapperProfile.cs | 3 +- 3 files changed, 39 insertions(+), 4 deletions(-) diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/Default.cshtml b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/Default.cshtml index 338c13f8a9..0a46e4f0fa 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/Default.cshtml +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/Default.cshtml @@ -1,7 +1,7 @@ @using Microsoft.AspNetCore.Mvc.Localization @using Volo.Abp.SettingManagement.Localization @inject IHtmlLocalizer L -@model Volo.Abp.SettingManagement.UpdateEmailSettingsDto +@model Volo.Abp.SettingManagement.Web.Pages.SettingManagement.Components.EmailSettingGroup.EmailSettingGroupViewComponent.UpdateEmailSettingsViewModel diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/EmailSettingGroupViewComponent.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/EmailSettingGroupViewComponent.cs index f9c24e1369..b60823a621 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/EmailSettingGroupViewComponent.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/EmailSettingGroupViewComponent.cs @@ -1,6 +1,8 @@ -using System.Threading.Tasks; +using System.ComponentModel.DataAnnotations; +using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Volo.Abp.AspNetCore.Mvc; +using Volo.Abp.Auditing; namespace Volo.Abp.SettingManagement.Web.Pages.SettingManagement.Components.EmailSettingGroup; @@ -17,7 +19,39 @@ public class EmailSettingGroupViewComponent : AbpViewComponent public virtual async Task InvokeAsync() { var emailSettings = await EmailSettingsAppService.GetAsync(); - var model = ObjectMapper.Map(emailSettings); + var model = ObjectMapper.Map(emailSettings); return View("~/Pages/SettingManagement/Components/EmailSettingGroup/Default.cshtml", model); } + + public class UpdateEmailSettingsViewModel + { + [MaxLength(256)] + public string SmtpHost { get; set; } + + [Range(1, 65535)] + public int SmtpPort { get; set; } + + [MaxLength(1024)] + public string SmtpUserName { get; set; } + + [MaxLength(1024)] + [DataType(DataType.Password)] + [DisableAuditing] + public string SmtpPassword { get; set; } + + [MaxLength(1024)] + public string SmtpDomain { get; set; } + + public bool SmtpEnableSsl { get; set; } + + public bool SmtpUseDefaultCredentials { get; set; } + + [MaxLength(1024)] + [Required] + public string DefaultFromAddress { get; set; } + + [MaxLength(1024)] + [Required] + public string DefaultFromDisplayName { get; set; } + } } diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/SettingManagementWebAutoMapperProfile.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/SettingManagementWebAutoMapperProfile.cs index 20ae382454..19e512da56 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/SettingManagementWebAutoMapperProfile.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/SettingManagementWebAutoMapperProfile.cs @@ -1,4 +1,5 @@ using AutoMapper; +using Volo.Abp.SettingManagement.Web.Pages.SettingManagement.Components.EmailSettingGroup; namespace Volo.Abp.SettingManagement.Web; @@ -6,6 +7,6 @@ public class SettingManagementWebAutoMapperProfile : Profile { public SettingManagementWebAutoMapperProfile() { - CreateMap(); + CreateMap(); } } \ No newline at end of file From 86657e22580542ab704347dfbd1a2e4c8f7ac7b7 Mon Sep 17 00:00:00 2001 From: braim23 <94292623+braim23@users.noreply.github.com> Date: Thu, 31 Mar 2022 15:03:48 +0300 Subject: [PATCH 102/143] Adding the Purchase Order Localization --- .../AbpIoLocalization/Admin/Localization/Resources/en.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json index 9f8e88f180..18c5524d1f 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json @@ -381,6 +381,7 @@ "SuccessfullyUpdated": "Successfully updated", "SuccessfullyAdded": "Successfully added", "PurchaseState": "Purchase State", - "ShowBetweenDayCount": "Show Between Days" + "ShowBetweenDayCount": "Show Between Days", + "PurchaseOrder": "Purchase Order" } } \ No newline at end of file From 55d96e41558fc6ecb7b1c95e0fe55eba65582a9c Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Thu, 31 Mar 2022 20:26:36 +0800 Subject: [PATCH 103/143] Fix localization problem --- .../AbpSettingManagementDomainSharedModule.cs | 5 +++- .../AbpSettingManagementWebModule.cs | 8 ++++++ .../EmailSettingGroup/Default.cshtml | 26 ++++++++++--------- .../EmailSettingGroupViewComponent.cs | 9 +++++++ 4 files changed, 35 insertions(+), 13 deletions(-) diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/AbpSettingManagementDomainSharedModule.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/AbpSettingManagementDomainSharedModule.cs index 012133e10b..7e19e63a2f 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/AbpSettingManagementDomainSharedModule.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/AbpSettingManagementDomainSharedModule.cs @@ -3,6 +3,7 @@ using Volo.Abp.Modularity; using Volo.Abp.Localization; using Volo.Abp.SettingManagement.Localization; using Volo.Abp.Validation; +using Volo.Abp.Validation.Localization; using Volo.Abp.VirtualFileSystem; namespace Volo.Abp.SettingManagement; @@ -23,7 +24,9 @@ public class AbpSettingManagementDomainSharedModule : AbpModule { options.Resources .Add("en") - .AddVirtualJson("/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement"); + .AddBaseTypes( + typeof(AbpValidationResource) + ).AddVirtualJson("/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement"); }); } } diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/AbpSettingManagementWebModule.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/AbpSettingManagementWebModule.cs index 6bee4b3c3d..61874c0b6b 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/AbpSettingManagementWebModule.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/AbpSettingManagementWebModule.cs @@ -1,10 +1,12 @@ using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.AspNetCore.Mvc.Localization; using Volo.Abp.AspNetCore.Mvc.UI.Bundling; using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared; using Volo.Abp.AutoMapper; using Volo.Abp.Http.ProxyScripting.Generators.JQuery; using Volo.Abp.Modularity; +using Volo.Abp.SettingManagement.Localization; using Volo.Abp.SettingManagement.Web.Navigation; using Volo.Abp.SettingManagement.Web.Pages.SettingManagement; using Volo.Abp.SettingManagement.Web.Settings; @@ -23,6 +25,11 @@ public class AbpSettingManagementWebModule : AbpModule { public override void PreConfigureServices(ServiceConfigurationContext context) { + context.Services.PreConfigure(options => + { + options.AddAssemblyResource(typeof(AbpSettingManagementResource), typeof(AbpSettingManagementWebModule).Assembly); + }); + PreConfigure(mvcBuilder => { mvcBuilder.AddApplicationPartIfNotExists(typeof(AbpSettingManagementWebModule).Assembly); @@ -31,6 +38,7 @@ public class AbpSettingManagementWebModule : AbpModule public override void ConfigureServices(ServiceConfigurationContext context) { + Configure(options => { options.MenuContributors.Add(new SettingManagementMainMenuContributor()); diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/Default.cshtml b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/Default.cshtml index 0a46e4f0fa..e5d20309f6 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/Default.cshtml +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/Default.cshtml @@ -7,22 +7,24 @@
    - - - - - - + + + + + +
    - - - + + +
    -
    +
    - @L["Save"] + + @L["Save"] +
    - + \ No newline at end of file diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/EmailSettingGroupViewComponent.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/EmailSettingGroupViewComponent.cs index b60823a621..83458b28e2 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/EmailSettingGroupViewComponent.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/EmailSettingGroupViewComponent.cs @@ -26,32 +26,41 @@ public class EmailSettingGroupViewComponent : AbpViewComponent public class UpdateEmailSettingsViewModel { [MaxLength(256)] + [Display(Name = "SmtpHost")] public string SmtpHost { get; set; } [Range(1, 65535)] + [Display(Name = "SmtpPort")] public int SmtpPort { get; set; } [MaxLength(1024)] + [Display(Name = "SmtpUserName")] public string SmtpUserName { get; set; } [MaxLength(1024)] [DataType(DataType.Password)] [DisableAuditing] + [Display(Name = "SmtpPassword")] public string SmtpPassword { get; set; } [MaxLength(1024)] + [Display(Name = "SmtpDomain")] public string SmtpDomain { get; set; } + [Display(Name = "SmtpEnableSsl")] public bool SmtpEnableSsl { get; set; } + [Display(Name = "SmtpUseDefaultCredentials")] public bool SmtpUseDefaultCredentials { get; set; } [MaxLength(1024)] [Required] + [Display(Name = "DefaultFromAddress")] public string DefaultFromAddress { get; set; } [MaxLength(1024)] [Required] + [Display(Name = "DefaultFromDisplayName")] public string DefaultFromDisplayName { get; set; } } } From 8d24bb661aed4eefc0c07f095772d3a645b5fe16 Mon Sep 17 00:00:00 2001 From: rqx110 Date: Sat, 2 Apr 2022 09:06:34 +0800 Subject: [PATCH 104/143] make show blazor ui message alert extendable --- .../Components/UiMessageAlert.razor.cs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.BlazoriseUI/Components/UiMessageAlert.razor.cs b/framework/src/Volo.Abp.BlazoriseUI/Components/UiMessageAlert.razor.cs index f0c8fa8aff..d913a966b0 100644 --- a/framework/src/Volo.Abp.BlazoriseUI/Components/UiMessageAlert.razor.cs +++ b/framework/src/Volo.Abp.BlazoriseUI/Components/UiMessageAlert.razor.cs @@ -94,7 +94,12 @@ public partial class UiMessageAlert : ComponentBase, IDisposable Options = e.Options; Callback = e.Callback; - await InvokeAsync(ModalRef.Show); + await ShowMessageAlert(); + } + + protected virtual Task ShowMessageAlert() + { + return InvokeAsync(ModalRef.Show); } public void Dispose() From 3b25e359a3fdce21cb4e7f0281a15187169f7d05 Mon Sep 17 00:00:00 2001 From: rqx110 Date: Sat, 2 Apr 2022 10:02:41 +0800 Subject: [PATCH 105/143] uses async/await instead of return task --- .../Volo.Abp.BlazoriseUI/Components/UiMessageAlert.razor.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/framework/src/Volo.Abp.BlazoriseUI/Components/UiMessageAlert.razor.cs b/framework/src/Volo.Abp.BlazoriseUI/Components/UiMessageAlert.razor.cs index d913a966b0..c7fe013b3c 100644 --- a/framework/src/Volo.Abp.BlazoriseUI/Components/UiMessageAlert.razor.cs +++ b/framework/src/Volo.Abp.BlazoriseUI/Components/UiMessageAlert.razor.cs @@ -97,9 +97,9 @@ public partial class UiMessageAlert : ComponentBase, IDisposable await ShowMessageAlert(); } - protected virtual Task ShowMessageAlert() + protected virtual async Task ShowMessageAlert() { - return InvokeAsync(ModalRef.Show); + await InvokeAsync(ModalRef.Show); } public void Dispose() From f14853785eb0043f9227b13ab0628e333924e5ae Mon Sep 17 00:00:00 2001 From: braim23 <94292623+braim23@users.noreply.github.com> Date: Mon, 4 Apr 2022 12:41:41 +0300 Subject: [PATCH 106/143] Update SolutionModuleAdder.cs --- .../Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs index 310e613035..e7ab27613e 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs @@ -100,7 +100,7 @@ public class SolutionModuleAdder : ITransientDependency Check.NotNull(solutionFile, nameof(solutionFile)); Check.NotNull(moduleName, nameof(moduleName)); - await PublishEventAsync(1, "Retriving module info..."); + await PublishEventAsync(1, "Retrieving module info..."); var module = await GetModuleInfoAsync(moduleName, newTemplate, newProTemplate); From ce45aea0b2fc53462bf26e5e449b3acc675781ed Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Mon, 4 Apr 2022 17:45:54 +0800 Subject: [PATCH 107/143] Some enhancements for Blazor UI --- .../Pages/Identity/UserManagement.razor | 35 ++++++++---- .../Pages/Identity/UserManagement.razor.cs | 17 +++++- .../PermissionManagementModal.razor.cs | 9 +++ .../EmailSettingGroupViewComponent.razor | 6 +- .../EmailSettingGroupViewComponent.razor.cs | 56 +++++++++++++++++-- ...ettingManagementBlazorAutoMapperProfile.cs | 4 +- 6 files changed, 108 insertions(+), 19 deletions(-) diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor index 6fe89dd768..5b67c74784 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor +++ b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor @@ -89,11 +89,18 @@ @L["DisplayName:Password"] - - - - - + + + + + + + + + + + + @@ -203,11 +210,19 @@ @L["DisplayName:Password"] - - - - - + + + + + + + + + + + + + diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor.cs b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor.cs index 462ce6ec72..db9a718949 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor.cs +++ b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor.cs @@ -39,7 +39,8 @@ public partial class UserManagement protected PageToolbar Toolbar { get; } = new(); private List UserManagementTableColumns => TableColumns.Get(); - + private TextRole _passwordTextRole = TextRole.Password; + public UserManagement() { ObjectMapperContext = typeof(AbpIdentityBlazorModule); @@ -90,6 +91,7 @@ public partial class UserManagement IsAssigned = x.IsDefault }).ToArray(); + ChangePasswordTextRole(TextRole.Password); return base.OpenCreateModalAsync(); } @@ -115,6 +117,7 @@ public partial class UserManagement IsAssigned = userRoleNames.Contains(x.Name) }).ToArray(); + ChangePasswordTextRole(TextRole.Password); await base.OpenEditModalAsync(entity); } catch (Exception ex) @@ -211,6 +214,18 @@ public partial class UserManagement return base.SetToolbarItemsAsync(); } + + protected virtual void ChangePasswordTextRole(TextRole? textRole) + { + if (textRole == null) + { + ChangePasswordTextRole(_passwordTextRole == TextRole.Password ? TextRole.Text: TextRole.Password); + } + else + { + _passwordTextRole = textRole.Value; + } + } } public class AssignedRoleViewModel diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Components/PermissionManagementModal.razor.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Components/PermissionManagementModal.razor.cs index 2a908140b5..6683690002 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Components/PermissionManagementModal.razor.cs +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Components/PermissionManagementModal.razor.cs @@ -122,6 +122,7 @@ public partial class PermissionManagementModal { try { + var updateDto = new UpdatePermissionsDto { Permissions = _groups @@ -129,6 +130,14 @@ public partial class PermissionManagementModal .Select(p => new UpdatePermissionDto { IsGranted = p.IsGranted, Name = p.Name }) .ToArray() }; + + if (!updateDto.Permissions.Any(x => x.IsGranted)) + { + if (!await Message.Confirm(L["RemoveAllPermissionsWarningMessage"].Value)) + { + return; + } + } await PermissionAppService.UpdateAsync(_providerName, _providerKey, updateDto); diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Pages/SettingManagement/EmailSettingGroup/EmailSettingGroupViewComponent.razor b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Pages/SettingManagement/EmailSettingGroup/EmailSettingGroupViewComponent.razor index 6037231df0..36d5857776 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Pages/SettingManagement/EmailSettingGroup/EmailSettingGroupViewComponent.razor +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Pages/SettingManagement/EmailSettingGroup/EmailSettingGroupViewComponent.razor @@ -5,12 +5,12 @@ @if (EmailSettings != null) {
    - + - @L["DefaultFromDisplayName"] + @L["DefaultFromDisplayName"] * @@ -20,7 +20,7 @@ - @L["DefaultFromAddress"] + @L["DefaultFromAddress"] * diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Pages/SettingManagement/EmailSettingGroup/EmailSettingGroupViewComponent.razor.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Pages/SettingManagement/EmailSettingGroup/EmailSettingGroupViewComponent.razor.cs index 9e5638bfd9..1cd8ceeb1b 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Pages/SettingManagement/EmailSettingGroup/EmailSettingGroupViewComponent.razor.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Pages/SettingManagement/EmailSettingGroup/EmailSettingGroupViewComponent.razor.cs @@ -1,9 +1,11 @@ using System; +using System.ComponentModel.DataAnnotations; using System.Threading.Tasks; using Blazorise; using Microsoft.AspNetCore.Components; using Volo.Abp.AspNetCore.Components.Messages; using Volo.Abp.AspNetCore.Components.Web.Configuration; +using Volo.Abp.Auditing; using Volo.Abp.SettingManagement.Localization; namespace Volo.Abp.SettingManagement.Blazor.Pages.SettingManagement.EmailSettingGroup; @@ -19,9 +21,9 @@ public partial class EmailSettingGroupViewComponent [Inject] protected IUiMessageService UiMessageService { get; set; } - protected EmailSettingsDto EmailSettings; + protected UpdateEmailSettingsViewModel EmailSettings; - protected Validations IdentitySettingValidation; + protected Validations EmailSettingValidation; public EmailSettingGroupViewComponent() { @@ -33,7 +35,7 @@ public partial class EmailSettingGroupViewComponent { try { - EmailSettings = await EmailSettingsAppService.GetAsync(); + EmailSettings = ObjectMapper.Map(await EmailSettingsAppService.GetAsync()); } catch (Exception ex) { @@ -45,7 +47,12 @@ public partial class EmailSettingGroupViewComponent { try { - await EmailSettingsAppService.UpdateAsync(ObjectMapper.Map(EmailSettings)); + if (!await EmailSettingValidation.ValidateAll()) + { + return; + } + + await EmailSettingsAppService.UpdateAsync(ObjectMapper.Map(EmailSettings)); await CurrentApplicationConfigurationCacheResetService.ResetAsync(); @@ -56,4 +63,45 @@ public partial class EmailSettingGroupViewComponent await HandleErrorAsync(ex); } } + + public class UpdateEmailSettingsViewModel + { + [MaxLength(256)] + [Display(Name = "SmtpHost")] + public string SmtpHost { get; set; } + + [Range(1, 65535)] + [Display(Name = "SmtpPort")] + public int SmtpPort { get; set; } + + [MaxLength(1024)] + [Display(Name = "SmtpUserName")] + public string SmtpUserName { get; set; } + + [MaxLength(1024)] + [DataType(DataType.Password)] + [DisableAuditing] + [Display(Name = "SmtpPassword")] + public string SmtpPassword { get; set; } + + [MaxLength(1024)] + [Display(Name = "SmtpDomain")] + public string SmtpDomain { get; set; } + + [Display(Name = "SmtpEnableSsl")] + public bool SmtpEnableSsl { get; set; } + + [Display(Name = "SmtpUseDefaultCredentials")] + public bool SmtpUseDefaultCredentials { get; set; } + + [MaxLength(1024)] + [Required] + [Display(Name = "DefaultFromAddress")] + public string DefaultFromAddress { get; set; } + + [MaxLength(1024)] + [Required] + [Display(Name = "DefaultFromDisplayName")] + public string DefaultFromDisplayName { get; set; } + } } diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/SettingManagementBlazorAutoMapperProfile.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/SettingManagementBlazorAutoMapperProfile.cs index d5309e0aff..38279c09d4 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/SettingManagementBlazorAutoMapperProfile.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/SettingManagementBlazorAutoMapperProfile.cs @@ -1,4 +1,5 @@ using AutoMapper; +using Volo.Abp.SettingManagement.Blazor.Pages.SettingManagement.EmailSettingGroup; namespace Volo.Abp.SettingManagement.Blazor; @@ -6,6 +7,7 @@ public class SettingManagementBlazorAutoMapperProfile : Profile { public SettingManagementBlazorAutoMapperProfile() { - CreateMap(); + CreateMap(); + CreateMap(); } } From e1a1519e0227f5b623193255dcc3a8e77ed2ef9f Mon Sep 17 00:00:00 2001 From: Ebicoglu Date: Tue, 5 Apr 2022 04:03:01 +0300 Subject: [PATCH 108/143] add migrate database ps --- templates/app-nolayers/aspnet-core/migrate-database.ps1 | 1 + 1 file changed, 1 insertion(+) create mode 100644 templates/app-nolayers/aspnet-core/migrate-database.ps1 diff --git a/templates/app-nolayers/aspnet-core/migrate-database.ps1 b/templates/app-nolayers/aspnet-core/migrate-database.ps1 new file mode 100644 index 0000000000..3af47fcb21 --- /dev/null +++ b/templates/app-nolayers/aspnet-core/migrate-database.ps1 @@ -0,0 +1 @@ +dotnet run --migrate-database \ No newline at end of file From f56da4506f1cc981cc39810f7fef6b8a68fa0c6f Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Tue, 5 Apr 2022 11:05:54 +0800 Subject: [PATCH 109/143] Update UserManagement.razor --- .../Pages/Identity/UserManagement.razor | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor index 5b67c74784..fdd979b2a0 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor +++ b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor @@ -19,10 +19,16 @@ - @L["Search"] - - - + + + + + + + + + + @* ************************* DATA GRID ************************* *@ - - - + @@ -213,16 +217,13 @@ - - - - + From f3893e3c2e3c54fd3ad747e589036de5e55bbecc Mon Sep 17 00:00:00 2001 From: Engincan VESKE <43685404+EngincanV@users.noreply.github.com> Date: Tue, 5 Apr 2022 09:44:21 +0300 Subject: [PATCH 110/143] Update MyProjectNameWebHostModule.cs --- .../MyProjectNameWebHostModule.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebHostModule.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebHostModule.cs index 95f2d69043..874e5a9eb5 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebHostModule.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/MyProjectNameWebHostModule.cs @@ -193,7 +193,7 @@ public class MyProjectNameWebHostModule : AbpModule options.FileSets.ReplaceEmbeddedByPhysical(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}..{0}..{0}..{0}..{0}modules{0}permission-management{0}src{0}Volo.Abp.PermissionManagement.Web", Path.DirectorySeparatorChar))); options.FileSets.ReplaceEmbeddedByPhysical(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}..{0}..{0}..{0}..{0}modules{0}identity{0}src{0}Volo.Abp.Identity.Web", Path.DirectorySeparatorChar))); // - options.FileSets.ReplaceEmbeddedByPhysical(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}..{0}src{0}MyCompanyName.MyProjectName.Domain", Path.DirectorySeparatorChar))); + options.FileSets.ReplaceEmbeddedByPhysical(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}..{0}src{0}MyCompanyName.MyProjectName.Domain.Shared", Path.DirectorySeparatorChar))); options.FileSets.ReplaceEmbeddedByPhysical(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}..{0}src{0}MyCompanyName.MyProjectName.Application.Contracts", Path.DirectorySeparatorChar))); options.FileSets.ReplaceEmbeddedByPhysical(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}..{0}src{0}MyCompanyName.MyProjectName.Web", Path.DirectorySeparatorChar))); }); From 49e9491d3b103618757d65e0d32a26904f350047 Mon Sep 17 00:00:00 2001 From: enisn Date: Tue, 5 Apr 2022 10:51:31 +0300 Subject: [PATCH 111/143] Add BlogFeatureDataSeedContributor --- .../Blogs/BlogFeatureDataSeedContributor.cs | 29 +++++++++++++++++++ .../Volo/CmsKit/Blogs/BlogFeatureManager.cs | 20 +++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogFeatureDataSeedContributor.cs diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogFeatureDataSeedContributor.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogFeatureDataSeedContributor.cs new file mode 100644 index 0000000000..b212e5e21a --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogFeatureDataSeedContributor.cs @@ -0,0 +1,29 @@ +using System.Threading.Tasks; +using Volo.Abp.Data; +using Volo.Abp.DependencyInjection; + +namespace Volo.CmsKit.Blogs; + +public class BlogFeatureDataSeedContributor : IDataSeedContributor, ITransientDependency +{ + private readonly BlogFeatureManager _blogFeatureManager; + private readonly IBlogRepository _blogRepository; + + public BlogFeatureDataSeedContributor( + BlogFeatureManager blogFeatureManager, + IBlogRepository blogRepository) + { + _blogFeatureManager = blogFeatureManager; + _blogRepository = blogRepository; + } + + public async Task SeedAsync(DataSeedContext context) + { + var blogs = await _blogRepository.GetListAsync(); + + foreach (var blog in blogs) + { + await _blogFeatureManager.SetDefaultsIfNotSetAsync(blog.Id); + } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogFeatureManager.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogFeatureManager.cs index 77a519daf3..f9dd101ef9 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogFeatureManager.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogFeatureManager.cs @@ -44,4 +44,24 @@ public class BlogFeatureManager : DomainService await SetAsync(blogId, feature.FeatureName, isEnabled: true); } } + + public async Task SetIfNotSetAsync(Guid blogId, string featureName, bool isEnabled) + { + var blogFeature = await BlogFeatureRepository.FindAsync(blogId, featureName); + if (blogFeature == null) + { + var newBlogFeature = new BlogFeature(blogId, featureName, isEnabled); + await BlogFeatureRepository.InsertAsync(newBlogFeature); + } + } + + public async Task SetDefaultsIfNotSetAsync(Guid blogId) + { + var defaultFeatures = await DefaultBlogFeatureProvider.GetDefaultFeaturesAsync(blogId); + + foreach (var feature in defaultFeatures) + { + await SetIfNotSetAsync(blogId, feature.FeatureName, isEnabled: true); + } + } } From dad1f8505c8b91121b6ff0382e8fe101bfe97cad Mon Sep 17 00:00:00 2001 From: enisn Date: Tue, 5 Apr 2022 14:00:35 +0300 Subject: [PATCH 112/143] Add PWA Support to template --- .../Commands/ProjectCreationCommandBase.cs | 11 +++++ .../Building/Steps/RemoveFileStep.cs | 21 ++++++++ .../Templates/App/AppTemplateBase.cs | 18 +++++++ .../MyCompanyName.MyProjectName.Blazor.csproj | 6 +++ .../wwwroot/manifest.json | 21 ++++++++ .../wwwroot/service-worker.js | 4 ++ .../wwwroot/service-worker.published.js | 48 +++++++++++++++++++ 7 files changed, 129 insertions(+) create mode 100644 framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/RemoveFileStep.cs create mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/manifest.json create mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/service-worker.js create mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/service-worker.published.js diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs index d638a21f87..860147c584 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs @@ -48,6 +48,12 @@ public abstract class ProjectCreationCommandBase Logger.LogInformation("Preview: yes"); } + var pwa = commandLineArgs.Options.ContainsKey(Options.ProgressiveWebApp.Short); + if (pwa) + { + Logger.LogInformation("Progressive Web App: yes"); + } + var databaseProvider = GetDatabaseProvider(commandLineArgs); if (databaseProvider != DatabaseProvider.NotSpecified) { @@ -476,5 +482,10 @@ public abstract class ProjectCreationCommandBase { public const string Long = "preview"; } + + public static class ProgressiveWebApp + { + public const string Short = "pwa"; + } } } diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/RemoveFileStep.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/RemoveFileStep.cs new file mode 100644 index 0000000000..203a927536 --- /dev/null +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/RemoveFileStep.cs @@ -0,0 +1,21 @@ +using System; + +namespace Volo.Abp.Cli.ProjectBuilding.Building.Steps; + +public class RemoveFileStep : ProjectBuildPipelineStep +{ + private readonly string _filePath; + public RemoveFileStep(string filePath) + { + _filePath = filePath; + } + + public override void Execute(ProjectBuildContext context) + { + var fileToRemove = context.Files.Find(x => x.Name.EndsWith(_filePath)); + if (fileToRemove != null) + { + context.Files.Remove(fileToRemove); + } + } +} diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateBase.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateBase.cs index 20b72cdc50..e232629e5a 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateBase.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateBase.cs @@ -209,6 +209,15 @@ public abstract class AppTemplateBase : TemplateInfo { RemoveCmsKitDependenciesFromPackageJsonFiles(steps); } + + if (context.BuildArgs.ExtraProperties.ContainsKey(NewCommand.Options.ProgressiveWebApp.Short)) + { + context.Symbols.Add("PWA"); + } + else + { + RemovePwaFiles(steps); + } } protected static void RemoveCmsKitDependenciesFromPackageJsonFiles(List steps) @@ -238,6 +247,15 @@ public abstract class AppTemplateBase : TemplateInfo } } + protected static void RemovePwaFiles(List steps) + { + steps.Add(new RemoveFileStep("/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/service-worker.js")); + steps.Add(new RemoveFileStep("/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/service-worker.published.js")); + steps.Add(new RemoveFileStep("/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/manifest.json")); + steps.Add(new RemoveFileStep("/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/icon-192.png")); + steps.Add(new RemoveFileStep("/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/icon-512.png")); + } + protected bool IsCmsKitSupportedForTargetVersion(ProjectBuildContext context) { if (string.IsNullOrWhiteSpace(context.BuildArgs.Version)) diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyCompanyName.MyProjectName.Blazor.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyCompanyName.MyProjectName.Blazor.csproj index 593ebf5868..32ab98eba9 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyCompanyName.MyProjectName.Blazor.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyCompanyName.MyProjectName.Blazor.csproj @@ -29,4 +29,10 @@ + + + + + + diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/manifest.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/manifest.json new file mode 100644 index 0000000000..eefb83cb28 --- /dev/null +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/manifest.json @@ -0,0 +1,21 @@ +{ + "name": "MyProjectName", + "short_name": "MyCompanyName.MyProjectName", + "start_url": "./", + "display": "standalone", + "background_color": "#ffffff", + "theme_color": "#03173d", + "prefer_related_applications": false, + "icons": [ + { + "src": "icon-512.png", + "type": "image/png", + "sizes": "512x512" + }, + { + "src": "icon-192.png", + "type": "image/png", + "sizes": "192x192" + } + ] +} diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/service-worker.js b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/service-worker.js new file mode 100644 index 0000000000..fe614daee0 --- /dev/null +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/service-worker.js @@ -0,0 +1,4 @@ +// In development, always fetch from the network and do not enable offline support. +// This is because caching would make development more difficult (changes would not +// be reflected on the first load after each change). +self.addEventListener('fetch', () => { }); diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/service-worker.published.js b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/service-worker.published.js new file mode 100644 index 0000000000..0d9986fce1 --- /dev/null +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/service-worker.published.js @@ -0,0 +1,48 @@ +// Caution! Be sure you understand the caveats before publishing an application with +// offline support. See https://aka.ms/blazor-offline-considerations + +self.importScripts('./service-worker-assets.js'); +self.addEventListener('install', event => event.waitUntil(onInstall(event))); +self.addEventListener('activate', event => event.waitUntil(onActivate(event))); +self.addEventListener('fetch', event => event.respondWith(onFetch(event))); + +const cacheNamePrefix = 'offline-cache-'; +const cacheName = `${cacheNamePrefix}${self.assetsManifest.version}`; +const offlineAssetsInclude = [ /\.dll$/, /\.pdb$/, /\.wasm/, /\.html/, /\.js$/, /\.json$/, /\.css$/, /\.woff$/, /\.png$/, /\.jpe?g$/, /\.gif$/, /\.ico$/, /\.blat$/, /\.dat$/ ]; +const offlineAssetsExclude = [ /^service-worker\.js$/ ]; + +async function onInstall(event) { + console.info('Service worker: Install'); + + // Fetch and cache all matching items from the assets manifest + const assetsRequests = self.assetsManifest.assets + .filter(asset => offlineAssetsInclude.some(pattern => pattern.test(asset.url))) + .filter(asset => !offlineAssetsExclude.some(pattern => pattern.test(asset.url))) + .map(asset => new Request(asset.url, { integrity: asset.hash, cache: 'no-cache' })); + await caches.open(cacheName).then(cache => cache.addAll(assetsRequests)); +} + +async function onActivate(event) { + console.info('Service worker: Activate'); + + // Delete unused caches + const cacheKeys = await caches.keys(); + await Promise.all(cacheKeys + .filter(key => key.startsWith(cacheNamePrefix) && key !== cacheName) + .map(key => caches.delete(key))); +} + +async function onFetch(event) { + let cachedResponse = null; + if (event.request.method === 'GET') { + // For all navigation requests, try to serve index.html from cache + // If you need some URLs to be server-rendered, edit the following check to exclude those URLs + const shouldServeIndexHtml = event.request.mode === 'navigate'; + + const request = shouldServeIndexHtml ? 'index.html' : event.request; + const cache = await caches.open(cacheName); + cachedResponse = await cache.match(request); + } + + return cachedResponse || fetch(event.request); +} From f748c9375d55c46738d30ea1bbe0923df4427eb1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Tue, 5 Apr 2022 14:34:05 +0300 Subject: [PATCH 113/143] Blog post for 5.2 stable release. --- .../2022-04-05 v5_2_Release_Stable/POST.md | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 docs/en/Blog-Posts/2022-04-05 v5_2_Release_Stable/POST.md diff --git a/docs/en/Blog-Posts/2022-04-05 v5_2_Release_Stable/POST.md b/docs/en/Blog-Posts/2022-04-05 v5_2_Release_Stable/POST.md new file mode 100644 index 0000000000..3575fb396f --- /dev/null +++ b/docs/en/Blog-Posts/2022-04-05 v5_2_Release_Stable/POST.md @@ -0,0 +1,49 @@ +# ABP.IO Platform 5.2 Final Has Been Released! + +[ABP Framework](https://abp.io/) and [ABP Commercial](https://commercial.abp.io/) 5.2 versions have been released today. + +## What's New With 5.2? + +Since all the new features are already explained in details with the [5.2 RC Announcement Post](https://blog.abp.io/abp/ABP.IO-Platform-5-2-RC-Has-Been-Published), I will not repeat all the details again. See the [RC Blog Post](https://blog.abp.io/abp/ABP.IO-Platform-5-2-RC-Has-Been-Published) for all the features and enhancements. + +## Creating New Solutions + +You can create a new solution with the ABP Framework version 5.2 by either using the `abp new` command or using the **direct download** tab on the [get started page](https://abp.io/get-started). + +> See the [getting started document](https://docs.abp.io/en/abp/latest/Getting-Started) for more. + +## How to Upgrade an Existing Solution + +### Install/Update the ABP CLI + +First of all, install the ABP CLI or upgrade to the latest version. + +If you haven't installed yet: + +```bash +dotnet tool install -g Volo.Abp.Cli +``` + +To update an existing installation: + +```bash +dotnet tool update -g Volo.Abp.Cli +``` + +### ABP UPDATE Command + +[ABP CLI](https://docs.abp.io/en/abp/latest/CLI) provides a handy command to update all the ABP related NuGet and NPM packages in your solution with a single command: + +```bash +abp update +``` + +Run this command in the root folder of your solution. + +## Migration Guide + +Check [the migration guide](https://docs.abp.io/en/abp/5.2/Migration-Guides/Abp-5_2) for the applications with the version 5.x upgrading to the version 5.2. + +## About the Next Version + +The next feature version will be 5.3. It is planned to release the 5.3 RC (Release Candidate) on May 03 and the final version on May 31, 2022. You can follow the [release planning here](https://github.com/abpframework/abp/milestones). From aa89d0bb1fea74c8b94eda0af4fdbc29866ccc1a Mon Sep 17 00:00:00 2001 From: Enis Necipoglu Date: Tue, 5 Apr 2022 16:25:32 +0300 Subject: [PATCH 114/143] Add missing assets to index.html for blazor pwa support --- .../Building/Steps/TemplateCodeDeleteStep.cs | 6 +++++- .../MyCompanyName.MyProjectName.Blazor.csproj | 3 +++ .../wwwroot/icon-192.png | Bin 0 -> 2626 bytes .../wwwroot/icon-512.png | Bin 0 -> 6311 bytes .../wwwroot/index.html | 10 ++++++++++ 5 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/icon-192.png create mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/icon-512.png diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/TemplateCodeDeleteStep.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/TemplateCodeDeleteStep.cs index 69dada9a8e..39186e900c 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/TemplateCodeDeleteStep.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/TemplateCodeDeleteStep.cs @@ -8,7 +8,11 @@ public class TemplateCodeDeleteStep : ProjectBuildPipelineStep { foreach (var file in context.Files) { - if (file.Name.EndsWith(".cs") || file.Name.EndsWith(".csproj") || file.Name.EndsWith(".cshtml") || file.Name.EndsWith(".json")) + if (file.Name.EndsWith(".cs") || + file.Name.EndsWith(".csproj") || + file.Name.EndsWith(".cshtml") || + file.Name.EndsWith(".json") || + file.Name.EndsWith(".html")) { file.RemoveTemplateCode(context.Symbols); file.RemoveTemplateCodeMarkers(); diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyCompanyName.MyProjectName.Blazor.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyCompanyName.MyProjectName.Blazor.csproj index 32ab98eba9..93f45f455d 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyCompanyName.MyProjectName.Blazor.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyCompanyName.MyProjectName.Blazor.csproj @@ -5,6 +5,9 @@ net6.0 true + + service-worker-assets.js + diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/icon-192.png b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/icon-192.png new file mode 100644 index 0000000000000000000000000000000000000000..166f56da7612ea74df6a297154c8d281a4f28a14 GIT binary patch literal 2626 zcmV-I3cdA-P)v0A9xRwxP|bki~~&uFk>U z#P+PQh zyZ;-jwXKqnKbb6)@RaxQz@vm={%t~VbaZrdbaZrdbaeEeXj>~BG?&`J0XrqR#sSlO zg~N5iUk*15JibvlR1f^^1czzNKWvoJtc!Sj*G37QXbZ8LeD{Fzxgdv#Q{x}ytfZ5q z+^k#NaEp>zX_8~aSaZ`O%B9C&YLHb(mNtgGD&Kezd5S@&C=n~Uy1NWHM`t07VQP^MopUXki{2^#ryd94>UJMYW|(#4qV`kb7eD)Q=~NN zaVIRi@|TJ!Rni8J=5DOutQ#bEyMVr8*;HU|)MEKmVC+IOiDi9y)vz=rdtAUHW$yjt zrj3B7v(>exU=IrzC<+?AE=2vI;%fafM}#ShGDZx=0Nus5QHKdyb9pw&4>4XCpa-o?P(Gnco1CGX|U> z$f+_tA3+V~<{MU^A%eP!8R*-sD9y<>Jc7A(;aC5hVbs;kX9&Sa$JMG!W_BLFQa*hM zri__C@0i0U1X#?)Y=)>JpvTnY6^s;fu#I}K9u>OldV}m!Ch`d1Vs@v9 zb}w(!TvOmSzmMBa9gYvD4xocL2r0ds6%Hs>Z& z#7#o9PGHDmfG%JQq`O5~dt|MAQN@2wyJw_@``7Giyy(yyk(m8U*kk5$X1^;3$a3}N^Lp6hE5!#8l z#~NYHmKAs6IAe&A;bvM8OochRmXN>`D`{N$%#dZCRxp4-dJ?*3P}}T`tYa3?zz5BA zTu7uE#GsDpZ$~j9q=Zq!LYjLbZPXFILZK4?S)C-zE1(dC2d<7nO4-nSCbV#9E|E1MM|V<9>i4h?WX*r*ul1 z5#k6;po8z=fdMiVVz*h+iaTlz#WOYmU^SX5#97H~B32s-#4wk<1NTN#g?LrYieCu> zF7pbOLR;q2D#Q`^t%QcY06*X-jM+ei7%ZuanUTH#9Y%FBi*Z#22({_}3^=BboIsbg zR0#jJ>9QR8SnmtSS6x($?$}6$x+q)697#m${Z@G6Ujf=6iO^S}7P`q8DkH!IHd4lB zDzwxt3BHsPAcXFFY^Fj}(073>NL_$A%v2sUW(CRutd%{G`5ow?L`XYSO*Qu?x+Gzv zBtR}Y6`XF4xX7)Z04D+fH;TMapdQFFameUuHL34NN)r@aF4RO%x&NApeWGtr#mG~M z6sEIZS;Uj1HB1*0hh=O@0q1=Ia@L>-tETu-3n(op+97E z#&~2xggrl(LA|giII;RwBlX2^Q`B{_t}gxNL;iB11gEPC>v` zb4SJ;;BFOB!{chn>?cCeGDKuqI0+!skyWTn*k!WiPNBf=8rn;@y%( znhq%8fj2eAe?`A5mP;TE&iLEmQ^xV%-kmC-8mWao&EUK_^=GW-Y3z ksi~={si~={skwfB0gq6itke#r1ONa407*qoM6N<$g11Kq@c;k- literal 0 HcmV?d00001 diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/icon-512.png b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/icon-512.png new file mode 100644 index 0000000000000000000000000000000000000000..c2dd4842dc93df73c322218ee03eca142a19a338 GIT binary patch literal 6311 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 literal 0 HcmV?d00001 diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/index.html b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/index.html index cea9eeca0d..4a86d7bdc6 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/index.html +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/index.html @@ -12,6 +12,12 @@ + + + + + + @@ -25,5 +31,9 @@ + + + + From 9323fa4db07dbc56d08e11ab0b04ced53c8a4d5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Tue, 5 Apr 2022 21:40:48 +0300 Subject: [PATCH 115/143] Update POST.md --- docs/en/Blog-Posts/2022-04-05 v5_2_Release_Stable/POST.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/en/Blog-Posts/2022-04-05 v5_2_Release_Stable/POST.md b/docs/en/Blog-Posts/2022-04-05 v5_2_Release_Stable/POST.md index 3575fb396f..ed83f36e19 100644 --- a/docs/en/Blog-Posts/2022-04-05 v5_2_Release_Stable/POST.md +++ b/docs/en/Blog-Posts/2022-04-05 v5_2_Release_Stable/POST.md @@ -47,3 +47,5 @@ Check [the migration guide](https://docs.abp.io/en/abp/5.2/Migration-Guides/Abp- ## About the Next Version The next feature version will be 5.3. It is planned to release the 5.3 RC (Release Candidate) on May 03 and the final version on May 31, 2022. You can follow the [release planning here](https://github.com/abpframework/abp/milestones). + +Please [submit an issue](https://github.com/abpframework/abp/issues/new) if you have any problem with this version. From c1b5956431557f60b2b004e4ddfda88e68f8b3b1 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Wed, 6 Apr 2022 10:43:28 +0800 Subject: [PATCH 116/143] Upgrade AutoMapper to v11 --- framework/src/Volo.Abp.AutoMapper/Volo.Abp.AutoMapper.csproj | 4 ++-- .../Volo/Abp/AutoMapper/AbpAutoMapperModule.cs | 3 ++- .../Volo.Abp.Account.Application.csproj | 2 +- .../Volo.Abp.BackgroundJobs.Domain.csproj | 2 +- .../Volo.Abp.BackgroundJobs.MongoDB.csproj | 2 +- .../Volo.BloggingTestApp.MongoDB.csproj | 2 +- .../Volo.Blogging.Admin.Application.csproj | 2 +- .../Volo.Blogging.Application.csproj | 2 +- .../src/Volo.Blogging.Domain/Volo.Blogging.Domain.csproj | 2 +- .../src/Volo.Blogging.MongoDB/Volo.Blogging.MongoDB.csproj | 2 +- .../Volo.CmsKit.Admin.Application.csproj | 2 +- .../Volo.CmsKit.Application/Volo.CmsKit.Application.csproj | 2 +- .../Volo.CmsKit.Common.Application.csproj | 2 +- .../Volo.CmsKit.Public.Application.csproj | 2 +- .../Volo.Docs.Admin.Application.csproj | 2 +- .../src/Volo.Docs.Application/Volo.Docs.Application.csproj | 2 +- modules/docs/src/Volo.Docs.Domain/Volo.Docs.Domain.csproj | 2 +- modules/docs/src/Volo.Docs.MongoDB/Volo.Docs.MongoDB.csproj | 2 +- .../Volo.Abp.FeatureManagement.Application.csproj | 2 +- .../Volo.Abp.Identity.Application.csproj | 2 +- .../Volo.Abp.Identity.Domain/Volo.Abp.Identity.Domain.csproj | 2 +- .../Volo.Abp.Identity.MongoDB.csproj | 2 +- .../Volo.Abp.PermissionManagement.Application.csproj | 2 +- .../Volo.Abp.SettingManagement.Application.csproj | 2 +- .../Volo.Abp.TenantManagement.Application.csproj | 2 +- .../Volo.Abp.TenantManagement.Domain.csproj | 2 +- .../Volo.Abp.TenantManagement.MongoDB.csproj | 2 +- .../MyCompanyName.MyProjectName.Application.csproj | 2 +- 28 files changed, 30 insertions(+), 29 deletions(-) diff --git a/framework/src/Volo.Abp.AutoMapper/Volo.Abp.AutoMapper.csproj b/framework/src/Volo.Abp.AutoMapper/Volo.Abp.AutoMapper.csproj index 9f028d31ee..32f9da017c 100644 --- a/framework/src/Volo.Abp.AutoMapper/Volo.Abp.AutoMapper.csproj +++ b/framework/src/Volo.Abp.AutoMapper/Volo.Abp.AutoMapper.csproj @@ -4,7 +4,7 @@ - netstandard2.0 + netstandard2.1 Volo.Abp.AutoMapper Volo.Abp.AutoMapper $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; @@ -21,7 +21,7 @@ - + diff --git a/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AbpAutoMapperModule.cs b/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AbpAutoMapperModule.cs index 6ed44a6300..18fef842da 100644 --- a/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AbpAutoMapperModule.cs +++ b/framework/src/Volo.Abp.AutoMapper/Volo/Abp/AutoMapper/AbpAutoMapperModule.cs @@ -1,5 +1,6 @@ using System; using AutoMapper; +using AutoMapper.Internal; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; using Volo.Abp.Auditing; @@ -49,7 +50,7 @@ public class AbpAutoMapperModule : AbpModule { foreach (var profileType in options.ValidatingProfiles) { - config.AssertConfigurationIsValid(((Profile)Activator.CreateInstance(profileType)).ProfileName); + config.Internal().AssertConfigurationIsValid(((Profile)Activator.CreateInstance(profileType)).ProfileName); } } diff --git a/modules/account/src/Volo.Abp.Account.Application/Volo.Abp.Account.Application.csproj b/modules/account/src/Volo.Abp.Account.Application/Volo.Abp.Account.Application.csproj index 3879cf9569..32b27998cc 100644 --- a/modules/account/src/Volo.Abp.Account.Application/Volo.Abp.Account.Application.csproj +++ b/modules/account/src/Volo.Abp.Account.Application/Volo.Abp.Account.Application.csproj @@ -4,7 +4,7 @@ - netstandard2.0 + net6.0 Volo.Abp.Account.Application Volo.Abp.Account.Application true diff --git a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/Volo.Abp.BackgroundJobs.Domain.csproj b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/Volo.Abp.BackgroundJobs.Domain.csproj index 7eb9015b73..b46209de47 100644 --- a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/Volo.Abp.BackgroundJobs.Domain.csproj +++ b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/Volo.Abp.BackgroundJobs.Domain.csproj @@ -4,7 +4,7 @@ - netstandard2.0 + netstandard2.1 diff --git a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB/Volo.Abp.BackgroundJobs.MongoDB.csproj b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB/Volo.Abp.BackgroundJobs.MongoDB.csproj index 56c1391ab9..7d29486644 100644 --- a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB/Volo.Abp.BackgroundJobs.MongoDB.csproj +++ b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB/Volo.Abp.BackgroundJobs.MongoDB.csproj @@ -4,7 +4,7 @@ - netstandard2.0 + netstandard2.1 diff --git a/modules/blogging/app/Volo.BloggingTestApp.MongoDB/Volo.BloggingTestApp.MongoDB.csproj b/modules/blogging/app/Volo.BloggingTestApp.MongoDB/Volo.BloggingTestApp.MongoDB.csproj index a846bb0ca6..e707190be5 100644 --- a/modules/blogging/app/Volo.BloggingTestApp.MongoDB/Volo.BloggingTestApp.MongoDB.csproj +++ b/modules/blogging/app/Volo.BloggingTestApp.MongoDB/Volo.BloggingTestApp.MongoDB.csproj @@ -3,7 +3,7 @@ - netstandard2.0 + netstandard2.1 diff --git a/modules/blogging/src/Volo.Blogging.Admin.Application/Volo.Blogging.Admin.Application.csproj b/modules/blogging/src/Volo.Blogging.Admin.Application/Volo.Blogging.Admin.Application.csproj index 456777e60a..6df6b27bb7 100644 --- a/modules/blogging/src/Volo.Blogging.Admin.Application/Volo.Blogging.Admin.Application.csproj +++ b/modules/blogging/src/Volo.Blogging.Admin.Application/Volo.Blogging.Admin.Application.csproj @@ -4,7 +4,7 @@ - netstandard2.0 + net6.0 Volo.Blogging.Admin.Application Volo.Blogging.Admin.Application diff --git a/modules/blogging/src/Volo.Blogging.Application/Volo.Blogging.Application.csproj b/modules/blogging/src/Volo.Blogging.Application/Volo.Blogging.Application.csproj index 504d32836d..99c491231b 100644 --- a/modules/blogging/src/Volo.Blogging.Application/Volo.Blogging.Application.csproj +++ b/modules/blogging/src/Volo.Blogging.Application/Volo.Blogging.Application.csproj @@ -4,7 +4,7 @@ - netstandard2.0 + net6.0 Volo.Blogging.Application Volo.Blogging.Application diff --git a/modules/blogging/src/Volo.Blogging.Domain/Volo.Blogging.Domain.csproj b/modules/blogging/src/Volo.Blogging.Domain/Volo.Blogging.Domain.csproj index c6c096105b..905494aa41 100644 --- a/modules/blogging/src/Volo.Blogging.Domain/Volo.Blogging.Domain.csproj +++ b/modules/blogging/src/Volo.Blogging.Domain/Volo.Blogging.Domain.csproj @@ -4,7 +4,7 @@ - netstandard2.0 + netstandard2.1 Volo.Blogging.Domain Volo.Blogging.Domain diff --git a/modules/blogging/src/Volo.Blogging.MongoDB/Volo.Blogging.MongoDB.csproj b/modules/blogging/src/Volo.Blogging.MongoDB/Volo.Blogging.MongoDB.csproj index 5019b843f2..83d8759d14 100644 --- a/modules/blogging/src/Volo.Blogging.MongoDB/Volo.Blogging.MongoDB.csproj +++ b/modules/blogging/src/Volo.Blogging.MongoDB/Volo.Blogging.MongoDB.csproj @@ -4,7 +4,7 @@ - netstandard2.0 + netstandard2.1 Volo.Blogging.MongoDB Volo.Blogging.MongoDB diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo.CmsKit.Admin.Application.csproj b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo.CmsKit.Admin.Application.csproj index bf1ff4f610..684446b1f0 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo.CmsKit.Admin.Application.csproj +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo.CmsKit.Admin.Application.csproj @@ -4,7 +4,7 @@ - netstandard2.0 + net6.0 diff --git a/modules/cms-kit/src/Volo.CmsKit.Application/Volo.CmsKit.Application.csproj b/modules/cms-kit/src/Volo.CmsKit.Application/Volo.CmsKit.Application.csproj index fa1557674e..51282692af 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Application/Volo.CmsKit.Application.csproj +++ b/modules/cms-kit/src/Volo.CmsKit.Application/Volo.CmsKit.Application.csproj @@ -4,7 +4,7 @@ - netstandard2.0 + net6.0 diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo.CmsKit.Common.Application.csproj b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo.CmsKit.Common.Application.csproj index 1d7baff506..145c7adac6 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo.CmsKit.Common.Application.csproj +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo.CmsKit.Common.Application.csproj @@ -4,7 +4,7 @@ - netstandard2.0 + net6.0 diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo.CmsKit.Public.Application.csproj b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo.CmsKit.Public.Application.csproj index 702523e3c6..0e192cec7a 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo.CmsKit.Public.Application.csproj +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo.CmsKit.Public.Application.csproj @@ -4,7 +4,7 @@ - netstandard2.0 + net6.0 diff --git a/modules/docs/src/Volo.Docs.Admin.Application/Volo.Docs.Admin.Application.csproj b/modules/docs/src/Volo.Docs.Admin.Application/Volo.Docs.Admin.Application.csproj index e3d556c9e0..72f94bdd47 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application/Volo.Docs.Admin.Application.csproj +++ b/modules/docs/src/Volo.Docs.Admin.Application/Volo.Docs.Admin.Application.csproj @@ -4,7 +4,7 @@ - netstandard2.0 + net6.0 Volo.Docs.Admin.Application Volo.Docs.Admin.Application diff --git a/modules/docs/src/Volo.Docs.Application/Volo.Docs.Application.csproj b/modules/docs/src/Volo.Docs.Application/Volo.Docs.Application.csproj index 788edd430d..b00754b104 100644 --- a/modules/docs/src/Volo.Docs.Application/Volo.Docs.Application.csproj +++ b/modules/docs/src/Volo.Docs.Application/Volo.Docs.Application.csproj @@ -4,7 +4,7 @@ - netstandard2.0 + net6.0 Volo.Docs.Application Volo.Docs.Application diff --git a/modules/docs/src/Volo.Docs.Domain/Volo.Docs.Domain.csproj b/modules/docs/src/Volo.Docs.Domain/Volo.Docs.Domain.csproj index b68893b40b..29020e50bc 100644 --- a/modules/docs/src/Volo.Docs.Domain/Volo.Docs.Domain.csproj +++ b/modules/docs/src/Volo.Docs.Domain/Volo.Docs.Domain.csproj @@ -4,7 +4,7 @@ - netstandard2.0 + netstandard2.1 Volo.Docs.Domain Volo.Docs.Domain true diff --git a/modules/docs/src/Volo.Docs.MongoDB/Volo.Docs.MongoDB.csproj b/modules/docs/src/Volo.Docs.MongoDB/Volo.Docs.MongoDB.csproj index 9a5cd19550..25994142c5 100644 --- a/modules/docs/src/Volo.Docs.MongoDB/Volo.Docs.MongoDB.csproj +++ b/modules/docs/src/Volo.Docs.MongoDB/Volo.Docs.MongoDB.csproj @@ -4,7 +4,7 @@ - netstandard2.0 + netstandard2.1 Volo.Docs.MongoDB Volo.Docs.MongoDB diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application/Volo.Abp.FeatureManagement.Application.csproj b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application/Volo.Abp.FeatureManagement.Application.csproj index b2f186ce71..4ea705d8ef 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application/Volo.Abp.FeatureManagement.Application.csproj +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application/Volo.Abp.FeatureManagement.Application.csproj @@ -4,7 +4,7 @@ - netstandard2.0 + net6.0 diff --git a/modules/identity/src/Volo.Abp.Identity.Application/Volo.Abp.Identity.Application.csproj b/modules/identity/src/Volo.Abp.Identity.Application/Volo.Abp.Identity.Application.csproj index fc01ba4400..4698a381fa 100644 --- a/modules/identity/src/Volo.Abp.Identity.Application/Volo.Abp.Identity.Application.csproj +++ b/modules/identity/src/Volo.Abp.Identity.Application/Volo.Abp.Identity.Application.csproj @@ -4,7 +4,7 @@ - netstandard2.0 + net6.0 Volo.Abp.Identity.Application Volo.Abp.Identity.Application $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/Volo.Abp.Identity.Domain.csproj b/modules/identity/src/Volo.Abp.Identity.Domain/Volo.Abp.Identity.Domain.csproj index e951457688..5e20e76f3f 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain/Volo.Abp.Identity.Domain.csproj +++ b/modules/identity/src/Volo.Abp.Identity.Domain/Volo.Abp.Identity.Domain.csproj @@ -4,7 +4,7 @@ - netstandard2.0 + netstandard2.1 Volo.Abp.Identity.Domain Volo.Abp.Identity.Domain $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; diff --git a/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo.Abp.Identity.MongoDB.csproj b/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo.Abp.Identity.MongoDB.csproj index 762582ef67..96e949d6d5 100644 --- a/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo.Abp.Identity.MongoDB.csproj +++ b/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo.Abp.Identity.MongoDB.csproj @@ -4,7 +4,7 @@ - netstandard2.0 + netstandard2.1 Volo.Abp.Identity.MongoDB Volo.Abp.Identity.MongoDB $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Application/Volo.Abp.PermissionManagement.Application.csproj b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application/Volo.Abp.PermissionManagement.Application.csproj index d81f87d28c..080432db39 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Application/Volo.Abp.PermissionManagement.Application.csproj +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application/Volo.Abp.PermissionManagement.Application.csproj @@ -4,7 +4,7 @@ - netstandard2.0 + net6.0 Volo.Abp.PermissionManagement.Application Volo.Abp.PermissionManagement.Application $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Application/Volo.Abp.SettingManagement.Application.csproj b/modules/setting-management/src/Volo.Abp.SettingManagement.Application/Volo.Abp.SettingManagement.Application.csproj index 0ea73276ff..8061d285e7 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Application/Volo.Abp.SettingManagement.Application.csproj +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Application/Volo.Abp.SettingManagement.Application.csproj @@ -4,7 +4,7 @@ - netstandard2.0 + net6.0 diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/Volo.Abp.TenantManagement.Application.csproj b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/Volo.Abp.TenantManagement.Application.csproj index 3c9da24d7e..25e39ab17c 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/Volo.Abp.TenantManagement.Application.csproj +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/Volo.Abp.TenantManagement.Application.csproj @@ -4,7 +4,7 @@ - netstandard2.0 + net6.0 Volo.Abp.TenantManagement.Application Volo.Abp.TenantManagement.Application $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/Volo.Abp.TenantManagement.Domain.csproj b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/Volo.Abp.TenantManagement.Domain.csproj index 5de64b7a1d..f461433d14 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/Volo.Abp.TenantManagement.Domain.csproj +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/Volo.Abp.TenantManagement.Domain.csproj @@ -4,7 +4,7 @@ - netstandard2.0 + netstandard2.1 Volo.Abp.TenantManagement.Domain Volo.Abp.TenantManagement.Domain $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.MongoDB/Volo.Abp.TenantManagement.MongoDB.csproj b/modules/tenant-management/src/Volo.Abp.TenantManagement.MongoDB/Volo.Abp.TenantManagement.MongoDB.csproj index dd8726dccb..d10686b721 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.MongoDB/Volo.Abp.TenantManagement.MongoDB.csproj +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.MongoDB/Volo.Abp.TenantManagement.MongoDB.csproj @@ -4,7 +4,7 @@ - netstandard2.0 + netstandard2.1 Volo.Abp.TenantManagement.MongoDB Volo.Abp.TenantManagement.MongoDB $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application/MyCompanyName.MyProjectName.Application.csproj b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application/MyCompanyName.MyProjectName.Application.csproj index c24b0db2a5..f97a38e9bf 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application/MyCompanyName.MyProjectName.Application.csproj +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Application/MyCompanyName.MyProjectName.Application.csproj @@ -3,7 +3,7 @@ - netstandard2.0 + net6.0 MyCompanyName.MyProjectName From f2de6d56b99ef1ddb1566a25dad12fb3c6272795 Mon Sep 17 00:00:00 2001 From: Engincan VESKE Date: Wed, 6 Apr 2022 11:31:53 +0300 Subject: [PATCH 117/143] Create community article about Concurrency Check in ABP --- .../POST.md | 552 ++++++++++++++++++ .../concurrency-mismatch.gif | Bin 0 -> 1237571 bytes .../optimistic-concurrency.png | Bin 0 -> 21478 bytes 3 files changed, 552 insertions(+) create mode 100644 docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/POST.md create mode 100644 docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/concurrency-mismatch.gif create mode 100644 docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/optimistic-concurrency.png diff --git a/docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/POST.md b/docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/POST.md new file mode 100644 index 0000000000..4a594669ec --- /dev/null +++ b/docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/POST.md @@ -0,0 +1,552 @@ +# Concurrency Check in ABP Based Applications + +In this article, we'll create a basic application to demonstrate how "Concurrency Check/Control" can be done in an ABP based application. + +## Creating the Solution + +For this article, we can create a simple BookStore application and perform CRUD operations. + +> To keep the article simple and shor, we'll only add **Book** entity and ignore the **Author** part. + +We can create a new startup template with EF Core as a database provider and MVC for the UI Framework. + +> If you already have a project, you don't need to create a new startup template, you can directly implement the following steps to your project. So you can skip this section. + +We can create a new startup template by using the [ABP CLI](https://docs.abp.io/en/abp/latest/CLI). + +```bash +abp new Acme.BookStore -t app -csf +``` + +After running the above command, our project boilerplate will be downloaded. Then we can open the solution and start to the development. + +## Starting the Development + +Let's start with defining our entities. + +### Creating Entitites + +Create a `Book.cs` (/Books/Book.cs) class in the `.Domain` layer: + +```csharp +public class Book : AuditedAggregateRoot +{ + public string Name { get; set; } + + public BookType Type { get; set; } + + public DateTime PublishDate { get; set; } + + public float Price { get; set; } +} +``` + +* To enable **Concurrency Check** for our entities, our entities should implement the `IHasConcurrencyStamp` interface, directly or indirectly. + +* [Aggregate Root](https://docs.abp.io/en/abp/5.2/Entities#aggregateroot-class) entity classes already implement the `IHasConcurrencyStamp` interface, so if we inherit our entities from one of these entity classes we don't need to manually implement the `IHasConcurrencyStamp` interface. + +* And we've derieved the `Book` entity from `AuditedAggregateRoot` here, so we don't need to implement `IHasConcurrencyStamp` interface because `AuditedAggregateRoot` class is already implement the `IHasConcurrencyStamp` interface. + +> You can read more details from the [Concurreny Check](https://docs.abp.io/en/abp/5.2/Concurrency-Check) documentation. + +Then, create a `BookType` (/Books/BookType.cs) enum in the `.Domain.Shared` layer: + +```csharp +public enum BookType +{ + Undefined, + Adventure, + Biography, + Dystopia, + Fantastic, + Horror, + Science, + ScienceFiction, + Poetry +} +``` + +### Database Integration + +Open the `BookStoreDbContext` (/EntityFrameworkCore/BookStoreDbContext.cs) class in the `*.EntityFrameworkCore` project and add the following `DbSet` statement: + +```csharp +namespace Acme.BookStore.EntityFrameworkCore; + +[ReplaceDbContext(typeof(IIdentityDbContext))] +[ReplaceDbContext(typeof(ITenantManagementDbContext))] +[ConnectionStringName("Default")] +public class BookStoreDbContext : + AbpDbContext, + IIdentityDbContext, + ITenantManagementDbContext +{ + //Entities from the modules + + public DbSet Books { get; set; } //add this line +} +``` + +Then we can navigate to the `OnModelCreating` method in the same class and configure our tables/entities: + +```csharp +protected override void OnModelCreating(ModelBuilder builder) +{ + base.OnModelCreating(builder); + + /* Include modules to your migration db context */ + + builder.ConfigurePermissionManagement(); + ... + + //* Configure your own tables/entities inside here */ + + builder.Entity(b => + { + b.ToTable(BookStoreConsts.DbTablePrefix + "Books", + BookStoreConsts.DbSchema); + b.ConfigureByConvention(); //auto configure for the base class props + b.Property(x => x.Name).IsRequired().HasMaxLength(128); + }); +} +``` + +After the mapping configurations, we can create a new migration and apply changes to the database. + +To do this, open your command line terminal in the directory of the `EntityFrameworkCore` project and run the below command: + +```bash +dotnet ef migrations add Added_Books +``` + +After this command a new migration will be generated and then we can run the `*.DbMigrator` project to apply the last changes to the database such as creating a new table named `Books` according to the lastly created migration. + +### Defining DTOs and Application Service Interfaces + +We can start to define the use cases of the application. + +Create the DTO classes (under **Books** folder) in the `Application.Contracts` project: + +* **BookDto.cs** + +```csharp +public class BookDto : AuditedEntityDto, IHasConcurrencyStamp +{ + public string Name { get; set; } + + public BookType Type { get; set; } + + public DateTime PublishDate { get; set; } + + public float Price { get; set; } + + public string ConcurrencyStamp { get; set; } +} +``` + +* `AuditedEntityDto` class is not implemented from the `IHasConcurrencyStamp` interface, so for **BookDto** class we need to implement the `IHasConcurrencyStamp`. + +* This is important, because we need to return books with their **ConcurrencyStamp** value. + +* **CreateBookDto.cs** + +```csharp +public class CreateBookDto +{ + [Required] + [StringLength(128)] + public string Name { get; set; } + + [Required] + public BookType Type { get; set; } = BookType.Undefined; + + [Required] + [DataType(DataType.Date)] + public DateTime PublishDate { get; set; } = DateTime.Now; + + [Required] + public float Price { get; set; } +} +``` + +* **UpdateBookDto.cs** + +```csharp +public class UpdateBookDto : IHasConcurrencyStamp +{ + [Required] + [StringLength(128)] + public string Name { get; set; } + + [Required] + public BookType Type { get; set; } = BookType.Undefined; + + [Required] + [DataType(DataType.Date)] + public DateTime PublishDate { get; set; } = DateTime.Now; + + [Required] + public float Price { get; set; } + + public string ConcurrencyStamp { get; set; } +} +``` + +* Here, we've also implemented the `IHasConcurrencyStamp` interface for the **UpdateBookDto** class. + +* We will use this value while updating an existing book. ABP Framework will compare the current book's **ConcurrencyStamp** value with the provided one, if values are matched, this means everything is as it is supposed to be and will update the record. + +* If values are mismatched, then it means record that we're trying to update is already updated by an other user and we need to get the latest changes to be able to make changes on it. + +* Also, in that case, `AbpDbConcurrencyException` will be thrown by the ABP Framework and we can either handle this exception manually or let the ABP Framework handle it behalf of use and shows a user-friendly error message as in the image below. + +![](./optimistic-concurrency.png) + +Create a new `IBookAppService` (/Books/IBookAppService.cs) interface in the `Application.Contracts` project: + +```csharp +public interface IBookAppService : + ICrudAppService +{ +} +``` +* We've implemented the `ICrudAppService` here, because we just need to perform CRUD operations and this interface help us to define common CRUD operation methods. + +### Application Service Implementations + +Create a `BookAppService` (/Books/BookAppService.cs) class inside the `*.Application` project and implement the application service methods, as shown below: + +```csharp +public class BookAppService : + CrudAppService, + IBookAppService +{ + public BookAppService(IRepository repository) + : base(repository) + { + } + + public override async Task UpdateAsync(Guid id, UpdateBookDto input) + { + var book = await Repository.GetAsync(id); + + book.Name = input.Name; + book.Price = input.Price; + book.Type = input.Type; + book.PublishDate = input.PublishDate; + + book.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp); + + var updatedBook = await Repository.UpdateAsync(book); + return ObjectMapper.Map(updatedBook); + } +} +``` + +* He've used the `CrudAppService` base class. This class implements the all common CRUD operations and if we want to change a method, we can simply override the method and change it by our needs. + +> Normally, you don't need to override the `UpdateAsync` method to do **Concurrency Check**. I wanted to override this method to show what we need to do for **Concurrency Check**. + +* We can look closer to the `UpdateAsync` method here, because as we've mentioned earlier we need to pass the provided **ConcurrencyStamp** value to be able to do **Concurrency Check/Control** to our entity while updating. We've used the `SetConcurrencyStampIfNotNull` extension method to set the **ConcurrencyStamp** value to our entity and update the record. + +* In that point, if the given record already updated by any other user, **ConcurrencyStamp** mismatch will occur and `AbpDbConcurrencyException` will be thrown and thanks to **Concurrency Check** system of ABP, data-consistency will be provided and the current record won't be overrided. + +* And if the values are matched, the record will be updated successfully. + +After implementing the application service methods, we can do the related mapping configurations, so open the `BookStoreApplicationAutoMapperProfile.cs` and update the content as below: + +```csharp +public class BookStoreApplicationAutoMapperProfile : Profile +{ + public BookStoreApplicationAutoMapperProfile() + { + CreateMap(); + CreateMap(); + } +} +``` + +### User Interface + +So far, we've applied the all neccessary steps for the **Concurrency Check** system, let's see it in the action. + +Create a razor page in the `.Web` layer named `Index` (**/Pages/Books/Index.cshtml**), open this file and replace the content with the following code block: + +```html +@page +@using Acme.BookStore.Localization +@using Microsoft.Extensions.Localization +@model Acme.BookStore.Web.Pages.Books.Index + +@section scripts +{ + +} + + + + + + Books + + + + + + + + + + +``` + +* We've defined a table and "New Book" button inside a card element here, we'll fill the table with our book records in the next step by using the **Datatables** library. + +Create a `Index.js` (**/Pages/Books/Index.js**) file and add the following code block: + +```js +$(function () { + var l = abp.localization.getResource('BookStore'); + var createModal = new abp.ModalManager(abp.appPath + 'Books/CreateModal'); + var editModal = new abp.ModalManager(abp.appPath + 'Books/EditModal'); + + var dataTable = $('#BooksTable').DataTable( + abp.libs.datatables.normalizeConfiguration({ + serverSide: true, + paging: true, + order: [[1, "asc"]], + searching: false, + scrollX: true, + ajax: abp.libs.datatables.createAjax(acme.bookStore.books.book.getList), + columnDefs: [ + { + title: l('Actions'), + rowAction: { + items: + [ + { + text: l('Edit'), + action: function (data) { + editModal.open({ id: data.record.id }); + } + } + ] + } + }, + { + title: l('Name'), + data: "name" + }, + { + title: l('Type'), + data: "type", + render: function (data) { + return l('Enum:BookType:' + data); + } + }, + { + title: l('PublishDate'), + data: "publishDate", + render: function (data) { + return luxon + .DateTime + .fromISO(data, { + locale: abp.localization.currentCulture.name + }).toLocaleString(); + } + }, + { + title: l('Price'), + data: "price" + }, + { + title: l('CreationTime'), + data: "creationTime", + render: function (data) { + return luxon + .DateTime + .fromISO(data, { + locale: abp.localization.currentCulture.name + }).toLocaleString(luxon.DateTime.DATETIME_SHORT); + } + } + ] + }) + ); + + createModal.onResult(function () { + dataTable.ajax.reload(); + }); + + editModal.onResult(function () { + dataTable.ajax.reload(); + }); + + $('#NewBookButton').click(function (e) { + e.preventDefault(); + createModal.open(); + }); +}); +``` + +* We've used the [Datatables](https://datatables.net/) to list our books. + +* Also defined **create** and **update** modals by using [ABP Modal Manager](https://docs.abp.io/en/abp/latest/UI/AspNetCore/Modals#modalmanager-reference), but we didn't create them yet, so let's create the modals. + +First, create **CreateModal** razor page and update the **CreateModal.cshtml** and **CreateModal.cshtml.cs** files as below: + +* **CreateModal.cshtml** + +```html +@page +@using Acme.BookStore.Web.Pages.Books +@using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal +@model CreateModalModel +@{ + Layout = null; +} + + + + + + + + + +``` + +* We've used `abp-dynamic-form` tag-helper and pass it a `Book` model, this tag helper will simply create form contents (inputs, select boxes etc.) behalf of us. + +* **CreateModal.cshtml.cs** + +```csharp +using System.Threading.Tasks; +using Acme.BookStore.Books; +using Microsoft.AspNetCore.Mvc; + +namespace Acme.BookStore.Web.Pages.Books; + +public class CreateModalModel : BookStorePageModel +{ + [BindProperty] + public CreateBookDto Book { get; set; } + + private readonly IBookAppService _bookAppService; + + public CreateModalModel(IBookAppService bookAppService) + { + _bookAppService = bookAppService; + } + + public void OnGet() + { + Book = new CreateBookDto(); + } + + public async Task OnPostAsync() + { + await _bookAppService.CreateAsync(Book); + return NoContent(); + } +} +``` + +* In this file, we simply define **CreateBookDto** as bind property and we'll use this classes' properties in the form. Thanks to the `abp-dynamic-form` tag-helper we don't need to define all of this form elements one by one, it will generate behalf of us. + +We can create **EditModal** razor page and update the **EditModal.cshtml** and **EditModal.cshtml.cs** files as below: + +* **EditModal.cshtml** + +```html +@page +@using Acme.BookStore.Web.Pages.Books +@using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal +@model EditModalModel +@{ + Layout = null; +} + + + + + + + + + + + + + + +``` + +* Here, we didn't use the `abp-dynamic-form` tag-helper and add all neccessary form elements to our form one by one. + +* As you may notice, we've set input type as **hidden** for the **ConcurrencyStamp** input, because end-user should not see this value. + +> Instead of doing it like that, we could create a view model class and use the `[HiddenInput]` data attribute for the **ConcurrencyStamp** property and use the `abp-dynamic-form` tag-helper. But to simplify the article I didn't want to do that, if you want you can create a view model and define the neccessary data attributes for properties. + +* **EditModal.cshtml.cs** + +```csharp +public class EditModalModel : BookStorePageModel +{ + [HiddenInput] + [BindProperty(SupportsGet = true)] + public Guid Id { get; set; } + + [BindProperty] + public UpdateBookDto Book { get; set; } + + private readonly IBookAppService _bookAppService; + + public EditModalModel(IBookAppService bookAppService) + { + _bookAppService = bookAppService; + } + + public async Task OnGetAsync() + { + var bookDto = await _bookAppService.GetAsync(Id); + Book = ObjectMapper.Map(bookDto); + } + + public async Task OnPostAsync() + { + await _bookAppService.UpdateAsync(Id, Book); + return NoContent(); + } +} +``` + +Lastly, we can define the neccessary mapping configurations and run the application to see results. + +Open the `BookStoreWebAutoMapperProfile.cs` and update the content as below: + +```csharp +public class BookStoreWebAutoMapperProfile : Profile +{ + public BookStoreWebAutoMapperProfile() + { + CreateMap(); + } +} +``` + +Then we can run the application, navigates to **/Books** endpoint and see the result. + +![](concurrency-mismatch.gif) + +* In the image above, we can see that multiple users open the edit model to change a record and try to update the relevant record independently of each other. + +* After the first user updated the record, the second user tries to update the same record without getting the last state of the record. And therefore `AbpDbConcurrencyException` is thrown because **ConcurrencyStamp** values are different from each other. + +* The second user should close and re-open the model to get the last state of the record and then he/she can make changes to the current record. + + +Thanks for reading the article. \ No newline at end of file diff --git a/docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/concurrency-mismatch.gif b/docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/concurrency-mismatch.gif new file mode 100644 index 0000000000000000000000000000000000000000..922bb5b7cac20d196fd54a3a01dc69887d503ac6 GIT binary patch literal 1237571 zcmYJ)1xy`Ln>X;wEl{99DemrG+}$0DTX8AwPA~3KTrciY+}+*X-QD%FefQh__Q~(e zNlqr2WRf|_^UoPcX$dZFL$S}cpWFcel8-M6;;KJHg_Xov7@0po0sbvLLqmW5H`D(c zfdAZ9^!_;V{=D@5dI))chWu~6Lm;oukc(Hy_A6xW8M1uya`*83`1JJn^zZtA9v&b6 z)b8~xleRF$#b94Qly1M%Bad~xpesOhnesTKG+1c^Q>Cy4Y;o;H# z{=x3v-q!Bk#?Jo6_QBTH&gSOU#>VE_#>VpM%Hq<}%>2^m#8m&lKu=G1ch~<^duL~J z*Le5TNypTC!}eRz@_TyM+np^?oPn!6p;LT8!(zYN`R!{tEy@`TO6gS7s6_oJ*-R+Et5Pw@ zlF*2gPzw@MauJcU5Rx$ykTMdGFyNEW4n5;NftF=G?3;1IFl5OU%Wap4g0U=#CW z6ANMx38NASqu`68;7gzqNqr-d{zfeOja1m2V_!--t9&h_${E>wF{D!yz*y zqA($*{6$RdLqZcmN*_$a>B%l`B_waAprWs@V`O4%VqtD-XKCPMXYT6k;NtA;;^N}& z>gMJZ;PN{mBq}W#oS&VYTbdqIm+aS-4H~ZqUTTaw9Lv7jtbE=rd00rk9}YZgb=s*g zS}D|-&5{^Rr02yk%ov9NP8e`jH2Vxps?r=_K%rKY2& zq+_63QYu1HYC=+)|A&Bt=6_KW zkWl>x@qgg|FFax@JfeT7afxXD2O%{M0TmV=H74#qRG7FFn7HJaxMWzkBv`n_|G+^2 z1@QP%RoUGEaA>r;LsdDwAt+=r8B*1`{Snx#zt)DT^9EyxMZ@u>Yx0NVsehC@YgQDD zCM`D%uRYkr6(n*wovaPl7ENXe1t1W})D=(XNyXFZjntLQ7AfV)WXjZ+P9!rKPn3Ji zmM;D^=nW^3Z75%^wU{l{8*QjqZM5GF?>|u~ldE*RJy{=Z{JYr+`t*fRuBmFfH*|X@ zh&#S;yf2na7A)6Xvp<@`YPB)ed^_Dgf5vlh(p+~uTl}L;f4rssbg_yg05giS;e55p z>2zbfwefP3G6n-rqOIwAcPO6j=LDZewQ;jKXC+cw%l&C;5a;GZ`|HEuQZFQeND*9A zZ8VfXN@s@HcvlfKI+~>@c>a7Rz1aA7va|E!qlX&?Y;(DevH2U0vY1#2ii3U2A4P(C z`_~b7{e}&U@2xy}zWmX42(f~y;Sa1}i=8lPAP1r<9cojG9Qtl7Vh2q_4 zKJ`ShAA&7O+rb167JGl@VM-F>q&SZE;%UBzB_xz0(U2u*nl#QrBPQ zO$Rc{739~Yr+>Sm_sgVuQC+R7hA8RetBJptoz+gc^86u-Rkb>=UouNSCz}%Avo;u% zptCInsg#{JAE}R4h;2rnUbHGJu#HjPEm&Q)KOM9Vlbsno?Wl|O&|MYzPLy4C!(Fak zc5$2j0RS49>90k73G<|Tuvg25GtVI~E6!WGsRg|#iq``F*@NWUR zeWa+v->9I2zakPd-%@jA;oA)2eOq4~)CtNcbYUK~28;^_1lEf1KE654iO^X&OXys} z-vTf-w`!rFx=?54;2d(g#*7BX!i9p#{d!ilK349<-4289AbK+Kk1k8b$vzLg+(h{t ztH!egk83Wg=Oum2vkc>yU$B`Gm{icBQLqy~U5yCoy$QLIenBMm*sVU$`*Y%OF8^b5 zS6l#PKgk&KZ3WiB7Ic^$!H9BPm>G}34@q?J9n;B#3%Z>5Io-Z>;T22hHi4^dY2_{JK$)C7M zM+689La<~e@%$W?HM_aqAe>SmVbn|oF|&mtno~Cu?{~4u=3Y!Lr zxhv8;gzNAyzlnp-QN>Bmf{MEUO5qb60G$UyJ_Lb|n^>=Kay*yI1E3QltWL+LpF#(q zT$xW<&cG?fNF|Ha&odwZQRslW+AcNC{0aJ$ zap|F+7$jqp)2d?aNGz+F&OcZ(`8jv0R9#m@ebW-8G8XR)j4fpA=mJ0)FceeME{!~l z{QYRA21z^ZyQCe|DYMl({~(Z3MPi;W)lVe;g#=PBk!h;*RUK z(=lxUHK7Jpy7r%n?$<9S-p}X8dO>iv%wQ25)f2s;NknvDa&_DslWfU*#rB;oQCQ0V zl;oe&+x>W1b)!u#{Y>1?2csf1p9ZIt+!g5BIJ$n}`PkY&v|*)PqP+E1VWU{aK-F9# zY?ACj#@hHuR$d4~X z3vCp*j=L9>X8}tJM;{f$q3*$qC(c;R0ZrsN2QtGL3eMC-`P#`Ej-g*VMyzRoSFh+5 zFO=0WQg3FQUe8d9qOXKvkvc+MOS$JhXB?XXR>L4s-;l4E;9dQ z0hmZ#oaif)~G4|!H`CP{W`h1kaPPE@#!9?=|y^;0@I-Il^K z`MLnQ(+H2{4Cx-(sCbx7fNwr;QKY)5OVV8#>)isVD?3E|R9t&De@Tq>*e6?!-OdQWb%cEPyJ8uk}I76jSxlK zsAJDqf;dV)xwBL-L*!JZ2`IHyt$bpc26X07nbVAcysae1KdELeKau(*LukGZ(E04R z==0*z@;ZCr9@4y=M-yB3mmt(u(Q>UQe$%X~(TIkFIfD#L`ZHU3S_?-P(vx=Jf2_y__M7cTp zL3Pjdp5q*|`7Y_fBt4G`6xym^`-W^X~a|cypBFNj3@gIx6Pv_Lcd4;xqYO zfuheT9o*~1F59PUAedQi#z53BK%#*Sx|S1=mu>Gsg+xCuFS7-VXOo3Vk$j}$Hs}Hg ze)5acKnYQTMoJNdBol*B;Sn1AH^ku)VRg79u2&&k(#Oxp~cX*~0)n%#x9*Gc;CN9V^#J$Pi z(;^t+mlEm^1nmX|zYh3>V~2%yhsJ4!If;Z-e0Tq45tf0Cow5{`T}+YHgqsEzmg64o z@IAb^DZCinJ^v__$2`28E5aftyv{vB>mXbW7{L}A(P4qv@D$M#>e-TlTfh}LB!$_X z5;>+xGBx>SBt1d@qEhp+fCuTP#V!;;lc#c%t%j39S}DOEDLJGmY{JQ*%PG;%DG|9TxFRXBTB%7MsS2d2 zkzuJB%c)>#vNY+`Ebg>?t+cyuX~vdmrOj#OC3wXi2^Bc$HQeb_nhEi#X?3aTEzRj+ z*J*9f>0LM(A=~LaS{b5#z@gNPk>-rC<&25vj47PV8SczEt;_|F%%#-K6-aaD+H&T` zbLJKfc!wLjrv*On03W4-PnyAJ%ixP=@J=f5hCAy{I*Zmm>nSyht}5$o7|3vy#SHkw zLi~wU=o9P+35gJp!XAi-kcIq`je?tl%9DexorCF_gPoRx+meI7l0!(FNr93}%9Bg3 zolEJNOP!WW+mcJalFRs#%Z!`H!js3QoyXys$CZ}H(~`%xk|*$zCxn|X!jmtioiE{; zFV&KV*pe@|lCLn5|KO4Jz6^wt$!2B#gg*mCCIm!C%h!J?Fu*M|;wd!IE;REjv`8!b z)lz7^QfNDpONLV9$W!F3UF7On4>$a3+tdxL9N)*C@H#7wh_)p)Nv+--72vC5eu_cu+ zrB%3PH9Tc?+GP!%Wld>iEiGkjD`g!kMffP?Jv`-o+T{bDd&jPBo@i zHFkP6ZfiCEYBk|&H8EZdDQ^wAP7S434Rv}AZEFqvDx`+-wT2n5mW8*LO{bQ_tClOh zmZ!Cr@%693Ypqav`3-K7-b(gU>EDlG5)6ANtgc#x*E%J)~gM+uMPHijgGvH&N_{*UXAYQjh?NI-m8ti zuZvUQhyjq*mTU%ON+g4jUUR%5H+Io1~ z`gGa`yxNA++eTX3##Y-VUfZVd+Glv%=e*i%AgfJLueIH!1v;hK51w`Opyqkrjy;`@ z1Fw#w^p2C(j{*RMCicZ>85S# zp#p_dzx5m74;b+cnCK3edH2b9H^|BLkQnq(f&Ohj z1CD%y&bouH-h=KLgPv`J-fM%tZ-WpJ{*X?_fLZH+f*eq({I3fAP~_TB^xIG@{%{=M zaDwh|lJ{^*#xR}Skg3&>&0C)xe!oNcaK7$Hq4!8}#z<+~Ncq}G<=cqs*s#gzur1o%#GdZNf%n8w#>7e6L}%o~q`HUtZt@8c#ui@xuRAc7@-{w4K{ z#nrY&8iI+y_NB=6rReviSpM!{f=Q#OSs#Msl+5Kc{;s>#W$^oQHo;0R|4RP)ava|> zOw^LP{CL6oO6B`X6~Sr^|LS$ba-Gj=Q|4+*`)b?xYV_IybbGr^TS0szXj{N1qa?j=-5Ks*g{s= zx?67vTyHUy1=1UoevjS8?bycO*d~N*6BF)`3ha>U?@;>gP=j}9J9g+db{HW$%!Iov z0=sPbyBxl|T;N@vj&0^HAUR3{D&f$hUiGv5+QYy2X?+Y`9||*in-{XDM7Xaau&=7W zukO3A3EtQ4*jL)v71W0kMqWbqg?c)H!l`Pp03ZD7II!M0u!S6yrb7`{0cq@^3<#k_ zd|NF?>mW}yQ!hSyZ<%{Nd4q2QzNj-$wpqXN1^XWK)=i^WtgD2i-gH265J z<2YmE7(8)Irv!`xA2zfecAplOe}dgr_wEr*-^b7a4*22;eEHIGSq+9d-MDbgY`!A= z^rn9W`}+#+@4@#js3GK`OTtT#z@>~n)TgW~%-`48S=T|WS4h7XTQ{Jf|6Y>{-jM%< z+*sj#BA7b={dQG+aaN{q+5UD-Vt2##^Ohs)iu&&j6cH3wb}8%cTOp!5k*ss-$&2C2 zLHf?p-;gs@!6UxQTT!BW6~X&D{W~oCJBRfa{!1u9#e4madxNis-?yM7F3){3?t0H} zrjT#j%J1>I?hT0^9R(kYc^^zKuN8@adWw(Un~%PNP2W*~ZkHFH;PIl$yAsIFN9Lo~ z$7A%zQ!G=XpWu_r`GY6Xb4u28T1-Ry?|ZYqXF(qmAz2SMj7R5VPw81Nr9{t}G51zB z&rzK(HG;3In=e^0cPi~ot7nJVV|Rs2=f#SzJ%Vq_cCYT6x5lq1kQ>2| z9$Sbr((7H;#|zQfL(J>Z&l!Njwg{|09+&+QiV-wCDwRUEQjR}Ngj5otZeNP>u0%8e zzb`b7%AQmlg{(xVy`g9*Him9TAkL2ixiog0jlR?$hYDbR9|$zA>XA~ecod;{n(DDi zp?s#mI1X7~@E2-%{r)tyQ}s%{c3+r?Zv`?*O5pWC{uNUYt+n zD}D}I>o_}IthfK3EcUFif~wA^&<5$fdp?}6cgBmPnQX?<; zVSOf@)M==@s1MsetB7tNQfB)j)DOw)zjHR!o*27S?WP?S;EV!4g@)5&H9 zZLiNUJU*7dn4qaC)j!z6kBat!AkjmI9Nzah-}b|RSOyndDN>6~yE?0KPj(y?05=C!tJ zH!V4dX5X)P7=4{KX1bl2{09V|*wQPt6N0C!%!?>tnjGx9>TpRQB`NEG6B(yi@)|)T zrUZpfAr&IvNiMI^rvC=LO8hf8Be599LODjsB~8<99dYUB&ido3)27eE%Hmf6C*H8+ z0r%wCWC@Rh%;b*WACmcmPtX>)*W=_e{J`F?5Cb4c`%VGwPnpgU_K^^r44JbC5Wqlv zgsLvpi}LmDC!BawHo$+}^RWl~fSindd2a=}rOB2eFhO(Wb0B4*^XYGl`{Rkwn%GbGEfL}Zqaaa_|ciY(SeTVe+@jJhx;tkocc|~k+~pN}!{0f- zOMKP7TSu4~!LoUreak7Ybwm2VwRO&C)`HiP+A=t#O>6 zkW}baIf(Yo${#gUBw)bQE-?N`-@$N!B5l9aoc(1(w*OJ&_C4Qcy0!TYVX0Gv%mMW5 zwF4|V>^l5$^#%LP08+dEqlfc>D2O|9xC54@kV#p5Js&z)4^~S-EGa#cRw-Ox>QmHX z0&1o`-#*F-mo{c4Ah>#U9_bRBoV?*%!32(ix~q|gm#3Y;jI7n=rW2H`d5q<^$>Ohu zP5U?|0T8F`UicFUbe>_&-1JWv;}&>=EA#AmPKDiz(;AB_3)SHH{L>V}4-1WjpE>mv zLFX2_A3XNmgswFXx@StqEpqAdQs!Rkrp85Pvm*np4Kx_XzdEs&S70AaQjtneX0FAT zBmNlT`un3p$YEjUE*hje2y8tSUDmE27TZqS?Ls#2l=d0T#HZ!4T?F&jQ9U>duk~`Q zZdbQCA0B)Du3d#_@U?t=Vtki%4FJ!p3SY=b;UxlFLD03h@{- z6>v&hTsz<#^q6qzZ~|)>A}AV^3?j}xvif|JoBVPgO~HsypKPd3-@$S*nj;9 zJp1+8dkZGUsiAZI%AVwxp;LCc}foh9&fcXue2(arZERS@RbO;Di2jr6LP{tX$_@ib55abxH2bKWR; zzxL?+Rubcjz&-o^sOa;y{}n)OxJbA-Ib=) z1rN;!dnWK%H)C9s1fbfoW6;v()N)cQh(In}TPt+j+x7V@Z+SNi)mgZVxBE!88~$4G zhP4w)Rd~<1JJY?J@T?houN`Mh_!3)~h^;66Q_nh@2pl@v#A+$BZsXLK?p?YbvO0)J zs;tPOP7jIhAGrK5I_Tb%(Vm6X9zaRA(-)zy2_iuHE?PuUI{e;II#EV^6sC+Yu$Mm> zmp`?;=y`rH5ScF-;| z%zm%mAy7&`K`IjHmbNyO zUe}ZXUFIn!x=lRH9w?Cz2%nfgkR=Do#ve&xl}UA$j1m(mEaxhklm5FkoP0a%xF$mq zI-Kh*+ub{4g)W;;Hd>=91qB>7y=yBOljM;brPUn$Z9UrbHWDEwQ~zV6x=q%Xb+mSm zuFM-g-3dqn@E?T+l5m0a`^HA`fdYGj70y5yApkX~xi`ZfLcApoRDzma>xTt3(-6x~ zCCD#ja2q)L!z_uxRY_%``6r42hymltUcmV^d17Lj0J%YEYz2C2xxukft$-1cHTurJ zZnd%gku$mRy?;4|oF%&a44ZsY-O#@%V*z~(x=KDPeLT5LKCM@Noei)N*-Y~!KVdzw zqbt23r{MT6)x^g8pi_o6LSHew|a@E zl|!qCT>0=W%T0T@Ga`nr+``+cKxxB$QTaHFzMzsf1E z%KoG_DQ_daY$Jcs zfza5q$!I{})HLmsSOoq!GQS*Llyu{nyo?XGwezfaP&3#0^pRL*JGzP(xeDW0Ki~Wh ziv8Ko75;*HgF-%|!kMa~dV^wma}wvn50R=OQL?fXK)G?{fxS8F^dCG0$pmxoYTmK*Y8JfuUPx9&%dg^KrA60?35qpa8LKsM z=q)u+qQt)!oNzvm5xP9XzL@d_C~mrRkT4!XF&>JsVdy>A6*Rk)sFzzo=z$@9>Me0r zx1JfXnwGwDx3_L?qZtCdaYV6kOEA3~)V#MZy6K|n=%XJZ2Raf59am_c`qVEMtVeaN zm79$It)Hjenoo^auVI+m>Yoi#lg*)T)s2!?k80ky?_V$2NZsAk>D5Q$>FpBY46sN- z?Ha^5+K6Xc$Y@$`fmQ^9RT+_%Dl*id4Yp=n47vliX8FhAH`Hz^HW6*tkbK!b-Zx*Q z3^Ozh$1!v$`Dd})A#(GGx{Ylrq{IO13l+Fxby^?kEVLgidb5-YvyI-8i0V2dlnuy9 zd0#O@Q8@5XiML}|x0MNc00Zk#`a3Cs$~Zwrb_9}B`9^eRs`S1)h%m|+1V5}Rl$kr^ zaO;P@L$ruDR9Oj)*cgpYUpJD_4SM9}8=ZlO{1e-{6W}*3dDA&)V*hzLz)Ah&yO=`A zoyjK@s1r2>kxG5(Bv#S|Hew_d6vC!&jN538Gh`iMcl z3)I@W$PfDrHO=h=4V>;Em7 z(9CN%f$95oH1o^qi)9O*Wri7C=D~3(qB;E8NjBtU6~T(9y`#ZZ@X5<+B-|<(?{tgK zs+iF-Silk^!>VOLpta+)b;N4Oxp1G%`Y@oQSK=&fqA~s9G=sy^bECE2_Uz2ddZ@Cj zPe2x8&eJ|Vz`t;7-3qjsSv|czwfY9JDnUN`jDBuIaX!a-K3iBir$6NO(z?=c-q354 zHe(Z|cdkNiISOk%2FtrqXtPP!*7N0JEy+5Pqc_S0KFL_{5SFhZ;$jkffskjtC}F## zeo++Ba<*_$w|jBX(0EyBdqvFs;Cs65t24acg>(ce-Z(Ciuslt=+$yxY)I0s4ys~+< zFkHbY@)dboxU9pp=ViEp%My6>y;R1xhc~|jgz&uTU%mOBzek^Q+}R;!*&+PBGHJ6% z{cMjm$&UQh@GFrW3e#mmgdN7FInq}%xJC!~L5IEB4JZ_YQ`ho++haDx+4SD0u-vP&Jdk5!$>)MVpaG?n4<_(_tHQI+1tDuwZ zh2y6;2j;IgC_lwG?3|>1Z+RAPc+HRb+-^X!Ez~jBG?Uk%+qW2k_Us?=xPo`}_qR-w zU}m@7?;5AHcFsc+x1;xYxc~OO$2-N(_exmz%2f9%ocBK@?^QMK)y(hJ-R?C)?lqI| zwTkYw8}D@n?{ydN^$zd#1@9$eZl$traj>|rukMW{A51hJOwAw6+#bwB9xRd{ER!GP z9*;SP7p)f`Yz`l6A0O;KKiXqGI#4}2ay~jqK00eWx|lz@x;?suJi6Pt89+8qW1$^s zupE~k$UF`oeIFlxe|`dCJ^4{R`Ex!6NItnWKClcv1iC$iggk{NKZO-Ng*QG$2)cRN z{Su0i5yraRqrCN6cZ;NYj^liemwZmpcuwSe3c`90Hh)e@eoifVPHTKlCwk)ixYZNT zmZsVcAaf20_Q;@m$>n^>lYGe+^ho}>@<-#PDCDI$`K6@j#ct8#l|wvB5Gs4p?Hkcc z>F3uftk-I)*8)W+@k8n&rq_D&*9N!OM)SwAsY&&wvV@Y^Y;a}clo}z{e`#1qW6`?_wKJgm=3>Mm@HeVT*J^}RfeIsg1|h4qmk_*#|jbK@u=~5!Srw$^6}F6@jCf%co=nbxqo-*$^SVNiNpw-+Tx11ClCRP#ro)q zq%RbeN~PT5nsgu%m(%g==$dROmQ*s1-V)U)5(SS@Ec9xNVl0Kle5Ty;mU1G4$L;3q z_?BuaTg0uQjW~8|IA122#pdLWX0BMJNTq^@eSaiLw9)Y#@~f6&smh2hmO=IbxKj7; zSr(%?qW=!IO2tw;kOm=O&}nvsnheuzb@_ijr1zYo-RTR*VzoVc`o1?LQ(faM{ls!G zmd5D>wsgt=5xnboe+y?%dtrs&6CNNv;Y*-E3+kk3$?bJcVm}z-)y4!h6hG|qq@%7{sW=i&Aa-~ zK$2g<*#Q)3?xf)~lrTA=3@uNjVYDM$WKrxZLpu?W40$f~AgszouNXyu543?jL0t8r?VrZ4ZhhEgsnY1i$m4U2B1j0jOB#`5+NH`Z}SX$u=jd1xXGg z+*FyQ4#$*W4`dkgOrMu$s%*IR5_6@W!SlwRIFVWhwiX8kl<9#oBj(wO+MYD=0WvK# zMJ&qUG{rgLE!l;c9hMfdp$mn@I+5VigEaB9m4l+Z6;Ha#i9{Z{zqSi$bXDC5bjy|P zGl9QK55ty!*_tJ76(hus{5t#7iR{JDuq>iRU%%dBQPHp+&RZ$D=J^V!`Bq$tS$5X^ zLSOy|{KXhr!cT&+3XSi3e-AF= z_kmt%-S2}00iM;>aCGTMJr3MoD(Z;MbhicwTi+ZriU0E5hTapxvQBXSq-Fg}8Y0b7 zOUe0WQBFIHST+85(#AIHbmPr72dZCVn^$9fsw)wgg{^Bv?3Af%Q;y)QpEpgfAX+dg zLqcCRZ++)*r&TL#SU7T!FI>Fxf4^FpsYl}6@=H!~-3-D?s&nwC>u_Jw694S7ZodA` zI3kXxu)Y~-)$y$6SnJAtq)$4*eO!Qc`n)SCX}i7Wp+V?+RAFk%b6)>j%>Ar-(w6tK zT_f-{e~7YNf0!iWtZKU1uA%jEoVOE#ay5cC@pd~eNYoB4V_L1B`YCDEe3z+g$N$`B zOeCi?5dYe`^JkrW9vwNEAMA*dsyR#AYijmaK7X#2-Z3a&|1f{P+g|y zek$~S5t97YZ43HLy9LE+(GIQ6Y`i;53|BTFOv4asa>p7E?UUDutY7t;#5?CwVo2n- z4@xkHcPe5TM&}>)t3YRI5}0R>-bI6}U^aOFJVQsKY$ z2=UZ3g?Ve_BR%=Z`=6wS&Tt^8f1=ltNy&l-D&DXC{1A<9Fptsr1Zv{_!t*ID=cN?m zSah;YmdVf6hiP-K!s!tADJ8W=v|vvYsv=RTEK5e|mK}wBRa3s6AC3rb+}Ja&QLu!} zj~dOKrVM*iRwjk9sj7wgb?F+@tv<<^;oh1}y%iSc509hlqh=h?|KS=;k{PZ*WlVP7 zmQHgZ!PWtaiCc*n0MPkyD{2Hz?~&f4+e$?vE>T~2Bnae=}Up2 z6t*Ln;c`gy5(hL$$W&>+u}4X?7kjzpsYbITma6d|s@1lr1!b^T7*UjIwIiq(^C*=5 zU_aL5O(q%HD@~(6-_{`-m+ZNsCwgM)}W6)5*=&CN%Y-|^d@3uFT{TIuO zobE5FOs1!Jf8baL+A0k#Ew|NB9*Abf>J3~GM{q$hvUgY62c13!`TOsOl}CHb_@*AnjHbesb{${fwE z3$zlgAP^?YbvX?#9rqd7^1A}oc1u3Dm)RUbmy#&DqpdX3`A9t%b)EMU%^#)o45tnBET})dCaOd)Bp_rsF7hC0CE5#HN#yODt98YZW598)30l}Evo&1 zg?h`=a7`Pl8)dwk}CX_43ZxvyK>q28t8?(6g-vQ`6pN5^^i z>ktAJM{lZbEL2<1&LQEQQDYY<;I4j*xIw1Fs===DA$|Mrdanl*u(>_MbcsXz{l(mo$4~jrw+zQ*bm`a)?ooI=f(CA z7j+y%XceZ%gPMn?&sO6TIx$HtfTF9ZPTz*A7@sOLMedb(-(MxWI2SXqyz8e{kH2;^ zPql7aw$!Yy0`Udb@PG2|A`yo(v%1c?Yy;1)p|Ue>?; zj!J_{aU_Orq4AU87n_|W6?|^c>B#&tX9Apiz7h-NK8rx#WL-HBU6*V;%1b>p&pko96Q0Lm zUe;q?+Eb_MiJ*FxuCzAoNwR?~#MoTK&@#lUIDmdFV%Ri)SQ-A1zE1Hi<{S$p=x zlK$>9X7TjTVyzW@q;r{iF=OUBGHwWG^m)A4*%+E-Gc3WVD%%g8tm}5_voV?-QSXSAXJt<4bY?l|4 zT$CqYR3u+yB|+Gc{M>{5o3zPqsC;()e2yf;FShwo2V~N|tZUqDmUa` z9F3*43;zE58q^Ck7tplyL!>=(PR~ueO-v$!_O%G}R258F`62tdamLyMsHfL>;-x7< z$ivLINm>UKT<4|$%tAvEG^3k9b+CyJtl5uWWTnDHW* zDW(~kzEDB|sbW$oX~z6#p29ehoNxv89G4yDzK=5@`Z zn2UbU%1g)gFq$MH8;OA_M7)Qkz}?%z85xO9RNf2b5-CNNaN6kVL;=}UQN@SVaOMiG z<{`0^-$(X^uMT0&`n+Gv!`I9Mj*H@@EW9B_xP&1f2=Y-PhDDKK5yJ%~yzmh&%R+&4 zARx4doZe5E&)iv|D11-r6K-H|AuK?*r=36yc1;L25IVYnTD%KH#n+PwRV+yiK#By3 z5O*O7(MSebphsJ%C3GP!9SIkMknCxsu&G7cEFvj`ll(1(-D%Ryp#9?p&1H-&NarmU z%q&ZfdbCzZN3bGCEQF`1JyxiU*R!JsemdSA#o&s?B3q`^Sb!y<<7h1*KE+a8G>N2v z3F@U1nwG_eG-??oBE>Y)p~oTTC8@T@MZU-9CRE|LQryB>Y*Kh;;(^5raM9r_*%J7U z)LS?JOc8QgsV3TTmA>KcG?K(1q&om|wh%-__m@=px>2?e@)-!pfLH`{A~p6)#NhOY zP+6UdRdQ}AE0}t~+T1$)z}okaBe*CNSXS0gD`r8LowQNmh#xc4Q^`^K?-Z3}6tVp{}H;{Iz zHHkWYu9Sp)F**&Fh7U-^C-PNFB=4k5(!QL{-P&L4Nc64jb9CURr7nauA%rC%1a$gB z*T7m*2`G0O#H(^7KB0R5vfglOQND5&{0b!Ua|C*u*-9D-gENj=Q7MM-*z#f2U%&FtMjFmW5g;^DDd&SL<)T~Gm?!j;FZ5Fg=iLwbMoJa)M(2&c z7$l1;R>08Pv<$O^wx!{xr4oNKD}i9`i%5b%07!&UEEiRZ+Sq5_$Hw+hM2k|D;H$P4 z^&XHuF7r|vSez(~wN+ucheJ7+j+L-H+-<>Zzl<_=9m z*5J}hanS+h{O@oAX*F?vBQRZ48i5f&&oTjLDu2Z^t^0WxBtwCx(aTf`)BtyXGPX}I z{uoE$Db)D6OGr>V;ek+)A{yXrMCk)UGjdTg=Ap@onWHE41A^ZJDfF?YEsWK|kz-{U zH|7cB>Pf?enV$XGgstNe=nRR>@%Ja zp>ZJa%M~V@eW!puv|<%hpS_J9Gbx8ZEUP%-<+ZpygJG!!V6B3tDGhUp8ZahO?BPd3 z)#YgFh#oHN2%pBx1!g0Lic4i_&y@fZK;eH*?lDcX%YGx!Kv@NRThPD4dp8)RVS6Wm!nU8tzDR-aBK}to+BE|0&SKAUFXet ze-=F}Cd1<~!y$|Dxg*o!AybGpHk^~B++PuNCkZ~b4{OMlUJI{hPU_c|`l+luWvmewi4uypyn=y3ZeoI8sRbl+1a6)9LskTt`ZYpM zF%=jYOCT0BQp{%c)!c_!E#qfnFaRnLhNt=hpiV^HMi_|LMPr?cjIh$gPwY)Agx7d< zuySXyw~Pu6qFi*Qx9Wj0TK4i4PR(Jhm9AoQ_5)_$syEZ(u&qSmPKZ`il?#qD6$#gaNhSSpIBHv-r`-mQb!eT1zeZ;b34ULwFIul3!vX2v)(^d~8%&-VU_Atqx}s3KLbEiy^Kei@ zgc>ZQI80>&O!L^xj17KiJUL}`o0}(E#5WX)Z(3S$ILC`wJ)T&(iCItHgJv5rd6{!| z8f99q`c6K$C1dxHN9}d|NcvAIHx4dE3PwP=(>odLx5GPB&B!}t`-xS}rio3n9_ z2l9?@US&0RqaFH@2^wGxfI}$vHzRkI5~!L_r@kLd)s7KFZj#pT=H5iHM*YzI&&x;p&PpWBD$h8I-lD%q&N7yNpPjN9DQOsG0*s`ce>!#w%*2} zW|4Z?#rvseRjRMLs~Z5TZ$#0?`jO50jMe(BZ{uC^(wo? zpq}R3K@OUvu}y7awr|q(=t|V zn!6o!#5KBY51ZQ!D6Wb`i~}jaYXr`dHCPdRsMlC!p(kt!nz2Jf#7BIlB5W&1{<#kF z=XOVZ5G3<}c6CFDd_`28|6S)O9O9-fT&!+ATEG0M4)jD+yMkVO*k*gQY`aggXGj3P zZ|OX;`#mf6JW~U`r{6izGnUZ{I>RNs5iI?YHGQaU8q}ZM)DP%L4|7gueMUe&V-2_0 z-?pd=me?B{*+<0LKYZE??!p}b+sBvNm%5$F{WAwU%+ohT;QeIjJ>UD*m0c(7Pd-W5 z{Ugsj&HodGo|Wn!+0K)@4Cff;54_OF7wKn}iF^LvFJKtxLd3D588`waxWDPwJL;cW zt@_sL-*l#9{ibgOK$wy?kRZWBK@0$}CGDUA1E>aOaj1|XLIVO~4J6|JP@ps~2_Q<7 z=n$hu1FQxfak!FYO9VGYv~>6~rc9eRZ=#f@awVx<(zpPqC2fgApB@uTTzIf!L4q4` z;#6VdfX%5@qh?)MQX15U5e*!b#t4(7lnz6Vr05i^R<~}iTBZ8-ZHy2bE<}j%fNx*F ze*p&;JeY7{!-og!RlIm{1;>vaUywXGL*>dFIArb+BE$$1B}$w~p+W@<7A;^zvV@p* zYuB$~$Chna?}ZH^V$jvSvMJk!X>9`MIPhb~k1KVmOs-T~q6G#9gvv$m4A0%yvF{cR zfR?l{x+*?=Ce4f^OyCnXN*OeX zOQbZ-RVZmbMOD;NWf~PunN?-gRWduA*eF_U{RvklpPh@zU%?WV*peYcR#|2>mdfas zpv_KNAK%Sd>#e!&`hj?tocAaJWAsRY0A?9z3r+#pB&kyd8hYiA9@Qd&0Z^fHQ&5?6 zu5E4LN ze5LNc4}W|nuSPAe4KOjBIw2XH{-SocRV6M6v1^mguwy{pRaa1y-X z74LY-gOWp*M~3F*N-TDh-av{{66;}4d)eWi4Zybo@sZDb=u@9W*as=s@kE8WqM!W+ zfIq@T?T>*RBmnO+tqpFHlb!4u*c6t!T)}EtWD*NOjst+{WU5OEd0#;mQAC~$Y=#Rd zh!{wO!+C8fA**Z%?+7vm$VseEl!H+E*pf?Ad5$F&xIqta@Bt=?k|jrZ6)MIN+L7@t=VeZ^2K!7~5?YyeFZnCf@2YafQ#A`LLe>L*SKRf(py5)|ZM2R6u@jgsY* zZ4#&y>XV%?Af!rECLo|r`H=qpcD2ub{u7fu5}+r&X21g?umTFa00YJKKypd&ToqIo z1~Hn_t${LO)P(1&PT5L@vJxq-WJ@e9W+qzBXdt-MrQsITOCB1ao6-=b5Pe3n3n9}f z$}AK!SK>@)O4CLzCFM1=ka42%Cgwz^I@$R~*u9cUq-4uH-CB@) zIxC+Jk*GhJ)KG1LrJ&S7s7_aj6umA~ml5SBUf&czl`fXCjb#l>n66}}LSuVsm0`NpIdYTDD{nS*v1mbuaB7jdE;|yK+ zLBtRuIU=fdB>a2Tq0+Gg0W^@}&D6@Y@Q^YQJ($iIGQnKTYIZD{$P)MJ>W~u5fKUMa1mwhk z1d};L6w}#mNUZbO&?W`Dr8TN=f7+`77kEdR#F}H@rP0Q4)T1DEAOy=bL3CMgT_AQb zksxa-$x?PJ)-70OH``fM8iq3FZT4O zI~ijokDAn_Hub4dooZFnWmZ5zm~dAeYgzxa)1a=Fh!w-pjw;Z^TA1 z8r$0j60WyJVqSwQq$nn7uvv^!cki1o$6oip0UmIHE8E=Y9^$|ePTO|#o8b+oO}9Uo zaEVWx;uUAoQJg1ji*LM83wL;H;2i;7mzdrs9x1R_eA17*+us~_`O9G*aEvoI-7&Yh zTRgu0a-BE4cVbu-Culm zxeuQ3KyUloHwN~?Tb%BIcl=@nzj(<{p7NCkcjEzncX{W%|0TploWljGK@BxDa0U2-tDX;-3224!#tuY(0wP6H!@ z1H;b)1CabeumD|yE4B2oG`LOWZ z5D$Y;5BqQs3Gw|{PyXOg2jvh8wU7Y25D@1t4GVD+DN*kJ5E4mH5G!#LIsS3tE|KNn z4eu6+-sZ3oxo`wA(MUA06Irnp)$J2g5fLTP6=|^+6Al)&EfKA-10U!Ex6lrOFcyns z6>YH?jWO16Q5dI>7>}_Tol(h>vDkER6tA!sdk_SH@e!3#NSN^%z403pCK|WV^}x^t z%<&x2F&))$9oexR-SHjaF&^b{9_g_j?eQM*F(37DANjE#{qY|GG9U$VAPKS{4U!$L z<`Cm=8b68@8LNEovgi5ez+G zC0Vj1UGgPiGA3nmCTX%JZSp2@GADI%Cwa0beex%PGAM;|D2cKt{*Ce|kuoWjaw%id zBy$h_7!ssP5h6`PB2khXD^e?%ax1yAE4}h7!7?nxaxBTREY0#Pf6^&G>?%`HCDHON z;W94eaxUqzF75Iz@v@Il6pv-f=OG<#A0HHWV?Pw_huvpS>VJn=I> z^>aUSGd<}u5bYBu_;WxBv_K8?F8x#Y{E|I6&^?=THRUrKU-LgXNH($KKru8!HFQIj zGC?U60>hI-MRY_-v_x0ZL&N^zjySMH{q5;qy6NlSdJwMu#*?rF2Rqvq+s(`Jj|awRB6lG%l?)^Hj9| zk`y&vG(KU}Dz9`2z3oD~v`yXgO~>*}({%K*6i)5*PVtl{<+S_4bOXoqJ)JW`3sW2C z6kB}MCh{~<6?IWG zfKgF3RejP?_peWL@J}DqOq=vk10zyba#AaGRCRS%d9_!4^-@dqR8@6YiIpZGfGlm0j^QRo(RlwUy+4k4%?TP@|JjA2nW^wO$c6VL$a=^R;0U zbzk504G&c&Z1P|g_F^#>SRHm_?-XLEuwPjeU<36`WwcOj)nYR?Wf67?IJRZo)MFzS z6fN{RY*J-y_F`Q&XSWn)C6+XmvmyT#Q2t+ZR%6yyZ}w>GRcDn}N_jSBv(0FcHfqgv zX{k0yn|9xhR7?Rg{5BvpJ75HcmNX(V1_;(ig|$#z1`c5Zc}Ztu2nLsf4fcSHF$ZaocZ9rtoQ zHF7ogKqvQUL3S6pR&c}C4i7hOEf;f9H&ZuvbqBO_DHp^}H+5x~brlr=W}$w#)OD@y za{*TlMVD|%w`}J$c4ZfJX*W@A7k77dFBS529gld6_i~Ri6cm90Tv8Myff>qx3xeQ! zvv+&D7bfRK3$Ak%D8a~(j9SmL{uJtI&@f>L!axXK5(F{=g@coTnE}Z-p%W&78N6VOU3eF^pa*)O6DUEmzQBli zQWP=)kQ>t!e8G)-z!Q}I;3d%}3p^kIVnGa&pa)#x8SI#i4}v8hEtJdnjMI3HU6PIk zg(W{L3_95roI!w_xCWb-`uz4)Dfo9WICv3vc%^tHs2EhO7>l)-ixJj~!B~u2@|53L zl|7)1-#CuvxQ>YvkM)?3{n(MolYIxdkPlgY6nQ5ZnVT0Ak|mjvEqN9&S(7>0lR+6K zPhpf-vXouYnNxY3ci5U&@|9zGmVpw2p*W>FxKo{gC4c~#lU67-`5C}q7MQu8a{+}% z0T&FIj=x}jeIk@S02PFZqj3`iT)_;IfCO3+064*%#glz;IEg{w7c$x>Qz4=qa};uc zmSxfu#6XTs!5RLHfF)PK5af7(VPOkavJ`UR3@%|8?AWF$+M-|5qkjQ~SAm*WQWb={ zmUn|MK`ocJ6=?sJms>M~VPJ!cHkch^m_PNPS0bSmdR~XJp&y#2o!XV5dY@z312#IU zKYBPtnxsvdB~eT!#_>B%!2Pfu>O*t65SNLKpyU0fp)K zk6Y5Fd*HW+(-eTAr47`uT@ss)K&ENBF;^k6VG;ydp$o`Zwq;C_s>EydAuwwVSjuRNTc)+XFt_CBfXy0r|== z+sj|wx8pkiWP!qOQlLN0tK-mj^BZ{g`soWqqHuyvA9Q)>}L`#hlDxa?jEH(IdT?-#pIeyw1l0&-FZe&%DofLDab;&<91 zea>&;)^i=l=|abMe3SgU3W$KiZi2}(RRJ0R0YcRY5&*WPJ<6+{rb*niA>zdTPXQP_ zT}?)N#Lwr|fwQ6?J0>5e3kZ1@B0iI0!3;8ikR>6W$@mZ^A=O8L7GQajgW(q<`skB> z>EY7PSrWnLDc{$LXP7>L)!FB>9ssIu`n#5!RmX ziLw-cfe1c9vkKlNRiW)yQj^ce14MxrLb;;N-s0`}<~5wVsXXY}Tj;kO!sUCbZ&^L< zTWi5Obc4N@huw6I9oaAS3bmRQ8*Q--s-WwlV6ML=Xd#=UoORdCCR=SDxdz<(H<7mp6%Tp z?&ZD*=)UQpU;5o#?+ID(_xbMwAMb;b@C_gFFMYuoKa&9>7MLI&MDfz%Az{K%xQ-}P z2;de%g{ce)d5B6{5sCvNPW1Q?04*;J9-2IP(tyg9EL*mW5n{uI2oWCGyoocX&Ye7a z`uqtrsL-KAiyA$OG^tRU7dC{5;WBDelqaiLy^7W90;w($M9F&92?8PphJXd@Bmt1K zY}>kh3->D3xpWn>N>nmosa_L30GOpwA*yE5q!}Xe@YI-%AnQ7Q3^}r7lcjbUsVj1e z!T_U+zOt8u1YDT9U_}H? zHrC4*B4E*q8B0{%N^1(8@(fAhdB9bI2EZf}O-eloVT3x-L}7&#R)ArK7+%03hZ%hM z;RYghKw<|Yj6ebjC#J#O*H%6n;1ye9k!99f zX{{AklTJQa#es9(m6r#5_4QX^2@O`*VTmo~*MCxuNv3X=VK&=lojE6(bJC%v&}ss{ z7F%X&-d1LwyY=>4aKjaMTyhC5_gQ$LwQ1UQrb#28{&k3Dw_SJNg*PU7=Aow^dm_1~ zUtx@%gbIBp-DhQf31!J2n2muDplcowXrOpQM#bPvHRXtFuDb5ZYp)YV(9~12x&)+K zPILu?5DB=%Bv=b1P=x}`wzVXb)?QTvS4F&)=R;J+>B<>h^x#P@kSLl8Gnrs2Mroz+ z!dsZ^bxSY3l_AQCrxv|RhO4IG^_OrV)iO~o6sp4D>TY1jBG+~FI-d!oWk~rsam+> zmU}K@@5X!IyJBe4!z7ICf@f~Sz7&(KzFz(QpoLmTprM8xdI(|$B5qKki72YbqKh!f zNF&y6zis1=!cM(XvD6}~EVFDq8|}14s&(zP*-EvoTM~a8w7BG&i>|utx(n~AKub*d znD=_C??n##>l*_i4_q+JekE)Y!zFDFa^>PtY?8$#VXQI7#^LfYb0PZ)ddUx+45`YZ zkJ)lwFS{ypea6|0vnM+9Jd4jEO}?7qL|=EbF+CAd0$x6B7~JBsS0FK$^Nhv zmBJaWUWii-C~_eUF(ly>h9JmZQiJ{-SI}n^w7}BjREI*zoJ=92K#wc-bsA4)E+U+Y zQ!EVBIfYc_GTyqF3^SKPGsWv6Ab7H+&-BZc;ZdJZSK45DW>RN`rc7d>oZA2wHQHoY{f)=UZMKPL@B0u@b^A*wn>N^Yj z+~>gi&5tGaJ4>|&n3eviv@B!)k<2n|h=9UO*dhbH+JH)SYBYR-jqaWWzjm57~I zH1Ua1oZ>f$c*TEJNnR-H3kbUS#W2e8KxBM~8PTZ5IJKgUI^+c$Wj881+A*1Vgr@a& z=SM&aQks$(4}4{+6mVvlG;J48*Ff{*0p!c`5^{D#NSNtRdVhb7Ll{9^hiAzciuu=oE<)vSV=>chKQ=B$yrwO2Gw0;U)tqip+ zMLnuj2A9;h6!Wc4g{oA2LDe6I7OvzKiDoGRL$?Q9yCA&Mi z0_d)!-3(v-YCFlfcd%K!g<%JYSj93no#J_HWaG6L$}+^V*m(tJTXEiK*2S}+^^|Dm znpfO-v})kXt%*;J;za_BN25IHS%R>Vl`iX-dxMr$6ky{j2o-f|HRY!_&L1w%=p z3m!(4v!`k@mBDIdETg1&rS0BnQ>-i1UWm1jj3kK0Mm7?Kz>+0c5eizg0#33G)U?jp zis#1Ly2J&>Dh2Y4AD9)s-8jcP&Pug(>SO0B7pFsxZjs$`Ar+I0qiytX+uMnm86izeVno(@;~aO}Zt3RYtUQ5!IcDJd zj^N7ZBD=Ub^>vTGBCTNO^4QBJOUc=iEhHzoTT3QlD#B2oQ#fOYaNg{@u__WVq;+LU zluu`$Ly<8^Cp^Fzhz@%Zo2DO~F6>;*&_hCtCB(vKA|RBNc#)cl7%$vWe^U*M2y{Td zx6%yG4IAs@OoHI`AyqeCWoYBshM&;qai26*NJv%@W4u8c@3@3SO%v8upwwYQb%|Du zqE?^a)hdYf+C1s_(EH@$Qwup(M(#hX_!0pqM~ljRK)B@GN&eGD z2?%~3^sfgkoetl+>XN?neQ6yfZ2yeZ3&lLE<0tF8aJunzh~E$j|5RZgyK>C_uC#Yh zAW-Vc2TfFa-^?teZ>8#2hoR*je4K#af1HJQV=`ilCwd2n zfRA@;=mT=SWh^rmV_!i85NH4dAbY>X5^G^x#@2EJM03)0d&kC7z!o@i!BkZO0+fI= zoG=SeS7B$s1wFumXOMXObbUdTC5*r{o#02~XBy9N9_TR%@xmEqurBGbeT3x!rtk|l zLoSUF3(b)VK=@Tdc!Ph39z1vqV(?+AFa{81C6AB<=rIfR_E=lc14*D){;^<$n39Bs z00}YJ1G8`j@v=p#a0Y0Y9+CimxbZGdC<$QV0dr;&qTmZ*kUYL%b(=zM(4&Gf*n(Yl zQS)|$p5P0$BQ=X>H3?{Iq9%EicWSVuYOLmJuqJDu$B76?dc$IRR*@Dh0R$3AfffiB z7#L$U^?JH=6&~1fAV_l}=s?z0f>CmUaq@^P=z>KAgOEsr0eFKr2pBrp13btKJ~)Lz z*fd1QhDRs~Nk}P7=!BjCg;Gd`Lil0dhK18O30v5OU+5~OAckaUhR=Y8YFLEa_=a&v zhIME~6M=_%C<%Nha1+A|fGCKB_z;GOh~%P(1i^@c#~vxTf{_URk#Saum&jd{QGlD6 ziXG{ZJ+X?j(uz1WEV74Vu{3kN=!zX!Br%5-JNAnz**^<3jKrv9;Q<1k01VPl23$aK z*l|J6U64Av7o+e9%rKQn;2i|0i6!=t zL;-nRLu!yzd7{_>m`4Jd$9bM-Tc;U%Avq)?`HHh*k~jY6Q@5v!wC9pn0h2BFfzd); zHE9*ShaH*OlRtS(LMfQec$6rVluKC#P5G2jIhA#(8d#~7UBH#lSBPI3mSf4CW_g9X zpqAR%mRD9K01%gR>7Ce-3U`^8;K`TF;g^6poq*PyhKZPch#QLuNRHWLClQ$$M42&T zany;KJNcZPNi&}rnxolibn|Jp$)Tx;n?5pZZ7XqdNMg@9Co~ z(^S_dq>w?Rb7~Su+IUwAs2i812@;}Dpa2BG02HVa7T8=gDP7hTWVu&UHx(^8#$3+z zn<1D#NkUZ0X_I^ks-P+oQ4^|Ep$hdTF+h5KnI#z!R;mb6ntvLoIl-i>=~_>kYEhbb zrPz6=Xr;57TZ76Kg?gxo>Jp5K0FK(CkP0}*Vq?iwsbtD>n2KC!3VWQIoXYvC+uEk1 z%B`k~s`a9(#>c9W;i{$Tr@*SNSh|2M=737_1Xb_^7?=Pk_XMryYd80(B-v{wmwT{u zW2twhx`=_wI-}o;ut%8+&QPb^DiY2k{;qeLu%Mc*>-sC6XsaF4notUxvPq@2X|cE^ ztUvOu#uBgdT1)nduLq>B%gV1R*Fd%eOtK`Ynz|MR>#55*u{(Qo3)`^U`mm}qt~~pu z6&tcg8&V@X6(t)NEY+_$3$;Opm#Pw5wL5CGNL#Cp z1d1WznjOolv^i@?D^f~JEKCa*PJ5zKi??_?wtHJSSDUrzv9)pxxu-f+X$e`v!iRchikgO`);W_yUpt> zwOcoI%e&J{y(Xx<*NeT`tGy`^tBt$5UgM-{`?|Y2rM+6E&Z|h!s}i?cz3rQ`+Y7(( zE5Ccoyy$DcB-O4aCB5#;zfwED{|mqYOtIa|xZnFo;p@7&%C_a}wy1c&;iJB!w7>mJ z!P+Xo7mUFfymj^az#R-B5zM|7EW+BQ!6j_MCyYWI46Fv+TDK~`3Jkj+`?enZHXuB~ zBaFkmhr&C|!#%8co|bVmEW`>JEDTtBH=M&sJV8Fp#7*qPunNQmSiq3iq%NGmmlwn4 z3$jCeH8!kkN({z2{KWoaOvW0l!d#5TqnE$AMi*i1#&A)_aV*FGd&Ysv!josksKx$)$|Or%V;8Ov$Zm%eOqIuiT-WoX2Cc$D`QC zrZ~zD49hnn%P2w1lZ?yD%*={Qz{L#BkUYpoTo+T2%x^pe&8*Ga{B63-p}efIxcbYw z3d#&D%77frM9gCPTg}((#@Wox@hs2NbaF7y8W4{rt}YZP6E47(XD< zJ(o@8RZ=}jXidk@ z{ME4>*15^nWL!s*fSr)=)TIlcb1lDC-H}+mu^X_}!A#Q({nn@%*C5K*Ph8h`o!1dt z5>vg{+w0edy{@GTOn7y}Yf8E{(RmEFyzl&I?V- zy}cB_J*>)Y!o$6E#+^dRt=+%N+}6Fz*iEwGoxxxxiK{@Mz!Mv}joy4a-lCV%8tllWW-UEr;@4eRlE#Gdv-}Z~y2#&qL@s=i$M4Un%Lf{F<;03V| z;jQqXt?-s)8I}PC-wsZ+^L?An&AQMn*sE>Mt-atn(%*AS;`0mP89CweW)T;j;TzuJ zA0Cw;<(bRmeD~xf5#?J#<+Nbs+{YKIxU7e?x@nL4M$=zO9~K>L*U|2i|8lO>Wkhc zzyWw$kO~a7>?NTJP_{5;wb#M^s=O|!D1N{y{>ve-YAJH&=PU!H-s{r*>x4}0nmg>^ zr07eiC3-ar$=>Xy0aehh5b^|H(|+y)ywb8d?iS1D`JS+Ez8SJ`8x`JJIr{z=MoM1&#eMq8w8Kz{&K3GGYbmO z@D8645dT9GAKAH1@@;DE{a$M$fAghkUR04p@nZ0CMjEA%F(QEkqi_p6#0p@rUOs^9 zo8I#`nDey8!maDc9Dg?7{>LD%^QK`}6N9^uJ>YMSt|Pkn~F*^G@GZP_Iw; zKK3|P2>kRCSkFb63WPtxWn=<%LX84Ft@8Y)joKK^7kNLrR>d~wE3H~b*VL(~f@d?Z@ zM1db@Ul0qAo(QghC#KL0=Q#I59{Wef`gxD>c&zP{zxAwb`QkqAdVl;iI{USMmAD^g zV&vhyKX1Pu{KK#KH81tm4_C?G`XfdC=3kvP6PU@6@ODIrtB@9FtE^^2TlYnpJ z&;C>o5C#MeBv_DOj1U_xM2PUf;X{ZKB~GMR(c(pn87VU4*pXuekRdBvAXzfQ$qXA* zZs5?NLx>O~NRTLT;sgp6Dps&)0YgS4OB#g^C0f+zQKT3dUf2*KhC!%MJxrxq)#_EO zS+#EE+STh;}OIq6`$QwV7JURDu?Af(%*BaY%=!Feg zk0$LMuJoD7k%sCBU6V4!sEYe6MFHrKmCgp>& zzA5pu5>QCvi_@1Os%KNI+FIHevD^*Qai#7IGWRuOzRndS9_E~7#9QI3PtF`u8Y?Eac)@a9@ zl_4WXvei9Yot!U9`>4$C%5K{gYT6#Nm3Llx>qT>06W!H!U-ICE(O!T97I@$S@pYD8 z(!NcvR`zaHDN$X~ZPZtG5w_U8NxdYNV2=Jf_W0vY=lt|yl1tXe-w{Dpd1aPYHrQmO z6b`pghv74KQC`)36lQ)=7O-WYgBDuemw7h&=oT}6k=mh~cKYd4i$?n7Z)YC&Bt&yP zm(gC=ow{A0y@Psevdg|#E|Eso#Eg44*u`0i66Y;=%t;0rlyg}&VuV{81VWhybb20csoO(q`I`Uc)3uBL)?)Gdw4{u{cv(b zWMUK31jDo)>~u3cQVqR#L-65@gT_N5iaUHM8_#!{BEq-8B_c}ra8QkT2r zWiNgCOJD|5n5gt5%p7S&I@)n`ctts;-T6*<##5g2q-Q3uS0S9r{p+MpU8`MW;Rs`pJV*RHGZ^Xh%KzQILjIqz$zwG`qg?O^{SwRCRojSR?%0CRNNC9OqcaJLYkZef(n}2U*BCo`Mq=z+xmP8J;dKnTMGQPy?@b#0f6(izR|$fy}tZ zL*{aqz5Hb`-?+#}R&trmY)&RyxxD&)=K`j%|0v(vv<2hY$VM825?BkLGlzS+hg#2kwwRwk z2jUQjc+iEu^pM!>&P{t-*0T;Ws6~D2GLyR1ea`fp7ENnl2V2azCN`3F-81uE5WRp- zwf>+9qwW3g{o)&J$)=%XWvkwGuiD+M-gmzpE@yy8T)qO&ceEP* zaEyCd;v4@i#i6CJg`L-m8RS3~M>kb_@uPB7q*0NGJ8M-H ziwFYL_iSn234O9euaD7tf^=xN+}rHLdfn-{^{z|$>tQ$Q*voGA@1T9^_^UdM{_2kP zbh1Jki)Z}ey^sLBuhtZeZ%c6Sxp$cg;1juc#^S%g_ks+-?^+#&B$`o%On_b>s8Ga_ zMPd533}GOo*hS+Rp9O=ILJUG6i0E-&5K(Y`44F^>K{O8xX)wYF2N;L|VqyE=yHo11 z0(n0NJao|&y=!nE{L&8}^TgYp@sE$ZYA4V5%KzZpTe@66VC%x%WuX+Qp z-u19=gzN=Ed-0Qo=o<*#@{QJ4h*>^)U5gDt=TQ0N6B1b|rxgCxiSS8#?W6o>$zg)Z1a^?Rr3qdJ1CqLEv> z>}$L2Te-MXy22X~4)j0}6u}Yfv=Y?96kI_ZXu%gmtr(oa8oa?Av?m@EDIWwvAtXYz zGD0N0kR>!eCxk*Nq(Upi!Yw?(F8spY3&SxKh%!9G15Cp;Y{NHZ^OND390tx<{r%(*3RS1K>`zrv* zg)ERj0H}p_EQkU$fKf=t0eFShgNl31MuH#(UGPQ&AO*R=gk2cGQUHd$3&>u`J5@l( zfl!4*_`7Yiz}PvS>f@g7!M^`-yQ)IO?t4b>h{kEGMow!dY|KT0m`Kp-#%~PAag?WW z1gUdON55Lfcr<`_yh#GwJ$kf9d{n)CM9KgA$NwA1f+UE8Oh{5#NP%d`bc9HWh%@g}hVAWvs{!Q#;vWyPM!h z?wdOA`!Q+MO0Mk6bvj9H3`-asOM@^=zKo}s^eDCz%D#HbxSUIYKuj^TOT5gzy)+2F zBs0JiOj{sK!$eHQqy@%wOt4HydHTbue3Q-8F(P<@ClG>{Gyv!nf)|hiALG5P>@p!h zfGF5GlWa@80|5K`#DNF^Pq@Jd1T2;;2-+(~%?k!;FoXUZh)gtv+cd`XOg_h+Fi!&r&@$ix9YiR^lud&`Pvkq$;tNIeRL|u*PVziG0@cq4MNmB4&-JXQaB#1mj0)rS#f)LHV1iMUh{=VO%y%NnQs$`ps6uG_8$PL0wkJL<% zjEx|B&gh)Z>b%bEG=S~ovhMs&oeNK)9MAGh&`9W+cRgv)*;O4~%y z0##AhY|$6}%@}RV##n$FjfETCg&d_wL0ZlXyh?WhG9sAHsCZHxQ-B6QfFN^%1lZ0f z1y8T6Qd`J`M_55uaLJUU1x8pwPiTf>?5i$qzF5dcI1~dJ)B(15Of$t#iKGQNWW!+i z1vVu!R%q5w_=PSQ!+Q*a6$Aw^pi_GOqP<1P)PUTDX4Qez%RjaB!Cb|GUA@DtlT})^ z)p0G?b5&Pe^)fUf&>+aQV@pJJX1x5(Sh*Kuv>+QR9HNug=_>s z0S!zYl}s6;Ou4d56cEy+JGAD+u}~EdQq3__MO7eERaW&*R}D?^jMZ7ifm#*ETV2<7 zWzT*!zF-~0VJ+5UJx+p9)>~~>PhL#vw@ARXsc^9ZiQk%vL~zvKs(bh}zY&TrSPo zNKF9Do!rBO$}&Yxp$*-1q`jjx08r3DRWMZAOGpB6sI`DUz6^j_&|HGRJj~TyRN&mL zn_R@?T-?>&+05KK``y2Fr=`5f0FZ^8byT|?gG{~06+J*$pxL>F)PXPsXGq9*j7Y>3 z-BWmmYzzP`^aNfY1945Kzy*~aRklH_%tE}(L;P4ZBU~FZ+<`z`9aCJ!b=;C|S#^?8 zuoT|PyFg5%`Lm& z{k!2UyW-`$-c4T4{r=Woa9-#oOX)QTRG?miuwK_3fb11jy7gZ0tp)LI1@blDF+|@J zRA2VhRJ9RYq|x8bJX{cTO(*5C1xSD@P=Eo>F_nefR~^j(6xzmQf_~(M_C2d#oy}Ju zzgsBV*e%_lo#0w1Tf0S9)nmzb>;kuKsNj z*+b)c61_9%f+UQDMn>2jP6abS&e`jQOkK)@EzrPUL7dfJIK{7p3NQo@7<1 zVmjq9vlEs=mbe{gl6d1Q}6}UV*rU7fKc#-_*+dp9@hZu zy8ATE)zs<6<7s%pYUdCGBamAk)?WLRg+&-;16TzH6^K<3Sg4@e0{w(uNWLM^zm%MW zW-x>PE@%NujS6{=%uU^=TwbbVD!KaYSYQ6giB6}AzG#6!fQ;Vgj%MbMhUqOHh><3U zlJ;MezOj`ah?cH`mzGi+8|s3fX&P)ceh{9^EzFI*)jlxRz_W2EDuP zW4+eAzGj5Ko=X4_Y{E9|0SwwqW+#Y_Xdm*_Zv!&4e9|dSY3F2FY1~d#MOi0c0F{1R z8*9}AzcB?M@G;!V1z_0#u7V(N?bn`ZAfxSW7UbKO!C7Q(U-jJoV@jkJ;}6$l98Lb} zqlLpVz=TcU!kpDSxmW^GWhhf<1|#Td9G>o75b-Uv>ah04u@3TC!~qgVC{-XrQFhN< z$WRugg|fxTTHtQI21ABU$y?}gsPJj`z2(=^*rwuGkNxHR4Q9^>vj1l0{_Qa$An+@; zu?JUa1#jjmaPS03=?MQ$Rh{z+|IQ1~@En6}fspOle&*T+ac`tOA=knsUn`$p%C1Xs zXfEnx#mg3t(HEbE7@zS^sPWC4iyU959q)0j#ym$)aw5NOBhT(tAMu51ax#1JevI-y zHbyFc(JPONEWgDq$H^{7Y!iQIG1u?5QS+z>vUCLSTmOwglf#LJB9m}?jr+$b@z2whv$OF$%Kcf=Pkzc*2Y}GanFET9Ioq2|BQF^a)U61 z7{=j-4|9xVY|in~0Xww-lR#|0GA~3FkZg5{fg!y){k5@X_w3Bpa2!kKX|MJQ|KDtH zRc=S^$NhHHzT%+oF>((w4=-|u$9KVUcUXXTZT3=ne`kBAJ$y$@eb3J|9sqv_c!Uyo zhF51pe)vaC_pyIbvv;V7ABc&!&x$Ygw>8*|$G=~<&sy+!aSnMC9r@oXdH!TKnVElr zJF9lq?%yLw+&R~FKhJidU)k^E;vDOFJpW>EH2fWt>2f#s0)APv_hI7=tX~a)S7>6& z72Ww`VOhZIpT^53)ZJ3(g`>S=#57F;nBD*51--{70pNrLH3eo!WO8;}-i>5nvv;Q&>O{$>V{C>SA|MHavaK#qD8Mz z#gbi^7HQVHAP1zniBN3YgsZ-kZKz5SU4%iGfTWlOqySf63MT|W3volqJMD^$5n{uI z2oWBD4lQ~#>C&c8qfV`QHS5-{U&D?qdp2v&7dC{5fqA6C-cBSc1QMkR5#R_30O>8H zVR9!1k{kRDy^0V7QKTDOfS?NYf!&=Ou-=g82iNvFNu@DPkB{nJtS&hKYut zFF6`;3Y|EB!i$_zCZri>p3zpQp@)X%nWBp>T7jdFR&ar&l4ek81{+|?fuvn3M;VC0t_+C5Q!y-!Wyfrv#MqrZn^=Q5PAgtwvcedwTGN?%yIXeZwX9S z-F3)jw_SJKFJ}obwt`3Y|IFiKm`#`bjgOf_C;9twR%C zw9!W+O`5H_m5VL3CQV0>0tpzTfV0sS^sKT~C=hiO+Ce+rvjg!ogwtme1n9Prb$euF zlN=+>7+s*OvEBV)B#qu>IFiJE8+!tbG-YJs^8la-&d3m^REW?h0}{RfD<3X(c;ZE* zWIzCu{37?lcRK`tC&5T#Mk7YF_jufl`2Ni>T>!u>H{E-+Epe8rOT#*Fu*W@j-5L+@ ziQt6OeAq%1>7BgZY`SL)Wi+*tvCGVF{7UCzWWs<#k2jM$>I#XH%QMo5k$t&96PmR8 zu`$}dXOKQRDW#TTy1}NLdJ3wjq?(GVs;s(deF7Yytd@qWaXGD5CGi^9s8$fGh3#0$ z5>MBf6+!P{jcf)m8`{pMwuo@6FCmJLdt&E1(4p`@%Hvz>7DA=r6;2_R%iZD{X8`U+ zZgTjl9O80^IjC&zdY?<-L`GM-)1^)lt7{#QO4z&EHBW?@bDR=$*FxUO?sozU9t?{o zi|5f!dC6lQMZoA3=^gK7T(X|${00;TvE1+&C`u35|ey+#?_R2pa=7&1o$Q zNdu%19b*+lBW9bL1PQV=uB&!`kY)ZMg)XuLN-5#d zkE(QE`{3s&`CY(Lm&(+pIu(LXg=$o#I#sGx)v8yiGMK`A03gYAwn2iVkcae|A{*Gq zfjn|Mk!%juC`n06_U4q@+$Jbl(MfKCGn`lvWq(L%N^#mHmBU;oJKH&{Vj|FKPf!2> z81OgbBme;%EQoffHO*o<&jE*D?5YT}-6PgFjr_>f&&4xa7gAtXeNULhqhFsL6SKTTmJNmbehLo$B*-X%G zYSy!&HBk|`4bzNyHYYrx3QuTR0*)Y8yArja{9I~6praD1ZB2s+DJVme)3TsW)gWSB ztVU7cjH@sQ9&b>m>kzdD+v>CZ~Wx8(if|SGzs| zuUSigUWLk6g!px^2K8rI2>VpSDg?2KO&ev4`$@+_*0{=Du0}13+UG)deX5mGM8SjG z;bJ$t+C>j@yG#DAoh@k+&)C9Oy=&g{rqH?3EmUR|l~T^q&$IZuWoY@w%m4jyz4}ef zbYE26;A}U*0!}P?3%ncf+GxDxH86u4%pdjcH^LH@O@IAUUEoB3fdk$!hqLA24~OJ& zoip7K77XGOqZlL*o^Wg0`@YStG`{w$W&Uz$-vS4;IpY;pp-OxGEbIvoN3vK9%?zzuuZ7-Q8)!7+;w#G3X zEq-gN=>F6G88d?3^py|o=}&_?lZn1Gsn42eyKp+y9S$|CTkYx>jatzzjzFX5XJ+|= zR?U>AscB1X>b2e~kg6W`c3*AmV9&Tg`+ZS7;ny3ez&bu4A< zQb~*UzPxt!ui1J)olZO55xq9M+wJLWlRMsggmzZcZSM}cJKy^DGQ8cqZ5TV++h~Sq zxN+QOdApO|Sh+XDFS+lBLmb8ZMmWWjrtp(AJmYnaILAAF-ic3n%-nwTraIs$f|E)G z;?8l!*?Do3XguZv@i@(EZd{PJJm>EOc3a~q^Nia(=tAcz&Z8`HfZKYOkT&@(QH}zY z{u|uVI$tHv&%N581AXXP-}*$0KJ~BD=H(@s0@fKm1+Jq#?Wgqmju}02fpdWABXBy@ z*(`Oi?@{a|A$!^FeRj12KJX}HJKhUlo2r+~34HInw5MQQ!9zassC+WB<9&4a!S~in zKY4whzVd?`o`8BEiQ*YQZO2PK^{U?u;Y08G(u`gt3z)*=a@+CrKFR zvk*EY0JDHt?YgVOB8N{JM*u)BmT&;9h@bq`XFcUB4*d9)+3;zK+|k|V-5vJ+;S}>V zANO@1ojD%(2~7TFh53a}`zeI_v7ZPr*ZZYd{LNqe-QP(_;Qsl?^&w#BX(dT!WQhn50C-~VucI(APJ6C|54ok zy;1<4S=<$0Oda32ouI`jAQLXc3OYy&z93dmpqk9!UesU|^+yhxn3V9~5-J1`f|w8z zp%EhCNhl!~KA00`;T|5Ix#1y0cp=EdAeVSTa)rbgx=a}+VjAk8-Ka<|Xh8^u1RQ>t zH$fmsh{6#4VSkw5o4Fm*b(`i9U(XIpfo-r2C7H*<4GUE+41U8~yG}2>MP~+WL zqdl%iQ-ByZdLv1IV>n{QIJ)B#!s8#x zh~!9OMM=6Oxxpmb$z+IB2rDR0;~b9ooIxYZg!#pv7#Kkavi=1CK+YC)MU1eCk<UbVpKlERA%L1_RwDbp;2Pm zCt{uydX`EWA4?wPJNltPE+qvzW%58JoP;J-GG!24waB%VcSB2)FDW^9&PQgU5w{#M8+=^DF8!)=D;M_Bv!CO znUsPsw2Wjt2`B`^FEj-!JV{}80dSxKB20o3Y)CU`fh!~^DD*;DsX~JANhCz%DFJ|q zLGh{&s4(TMAC@mO5e@@?jKAUO= zA8T$NDZXaZwIqP1)@pBIlNN>4q2qn2ITx+Gq8o>6*6btHSA$$SIxjo}B`!wh1a1=8YKXP2-GVGpfSJ zz( zo{r+&t)!n;>!Aqf)@7@&WpLC>v3Adx>Ch1xGTOUh5R|hyh@3^ zYL3uuguc?u5&A2@3M|M-L%}X>!gl_}#=1u>JS@G6lf*(J#ab*tVl2&K?a+EGDS#{< zQtQfwS<7l2fSAmei0Qm^Ywd_d$c|8!zyt^>#zj=frLx5-0D}mrf=_M>DnxBVqyo)K z$tl>-Dr`v^Erd2s5#rJeMqsFXSjEN&#d>O!*S<%Lc+|yKNKQzP!-7oWCM|SQ-`biL z6ryBGs$q2AnC&GyZ0d@1W&`?mC1V>~HDfj}0>hI(> z#Q=yxCrE-LbdO40ED5zMLX-k8m_a6JQ8<;aMNkA2I7Iq34+|?qmqaEY=$HLLSvBZuUGW%`vEXi2rvOl;zJy80&nk1FtFk{a7jS0aY!%) z@4^vtAO>qN2gk<;XGsXx3<;Ys`No0{zQ+o;u-I0J8^QCpV>V{t*i$9M6OtkBO_&@ETt+EeB(M!tE-06=C@;h*G((JPQYvQ^`m*u@voE~baXK?$ zEhikFMj4&lYr995e(futF?!Lu185 zH!_&GfzO$oLk;Qhf1Kc(6wQ zY+G<`_I9mG8_Boo-!fiq<4CVri~+}{G*ho0Tf3Y~n`6?&^vUk>?Y4D`y)_BOHT2Lm z@Y?nN;s3_d>M7o_vBYP%VFm$PtfBNKuTvEQP*2YQKE6;J2{ucZ9l*L;Saf1o(ifM}ad$j3D@qY)FSJ_=q$(bmy&fOZa_IxU_;&DkrLj zLzakafro>*qTa`dljvxxb>N|RjN|Z(S053}$1F&LS_DAgc+N-2w~q_;Ks!h?oO4u4 z!&D~0)gp9=NM({Cw_U&lLZdJjKjH@nRh(uv>@_y)7m+n>pAxDd5^1d zA=`IS2s%#?x}hUF1e(I44?&~X#iN5?q^krDRXPt{PDXF~Mt8cNmjS3#)Tp<5xu1Hf zueuGjdSw1iEQfdMz4@-UbgvU-zU#Z4)jQSIIw(FGuDdu*x1+s_Mn3O*!Yh1L^}E5R zxSTJ1#7jJLHGChbcqryFYtOWwDfW-@mUWOtUx-cm3QeJ>UEN;)f&P>wPMoJ>yG$&^!L#YdzsF zoypA|%9+ZG!vGA(K*8619c;wqrTC&Jvzpn<{SQ~biVC=e(2M@ z!z+I4`#!x#ed_aB@Be=ByLs>j=;g0?<~JSZs~qlwzUcG*>KlLc8|3Q?KdcbH^>e?_ zVL#Etz5vdC^Viqyvq0`kzrk;R_p`speSh{F%KEqe{6F0LtG?j==PBlw9PK;5=STnU z1H=P?0|^#1co1Pig$o%rbodY=!Uz#AYzPsv$|;slBmDpasw0Rx7N z8IdfNb^I8zQKuF$dbNBRb7sw(Id}H_IVxD75h9m1eHwLYqLZP5cKsT5Y}vDE*XAr* ztZLm1)Ao+gmMz@4bL(!n%OUUHzJCJ`E_^ug;>NqFS0Db$y0UHU+qrl5{vAAK+@!6S zH-8>ILG0n#w|D;@e*Ev_(_8nQ7Wi7>7v|Eni&rncM(_(T!3Z-9F~u0GkHPZRlMliO zC7h7L3S*+L!3;IrP%?@rvk=6SR9PelkXT7%fe=+(k;SYq= z@wo)0bCp-K0?lq!&NAIJlTJSkbyP-AG8NTeoqblTR(qY6T8J!#)+;j2KtfcF0^p=u zmqbQH;UbbRaSZB!m-{R@zwLkT}__! zUy*mpcw?M8F6m>Neg2u(qNroHqMSp&8{=Fp{$UOU*JhZgAF{*;GXnPofe_3MNlSJ)HCxBaY{?U|5PnrWvu zihAm*ug+T8t-Jo(BeBOW`|Pv>zx+|R{oWi#z%hRbfLoXlsp+Q;K)gu+XbB?;96$-? z7e-C_r3)W&n1u`>IvN0nPslI=haV0w0F`FG@Bs%;d;z1$&z+A_^P%I8cW(b`z4P9@ z4ct5CJ~i& zfVf6QG>?mU49^uQw!*fwusAQYRrd78H<@KILtE72M!X0{F_wso9W)~a)5sAvx=|x= z#G@qVSjUX8;*N_HrFZyd}<*o@iE&mjJ@n(=JF88bLBvTxlaS2v!KKy zraKvW8ai+{ik^Cd<=(v!A>8;y+U~Oo0v* z2ML`est}q_c77D6U4bV@c?zhf04t}NB*RKa8p|vcb&^NKMfox^fL5I86qp=I6X|#^ zbZ#=JS&i01O)1eDRWFb^x+pX=TEmU@REr+fssU0l)Q*s}X-5?%O2f9)jW`vmQWXhR zdwJEh{?$cXMeAT6L(h87LJUOB2uTAV3&I(ov2@KK|1wgFUVw8K79@!&&OlUB^a6?* zAt7K%Yn7c=%l@l?tlJwm1E$wncBiPtJS1Gfl?JTaQ31c;bmd`kz4rYM~x}NSAjL@GWV!Xcu`pn1m6! zxQi~}09?dFZ}NQ61(`AzzcV>4wNgt_x;Zn3Wu+!`WvkY;*0#FW&F*%)``y`zH+keW z?|jwEUXL8`z41No@#t&c{C>D5`z0`erK`sQghCQ%D}y7FzyOU502IKu+7Qr}5yzDw z6AM6?C?xTWtK}FZq3FdKw$LpeH{)ta;2?;Z+!7J@s=r`e?O3BZ&AyEoH6_mDiBl|% z6}R}s{xP0$jm^e29P3zFJoYgofcz056WPdIOY)MNTxXO#8Owy#vYq+d=gr{RRZ-?o zMaBBeD!=xud3Ma6{oH6rZ#66sRrI76!stg|8q+%gG^GUHOp6*?z*nYpVGW#VQ=fV( zn;vyFEsbhdzxvM3#bT!k-LmBzTBEBb^-p2lYhUL?)w)JxtAAbWUkCe7wEpj>1MJ#d z3!5y&Hukh#jcjNOP}9FpHub`7y>aKI+<7~I}q>_4BW~fPx(<+-g2K8 z^W{57ZNh(EbbQPDhWlorfBh|1o8!FTAs70|cx`m6+d1e{hceNx-t~zi9osSI_spHn zae;e0K|0s^$hq!yx1SvBYe#F(-(L5?W&KKGU%HfExbb^+oZuffxZD*&ce@|nXLu)k zvfGY$$1hUx*3|nSnXYkwoBif!PmJ0ZPxTKy9`x;ueCPGu_|TuefTORE(kah(nm=9h zGT=Pv3vYVV-`;tur#;N8j(gvmQ1|Fz{W4u&_P?J!@M$0X?wex!-#Qm z>t8JR=NbM)iw_{!Cx7$HpT6O*U;Za$fBFm}|K~C&*R9mj{5nK`M`d(z)%N}J$Im?Y zWiNi_uOD;TuPfj${(w*V(l6<%@1q1zCJMz%z(h<&f&dH9f9B6VCXe_su1@^UF90v+ z{BQRF@NyV1CLHikB2XkIkOIZW0uj(WM9^jgz!NOYx7^PqhJ{l+1ytxvo#JQ(pQi<> zWBX=B+yJEJZe{r^kM@a^0kOXf~Q*!WFcyOeA@CQF92%As{pHP${sRm&} zU<{^UBv1>t@N&9PH-_;3#Oes|1u&9uPnHk_X%7ZPMhvHrCCZRs;{GcI(@+iBh7G;2 zz5Pyj2@}|0>BlH!E5kH06sy+#6ZbBVsP$jBW|%v%3uqE3I2f5%Z4!{PQe*& zDPxSF6%e6WKFf4aaZOZ_73+`RE)fo0W)7i_6Pd6H^AKcS(M!xF7H6>*e-RhIWEXcQ zX?#&5j8Pbgkx}Fk84W-gnGqPA5gHk(7p9RK)5IEAu~J%*i$);_c3}%#NdYpb3nZa+ zKH(Q0O8{U&7kkGSL`oybXCzo*eI&9Ax&{6`G9qb5R4Vcd{!*l|HmDSufd&m=6+$T> z2W22*q!Nj+>FgvEnPU?XqZ0}80mSiQ5K~fCsQnYqqV^D!aFvu&r#h%oNECtdm-^L9q?|OE!8#V7I2~sF8W-WNNwP^WOGE$)Gb0W&F{^Pg&r;>mvWgV(u|~)jzNoQ? ztE2$ZpFXLaI>HpBVWm#7IEe}s6d?z4fd=2w6vROOE@LxGYO)})aqqe>FCY{7ln@+U zureJ6H-m{3cC#yeQw*a>vB+_ulG7^3(mfZ8Ih}K^lq5Q*lRBZqI%)GwY?F#aaV|GT za>!{Evq>Yi36_*(07Rh^B*77o>^K=^K^yczjni9X;TS|Jo1Cg_^0O=>t*dVG4ULc+ zyR#0z69L1sVE{CW1k@JD$x8|pFty2*611rp)IlNiJ#Umkb@VkcR6}Q!L$T09S7bl= zbDsQDhgkG4U34K~DtI~~q?Qb>W}yr)VH0}CLP-+h*v^b@wUmb&yx1$9d?2o}av zgv#_x)AU0l21zLq5w!|Wv&o)(GbGyTws6Z+p@vWa3RU8hcov}(fQhfAR9k8@6IC!zHC0ztCSCP^V0BWb zMOW1&uHtbK12iL6VWFhdwruL4B(xQZ^;?_7skW39bm0gb2)GV277)`}TVzcaO;+EO zJ8czL4RKo2rCKv$3Jp|SZ;D{LRanQRTq86^2sT_->Ri*+71os&mY`kV)k)$tS`n^N zvnqqazz0Af2>NwK!-f_v5(he=&HlJG!F14rOyL=7=XNGRTve83XTfE^D1!(G0BXTE zQ(+9GQ(~VLM5(V$Gf*2z6ba?@R_XK;FE*$$c4IsCT3a-ILbi2Awq*O1x){N_P_{&1 z7Jg=SN4d6TEwpBr=4NwtXYsRVQ3zTqHqew*he(0Cn8#zEhH9*4#fIQl=Lf}9jKy5c z0ANhU7@-K_vz7q&Y6jOr@lq~PAy^M6H`7){C^p*Wb!c_6R*m*vy)a+X1#YE5ZlAVE zy+v{EHgE50Z@sKbrJWA6jzuUcNZQPav^1H*_LRO*8B|gb|W`;YcpuM zk6tfVGLiQG+_vs~_jhsk{%3X9WHz_hQlVL!*Fq$>KZh6N`XeW|ljHKlN51h6Nl$uz zje1+vdLaaRq1PeGx7T1ZeVtcQBWhl`cgl{i1Htz>#Mcv(mv^rZe&e@7)|Y*GLwUPS z6nbD5fJ=ZUgn*-~e#y>q|4x4mgMWe2eO)bq7Z`mT_&pxDfPLkEpHG**0AM}XJwUkK zB6wc5k%Do>g6DL6J1>J#t%Oe)h1o-eL)ai{IEOuWhdV@jTc~?4FMnb9L}z&MeE5e2 zIEZ<;`9`>jr`WWDHD>5xk@$islaKvaku?I4LpY2V8B!bB zTH5%23ptJtIad=IlKohc+4qq**+VFFCS%&8r4^rh zIS8bJS)c`AAO&aIQ%@n$<|6WY2txw!f3t}#)wVTQA(TkEQOyX_9U{a3rs zo0YqJj}2R&)7rP!x|@R=x!D_X)BB>=8^3+oy|)g&@mjv4o4%R(zWe*H|J%5=Pq-0$ z3mID34x54tgfO0Cyz6_38{EO|S-}^)qYiw-Be}zg=DXo=FY=ededNLooWDanoJZWl zzYxS-Jd|Oa@k$(`Cp<7J+%Q%gp#_D;W!uJM{196_$d!A@y-l~BJ3vr;$5mXqF&vCF z{K&0OzdhT?t9*=;+)5%mzMUKec-)_(oW+4$%aMGjiCoEN{LBLq!k1ja!CcIJ{ydY} zyv?bZ%hkLf?flLM@y&5OvvoYop}fF<9H{#IcCY-kvmDXi_0Izwyaj#E$=uKz-Fg+> zz8T%pMLf;F$IAs=&Ix_7v)jx!J;6I&&nu44O+Ee|-Ll7Sw{;}cEu7NpT+>-SKQTSS zR~^^kI?t)((<6P>d%V^;`qq0rF?D^)c^%oG&()b5)|vdop?lH`-PTLJ*=rotQ=RvY zJ=>}A*?Xh89k_Sh+rK>$mA$R0T;01a-0>sY$z7tKoYt+~*s=ZH$&%fv+uirw z=;A$2vh%EEz1$0<1vncLq`cjk9pFK)-^=^oAKvE#K31|(wGF=B2OZ)56`tY!-Qg)7 z@gjce%vl$zCT00=)G>|F+SFPKB?{f<%Ry^C0^;5{_03x=u95#psOhp6ZD{^v%!n z9S-zY|LX{!F)6q75g+yQUiD$$%Gti{SNQF9-`+-_cq`xKFQ5JfGC$upANWtN^$+g# zmmltAUwUYt?rk6MF<Y#(&#Oq#rfL`%6Km2{q``Hcr*Po%r zAI|mJ{H5ObkzcNVAO0DR_j|uX^dBG$2pmYTpuvL(6DnNDu%W|;5F<*QNU@^Dix@L% z+{m$`$B!UGicAizpu(U(dr%|U?y_$7v*RP**>)w5naofzmg9{%{ytwh>mNy6H&Ahqu=g?vL zc8t8b_3PNPYu_GOdFSZhUy9yIx~J))Mv*FI>J%yosZ_11z^aw2SFqvp>$f?byZ`?H z1}NZw+IhF%fe0q3Uw;HP=-`78Mkt|11}X^Mcsi8_lu+oUwpweixd-2D^VMb_ZWg8p z9)lCM=;Dho#)w^oD%NP@jbpJW~9&7Bu_MU9=(P!Iz zL{E)LL(P-tEWLl^rm}sV{{^pwgiCJc0My8};l0sAPod`GOUa~1L3*3c<9f@j_~Z+=4f*AmS1b9{U6)2I z;G%{w_*8|Lc(~e>BWQQ#thc`1-l@kv*y^s=ZhLXC+uFH#pM!nu=qHqp)#-`Lo*(VE zC$D^Exf}1iSjaCg{q%Y@uj=j_mTYj~Vyhdx*=VEwe00%MZ~pl~0v7K0?89j}`tZk3 zm-Wx~9dz&L3huq|T7_SH`_29-pZo?$K#9-~fCzkm01L>#1|sBukHX&9^4C2*@sD^c zOCY2e=fDnna3T=Y;P@8!!4k?Zg!;0d*YHO)_5kmK{>z{UKSM$j+R%I`oT2P$c*7nl zFNY9Qq35&*y0D3Ef8ax$40V_o9{TW!t^*cTJdsHERzIT$h{+4Fp1)uViVtY z#WLb>b7D**OR8wbHo7f~WZEJTedj_X8ZL%PQ=|Jh=*B)u4~}}g85{jbNSy)FN^<-g z9rgFcJ1Q}cffURj3rWe39Ws&_n`9+7NwG^3DUs)DAtT8K#{XdwEt=${D*NThQ;Lj? ztBmE-TFEvcW^axZ^!_3#9T`SfnkAL84Cc0I=}WG`QkclJBpPkTsZOnsi=lgADVJDG z=p8ee*zDvos|i40X7ih_BBqL(={H5@QkuLpB{#$3O>nw%QsP`^{rD)657_gb_{^t1 z_sP$G`tzRv4X8i|O3;ED^q>e$s6rRY(1tqnp%9IzL?=qoidvMP6p1I!Y-t*Ein4;c zG#wu0xv6U^s$0py(M9qgwTUiZq^zWVjAfc2_iQwml_337KG4P_UfI=qpJ6<1V+ zNJ0Ti*~(h>vY5@RW;e^(&UzNDgAHv(3%kC@#*VB9{j6$N%i7ku_O-B$ty@J)+lZ1@ zsfeB6M|DZKX+qMp;xTDLCM(D`-0E8Qy4cOGa-GZF zghF>|OMNCTcgxuRMK!uJnQlR~%ii|7_r37FYj@{c(C?y`a_S{$eD}-W{`z;h^bK%8 z?aR#EHuZOQglaGEyGG$6gt-5Wu!JW}Vaf{l!bb%mP8p2b$UX$1oZx4LM@-@pn^>(F z=B^|D07~GNg?EVKU2K9IdtMH^B)|F$@jg$?;~x7szA1L@ivQVS8*|RV2l*!_bga)G zJNd~_K5mek>xdy|*nk^;*o%30;5s%^!Rq8Nj`6u<5l8vVXil?cr(D}A6IsJaH8S1C zY|kY#IiG6Iv!3^iS2okO%2wWIkuz!F7)Nu)=3TIuk!%ou+S$x}jv7SR42 zw47bc=z{dq&UeNqrAJNbG+R2ffDUv%H7&40dsN0>rm>IR zA{yOv-8xMWeu6sG_tdqrmpx%#3pUlNz9*~kwdGsB`p~gXbeL&P?132D);nglxX1qe zUT1q1+8Bj%ScQFL4?E=3j}AAv=S^<_o13e?PB)h03|?1*DpbePrEChfg5kwL1~l0A zeQO=>CfEDn5RdJ>@r`MH13Sy?Zne7`;^;EVJK`V@IcF!n)rwmjBEe2jwG(SFfU`&7 zR3W&*5w39b()j}o$Fs}YQ*)Uhh{U!xr3MHko2>umP4+uiPKziPDg zIqg?+6zg^h_}B(+m4bgg;bC8Rw*>;?y5IfrP0zbk_r7YX$NjKlKWSMZ&;EI*OJ1~n zm%G1P9y+djeJf!9t=I`Q5eRqw^&1!5B$rC-*w|3zUI-reLuC& z{_S(0tKO%61g($#_S=8b?}xwTj|_h83EzmOXMU)Md>N;Hj(2|um}mL7Rq-c(DYSeK zwtx~iffQJQgtdSD)_(=_e}d;8gr@?AH-P8|Tn1=?CU}AoWvE!8<0K^Tfg!ktH6Vy2 zxQLC|i81nsi8w|s=!v8lhj1r)g(itcM2VJoe3_VhS2&8LIEy<1ilKNIZb*x|m>st0 z9L?lRFs6z{lZFC_iJJI>oVbh1_#eG^i-eJj%NUKs(TvRTi+&@FC<7I(czCZ^fXOJ0 z;8-2h=!~fJjp2BX(|C$M6Nx4>iNpwq#t4gpD2wP=k29kFj^v1h^k|R#cpT#hDXG|w ztN4zWh;ZH5hUVCh3fUd_n2(5*kP8`+d-0FDVU0|6Z3F3tYG{zh_*l>=ksz5q>*kP} z@{u8Vk|05mxnYswg^dYAkgnK~Vr7yjS(6)~k|YUPb!d}3c^NqA87vu$0y&HtS&SSh zkDIuUJ-L)~@sl|jEJ{fk7w`f$P?c7Bl~|dTTDg^6*_B@Tl~wry7r>Os5Wl28B+n1V@|hKZPo$vS(Mu_!C^p((La(21op zsikufsFgvg{xPV98WM+^s5`=_jtZ%iA*qyVsYNQL59yu=VG4&31ae`jli{ljv8sy7 z7os2u#~=;TPzFOF5U45=q=2Zy>Jg=&2&oDZ#o7#K&cokWsA1nylN}tReBN ztQr#2TCE>(t=YP*6w$5U8m1r42I;-w_skT}*UnsE1s;mN$ue~}T{+bX7 z8?AUT0IF~XU9br{&n0pJSHaI*+80H2@)6=4cykO@AJ1F&!gM?et*01IBw zt`!RljF1F4(5PU*uo^M0M&OwqTaxj5o*qiC_F=D!2Am>GuqC^zCkvi+v9f*PvM?*N zG;6a~I~+N?vvWHTJ`1!IA+$tmv`DM8OzX4+v9wV;wY^Za9)Y!5TdN<7BMaoVF*~z0 zd$#%t7b)8praB6hP`R1@Q3}kEvHi@M^vx~==Vv3s`+LA$mquDCl8x{JLT;k)eXIPZFk3v|7?inh_~5Uc>J z1Az+2Dh>K88Kw%oz<~<(YY^Hi8~`v0Mvwrk;Jp zM!c{2wK`g_B1%&8`?>Wy!66Z&`CAbDi>&|KuN@)4nIXXlalpZmzzf{KEfug?azu9}UrXa*U3(~*{X)F-# z3jlsx23vs1n%uv;+QXwT3;x@~1W~NdPzIS$t&7~qWxxfPtfs>2C{cQ&Y6+*v`>As( zDH0*c1mVOY0mZgp#mq{@(hS2K;mnq?#a$e_UmV6`T*hbI2&KHnzx>8=JjX^{$3bw% zdA!F1(f-GO9LR&r5QZGOh-}5X?8uPp5X{WS#+t{MED)`XtejjBo?H;1EXt%joTr@1 zt1Qrn{K~5v%d-r@0%6Oztjmm?tiCKU@f(T@q|GPH&U!qolnl_Ayb7p`3S=Mz1Ca_2 ze4(n_zxwOD`pXJUixD)S5IZdq44TlRT*?N}(9NLAZ5+k@+qAGO%S1rO7cB|5oXZ1| z&%ON19I>=!kOYFutcWlPTYv*PKnsT8(mebMX7JTH@Cwh61%nC1v?~qUOuI}l)ah&r zhA;_VP_(n~r~_dNzmV5C;0nX=3xsSC_1wuhFbiFP12~Yb>na9Ps{?!ez6LP>Ol#HI z{@VaAcs3yZ+3up0)g4GM_+FCU#2UAst}3bx5xnMo+p2a&HNEz|;W z(w3akE8WsB9n%Xj(}^70H=WZL(bEXQ-VpKAp&Zl<{ky1K)DMl+$g0#6&D2h902nRR zioDTP{SjEL)dt+vUmezCt;lAL)@sex2H@7T0M`N`*K`fKc8%A1&DSOS*F`JXgiX%{ zJ=BRk+KxR7kX_t=%Mh0B1(?0Rn%&x+{n?>C+NE6(r;QM*&DyRF+jKqKwfzkKw`~Bq zz1zJV3%?!Q7L5wTE!oFS#;>51aYA@ZPR^?y4Va6oG=WSfDo8444mN82eIQa{@Sq(m z2jJVl9oxLi-)RbBEG}IO~$Se2Cu6MSzNYeWCyWryot>d(S z>y_;aRE`R8OxM6J5ChN()qdeq9Sa34+@{XEstw!WJ`e-|rdFPdl z<*<;|TYlGFeg9L;eh_z_=Mk}= zeBR@KPTPSlCd3)*((j5{^_Ak2BR+CrjF{W z&g!l%^07YawO*;W{>!MK>kDz%-+R6T@aw@o?4eui2!ZU1YU<2B&%yfaFYfEpUhTen z?PRR&`s&oG`|S{1?xsu&aFa?4iPjU40LV~cP?GX8S^jFWTS^lrD*}m-p{PmSf$6`O! zWUuUJKN0|-){8*a5pD>T8vwGvx~k8yrd$iGD*&=E(UInF8;jY zo!U~b5JdmL=j-=AZue#YkU($0uMh)}3T8mr1|aO!%L=mF?43*txUb{4fab@}3y|u` zr-1s7-tE7y$Plaw-iy--KQ0u6)A%1fsa;r0d&_j2F!0AYaC zt}F)(92~gB0DxKw7eoea1Z$DUpLcJAH1e+M64{CM)^&7TJ^ z{lbP2F_?!Po7gbmi$zCzUV1R}f}&pvoBAS@qms(+Ae&12D5Tgt3T(NRTEYk>nUXsY zD%DtX4XD^=8;U^PV#%$xs(OP=Kj3N+?!DtinFXS7{QL`$m( zQp6BqfL9pv%dpS%^9{xlHT=r4B{$k_sv z#KN-8`dYc~Nc}|X@4o;C6xKlE7*r4=X5V|zrHdq-3AqZbx{#y{zr2V;q>jXGIG{$1 z(L@?i6cIL_Fjq;umteaUlAbysG&pVGSmph`xt$<6Mu||XIEkzh1NbxBET8{82;UdRIaxa0o&9dMd50;Y3 z*jUSD3yC=*8lx_MBAlZER1u@WGIvP=2hTs>lg;_u{F*7m$(9-nA3p#5Edf5s<%}f^ zTDx}JZ^sB`LUZQb)lV-uPw;sAGldVu%CR!A^Fx!(9-C2q@jjEPF>pViJ{DsO|abfD^eO zz)<)iFX6%n4B1x}n!-T#E$e+!qnZnq6D|AQZzBWgTnuN(Kac?qP9e+T>SEZ#*v;;C zBAG}6O(&7ItdAiM(Hj#`;r_N&aG?}2`kSx-hKhD!YlSB?-2W_8nW!|K6|8bOO=?=FiG6yak^VKb@uiS*R>Y!^v=|FhX2gqu znVQ08i5xPGzb-AkPj=m5R0mqA`z-^TgZO86H@d7 zt-O)OM1|&3dcCD6LSf+|O1g?}(xk5iv5Z4Li7>DX02VsYYDx#TQq+~A8S*;_0lI<^ zUTBo2r$udZo)a^j@@|)l>SYCfX*^*P)0oRs=JT34J!o35wZC<31lGedKlxOVKuwmG zc0yF6$|k8xJxTktiq579WEW#K&V#DDoU3N_l3Q&fxK>#tuwn+L*iBAZoka_@>TyN} zV5?i<8j`vG*7dG=btpyo>Q^ADBCt)WD2@!<3dA1da*90(V@-&^UO;v#k`-yRv@KKZHQ@VQ{a}^#3#NEPm!ZusIb={dlg87ftV1UD8dyEA;lv) zaT<wPjjAq2dgU*u)Mz!HWXB7eo^g z04&U~1svqy70%$_Gd`1=Uu-46gC&Z8yWj&eX95?34PQ!FL53uR0tgGCg%~=ggBFPq zM?3rhN>K5PFRacJzDUt#H*y#w?9hY*2}9>{&U1!P zAqf8D5t^QbXhb~gT9O#WvwAI~dO6!*BCnXrLniZ_$IR$ClX}s-b+Qko;^VN`DlYD7 z_#QjsT~r1YHpa1zdF-@v@}yishL$jj%-thbm`a*ua$w&0yrmpR9~!EpvG& zULHx9$6V$!r+Lk{Xfr;ejlt#0na;1UGoA^aB|iHZ(1OMRq1$?rL&q@DCs}l(aq#F! zPZlX;sB{c3y^BnjnbQ;Tv`IiMYErKh`HrDrz65HGOh=*3i0LzyT)`ujNF z&vDHOt0Dn_LK4l81|yQ7vb658hry7B8M<(B3pGthM|yLf2M~%}NJG#bhveE13X5j| zNk*OkhBWe2QlJQMqM~?v+><~i#G^uh$%4uxjv|Lc^7sxE6p_5WiW&ofl{FReX zm;g-T7o^XG;&HzFKk2;Z=E-%UV$17E)i!y@OlI?z2|ejOvwG6}ee}EY^Wp@(-b6nx zWHOHQNL!cbvT!;|psr5KPt%*!NA>=De}>rA-}&DCVh)?AL!9K<>dNJ*(lYUD#}^uwLh#?ox9)5N*d z98A{~&fz3ZWsF55;?3j?%*+%<;6%;hgwE&;P1y9o#`L9VJWI5c%s$k~Y+Oj?yeZ$j zIp_RM=`_#t+)L^N&-IKI@uW5K98dI=&-o-u_2fp`oJrcuPMb7H?o3EP>`C@qBKMp% z_7~NBb1e1|<&y6)^)XPz9yX3Qa}^js8CClr8KOChhD`-0aS_3{VI4Ipz#T z35`$-RnZk~MGPg;7v&BJ4KW+&sAN0<6lKvI)zRKN&dbzL;_FcUtj3)DPs@Z+B$Clz ztWjjV(H(WtCrvFEJ<=(yjwD5`7cc>JG=Ud@(k}JVA(B#_`%w-xzJeUmwXDqDq|)oL z($m6HE#=ZLmD4$8nJ`^b7;RIUx&Rw6fhEnw126#_xBxmO)IwDeJM~EXEK4$t%nv0} zwgk{SWm6N)#Xap)8x7P!HPlVzRMG5FNd;Bk87|Fy#S3@=8$i`mRn=8x)mC-YSB2GB zl~q)I0Zr}HTg6r592De?$}xS+Ahk`k{-jLZ{LWC_DN3!>Q=QdiW!7eOR#mOlT$R>b zMO0&5&pe&hY}MB2tk$1YRL9g$U^Ua*eAF~8R%@LZY~9v%W!LHaRCI;cW<=I@rPq3u z&u&FAUk%qXP0Pv5P49Hec*V7Owbz0*SmDH1fdx!;J=lhI*nLb`%nZKS1g8BAR(}oA zNL5%`Vc3WD*pEHNh}~GIgwPB~ffaCplvUZ4W!aW>*_Vacn3dU?rP-LRf}6$JoYmQ# z<=LL)*_s8~pcUGdT>%ux0FXu6AQD;N($|U=*M9X+NHx-tZBK$V4wFUMq1D>0<=U?G z*{=oLu&siwC0nvB+M`X{w0+6`ccofuB~TPdfe`pgv8CI(t%6nzffPUiwdLEDSz4+5 z*6aLLe%($GEmAdY+aDa&<$znc^-8;i+^@x3z3tn|^^?C%+?cdlurOIaCCbPJ-JNyC z14se1wcOKH4$Rf5rjiprBe4? zfxYxz(9Om49pCrWRn}Tq=><~b)0Dz3R~CQ)7?1&0p@D!k-|#?R^<7`cZD06B;DZR> z0KU(~O%4|z-~z7OT!jAM1cu)Q4o~`J)M>n5M@3Wp0s++J`nC-8u(w?jp6NZ&ltF*Io2f&rd|$)TEmSVA{JpJo?~lDW0bh#rOe|jcEv{KRj}?paU%n0tE@Nf3WqY<^e2(UQe%OAd=Mu%`;>hNV#OHU8WQCSz=$&72UerKNo`9xI zWH#f5uF`A9h=|6>iO%PWwrGByXOVtOgKpx9PUw|3SccA-e=cQ@K4w%-XP2f9m}X;{ z)@Pb-Sey3gn6s?#dNt~s!D&I(=^^InkalUH#$%yY>8Ezss6OgreQ4rX z>e~SY{tcX|rXFgqwpXyOnW^q*5B}(@Cg^oe>Vqh2+c|5CydAafYPPQFmJVx<)asP@ z1WQ0{OUQ&71eCo_>(G6IAV>iAEe-+j1WQ1I8U=t$2%#X#Yry7Ix7MCf9!Q&1o)Ji< z5_nV=0AY>I>bo|8r9SM$UhD;94#$?M+>PwXj$GrgY|Ped&Zec$25mzX?ZM_)*p}@~ z@PQl9flg3tRD?s&odP152;Mf}%D!w&V5-gTY~*-7Bsk&X4s4A6OMNZvxJIVbUhUSN zT9Gbnl=uYZc5diS!(^mx>ox%Fwp-uc?(P=uBOkixQ2yo@F>?9!Y0;kvGt`+pI&0jlh_FhZY-e1>-Z{5A@Z<>b5hrnWHE{%AHW@b#8h^aa!*9qX0t*-dCrE$` zf8q>J0#SHyX9;rT7;-x<@)AFAhD7lnHtkMf@oRK(?Dc5{=LjahKqp5=372vzw{o%d z?=0VPsOa+J`0`v1^L9OQBv;%ZeBc?s?>L``P{_T@7ICKd1WZuuAutFyS48eM07fqn z0O$ls#{^B-^h-VK5VHN1xskPi}-{Y?DkQ(1p3y2gCB~`4)?y8_#3!^P7v?nIQKhuW9{BN z0O0VqX!k9g_8Y)~gWn0u&V<5n^#Hg54(E8=Ze@MnR(`KqjRx2BR&g{(_7-<<#AS9R zFOGn}gn`e5g1?9WIQZsHcmr7YhChghFN}zv_~x#7va$!j*w4xuW)sf zm-Cd*^p$VeE`OZG;64CSkn0u5D za8ieQIcJNL|9Xrdby4to13-YX58YMoZIYh|E%%!MXM2;c3Q`d6ZvS(L*86Pbdqg32 zGgt3pZ=Pgl^Vk0SuLyji82tO*b;D2e#9w?5PZ-CS{DYEwjHmoGwEU&We30LKbnkpD z|9ndb{pyDbOep=+zwgv1>(!su*6(`(Mtb6yZQ5Q6Mqi4}HZ9ZV_WL#k-dBE1Pkzb~ z_2l0P(D&R_e}0kIW6vjw`38s}1^`?tV!%MCObZSk{FEfY{=tMdE)iiUz*7>28aHxu z!SN%=kRnHtENSv2%9JWsvTW({CCr#IXVMfIBgBRa5h6V3>GLPhphAZdEo$^A(w;k) zGG$ufDbx#6FJ!2iVFOkUT03wJ5n{v$5+q8LIB^1ninJ_Pz!h?OT+Ja}6r;hM^qGjHzvIrQk#r^mdR zb0^>I+P8D>?)^J>qkaJkUYXqFZXY*pygVAlyl`DaaaZvMorPZ5Rnh&_nkbU>JRg#dpyqxEY5La@2`9B8erMcp{1^Ze*QK zJcak-cTLH-6I4-6Wz|(#ZPnFRVU1PRS!t=TR$FhyH5ZIYD!F7*;{`TYO6jfFo`CTU zbV-JX*;f#L80lx(e*OJ-Gv2c9~I1=c)K7 zpn(cHD51@Z_ehXtE|O|peU9QQD-KauJ?m*7g_$2gnN5RS}3u_8hb3VDIV&gqs{&_ql`5^ zH5FA>VYPu)9B|cvS73=nmRV@2#g8gtqq)<+3<|jx@N4c!CG(?vocictz2H1tFF9$_-nAo^_eWj8Ed>T$0jYiF32H^tZuvJ zML8;}@?8QMNTMhfN)ihEYXE0u{$^oAC&(PuJR@hk761~k`hsU*3(t>TRj@t6*?T_IKNo2W4qANZ5F-Gv$lO~t`(dj&=e&y<|-~2j5 zvCrON?U&r1J4w6u?&|NZ6g=MyPkxap2=X?hyr?~|few5i$D&uh2~u!mqhsLuDm5y} z7-&75&=V*yF{&{6r-M2Wp_M@Ks~hAX6P*B)Ce)Jy*#)bAhWp=}0*DYTEl!1+SWgZ* zL7Adm30Mumgb#24gvvp%{)tX}BA_H#!R%0PDPFr?Rm8R7s616G;Ed7aL6VdhJuH=@gWd}xF?9v z?ubcTqDd?V#Ys}Kk~EQ`88fNL7ojndCwt$%2BIoUU_ui=(8%zNI5YW-G7~Y=hyX%} zCcIf@6q-nk5!7VEKnCq+I`mcR2Edubyb?6;Vb#t^xtNkj(vr@6CNxKa$xYU!iZrs` zjj)HUEtbuT-b-8f$Vkm`2BnkC{G{nn7BDQ8@{|loWew%k%2!%MmM^R2Ezy)ql=!cg z2>Ycch_|?5qN$kvjfn^{1B!`dlBAi@d?-YnIZbj>w4!}EA9>sr(Sz)+qgHe1Mnfvn z=S|e2kE){AzLw1_W{+%L?A{4d@I5iEZG0x(q&XWp(vI%#qa*z(P#aj%n-aC6IUNZ| zEy+{E`823bed^VQTGR(vGo@I}(KfZmMedzVrr;bS+oo#9qlzS{m0YUOnhMpmvK3=e z6)Rk)NY;>;m6B-nW!381*1hs|L~kW(Rj;^Gtd4DaW&@H}!>Bg##kGuc1&Lmvc-MdC zwXc@FEQ)~BxjF1DbknO|kVqH2?roHK8A9F%ns<=sT`zvu+g@_6wnkUgqE@>JQ|{7~ zvF{BpM$;F!h}QQ(YRxZ%p}XG$Q#eWSJ;;0=*x&^{IKm$G?S!e>UmIDMrCD_;R}nkg zaE7(Q7EExYmbcLjE2zUCzVT&4?BX4B=fVcaa06)!q5I;v$a~eXCPzH2!2%e?+Li5B zYs%vnqc6r745^UeL}Vj#`Kd^rGMMq=V<0~-%eC2Zm(x7bFOQYFtgV)bu`A%NuGqU_ z2L9QYb!+C;*jUYe-YA>zEa;--S)_ZG6`KF7=w}96u5R`(lV6+N*bt#>P;uzOB{>&pd zZf2dl<|nOkOHh!4bu+l#9ScDU;2ra!XN=>a^EkCnEb<;4Uhp8tiT0kKRepfuJ*OFz3py)JKW>$_KC~A?smVs+E;*rmvg=E zh4MOrsaM@vhukY8hjPE|{B`hzee7k&JLDrT`N`9L@|K^x-udqL%|~(Oi~oGsIWPLr zLlN+vLwcl@Zg{36zPl#>e0M@m`q|Td-kyg&)Ma1$-SeJmrgt0a3IE#FKe^KW#(nJ3 z-TUP;pQN`({>gRU{OMD_^VgxdZG#W;;aj`uiGMxx`6B)5lfV2T`hEERRjYjSv%md= zLci9u?^@M&zx4&qcKXk_e)sdg|0RNd{_)rT`5yrmpmPAA$jIMy?FjKvTFLEN0G=Dp z86X8#pmHE!1SZ)4S|A5@;7MR0p4l6%2_O9(p7AMO28zxGdLRq7;EFt73X&8w*53(&UktL#3f7SP`Bi`aMHY2ztqlJ|s37(=KriCi9;_)ftB^IMIc4Lu2qc-v) zH+myEMi@A9k~H!mH5Q*W24gmcBP^DqJYv>4hGW2u<2>f0bJZi`rDGZHASzy?Fxq20 z>Z3tI6+hZzKQiM%He`M!WYqcN0&340=9)mhqc#?#LvAFX!JtBBA3k!VNP3w^a#k;L zUqHGe3T9+Tj-*SjSxJ6mV`=0|*5ngGWb)}Dq?sZ>R{kR}V&h6GBTd>QQHtC3$s}=& zhX=$!#1*Ae0@VS;fCn5Uc%5V)vg1zP-13YZf0t(W^2MGac+)m(xz=fW@%>M*K9xsj6e#wMGQ{9cXp?DekXW_r+AJhd6uVn{+=g#rl)$YCwsQ1d%h=p#;1JFCw*Qg z45Yva1g3Jznr@<`PhKV<3T1OXXLQ!5fgUJ=Ca8igD1$brgFYyPMyP}?=zZpAPVDD$ z&g5yPW>^4;S$rsnhNy^+D2bM+iJmBmrl^XpD2ukJi@qp~#;A*rjov7Z=BSSD zD3A82kNzl#mH-KiKyBV8ZW88PUdvTFU{+!zO9JOtj0KQRDV0{Km0l^9W~r8LDVKJs zmwu_03Mr8$XJlrmX?_iAa*L0M1)H|1o4zTW#;KgnDV^4-o!%*)=Bb|UDWCSKpZ+PJ z2CASADxnstp&lxtCaR(?DxOoZC(I|R%Mdz=6|ZBZ~i7#XiJnfs;7P`sD`Sj zjw-2^s;QnTs-~){g6gA2>ZF>fX=)}_U<+4xfZ^RLuI8$)?kcbLs;~Ykum-EJ4lA)1 ztFay{vL>stE-SM(tFt~Uv_`A6PAj!mtF_*$2XF-kY(NG`YMDx=PTm`wDd{>gDS%F) zP|E66XpgO4tGm7{yvD1%&MUpvtG(VUzUHgGT5GmKDz|#;k-{oqX(pOtm69GT!X~W3 zE-b?~tiwJm#73;dPAtV%ti@g|#%8R>ZY;-ktjB&V$cC)Qjx5QRtio1>q>d(q!Mtj*pm&gTBC&h9MF_N>qTEYRL8%09)n3anUJ(UN_f(k?C2Hm%b> zE!0M>)J`qcR;|@uE!JkO)^07=cCFWbE!c*w*p4mPmaW;IZPY@=QdAhrTI$R8X3VlA z!Hyu>)~(&%E#Bs>-tH~m_O0LkE#L+&+Ny2Q8f~mv6XGVW;w~=ZHm>77F62h8aH&9wyx{GF6_px?9MLj*6!mP z?t$5^?(Qz{_O9>#F7O7g@D4BafEnp7DH=8@UZO7XHm~zOFZ4#Q^iD7JaxU&(FZO1y z_QLA%mTU5!s~T>v`2LPB`IfKwo-g{QulkZ=xF&6hwQODT=IO34{noGj-Y@>)^yzcC!gu^i9w5jHRxn%FiO@wXtc8nbZ-(=i|ivLFvKAr~?b z+A$WjtR72g{ucK!3@~vU8?q!%G9_2CB?qw?mkkeI2wNV={IO`khg|snKxbx?CPVJEg?FSbD&_CgCaV@I}RPc}D;pabJ^I6oO# zLpEi1wr78KEL-*+8*FALbXx;9Xs5PnuQn-*b|PQ(q-FJ8qc&^Twr$@wAiH)g!*=~` zHe%y8a0j<=3$bp)vyM2KY0oxi4>xl+w{w$laa;9qV>L*h_HsWrc4xPC7jSexaB2R_ z_FrH3c8@oCm$&(LH)bofW?T1fo40$vH+&l{dXu(#CwF+acYNo!e(!f?a*b8J_H@T~ zbt^Z1^S6N?ID+TjeA}{suk?MNbAm^>gimN{AcleZ9c!2jdduzCd zm$-?a_~Am!fA4mPV|ZIHFN(*wjL$elfw(j`xJ^s&Thlm?_qdPGp??pabl-d#_Ihcp}xdr(iJ~@{Uxblj( zn6EjT_qdIJH=0X%o6k9&U-_Fud7OKBo$ooHyLpz6HiH*=niqJV7rLS6_x_!qxr593 zp*OmtCwQV$_oD0hqgT46zjvhLI8amirFXigKX;}JI-`F&sh2u#hq{X!xtg0gtG9Yy zqxw>d3xLvqQ@gsY-}+p`x@OBd%+mUl<2tYhdsypwLi0M@`ns?uyR!H7p946NW4N&| z7P2opwO6}T6MIERd-zPdwRgL>7k0C=__N2ls?z|se>=LT`$=OvNNc;1oV&WmySzs< zyMK|p!v(z0yT0$cKG%D=+`GBgI=>G*!8fzNp9R3@d%-U}!!z^2qd>w7e8W#X#f$R8 zNBpl>yvA?5Bwu{FD?G=CyvP@_#}7Klk37n!JRC=QMcRAG!G*-D{=Cf3{1CHzZ-bHR z!FJjJkb~Z3JEr@rb#U+7OH;`@ESnLg^TKJC|j^i{R!cRlIH{^{Gj?f*XT^H}TC zYN0&aGdUfk0XBVwq;r0c^j2%PnO&R#*;hQ_Fy}q7(d-w0* z$Cp2!etrA*U1le`z593Fk9m{Kx5|RUOta$B!cV~k8EnwO2O*45!U-vKP`{!0yUoAG zc8hGX-z*a@GvZ*7!8r9QOi{%ZS!~h87h#N1MinnSs(MKVT6tq4Mi&D)F z#{;oYEDse@(oaDRRn$>QE!EV9D77t3Ky?(fN*~|M($iCEt<~0Bam`g%3onGSsY`dv z)XE>>oORb@kxf?FWtnaEu2i{O6+BD_)$~dr5p`DEZMp5%+i$^*2--iV4Yt~0W9@Xy zaM^9w-FM-Q*UoXJ4V20r-83}Fb>;2X-+uuPSYZ3;wUpI0g@sk$YzJ=G;fEoPSYk7K zMbqGNUB!1(Y>l1R%yRD)`rfseLtHPWO!@QIcVfS>~B(cGzUxP&QZPjfihBdzU6QY^Uk&+wYnx7~zJ&2`}96!x1n1@5LF{$nKn# zwpMR-`EK0u%SEc7gc}a%-1E;t4_$Q6F)!V8gdWEjZ^_ebdF<0+kDVdSIUn8j+ew#Q z_r6oNmrd5iT7iWY%!#@&X`|Y{!-uv&t4`2N8 z$uHmh^U+UV{q@;z-~IRDk6-@z>961Z`^&FH|NZ&ze}75<7(f9Aa1sSHpaCP1Km{fc ze+_it10fhe2~LoL6|~^~1u>XG4Q`Nw53Ix{a1cTfj*x^UG@%INQI2<%!yfN=M?72z z!xz4=g)mfMIl@to6~+UG@u-InS6Gf7@=%9A{NW3A_zoSW@P{%iM-pSm#1zi(g+r{O z3+d6sCdPvvT+AXH*g%gi@{k_#$f6nPu?BgVF^p)e#~0CP#x<^y9&C6c8rM({d9ZqU9>5t+aPoni;w0xe`Ot@S_JN(} zRHr)E=?8MM^PTTZ=Q`<`&w8>`p8E7BJm>jOecrPVe#j>u4BAe9$}^z?<>wy^>W4o7 zVxoYsC?Nbm(Le+O5FE9rAUe9yKnMb)8zreo1u;@Uq|~GwE$K;Fiqe*X^r9Z!Xh?5r zQI3jqry>ohPCJTIl6I7&C+#Utd79Lsj+CT>aOzVBA&93Ym8w zYu14dt(7J8nc+iG$wVA*~?sN7nj;i<#)f^-SC2!ys7MNFLmi%^scv;z{Ktw;EP@2zCoGE zJuYv7yW8KsHny&W1Zv;;n_HdCA6ZDzBZqt(M5Mw^GxHrT-vj&OxV+f52n z*qhyiFlrHu;M9s3!2kVkYo{5_;5u`*(2T<~lUd#OS{J^-v~e%rkV<=e*BQ4ykv6N!-qT! zM~}||4|uSH9q>r=n%fMIdZ;sRN3-M4d}c=u1mpbkekE`1JdK>F6ZzV)rop=&;Cqt?JaN3D+?>|a9~(#gIxJG4P;WILPBx0VJv z&;br@fFs-B7&NrA9S(Ge8{6ad^|-?!4R)YI8`!=zyWLIhb&tE;*yc7kxQ&kfb;AQ3 z*|4|1{f+N+gF_nGfJeZ~eQ$2VqucuacfSM9?|FMW8~rBux(D8GeGB~I6`wddDxQr& zE4<+gzjw&ht?_I-oE^|eMkP2AbD7Va<~6su%vTtWa_n4%@6b68(V+8iq+!TwK*Ji+ zkcOid{T)Ik`a95Y^fb7z>1b%WJdo}}qGMgiO;38$yN>iUoFVB>NBWS_z;!mP0hFzD zd(!K8%A|ua>1m*c-9ef6N46dBbr0j*0bj_y$Gw$whkGXdPIokbaq)|1L*vn)bjN>k z@03UU;}@^=yg&Z&b7!UGlOFZRlO6PRmwe=-eum6PoegKG?c198qu{*U-}V+s6@9K*n&co`)lRu z_Bo4v@n2t})aUH=1v~xpi@*Hn$39mD8-Mu2pQ0A6C}BT}|E4z8se&K`NeLmUipu{8 zApi@o0Hq2618@MPiUIxasTQ#RiYls}$^rLJswi*(1yHf}kFogg0|(&%MQ{WQFa$~P z1V_*WQ!oIbDg-ymsgmlkD(eMfPzFOV1RHP#4e$XQ5dZKG{?w2C$PcitZ=tBq{Jif7 z-*5irkD~6+2S2K*SP%uNkP4xS1rrbeDX{-cumumW5UTM1s{T*~|L+C~(5Vj4{}PZ4 zyKw(xu&_94tpIDE=!%?1YY*x`4+?C+08GGE>kp}^ngWrvV5_xQOArxJn(AN<2ywOy zkr1tk5oe3Fa?7<;Oq%kGx0dV0oavc*YxsWe_l^k-M)8=;i}rx&40I2@Zcmq5(G6m6 zyU;7@eCd~J5f09P%6M-Su?rN5kG42*#f&e-_zSiU(V7PF5C574G$u9~k8x{>+Fu^Ocj!_-m063oDq5fKT|5^>8HVN4W} zDGkI+4RA>f%Bu~ij18zPAgK%u1hOF2APtJlAgL@3{t9vp0$av_myA_X!c&u+_{ zuF8-O$<}}zgoqqch#WwY9Kt~xaA@b2ZRd2YBrPr7f^FBd;U%Gs*rF}iM(x;|P1)Ei z*`y&ROY+#t;nJXO=hzG-O%jJnvK*vg=ZKBxQ1aH0lGxY*DTi_@i}L4)^3se_=zi`c zkL@RI@+Ng|CUJ<(hKzOA^=K z^4{Pr+qNy^+U?TX?cH!q-{j5Q=ndT#6WeGK;|LDhM9$wpjvcZgM)(sn!0p@P5 zIE_>0(4ZWG4k~kw=UhnVjLzwxZper(I>m14tj_ArPU*ak=&ExKny%_<59v@Z@l z-r?!W&O6J_l1vZqLdoyy?(W>~?lzC^=yUE4sq*L!KkcrS3~BBn50u1c@7#{^l#V|) zFY_`<^e#{H7SBHS&O8&eJa3Qj%9HQPv-UI(LdWh5+D`Qz>Go=`4O9>JRw))?DHdI? z6won5x5C_Xp3{4ONOR!AQR01DR02@#Z z8xT$fuui!!PRA4jH0hJ6-kX8eg z00UJFZ`Aljz-THlcwoAtl+;F{Di9Yt%LG#0eJ z$r{Iro|;dt-l-f(magpSu1FTIzA2nqHd)nCwCq3+Q|p>m3tEw}S}k!HJFye%5%`V? zAKT!U{IMTX&mRdg>H^X`9g-py(jX&pAt7>UotDa))*$1d=%_5q8d4;MC>%l(Y?;y| z<+3buE!l_-E_-d-Z0#&-ZP=oX*AP?K`VuEsQs~OTB&AXAaSbM?Qs{Q=E0e7)M=jc<;n-+W+E~)pY>h5|O>NgU zFZ(iW|MJp`4KUB){xv@n-(pkWF0I}kvvO}YGNTP0}}BeP2~9PGhI_Kqu1NK4SH!a;kvCdlNWnI&Usza;f%L>mv`l`EjKOmc{?-T zFcTc0VK|R-es2yXRVW;iGwAF$=;C2R!E@@wjy$K1=u}Vjz|-gkm_xx6J-;qIPcQVu zF6x9V@>~e@%FgWCj_=?T@CNih@6M3oF7G}V@9Jnk4G-~J$?;s6 zKjE`K_4D#j50o-bKSQtWM6d2duRKrhhhsSOPE-{a??hEJ_8!mmZ146=H1-Nu6?5s9 zZV?x&3l7Zw;0(;bU_+6%o{7JX?`D;6W5a2mfVBFA)cnp*``XG$!!P>e4^)q^`;?T8 z)sOtLG)kTH{g!Y`>CgTIxm5L!0mt-FClFOf&{ro=3Vk)I0x%F*^#Zx@PI+|#w{QX7 zkWy99RcqB&Rh0z6a8+**4G&dO%}NFl)dpEml6AFK9gvVkRZH1#NNstIKQ)ipxCxz5 zmRD*|A^DYKwF<#-lsj2c0gwRquU2Ihlm(RyQ&kPi5Kz~&1&b=E&?@`nu&?Y89Ho)@ zys5;*d7Rzx9di~ErxhM4(GaI8XOl6-;<1`^v|Ak!6X#KxoQV??R++l^4Z7G2qHY&Q zQ6K)*02lXFyHw8&)S&kGv6uMOihIdlk9ZW@l@#HN6x;Qf=<%6yR7c5`4&s2nAQ4;5 zxfyNtq?7Mit0`tT7PQjwrCD|xv$6Ti@t$lN9C5l1=?bq@mStHwoS#v(oYkBeky?4S z#air{{@GyDAZST(yJC;Zz-ytEcA=LxA{jCxqxNaJdLbjvYK@HOB(fkAa>$U3=;DDP zvo;;vkOVuKVA#*SWc^;tmet{O#LH&g0_O66kln zXKv?mE;)bh*Mdknx$}R|V1lR9=%7yOqOv2MK9P>=ywj2_ z{O>YYgY#~bBs7xjbB{on9wJY~=M#h@3GmvWlLjw@Ckci>$?(k6h8uL04zxohPlrP( z>Ozn8RXD=I{<)d@YZ=Sf zjPt6mhIFB#FZz`5{Hiao%5M%KYWu`IOUZo9r&Lpk^vvs6kKb>WnGmB$byR&h3MttQ z<QgP|T?huw}h*{uG|-;>zDo+nbs8!Fd7d2TCw*09T#Dd7F~}Y z`LPvAltp1NyWI5_scXh=)ZU+KxjLGjRji(i8l9G1_tIc!k-ljCQL3Rh z;T2M>!P>|kvLd6tX|J{*vD#@j60CWMAt7?hs_f|cm*-N5t=l>%qs?rmGIP^1c+(6n z{TlAAt*@ueF87+V_0n&3Zgsa(C{L1b`yO!-6Db8(D;KwKpAy&Vnk6UubA>H(VbUZ4 zf7yI;bKmlGb!~G?SJ_AxFvFp4KVR9vlG)nwbwxjIH5>je+wFYWtlb!H*V0!SyiG3o z8Z?t52``M+1=w3oXnGx#-5 zH#yES`;9VN^D-@y9i-vq=zIJP8!8c7IaLpb(o-I^(>gDh!j;bK)`0Aylk2Jufe&1O zBb-7Fyy&RY=l}wZJT~;!&`X1m4MBwT8Zt~nj}1eG1SO`ChcM$oi3c-gl*k5SMl>Ep zrXeZNB1Ma7RI)*XMq*5bF$j=8aQO#kR^NOELk&h+WyLc<5td`IdtgItxKnl-a2;r`qcwC zu%1193is*b#}A*w?7an4)$6)0j)io0cZUj+(tC--Kc{m}r;ah7-}AoD8}HF*Wj9YO7X^HN$iLT! z{=C%t4stSBW52)BmMmq<5kIl7I~bwhXmNS^c5|rY#^ntU!sD%($~(J9$Z!=&^X`6x zxQcOT3xr%T@q+RQKle zpmexCNUQ2_(e>!~2dTKrO%(AtvPEJ%?blza#l@XF_3vtu@8;8zSk^3wsT&6bMBwZB zh#t-B=H_R_=tqwlOnc(G87A7eF>z|We;}Eq`F3aW_+`MrlA+dn?zXJi53}&66xQ9u z5bsncZi0%hb`^JSij%#YIGXZ)hgCN5@g0&_6tU};zW0lFzVypcj`8*eFWzQlFTb!` zd-x>AdK8^D{>^B%isqYjV?#~rN&RsRAdkm2UK4lWXjsnVU7-mb&#j^-q#mz%qexWWci)Zl zyiw*|2;FC%l=BcZI0dnrr34359pasF;03yciQ@RFdtocvMR3@?cmdv6yXiN*q&` zd$TY#VAL>jA7wzoRD^wiWBa0ymzVb4e*f$COY6yZk$fC8O5V5RrmRVO54d;8`igt? zzadpDJRwAWJ0Y({eAF-T!~9?{ffd=NUq&Urw=c~5oz0l>t1qYHkD70xa80!Ya_|_p zzo^=rODeAJe;4+yd^_EnlAT91)!k{RX8ZdajvC$|Cyq@Qw#)BDtXh|QHBw>7$B@-R zcUg`R_hG*MO>sHilVQW=_nUpysI@1CA6OyZJG6qFH&3-@FVBaYDQj21^uON`Bw-JK z3NK4%>562Qbc?j2;r)p_>19^Z9p=@b_ww@Y*o)qGPm6-!-w(JG%-j`tyefnq6YR#6 zmc%D^B7~K)YF z5h`cXuD8jXRKkLjCp-ukffhYa_*acOoMuEw{c5}^w+F?=`S(apqNu1@B|14FGvAQo zHq&SYPQAEhgu-nbnu%qNyA&fZP&1g8=vCmQ6uU4!W-C%NzFO;2uG;&U12#LU(MxI9 zSw%H6Ww5^T?a^bfj_&FaAyHlHF_N^78Oh6dSm4`hW?~&XJadb)UagmZQRqP*)(Thm znl!)0aO}uPGyATkj2(|c!kz{#SFT#WA%9qOu5<>gtwfK@&G5+jOQM*2&X) zv?8PkPc4QplRGXlS?)M=ar;{-7bEBsah(pzyIG}CF=tE2oxwV}JWFRfq~d>pFdUh| zo_;?+Tjtf-Gw~^Q(vK~7<+L2c6P^uadQs)@y+=@Vy7wUaA#sk()}TV>0%Qa{onAWE zZz$9YD~3&5fU7kSyRCjzf7{q(ICdM;aTHN)sCBIO2^xYV??G@0%x2+B{A_U0V;u zQ@@1#6j%juVKggwH=-UgQ|c(8@iW~r?2C4Ri`}62GdSfXwfTHjrqj+7x@CrR1Jvq&eogC9km>|6RV$XI?x*Lsn-BGSLZorVA z-o9}c<_8SZBCPf;Z5R}oOc)rL8#iv;ym|B1ty{Nm-@bF_4lFF}-Me?;;Nall;SmrJ z5D^iPkdTm(kx@`kP*G9Q(9qD)(J?SEFflQ)u&}VPv2k#4aB*?*@bK{Q@d*eB2nh*^ zh=_=ZiAhLENJ&Y_$jB)uC@HC^scC3w>FDSg7#W#ZSnfTz&&KiKAr~754?8FCL#{_0 z+^xtE;D{r?0PXU|?WqXlP_)WNd6~Vq#)$ZvN`ktJkkzzj^b<#>U3h z*4EzM-qF#~$;s*6yLa#3zjtgdPEJlqNl8sjO-oBl zPfyRt$jHph%*x8j&d$!s$;r*l&CAQn&(Ht#=~F>LL1AHGQBl$7&!3Bni%UvMN=r-2 z%F4>i%PT4>Dl03is;a6%t9?yPZEbB`U0r>BeM3V-V`F1eQ&V$ub4yE0Yiny;TU&d3 zdq+n{XJ=b&;NalU(9rPk@W{x>=;-L!*x2Ocr2Zu)hheyXp0LLfSI6gTAH~~04yT<9+Ikv=5Dq&q8D1o%_nF?MuxYeUER0T zN=^G|bWAxqX2|T^k>m@>^Ja_a45%bt+IZ;@S-)1x~M(#FtPXA(IV~Za)lX8|ze+tA2 zdsnF>NsAQX^yBc(?ca%`;tu;Q{~J6onbB_%B_ zEh8f%3n)TPPF`OA=~KWI&lD6C6crVfl$4YKXQ-&Cs;d5L#9?Y`YG!5z=)=Oo!qU>x z%F4?6>Hr=A=k3+GCKNk6yMMwdfKLFK02%?j0f+)n#5FYsRaJG>)%7(s4YjpRb#=}4^(_qztqqN>jg4(kG_?aX{X%nl6BHfSXm0NKiI$G$ zE3~w9wzPJ(09;U*rvg`9ozn_-D3mgwiw1F&zS?YUd zi5Oat@Hfgb)kmsSFppVoEo{f2O*gnZDp~c;qRn@NN%g|s?qOdVNR>*It^K*vqOZ34 zczdoH@_|&YuI6-qbvRe6zpnQDc;{PpqFjC5<@w3}#%zCm{m-Qqw{eW-pi3?0+>m}Q zwV3z7QZ^!&*w)LM_ad@co%h0(J(>5RvcjYApw3WT@I}p8P4Q;pIa%;0XqzAlV4qq| zBEDK`Aqcyc8rZQU@2~<`+2NroCY39pSqa7_VQC0wOPTyRZzb1rMa+E- z!+67|meWiU)@joG0Pqui>v!3~p%fPjXGh=GiZg@S^Eii(SdhL4U;fPq1TiAjuwMS_Jzij7Tn z1#%o5ir+wqgYzfg;!@$_QvM_0;Za@#AD;?)VJvaxYIe8|PY!NtkR&Bevd&CSEh%linBCLbR^KfeH= zPC-E-At7O5VG%%~j~|PQii!aueey(HTwFpz;(wS>fg}T*3RKxOtzHxAAKBEw!Qmf? zw10t60hIz8jR6D-*b`7^a%yr)dTLrmT6$J`Ms`MKZe~_qR(5`N&Zq3$f}GsKoV=o3 zfc(#S*Z5SN_Z#v*l|WJOJ3bYZKv7r!Y8{`Bv+``I{jU1 z{Zd?jQ_rtB^%tvN{>G};gvv_v9}sGL&>hy>_;9}n6}lw|iS>jK9&8B$gbI`xW@=9~ zl_MZj;4`O+I^PuSD#;$sluxBmtWwOmQes=;rR!q_+Rc6+r$)h&9;4wLeKlp0-csn6 zAjG1)daGA!U`x<(o~HA{-Vw2M#l7KrNW-1`JrzZ|agzO~vG{3w3++*CrjV0;4VV`Y zkB%wns**L|2YjSqA*yX_O#W(BYLZCzmeS#Cvl(epF*1L2qRQ}*{g*N z2(|wb_7)P`8gxm}PeRT6ZxHHyCnc&UUV{F-C%#R^s27m~U5X-^7uSNX^hYBKKPHs) z1wZDtsNoOyx{SU_v5(n(3#4Dlq6`vzzX%HMaH0o;9}{FRJ{D(LTMQB5r`H$dmNljp zReF)VBtiyJScuSODIpiq@-n6o(M-su5jKXs7KB&)Rdloarr`}`D1YG~BI5o5ct}Xs zz(+=g0tJNt6_pST4S)z8ofrTEg9H?1Yk;}%@Th+A)L$>~@hPtWC9l8m z7Y*Pqa&jntQBg6_&@j@`F)=W(Ffp;RvfjUcpN*aUAtxs%*EM_b{6GGJMvVU!LHOT~ zB(K8AKL?RlQRHv5)z#SrnCow2$?HfGgph!;t^&xfb8~YGAbk9`1oYrl=(xVNws93W zZf$LCZ*TAJ?Cb$?xVLw(w|596;{N{8{=v}!6vu~$$A?GP5##CcF*IWQ3(k&D{ubBl zcFkY+ss1T{p_6-&-{STAT@b3FH46kY{oHaEi?3OSa_%7&HIXM7i-S0pk#46yw_qHaqCRF-Uv z3wdL~fhh*{#_ZY~UoXQtOPo3E5J_1S)RFG@`!H(tT`f8LJA$z3zrkNX5YB@s5I+T> zH<=gRf)7=M(Sk2sM%IEK)Ag1!x^MpMV@A3zmj~8hX5)IrH+#Ob6H0p_1a3V$Q3Crk zTQGfM(ME>nl*;C*B)9%srRVnPZ`4dGm#j4%PN}VR0)6!(4W6m!$BgB7X2kG86c%HL zTj>ph-#jxmOfXy)mlwPWbFWyf`iA_?n>PYsGEq?QP*L&G&EkIq@Ai3f& zKx5ZT_B)wf^VzjdyVhfWC9_|T{8w3xk&%^|`93Qv+x`3OZ0sBy98g|^YO?Xm1F5gb$e5_8Sb*s0xR@A#cmR+L`-Ql;#9xSyPr61zLNY*N zVscVaN>Wm4a&l@)N?K}adRp4ggxPhr45Z3Ho(!bO{wMQe|3sAm!h>eau1N1HY4+Ew z88mGM*zY?CjJLOUc0h1^6&*vR+tCRKgilY;u9Vqd1Kn#@KL;NJD_M!;%% zB1n+;Cl7w^Ze)2JZI#}0rOMRgUF#D$Xm*L9s?3+)`3%tks>&XPG3Xcf z3X`Aig(a0hG-&uug89PJRH(Ap&;x*hDvj+Er!X9 z(JzH7DjP3-R5i$6y58NW?KSyD?j=QR@P-Kn z3!UkShI^BliE0=QnaRo&RhbcQy0S-7Jo~a~($r-gXwv;(n9xVLhWchlCY0G{#r@GF zV7@VQBL*hq$|L|j!GGoeF9952Cx8PSgtn3c1~?{<**wNIOlC z>zn@D1-8&!-z~)77T7Yr0HNu(>jkz~`)k=uzxGrXukabEdEuKH6?at!>)wh1BA)9>u5QTApYxd}7_o(DBf&6cz$B@3ji! zdP5pU2PP91krWn@92S}SE-Kw!G{(DV%y8%|a2Tv`828{Yp+JCw6%msK35yvSlMw}z z0Tq)L4U-xjlL7;i0uze@NUeVa92^i;LV=45VoM43&_0;IsM zFbUWO1eOyMQ@_$-z@(g+0YTA4MCdn1%z+Yd$#d@Ea0`Gv#`jRV9nF6>Md3jYcKkW+>Uh7@exa zq%-zqXeZO{7|Oa%<{1BAUVT`$sUC?4GvVphK*~{WYt7QI4AR&!PVp0b|1NT=J6ID~ z$+|3xsEesG*~l(>lGs=4aJ(^F4C~FhbzyuRdtKEgbi+KoK@TJHTWtcUOSp3f?k*f6 zJOT!L?raYr1T_Y45Z`?WE6}Pl#G;AjMOwtv~?eS;X0TN0)+}w|Nc=&jD`FS4+JbEO+$0xwg4-(?gj5tVzgABNo6z~zB z%0E?9P*71)dak0Pp{AzwTwO;)Q&;nazLu7Owzi>;j5lb5=tx&V4+Q0TvUY4BFZ z&|cf<{R<;^4P&3@CV{FZp(>`4N~UpgCTWr;d15BT!p4>S#`V0$EnLQ(4~_fSjECk`6^~RCg;$j=G5@gxy;Nh*VZ%Xy-$pnUl=Gr__te({~9y=5+%RYCO{>} zAGO85P@C{8_PRv8Xbi?!i0@xly%Ty^)Z`J*u_qQ(mF#Vf}Ak?+~B5{VoaFc;7L^&%s zU)?pOydN`gkKkDrD}w9mD2Q*l-@@gj73qrSeZb(a^$knHhc}XC47WuXHg~Yx@=NKx zCQn6;3Dz-|$2||fo1)yDa8~;)op6raw&biLW{y&c&}FDgQ5Zlnw6QNBDcHwxDB3RW_F(!Zr?0$6&+|e_;lek!_|Y`d$a($r?zh$a*<#fAL+r)+HMab_Rpt3P zuGP8I*>TZIL4g3d^TsLs0jc#31l1(dyKPU%L=dKIl3Y>6-nIjak&E0C$H4Bc7lDPU zrZ>q0m3aZ2_jcsIlqQicZRmeyu&?+g4Tkx~TbM^MnY_X0d=cl|0cQ`~PU&q=sLYP2 z%ntwapf)@F1sbzM0BW-%YO~|NhZAZufYaY_1}+%PPFT!NSj~i?LK=fo4wF_1n_dl%`32DfJxXp|!sa{@=Hd!w>MxA+^^HwUEkLyuD6#@2 zRiG5=-~UHqw~w4l4ZV4$L4w6b8bs_;v7!F)~OVol*nZQ)vN;d))+ zdUer8-RIT%lEwP6x%%=i4V6<3RpX5{qm8vgP4)dv4Smgxy)Df>t*xMX0XT3ViQUuP z)7R76-v>krRH2Lw4^EE_&rVM)%zpg_Y8U{cfI26r!3Nb7&`ixgIv{xY{p^GKCuk%C z#o^)p5x~*G(ec6Q$-&v#!NvK(<;B6}SbHPaodmz$?Pukeq$JR?FsN-uT@X`t&3Y?tA7@hG(f|g*ILLh8JDpcjmWXx zz=8XE@#J1CfBVs4a&hI)FeiR80JbJVEfTW-q;IM5Jnb?BggLJ!E%qQ{U!F|WeQ6G3 zJkGa0HQ;hSn6QzpJzK6FgF0}qyr87v9mEk8lr*gEE)T~(DX6=&J<7hj8B=fSa(`X~C!LGHJ&2pY_CK*}=xA{Hh z4d~!n`b}<(q#_y+SWS={kiJlU`Is;U2S%WJv-pDv{il-!Be*#l=8`B7}@j&Qe7wgF%}dE6sZt1<<<3M$ZmU1a9W>9OnAHl0jW^=XPr!#baWG= z=nL-3)gnR;W12YK7ZG`dxj9GL1$7A=ivpEJE^gteXVH_wrJ)QodCamO7)lCrq~_wg z?^K$Lyx}KgO6#`3G0*G!wRSG>FdMBQmVU#bm$NcQ>GrgsgbYn(G1c&g80PK@VzAtv9t1)_ZYfBSz9=H}K^S(mMub(Zme?R#a9IG3t z8KMH#JXxr{fX+|;&b1Qm$ilrEuP%GG7@KJE(>nNhJK+Vl6Iz%|8cPUNbXlBI8g2Y0 zz#z~E|Nj83CFK7YTxnDWYY6jO$UR#Kn*)Ty5yIyL;dO=ZdqM=gA;NwT5r2qi5JW5# zA|4KrjDUzoK_sFf5-|{oIEX|%L_7iVBoXo?86uVf5lw}Nq(g+WAwszjfjkIb-X&k| zB|j7w0=egcxu?Rp$B%Ol#d7z>b9W?jzDwt9%4M%U%UV*-oLA47(M}&XNE75}%rzGO?pJQB2St8sJryFRU}O4o4{!K}e!AJ)>&Yp}bW8?$u02x>Qu* zq#yFJKKml;L}R_{9bG1A?$>&ro=5QeD~Oc3?V(R|(yLjgW}3R_Al8v$Nh@tnur@`>&r z5SEpQA^Z4rxu5l6icga3U3|MZA1SvEO5q<|cSqldLKK2tOu8D$ zJLS`>B?LAKsV2BR1Eq5c_7}sboZ*Mx2Ko1%((BoA!m5(k>saBbI!tFDQ>y>yxND&3 zswdw5W}A*c+|}Xe#Lzk^-XJa*hb59Gxp!1T>BBounrP>97n=3#tc;xXoV>F2^<0v| zHinHnIb_idMV>Fuv7ZdOq~$6y!#^Gtap_#xMpuh28NTKom?He~>Z{ECn z^A_B#+wiyVAl$x#cn1~{_Ab(0I3zfDBzOcQ(2ej7(-v%%0ky-qfrYEJC}9<2<1t#~2r7*U-_@t0xJx*$yt2B!w!R5e_r_Ik z0n{b^Tj>p&4F356>ibH7Ul+uIia4mPdgZEK+X$Dx3f=x;;14CtW|+&ZzKT zd~S&Md8xZ0U_ZBX6+l&X!62^kOd3p;K*zXjA6XMl!}ES#OE8)|<}6nkal2aHtfLTd zR%gq{MyIS4bDAX_c075;v+t2MQnhT7cfIp5f`*~?*i#1T0F1Jx#zZz0-*INTqki|o zW^z8fq>G@UdcELwoP*#VEu+C7C6=m$*BSnwLWmm(A$pk1yKrdm2$%?n*oa8DNXU4| zC`pm5kyZIpuvy z>IYObY&3N2vI%0FTAwM8)JqpU8`e%RiBj7ngi0DfLuJ`k9QZf~=gP>@y8nB|{mt z*V3Br#k4~o>!t7;l<*igvzrXFnlCe0?9;wFqj`1t&y^vaC4|8e!eR-zZwcYBggml@ z2w6fzEg_PY5E)B|oFzow8uIitMEW&E{53@Q^`+qJ3;x$w<4*WbC?B z9qaVo7nnHbSh}X!cqF{@it_LY`S-R8WM<@MXBOpVmFMTw7UVV+<+T^*_m}36m4BM4 z_%vTxuvAsBR$Z`JU9eqKuv=5GUsG^cTX0lca9mq(a)r~{0)R7sI)K7!oYoayq3EQp z=(zqfz)^kiVMED&W9eRF*-lf%_vWh2)|$1p`jw8R#qPGbzOJwRz0*SjQzOG5t3UQD zkN4Ng*8ijs+TMZ^10aIyJpVtboA~3G{7-SUJKSuo$gjBCPJUk455(0>KJCb{L1ZF- zs0_m&LQZhC;1D(w3CjRA6o_q3(P28hF?{Y8n{)?ra!I0L!UtL5b5GM`QgJTm4rdjz zepK`n4yNbG=R7MAj=zEY5xGF9Q4IS7mN1_^MN?95b{V~T657S7`@Kk(*c@B)>C{qg^x=a*PLw-A{VAlO zZ702kgxZiaV&V?f0>sgsp1}^x>iNwi_DlE~=ECy&*?uKV*1#RER!4N_y)i~%R+QPC zYzSM4>@I$@&CR#t;nk`I+_l>WIS8x}veSe*Sd5itA|5#QPM4{;LJnIG<3&#S-XuvM zqu&k?ySuF7&ah1t+NgcUfR0!MF(zYH2+?9>POw4G>a#1-{)=t+$DO?V|8f zzK?a0**{{1+`-HJ9J3*yV|Kq8k@hJ0$E`6ccHb39Ia0>MBc*+LSP zR#J^2(ih`o+EZlO(_}i+&{W=Es*Pd`?rHa@7uqIfBPr-M{oH1#{+XIjhCp+ zmuX(F(!E`yw_j&+-emFoe$Q{`e&8Nk=sx?$gNIRv95F|naYtMU$6SfW+{q{0DJR^i zCp@VqycwswS*N_2r+jJ0{3(ZmN&6xRyN~0x#bUR_V>TqC*QBFXWFnVkBbJoHzi9<8 z7zE6le3-THpEdWJG4r1^2^=v9=`#rFG!AXG2yL(qt#Sx0aShA&3r`FDm>eD%|6gsy z`VU=_(vtGB(&~!Ry2{eVsK+^F9v|+W80ncD>7E+xo*C`_ zItI}5b-efMME{qG!7pPY^P^+mh9{Q>rkDF>*LxQ>dzQ9)R(3j<_nVgwJJt@nw~o8N zANOn>_iY^wZXJ$p9Zr8g__lMfv3Iz4a0og#PY-`D#keX>``tzTBejC-pX~aMw}s3V z8fHRWlIyJH3ft#*{<^*j^_xb zT#&#Lg{4PHtkLAQ0^_wHy5M_<55Co=0vCtG1iWk z=CIkciL4J6M^?~z_meVJcpYj}$M22KXGU5~p00ecCbB;cav?6_oOay#s7G!`)Co&2 zeuH6U#(8q^^9YQ+^h&gvp=QURC(U~41ozEQ5powIi?sO{d~P0^o(`w(FKrwHPD1S1 z0?P-vVUYGwsHKSSQo=|skE*5xDUAy z@&6E@X-tUE<*=sZv-GwsBkDW8fq@w-OU4%gX9qnUUG+0vc$n|2O7!Lq4kL!nPfUEN z0{D>WpE#B*?S;gUbav3+fWb0KS6kQIsx(f05i$N$O|OZaDmLx=Vc(Ni%HrfXx1@(i z{6TXENv6y9PBYo+vPL@2wx!`-frHz=xm09D*MN#aJdK8qBf+e zLvO%Q>gDZb@pk2-Q$>=QGiD0(!XzPQI6oX!ja+junGYNw;R&^ITxiL06Kz@zqP?YR z8{bUPNfVSUfDGfphI8)Tp9X8hMAZJNND}_R44OMU%q_B{y)I7M7MNVdj5zBjyAY-~ z1HvoPZw47i14`aXvTi-UiNwWxD283i{&w);yRgAg;oLWaf_G%7jwbXX&5wkzHLDxZ>J9>K zBL4>b%b(%D`ocebT5#{vpP@AVN@YGr^Ll~y?KcLeWhU1(7OxG~4_o&Gzds1wVf(nt z9=Z20dY>cqfFtgJGvSak5#Wd`>4+=&h&%0=C;gZw?T9z|fG=@RAbwjkc2gvJT{LP{ zJYq@W<2R}B1?jLknb5CtAv5wJ)6aq?6obZ;gND@t2Q&hEv;*3816m9M8chOfUImuF z4J>jD%ykb+^$t$*4~-8AkBNx*tqV6iB_eKm%UWv6TWibPYAf37D%$I-IvT1w8f!Zm>pGemI+`0nBW_Pq zOK(eCH|QAa?C9$5=;`h3?eFRz=o%R88XW2x8tNJz?j9Kd=o%gE8XxVN80(rG>z*9% znVjgGm>8HG9h#mRo|+z=o*Do8WpZ|QW^NwD+rO13FD$KqvY9_O_5UnS-r3#;of*)E z3{XXL1VZSaw*cU$|LVg1`{ZxV<}v5;H{|crFu>sohvV|M%2 zlC2OVofv^6sN^yd^|ZhbNw7y5CZDx9lwF}Gs_3P!4{U`BtIN$oDb$LZ{etiHCMFtNK2zj&hth*X`SCv%d_EK*KExxq+NsJLc8l4r$x#2)>t;e-E8|X^>q0H1=ug>|q zG;AS}_D6b{sJlq3GrMf<_NmrCVk2=D2W~-mv~3{nd0jiAqhrtyrXQxbLDkM<4tKOw zObEXSC2BUkruy=ZID~V`ewCafRCffMD@lBM23Oj{ZS!Opw7i$oR>naJtUYO1FlV-VoYCFbLWy$+J$KFA)e;= zTUAmMYHp(hi5}P2Ub;#aC1e3fr_IUl7!7DC3=sUI2*X7(4CbPr)rl{PFMbinu!iMX zmNV}4wUG-tS>i~Kra;)2rBeKO*D$1a5H~%>waO^mgRJ)HS0l*k-e7!iAAQRGx9Hz8 zj2x2ja?)^skMFd2*BGS}~turd^kox>?6FtOp)Dw^$Dnk_Nmn zyh~PiFifg6f-xdDULqr=$eKSSdJCIbhzW?d^m5)B}S<03d?~a%cdc<9-yB z%YhO(P#HHl1u!`^JvBWuJ@aMe%U6IeUuVD0&H;d~e9)S34Zr}`BmjD|pzT@T7QuuM z=#USPgu4P5_5sB*pof)ZkduR^<<6#@nWfX>xl0Bx+`B>>mSzw4jZZ}Mx%2zcQi0p0}Q*E{^WfKDO#!(VrO z4aSlD8bNY>0e%l~J)`8;&tH##i@$mPUmDQ<+LHEv{3D=&?$FqhtNB?HyZ%BgK9SiF1-j>~$%A5F*&m`l!|uKH50y6ygKF2U=V zyrmyDkcsE9hb7*?%$Y3AG4?rojpT7J8# zRk$w6zAxZ~Ke?<2_mUA2`S+4+-rdzGw!;M3{O7`3ze=*F$}5*69z~b0fBQ9lfg-G& z>9VwP_Upv2@e2W^a&xlQ$HyzHzl~oY9xZ+~TVtzs0Ru}n=W-iIJnnt>{q}LkkNB%| z?r36k^B(5pS-8%KXDfuB(D4hP+s-b;6Zd;Yvd?w59jtf?m7SLf_KKlZ{ z%ja9rRbPr#Z5Ej-5=8W8UkW3>@pJzy-yR=Ug8O=%Q0qU zYcwu~dr=uduf~j5;_XOqGkxDIudO7yz~)RQC^pfqCi~FjWU0UIidG2KV`f-O3s=rj zO!ee2TFZ#DSvMAodT+d%nHFJUlAYWKznl#l>k! z-%BVHq2Z*g?Yw`N0d#soCaAOx5{R0)HTZ9IWT^&SgeBmp0kvZ z`@QNzJTF7_P8%bu#&;8*?b?%NsgDjD)OL%hL(em|8*bx1!m8)xkyNXI<=ot9P7))$ zCy%CLw%f`ik;mLdWV?B<2_oye*ph2+w%2*v-HAK~=9T|m_r0*(y{@m7MEkv53cS|7 zh@lr+eS&wlHv8@cniUU-(|%zX{K4Y?X-NJ_Ku#Nyl=g?0XkH7PN*JVuL{8o?q%E`2dlbLI`opamCptG9q(MG?@t6K9)+Q8$z5v}dZ zW9!i`1-D}43^-0!GlM>!JP2Xs(OSu6{c#aU{=IHpyH)N7wuk&6hQUb@u0)%fZOF1 z#LU?7#MelMv3@CpH&y8TKtmh(RfovwQm`8Y>5UGmH&;C=LV=qwRSJf{iU$qPuCKg* z3RdQ-2Up7tlsAR$(uyu_ED2#6Osv8rw1sg# z?{vzCJ`1r?T_la@lr~7&i+1AmV9%83HF>@tGm%C^iARo!8$Rg&QA3yJA-*&XmO{9i zG!2`|nzzmJeEg0-E&B?7xzxmd!U?1&lmEC=&Pnzq#sk+I)cRz%UVIk}vsu)|E{c*B z%lRB%?6ksOE-~o$z%2m}S)G=nYcSB^Ae9Vx?TNnd0Q*={faN1$?qc~?MuXSUsGcj2 z%kBG}rw%g0Id7#n6mFSPn~FG@szx3`oWBs~U?UhTIBbBL|5T zTP?EX2&Im8hq>CwxvK4w%0*p^S+xg3XzUVqtT`Itkv`_|?pwn7y?Bd3M4iJ{(WR37 z@vy)Jc~i~a_g3lW(R@qnG!4qT8TQmBTC^XE8=fD1)&kBAVzn}5$zj-Q{Y4Ez z)6w>qZ&Mx8^Gvk7CdY0n7aMOuHVtP9rda*QK4r8rnow6yeYNQ+Z6Ibe<91XXU{Egc zZ{4CMtDa6iJF3J*{Pc$H!;KP*@nWC+Epy`PnPD4>(gEax<_z91^8`56ZSS(p!@4z> z-$#}&1Z+2SFlwe+*xZd5Z8F3?8xrs@E3yq>a$1towjboIING9q|1ew2dQT<#hk1eR zVb%Ceb-WjMVJ+OIqh>Fwu$uhuSX$iKoI#A`(!{sf^1?OqfUQ4l?)JAduFjo4MmcHW zT2}T`uUtY%FuAFwP-NWq^>kQdP+{zpY!js3-uQ;g z%iSiNP~`Z*Z0P|TVt0h5734$gj28agib`sZ;y7ndgGLj3SPg@{pn4)bI#l~Eq4?q? zN2QhVuiX8nU#(-CFANCV?FWKwl#+ks7~l%v^}NT~_h=+slT9=k($8m)O_Uy|3yL02 zkS)y=lu>@l7&9_-!4{XDxBlGPZ?uW8#0{(qs(QOX}A zZ>?DM6J)LRl_!oNkJ%7neKn2Xlx`tIIBMRuCX!sNa~GKnv%Ja;+! zMXL|;`fD;Z<#>bZAg_W{_}2K^&t&>v=#);!if3#aEGXFXL#y+22bn$pyLd)G+mXu)yI&RDo^%{8-Tm0s_(nKof5_LY+l>aKl* z_xpoFXZf}Jvqz8F68hr}FFPnv4<^pv3lAn02MfGEPRcypjzo1z8GfQ_^>%B5KEnkxoXD&bNJt&pDlTY2W>L@~&3J1;vi&ZpFLH@pp(>?~zYj@aTxp zSIt*Ao!4+(<~UvOx!jtIT+1?D(qUb=s9oMZabr;>EarS`s&5={dLdxfDpeTU0&xx3g2KHr3mFpNh(jmJT`8~KFW6E4q$5D(&Vk5pI%*%Md!D0jsZ z&nO+wFJ7Jn8J?UIp15#cCQ*1VvlR7K^=0h5tZ_X}RlNfSy#%5>QK-FpmOO1vyxm;A z*|NNITD&utydf@8K33#DuR842v)rtGeEhh4%^Q8Bxn2c{dr&{|jqAXP5ci2TauuEM zO*6ttRP}P?@<^%hO`q^ne(h)JcAGdpo5d3$2vi^s{#E!qVrt-yLfIe zmB9?;!6zpHuxo+CT!D~|U>peyl*+){*+BzsLGaODxcH&?At5WJA#-#gB)(pybfHXY z=v4ITr*@FgbDv;_%D2q+VK}>?-giOIs+d}h6qf03vq`_`=W^& zhoWTgHw zt34V1vhs$WaRlAR2=T&*0Xn6P!-!G5NHXq7X|+gOdkLdXZKufyXM9s-?5H>5QK6@( zUfdEsr(%9<+V9o^-@`=h(nW^ZhkaCwh|G@sko_V6UON~*Cb=^-)i=^NJ0hktYHKl? zu_GoQKeRwCCR#$hWHLGsJ~AXaR=G0P&^P+?T5OhDY-44NyF^@7wtt#^Tn2Y+H+)>q zX>>mXJ|4$7&VDl1%s#%1+qR-J9%e1Rs4{YFEwU#%zPvJi**;+iKDHw}p{p}tLPDXh zGJLl(cvUSi(>L)OyxP)a;xb)?u7udki5QXiotMWtHggfZ+3^>~N&7xYHrYu%9Z9A~ zNwPS}+1ZI$XCHAKl2a>_FjkY-sFJ@+BO+DwE`oF($rMGuH2$hI z!82_+o+MSJB(3Lu%95$XIqBqG>7wiD#_N8je(C0t8R`siMm(8us+lii((TSN9L~T{ z#wp+TU1HMfNftb5mXb*x&$GhqvOFJVpv7dK(`N=xW$O54g`XuyFr+I*XLtA{>2ix1 zD$4g(*eRE*){CWalxC)wc&C{}W>iUKOFHHHY2;63{kWZ5ROMCdaHG^OXCo^|qCF?D zGdFB5w;sW(kteTxO_#+xFYQib&s3h`NnW*4ZmVBzdroerNq&%DzDZVoCPBUfNB-RN zd{_JYMH7$ZuKX4KJmk_B)eN7+&OR+Mqz*Xb?ndSw5q#R>`EmVqJ-*^M9P>lbWjBiY=f-gcMv< z<-;-NV>9|Qd?;d?{>&<#lg=Zt9_0;hC%V39n$`-(=vd6f>&7FM`^YiKqT`)VwdS;9 zNt8ngdTze{WU>26vE@$5CUz-@X^G;wiv(kyl%uCCqA50YsRBXSq)BObO9{WDqXy$s z(wn!^7qQ~SbOnBH3s}B{=b1Os`E5^mESWGK2H!8Ccs~&%-bl<4r z-Y8R*@^V(M%r&jf|4?0tSY0huDcoJbDXQ~~u7=8}s`b3G?n6z%dPNVT0}q5Zf<7q? zGuK}KCB3@_90u^?E~xru$~LYX(GqxE%ZiA_MViaejn^vXU znW-mz#@(+Nci{H=Jg97_w8QvW2pA?;Vaw< zaNjf=SnlbEH-7^|oN!Y!AMITS#+P2Kt$v)^fg8*rs4^e#d>QP#fDG>SWFvPC;0LJF zXg1Q-_UlgfGxB9K^9`Zo58jV&XEV2gLmt{^8p4wqdbIVi{bHCza~PX%gj;ju|6}j1 zf+7nWZao|ZcNhkDcbCT98Qk67-QAtR-QC^Y8Qk67VUQ+#|M_!rl2q<;msIslS6A)c z`@LLyt>@uESdhq`mExPGuAYme#cby)>D8)x_DVvwWm3#)xYb(B)pD4`Os0)t_H>MFW!cB@>SO3yAm3_njBTmT zn*G@N0r~nN%vwF)_Y1Gpvh1+Dt@XC)z?`m)7WR#Zt)gb1wZX0Nk!;(s&$US)-g*Gv zQpV?|6XsUVugzASEjxsjRh#vX%Z;Y)^{K0^LcG6wI{NF`>zfGQqu0p`pUnf=wejk8 zdXtUYnCnIMzO8}jouSX2N4^$4(upnewQ}=z{?ct2d|mIZ-RRBT$iY zkALW>yN~X+Pl0!e$$qLIdmt-!7+$jxDW|W`n@XX-Ft)r;;iWAMIEDtCajBlUdYs83 zj7j&Ll~Ems$sL;@o=fQN{kgWyz;`I`Id-Ansqr-^@C7ZRUo4q9DZ5Uqz&~KlxtMFZ z=W| z?Vj!J0q_hKNe5o|A&1cRvXT2$>@OyyCz2%Nm-tV-d;H4_M`Yk zf{|V{zs-SvUKRcR(e1o?eZBh3KFQzw(?fcDNdD(-_v#z>YX0@Fg5j#*>$$r3U+vDn z`rNn1I4OL)J^H!G& z5%G9jd%W+GC}xQo(x!A#IqUL-T4o%3LVl@TYj?O@Z4YOv-RSoCd;%f6+)nieLVW(O zCTD}u?@~oeUVqCEa6cdvo~H9DDz4b%p~C*-|ByOwt>0R&i^LGCOe|6~F>Th$G6SzaAZ=r_`GC z)P1i>pY$?Xc2N9$fuEmW(8$EMP^2=v!_HP!9Ao~O)|`{k!g4IH`*3waa129?!U!CP zb;8{+5KNTdPDatKqrOQpZ4;4$Q?x&RM9Kq@%!=y8e%TE%iQ^f-)sNHavfW*?LoDCxkE{lvL&zggctpS42(845aMzb83 z1hdF-ofH8Z<#@g-=0|B7Hyb7y25}pwSQdB_r;jMRSQJIEOqvwM@unL``I-+Km>Bv+ zgk+fa7#9#(KNT89v6eFG8pY*B*;G{2OqO~igtMCDrN5?F7382Hn-yNxwHs9Q{2CFsgm*|=G_7if*|n@<$dEPonU<6lGhIqqH zO9lK))o{pNYBostyToNtoMx)2l4EA|Z`YHLp8L>g&63-yy7hQ{yc8iSV>=cDxH?yf zan5biykff1TMGxLbs8LDx@wsrZp&lW{c`Np)VlY~6@sDZFBpnrJ@+b2#OZ2y?S*78 zblI73-RU^VFp68+3kUCgJAfpw9X`xvgKKI|!r|sv#bVa&vZ4oV@z7s`o@GCX((C-l zBwf1BxflcJFs zQ0#S@z{Y7s1%*x!_Bj8)4_lwlM*@hhb3rkIy9T>z{kI9W-lYrr(||T1%$8dnqQf5` z>1qR8*>k?-(uC{UZNm7^bHa?#doX64{AkMzL7d-zYaJ@xl!+8ix)@;1fRsQAW?lnhm6VDJWxfbm6#l}K=H1^ zN5?Pg{Q0R;bFBh4zOB+sU5I3eyvmTM=r%PGD%4hOW%Z4dA$+;#5 zXG(zf>&I8 zj!;NM2*c)LFE0w3GYhGEQ%8Jm7K%SD7K~ zUQo#;h$R)-mRl%R3zzGh^J@EWe%}aZO&+5*Yt-# zotlSBJi=!DHVvMEmfujWm;6a}uCxoe80vUiLi>=ZI!chzAcz2}rU}_rtGQTdL-MG* zO=DEiv{lAGda6cHKh++=(;ATRtl986fa~&E8_G7V$||Z<6B=Foq~g(>f19XtLAX$V zu!LxIWiMCpp_P>8(OT!8ZulcgXQ=XCx_s|aP%nEbYQ>|yPk!Fyx38xXZy2j zeLII^;LPPZM3mQXg%-OH51*0bnnn|~b#*xK>>F80Qwf}=FKcvOJ?K`ZHTdXR9pxX1 z!s;~#{dtl)f&iS3al&oH3u@~W2z5-}AwHbM{AVVvYm*ohWW>z=kM z!MS~qO3-~3W5;*#tKn1Z)%Odpcj!l!%!_M_4}$IAV707nI0^&1sZaYrG_QTM7Wc8@ zs5=i~(_NI8i_r~g$5gbm!$WqiQN%?9AO+JTCo#;#ApjVD_2E%vwIr^rWUvuXf-U(v)Tt-NGF1VpRW!!LG zL>;`%3hO@ix{+P|@Ou+0!RLz-|9#-0r#J_`^Y0Hj@Q5g5W#|O(uNs?;DN7XQ*EJotoe0mf6?&6SM$%2mjP0 z|H}dI(L?VsTpy%!K4=!;vk~wrEwE$M2Ww0OJ=JxN#t$Uv{SnLu2hoo>& z5n}5>bde#+OB_)M5wSxdLG3uUWFeBGA$e^aX=5Q7nL%07A;x481?Ax)lwpD?5ph;g ziR9i7&0$SrQU1q%fnZS_-eCz=b}b08nt@?5=V7HoQH{kOePuC&OKRFFQKiKpBM4!= z=oXVEu}GqBcqc8rK&i>zTQQt`y`5t~b~e@c8Sj>z@9L%c)6IbQYUr zLfa<`umyEc)*65?Tc>U?HAN*LTby`3bjrZe-kIa}Gt%$ty zSTsClcvfCuReca`qW$Bj@#0vbcb=!nsCO1aq_>Czsbo^Hr2d{ngz~7}p}3p&SX%UW zwsuPT;}{gUr2XZnoU?Ea>xAf?WD5L5rm}?bM{i;9gt+8Hgz;!9?s#eRM3r)Kd6i@; zx@3WjXf^sI)t*#P(|F{RWEJjYb8wP1EpySS*zq2t^+j^+D_EAZ6u8l3cUDaeY(Q(W zMEg)p`Onx+YpFDE<{srKtb6IcXz96h>47HcE)kh-?Qa+aN-HmH+a_xN;%I&P)L@s? zq8QYYbw#HgD>07NaKX^x7iw;^7pmp{&CX*(j0Wx}xcw%i596slMQ; zerwsmL)mW-(5~^!ZdY|LuG|uYREILsp^Wsr^~~iV(gx|w606*nv+Q38>7B)y`ys^Z zwZQ_?TNv!9!Yk45q~O|wt%vxixtYlpMoF$iBn z(>Le}A5}7+B6Bb%ZHDZDc)xU+i6a|jp+^WdOAlL+Y&Nd9cJG2tl8dZEA^&0#!c za=p*(34@~0wWGS=9*QVJM6zKn{q4C`K(40wN%psfMe$dNNXft$o~TmCsUkMye0HIt z7ty>0D{#I*W}Z4GiVQ&!3tN!_V;;w4^jEghebYP>9VXV(U+ks%pI1thpYz05?93qx z?S1nEvI~S{Wr7h(?C`%4Vio||5nQ4RbZi|I!wc*w^BhkLB1=D5Oy;?d=6Otbg_nMd zs4Pl_{1C927t~o0y6Tmbm63*2N$XPzuI)i10B+Q9fWtNQ8u_C!$EGLZ;kQx7Iv8DvrOA0D*jQwm>FiHK3t zE2fBY;fpR-irG>(!dr=TX^UG|4O@~-{8WuqQ7_u>3zdxx$mUNYQ~guC>X*G1)vXpd ztYN>j_EEW-gRqv{y_Pq?ZmRyL+ z7~iaxDXUrCtc-M}>HoG~C(6_?tSKeBQGBF{WxTNkqIK{~tB`I3EPKOTMXPhEstd2I z+eb42Z>=|Gp%1dM(+73{V*{E;yNFL~`0DqFDBWl^Noz4fn~8=&^QOYEHtk<+;FynA zPmICKg;jjiFHo+q6{9ql7Bont!f6T0nf6`ix}?HaIv=H~4&vTaXUo%JJK<|l>IsZDR0 zF6ei3OfJnvwz-Gq`A3(g+@hXhZRXdI?W^LQHy6bxGM(q8otG4zgRAIs_Yj^8;1TzsnG7bfcZgGgb0jT$@FRO< zsd^N0N|f}qDD;#>^gDPhh9suDaIyQO$2;_Ly9}m^w5qgpv843JyV0UXS4}${sIA|J$UFpP{Y+bU`*woXC!c!Jk3ok@{e|n1;Uvuj4Qv;~8)ESHF zV2dPO%)And{GKxr`ty2T%Upm(vD{e(z?j_EGW&TOdH3uOenEPTWeLClFl|{MZJ921 zW(hnkQ9Wvi9d87lH>sZK;GajjS~YH;g{GbtAzFIWSY`ECwFFOFFXdjnr1x~2aq_$j4u}h8g(9VQf&!%4X zAW}?{+w`$tm5JEEDcGE47B1_a^PyfLm|hHJUqx44Z24ImTg`yUE69v+R#_p9*vyek>5;*Uhj+9 zt?1s|;+ws=j@`#z&z9KT#$FAL*!eHo{kx8N6uVxizlle*2Mx2kj-|LkwD}UdY|*th z!Mz>Jx!Ll)`kQ0FTVrq4WxqUgd$4W4qigH^X%CglGKvq{k0}MhkaVY0<8a*L;5g-gMX_%Be&>$>bVMg`Bo4E~)6>N-%oaz&q-9znb*#lFV0Eg%TW^gQL1-@ zcXUg9r$IveQS!x^S?>;s?V&>SLAcc6H@^$=j%{c0cjm7e7f`KaX84^73L9UJ0ChF( zHj?@Bwf&xSZd~AUU6^Kc3_0+O7l;4Xt{|l?6+rLj& zKmGw%3OCHq7uggy!W*~XFOd+v4b7EjcX2mgHMfXdkw~Q1>7|#j*87+fcfDS>P%QUo z3ilX}*TkFGq}sjEFBP>?w=@n9|54X?0{4tK_skvPIQi)QeEA>^+^|{q@E2p)mwzA- zZ#npHbBZ20@}5X~o>10r>mF})Y;P&zZ_27~6{WqESZ}jLZ)I+@Ixn6T&|VWcTgp5Q_*RwL5qHIC0R zG+@Q=eR0bN)hl@Uz{-)38a)shosQ2I8&n=|x?bhd=740%CUrI9H$k>Dfap2f* zpo5t&)WX)DxP1?Y_j#>vZ>R6*46uIP_w)w1pXPIm^wsgp51I1IE<*b{%;xEf>ex?5syUUa5!F`-jR&O6N@L( zTHKRPBvY$3SfAaKP5oguo3FBXAfHKoalOAhd!U%h6AHWD)ZYUSM<$WV638zYhWnoX z?yl~Ugd>wG|KW51f`@+C-c=-FZA18o-g-T7cUIE zeSy$uIns}e`$Gc%_YictKxMM!s;|}I2$SCCjrDx7LaovE>W%GkwSkSg#zu?sph!9s z5X0SkzEq{v>5IVAa=F$Nw#*EM*Rg9J(pdVt*7lS8`EtG0>1O7Q{q?pT?;-Xhv*C7f zn2qG7>!VTY?_U(pTDva*@Z;^};pQgS#2s{*ecLwvAG?NqDoWa#Ll)I&mXnS zhC5N{Ps=uVwz)92b$60j;J4L*B+fbF z)kuLf)r~OnjBd=(3u%BNKAPqEl{ER=>OhvFat%$I%J;)!H{z74jo1sZ2Rq*zUDJa+ z!=j>{JkzElnJh~Sa1^M_zPfv)D$9uijq4n|RNytGgKCs++TlT25JBBRS;#(+UYtcY z#}$$?tGmKY6>L*UH9y+B!BoZ(4bQJ(QknVKM{X%Xmgy>^l-+4D-36f#pv zUEBTkMpM`CIz$~`v+QA3l{QmBRoaS*Q;{?v#Y5M;q*+N`&yOQb)j&m^X;E$1b8^;b zFX~0taaPeu-}%pkX1}G*Gm5G@bDf*MW;Wf*yz}$zouLmD`q>s3e&?Er-#xWWW8RJy zNzFKfBF)P*OpZdE*Plv`TNCxlPJ3R45yi_qPA2Z{;Qy1Nv%Y(u8UDPdGlQ39nr&l~ zW?~<&SSunCzw)jD7rH~WM>fZcWnPk|`!Sg-sPw)|uyylp^7{=l!-9rYH`@x3%jef3 zjPzF3C?k)z^NK}fH~U7dkB!!9YQ2o>(pyf9%ZA5AH^+`^H^R#dQM|%FY|^rQ9ZEys zh9kak(zmtJM;gF&lv4Qk;vaxCqqUbvRO8;A$+m6rw?oW~>%6?O=S}zz4g2=7oC{#- zWG7U2`E*7I$avBH4t!s)p@8Dq3ta(lT*s#QHc$2Od;xhMS>WQZ@3MZy>F&4Cc&FYI zJmB-a?nT|)Jd#-IcAcyS_4r(yXyHAa9Zd4`fA*)!D?c^p5okY;Imvgt%&GQ*qSpD_ zcI+tJmjEublQUVCK3S8s|){C z%0nzB_n#6dCgk7{`SWcA;-el!1ZE$OX??UQ?}1E9Sus6O0ftdK>onB7mAarl*0t;4 zXi+`64}%giI|)?9{SQLGVKo01!)L%qt?>!XA>5b4c0&C!;m;5K|Ppj|;#h#Xh1Wl9Lio?fEE1wUC@B z`GcC$7Hx=4;5McP)|fssl*jmML0n7q{*QgK0gc=El$m2==0g_Wz| z%<=u7w6S2NrUFZ?GR`jzSx@5MX=u^8qQcbkMFy-n2uG)EvsC?Ya?VBcK2+mU)Uz>A zO*w1E78C{*3)xWcg%t6JaM3?Rs0nX?a4{ECQnG2kbC{dUPw%O|qg1Jak-4&V=?amw z^Tle%Cp85+Z3WN_&I;Xy3JHwDHTU%Rnug};inj{50jY(0%%?IA6-$P#ij{71*cwMN z3XCyNp2lsqN{=HNLo_e)Ua6ECm1Y`22T%23rIrR>!zy)ft(D3Gm-N>rT65t{qNy2` z#<-&@<^>CdzYQ(TZ$xzZkd=%BVwkm7E_Aj|7d7IrXQlc!RTh)58dU@Gl^uNaj+NjW zNE0opO=LBiG|8K1N*wHyc;}|G8S8;K^&Q)v*A?zOGCLy}ZPU#wPCS+C*MY6w*H@D+ zr5RfTm~IU>-3-1yq`DTVc@V&cAXq|v@kMf&w8pe>b053R9Y~foa=51(FwjkbWA=c) zAiSDVWLzB_wzffhs5xH`s67k`^*#*xTMeYmI)t#xL3-ai3H*0mcA)%7GnCvJcgd6v9)n|t!Y2HILz12Qt;AP6- zynoZag=RZC%UY4lOy~1y(c2*qbe)td!y2HlMdG zTi32^iGwzl_e& zqlLM(VIkTd*mfO4U%7YoX4^+a;U1K;b4_hT+{cmdZZG4v`xwp`Y*S2*f#2lufb)VHIpAk?U-Bl6pX-V`x1vuo`lsa{vo|&GK7UwvUD&zfDv(sDF z(Y>i@%uY~10(K6S+didC@>~g;d2T$!jDd;CuYjgJIuA=+NIg%R>>%pME6-H1m``R{KnWW~4){f3sEnDU&M0kg3Dbsr3~fC9D_ z1Sl*ZBq2RFpss*q@y#I?Dr9enU|lw3+&82V+hva>DR4f3RU)DBF=Rm{;c7WB9N#A- zCt;)~;hfLs>>vU36yhh0(c12FF&nVW{2~rD0$`G6{4qi(C?wT2qQ}V-1RR?5lh6T; zD4>eC4GUR>io|?jI3xT!xHODZvOOQi36c+mmPuN;4#jGU!kiDqrB<~g4g==|C1XR- zb&Q2Oh^4Pd!`evq`bfFPNloX9B)3V0QAy>=O~PJDPe91NV2;#~i)D3}6xR!tbc;h7 zkD^0J(V~l#a}EVG$y8&H{LD?_9g5YKN!1$))Dw%fdQ`(b4&{MMzg>@HDuBg`1*Gj~ zhg#3Yh{H$H^G9%kWRjRy0jd*gr4-# zo{(Ff$T(8GxSOe5m$iAH2?U(v*Lwf5b zdP`CGG#oo1QU(o(1VAkYxRwf>o0_wig=`N6naT&3oCG5lO6gLD11m&AZHGgFC!VV2 z;U%Y;rxY=F6wWhdVKoO~6_hcdL*W35>OM;U0`r(>bIDEf2)UDpmXbJ3DhZG?kMq-b z`mzM}GZ8`yKWYn~{hTCKDq&~i%Ri`B3S!9S=844S(T1cvnpElR5UGLLa4u94zU9H! zlnJR+SuJwfrsY^VAsPGT)dA(1%obVfXX(1zsq5uwV&ysX zFun}cG82b7Wu&4?i8?Qoy7Ks}T8J9{+%j&4y0E6aI*}S!BSu|cKwV2;QM_DH2z60; zY}v?ORxfr@`&JqcTZye(**HS36yA4S>L(}S=&`o`Tdw<$PPF*{3Q7Mqn0c+hkVA)MB+CUT7UO6Uo*q1qpIVI#xZqbXq`kZ!WV zhJByT@tkh+IeG^`w+p1jprYHOFWI}NGbXKRShQK*zB*_zI~=K=Rj1yfw_OZ0JGQLZ zz_;C*x!NhPStY+(jjhqMrQa{8*{`tO1-n}BsIeNjKJ&Ca*R@$+zuw)yHaWjOoUlC# ztl5gJxh1E#o1nXysky1C*)=`9N3=VWs(H9yJDI0Hu(X*|WjNGjI8my}QKuj4pndHz zd2p?HeztWsy!yv&`$k^89l0Jq20|vAZFKh|=tFQCfB!M|?1S3$lU{TdLIqf|39J#9 z1loPHT!TCqgTAbMlHU$ZOMP+It=if^0F#a&2pECHV~`KE4zCR5V2rm)cFT(;7Cj;()Mt_ z7?DQpQD^Oup>LxBOsY5zc71g~s5A_gJ1D$W?T|dVP~RY&fQ$X-v|NO#Vc7 zV2ut49CyD4>k-A7APF3hR+x}mnK0E#@UfT(f*A3F>ha`D5xj1$Fz=-%n83d3iJ|ZD z;_gU<8^o^b2tZdoh9+>J@4rYhewj6p^OI5p9a5A^P%_+6axfp~Fn{7V*m*Dq)-iY2 z-O(J>Q%yPoN*d^}B2=3k!D}yoxdx86Z}$ufjug;K)Ns&DnYZ*Ljj%Ki%(?ZS><{}} z%&aF3lq}2)6pd`HB#b;P97v5Eoy?rS8$se8*eVkg^Xl38S-8LIxV1Pm|%I^s+8a9pJO&VIPnk!E zTHQnZ%g&JO#9KC3AIy@NLkjGiTJsqNTS28?9MoRyG9P0tUtE(6+{9ZeLpV-JIb3U> zJ+O>C{a!qCTUMhvgw0w%M%++l-24JseWG5BznXmy82ujd{Nk{!UtGOPpS^Zm83@`i z$vMB{x5ZsIQ6N^EiL^VqlDm)As}E9}fEA~$QyYqBn`uy+f2W(rO>0ChVI%{m3&(eV zzb&A*4SM9&dGc9$J!s=Kl!XhH+rxk1 z)kWGP;x|{c-_x#uI-GlhmR6!Y^-NVgj6E8sx6?no<;OJP&_8y{>9cqlNv(;UoS7H7 znO`rzhq%(CUec|^GU8q{PPl$ubNzY$r!v)ku;k&3)sY`ZR4~}i68EnFyrX2bDEs0l zQTz>5&NEl7Bg?3x(2TRls{=jI^H0=UZl*^G$!MYQt9{`cu)L$djj9~(tt7~_bb16Y~Xkuk~b^xl!<#g$w8wy(imgVb3w${i2Q-r(2KK;c=(&yy|QS^mo_Ud^jv z=P5JHvoVgl$*QAil)25Vy^Z0$n&s^Vg(u&Or@8jMmj4AN`68>yywZ-R!|lCkp}AYj z%bGf*M;f*luCsTLyRY)SPg>vY7`=VK6!msiWbU;e}Q*{jgWs~(!y z%FesZ?PK(7u}7_IY?NnwwsXADJLTZLKdfsY?xQ!YYh>Z08>?%mk$0HmWRfJS%d89V z?mc0bplHkzVS#Qhvt)wpGezR#Pu-1T>%VNrx8l~l;>Wid_PMO(52@|HmdgiK)V*E{ z{9HHl-{|Gr9PNgh;@evB*-AqO=k*8Y1p(*u2Y>wB;pr2G>DhVz1ZVZ%`9_>@^zjq= z?!y6u2>}Nz!2Nf={jVT!M!>PW$gvS%PZ)5@0|6clI7(0?yiZ{RO-Q@4dYNf+6=_z4TlS0`6EKZfW?R zSbFb%`&}RO+#mEj|Mq*a<9{~ly$I_C)9(e#;(sgcearO&`!;@c@qdi=ehl)1E%ttH ze1RVJ0)K&gz4U^jg9v=E+{WqmgF(TP%BbJw3WXsNi6yJ&?G1&%(*bZff%U}0p%AeC z@RI(dJ7A%gniP1U=SaJ?MW2VIRNmFp>nhn|7`dK)MyLkKBZE* zr0uEkc#6M%g2kBdd2D40weo4~kdqC4^9_jOh?LUb(PceNKl|r6I=LVi<;}LJWcW!0P!PMoUZ3X4{TvJUpx(v?dfu{Qg61> zlkMdKjno(BcKazf4}CByOjwKG4GwiM%i^C01OV3%cQX zym#8og~YbD2Zh0njt_wT70fsQ%k)i%f@Qe0A4H`3um^(@$8`umm4#3ohN4i9&x3>| zt{+6#NOl-TV^H25!8K487=`kIR~jP>ahCspRwvVRr`^RuIbGH731$8$*xGMQ*)etI`zBF*aN@i?E8Ma{*=fP553JoJg zS&r+7YDv?KjE+(huRB%K;m6VM4k5a&q|%HLZfQCyogh@H4f9Ea)^*@o^*H&{6-5?Y>^}Rqs_dJ8U0clwN*F)i(u88qUhF*wSC-pw?(FG*_fq{)S{ukKG zwk}AL4@Q1OgKb4qWd15-AsmLPwUKl|+P{LSM#(5&NA&WS5j-S=Ok7WVOitEMLyouq|aRTyrvj!&Yh# zEd8cY`1P5*sraLysZzX_nyx~ME2YU!Ht7wGN*;*tsjO^Oi_of&aXl1WUZ9JRT@I=q z)4U;VCHlCb)5;vV(yd_mqd4K1o~5FzYO}$XZO=EgXn`v?<<1h0VrgD^Ve5H*#%fJ2Y`(}bDo3Cnip^JOni4;VOb(Y6sD5kbpRn!(Sn zg^(XIBlye-i5;W|c|(z4cb5fHkgi9_m>2xuwGow$iU-4FErOJ=kr1PnTSB*QuFRL` zcqvG;275@`2$8jJMEkuqC01hMK}Bj_08CunTxK5`x|XpRApT>|T*{3g8f_GuT!dQ6 zd4V#dy-2e1VBb6qVov5CKB&Y5Qq$L2^CS=sWEEDR;@-kPY3 zr(u?&XJSF-)Ht3}BZ5u2Z6Xt+I3YdLl+=k^tmGVhP#`4QZTIv;rE2KMJvUYjuYt77 z0$dTU>~DI(3M=O;%c$f$)=UqsamlZ9EHEHsmhl_8{(wcU(=nE;g__=WZpYbW7@9-s@T!iH3wK)J!8w8qT zj0NrbQi#@?2-a$`F__*tkHdN$i0A`R^z&XpLK)5wIfQa(Z!uI)9@Z2Uqd=1U*;YgI zLkXjBETf~iI%!nt$LjVmHoIb?OfT9&)-$G9ZajUA|9xf|x*5H|wvv4o9F}tq2i0i4 zgM)u(B*A-|n8FsSPRZMNHfxefwJAn|LxQx7`F(p$m1Rm?)S&{oMj9RSU9p<+#^v^M zG3$4Q$=)Kf_AxL;Y5iUya8kP_9xJ21fW8jEwAofiHYviFn0ms!-P*B)?kajr)r(&8 zawrNQu|?4Pn8#s;3{9Rxgil{$y|Pf`>9ww5r^fL@8XJ;SYeUKC1L&AVOYok@Z9tfG55=|;2Szf-T z`kRamqpik3bDGdk{O62LDDzGMJUwU_U$2r%eTyTtQncl$M(k=?umSopH>65=fxCT6 z!IBDvlf<+?y>s}bq^v2~@{!JjLejvZ>X>;NEg3d>!ysHhE9HFh@=}d*!G+X_c}nG> zvF0flIspf7g+_^`)_P=)ikijVaO9*SI^#q7-z-zM+Vtr-F#q)5Dr?2gNV+v#hA0td z8nIv}9FvbLZ&^T%x_QhZ&T_WL{B{xsQLmc@7|?QI{O`l~C6id4F+)I~=}shmc)`2Rkf*4b_oXRE&z>yy=4R&h*Rh)t zZ=#*STjqXd_RTO?ltYYN*Y19hQZML&O+wVi7MXl2bFq%C1qBP|q_xM}WwwoRN9N)4 z$V$@vk&IpFi`HK-tTvRJkW3HI&l3#0Hi6y8j0o``5wRt&^Cpdnd1+*`b1k0vnG3it z++kdh{pKqP`y_$8$Qj}6?`!f_F3oT!f2_m>1VH{vCkpi+i9kLGCny~RJ6I_NlPEc( z7!9Wqo4AFXL9mIPzl}?vPe52$RANecUU7L{efwB_&wTU1THDA@`@~t-+(XygbJySh ze7gTW_s-wXF6}O@Zmq6w@9cb=wf{q@`UcirTwHwHv%lfb|AX`Xje!2vy?sOK{>%9G z@qYo+{r_M8KYIe-=Dz=@Xa9fwr~mOs|MRl{i!|^tFCQ%A|AfQMYO4!`LIV45SMmQD zHvZqj_K7UXZ&&eu3ERj2gToaFay%3;2>f;xCsFJC?_ew!sequlO7%v|t%?5#+w}+k z+f|IiCG$VPSW49e+0w1w!glwE^R53#yqfSM<=h4Q`}DFx2(XL&@9O>+SFt`DHkmcH z)8vpCoBRLaD(-Fw{5w!3jmfS_^gmt2Zc_c(K6a#a>TP!i|K%#it=v5x&XmrT>;9Go zcIL9g#dddoOT50pSV)yVTrYR03zd4aJ)a}@6SJMU^1VHu@AZ35bnux~-v158Dk$Dj z1&2WH12Oqj`)@E7174X52plc4fV}~i#DBn8l*9p;rWpP|$gEFyAkd>v_oEm`ICUci zJShK5*iK@_YRi@h1LbdW5c^-kcJC+md=Pkb1rR?Sgowlc2-}OD#1e}A!N8ok`qFR> z$&ONtQ!S3usj1pkKuE2T{nNB#B9611mn}*%bRdzzph1Vm3$p#8sLN8^VV6$$!(jiN zbW5ycL0Ri&`M>GLm*13enyaQHJn01x5a&8;Xu>O} z@;`G*{{dqyo6yO^z$*kwP#J1oe}l0umfBf===U`cwx88>eLP>-$vrMtg7n~1-Cn8m z11oO_;Cs_d)PCp++={(>x7!V3n^n~dfa=loL8E;&&H{cYd)|#umeSgdK7r}?k1=NY z`$tk#T0czBH+b8CKy%vngOR}z(zG@0TR;A7IhR2Lt?L=zE#D)ids>X6mem|kHmiP0 zR*egNTGkKqA+euC!D?PLFRd=LLVI-Ev_@MjdERs$EnCyKeTP~HLKG}rz3iYvwPN8&|5mbRa)CP$!{U{>?*SW?C0`)q5)6(A89_216QN^9QEtG>Zl z7j>ibUgrp$`u&h?CpGWaT`$+~H+|3yACNy;G2iaS^qK=8aos@%9_GXuJ|7p=>^`4X z&1yfNH{HI$Si4?*0g%5)?STKdUF-vXFt*+R-)~31!B~$gc3+>bC$-;TtU>mE zmP|hE6P6HaM|?23c0RnBgfLReZ3t(UKD^a8Kl&{`1jq%y590PZNQ`qA&VgQl8YezP z@(spfmf1%wRc|L3x{Fj_%tJ396YbMriqeNS`f6DnW}dl0q)p*Dl08 zSsme6Pq1{zD#RaFALV)bYwodGNLc$lz`I=0-J&&@LkNSRE7Byw^*} zDk4`?AD8xI)=l3mqO^G(S7N74E|f8W;<1=em4ZvDh&}?-IGfOfg-dOiBKtD8nAB~6 zP3wR^{&YW^G<1ahGays)5pFSM$_|^(I0ym))q;coPY8PXyM#LZY|0jFB9esBKXBwH z2=tJA#^O{TTVwgOqT@p5tq2+?f`C8#+JpZsP`LC9J>K8d@;>_x{xs#-!XIT-KKBNW z0_=lJ(jWFQUqTb)V?bjrNY1GMN}W;|%Yr)GQ&|D^5JpsdE&+|!9|RNx1dNt(Isje( z^otRj3lF3q-uJP@xuIN4Yyw4s^82>N;z1$i=Kb7vi@)ajB!fCY4rC=tIb*2P^QhzP z6InnYKf_p2^uYqM2th&p%M}yekV0a^E0knu66bJcJl7Y%bdHpEAOhvmBA2R&g(@{) zI!Ib@2rGXH3V;gbC3M6-)%@h6(ZjML?FCaM2_&-+gZEM%A{MBRp0 zABBw6T&o~wug#FHj^><1feyw%1)~B6)DCH`HvnC9h~_IT-Drq)?y`dG2-12XQP+h;J!Icq)F{NnSB;S8@GhTq~4!_h#dKjUrlrFB6J^b6sNrrakd zb>ArAx?!`XJU66wo{&L$?oy__FDCWwHnDnPlI{GUFLS=Y{`i5B*99&Z?Sfx0^uxt6 zy5n5xe+a4%VD}(~&{+4vnY|9quQ7(5m7@KDH0dRjbJ!Eh>P_3c8KRD@cNCf0e{F9Y z6cDVBcB{g{nUp61$%%+yVLr?~{WB^-9}{OIWBdW@Vf?-EicOL+*`)pHi{5BYoy%KK zz_I4T$mN(a%9~Cj%|!}-J_njno(s%^Ee);Rx$Y7oYl{m>+xkT%6SlTGzo3|AwdK zcKe8C9P%ZyR^?pXM}gw_c3v#J>Axu2C!Fr@KB)9TUZYJW)Z`wD4U)4!DE-0UJ$ute zwNqGX+voI%_ghRQKw$)^KyX2Ry#MR+CEGp04+1<^R2H539sL6kCV+zZubeT~<_eX5 z*IY8U$kc1i->WP@;OB479)ES>m-{|*C7}EAHeZNX!0ZKX7_j(`CS%{v z-9%oljLNzAf$!ekBzXn$cB%W~&yPn=yBSvpeCRfIpB=p`J|sT5uP;oEmGr0n@@Bj< zvz^`+>-<$0;yza#{wFC48Ycj9dk_eF0ZB7?yAZ*D6d;J^@`QCrpU@yb7z5x4eZ(Ho zU^q|-IBoFuY{APMtBO&kiB&h%7#T-tcaKoqQ=F4)T0%o?k7>gLv({~LR60TuQ8 zw)@iEAPs^b4Wb}YA|cWxij;_mlz@cN;4lo`-QC?V3^jCzbc292h%^HX=ZpU8|L*_$ z?tS*z`)Spy8u%Pd??kKMs~W zbHoRuM6SH%yk$UZsL%Nlg)+_0McbR%$!nSNgErI~tZkFmP4CJ9ZhU5LaPqD&F5p5a zu=i^~I;9QlEMWa<;J9gE&o?U}96L8{GZ&Mfud9Jj?4WMupyv*@Za98j@gL4`iv3-ZC=%$!%I=)T99u1^KG759s__wU*Ozb)lq%jc~tr1)bhJ2hzru*j+mk%S?WFxsvBhS)-3kn9} z=C_|rM-D~%1*73gaYofgqe35Y+zmsOpSEQrk@OltRXvWvtVMmP!_KHKp*3yG079iH zLp2hKG1iGOagH&IkFltWv7C;vK98}XiM11nr2(NnpN^(?L}Mw7b(@a$IFAL<#DPWP zAUbhA&T)S6aRGI4L3Oe0px7{)_z02sD4qBi=lHnz_=LLnr0MvS^Y}EHgba~{ES-cL z=Y+iYgo3(+qUnT^^Mo>*#0rtbDxJg{=R|0HBCIa4VLGwtJP}Tl)GCtHu9MX1oYWnk z)LWO-KbHLN^`oz@kn_r-h}{&!jUV(wS&8?ucfv>SnOHWN;*8aKSQoW-|B?8T_=F z4@5Hsbu)!rGKCW|MFA(QnM?^prX+2av}o2--K=LWS@H>4im)u@nJiUAmO5?rbJ6S< zy4hMT+1d%&y0C2hnQQ|@wjphfk!X&wZjOmdj#)yE1uVyMCdV3)V?Cz|_7H`l=> z*C`>_1(xeJlk0)V1<~e#Me~q=6PAxlo?k*<04y(PCNBh$7e<>OA(|hhn;+wnAD57y z0LxFB$xlJ#r_mNqug*7gP(1b!5tgvAQ z(61K4X^UD#i`sRII$eso6N-9aMSv65AfjlPws=Iecuco=!ligBp?C&XJU3IkfGA#~ zEm;;VS=B9Bb1B(KDA|IQ?97zxAxidXOAka#k912cbNm@Ol^C?laOClf2D&?~2OEvHT_r>!ripDky+C}*OpxFc4*hiEE8nVvR+8 zjpb~O^+k;hU9Fv1?I*oj2iIDs#9Ej7TDRF+kBeFm9TY4Eh3G+jT%mr6(13bq&@43M z0vbkF7a>*`rB@f@S{IjCmr!4qG+UQ)QI|#s%MgQQ>A`YbVR?zLf_hldEUe@LRz_D} zAy!|dS6|~=4^6Cx)z>%7);C?$!|57Y#Twf68aiDYx)U3E>l^xK8wM{LhUpqd#2Ux+ z8YgI68>eQguWK9UW*b+dNLOA+Er>M%R#vE}zmA7+ZjOgiQG`&xpgcv%#lXM?5+$*5 zh;VR$P&zU^dUWc;_;9&drjsG0u^=C{+#Z>R3Oon(DGe%EM(-DsHW-2k6) z&x7}E!X}L}mQXdj3N6P9Lyu}R2-G^D-YLBCOH8v@LYsGTmv`ELcgC1^=A?Jlw0HKb zSI)d=&Z2wHl1t9AL(Ym_?suEqb<5mM+q_Ntf-Q%_9k-GnUKI!a)yJXG(`eXPO#OLG zJ>tJ6wjOaq!ym*oAmSSl2~CJZfM!H;Ga?0kp4M`n-g=(VdY;*Ko(0f;p8boQ_Ve71 z^St)6g7(wG_LHKvxWtz23r~jTAK!1oBILU;Qeha{q3#&9c=?0 z?E{@1gWX-jJw0Fh`o;!^CWc36MkW@~emj;HJXncAR7`74WVwO#K(G(pC!;wCNWR?G~LtJW7MY`+E3 z=KB65Ow0>!+<7}y#3!`%>1KCT{%EdxCJ@RSZ4t#EN=>PMW@bMA>v(8ZP*KYpi^_+& zucmmm_AMo&{>E`Ja6Hs!U>sLlx>!$ojmJnY#Q&|$FPT=gU-;*8XBg&_kR8FG@6}O- zs)KVsAD9e2f8<5EaeiplL82ybTtr*2@wG@V(}TlxDZ{;oZ*t2wuLeGu_HmuhT}Q}f zu+_gy!d<-bi6^qtdpdaIpnhV2lf72?ale(vlqT|GK_dC|lSht}scBHW+o|LHh`qrV zXqD?i?TT-%`;3J3{8|h98lftF`gIp@p?&^$&_MJEn4-}6tO4Hm_pAsF{i6U~O;MUyX&T$R?_-MNtHYkjb7JOLyh_d{kWSkw+$ie|;Cg&6e0Pw)nhV!cvOdMxq?Clo^Xa1n zx0Mf(aJCg}vZn;)U5`2$x#`Lp5br_=WrVq{K8zvJ(Mm7IR$6NcK3^2qHbl7UmeS%J zc}cFH6j&P%U5$QtjJC-#EVwy18~5OuS(xvW1JRdd&Av4EgC(4_ZTK~bS$MQbr*Vu4 zi8W+-%HQ;K8-_~WmdXCv>AtJ+v{C&$61B(wo2~DQ$%-UxGLNUx1Y{3b)(Ek`Nxp0s z5@DI>B0&g!@9L9ciSZ>`__R92NclAJ=&gqhs7q)`yA7Mv5hDK32zjLOltgyvYt_ep zmi}xMBh*e55tLjkY@q1hRD42W8WK_lGV@0Wh@$riY2}_DUc_#BrML}6p zRYT{6mVuVeTOGZ3davIb7@EB`{_x(++QQP_+Sc*2lZUGZ1O)c?@(%X#4+{>9jf_rC zOwP*4Dl93hsjUOTXgj)k1_y_LtPCJ>c6sId=K3ZOGXVro0O1iwKY^69!;{|}9-aRG z{D0tY;OO}5pBx{b9iN;7Id=aeoSq{7$=Mm=?Cj$F`~nERLm)1J@S}gr<>l3X#?>F= zU-}S#mVSEqvb0}WN%R~U>3-ff_YmdFGdh4gcHK{B>X}`?Is@jU5QRuq%>wRUEwkyD)YW(VtWz2hLHoMU(jpIc!r{2ypTB?smVnFbOxxa z12C0pc3R8zJ}11cr{vYGu_=B2n2u_%_Rr41Vl(Kk$c&2zdi~Jye{=@o1U@YMj?9n= z{JS$S;PMFvo8)O#ib{RWZYR+*Kafp*?T^KD!hRMco zj!%caU<=7Df#c)LP;dg1hb6Ij(Kwe1x9<0 zi1E>a;ctES-Kl4BghN2Be#Fw9t=Np8PG(SPiuhkkkAFQ|@TJT%r11}Phf0~&m4|tv z%H4^|ideqCY5ZPYg6+L2VHioK51v)eT?Yf{lUD0%)?tIt{~g`l{s9xwO|{dG$!PidW16_dX487=`i) z<(N_%qJ)ExNfqWT!NL*h%s2#b!`irb!Y;W5l*;Gvn9f`jXqe@_cm?n1)Wf9Tz0K+E zFGvZu0pa33EHkb6dTVA1tB;Rzw{#SXE&&@K?lg=|W#gJ$8}xY?j$3~cz*RTq5hI0m zmqL&j8!Kw5BkbX5>MowNGV84D@w^IOUtOpJXL*q6FaRg3)}&e zdoCxhDX;KCLGh)cl9r;*;5Rb5pzJ#~%O8qWtJ>?{)P|^z=>jUz-{jn7=W!FnnwI*2wCev9tL{kh6W&19*C1~g}1b~wsy3&ceQtP zcXal2cJ_95^>ugm_w)?(^bYp+4FUA^4+He~f9)T*VPIfnVDJwHheiR00EWi^hKI+8 zzm9(e7?~IunHU|N937h+8=D#*2bi9in4X-RnVz0oSopTGy1uowdy|OwYq9X(ogx1@ z`2f#>Y3K9|@p}&WGd=HLW`n<8{536Xl%&;r;*gUG=9Q&OdSNnfK{#yhv<2WWTNLG$ zue3l4Qp{|>|6GQ%SLvH`(vYTOx*iHUy^9Y6H-Dkf_PBH$W>ZZTCq!iNvkd@|NJ7%| zu-+H6j3U&>iY_*rDtKs|-76<|KXPZmCXKm{4p;HR^lT%L|Z|7%#$xwCi)@bHUblxe6ZJ)jdfL~ zp8i4o0s}LP;)Liwhs~`LxTS?M%|04D#QIi3H1p|#9F6*IHvOWRD|j?4EXX8hm$Ox} z|7|Xjr^DOKm;PP!O=R_W3baNmJ*ls8(b0aL7yQbupFwd!y@f)Dk_+Um{WsMCs0{eH zc!c=)Bm@LxghUiX#J7lvsfbCaNl0l($!JN*=*YCMG5>F8=uOV+jd~Cr_S8N=ivf z%gQ{Jmz7m|_DuPioT{9>nmiCtub=^B*C+xgX(}mes;InFRnt;a*H+ii(Ri-+TvK23 z#p@R@4PI&)zIydmTgOO8_nn^p`_~4hZ-B+Hk;OY>%l9VMre-$g7IqdNK3Q0P{$O?U z|KHNu3BbzQ+1keCqph2box81_hn@WwyH6nd&!A7AJwG{sKRbXO9K9T!AWqKS&Mp8x zF0Q^VZoaNJ__@0Kx!vIJ?(v%dk1xLf1%3hW3VH#PTmOp&D72xjuBpDhxuKz@v8lDWxeX5QXldzeZS87n?{4qt>FBtrCS6^9J-q{c z{X+wTUx$ZBzmANLj!uk?PfbkD%*-wTg;e1$Lg@bB z$NnL}@14beQ7`^OjR0OApWIZ6lhc1G78k!3mcN#ef2J$r(sS^qv^ZgqbMZLYq|5ja z-X>xlU&Sl-Bf}J8_Swek45B&vw!Ocb*5iBY^8CWIB3sIv^A+qs zyNN)jZj2s=u}$=NC@hMSdby)0C&>kOQhVj}W`xS_>T%<@ZB^nmSud47XcK0iaH7X+tief`WpgqN0+LlCrY0ii(P=s;Zirn!38W zhK9!T=g&1YHDA1V@$%(MEiJ8AuU=_uYwPIf=<4d~>FMd~>%V^e+Q7iz&6_tsw&dHl zZ;gzMfP_h7W8?Sl-V`;`Lng7qq&olv9rq?S64kZH*I(K7aktZJ-(=a`JxH}DT6$fJw25?!OCE;JlIRs z%S+u0@*Lv*(%W0d$LF=L?>j#~Gk^b&0Rav{K_0=uKL0z`426Y-#l<d$9n@?L?Kzn;=M@LjoPu%d=goTCZt?iJ51OJm#@3V8r*}2#M9Onox z00h7Vz|~dgWzxlE=EX%G;-Um`QH4O%oFnSa5%uTi zEx;oJQ3t$(KvW?vDsI*c7bw@b^z!^~B%FUPG6#3yRa5omsf`-`8%*WCEa)TeH@8=AJomec)DcBn|B#SAjV&Fxs$z?oBr+KPN zad$Kkx%Rk`=EwS29DeDHxJzX$lT@RFZX>5({AA*ftUZb`)#Nl&p%sz4vn9z)dG=Nn z)vlFyC*xc(cV{|+bSlFYeF4YO!pV}-#smg7N42!B4$rS57kEPD@B2Taf0&&+6j&P0 z+nuPs6TV)wOM*Z~Z*2 z!mA&H*Al8>B>Ashg#nZVlw5xHd%W!YeC&e!Tq3+&(mdP>_wQ*62pHTK`N%Epbn zp;^bKKX}(@fz@P##dM3sbeqL&=TCN7%=TE!f3TSUWHCPgV6`~>2f)jpf3nYN@h{x9 z*uVQ>|E}c$oAo)n%_WBolG6ssWrO6lLGt_wuMLvV1_?X@?*LzA|Ie^Rvj4^o$zgxR z>2SphzI+&UDV}jDk#i}TjgZMZl`A+_$=O#=-_c0k(2Sma6+EC5+@%-Xsvp$+I=Imw zxWO=_@ojL^yPy`6fNpcYVQa5BJCC)`t~(A+fM5Q;qy3@N=L2V_0~gl=Fyv=Y*iKCH zMrQ7EN$Ffo&3I$OU>m%ztFf-PK5w|Se5$WuX&AaR(zGblHh=bQ9(8SEOuez~srm%<;hN zasTYeZwBU0{$geS$>HVM(dGHk<;BtE zCBX6J)#(-T{0fP<0{oef$Ri{Yc>JFkS4bqFYzBV#6p1|k^&1@`kpKsO^84kVdk6}g zyx&Jl`rT#eZN4Nd67+u@Edgn)wwdj}j+V~LGkYRAG>w!wIKqLh!n?mkrw~q#^j<)8 zN+iy)G5x^!pQ2NstFT#N`j`-JzIXgxi=tfNZ_#OPAD8)VZ%wh3l$`Bjh5PA$i%xHj zmKIfhVo+7Q*Fmj*-7vl+U<`epg(Fp0@%^7^tV%+cmb@#YoP>ejaXB?0I>0^Qyk7$7jz>ZJuQ% z={uWGdr`dA#Ck86CjC`_+(;`gI_63wOz@ThIa)5W6BkKTRC(RX6LT%COi84qfkU3G zKNlW*=ChIM)DRBc7}kRLX|fOGKdWfKWNJAH@6w}e19%F)bO!K*W+TbD6D%CU@ZzHf zMAeIHd}{BO1aDawnlM1`sF%m6B=W#O&rfpm#?ka>Dl*Xq@mnLKHi0q7I>BFxoKgCKerDnJ$ zxZ6#mG{5Codxtk_gkjidMDV@tjzz-ZmL*Tu54_#dafw$d)s}LB?h(ilW~QIS!UI)2 z0{jS@cXm~Cj7q$|M_l3WW~s2xi^lTocGGz*o?RY)bl#pPU1a9J|BbX#ot3adPBPtm z?8&%`Ik#e#edJ&7&JM0>`Xb%n%P-H6xq=Wo^q6Yz$PgZUjKfFdy3p1-En57uL6XF?UOaX;cgmronXLai>KcH%H0@7Fs(s8gg zypkenSeg>H-XHpF0bqc|L1{1zz zp}euYHeF z)bT;=o$2?~=)+is7IrZn1R&G^b7et1@*q^dt_O+Eou&@=6Gni*f;R1NHK)VGC4yYx zE`>q61c9WfAUV`In?VQIA&|zJE50r=6wto%XBz8}2jValp=>IIsyGa$Jxaq-$&)6x z81fb!OGjhakYQK+8lX#&PS}|D3>`M~-ufnu)m%z|>v`ZaLB{cYGlf^Z&x0eXvPr(L zGrqtZO_%`;v+6gc)m(qTMaIlPUfEon&AH`PRmiq{{uEyvv&bcZ^A;POUj`?QB@XIg0s}6XZHC= z6gckFTR&XZ@m~ivF{7Lf-1DG<6Q8y|$~$Ba)TT=1+jg7f0RO6mmw0f`fuKA{koIDO{$KcVEhV?v=*| zI$cn71m6K*|4yt^Dr@}{8IEe>jb4;ac$zF7z4FZfqk*PZqpU)bk}fACsHaqA_*rm2 zf%g4WnzEp`_hq+=O1`+Q5aP&tXD)_;Gzl<9BGwee(HdSY;X>%(aPK9K*7uDW(zMb` za`_h)8!{IUzh1r;M9GpQ6=srrz2}W4yNZJ1kNbX<^<>*?>pqDkwKh&PY^?m$V&lP& zaRp-gsW!-xWrHGJztgSC0UX|PrtR^`TjjEbZwakDS6wDi^GHjN6W_3Z!kl_VR5Sp+ zENq@>ou#L>uQ~U$x+^GyQ=C&%n+@50K|H6x@yxpxJ9yG+_tqR5=_!;dbHnqDYJLj~ zM9D<(&7>i5)XnPX3G%4%hvp`Uqh;6kiHcGg?Ya($fhoSME1JZpco z2HsnbPF?RKi4C@CAMP*M8-_FOCgMvOb?$u_{JCYBaCmENLF?E+19c6g*Z53z{an%w zXivhU0WmUUe-~F^ zqJx;rR?QQBJMVw=PLJ}1RW}DrV#~|W&Fy3HZan6&CAK7!C?#!L`TTuIqG1y?#Hqlv zaZKOzaSwj!!50$R+SQoq`td;r&*5(<8hnyyb}cc(*b|lv@tr+~cuoxu=#TrY8{yvc z7wwb!h^ocYt+&XFwjk=;W%5o~OIv&-HW-;UW=n;wABPal=v=ecs>cI`gCC<$=`M6* zz2j*Z=l0&MUVx%8uzWDG4>{4#FkWH1>p9w>r++LLaIb!3HDl^N_Kb9gT@UFR!=^XQ-iVU#m(lp^&{wOH6wan46fpH#z)l_rcO^ZW+m9t?Ak zly3NcLV5oZZa6&bfM$c4c#5^Z!iwm)1IPN9hG%7pqCFg{n`ZqHH_Fc6*4R9j1srS5X}2ANLga;`P6BI(1$EW*+q|hV`I0a_tB>3wjBm=rr^H@N4`V!EcDntUhQyf5dx*3G!99FC2 zUuWi9uM^YAsnvX*@R>TPttZjV$p8?YHl2OxKTjHYNb*lz#m$XNSCrQ%xpyso+%?+* z9@%V=|F`j*$QO3V=l00wpRY9>t~H#H8g9tvUyvGLq&ftt=7UuBLn;Iy zWrLAV!jQs|NWmE7!&v0QIOM~4q!2&?QYaDmC>bf7iWEt|63e-IoPQ-zc=@E@LNfnc zI_LOV&c0&KwnomXR?dQM*7WPF3B%0McbUVcnFAj(dOl`!d`fR|PH*%`gF@1(0@6yu zQ}g3evr&hg26WTv8k?cbZM7|3wQaq%9sM<(LzUg572VV2U5jO1E9G4qm7PDT zIu2_)PN9Pru+dA{#8utQRrA7C`y!%$@pOFlcz*F<`P z`v3b+fUCRz?Eo(G0^{iD=#Trnz*+bipuD)a1hf@bS4dz3{1+EU){1bKCcygEQ$ z?IW*#ATRg+J|g!k`Pa=a8@;?nT05Ytu$Vh5yYov|AueCWR3T>Aln3Z4ZX|WTH@_+| zhI>o`W~2-c_&Gn~F(_8$eT|WH%-Hrn$O9yGscSrELx#h7z>Q0HT()l$rG}L*gn+JM zxZGs4z}?@WSg+b@v6qm}vE+3*j;{}?kYyadm?L^^k(dCf?0Ycz7iON(eaZF!bOCE~ z%V~ypw{~?(#GkR5bjt*P|3L0+v(S1=6Tb=@@x9p%X~7o3ZkcU1lKo26ARqQfVvdje zJDmx!Q~z|eecRks$9-A1-hh17J+k=9d)K;cPn)!~e|#B>MW%+(U>!=jgPI{yLhAO2 zn7NO&SsOuD@a=<_GuKplckK>4riF&hc%5T)ot7D1L^>~(uj+rf*Awgac#LM^%^g46 z+z80!&u3}x!kA^!?xT8m2HA4a2$O(uX{(kjzCCurQl9wfknBNHlJ$-1fF?5YEe+EC zojt`t9E&nn#gvhh;IY(gC4vL{E+z8kUFi-3Urp#dr>h~#mSSiz zXq;R2?Ux4a=E&47x?XC_@Z$(Dp9-et z5@q!zap-0*@T2jf^XFjn-lXzTp6*H-6#gJ@li_my*0m?z_f6W={G?fGM@?)|#me+5 zeRgkMb&(f(qrC~txETMV@xfrCcH@bnmUYv~a^DYqB=SNFj#e5y{1S70;?_&dhtW3X zn!GQg)g&JmX+M9VvJ=@xIU61Moa}@6NH=S&IH@dKZjqh*V)4#FAAvd7VZY!caN|;V zz36aI{B-AV2vD>f4L_x_I{GTlUVJq2KccJ1Ek5~&uHvJq^69Af{I1|v1s8!}^+lz7 zEN4p~cB`QT-!D{>eBM8joLob5DdEe(>-6UqvBVVcCsD7g?bl8qB{OSD0(&9@@z>-o zYgw@#i2nRSK2h1?dZbHwd7pvCZp~uJ%!+@hMEzPs;-0HX+--@=z5K?}^Pjste29ap zLac$q;mV^Sw+Q@u4FZue_eeg@epqZgEfi?0KU;}xzS!D^NSt5p5TB;lt$pxuy6z?7u9Doh((lWR%E{N3;Q)dl{E z0!B4QVf+6`zvrLrp8qHNJr*CGHEr_bY+GK~3j%?7dwcu%`1tzz`uX|!`}+q31Ox^K z1_cEL2M33Q+=xW}mup1+!xUEr2u8}wfr+jXkc|M7T{SS>)zsDkGafMI0dpR3d!fFu zv9Yh9_8?(OO6?dk371?cPV>l^6r z9~c-I1jM65L&L*gzmANIjE#+rkB?7GOiWHrPEAcsPfyPP&EeVExw*Od`FWs8ytufy zeA6fXzOk{fwY9agv$MCix4*v+On1QK_Loz|8K5i#G=(>Mkel&aB>3Mw7XHgr;OhKB z?honU@AF+EOd`nd^Icpbinww>I!M88hoMlx+Ut}BbSGzh%{9BX#&1X=#v}j8ArdiSPkzvN7Z2|q= z15!neM#TWS!v9t&@;}}a{@oI$rlO*urlzH)rlX;uqot*%qx<(g;eQIr{xhWrpb`Nj zA`c%v5_%*ee4`_KEGh;_$t1-e18TBgH%OkyK9PJTDJdr@B_|~%FC`72APpd+2p|LS z6hP@IfUFWAACbM0k0{H@tH{f%C@82ZDybY#N%5ol^?gf}&{{L+84!&?9eNJneyFBM2zS6f?GJD>&mQx5W{z6=nB z^mcXk{Y7_oUw6-6^!N1k_x29-_6^>sMh1ol2fq#teH|Jexsi{21r#J>K*bmx9UmPV z9~+wh>c;r^^>iQji%qmBiM;h(H_!Y#v`g(QFq9t;-vxO zk$}-R1?1ZyC&r4^1uw&p{plbrlFgf&B@cL{VqU%~H5x6bo+&IA@uHjTO-}s8rC;^w zaO=JK>E1#!h}Xohvuu)0N0%BTAp?<~?aSfvhWyD7; za0)pWk{$MObJAHY6X_+y@#Q-S@UER!z+TiN6yA@n+rz&3@|xfE5ybdoCGtzH3dqn< zn$S(qb2~d*Iy+l|DdgAa`fGe&TbrJnYwPQ4=iTIg}k8xY0!RBx@+-V+(bv!K;O{Z*i_%l*~A`V?+Q%QknmtgbeMm1Oms|4Ol)lI z&9Aul#Q5Ztl=QUp?5v!;n|nvXf6TMLr`ns@ zwia3otpflwn|}kVulr4X1FXIQxJ7tF!wvseM`L5dFMx^tAET+U@!!$Z-1s+td;{>~ zzXtHK@sAJok534E75;BV3$TLto0b+}J@Fp^78rkyfB)|b{G-F0+Uo1u%bVJBn>#XF z+tcCgsf}%^u=bS7w&cRrxXiZ5jP}5ScE6GipMs7rIqeQv9d?N`Gy(JN5sgy%Dh4 zj!Ns#lz&b6m%UN)O_j+|s2ptghrN-dMzNV*!f$&co0Z;Vr3bvaus`gL7MnSCEijd# zWx)Nl%n>o)lD{u8tlA%utxzPrtXv;TlL;KuCa!#vfux+IV~7)YK2i3rFGa=ar+E$% zNNe9j9Pcf{z3`h0W;d6=(YfB1z3DWsKm0mxy+zD$6wv$LU~v$zH}aiGNBUeZ@Ly;h z0QN?=B^Jytj@VXj^Z^U zm%`mq&u8-y8+qpyYtv~i6JjJGXJXS!k(Qf+l1AbsZ<3KuBJ%Z88kE8ihtif1PHFdEV7H*?3Y$ZVVuIw*>qp5!=>>t6}Rvfy+zHMDa7Db58ayFxpi=(57g8P6q zYNui#rcbwuGo5>`s_LcKurQ%P(A?WQuazDTv4N1xYE&3LcNf&9S## zPRvEa*uN3b*H_~9+oE!k7>71uevQ-sCPm0 zLxPxo!>tonev#~r-&qfN%c*>eq{qQvUC;zNbIMtJGf^gwRJfW1$-|gek6Z6?f;dT* zS=ChsmpFD3PIuLC<3l1EPCbkxNsd)!7t6nM9yIy{GJxM1pGblxky0o3?qy4Oo>_Wu z2$ITL7<%1wn)!p$30|$RB9FVium(QsOq&cfo7-kWE{IBrcYAW%;Xbva6MKUpZy4m7 z|4v<$m44vC6!9I{4wF1adIQ#S+lqg`A1A>(RR}xTgI*t}GLdv*%=h<*C^1}@3aQYe zyV)7}Sn0{;Xm8~^!9{eHnNDbex#Q^x%6+UNVnLn3426-dAQo zM>(XvBjLOoP94SLcUQ^`?jd;)miHpv$&%wXebarkgM%2{nYUq@MAn#u4Xg<}cfl%a zg@!;(wWM{t(sK)?m@4J$2cM0eg$a@i1=0`T?%w5C=Ph-Hrx~B;I97jjF3`*tcq5G$ z$0lJN>9!!qCIxdCcn=$88#b7)u{ z59F$dI*ZTJW zGL%6R9!r()?-UscF4KbQwE8VDIlByHziX9>ISl}WJe1~^ z*;s37q)JTNE#}r-Ue-~0S{ub}&uzgpVYgcL-sXLn-(!4Ue@t%uu|a8J3`_+@S+;hb zbge&}u&H@uT~0Y>6d9{ z&pKP~-w$!@UuoEYc1aRF(DUF~y+b$6{ZyhNB9%Syk*UhI?kr*gI#^xeIIwMSftZ97)s*?F>=@BqOm(Z)RKyPK zn223W4~NuL<*Mvj=v~ZA4c62|GGINhX_ZOBsfBi_?Aaw=%x$RF!X^jy9O^IT_d{wM z)>VLrri+EM!P=(Nfgc_h7mFywP&l^gKA7%u2}jMT=_?$ESa$gvNhq|PUG-;x-sLj& z5VZ5r;Li}(%M~W#x^ASL>On-}4{idpi3A2}L?2Zr?@gx6~ zi_3LMV%V^+>QM&W)rPzpY$SH@C`asSQ#}+gZBjih(7W2w9)eBO4jz}dUTqr^*H3k+ zo>aVQq{!YU;hq>gsj0u(wF#}CTUR}W&0g&}4b?B44xTn$T>StMH!NYRowd>-_x;ow zmZ^r$I>nGb!$KQY+21%3e_lF>8){g4G;}`biabmsZrqSlLyROMkMh(Sw_Xh)ChC#L zWuc8brfL^6v&a+ZP~)EC(8a<9^0fSP7~4nfa+&V>tXr+=Aa>|-P3-!7IJD^~SM6#` z?;0^R)O1pd9J<zEY2Z}HVLmPzU1j2~};Xy$JQy`+LFKA~VGGR{&ZBI%kPwF^NTBs+I%9H-g zlZhI9M;Oei4Q6u!e_QwDfP#6ZfF3iLpW5qzya$)CmynZ}aGaMY)Jxn9^l-{ck{Ti{ z40);zd3NUYEDoXwg(y!!RP#XcXOQQ@-Y>MhwVb@isJsEMA^jZu4`NzfiPrdR_nDS3K^H1*fm%?$&(hkUR3doBKD1ZhO zO$C&k1-Nqrh@AygX$RIg1w!KjVbH(^zW^7GKw&>;OJ9d}?VwJlpzgS!UT9GNRM6mA z&@grIh;ZSvX|XDag{-*#Rd=$jSKw6_(}_hB8U$ zfpF-NcIb&y=viDS0vdWb6^c9yMWG2p6A8o62?M&TIPqb4bzub4VMOO)BsAe<3Zbg} zm~YD*Vqf`gad_=$<7r7^M(^X6^GC4iM6fwWaKuM&)kW}3NAR6T@Y5h8ABaQ>>O=}T zM+(PBiq=JnPe)3eM@rH}NsB~1HIGPD$9-XlnGMII5%Hy?@nV4EWiMgAP><4bj@FKk z)~y2qv!e~pqYY_djLxH9EMY25qdEyQt96H{Y2v>7)86QlPOO7-tdmYuG(To4Jjx8$ zSM40Ep@SE)gmEVx@KyU|Z!{ejavo=Yj;p$aW4ak-u?f*Q#|?*Lg#E+b$i4?7d^q;Y zxsT^G*s=#FN#SpMqx2q(AW%a7v`=9VI94vM#60mYdn0lG#Hi^g>#0QUv&4`k>{9=v zKkSWg6O@rl*nM@0mK#YNILT)G$6`rF<}H;Q~K`2$W0yI(rPZ+jzH z#BD?h4mh4cGHxY4b)(T`xcQ1L6UVF^bYDgf+_D)I~7cNeg16!78}mfJj9Ez2(FA|@Oq zV4Fsp(Ir`f7qf`u@$wVvAL6rYDsi z@?!|56@v;&FSkljxXV0g@joV@QM3uN)S<1>5_Q6HUzDMbEtLTFM*g^^?>I`CRukOSDY;T7WHCopd=-9 zFjHZ~9apX%(FiWX5-Pn2*}Ft7B=|~&8f@oP8m?Jw`|L941+P|co&fen+%ZxY-ZB@S zvWXEcy}1&G=$w(I3P%L&bsUqx=cB8AS(Po-le?YIAU`1RISufEFmuX6jSR#8=$=$F-*TkmKpl{Yd>(`+FLGkW1)YGD3HLQ#! zzd~iZX`c@NK&<592Z@$|8W3v}a=Ur8-g_<4bEB}7Dzk<+?7_u{X3PtWXG_Jwne_xa zuSAyMBs@g0iySsr;h%x%YD^zE;QaO%&8+kds6pQ7L7tf65pvulvvieM%tSrI#cMO- z0zu7FVny{8)z6HHD|K5X#i8tO-kffp+{(3B;o04w2#zK7E1RN`rE2!+_D)(Njh(`W z_-*%;iW&lnr7k->#oD#B+bNye4c$7;8lsK#y^ZxfO_Dlo=)0uqI$un6Qk-?#C3U&D zMSc?Zb`bYOIyH2G#k+Z@yS_NVWT?9#4c$TF5k8lYFFc-d{RFeagfVVCaY;Q14LwP7 zJt>zxY4p7r;=QpAgsijOdCCc)JCN{85H}CuoMdl>cwd!%Uky+1+G&9ju{<>l6ufBEeq58G*TkJ5VTS+{ zMDX2h{Cm-O=Fa%1;z&aVh|z11abu6kYZSe!9upOmp|Bpy-HBC#Nu8_7hp#7tR3aS- zAT`WeA}-P>omO)X+

    3@ueQ4j36av zt=xO&(g;Y@Q84!LN8Jet_NV8DQP9-~zPZoFx{XUc9`~{8nHwgUE}riko}0W{fZ7lw zCeK>#;tvG(G|Vq@ZO)40%%MOhTb5+8n%J8qr{m@chxo_Z^=Icucsgz7F!>ke`3Wc& z2q)9n`wV;NBxd8?#^L+;UArjb^Ms@lW8Gy0=^2ZRj9je$2LNC|pTExH4sOYzo!|S- z-~OHBB?;g=DB%CM*CBJ@25#OOzTn-ECx%_ywawrKpw_jm3}}oP z9d6aVUfsWb$-$oM3qb6Xj_JTa0PC&h%--M5j)S7!f6|W0l?~gs?cKdFIEMY_oc`g$ zfak&R3(5fKR^1DUP7GE4=#h@%ldk0s&+iL>=UN@q1mNgLUGL5A=0ZBr7b^beGuhf_ z4a%&}*{*)#WvahI@Co0^Snk|29_G|N+b@6QCob35-~b)}@gPsy_kM%<&VT#v z+|=&xnj9=Ap58H@3=SaEd6MDIa47R0;=Mos6D~PJkK)1N3oG8@#4Pp29V#Fm+EE?$ zn_Tp}ee^b%^!vB;9^UjSf9*_v;u_9YdQ#sqo!`#Q023eLz5op-P5{0z*w)Pq@7)W? zVChhEg9t1pACpMS4E`@Db2wa?hMAA`A%f4krNy#M>E-}z+)!y%d;BSA_JpSx&$=h81NPYe-nEv%A%!%Iq zy}!)xAOFfP(acZL08z>j8YZy}9z>W>p)_vY96p2?QQ}036)j%Gm{H@#h}@(p1Q}A~ zNRlN@o&4#T={b5&7D6dsT(wL>eZVD2X0-v zV&l-ge+M64{CM&xrEf={{sZ>Y>fLYcUS9ru`t|MKw|oBm{@(0O^9OLL`0yjJKm!j% zkUsqaWRNlc4r?&Np$1H_LJKd%FvH3gl(0ju9yH9u2r1OCL=#U$F-4tt`b@$PwKI-X zS6_uSR#|7IwN_hi#Wh!5b2W8U5mQCXSL#~bwOC`1MK)Pwmu0qDXI<@8SP6j@PTJv! zeKuQdx8=55Z@&ds*=Vh0klKI9^$pu_*JZa|ci)9KUSr2amp^msE$+|9&k8YS}pjDH3X|HNVI%=t> zraD=rogS@etl<+n(5k-%J8ZF`WpTHyx6}G;sGuIZZMWZso6xJ({_SVFxnetRz4zw3 z=(+C}EN#FA?7DBm4@cbQzX$(IaK@3!J8{V;r(E8}ALq((%!`V=a?d{p{n^Vm&q{OB zh3Y(X)mLY|*3nOo%5K<`O1*X4Z^wPp*JoeKbl7XpJ$T`VS9EvYf0X@r&I>2LdFP); z)Oh8M^8Iw+p~pV^%B7#4sOm|-UVHJ!-<$jHolO4x55gzEefPmOU;XblXa9Zs@Atdx z>C_KA{qyU`UjPNDviO~EewYK`0R9!YK!_Evdk1`60vR|#3i``|(}N)6Bv?TXb`WIx z<6mMjIJgaZ(1a%x9SB3%KVYqJeau5)3}xu93o37ffGgn)b-2S>)$n*Xyju==I7A|X z%7?rIBHe^oL?$-TQb(L!64kauCsxsljDjNUq5sYVaq8Ld> zMy#0;jc**H8aKyAr@0Z1ca)(VF-OOx*%6O_^q?Le$48*~5s-(RpdcAX$etMzk&hIh zA_vFFnK=@YmwcZj0Y^!gSrU_<6rU#V#>tX-5|pQWo+#-?N|Biom9J!$2x8EWemnzF zDxhUJ7*K!}z{4EOP!ulv{-MiesZwpMyqGItxy(+YOKuKxm&`Ke*^o&wa+=ehlX7PP zM&JTkjw2Y13Mf3g>8N<#b6NS^+CCB1&wo~wnzOWK0ZPCQS~>%v7=5Rq8v3Y_;`5u} z?21GSMp28lG*Jm90Y_^Y(|(jg8G>Q~Ew@=sXtW?5{W!-oA|R-dzJQkOEC32<0FQp$ zqXsvPCkkdT4}07I7|4Ps)>Miwmb%odgi7c}`(ch{(A1_l)oB5$Nsn~)qZ&l*rcwLB zP8BdUowgJvJ?4@APGZjMq$q`vIH%XuuYNV41I4CUZ(4wy_G70Q9Y-+=P}iD5HLgdk zW;6-_fE6rbvb3~^W>fHv${s7LPTOj|2wPZ}qBEV5Er4Rt>R7d66dHm801S@$S$h^h zuF|MxIIcRVcs8K6v<&I4PP??!qHDFRwWw=>Dh&q+O16wmt256ksNeFInB8T;UTIkl z&3bp22`$!gf!17dJr}zFL@%MP+t|mJmb<$x>TZ)N1M#}myvNOGdjAU8(g{|1?tQO0 z<2$JNW*4M_s-{QtJ6A%Dpapw1=tvjLs{s?ZGzLB%f)mWl4Fh-@1Sr8e99+<01R%Wq z5XV&~3|#&l7=r+lWonEy{9wQKWq%%q3VW?3;t|8L#Ek84KiEoJ>4Ns1GnVc;|9fOx zskdiBmKKqVjLIXs_^0HhFMy*l19`wW8N|KpTmj(Iy`G~6XPz>T1?*!W2eySP)bf_~ z+%YT949mjG^PUCWzz)~BcOd3npa;F^h4mR`fA*E489iwW7TVCryK@L7O=(UK%+i-W z3Zz%H=}wpWgLDRU>@v+iQk&Y<-EwrvM187OzuML*M0Ki}GV4Co`qsY|*Qa$o6kg}a z*T6>hoLe;PL$6wW$4+*%Zxw5i6+24MmUgyfMeU1OyGhvAcDPB!ZHjrDN#GWDx<5s3 zg#MXZNa$8~yfww{g1OsA&_01W?m-P{Q+a`5))~F=W$zwY@&xXnWsEJ=ScBfIvG(vN zgE_k0s2x1v!?l#Zy(QPSJ`<@O19;8^UN3^r$dZlihdr9{C=u|025%KqzW0qYl#An_ z)}8ob*;RrXNY+r07y=|bg>sckiUc}%Dum@cst+K66Nmc15T2eXj(42G#qvTD25=}U z6k+S23b~?M{&Hhw{p*G5`q?uza&(paMUHf)UTN#7uoDgC{opsw?Yk}$sJI-SEfmm& z&Z)TXb(@g7uEsU>fgs4hW~s(47ba2SSmX)GHct#B}| z>r$$pa;p0)0E-)kA(#ON3>8%T#TBf<_uIR6ur6d*I8Dlb?GLqfSjOi4X!Sv?Uk zq!Bni71*n6kS`f%t8nPQXVRsSA^}5eD|#}*en5vLn+BXpG8p`p#*&6JWGC68skTBY zi@S$1dnR-Esb^9+H*70RBerXls%M|KJ*YnN&yGlCK6CFXjHmfx~dV-fnELzxrPb=-Eu1j2!LLK zv8$4+$O?cnv_O0uD_|Od9cV#zX{>6PMVs8;A6dBZ%dZaCg)W_J$x!F2A<>N;YAjoYR0gMu=HQTFlj6_9rsAE*dL19A5 z)2{-cNefg(LhQe4Z~y?PKV1p{xjL~ZluAiy$J5J{6kw`y04A24yB3Is>I%xS0=$4M zN?^dsv3kW(3Cr)3nD%2fdF&8FlB;*BJQT<=j2o1I#3mDH2U@(jfT}zX42DmnhF^e} zFeA%hf=C!7gcHce2y{%GOgUg0$lanzm&`52d`VW6N&c#n!bn6a9NfvA1h6N=rl>To z*z&uZk}I<;fDTxcrX&>K)RgPfuA5o`TDmQZBL`s+6tRLv#3V^UAt+X4l)KcF`pdfl zIK#smln|hT`a>#!E6v-3N(cNnQlU=v%Qg24HTe4-82Xebv^t{aNP8 zDTDgPbP@+343{wL&$*hVv+}Z4ys6H-F7UFtz4H{9{JB`v6!`2oqjXK&Tdag?sE}h! zTDs2OL`Lch(Pex}?3%04R5*+KO2x9z2F*rCInPT$FMyLOQuH{Tv@R91I_)%1u@pn} zTsHMwPiOld_w*EDvbwXH&$NOodnzf`gi_CJ{0fbv3o!VH7qR! zg-r%c(zK><$Hyt-esOcjGU6}>0LTGO_A z(ME~UjFYo4>pwS}0sR8FPwY4zwM!qxLrT>{y&N{aln^^A%{}eZN^H?oBozA8rOrGq zdjKZ=C}(=)HhwMM}^He zt-hW^b}I>VNdHZ(pE&c+-ocgoJF_(l1vlGfn6$27^}^O>eOn802dQM<5E?{B!L`| zEEmhAp<0)a3(fIThKwZ6vP@8f)73HEEr<-Q8?&(B1C?JDlt>_g=gR^jxKl~7IDE~e z2B@a4)X~G+*YZ+UUE0?ZTQgd6NoY+J;B3CwP-d)FY1 zS9vAUajMr%$yaby#oIf_-f~WCVniKHCvsSW}**jzoR zUA;Q7y(>{MSwUfiA@G4Ah=cx2>03gvxZ8WNXIe7ttlVAXv5^YgguE}Ljn)yx)5d$e zPJz~a?T1R_(~cX5;hNp@)J97!fYIYx8O12pO{>a$CUnrR!L_F*gH=)4M&+g3x;2}- zCAN75pS{hLnJtuRf;kdU!65|R{kl&8WHX?e2Fa}5)?C$K5P|dssvAJTiH%%d+N-k? zfff+KWGK*$HBHU^xDr?@^_Aa}WyKCaf=?JB`PH+|mr*QxxE@-U0vt z1gaW9hFIyw90tKo;ajjvhG%HAWs1JBH*-hBZmPG)jICN5*7KR^(OTWcTpoPln`BK9x~ck5V>e zK}O|1QRVbt9d8XReND*5+vA<{t6pVZr7@k%Dwq=XGZ1c6R4?hUa*e z=Xs{*dba0#{>JBg*5`fZ=YIC*e+KA)7U+Q{=z=!rgGT6terHMCf1UhF!sf3B9 z=!&-Ji^k}T*65Aq=#KX2j|S5?|-lSb*3R_T>y>6Uismxk$>mg$+!Xol8g zLn~+Es2`f<>7MrKp9bon7V4oU>Y_I4qekkJw&_0h-kiRch%S_*mg=dd>Z-QttH$cA z*6OX+=%u#XCw{-Y9W1CO6s|VwvqtN*R_nE9>$YZTuXbWTe&`4y>p^kryT%K;5xc)J@7V876YeDhr!$$1HR_w)Q?4bs1u>Rh`4za>6fX24$%f{@?*6hZ9Y{-V< zxz-^5%HHhJChgKT?bAl;&h~7lP8ZQe?bn9w*p}_t=4jQ1Y}W3Lou=*G=I!40?Zvij zu*U6t(d9|`Xk(y;wNUQmW^S{f24nc`=$7v32I}Az>{M|f-R5XxXzuRz?(dEW=%()R zChziA>Pczn7a8u=(C&>+Zt#Zh_*M&QFz@=d@B7AR>uze$CL!16X!!>40N)7wCh!6$ zZ~ea8^;V7c)@T8D@CTO&1DEg#=WPU!R|QWP|K4Z_=kN!o@DB&^)3$IS#c=9Sb5+98d$7mI|aqxEW9M^HbhH>|kag5RM2EXwkXYL(0a}eC5^sv`a%swF6^Msy7;O{4-)KUH-bTwI ztbu5#Y7$o367T4-Fc>XtUskXIO?#FAFQT@s>7$snYU_W&wE!haT7gbwFH-?xj>;^}oaD zSwi&8ZUK3SCLPcL8bEbAr)`tGfga!i8%SSqD29_xfg9Lzwyvvi(19M%0Yb0n5s-mu zsDz+22OQvmsj7xRx9AnHDKOvCTA%1shjmt0hFNb(iZ%gt$o6fY2Wcd@7)W^* zAghW-d5AZGg|FxsSn`TK_-HVD%&seuAMcRA=WoNM2u_<9adsEO(8~(3P+M0S>Pnflqyv+LF1@YhYlZR(yVFoCeEBXck=A% z^C!@tK>rafYV;^lq(YZ6ZR+%C&X}bfp<%M}>eZ4YyK(LQ>Xqv=tSgUw{n`LRud-^d zEkM>)*??_o=hCffm#)^ldJDpcSg=J!g)I6(Be(({wJ{@L2z)56*v7q*CsVF$ndFIf z)FdAc*Mo-)d(SS$xOe08jCs}k5NuJ72D5@D)|tc6Lq|Gzek*nU9D4NS;FnRj`$)3y zFctBnDRe=OSfv=|a@>wM!pDqqJ$fLkgwZr=)vPN)Y!OZekJPIPW-J(k9Q79Bg_leL z4_b?K{mxArGZG?n-o-FZGL@v@&U&)3!`w)b{S{b2gB8}=V-7kl2MtA-htJM6N`DG08YE)?C8)(oF+o*;S;H?S2J~ zSkTxNC|{9Q;zB>?>7Wh`nhsmfY3Z3W;r^ftfk`jI2$!i446in}f<3W8I?R-aF0>9d ztwGq)I*T&w7sL{`W^ck|HcFBUez~R$L8HdTP&f${Dp4gB%Q{=el8Ri(2`9H#l54_- zNoUM_nIrNF<*>YvI`G~0PSF?1;BkWo7lg0A{Ayb8uTQ#D8xJ&`la9r~ZOf8N%U-)S z+c8f2Hc@TMy>_-Xo_$icbaBH>N&`s46*t4AWXzCWu?tt>=%VC{Fe#mjcvp>|lonS- zDudFH&Y%?6yI09OFTzd=rXPPvvkax3_dYjUg146ZI(=LdM8tO44MgXw4llzHs|xwa zA%I@P`Kije>khkcvNJ4>L|nsQ{_L>u*mHw15ADV~NxzdfPN-c+ClV(-*f2vn^WZ7w zV8h#IXGW>QAWo>n^{&D>J1ZzsgrrYnI_u-zdcq9kagT5mAqF|4&)ra>EE3JFfesuB z+@|%w3Bssu3B;RZj&!+`sEaG`njBr6!MSS`z)0O-3+1k1j1#uyEhAh2<6hRW8O#<*rXR_uWffPuY{ zXpe}(8;O&ucttGA?1_|7p24X0K44@fbtA}6Kd3PtFMg?a?lBe})3~WTx#Ju)h|l@L zq=I=&h>ymBQXwmw) z%v)VHSVF@sU~)U;in+SdfOEkzhFxJ7S0JYhTe5{LY@y`|SGmi(^zes343rQ_G9`~W zr+e!|!Wehp4$oB2jMmhPn}#>Vfv_NAC9#=8ST{17G0KjN^h-DGcg@P6@m}YnA2Vpx zJ%Vt8PIKA~IAznZZ7O7ad#uC@#!-yF1d>TTYa$X2f{=pr%$!bISV>$rl4Vu`npc!2 zHA}Jrax4vj7hE8-NGZ~`g;H80J?T$OnLt#|C2))Lisnw@x3#P?moMz#En8?)xuokW z!bl4)Sx6Sm0h9hN@G|Bx0hP@EaMUpKXd(=bW-F_$v#JWo(7^uF7~)`xB-x}CaPl|; z83^=<@9+y(A!*gUD6gJRz3QrBKs7=N&r$ViqOke3Pt|Tm(G@#B7LNmM=^rHqkNNya}D$%vB z(*#r^$7ysx19>Q|HO10F4|YHU27M=BsUcJzE1?2-l!H1p5XXRMCZF?!cf8ci3vmKw z0~*A`9R8_m%{l7#q;%K@G~__+AaB5f90&+J>3QoE(-AN#5$b1jI?WFFRoD&@2R`YU z)UayR&v$^$2Jj$9fih&ya8k7r#|^J?wQ?a9=ocPQJJv@z8B)^n*hHaaQIC0S+Owhd zE7xGawr0zfS(>G{N@ihhIoDIK{1nPL#i`#pM33y#yPWo} z9n9cL_CN;?9Lt;X?T30{hT{MWxjk~`DS%%V;tJ?|4m+orB*b}Dnd4j%;w*F_G=N8) z!Azcb+=Es1)K8wRR|Nj{gB;7{NIfA<4*YDmLja_7I4m+&%`)`Sbw;e|^5Qx#6Z*^| z{y{+i_ahBYWirPj+HsJBy_5*zg9@S*wr7XDts;L#l_2s3H;jB+uHX<|MXj7~Ay?%q zTN&F}4(f2dQs{A$yWDzNs=32Noc{(Yz3Fb5fGg9!cUwl2okcdjA^0|Ypu^ZJ%J)f? zjVxvx4jAAXmrB3|0Rk|iEH+HsZb?W>6)qW=kVBy?Q|Q~>D&t4h4)>DiE%K3@F^Xy> zxn)`);)J>T-H&AFJM@flt=L<~0KfT8h>ZYrSmEC|AEm%~L~z4RqZ{0CwlDt1jiMWQ z0oR7*3{PUDm_CkkOMWS~O~~<-XnD&s|2o*2Bp-H%eJ_fFUCYa^_ImqTZ9jkhJ56-H z^DQI=?w$<#jfPHBlwcX;e*gR5*DiR$v%tCGO%3!0uazC>ps{Etnc^c~lA8b8?r@j; z&b>e_%R3P7Akuqk5k7$@1HSa8Ka%8AKXP0{y3Enwwd()U4{;Re@qCWG>M8Gb&fgsK znLi5eJKuq+XzP?2JU#N0uYBU-zWL67KJ=qM8Qpg>`1tny&cR?5>(9;e9|HaI!!Lfk zNWc8%KR^1zPJLi=Kgih6zKhz=Ht&lC{Num>{nM}i{qw*7)?B~*A=~@y92&$;0A36I z;mGmf9|Ja^xcMIhMxX>vpkx5x0lFXD-~$3|AO~(BIuzgqT1x_E#RC31pb6$51*V`1 zuAu%|ULHwa% zif|!HOa?W8p&f?Xij|=r?javu#u>sP1<9R0WWhOX;5ob@Aex9AV$fc!&>cQvl1N$~ zP9h~%VnO_2B07-H=|j)azy}}z4Y=VyWa5b|VgXQwG1MU>uA*8{gCtra^wH7Jz#=X7 z8fV!YDS{H*pu-vxg%{WZ0wlm8j$$rCg(=n|GFH`^wOK#dL;ej2jqUwYGEO69U}7<{ z&5scU4I}^p4C6IE#W7N&IF^icbs7%rfDPzJHNalU$l_&HGZSDWaB?1fHU@j z0n+1AgkwDZV~1cwRy~9~B*^QyBS0qPJo4kS*yH9gBvANcLQW)Qbdxq2gj7XiU{NGI zE+jBueVVST)*6$WO}%L<_`2IK%++6vPWu*89**3Y5>6O^h_A zWHNf>NWMr&Zr@O1OGy^rN&zKPGStbC#F}u(sMy!A;7Nw`gPEw9cVSr5EDb_7B{B-- zQL0E$?&DbMghYZRNL8JgVr~^mX{>Ny@jyUbvPpV}lise~CMOm6< zV3t-=+RbVCWlFN;aTtpVU}Zs!6=Y?D7X^>Xb&p%}*VV)#s za%4M^#-EIe&;ZDkL_-P)*v~Y~5~<8?%;IVGAz+T?u!$yb+C*CBW;~kQqMeKi1X2pb z!!w`&M`g$~Foc=(#Ta2xo80C*3g;N^=5Oj-QEq2V1SfWm<5!_fcd1t(shD}Nh6{uP zT?R-q4Uu(*Cm(93clN|!5@UUWr+iN1Y?Q;!)RR0A%5g&D3(O>gsK7YP0HP>|C5=;G z?q?LzXMN_JZ{}xd8Xtth;|ZukzT|-T=!YEs6~us!#312GX2e4iVa;}k*FDh;Ze}PH zO6Y{<#C^`Fe!^%iE~7luS$8PJh$=*8Bwh>zl9=hoekht|z9^3Vpp4GwP1NXw-sqA} zDV0)UlR9ZlK&gciA7T<&m3}FhPU4kf=}c&;cS>oPrm32);FyxBnQkYVuBn{PDgU)8 zmcHq4#wnfdDW5{0ojNI=@}{2lDWMjs;{EB22I^=Is-ZTjqoN$5PN<@SCZj&8rC#c| zMQVLcYGGC?rhY1@{-0;EADIdTrv|2{hN`NrD!pi`cb@85rYft>Dy^E$sFvze!0K4a zYOVIFuhQJD;%Zaq>QVCQuO92Ky6XOR66;VJE3!W8tSakoGV4e>E3{rKs7fnuQtL-r zE4F^?qiXADaw|l7E4ZF3p^7VLk}E@+q7=LZY;-ktjB&V$cC)Q zjx5QRtjV4%%BJkd-kY%YW?9-tH~m?rhx3Esd6Kp4x5S7OvqQF5)Jx z;{Gk*KB?deD&Z=wZMaH&9 zw(i?zuI830=TfTYZfr5AA}i)DS5QMSxUTR1F7VbY?8fftUSsNhNHOTH@_I$@2Cwrz zFZ6Qk@M>=H7US`X1@11d?ovbacCYt-FNjQU<5q7jUN2T?FZzP7`mV3{iZ9@jFDaVu zRiLl-vakK#ukX6A+`?}r%I`|h@ABfW01t5J>hIX{ZzB4yN&v9(60ie5@Z#cP?CJyp z1EK<_1Ow|X1aB}0{_Cv)Pi+Om;RT~a2IsEHlE8v=FvqgMIP3`Cs+_Z_Fy>0|1mi>q zqu~gjL4fH5*Gj#??(^y%nxJ3N~C}}I2!=802!;qPR_%i0YgeSv3_`395Yw$tTD)baM0ec z7UpmPv8a3~%Z zKmfSFEAPPmJ0QeKOv!ZI@;q?wENh4@CvnK?am(^C75Z_zkPzP)GV*}y^8qY&EXmSfftqUlP<(fb{R0B$|P8pwZ0i1v;0YG1f@=54(5UWJbe9$j9mpcUW z`uOr)oy5wZ#6m-I3Y#o73#&C7AvP?SwuDswdD znodeU#1!vxIP~&Luz)+4as7leGPiO#Bm)WubILGr06Y%^i~z=@LboB z+cjYu&`I=6IhSli<7!jW;8W8@Zi5I{%Mw}~Nl-x!4|{BEck~UUgAOorIw$iwki&Dg zfIK+!aKkCsX$=U$Aek69V+|z3$}06z$KC99YVBsMjv$MV z%*8bXNdXjcx7Dw5qqIZM^iPw6;0&{3qXex8PIg!LRebX>qxLY5xOlsBm8(+EsP`uC zz+f+Q&meUH5CG0@=3wn}s|hI{O8mujeo;Ha0y z-t^7i7#)U`|)WQ~`K355)q^I=R+^XhB>90oF%v}~_4%jZt8dvpPS zw9?o@~N4I9nKz?IIPp`y!HhV`0Ghw&>z&msrG;H!^4^T1K z_EmJdn!~N9*LcET;KHkgD&bTQ+0s{tkX(?E*1=Hatk7}4Pz*J|4AsyL1vyvfQ0J@! zQmF;XSGJ=|`9ayTA{V{l>iS8b&duliYuh|-tHjQ)^OQJa4g>+640;Q2D1_&%auD&< zpF|gTzUTL@cuRTi^S&*EzRF(sS|p@_Ek>49 zxsqi|mnsD+Tw#yd%8naNw6nO9p~8?UXVxs4bLUH=M~#k%L9n2Ua19<3b(sQPGnF@4 zGIZF|#5$iURgfFTl7+ctNYNH#g2qv)4jn$kl{=SiUAuSj=GD8GZ(qNE{r(d?m~dgk zh5;v5yqIz0yKhT5Lc=6&edZnXBO7W^#aobtM09shDpc1?)$pvvVWT}Px44RKA3b$HGgcB81sjH$& zB4M2eJ$z`bw%&3~$RUX=lE}l5OmZ+InQYQYyC9Q{vL01R4zp_@DCwBio>|}_0)A6% zrPxjj(=^{yW9_xvFx#!S-_|s(Al9rj4mm3|qq3mpo&&E!=~AM|9dmLJLI@ph=u^){ z8D&YNX@uaxh8g5BN2r2yGzW)BWf;#O7Ul^j2p(jp;k*>!Ax8%xS`f#&jr7|{g-}N= zHKh~MDU{R+8#QV^duq^O2O8vgPz89z{#kX08#cm9P(lqw^ttG~E9lr{g;;hYgrGe% z(Oydu!G=P2==8f-ADS;5L)jI=m=BLI@k+;gN-a zvvtScMSpY)t|uXmSmM8wtQfJ0G0vE;C?^9KPuCPR%FJ#W7!I=rc$-Z&G;5<1H_hBs z`Ajx1gQ~TUalUL(KB4=w+7V}nr=N3bKnC2S8x^UarGb^k0hLB*A)S8gx#3-d0$^e4 za-dPcUlb^&8vz$$UP} z%w*2_+*NmG*~yk6-@2cGrFW`V4F=}SA=)HzFHLGCu;-rk5El+zmYu^V!7(#=LU`Kfq z;R#Xrq2`#dJFP-p3c2$>{LPStAE=+jYM8^t=&x5fyT&xS!Hx9!f;8L!BJvi{yf)G4 zH3p$gXc`E;1d_}kCd2;V0@HW14&n)hUG(CjKvkeGj**OI6rl`tn8w@PuwrU-<6d|u zye*!_AT-gxE%tIR?^Wz~AnaJ*-@r{jq5*wA|NJ-8mj*PnF zH3B$+k?E0>o%E#66d6hpf~{?KYn>=jnMzd}gpreUrDGtOq*qF^l8gG}EpeI44z7}y zz4YZTfvKlf&XSlEi{)X8`Nmr6NtexZrZa;XO=(V(n!X%nGO>x5V9_?8qos$lc2>EC}Apkzj=Cyp&hlSL_r!-kxG-I8GYqNmt@lTZPY*> zb!j+98dI6h6pnV4r0aU4W z5=TX~>Q%AYD4RA_jZ5X~?+hv>a1~>!WyPcAvYJ-4u5~$E{b~-q`c{lRl{>|Vs#)=B zC2F9xdn-7HRVw4P^z}@PBb0%27IHXXif^AOP)9$cVFGnj^(cM?EL%hAR=LhFuA7Y* zT`~K;3qj~SEcokk1dFf2V(PHdQtWnEfY`|S=UgsfY(7yH4jv%m1e0BkX)hbvnjW=w zo^51j{*CJ-&TawgLD8JY>5O=xPf^dWdZnk9+IspI!*`ft-^Hn5! z;fuTXMtDf_b#Slh%aQvgw!b0SFo(1ITI~QhZu5}_2|HW>^O{p#-F-=eFMLP{Q&?jY zrg38|9OFf0_#^j9?F%+{9sp=9cH)?bU|%=1uk=K4@~B#k=Cc)QrNA36(+23GMJ4Mat%ez1=rH%P~-S}+gs79h&_1zij3@fA=7j0frv5k$yQ14L!VcacjvBSV9FW>U4Wb)D zQm;cC0&BpOUCljG+Phk{LLJUG8rUbgWw+#@LNaX$#622%s z{yITB^0NcfwV<^9m4fRSs z&OS!1;MfIlL4G_}k`>=QP=}|y;s>OV`HbVwUz9qC)x|#-V_#_4Hp!3zD9OA6?R=zwKQQ zB#6&`jXC9iVrmcn&;r!t?q0MDA!>{C!YB9?Yxq{qaBe^y)Ghn!?d^o%Zw^c)P=Hv- zA>Op(K9W!5<^=&IFZep8267+>P~tnVE^)@sAOK(o9*aj(==0c5#NIExQcM2Qh5i8N z^8~O*$nO7yMD~b~E&?zJje-Dm&j1f6C+zO`#7Fp2g7_)~A$a8R2oKV>a3xM)M_epB zLc{{uZ6c%sYcir){AILS@LXQ7Bvv3EppATN@J~pH`XB`UCc-^VZyjciMSxHV7wPqm z&~}Wl5aS{V1+gWVP}H0-Mlj;Oq>uqEqzWGp#BxhRQa}#L{vrbn;^y{b0u6+OcI_eV zzp1ZG&e&J*`!-{9fs zJY-fB4_+n^RaAvlT*V`1CDv?(1;Z~E6+%ZgMF?iVEYeT5sDPFB0hLIWDiV%-6)BGdZawiG0?sPY@FhcKhQZEH_FqM!m`%;_I@-P#TEeW$R9dj@ZQ!(q}FNrWPAM-LX zQ@A2iGUtLa|IacrGc-lhsy34|-6=5@6EsJ2HCa=nO4BqwlmAq+HEFXp_vtk`Gd5>$ zHf^&veRG;{Q!;fE_IUF*jq^BFDL55#IMJ>+k@GpBvyYVXFqyOLoHIJHGdojgI{UIZ zDegM8Gd#tUe7JKiy))v#b3D~^J&&e5)$;y4H!VHcb3WoY)w2_sFj2vPGe_Y?o-#wJw~Dq8|XIOraA^3sFtm zi%nw;`$ne$t#l)Lj(C19`1}xF@cvLbe9j#(2O;dvP>&N)k5EyQi%~C(1jA?JCZbC3 z1uJTC0cAxX!%|a;CqxQtPmUB+eN$A4kW`J!R2}RM3&I58F8(03RXxH{akW`OaKjd@ zIi}R|bQL*y_5Xa;vw(HJ?ojkbl2vmORbds`fWQK$lq3r;T6c6>YqMJU?^-u2Tj$Fc zNo!T}CHHdj4ACPEsZLgx&|hp-@ph$7vp;O)AO$Byc3ASL7@j&}BVbzNSoKGBZAP7WM9!iT=NX1knwjksY z*XprsLPb!qvAVF(WuF67{=z{}yRBS9);8I7_73)~P*%MFK#+vS9?$^?a1uQvjcc-Q zOT&gJS>(#x=2qeG9r_^~@-0b^;us%g_UZW}XcVb5*33U1{#Z}XCF z(avt03UBo`aNCk^%g%3;3UCECafy*|Db8?r3UL)Tas`laBhGPe3UVbkbH$EwH_dWY z3Uf6#bajk#G0k&L3Uoy`b=8Y>Z_IQv3UyUCcG-$`Y0Pyi3U*~Tcd?3gDa>{W3U_rk zc!!F2Bg}UJ3V4M#d1H!r;mdgA33-(_dL@c^+sk>|33{bBd;5uclgoP93466SeA9`0 zjmvwx34E=}@7jm{`NVf`*OqP35~T_heTzzcJ!CYH=F1;rl#vF z?Ds=j;6nlFWl8iZawvXmMjHn_Y}6?D7lI@BLMJ#eDma-g zSfn!e61#&)Ve5fK*dqUTvrf2}QW&I=Z)qeV%EBWn^DJE^r*8tNB&75ux{`8G$61c} z&8Ti36pu(>Amu8yNMo3&W>~Ijn3!%@qDaluP)%KC08)z9{x+tm0u z=3@f+a1#qe3#)i_CAft1B8z8fizRA>L9PHkPADu-1*lCWl$9lf&LD`cW(y#Z3u2KE z0_MJrJwpBuJ}$M6nd^$*N{?TOk0WY@c?1REfh3fo6az=Zz*WUm)%TRL8PBC7exMzM z?buX+;V@Y@gSt%F#mC0cT(4n@_CxrD`oB6q){qmpB zGNAiu?^G_BWijsj^C1?tVL?LsT(Oz|GhYK`{L+J0(3u*RqM}1flfR0WCyAr^X+ETp z8vgC~4XrU+m?bM#wq;)yB<`_RYCtKIdS)&0J-PyOTHqXPnWopurnw5IX^Amy^8`$C z7=Bt77s7OaB_UbjX$MDYsn%-Ih7CQ!D3S6)*zGJh;*YV=Xsz0!kqV>zS$<7Zr+-se z^E$1tx~a6w!5FZyN13y{=CC` zx_7F)Y3RJsJG<5Urr5in4(cP{`@W+ozEx_z@yEUKJGu4Sr1)E-uKT|Ye3b$`qXv9_ z{QJOfJHabz!R5!|q@cnr{K7Fj!!>-vIlRL?{KG*!#6^6>NxZ~O{KQc_#Z`R8S-izv z{Ka8B#$|lQX}rcaTst6~pd@^y3f#ecJdtu7pmyAM8vMsCJILc{$a$*Ajl9Xr2+7+? z$(@SHoxIAs2+G+>%5SI0t-PYKyqmNftm?bV$^47HJfMpE7`eR6G5O4uD$SLV%GrF* z$H&c+DaKtYJ=H6N)LrS*B_^cZbyOVPwkUd_ad(#_ zSkOR%yL)hVcMa~YO#=z;5Zv9}-Q6KL!CgDIzi*$t&p!8^``&r)tuaUS=&Cj9&+e+V z=A6HIH9dDN-ygbfb&C9pP8-zbWJPjsUmW2dhKtpxI~ZbhslmaSHhE!Av*>iPYfJJ!_R*4nIB-JRD*^yVk{LA{yM8NM5E zO&hL98@sX_`+Bp-WR=sITvz;Cc)nXU!<#^=O=x|4xU4Y5EGbm*_8i9!ciC3@%@$eK z(VwD0ZH?uO>?sOf8HZFb0$^Q#CP zr28CzeTVkR00&N+a;}~39^^yz;6q=&BkJ;l-MS+XxchtOpVzc6zMaQvx5sEo$9M6^ zCFETdorBeWq78n(x7vPxF+UtK`8?NYrD4ViSz4h zwi|Z;dTv2?KL4-6g11E8x2dq#4Cl8>f>ml;Qkq+zsQ%nx++E6g+`s(1w==Ly)@gDT zJR59(kS2ei<$By1zKax0H|dg!Gx+4;|Kz^#xbyJD`|Yt{Yb5=Tl#IVpqToxJ$IF*` z@Qdu-OHcMxNw!@D#iyTtUUgJn(Gt#8=3Y0te0M04hW}_BcY*sJz$7Mb(7%Ga17Ubw zKJFu;#lxVI@c1CI{_Ky$WzcSqV9gr@k@9-IB7V*v{!S&E#uxdyU^J0YNB^%SPr6`O zo7MKnFGZ7?eBRHmNNgW_{KbI8{1AF~xv#)evrF7#d;K5(U>F9#pi3DB!jnfB1|c&K8wR5bAR2{W%S#!B;_FA` zdK24wkouS@B^yNiSXoMmpt-Kkw&^h%HU=_xBAP^ho|G~Hali~4#qc~I4KVmfn=CROylJRkjxU`&ZW!}XI$CzzH2AZnCj?Yd+tfRNlTljnrB6tr^#rK z(4_N+-J4|yyB-&0(1evJ+4Ia7nrHigkt}np8l{gskM{0qBHWl;alo0i_CQ_)z8WL-HG$#arO zYSv<1O_A@FP`%dR^&OJyPrp_%DS%>E&wL_t_O1P%N2g>kOQu|DO*_0?yn$)V)^;`v zXy1B*tZCOaqzAOKUG*EYY;v4Q*KWq6Lt)7N4MuV7&S;grbX;2H_|*Ar6`0nWcPu+o zmiWxzIDl^;XWm2nXON*pa}c4ZPv`S%?C?)vKCFWM-Y};z<}SY7!Os^o^!7;Ux>O@v zl3}%CUdpJ>(;^rf+v5^j_@C@JFJAK|tk_Hz{{rZFfTB@H1#4OJ2tK?(4SUR#fJ;$>IO{ex0`S%w78%uh_#z7=?b>W)#Cj zQ*7WN!sD(Y+UE4HB!d{wgEWHi#=Qmcb5E6oFZG_sh1oG)Cp)g>JXSeP%=1TC6Y|~= zJ0!;YoEaMB#kJ}I9Dmx1q2O~hNDAM-;GyB|;k##5=hvNV4FA{bDTO~(?-*7EOivFDG;X&RFuI|T9Rpw)g`OY7 zQ{LWR`oh`f04NZJdq^<@ot57GAtdZUwRQ|9H64MaBLowm9AE^KG3FvEM2JNCV1`&@ z8NEoQ^b(FbhN0=cM`UQ?Z>%As1p5h9$Q^Jgf;H?h z$aliZVx_v9L3kiZc~$MEd>M4r{w|cC{@ZuYW0QBjy@Q7>-x`U>)OysZ7BD%Cw5r4GCw2qP)UCPs41aw~ z>CZr9aP`E|zn@Ij#4FYIzeyP`kNj*jG!8Bkx^Y`eDCAU=p0GyWORE?wRBP4Z zb@6k~jE0Ds;drBxX?64`8G8H!LqSfk!PGR02<*QgoA&K_6qAo*h^Cn6@YOgU&T(nE zMLA{gAO-iUVw?Q3vs3;jaByEDBn6+1V$E5ovR@!+&#x;#aF61tNfRX@%nMpvxgq)d zHuUFrpM&u8cMCY7;5DQI6hoQk-=kF=i1I%O#CYN6e_#p_qw|snTJPr*qsc<)PRBa# z1t4&w2&+h+q+*R5k~1VCLTM|i#pLIZb0WfEm``I^d5FQXN?D2>X~&Qv8X;T|hASw1 zfFT}sEheF({~Sxty`#rorgLVklC7h(&~af1d)vj?sD2zTB;j;4f~$@!TS(rmq=>INWBRy&{mc8I>>@A z1die?{M*~N86e@(XU3FbF|INq?CE#JSROsr6e3GYG5M`Y3yAguI^S=8!Z!79Fo~m< z$@UA#d+a3+yXgItU*}nRZ>ZMe_kyhlT-RWsPmz?P6j8=MO&~=uM})%Vi%pj3>tR8Z z1Q1`td_x8F;hTRF%}NW(%rfakw>svxSA=!T(fF{*bZnmfGIJOuRP@#?iAHSu{aHq= zgzxP)is7qXM6t#P${c9EXJK?~0&qYFbxI)LsZ%ft!S>KZrlp6{JHTPs(tA3^A-){B z=&*5*BE_W7v^#4uPw?^{aDz3XLX5^6*N>$9W)Uc2V=&$ z^+bbUqo~p-CmFB5$FF13@V1NxhdGHo z9caRfN>rTGsGH<3G6~tdIBhS2o#(I%gt^w!_TkH*$agLSF)ba@J<7R0FeODGc~r+Z zA_^mRY1X2S2Lj$-z8gCWMT9!BKG+}4TNbf|=6lr+uxJxqt*JmX-yl79jT1%KPYRcC z@(y;HZiBlSh8Lap4YuM809Wo5J3}|}&3YDVlkFioTTcjIkVW(jq>J6qE}U}ifLiA< zkMF9QKsExgYs&``oaWi-tA3Vj4PZYhPNy;}5dw{Rz(EB1q!A!;d7G5S&_zt@-G%R3 z`uoR4_m&quD5!)r(iuz`EOdR1V24&HM#W|wqH{+=A)hK7jYz~nYxJ0#7K%D^MC47S zdp?x3llM&BNb9W2xN)LnRpQWm_v63IWmaHkl9;BM#t%IiNj^*@A@-s;E@)G3!l6yo z@GqXnH6>@h|3TXt_38Qn(gd({7ZX04o$p8+0SZ2cqTc*?^-&`}>Dtjj3Tct`cau#L z)b?qG!xEydVA#cP@C{;H39#(J|6$|oJcaMd0`0aoJ%{W|wGGlYl8GRzu0(;y+ zurAxAA9y8)ezL>JO?vy~=L}UGNp~3)(Uad9HNF~}U3e|y_}?>GUGoj^SZnLJ!ImBR zbD5Gj6o_juEy1jG!~EJ-K{!(Jq_r%8^Pr!0t919oQ}W28)}ONQxsk-OP{Y_zhhmEJ zB5YI^mB8`|55T_iv2umE$kC1{DshJ`XP`rMUki2lW9i5i$nRRxFc$Sjuo7%WU<040@_DM^szYYssWoQ zPBVrD3+7>CVH)$YAus#E2y|%Gy=n`bnUFCvz4&I`OChu_0xSmvlL=}Kl|$7()WLDZ zURB~|dCkfUP#B8psEzZ%fw#eSq9U#ykq-;Dslx_~cdB`kXj23#%#N1mMxmjFq4vX} zYZ_37M_AodQF(+Kg%9R`8p28~K`IiUx67y+4?vwI9?wUe<-~ArM19u+MY;g=aYq>9 zMeSLk=<^4oh-F(Kq+P61Af}Ut18wBfBj(3yd;ic#-eHS$#5fFSC}u@*PP93i z?;mh8{m6tBT$HuUHwh?KDEj=qV2-R+W$Eu1oy2pZ$kjMBmam889|ff)gJ zC;guOrsWwDJ7nM%5xRp32rhuxorW=K0kt=}=@!LI}uwa31%FB20}9k96$A!-5s^PIy2kFP3aLlB8Q<@10BU zTKP8JqOg~mbuePFyA5OZ;KuD3G^3Fg6sE_HfW2~3Sj+VqwvRv)OFnCZZ&+e{^E*%fEpH!B10oJtna7fV8(Eiq;dRb(5{ zmkaGa3uU}&YDik4F0o_mncMR&C)0PkNYZ6FSfG1R!}2%+kneI8HP8jB0pJ0l?6_u4 zy9N!mcgnPJ=w1zW=aDkt5(%hhw%Y{^#!)rq(l9=4Wi`oyeslAmkGikn==Q16NZOV| zQrN0Oa39{w>7EoA(idKOelLHp;pv77Z?UpD`OdptXirciD^nEE0Fb{|<`RlydA4SA z!`N|Du^mAVPtuMGPg>GahNd>2n@(<(!4g{Veo9s`bpt3pXKh$!GKHGXLPhzG=*~w( z*sdsjQUlcS6xt`7?Xo~{JbjEtl~3$w3kQ~b;-Pp5so#;L=Rdc7+_U)7o6YI0$go)}{MwyHC$ujQGq<+`b5#HtU*YLMwKyYwoT_O7Ezt&8rd z6uqryU~LG*YSff%1k~4a&ezl2G|;m)`p-0)p)}n%H!>zPeyD4tyK02OZ}KJ)bw&|! z{mtSI#P%E`2pMY%2lD&L3I~+21bJhJ>C{Frw2y?`3P12>3&AB( z36h=memd>RWQ9_l?xt+-pho4RMWw5aha;2|WI^pG=HsmgAMT?Vkhob>#I$f8Z^7=~Fr#U_B+$)g1tjdJj~`4*+Wi6kZ3E;igb>UG)(i~9@@97g%qrT^UQGmy;OUQ}^>3pn zmScS|1h5O~(kKF?Z16U8C(XPk4dW*TYr&JAo&Yf+SY5a&*hpT*akMEYXt?Sr;q|FM zx`4bV2LKv2R5jq04h!CQS~GoGuWp)lb{b;_23`Z|l1{c78o$ezAPC3{`;_vLlpVCNSv~0YMUT z)73B+r;~AZSl==iLmKAg=H@?uuV>M*=3wcjgF~0Ox6{QC=7oe{{h2h_HdOtH=6~3^ zT{5ooK~4R7Tt?4br-qsrV}bl~E)oW==uOOJkQGuv&3kLiebNMQ3Big$%^Mxe5lAdx zvA~EL0uH{y-uPfuldYk!ukos^eTP{hG}=P@z7}Btb4<3v8Mfw`S#ND_Qp-kCU4`bR)L{o~_~w9~toPQ+BRTS07<8onWE` z#0sG4Y8@upA4|&~e8@Y#={bfb#~OXx7U(qDd7LnJ+oQ95M!+mP$&<6UiO#>#3} zvFKtjQ^r18Gfo2JCZqm*jgI{kV?dUn&mXVQo#^m18}fAf^QpAwX@2)9!GAP2c8lUq zM?vX`ZEl`+<--=(wyEF4naU+G+mzF5skp2md}4wlo5|6Vz=L0 zp4pX*doLbCr8T=Joj^zM&-#4R$$YK3gRdFfuIGCzbB78!f`8Dcwdap!@`Mwa%~t2> zrbwc&b%zwNPp1om3#3qOd<%pp(q3+z$4PT-{$= zx|k?dDf7yhU346*io^@%=c{!z8U9YKP^jy9wwBEL$NpfQs91kmnm?9i;|t3|tk$$< zSo<=&#v<{IX{6rTz1@1tigAq2>cd56ZYTzv{`$jl51F76Q4YzO%@KU2AgR#)oXhD- zgTv6IPMy=`jxRa^^QMo%-n%+QtqDCdmq(bUyj+pBH{aK%JK&w)=AS ze;XUk$iE(&$`?Z(C#=}JmSdY!b^aRDPIWVp(NBsq2{U1OBhPm;|3#Yf_*R96Tl{5C zkoSS@R#6P+tg>Jn-W7LR2;cAB~+UvOL%#!JPJ`#?hkqsahcZgL0Gj zL>N!gBprcd6M_x)p=T!z}IC~ zmh;VJUPZ&#bx|jl6q$i5wH3D>!Qsk!?JL78PBS-BACM`Cz|Z3skQ3~&7q8*xd64c7 z_B_f<_VYR^YXWxni(U^VSpL z4CiXag|FbZEyP^xE(NX+*wKa|6w{X?goBD^wwC4-~_B_lz)nA4T86D@BM> z8DoJw#HeVLB4tgDaWWspKK|^%V2lo-6u=U}N{jmxM3TFR`VfiBBNA;wWkNLJA;DIt z1hO$TA=!A8;2Knlan3g(JM)m_J5Y-C-ZPyDG zl9EvV5ua~L&EzR9XRaKdzGq6y|0Jy#rknuIqcWrW>M5gIsGL}4YQ~`VB%>+u1FtSb z8Xw0hSv;*escp~flkbzPA-qaTAC);P$WzXgMkRI3)ci~4lbof5O4?k$IeUfYS6g$H z^r3d@A(`cg3|p0qT`CLi2~T;KLY2(lrWU*#p7M@AXp*n;E%?to6?_ird@E)x1mB(% z0^n71Zg4Gy(YzExXzDd#)htEHo)se`RQXU7EybCk`UCHbF~;-2I4-cwsi zfAyLz1>qJjm|4l{wbCbcsuq4Ju=jrH+tv?jdNQ^2?tHfAUF{cr{?@GE2(by^?B5G(&9SW^M&_6i`49F^wJdPb@v`Yc{ zwjF8*PrPHjn?j8a7UB!9jhD@wdVqeNt_kHhaoXjP4jd4Zq`{~S` zj5XGc2?6&5tc6bc7P=;+V|Rnx2Upte>n87jcSFK7*XrTArc^3-!_wy8RFc4HFDAF}!T)Q3BI=Gf?S~p|KyB#y4ah4j=HD|NA9k()f7GGL7=ixeXGQ^44;lp;Bs`CeE*LZfFTM{zovdQjiW zv0pqi9<0>JjXRQi!pD!_Q$k5oZ)?9m9s3~m7ve2{9eR*1JIcUgn->@+xd0y(F zY5WP)u{GVjnIAECbK4Hvu(d3*U70C#bIj7Svt6@UT{&=5s@kw~ys=)}q2W{*)U$V4 zdssU*=ggSguy^Ys**r>mXdlsY@D3)~dOEo8d;;0||4CnkCg7?^(swkcAl(^Of9#Fi za0~~K{K7iC>!*vc0UBg15-o9+b8kASQ!u>yn_vE$Xot9{P_nQP7!@0j;Qtyp|8^1w zj}RN55*MEq7oUolkerH;kbwxFlMr8s5Kn>-SCSl0=sn>l>JOAuG!&E{Nhw(f$v8;J zdGJa2@JPjRiDhsIzv7a}<54IQ(x{Sr(jaHkB^}lxtp7bA(E7hd1jJnbJ0cCjN5WqyL%$IRQBWL7>0r`2W8n zK0ZDtCl^A(cXo9{Z1<_@8Hl8Vll2jm!_jP^Uu)R>r3W} zV7+Djf>9UBRCBF2{tZSwRVlZeE7coYELds!8%Axa+-UP?XxtcUsxoNu1fY=r14hM( zeI0AA+0BZgl+BWBsoft-Q4-i3Z*d+Qhrp=hUx`nH5r~w_^e0*yelJynj+ckaUBHB5=I=n%YlhmbE`hE;5E%6l)6W3wqoL?4b@N6bD#uZdH@q9( zPB1*3rI9_ZdGStI!`J4-a1#BG#ulVWmcJsS0ud9Vh+>X@ntUAmxEt+UbCdwW=q%1N zV7rIFs1!k=dBME+EBJ9zG$r|pqRb0a!4eXwi$7G=t@b4qXc7wol-*X=6Ai=Y3Pp9u z)o23r3+Wb8Y#Ub&AZ2WqeHku`R)?AH`T=@kj?YC0*_$nNM>#URsexD#G^IyBqdBbm z;jr&gDRL54*$$8^nnj^=GhmPo0Rmj~C&dC8bR|BCh4gdY2AI30W#GnjoDiuL>(V#` zspuPVH>#U$vT&chr6 z_}kt%P^Kr`xKkH-T?|BM-fzlA!nDE-mR8SCp ze+~~@3WtxQLSVhKA)T>D7qP&AV%}(O-a0}zA=;$^_|$ljk_(yvTPDsEK9EQN7N*_T zLmst>P_x1Zvud6wAKKCxkFQzcOAy;tq*8`10}o9@ij%^-3hNxSrQ!sEr)`j9bROxU zlqAKggOI?hQQB=IbiLl0??ZJ;`@8MH{t_$@RzEIJ>2gcR@F%-o94P`gH@gbWKS%!!;`a^(t@B#yDnVTKa)MG9bbYCcmVE1N^16N;7_0MQxej)MT@=oN>4X1EbFm|H0+na&fOHS|Y8jFc+>)3Vb zq$}T%ZHw4C%xF*XBvbl63zHSeZcwa$m%GG0i^v+=IG?omKscT2fp-@yWv0uYkVu`LHu;0%8ygo0G##EiL_c3fMB}`^G4A9^1eEVAR`WJ-QUwL zTpd9uw}UK7NJ&r$3YpW{LC4|h!-rk?zs;p-?JHT+|pY^Ksy}o>QRHsxi3x zad176H5*;mD4**x4l}5@oWmzQChMY4NiFzao~F2e z-F$V*8hZ2 z*_J~!p#O$ZJ;FUw{sTt!dklB@7_JT-5uzCp=J8J$HF`P16r5d;n4^@KljfLW%^1#}m`lRHVN}BK zb4#4Nf550m(GL-^Z-jrts4Y={G;!em0i%{gAV}k&L10vF$fkc71~(2~>UZLn@1##5 z1avrLL_a=o|Ddu8rXa$ZISTr3VAN-iA1pi3?Ee);WtNWRdcq#J3|Nu$m0L-We@aj! zN>t`fRMkrSZ(vmJBvY*W z_mmt!loG_95~7t7=9%*EFlro8>JRSJ1g+F0&(xIE)U=jVUn@9`Y4~N0fUA$mOit0R z#|UOZ@UGnmDbs0{PyY#{HhQKvr>3{Iq_?l6cRrlw07xRMQi`VSa&iZ0W~F!Q=4=2j~@qdU{X5UyN02b(7sS34KqE0-`W7d(QX z9)NHanVGMZ4eUm67lI@9`uQ>KCw=Qr#?_x-X*hSs9Hi116rSjNEd)q2ZJyS@Vbte5 z1{t`r$Q)$ipZ%HvegOzv$oX=s`SQ>Cio^wjbou07na7%Wy%G5`X?e=41^R!(sPr-g zeuf1{5d}TP1oqqtX>bSQ030-ho;DElalCECNyRz!3x`GH%xgN2?6GO<68&wfT zK&MVKy@A)OZY!m(xw)=mrH+)BfgB3Hk_b_J+YF`#TIVv&vaAulyU~QCu0k5N-wDPf z07?G0jP_cSAMmH{Z;-w>&~Pl>c#Ywu7wYLG?M;Z3BnO~14J#x>inf*pB58_aXi0d1 zs~D+gu2;qMZlQ^Tb5ewts0R3_x0dqe29|+>ZGfR|=?^l}+Lvh;0SbvaP5m`66`pOo zeJxCFZJ8*w7dfmg49p}@?PYE4<0v^5>7XhGU`<(i9RnsQc)GEo1*1O~P`!dqd?S>S z(*fVzQFYuQYlfV1SzUL{Dagz1HQjzm(slaOzD(Fr!`0E^S&dW%tJJ{hI#z4Jz-$IY z3Mc7?XX$<+=Ku7Pc6}*Kl2d<8(u2)c`enBo{4~Imx92lo-+*-2l4VzQL|3y`cgj1Iu3vSUeNcK(>E68EkZKis zhHmq=DhWsK#}DZuK)zJbK2_a;cB{U{h`y@gzNV2rf%X~{SHMOYE0rU13g)0m2A}zB zHGgPRT_k$lhkkXwA(xCYJjPNO-l_uaD&jKvs;3@s#_u)&X*>M8!Hyt>;PSRmzIN8N z8V0C_+L1n2z7h54fra9M%He^=k}jkd{@C*2*mO7r!=@bB;atAa{;U3Dl-iD;Y$$xN zym4?g0q{|--R80*&AJ0gq@a}bs5IU51qMty%sww(SjY6?0iW@v_E8rg(u2^aQyoRk zgt2+KzBW`)$9PniTzXv@G{0h7jTMH94U}3L;DTgwS9kJoeE3ynbds_`Nu_>)Zwkj} zVk%{#ta;+Led={R>;5zr0IY#qn}XGwhCHNAL`)SGPr+|Yqi>YDzn0>YOw;jBWBASx zPGlfXL?hcpp=Qp!Bb#k%nHgK2DR`WzZUMuwVFFmDXPMt-S;*!-^UtyA&2jk7ab?c& zpaEEg0Lu)sLK{D+e4}Z;MtwX><9Y|+?U=Vk(+kj|^3HDmeq(5Chjji&45 z%qzYv7?Ld-LvD3Br{=qe&oe)$IiKe-pCSY>AzS*!zr^zuVClPrSGqVby!i8Ik@4$N z0NHW?L|M{XhAmy{A708mS`6BNGDSdnE~$(qQH;E#?% zi;A9DDfC_a{I*ic-<3dCk;Gq-GLc@)zgE|=+6c*OAM7F+{y4KUY zmcG2kr3c`21bn$%o9vkDCELIS+ZHEIld?qkjW9SP?mFH^<(+Ig-htg*m4ugsP3Xd`Y%^ zQ!)3jvE84#)!w|7y1d2ywpA$tflfI(p_V@BZ6lyBBQb9gl5e8x|LQ{8Y5Ta7BDKS2 zx6{w^i)jcOuBFuP}DwB938-34X1s%uYCzu>9}JE-q)F4XL;MQuHNYA-eC#YW%>#* z=tk~;hiVPA#9oceBM$)QccWO!14?psKcQ{0V}AOyxyK>|(0_+q`3prW;J^tC7cGz4 zkpssux$CgG5r;mfws~Cdx!;_!pV+*QIWJv!P9L;6YmE+IQQ4IT@33Kh(#nA|+(!08 z2N+GGSo*Q{SHqQp_gK-kigVzNDv`U%e{a0)U;Tt{i(%>q!{twJ=uhnG3GJp&9%p5p zg=lYHdu@7WY<5b|&G?-ZW}WC(?lE=nQJ^0>PM#>BAL@6bl(B5HY{T_Bo-vV~ebon) zIR1u{zo^=rl>^TLFaRi%aEtnLtDToAP$x|vPZFd~_VmwLJ5F>3kiqDug^s_S$d7c- zk#FshwYqn2?7+LhlUGa|3Z0!->63?N6Bq4<*Z6{4oH={;0&}QUXXp+9!(Dr!+m5Txih#;$IQ?yuFL8%Z7<2E>XSuTOnEAKVwvaWlFK(IO zJEoD_9dEd@Z?ZaX)}&^5Y-U1H1z z=s&{$c`&3nHJL&w+(wDWy0>9i>qdFI-C=atgJ*`nvO~7U zym(~3r=fs%Fa5eJS#pA*G>`dp2;>F3I&7JPbb6AX16n#Kx&I|I^i>m%pwZ~IT%99oPc834$ zC%Yqx&W#cI-=$E;6+eG-GNX3OKeoR^t<(PvwPS;VO32oasgfr?Cd~dBaZxB#ag0E@ zzZNs(eb`c;It;5HRfP2a5k^f_Ih4=h_dU=5j1Ws9pCLr{FBmnHSnV$uwFKPv4;Zz> z4~|6rRI}D>B8$mJ?M%DTZi9pA1YwGlo=tf3O*0RV)tKZeXuj;AQr}pcWf74w+M$Z^ z3yYhuhlkpyA%E$Tou5%DEaMbb9$>72xhTLzhTtDOq~b& z%?{rxRG#`HonHeWNG^{0KVVdg7~N-=6S>{V3f`Mf`Vl^G4*!5r_a}n?Wa__p-JflA zg;V@7b^Iw&wl$R9MehQBd;5dH!te%9L49nVo3`11|fl+Z4#qd!0Sa?%uLRck;EKp-b|AtY?-1{d)U({hg50@xX)k;y$ zV1FJt)|QKtpv?}c5T7qG5ZGnICOZw`yz##rBidt5IGie=(#TO-)cK-eT~xbR0(a8 zb&M}~Klkk+krkde$Bff35MgmBrM2JI+ImCN?%3zK#(Vkhk2xRX0NkM%Gb~0?`?oQ7*;gk# zlEZd}iR5Tf-j5Qr9WHYUlKifJ!KkiF2I2f}D;7l^ZV(ui-+jaVu)}@JA3*>Dqtb5P zjSC{wIPa^7Z8qaS1qpZ^7Zr7S{jM4k@IGrg?DW3qLJ;)18lvs;xtWp_^u1fMfWW9* z;r=hX=@gDn`^WAAF0H=~yZrzBK`?}Z;}U|wpAJ9}+lB@oh6}zfD|n((P2ONbU{v+# zAcB5Fc=l#t^lOJe%={PtFM>#uRCO?|m=UsCvj~3UbSUBLJEZTFB9kN2a?g3aD6Y+- z)Acxl-!kK1@FN1b5{>qf3cg>Ol_cO8J_+7FBWl3J-Svu`k zlMi?;QWBp($A$SIzu$qEZibLn$^E7@>@5S5%0K9SK%OO&gNDB*%_bCynZfhYjd}#u zT9?-+P^)muYA?54xduV70dUg{n{eWoUP;^qt^^>hOI-Lo+T-H9Y*9 z*ic&-JXw*!S=mZ5kgYkpP4`Gpb?uLDr{?0k+V`&bLD?WxOX)W4#i*%zR57M})iv$a zMSSn70RvkCH?4%##ip(fa{J>V9sUXY<{`TZ$8^bcJ|cpaDZGkr--mQrxd~dALd#tQ zCG|j8_-$KXE7hBx@y~-sTDQd=^cu=quKkYNk3*|8mtLCh$&Wj(2CCE!%bK4H$J?IZ z90|>^U;%_spXcW!1C^?gjc+MoNG^Ntux$h292~m>e>;3XCox1PaqNbJuYvc%3_J5( z?p{d04Eov*gT#>1L)^}?^;s?-jOM;P2+hVCfiez7YB|-9kfk3*bZUs$l+yc2y})B= zEr}?vc#t#f^B+GsRABKO>EP zAsj73aclz%P}WU+g}RsGQZHf9b9QmxY1O)QLNc`=HS0sGt8eMw67_s+#BfAs;07fwA(tX+foKYxN~(){**aTc=|+G5i6R_J_pl zZQ#20NF|^kPTN@WU|^&QOW08X7oIA(E*&f4qV||X$Ql<&8~6q~`gQixf2H?9GP zH#9doM>R&~mKC-4cAv$4BgPBCc`?-708^L_rqK!|*TC9)W)w=(9fJO0$)fkM?oE&? zc>P$@tz1gC9w3RFf+irEA2>9;db@`?B&@tkcSrM zoJ85)&GW7SS|$hXsHYP@R^JWa)&1JE<`>YMoOVt-;JxK;kg}|hc0V%cdy$--v`w4# zm@evd(_|2PG?n_CC+hdGBp82Ll=_<7=LgB+0zPUGy~UF}-*my;QbI8jL5pF-uywq1o!F%iA+KFBL6@@F@z$s6#89P`pbrjwmg~f7MU)A+%ql!Cb<3Ti35`bPW+i; z2}oYRK+WOOH%v*vs+%i&!;T4T?}xn>H_RY6q8fyBI`UBJH(n9BrsFf?Z9Zcil=TuT zzY$9$5hsWW@85-TkIz!(8@O#5G&89=SK<+5qfqpKp|%YAl0vT2KX9Acip&F`F$|&w zLxq}?N<6F#p3q6boDBJ+N*y~5-bPA z6JRxA)Z_-KtO6e&=Znx zro+O6Glrtcfwmo}96%m%gCJ!SKqkap3V<;&fx;R7O!mw{am0q(%vF#lCiPO!lrzi$ z3r#yL3t$Ok5egrKZ8#D}kPq%BKN`Eo8gbl1NtC0gjP9>eZLZVd)|(sPu&D=sIATK= zk~`u?*a5P&MUNTXgd-NS{5~G>ZWqrk=Qh@?;|R`j=!33f3m8a{J7M76S(C*^p(y1W zwP2(0VUZ*M7z9!cubGEhp^~rnVfB#`ScH9d7)^e~NKrP9Uv8R(ecE)Z6y9IQ>#NCu z2YG+FWyf8X$CMpo&Qma8s4eOXDEksXBE<&f+Dd>uS#??y#K2}S#`en;YJs5|Er1Qv zThw@3l#F5eZbk0oYWya5>LGe6A23w!%|rGZMt_c#w|=?~x7ogpjl!~TtvqXeZ)8I? z+xJyQ_LT(#G58Et5pQE^agOW!y+Y^5*~^yD_fU$MHbZl40l1c-FD~F3D!o~^(`-t9 z<)zx*4`NfSGozP12qq>qu2OvDz5_6_fx$uuREE_exV1XXYzQ3QNg}6s*PKEJ{tp(iZ`T&s$Z_Y5T8SGbr zBeLsJ@8ke_qz1|YN=QqC1I}r#y*}>0Q89s?ppRnyGZIqq)WTj3zFL!<9~&#?oR8|%pO?&P(5*Jdv47;d zNq(v$(jxef4`U6lV33Oh8GhYdkU`KC)Tnxx%6R6DZmbU(ODg+GHU@4QFvfLMa0rOL z(xGAqU0g5Rrg#Gy1po(H-ejqn4+!SyFGClWod>n1Wj5-krl$&Ux| zI)AJ;rPTSewSFGjwB4nJa|WP2_@+zM{QdgVo#_uTdsB?SA1|+|Kkp4iE0|0MNciGR zt$OiFBF6A^ht|2KGYT$0H6 z;@tdvWkl_5gNv@n7UOFS+$EHp?Q`DgI5G>xW3KDj0bqm))lbbA2TML8VRSpXdW3u+ zvrq$cskaQF(FGPkLzDEiQ!JkaK>Fj6ULA5?ZDQ&_5vFEeqeUN{Ti)$oIs!Hha7M)H zRi3|ybZDRWsfPqKBKilK2N-^MuWLr^n31e$DkBX*a3h-51rtf*kAo_CgUcYBRYqi} zwbQn}6RH-P5a9&iTM}vr>9=nRrez4#V#ZIwMy;U?kt&iRV5Ug7<8K0rEiU4K*e=w7 zO@OVq>4CgWk>0O=R5>UHn3YVMC-*{B3DlBT%4~TZz83r>kBziJX1|boL-m3Ys7{hi zFLoVwvHXx0@{g*%Rc!PTRvwREsb^l>*4X^X5~52ujP;`alV$pDXIby#S`@) zp(vUxEhxo2P6oA&qIiRV5aA54Rl$zg-~i+ep&dOuJ~oU^H#_VDvnngSe`=}}lB&j% zQf83)Of*p~H9J+z?+I5=?V3nkR5$vCWjyFO!ekYG1ef`2jASU7&@Fy75idYJI(Z`c z{hj=$;l)E~XQjY;_|^n~>z6}aEsytGHRUV7E|Fm_GumRp>%}04a_YC&UQxa3o3O}7uxSbg!PEO6H&!(7R zlUjd*t9gWoPl=h%yiY9~8~1Xl?-e;8xO1+*p59EI0ySF>&?Fyk7@vgB&`4-egvkKr zu0WqN%pNK5tr%(#o0z(>n=@(F8Mgrk;Vwb}!XQnGXLy|JL z1DW%jnjSucW-`RlObdZ=7#$Tp+iu zB)4uPUhjPlji%3`8|Q~~x86RtK2f*6nYVsOJTH$Zx9f~^&tF*n`?tZjw;_-__`X*_ zj}PbII62`R!tgG__AZjdH>~H@v8~X_=PtJGE^g#5{?sd4_{P)x+^dZG1Ic|d%YBNl zpW42!ql*k=G?I1R$4cZrEAu|P>>jRpe`4lGV|OnQ==W+GNHIea41MT{22hNK9U}k0>Vr zJ^vuRBv1Kmo&#-9iAGP8OM%%gPsqifCzoE#=V;B1hVyC1)r8XDZ-##trthYd2B)Vn zXEhDS>pbUs0vAXAt{eI;^~f%d#5Ui4ul$!k*A_Ie^mj)o*ndBW+tjZI^0yiV*;n^> zJM(e3E!ZU_3KJH}+l~}7LV7p_k1oYFX9la5ArGa!LV6pOdLTM);n24sw^9F;AR+q-GmLu8v0QI8lEU@=hI6&qp+oHM*A0gVjq!gl>MgfkN$}ZZA^p|q zMhp)cA-AJ14-WV1X2(LeJKo*V|AA3Ecr^1*&BE|?>qmiv%JIr)D3KP@=uC=g2WNYm z9kgi9HnmQVLe63GxOQi}4#;{ek)5m3*`b?=&8_kf( zTq?spN+1c>i6}4zR(yZL6s#=>y%or_lkl+*W)x*kDS6kEwN=@)-9<|Dz+g!NCGZDb zf8(eRPi$$4XlC<$(?A1U0favqYGFU@m~3<41L|L8tpwO29b@u)Z;R4Tbx@L`5CC;L zQB(|jC#wOz*aK@xG9T-fFp9-xB3`ER5Nlc9>pe?z1W;)E9WxSP6<1N&$!@vaeL0XK z>)El72CuyjwLLwE*2V8%VFM6!1&ca*=xUOcG3rWE<4F(LLxse9I#QX4S>^{xn+*05bJyJxfaES; zeFony<^suOJzZD*p+*?rQPFsk`bo#g>b--Uh_tU}Q57DA6veSgD4gnI1*p?Tepg=0 z2qjEtf_9j{{mGGDW2tU!TAWSn1Z`D&P=$~nJVFRTEia4k0+1d0;5aF<-?lC9eoIT( zrFNDUbk$l8=IC-l-w8XuvKvcGrpJ7lzAzI@jL6Hq7-v^vYiUh}{Qd*0_%nkX7B$1F z{DW?(6)bpjeMqbAP?T=izAH0`koSYkwEn>ZF2tLAkicf%-R^<_Qa6}f0Z9{rKg8vg zyub~B`*>O)Z>}5$>;UDy`3!n~4GaD?hl3v7OI6C{swA@s2VKkO2EgE0bbX^K*s=(y z5sMJD7Om8wUXnlH#9u}CXZ~}4{|H0P@RD5lOJF+13ZR@d%AX2996k0sv>{sl3V_ns z@WRP%lV;r_3%}SXbNM`p^hJ0)+r=K%HdQHF_a>0Hoiuv`wa(Xua`N2fMeP@TSY!ZS z4uIUEY9w?z;`-y_U!w2Nf(J9|YS9MGhyob2KJmV_GYV|itYmhNJWoI$D_$4lf1X-J zFkL0}HvB^A%LMS*Us3Gh9PxnB06ep86tSt-D z;q9&;TGK404@X7hikL-$n$%y!^og?ZU79NfG7Bh;fSjLpAUN-tg+9wFP@6Tx$(}0^ ze=Wc)OgrbX(gI;CCyS3JoyR8u7%bX(vISJDaAkR5ft+U`9kky79L{O9;fT?c<=Nyx z)r76%F`;X)N5ZUZl$9T-x0cp5(*-)+r_PF zpLEm_)SmsqZa{O5gF|acu~f}&B-5b2;x)%Z)&Enu% zWopT@)VC>EgP_|P4eTG{egeOX47JtT6`jryb=LedrtEJ(N~>y^r=COMiy8oa+iU{vpe=qwat@+kAZd^hi=}2A{A!|V z-aRH=jDHWdngpgXDX?o~(txfTL2#vx)KQ^8j3tK9*NdUAJic%?QGW~{eN9|}S`j@{ zfRaCX?pkRX^fI)OedAsV{i_94)vs~?tX_iRTqM(j$|>y}>Of9;ZV#3#j@JBC-{f^K zf(|wGjSSyc@{IaHtZ-6DxX~w8?*>I#GugOZju_d-Rzqr^-F2s1M@J}s z@mOMi795?V1vZ7!&ePT^Y{uIMz6$@|YSs*uO*HZqWoTAr?w6ECJ6=# z?495LWkUl|KKR@JuHB#RTgYNRu^cIh6+sbcE4(T^1;V6Hb20JNJ0C0Pvf8$JUG(E! zURE#;DDud+`-Q4%R+$u2~hRB}^ z4?e8))ujv|MXe}u@nYhwrJOdDk{@Zys9fG@C#f?7-NT9<^Xe?Ne;w_I(AL0xN?^NP z_cR)C$}Gh_r;pa2*rZIV8^N2JG8T`HpzkPF7v`htW5ru(ITIaywVsHX9+9Xz|JA%D zbU{qB2uF^e--oLuIbEIe8RxqH1|tJ>Z@7Gd227*>5$pG=4PqvIj>jTE#_&8%Z1%7k zZMmWT?6x`aiLo@=;m!C}?~s6sf>A6AUHHwc%|HElJ}LQZQy5}5=iKgr zpebh)+L@bf@Hd5oz)(gNXhYd+QvEM#klzwsO}XdnG^3@7+LN&ozJHnY>0)yK734sM zpmqNt1PC~2`HFIlqeZZb+Zd|U-iueAKp}tO86390_l==`o>9V9iePIG7YBk!a%-mQ#wqw$7$NK{hjLR`vRQaU zWD&hfh3zZzwOnSDF?Z9L6y%+}qw;!Os{qw1C)AX-M6#$dtAN?LDDyd;7EQ%+0d`i8 zIX=(zS%~zCD3V<+gwIpZu70HU2Swb`aV;)!_$SaJA#{rf0fLufuSjcX3`L!&~}`lYwE9+uK2aa~}Gt@**MUVkZHxp4*N*Ck2}j@pz%JO*EMZ zIhX@E!}aqG=T`-;;o`97oq^q==o#F1^YFJbC?U{r^5Y#G5i5|6(Ku<2W?FJz;hfoL z!an`Y9a9Tw=GSp03fB(d zp+%~_R>VPJVBsuyWwR$wz+`BZsAd8NRimZ4?$IX0Dcl)Fy_rPF_jFe?b-3T@4(~}f zzbljftc8y(GWhk*ppwb_=Ce8SokAm%Df6E3@fPA$v=cYi2tkLR;@r+x*@4?$LJ0 z!M8c3&W-5rZ%SQ|HV&OOPKw%&jS&kLT^|YN&m_5zVTs2s{3~V(qZQX&| zZqLWl8%uBcQKyGN4@DL~)kv>=7XMNf7OQ=quqp5UcRoOi0CHvD*Ry&VEWwr0{wFLU zH!L<&#vD_&_}%-Q!(~30tY-83@`JEoA=a2dc!**-Lc=b(o+V67*K&N@vcD{Jd_Q6} zA`GdDz~Lzm&#pzVJ9%pv?4+%oosw&8V$nWJe)W1zO?Gh5o6K_~!(b$p+m?q=5(w*7(y33WtD$2g>7;v(s zqS0nqp{BW4AL!mf{USnPZ#Kd1Q)Rph+NFcU;}CkKif`LR6GB!Xk<4lKdgLkh-!E6aG$HC=15o}M#?Tn z+n*0S*SZ{7k6^y)U+7j`?>2FrQ(EXa>imCeV;+T~aC``>(zRo6%Q#efVSZPV!SNTS zV)y1txe?W1oISJ;==%v3L5b^p)PZYXm%@=BQxyv2)XjR|Bju3DBwq&uOV2};sNVQ^ z!B>Y=Ad<%ogW=xZ^d2m8I_wk#4@D`3k^-=b@t zTPqm}V{9Y&oDspCV>%K45vn=WQ?<`mDe^Qp2##;iu4sV#Rny(dSXo9Y>}KN+n?vhmy5v>H-G8j^wPUpC=;%c+pj<#^uE;R__kvZCFh1DBrb zA2)xl232h1g+IjvfEse}$7rJM84jqxcl;8VRABF`+*L(Au1$@D=b1O%gFlWJTpkZj z!RoaILh_LHf;A)a6^-fU92kB%hBO=nAEvKfe)RRQa=+Ae?=`osMXjyFNtM|CF`C2b z)|~qjEcFGVDW~?bMWq`Cqr*u*`$qZWhTDI!_76Mi3A@eA4Og|SOI{Hzc59&wQJqX0 zQ5qPq-LAee|IIbN^5&%MO2g%P{PPL%(MIjdzl(Jh{zq4d30}1f#UV3=4TGF^?Ry3sz@E4Q!5_ys55H^o}cbK zPRwT~tjs`p7 zvosKBPT+?-Lg%dTd`<{7d0(8qA|yN}6lTMms3S6LAPI3xGvV#EIS-}gy$R+aEo&g3 zSowl#2Y_&rO`8(^J0)LgpwdK;roN{PC@16KA>ZJogKI1O-SA*KGxz&R&#bXmQ;ReegUN> z0Zo2E!zMxVXO^T%$c10nr%5=3UnGjZ@M?p?aER}8h530jqTQ^J^0ePinc})QY!)66@ zPeGPuS!qt4-)L02k00|8A#3K(=;X}uKG6>ia$z82qT)@Jb1xfIYd7c{VKF>vvs z7%11?=h9b7)p^EOGFyy4UB6Nj)QD;^deb5phm^rNJ4h3iuHK%kt6AlwZikw$t(^C7 zWg)yVuXmYt*p5ODWvy1X*NWlZ)?I>vnKvd?LQYHG#!aoVT|&^9*5lEev{fNj$gS>< zx73lh-N22&V{0O&u!r!iCZUfgh4AmQ)?chXiDJUuwzq0>w-jo(2U@p-Mr|?PmttBd zxOQy<9xB9r0w1x-{jmgmNa}s!aDDgVd^5`h)SO}qd)d=&{q|d=dJV86Wkjlk)84~|F z3cYlIv8*Y!3=~lQQ8*>FQ){`B&buj%u$i-fxSU_`3jh^*CZ;uipZ8CpIiQ^qV+bAk zke#XKM-R@@7o`JnkFE&CB1mZ@%J)872@i{`<=(i2!rA_|c8xw^V7t>?>1 z(w7O%t<)xuJVOzS-7m_yIB8{FV>IgRJMhr~Fdj^F>PTYlad0jbEK(-UyDU+=)(M`x z*IW;XTN2mOy2n9B4)uVB$_5@QHN|<8?(^58$KQJlxSS0rskZ)8`ctqF;`k7Lo^UEb zKO$T{0#fkfCm|5%!>5E*lK7+2Y7rhQPQ3IQ#~SJciKizj5i-h9{B2tg@7~>k6qv)N z?w=|j5%^hB86_~_p%@C_A*`+G1LDMdIr{fYLt+)tbltCe(-J%4U+?YO!N*_mtY=S! zgUo#tpL-9$7lo$BXG-uDXmq?x5mLNEI+3rcevEj zxgwzik~yCCb7k6P2HiPc@0aQCOl0Ki1vAFiZ$c=rj!@`7IMVe42HoS~ zaUYgdwRten8J>S?Ao} zJjIm#3b`e@zVayRk)jMXce03YZ%Yau@uSOziwuszP5lJnW3r(*8FC*sbu76sERZef zK3i0ooFO^iX`^hhR;$Lt<}r#uY{KO9h)O>4Ffe`@rBMbwJr6vbE83`?)(0*E z2N2exR5Jue>!p61mIdkUr5i^&O=nsr82`$)f4}nUqbcE4hue-?OTl&NKy87}%2B`m zF7eU1qxOK2mzX_Hiq|65d#>jN2={c0sPScIE7PE@ ze3xbBx3LDrk5k-9OkG@qT5=VnXQ5Hdu?LIe^f{|^&Yy2WX_?>GI2itEMRHWJy5Q2? zy10*TnB}5-n#$jm@~KOt_EWIj>92&25%j;B*H>CQqtf&y++TCMP5t%5@ASuQjt3sK zZ5{@ykkrR$fY@PScddrRp)#4ve1&?Ar&xJUfmC8sGJU#%|?@Gf+&S-wx`VU53nNP_aqqD02sS7f&W5mkd4l~E5$KEqdWKaju5Z2hT zy>gn4HHv2z>`}rtY}i-X3r{4)kRA5h+fx&>>nDhx33s(h$)jM45uIIWz;UEwe__|V znqr}e0^LGkvXhkx*-Q_F6@Zj!DKWxkl&p?-P?$wnkodv0nSQP)`7mWV=66s;FWnZp zbTszh6##%sdW9~v9MdxHH|0rSo#Kb_Tlu5b_q-CKyhD>*&S01h))#0*e%J&C>k@*K zl(D#uA6-faHW0nSQuewL{`M^SGt=|enr}QMgMKrMywyIV`-=U~GPEP?F}|@m1sx;8T4TiP7kNrchca$rA04Pkr$HK+8MCyM;cx)?CaAnQwc&F6 z1xU3Z`~*MF3a$5hGN}#%%g7N6g(F&0%zH)JW|XCErh2Hox6l)%&AGZoXb%*L6sZee8%|K=afZp8kJ-zxP~~r`}j@RjH=Dn1Pa0uf?BeM zU(9{YRjt5@rv;sP|L9Ka+w$=H@`pp-F+?i?d6AC>e(Q996pO} z{)(oSb{$MRtu8B~H+|hDOr$xksMTKN6qXp8M(BmPXA!)Vv?c6bQu2T|k%Dt(j|oN^ zmxAXpF>+Rq+ihBB6##Zba>SSo<8bxa5OHs6%P(z0@$YY6n|DJ5Kg+n-FIk_F$TMw1 z+8~4K-i1?r<_`;PZOoR4ciZd&j2 zshr&sKd$dFD>gSszJFgQp7|TMs1OHiB zf1Wq;?N?OvqRekKY~ReM-z#&s<%U5x>WxM^XO?vHH)La8fyH)z^&TP-uy1x`^ z{ATv2E{7mL&vpiVHwS9qWEZig=5-5w-qtt2De$4gq-~LtQw(i}B2u(7;Y@a+tX~W< zuQGe=wisw^hlQmcQ(yWcTS|KxzR}PsO`e0~6w&>BswCO|Y4X>*EDS49i}V7GAWS^g zTkP?ciu9F~Nk~$szngep*QYPp&(za2fmlPxl9%l_c!pB=UP2y zno9L9%#{V+JiP>~Xu-62oHv1xl795=mm7TS zkBamjf%P+vt`IL42ow)1@%g;11%u-|8PO;C4skg4(acnViMNfXIJ({8@gl=-eS78k z*m;~4=*dxdrzYO|qcr)4VTwh1#l|(wgK6Ty2n#lbnJozWFE+*ZRzg@Ns{8D$XeK(A zR_w!Io+^`8X2NU>If{7mQ%4Rb1@|Ch@i4|zlUhS@&9nnjT0RigJ z=K60#(4s!+!O$Cb`E=~j$$N9f*wI;zsY;T;>~D!qT+y*ND`Qb0lZ6=Y0ucM#a)~3= z3|@R14D`klN(%TuV1t&U8_5PEiPtQXc`=FM#dZ06!!P|!7m9R*XyNF7IMJ_Nxia03=9g!L>!!A|Mj4eyej3P%6!}5im=&@J{P7tnR zEsOp(DVGy-;J3j8U{(m|E^)+-yUSg|NQ4niO%LmINbyG3WOjit@8R-Hv)9Cyz096Q znT&B4`_AmC)6R@|8N_EyF3YFNCQS@vvn-;agoMF*bq{xtdL;mL_yN3L5c{2%&h2*P{<)1sXt+VzZw7pNI5uIQ=G#nt+b{IIrN$IA){E7f+a5qe= zctl*U@TQ&V4))B8@C% zRN|Xwo{9`&Ohs>Nx)EWNcSB);6Cj>fI*s%gcKd)Ou2Od_>;)YVPVi(BjfoS+?j(>7lxJ^mP&uS8=C)4^w2}hFXol)aUq+FZrwA@x zXs3HEFW6`eHo5VdC zcDTt8WhNF!tq-z{(`*d0zfgQFFg$5V_m#+KFuCy-wCVKUD9OIAOBblr-&ZscXw-ir z-a`9x9%aT3`sS#G$3SW}y?(KUHg*#QF%O?{H59ObBsIK6iUM&u-VsB<@SmkLov6)s zJlM$5W}!Hc&U>ZDdBe9rLM}DJPm`804y}O&tZ^tn(gJP^Jc1_g4n(WCG_kduthHvw zsw(l`PoZ}!twcQyTBq;MvgATY;vpmKS*YhxmhJ&aa97gw)c5fUO7`Sk@cf74wV&u^ z-{u`U?Zx)Odqv&5W!^jJ)@Kgar%umj>4Q(`t#5MMA;L#BW@$BE*soC7U(VT&t=X^Y zkKZ$l+9JGBP9j@#yIAiNFys^XsV1QCGQf!|aLfl8v?6>*P2!#k3Sv_adX5VGAzA%N z65RJHcqBgf^fm+_(m$Cgdfyfz+2#&vr;S8WbZS;7ybFaSR$Up2Vzz(B74Zr+qzblZ z`hFxWC(H4f4@l>WU=j>r5fNe+nSAo`>N`gf=$()6EnXz1rdnp$-GWf2AOOB_4E_jh z#|Q;OdeVX~Q-l~+JX|Io=wwDwN10K8xhPHSXgQyPpS)rzq>Rx?F+R%(O(UTK->)U4 z9=AmaQrqtR?f}b0w&u;7tedy)q;&r8;?cCbrBvdYmSWyr#P!{U*=BmVmBf!-#a9(k zpPmCRl1)(;Kg>4}qubJb?8R_x{e&HBHH_>}Xdy{7)k)mrh=19p__j_?oEQ-k$`K^{ z{AcXBaeU)ir0Ocm$93<^>qjCe`c-7bT{I0F2PO+#VHS`#lDvx0`OdH4Ym=9V>NMYP zChGV0p4j$&^{(AVKa(|Ukea=iw`Lkf(V}>n)~SepgMfpDP{T4rvh97cJL3a8otAPN@bd;#^C)hOI`ma;A^E37Nr6_8 ziolz@kt}VMi6^p*j`p|;y@Itr*&%JzA&H+-ljBpN`A+(YxY?{pb9q-yT<-Efla8W^ z`yyU{K>`0_r5hLF7m|5au2y#_$o|Gp$O<4ZHj@`&&O%oBq?qzg<)0Xk1wJ0lFJDpN zpltc@>79S6ZgHtwOaa#|c4{1e)dBmpEU`FNzDt$8iwoWyhlxZH4Z9+0(wIV=L1QJk zAHW~d@{rNqS$n@4eENWP`4Dx}S@)bx`6mVfiEoN@){{|$;dKECyP}>08fx&uElu;*x0SLeOPmLqqvF`-}8NJ&!g~24Yi0nSprM^Dg z{*M~{a<`70Cj5x3Xe=OA!RtOr30IlGBY8?qFr~Hnx;O|Ct63ju9{7Cd=&{Y!RHpQB z6V2=^z+F>zY-xQjd}M3O$uQiWpl;v#3t#1%0Rh%FS87CTUzoFh;JwxQ@33_Z2g=t` z4Wul5#TqE+lWdL(+3J)YBa5qfGF>r*HS_B>tmOZ*;w zI*O$9aLFw@ZWO^n?jR)m7`}eLkM3k=HxEW93`(|f5| zWW=}Kskfgo!4nmw(6b+jE>(aL+>$lRoF(&PMnSS&g({l(ue(cb`XwacJi@C)l%YJE zp*u{f3AG!Oc=gYm>*h8f-eH9!bs#{}H-xGwTvFs!kZxS}=ba(aHJfsi3gE9Nq^qYZ ze!2FBsS<#(xbi6EtLTgB#x>N_89(lI-Q!Z}CGQDS4=Y)NGFRg`T}@k4c*=q+cR#xF z+?SL}8uYvk!1RU-?&iMpGM7&TdZ08(`=_NJ*Moj^p6L#M(dAkbb7PC>xK-G_X*+qO zF27P$iT)Hu4om9vq!;(o?uO{IpN#SOTl9J5fPGhsjp!|CVl61re?ttoH;XE7-iGke zRycg!a0xE;_$urzrSm3(9!|~s-DpLszX}hl+6z|AAWK|kU{*-n!V|TWEodA~4{bu8 z3YhJ6<_mxQ*__8mD)~4^W`2s%6Gta4%=oGC z6o3KWOkp?wL%Ffd_wN$_Uzc1mSXt`ogYy+b?bX=vm2t=o#nd$_?v2yiOZ$-9#FGn6 z(%biPw|*ga?`LjVNbeF)U%TbpWt;zvHxEe;$+YgdujpBE?Aa*#M}z2j=%5*>-T2WM z^4JxEe4;pdoa1^b`}DN1f%%Chc-DLq>ic(ZV|kKh?Wg%YBp7+!a~rzWV=wjq0H*bZ zg0aXYqInAYBmRR?jgkmiq()RNV+}zeR_QS4@MoX@i7lwpN)EkQEzN4!twT4EdCFS3REr# zC!cDyh@v)Yvy4WU@wJR$&X2Z=W$#ZbjOJdvwv6Wk-dKHLtc`w~Aa*iZ9KyATZmrFa zt5RYh6Y2Xl@qfdp3D-NxI%0a(=>|fApCeVI#@=O`1!LHx87KJ7q}#k!DGhxSHfHnD z`KxhZmi?5UO`hD8-$st>$(Ze@;L0UJM_*j_q`b&r-lYHp0GpWSCn zjnyATNzUW;W%Zi7c9i4`l)tp)u#o8R3ZzU)Gn6FL={b|`wP^*2t5`1LV zc6buuY`K+z%LkY(fE6~2#S+D zSWDFWs{G><@^AH4n_2MV$$QVQ`@bhTk*=p3n!!&w)8-C;`F8MNyT3KvpBU2rnUM5? z-Cew=;$8zdykMxRu09~obr7Ah#JRd_cwtq+7Pl|59Npa&k$zdQ3A1B`rnp7~^B4Zq zvSWGC=oqSN65W7l4oORj~Ng?qt{fCBlN6IC##3SPN zv%y}+#qB4fO%hXf3BjD!I#ppVU2!Rp?NmS)rEmiLX=INZMcSuVW5;rsuc&~>-7_n5<9<8Dq`hHA&-lXm zD}}Fv&k~nEbJ(%8$_`_)k8MtG(z8^s8!?GYR!@~0{8B2co~EAYl$z6iX-qj4Gv!(7 zk$3D^Ccc3&?K|#~e^p&3c^Wevc9|b#AI1zE)3X4~RW5_Ks<8y)&%q`u3+#-6 zB2+z#h-%6eUdGPGJ9rjT{wY_wt zlRt;5$(W1vtGX3lZyn_FVyVhi7pfecs@`m1F13$))$+WkGCj?iNkhz8*{L6?Xf_&j zVtUsjxT-Dj*7Tp}RU54Tem16AGCV?-zsOg#W3hS}w=(JA-4tb7ZOiK)>ML~9@IAiT znfXYAK`$dO*Qw^cIo8_p$yHPH=L1yP$En$ro9a@@Kj!Ke8Vj}Fd5v7PZi#UwgNxoB zkZvyL%h;4|#p<>$nLlC?;wE0qK3(g7YJIB4*Uxb0JEl#`oPDbB4ILC>73 z156j_v-&7c>Z4E}H}N;-Iyx4PWZ5VsupnpyWIxZM%&~V!&GiQb^7oy#L@kN%NBQaX>u1YPiUhxDG!?b5}C;UYFEpjpw6kovKIO6*xf^UQ(_;6wc75@Es%Qt zMNjfHYdXm0lvvy0Kv~WIds=OC_`)koMd2LpU(L;B(m01&apZ+rX!WH>JNqt`VhZ2Y zmn#~83;Gk}ax7ChR8vCIOxdGOk=qY~T%89cs8r<7Yn2T~AtroaVRM$TAGT}V_{S$`K znOxrsA6FZuT((E=IGTJonkBk2shw}wi1g2XpHuH$H8#ID^>8%ILI4&|qF??CQ`Vfg zSIdb%rwR3>=qx1)_k*zR>k(2{3-2_!H0re$vZ;m39x)I9)r-EV)u5|?o9Fnt?!{8~ zSK`1@NRr zoIe%*eI>MUzr7AZN8H+_Wg0m^ZHm~zASC)U4_^x|@u=VlhKdHO=5u}mhC*NjLntSJtA$)9$Fb2jxbQn7F zY%UxZ=8BSa3vJN?U-=N+Z=y)ffYngIXmAia9hM9nSUv(J90iEYfEDop484K8mblXR zp~gzVHt&LSiUpq0(}$6eW0HU-Lq9$`Jn7BgsZcz8o-oSukYAR#GOj4kf(!TnO4ttM zpu;;c#FD8GWYhLnScW#vfNPSV!dcOsM>3 zKv5Yb@=S@qij`XaER3ole6ImlItf%m3zoe@$ZR5B0-^+s2n?5_=;)#a+#-xcgeryE zObJmEjLsF(ZAE3|o;~4R~0+sMNfH3a)?|mLM`qETk)7dITT} zhpH$8OOl|nn*d9mxCY;7(%IlUtyuD;h#Ois_6$f91_(cZ`rU<+hep~P#WccVdkleP zA_R%gJnC`)c`v9O4wdbV_dkF}963qX+)g1j#d zLL1*24V^NI#ZCeqp}&mHVvVWpz`fQ7WX6!FqpJG%VM|B2bnt{LI zNhd4B!`A{TZ^Fq?0K?1B(F5pdJ@|zyP<;mc7KZ(K2}OJctg@LNy$r2CNTk#TLwGXO zQT(Zuv2W_Z1ZNrAqy)ltNtD|DRB*653=FXVk-9}lxdM_!!H`WvBpcw>3b>djlw}6A zp@e-I4VBjl^05cBC}XR%1Cs5*i2KAhB04}e5!Ibk*ch}P*_Lj4pH6z787i8U?GxUY zi9oYRuOkDq_d;X$lc_N>{Fh_c-N0mjkVRwybdJdd*B zIX0cb+~+OmUo4+gOjKVinUj7Z94hOOaAsUW=2oIoSwPlTA`+SanE|L|=OizOD=deb zI3&D)SA5IPVTXYkTrvAuDh)-$vX-+{MhhQYpP$DaVkMyMj0*BC+{uQF1=oV;aTIZ&URGXHTX zNo6(qc(tKu^t4#Hs7h#%aq40v61vh^!(T~wrUj@Gi~8P)X=qdri>;kl3O9k_DQ6=z zL<*CmYryCYQL!16bX6p*MW(A+rz?%5g}5>f$uxA}lgjv)tkqPrc+h%~!73DEJl>u( zRQka`owSBmt>)Ob84U)PnLv?nt=R)6A%L}xa-zg*l?xRa;v8|3905=G0TTWo67pEN z%~CQIf=71n1Lh~L*}4@KY?LYjN84uYkIf!k&D_f68gEk9Nn3O&0QvzfB5oxnISoYZ z4MZ~yG7dw?Jb5IneB zun-)ATL=(b26xxs3GP0)53UIW3GM`UXSkERd*8F~Ip@QD>R(;`WqPW*db+yTto8hw z@k(CQQ=HW|u>oJ4#tV(sTkX}??BhYW5h=LqWxRcyBHC17+zEJyvJvdU+AOwWm7sZU=&6jrxS(o7HmlbE?Nv#3F^LXnOjF;{l$6bv{*3 zoATn2QFMmM5MI}53G!k&WnX(Yw9g=)*OH?r3%zSGe9)`?yNOpQ9XH~pAPxn0X8wKF zr>N@GA)j9_5=l+^-;d!XD)*&~`F-8%=PMni=oxMz2j-69Tk9f-)F4ulhQ&}MDlH^q zO!X#4`jSKjg?W{+mZ!2=BdGiV5lju1Jq|9GlO^ptT$R7!f@ zrwGJyr?FGAA5IECh+}?Wm;B(R!+5;$nYYe(8udx^&X^nmFrQA~ivS%nf)lI<_eH*! z&BqI$P7-0_1LX^o%Y46uB_%5Z-yP)Atouw2=H{`7ImgtI2gG*F0mN#4p~v8z!oy9=m?)lhp--IK^>Wm2oxdoezAL^T4 z)_BwPd*0rLl$oep!%H4{_#=(UOY-$gR&>kTKbALt2337nru@8Qp13SszifH7yji<4 zNRROrkRj`oJi+0yEy}z*{`!w-sOc_uZc}8B;n1cE=5;pHZOrR?72+c*YIM%E*HhKro0`$rkxQo!#k`w5B9@%HdoSjAFAn=p0_UHEs=ZPPWFNpD zA^l$d#!lFrJCo`3rzyrH)%`-peQq%ICzI)~oOGE+48bd$VlI2~gN((F2TgDTydB^+wgvW6u#i!qIQ~qZy;)+1R5$#|&MaA}cFiNpkpmMh9m`M;EFm z`;I5Sf=+gePZ)Y&CrTS9&z&@AG^g9O$8x9l~P$l z*7g(egkYkqT%5^l^adRB->=bGnzYjxVX6|AIx>+23!?O{{ew~Y^h$wxge9uk*zP54 z8=$dK8UZx&>@ z?G8Y~VK$gQHHAhHaak_Sf8O-}2cs^WTa10>`?RyPaA7r-Llehr`1{hP&+lpNt5pBX zg$6p5-iLs*f`np(>8H~kXoO7kbsaWGFT*c|gd4xh(`<83(g5y0^a6#kWgKc%zeQQQ znKrd=(p?nVNi~ESN`g6S_<#w|+xen2E+z?aaVT(m3$IDZ&)Rc0zY04@*QZda*!&D!N!w@QyaD z85A$U-ACx6{A!ffMH%JcUP+pN(RI2Odo$TZRp=o3P(|dzJQ_M{q+ecI?FEh%Dn{1Z zMWMvRcm6JMhnFmrEdRwf$TquNn%tDs)Ze0h(1bom!X?MQlWcC|Gv{r>q-LYSpaU`Wf%K&6f+#fy70W=@xF7W-wdN5+YB(bV9*ItbP99>7iNgm}ssZmxUVYVN)bwb8AzQA6sElrj&Fm zZDHk;YIJ}r6IsCh$it~`#<={O$>ZaeUY<*|Zd*l~cjUtKSERCSOLlfha~NajN4{0_ z1Y#ejUW_p9KV<}~+O`7}&)T1dh}wis=U12)9T_~Pe$!sY>!xf`k1`?4XX6}w$dh^} zd9G1D5lON0ZKFz9?y!OodmyNUP}{|aPEX0YFX%6fx*#dyyd~r6Gp$OJO=n zPZ#-9isT{mV{w*$@Kx+7d=WSv zHbjd*-n~K^WsnT@C4Vo7TZ@I-ctKM7=eZE+Otr$zgFY9uwmCsRjBFeF)yq$oSl!7`G6S78(SR$K&K%HV+1x|G}sVi%}Wap2HHv z8c8vIj8Obxr~-LG0?dOli&_c}qq5<~XIE@68tpQ@Gz0f-POqzX{5EenlQN# zDe-q|q+^1LdMsb0>gAlJ?vF5WW#5hUR@S9YQCRW?@u`?m5xf}Y-F#({DrX(4nI)6N z%%5PT;`)0ytLs_z`ZzP$v#%s}g zjr5;L1J?!idX2C zD2BMTDl8j0WMGDD)rt4oqpnv{!hEPSL$uMFswriG1juB!dD_hb+O!5l32L}i5#cz!|kdDBk_wIJ&zc+N6`jZJ-}hq8_q!s$Kd45nSHT=mY>^>?j3f-`<8ROb24Qf6!ps|a2RzN ztJ+geY9+JPooCPRlkZW~;`Ip0t5c>@KLV-M2V~uDr}1ikqP|raxd30h%q*Ddac!Mg zx5q&m<|NG`LXRw^+ecwk8O)`ej;?>(_XGYvu8PmbH!lxp02+_-hbuIk;T(Pg8D3e`ok6j`-c%te)6QZhvu%5El{l; z=d^6=ZH$i#8G6{(K^;DpymCq3WFYbBVG5STMIRwzUS>#%X$B4-`vo3)}#A`!&q$qC;BuHicQhE{? z!EXIKF`N3Nn6GqO=JXr31-v_)gYQ9c>Njj3T`1RwC!_ZyiQ`$}S5!MrNUu!Hel}aW z!Rk@yF_q)j(OsHB)q+oU?8px>eMV5*{nOA_1_9`s%Y;B+TIc3DV<2dP_GTA7^Pj9iJVy;-&gp{&JFkm9#~u7!vg|0~hBBzJ z($^uBYhWEdua$<;C`?ej9ZSi|YdRa|S|Vq-uUYK%tJ3dFg_Yrf{;tiqUBhi_ba?%ijaa zVssW|<+Dlk>@g%~be>e~v;ETFbIi))5W9W$f5}(0k=7 z7G-|W=(@hx_sGHDdui9`rft{v#P`{I4aNAjkHzmS#@}a)#rSU2%I_lk*=JAA_}Yj2 ziQWtAa)!n7sv=CFw(M)E?(cV5Z2WX!<^Qn!>~}k847(`ye>(E_f7~^G ze%SSYeuC@NnB8afodi;ZQqSAFp%xVQGCQvqs7s(#L+9nG1|p3$HcLg#IX;> zaUR8SF(vRQCGa^U2t*_Zl_iJ_B#7I)L6;4P1$lXP666&U6zvj}V=xJ-B?;<737SU< z+OZxI`$kgx96Aw6MrBDR14(5zNhvc))@aEWS(0oG>@4OvY-5rymn1n4C3~7BIW8r6 zD5YL;Na=w3wt1xZ45aw&rM4uc20u#)W=RQE^qB=psn$t}E=h?U_Cb532F|1;D5WJi zptwNkQXXj;18G@%XC27ufXz{wVI;PA!5lJ=s^migM zTFU+O>@sE=GVgt4bSpS@4AONgWc1tnvod5tdSr|aWsDCQ4GB|?DP_$#2Ex!~O?YH2 z3}h`u*vx&hETd&@vIfvSWvvTj?Z;#tX2k5YiX9$hon{6cVV46=9C9vN1D`9BTnyyg z4*OjTlH8)@JYD)pk$a5{pftKcRDCXPue%p%9H&86XEGk%vE{awx6&WZV zi!N@V|A2c?XQ&k#}r}EtPD7qQf@!y4^|$DRvfNS9upZE z9aElo93DSZo+=og#8mmIJp6-0Wd?J2T3KbbVd$5=%DlnQT(rt>%Ath{l_lul;+V>c z{owMU${NSuDyHfN;oty=>Xyjhy0Yqy!N9h?>K^65ZnWw?wEs_q>S1vI!IM3IX38vb41@w$V?b054p{#bz0ll(UyFKi?iB`L>=)0>>d$jL+7*m6B^gSJ_0gif~ z;T}+BFYu*0Vn{DYMIHHSXwzOD)vymKMjhRv8Ld(slc)h>Tphck7Uf7CH>MX0>m7c` zFwV<&guXp^D({FJhY1|sk&5<_#JnRnZ0aYgd`H<)M=}16`l_1f=p8LzF%6ameM}+U zOASWR0tOWgW<$8?t-%_T#}cE#CR$8YslhQ`{9;^#(=g-Zkp}k{StzFFtL!4KmzunW z73?aS{2h6(9W(`0s`z3wg?<$aR%(h6l?sn*iixJbInorD=@!M(lI%}<`%+8#ONNAs zmTcvKjDwbZN}gPdmSSaFPlcB9b|ufamTF48)RC6Jla{)L<~u5F-j~{%OqyCM+T1B) zV8B0A8Wr#i-~hlY@-Hfli%$p-9svt#wy|+={N&{1 zjH23{qKa>YrTImr1w|!Ae^Xpk{I}p+_wBVCPK;MZgm-F?PcqmiDbP1DGBhDRE-5iFB{?}g zH8m|AUSE^bvlG(4Cu9^RWS7O|R>tMk#pN_c<}`%lHU{NDz*$XxY0bV#%{~e6H2K8; zjrYHJ#W#7yHF?H0dBj3IVj$k}b^ghf0jcEyDWw64h2XgFeldAIQF$Jb#V!%m&f&G6 z!)iZ=R(}eva11K93n;SzmsYS#7que|qY(fHD; z=Gvz20@3TYP?xCv-XBH!+IDHEHh(aVRw|NGp{`&!iB+@A zV7RVuG>!Ws9F?AC0*C)YrR$5;0-gi^cT`$EAC5|275^&NttZaXtuLReHtCC`Qi4=0 z)LTzSc9b?&E;cz~Xk;t>L!~eFUy}btr44?e|2HblZnTtmv^p5iK(VCs50!qcv@+&t zYBKN-m2PeLGi^cTZZv*xwF5_`M{|~2uXiR(Tn_$&N}FgeQmcxrA8rmMvHR<_-{~)P z=PTu^cC>!!@6EPr>S%AfIcaEuMctr1wccIqO_!5UNFj$|oo1SCBb+f+R}Yht zF*RHK-gj?9m2!ZUA%JU^RXm(|r(`o$B$O#AIJ}ZoJc^%qcq$r>N@pd|Y|L*asms1# zl7CT_jtf+_^o&n5a4Y?qiXtSqoo=35x`{k*h_;h~;PGcC)1&q-H{J3tD!u#7hDlO) z5D-0FduLvB_TPiKzDLbfQY}A`C_x-(3R|)NXap=^1UUpbFR<_1& z+D$ENUpwRc!ogvfzx)W2AttQbFh{L>)GQx5ss~vrDtF9YK}W7?fhDkWg`K*E9=G1^ zEPiaGpaY8|@FH@Yc7xdC0o{lMn2fR~vu(@mxYK(z<~Ok+;y@&hypsV+jDc!dRMNa| zP~W`C`7kTa1-J(@@33x|*Lvm@Ixb`X+Jje4=d7RX;}#f*JO&u#WG53BpQK``bk(J? zf_8T?q&?PQu~D>lb7|&^L^r+O6!7!>OlNrbWolG7Wh{oY?yH3p)^8-x{6eEsEDuY`GMCEo0R4|NN)|=0wDfZN{ zh%*U9<4GR}aI!odxh%QZA*zylQmiAcD9lT~LmmX1M(xv;ssIqeQMi0$BDq!sw&UM3 zwrr;6Cg1I5f8i9hpEA~VLjaMP1b{wAo8X^(s#kTD-ONgWQut~zVlzX^!98Shhkm?k zv`l$4r+vGhJkAExU;;9u`34tRH>LZvmR_js(LjG^(LmB}pd2ZULic;TW+HJ%{C4@* ziQSeL=Z;hrcJK-dkm-!tVI6K`Xf=?Nkk?nZ!Fpkw#;dW#e0q948o z8{Z-T5#>Ju2~F^jN%O*Cirr|8Yh2xiCh@TIIVL=(mZ&@SM3`g&k~rB2JAYnujq)$D zA4BaVMU0^?(Mpu=f@uaj1+fSMV9=gZf+~~~M|X&VLj8Th`S_Y~#jV6jYuXUT#7m$I zCFA&0*V%9PqtZr*hnF=S~{NBAXPOb+i+XIlP$r^MTdfkX&&EkSqCLo=u zH8bRRaSoKo(hr=DKylD-1bfd>{`;R??a_OA)aVJ6#P5(Xrb1*A6M`8i6Y2LvR&QT{ zBN)R0AIU*syu0cubVjtvs7~UDw18N&TXvEahHpUP(@x6hJirCRA3~!Z3{+(kgmsUd zuJ&6jirXj>`tHNjuCO)%O}IbW0!MYJ}) zu=kZ;n6TtW!tJIf6A!|({+#eRj}Fa8JK&ALkbE~5BuIktw?HJ_2#VGgBH1Yk);s`1 z9$!3(HhJR_yZl|032hSLS*YfdHXf$+nwc`<3m)Y^zh>*o87Zb@cRRMnb5A`Z}3LDyyntg7G$g!Pb_1VAruAP4J41mh4L!)0AXl3D+R9 zMBL~HLqx}f$6y-rHv^ZjaUaMUnfjFr016PpTe~NS;Hoh(z2o9}xHW`y|GYH1?qtn5WDH;X%xeOxd04YGuOG_=sUWW#~JO$3%cwhVd==l z$;bo_oO1xN#Y_CqRTEs>34kQGP==;vutj(PP%g@5Q=ENXd+9w8LWIKf)2AOvfOfYa zrg@fxSBdYH*6+cC4f$8cXQ56a%@!oxAs;h>v0R$-X|yHeOFefP8v;l;ZeEXKamR8K zH~>ZcfRm3QJV*vrq*f&X7EkuWcO54Qw|w0;F^4fy^H*(i7NA4J31jgI8eCK3JZ}ynD$@%5r6G>cdqj9hyuyA{M3kgpx)TaP{PwbsI=O1wdB!CNjme6&FtK2RB`y z4JRW-uc5aCzF+|aO=bb|mT$YF>;%sha47^b8XY5^EyI7qnA z1ih#m)eVfnxo2&HjDiLB$5_*a+@M9#q7{jwmjf{0Yx}FpQ`Ng7;H_a`=!BqOV|1H@ zpzUB_4d|D$fUzaONT{LsK;qWxVCxbN!tg@E-t6WKPDI(Qc9OM2K51wns$B6c5&K8&a*wF$MwY7E$W+oOUf!r? z(r86cq#<2o%3c&7VsvkF^u1&>pJ{Y-cyw2Ic*aolYzgaxJi%0W_|J6l5s#R)d5#4E zf<=$8<#6#;QaCEjuKklWc_>QXIre8#?164v={ZBIF0M2}+yGr%wp83TX?%Jh{hd7S z!%*DWUYsc?9$_Iq44*FNdmKtceA2gg422l%uL)m&QlA9SP~RocexP~eNhB=ACH72k z*Nq`>NmRUGV~W6KL4)yQ4kz*|$a3B#5|Jh0y-wm=Na}M*5>UVuvUx4?CrQ>uK%6XD zoF^GqGgMv94N>Ii)*mqO~6 zS*rD2YWeq6rs34hjZ`Pkv<&(*LWQ(nW@#RGY2ok|ioHjAxowe{a=k9ABS;lw4jDimtMV=WYUo*;DGAb7SqSB?M>8C^K(8LHFr~e^@(dyg*W@ zKw7Ur)~i51qd>9sf1%PELWNp-g*sk^x*3Ift%U|~R64Ryrzzh|sK{Ke$kMCGJR=jg z=6hgZHXN1y)dDc)E_T%`cJnIsfKOR!E%y2S->9@u2@KvzFx0CgJfkGCwIupKs5E(L zqEKm!P_UC%X?jMfEjrL{qzK$wnnzytU8t-;udK+c>_4b<#qYB3t$+`><#j^k|3Rgj zGs;_A%iDjKci#U)rG+Y>dKCj+6+;;nBmYq8iTjEv^2*UxK$TwQtXJjyKU5lz7MO$1 z`b<`}F_Mch1={hd+RLcgZ>>6nqtf?Pr{vY=Le-ag)z@Ctw;9#=*(TmNo z56zksjgAPQWc`*@@0Rq;mW;NRti_g`hn75w*6(&Lm}`hd-mN8YRJyITVzIUAp|ysh ztxmYDLB9>+-PWAh*4ozAzS!3J(AG`S-YeV=)o&lbXvgGk9f70Li|rE+?NdrEi3dzP z>K(H%?~eJ*j^Aw^ON$*V4;^b1og2cPbBh2;r_R01&i%H|!^O_yhfX*ueJG(YxYz}I=mJo7BZzb(8gwK3bOV3fKMdPuW+ z=IuIBmwKolduSwV(`mCu4M2=^&|hpIk8S2FvgMf%~Ww2n`|ZdSjZL9Z-kztLkq z{uopNVZi(ls?pwWoi$+FK48Bz;E364XfWU`GPuM(ATK%S@z`tiIN-B1==V4X15*x3 zQVx0=3|ZI@zBU_*a!yil-b-6d68J8jA86R)`*Y6*!!w+!>=hoJTqGU1X%- zu`hLLxa6=mgOZ_iX=LePxR7$RPGq#fVD!d&q$+C^w|#{2`)DU6sK$P@S7Z!oFqRlS z+Lbl7J~~SAeXNRdY=Cn7r^xt>LI2R<*nCCDSOwie^vIOK_!{NJhR6i9&-k*>#9|iR z?%43E^2G7u#3|+Esolgu^!OiT+AE*oBMvw!Jqc4Dzs#B(_L&6HPery*K4(p#cTD9| zP9ay0BEF=>F&si2pCbN?N)KX-{-~t<0qp(ZVeo@Y^e5a_(ro`hy9^tq#-e^9I!N#E z50xJ8f4Mx){zS!RIKU-3EwVf+}zmb~T)H^PTf} zYO~00vGX0asigE>?oCl@%-5V}&~FIOo{#L9kA|btPxJ9q3yGo&$;ht+hjVToK zYEN@RJqx7DEt(iWtZo1tl}2+yE$jGQvHZL0>30p)Vx8z>gW)2?cd@R zR|s=9*g7{jRyH_c8{Ee$@TpnXF$nkL>vS+E4JUTTyBeSKXCT-SUI& z#Z&)D6#K)5y(hi0Tr;>64(kogA=&t%R;MfCo zB%5~Z7+TpYI6hojIa+}oomC!n<@}k8?fGRywoMIM5ZhYpT=4_|djZGiVkeg?yHl#i zf2ap`J4ya@9OrFxeJ!j;Ctz&Z?;ZAnrSCc$pgTx&Ves?y7cLTcC0KDQ&mGOW=z&Sej zlBw`l73wJ(uL=^Z9U26MqdLaSa129^}&IDQpa(_?;k$-GFi@NG|~Bd3uag1VHpZjh_ONx&Ts~Ao1KF zNdZud3FL$mvvLi9d3t8}d>fy8YK(J@#c}N}ac%j0^69{h_#4oh7pZ9NS~DJmQ*&*p zkB)YFZTWzK?u2TLi%9_nyk5iTi$_Xj0pW^+f;0i-CP)^e=#4Uq_Bl!j##x;pnhg8s@73bbtjoycGBbjkyqSc@a z0+0t!0{P=nT1*ts0ce_FRHPhq&v;PS6gnsu3Ba=*kAPfMp)8TEzAhPxMI{zY`ffuy zlIW!oH2vMCY%G7UE-@pM_vm5uoCxXGnU?O9X$gW{qc5m%wae5%q^5Q|Vn=|14C=mCYu1{ZP+l z*qeN(eGNyYZ9ew@7b^X%YO8y$R3m;R`Ym7G(r$Zy1s|);HGcMk3PIqMKq4`( zkwC$Lqtbb?4CRffKlKh;g3Z6K0YLcbw9-hp@+K)q_xJ2IJy0oY+KvgSZmw?H52#{Y z28Ud7RPI}~ay0&k&flIVycERI;-nJ=P}0on6j*YVUyU%lpgfn{d8H+vii|GbO~TcY z)dN6eR__6VY}KtpyO&Tc0}zO(^3q>B1;c(+o1&|WBYnc(CMG+omBmEUTcFi#!;F_H{95Cz}KWX=iKL_8Rg zwwade0xUC$EF>$Q2S5q6DV#*$EMbh2$8FBj`-e&=JhbsI0*7S;hn?PAwrnqJgnCMn zLd#B<)aH8c5D+c%4r2`6U{~h#T%qH0;0W&o0g!TM9$f$;aeQ|G$PbI3)KIG#K#7ti z+YLZ^W%FY$VUW4azJ3w{(X^)!6|`(Za}{)K*|pqvX#4zXPSTae7JIjm)@dz0c&FwI z8M|`C7VR6i4{HeOo#7S%XsHscaT*$>QfX-1M!HCt_CqpASVDL7_!=55{Q+p5XQq*T z&*H*=QR(H)#Dz{__r<-P4)?S#lcJxt#T-T}O{8_%$$~S2zI@XcdHWH4hs=vQXfMCd zBz21d}UsU>$@>5u)!`j^3i2KcIQ}R<&2+FA@7GC7XU_-92y{U#grs2=Y zvt7?fHQ*obBrsv5Oio6>wg}jqwo|0n@k! z#N`IlmQp01P9NM#U=kJ_RN=4xIvPF0a&s-;rF{{A{w<`kOb}a%gE8|L=Epa9uVjN~ zB>eLkO!)Znl*}R1*(b^|ufCy4TFt&ry6{Qn{S^8dYeqZ^qc(_3Q6Wg}5H}CO5JLjX zc656|(dNsZ49YBi@oCTWcanZQRK)92>N1-fU}0zG}2l4-wL$TAwNYv}vR9$4v_rm{Ot^VymU}QLCs| zx%B;$p*F^rRw-PPHoijDZdBx~NaZv5$b|czED+5~x)0v6&CXz3=zZ(#uPXO`JEN;s z*j$qk2yB96Zz4sn)8IB*5f)=?`iAfIRsk>l2pHLzN%+Hv&TO4mNa!oXwht3#!8MUF zgl00rFQ(AtD$#nR&5v4RoEv5vt3w>@Erj)d&(1=c`W+nY+OX7Edz-qD9G&3HQa6a_ zng?YZom1KjcKGL7CPN%u3xy5$b>>><`W@X0l~9kIw(1L0ep>gBGM>)vG@#np88#-w zx@PrtoP>Px*%mgwpPlQx>Hp++l$ZzI*a6+Ae znM6#{-_Q4w3^;`{VWMfuOQKNRIeI4W8sYn^L+b=j2oEE%zNAZ0%!5BiTZnvwkn{F2FfHM8uq)WMN27);Tey-JJQ&!mwJXb8?}G#lK5vz&W+C-Ga?Z z0wqcS$wDMkV<}r#lS%fq)7WDQ;o=qLpY8#RZ4oP>$(DL|KU*Bu+VF<#@-e$mtqi1b z3h}h4TE1xt>BH7ohna;RaiOk;XCgM=A|(iYXBTrZs0tVQ)ArQ=|@>h~P8!&UlIR;OOM{p?_bN7a4Vt1(fRP;VL?Rd|zhu!%dWUJlMds361ilbmgmoC{JWS2+5&TYTW z9DN6vGE_sI-!P!6`6J^xRX?;?W|3K!H2*T~iYVd|tE&CfN^hA+)~Olf)+I$+aIMkUEBG6%0(Da_;}#Y5MZ~GQ0qO3*u_4lV7~C9j-x!+HeNQnRNqv)p-)TpezvoyPlxBO|m2YcxQW#=5LM`c&r; zquRQZn!8-L-hPM{)-xC5I1K~o0x*W;aM1dVVXlEFl#(`?;bxcE=2`>6OE{KVs4`G7 zn?qjP2Fb9R@?NQ4YgQD0EfhyUki0sIKd#)OOCWdqkahFh*W#cUDJgQso*{C`){Y9m1;^!yQ5fjt-R{DQrLu#iX~Qq_?I- z52xgfAe4x7Z8=x!Y$-$b=LY*(^Ij~5%3ert>vqv+l`k;_(blvoJ0b8g_E5FIMSGOk zWk5na4Rh`ezFI_vOFlX^LOCBpeW!!PIOM-e59OPWMU(^}vZ97^BO%KJcw10Qq*24h zM9K+yD}tpfp^f&u?ah)X>by!^!R#9A||Zjf{ke25>UjzVqTJ(V9k@TcFw18iy?1`+^} zgTWs?%KZcYZXWEW9sn6}RLyxX?gF5gcj#kq+Caf%m;fRgSh+YWa9A0Dmag^|%DX+q zTgD+Y!ND`B++c_K=7)5zA2+~#O_8$z*e>J;g^+2W#o#edHLqztjk`MtqDOdn!;yvks2#9(yr0 z*8N(YS4!OuQN{j{U2{va31QT=x!e^XAyDZaH`odGW52v+=l}t`cf7C1mGGzW6i2^V$bWM3+NCJMlk^@a1&`* zgRzDJPuG6-KmOF03FjVHgYjy{$WQYfwegFpA7k`P+J{F*vs=+Nsqg_@JlLhjWe}}- zYqBO-__SRF05&nrH6mJ?zU(#7CO1-TTil zt%J_G9FgM?>Blc2rx3}-BlSDV0Gcs{GXe$CWS>DR@SyNkYWAzu)vUueP_jdl&g z!|DgEeZ7(gkl*5S-68pDk3CEOE+|ARa?mp!j?{)Ij6X&TRP@zaw*lUZ1bcG%CCO25986JjYXePKrtUF^_aJmy8Q z9g~UJsbMHm_1wt$M1gx~Ydtog$6+WZW2--T7?DA*&Z# ztd$m+W!G%5^S2Qyy~If6u;0^l6W5T_UarzcQP&A`ZeF#WQgG9SFSa%nkVQEgUskJH zUTFNN!Ed2uROzaVqO&vIY{v89dfXL$yNN;0z6=f-0&2>KXmKOSrvG|@3(_RbcyS8~ z0&m%ehO-i@k5q1DH=Ec0Hc}5n9opZB%I81{QFnDKAN#rEPL1X$s|zQe#xZuwVdT3u zwy2PEBeztJNunM93w94?>-cyp`fs~l6P?}zRvc9WVg2E}R56t40mjxLIsoJm!cYXx zy;$btAjgPc?LBOB>%x)Up(7lg^Z+EMjPaU)3|5;Yx4nq=F{)Yw zX%kDUP|L5(`?TNwG}ivfocL29WW)P%zZg=IuTz>i5K*{OS`=$tGQ01VXq%v8TkiIv z;`mP`vz_ApegU;j4fa8H(ONMFd=+CseU4dKtYjmMwbsq9dDf0L(N3|*wyo0+!mkqr z2(ex{=*!9D0E7g|?6tt`x*;s>Rj3MUub~k8iw}r5@k@?wht;9>R*6F}B;2DP)JKT% zE7P(^Gdd0mH31sxM{}V^^QlJ*MMu9OM~eeTOS4DIJ4Y+mN2|!kYsAOv%*Px2$D6Xp zTVlr=H9&>6qhdOTpE0kQ4u%j_XTL$>;FQfS#F$ZTy0sL z-@muEFJ@59g;Uc1L8XgtyyU*P-T>^3-QDEq-R0c8;ixppZ2-${;Gny2wH3Vo=*Le^ zpSW(r!fwOUZX>$f9p!F6>D)4$--H(5#@^h%0@HOqTnC zwENQH`?BYY!m!^(?)Qb{Ud&DR)o@fg*Q+AzbbrNbCBUniAK#?x7>jy_xHw#s9wQ#I2L%5&qAR(~UPOicbTHPy5@)!LY}nw^z_N=l!{v z4KzN(bC2V@k1)03N0BC_vP#pM}o^;A*j zUDxcru=}(k=lg5!e({-j?&fLZjo%Q8Uml5{6CG^R9k%QKu$6naZ3P<$gB=XQs?+?E z;EMF5FY^4;A<6R@*Zon`(=m8WI67pD~boP6vbkJ~os>rYLw)6whP0#q!4w)*2uM72ywGxz+8DA@vj%k8ApXs@ z-Y_^S{U~t0ML<;#iO}5rv-h)@i^$-e*cR~=VQ|;Bqb&p3jQh3((`&z zgsIVL^Wj76V4)n58J#p18u$Oh)meB&`9=SF7>1#Sk!I))>5>MAX6SBlK%|kB1{u1$ zK?Fp)rE};;8bm-qx=~RO953JBU3cBP?tgIJb=G;$S$lu>^JIW>P48{uU}j7M#!$pq zW+;(OQ0fHGc|R40^^we_GN~k-SdsO4kaZlkh~||piRe^{GS4HX`3JeLc_3eFlq|t# zuQbm;e5l+wY5tD4s6c){!3y@x@;$9kWm21=1~_X)lWz))=r%1h%2P7MjnrW1k`trQ z%Y{}W6=RzvP*A=Z0HC4tX{xcQy!m`1)Xv>Pqe)KGk2{$SO!&vy^EETa9%JuSMw}1i zgB}xbY1qY9->?i~i-p$ds?RldV>L>G%VK9Nmb{s1--^mvgT7T*$X_AN5~UI@PXE50?X zeAd5cL91=N9LpoOx6R`FH*1n!p<$;-ly{bZMbfs>?TZ_02Fuq&EN)F;wXKKLF&L*; z>ZG=-ZhkBB0jRGR|0P7)w>kVyLhHE~xtKyVR|5(dfPa4?Z&mRy#*asQGe+F+vyAr`z4TQ6Ra9ZnKn zZHObYul zAWbPDpj|Hfan%vJ`OG+5c41fhDcnkpC+1Gyc;7#s?mZI5cd1aO7fFdqFig)bT~`x` z?#Qv>H^>~9v0t7zqBqt4`1ah}T>MKzywt0(eDBjz@yPL1_bgADCWG>^*~hc#SQ%2M zL7WO?d9{8s3rXJ%<-zwygxTr=dK+)dao@srnNj>>fYy!GHLO(WIgpsSG>lPiuH;q& zb4ptqN+H84vwkX(9s`z&op{QgfOy)wt4z6>DK(~TO(rL}KacN}XSGg+S}v&@w(Vat zskSTAXKtGWhyAQ807YAp2#%Th-!gZPm@=vl~+Xyz$*fD9flHk|d-# z-PBT%$>u_;9?Z4OeNId0resQc+ z;#m*!R#i>kGTaFM+N%%$S#3RsT;;_O3C1X%rebv&){E{ z?aqF9CrB$|n(R7xvsigLrVw^bBsQsY5Wk&nb}&wmUX{8242)8wq6+L(G|p?%-hh$$ zkV6aFmsb>=MKFt~G^B*f2zJgTg*@;o`Hm0Q){xW)e$+dru5p= zmm*!CXF|l9-}9Y08g#8K_lmWCtUYt}>iV*Y5o^z`#Z!k5#4*NR*Af|?yuJ|JP?8r_ zieti8(Co)oXczDOQF{^mqw6aMBaX)AzeJIBZ-Jjm43O1bMv8QAL*GaYvGQNV8g%ba zK58c`gX19#Kd~PAh}*65eV+>r;<^mMW2T(*5c$}>_vi5d3m!>Ya<+^JYv1itr=+aW zV;WB;$>Hi}{6C91aS6+FI+9;A&=-8QJmUFwE279kP-4(?Je(_~=5X#kB=l_8;`jJC zJt;wTde3PLb>MP3<~qgq?S}IK2C+&T=JRo(=bS&cYjg?Yli${}9GEPvaQW(YKUoM{ z*g?$l@1%_0`nwBVH!3yg^P6!42G+C{wH*pK@{zm0XQ5BW_IL#T%tbS>=B~)-N$5C_ z9!MRhGRmI5cob0j&#bIMApRJCI>255!}=jx_Hq()cXssm*NgGLMZS+dKkJjbnPI%Y zWc3XAhK+NJG!FR`NR@W@wC~PtKjcN6PVfiQf0L`eJr~b`xK=rb0ZH+7Cxvam*rwP;&7!eyC39u&lYrd2=^=pGB<$iBpPop}G4 z;O~>6pWBQ&hhH)No8Od;|6nAQEcjMAmih(guoY^a-*wF3Ckf`X&_lNqML79&G5na{MkJSi=}2=eiy)M%B*g?r9_7! zXxbt-W>#8-Qx@jm_;2l_ilVL<@&CM2WXmDY&9vCY6TDGS92@vf2amZ?7|Kv1k_ZJV zg%UYzlTX31;R+-7Tf%}{GR!L}?M#A4OpmHSbQ9b99v~0;Vg$K7Yf9MTP^^zPW9scD z9-*km84A==AWEm=N0de??%OswEZpYI)J;2{1M=8M}g@T#_m>P}+L#yDt2MWHxmO)DpD*~AS z%#{jH_WOAf00^m24dx-flv1ok;GJuR#FD%~jv*uhn+ArkSOOTvDms&76U?9yjzB>L z3b3vMf@Gc=o`ayUR&0xNSf>rQlHe!pQ1F0rL>a?n}Kqlp1VT(R3d% zi*+{)7ea^ew4&Y`Em?8&ORbS22|hTetRRtgig4Ra#BQ>lt*)tUh;`|&Ctu|ou!PF` z=?s^|MTdA`0AOh;7O}n{|2N=aDh+Qa7CclUBaWvchky-$#RgE~W5Uj`#bP_a5&Qfy zcQ2*cNZ5~!-*MS`EzKd-4iJET+4zoq80ILJ!7jO@p24nE^g{ixO!`+D!9546XU{G+ z&2nu{?{gZEL5XhcAgIjP5r0tMW(hfx&s7C_9I(sMNeM2HcT_N=r{^M4KVZjfyi{$l zi!QZ6z_9ova{2g{Lc_v|Gs@V{NaCsv=?K8F3=z&gO1J?`u2!XZtyceDgEq&p3}fdN zUsl*}1F_*~i807SypoX*jwOR;|E_=~5h}r@sTdrtv8j-R)z3XUEX)udFJGjKV5e;# zFeN}(@L|((!R&JF6JHzB?ho`C)WUp;p&N>`f8Da-fhBP-^E=YMC)= z+FFMDz@B0$e|avJzCXUhAv~8OLMj63c^pv&dd%UJAX~(hxi20{Du$m1M(>??az_FkzxFN&IdvQQA*}G++a()a-L%cD74gjGrg3Wx1Ap z`t?M~@l4{wrx zTP`xa0$OC3NhwH;rQ*#^7Q(Hb!a@f%;$74$(%;kT{6JvKMK?tj|8~JFU->gH`2K8o>ROP<*%^Wgm5 zVN%}KeR;ObqQsZO2W%c-j5`CyC_-&HpFu!GrYOEC9N;=Yt-p4CCVh|wWw-WfbEcS< znDvhR!fP5%R8zmD|FYk>Zrj*(x&$;Nrt~dq=*oOc*Npd=)L1;yVBa|BP&?v)K?#^0 zaVS^RH?t5~$BL{n`lmvnw$6JR5^+jNL5JBohRnhRBw**<73XVQ7j~C?100u>k(W?` zMgHe1oyB^nEb^HKgRAmZ{tG3ca;!@=qSJxQr0_kiP;4ZeeHD-dQs! z2P49^^XuHPe7V4GNSelAa^HJ;KffejL-poQIdWIvn|298$%&}i!{7KEFT8OtV3BiM za5S#olHMH|RtG#0!oGV!%ESw9AHY-E*{Uj+mfNaM0)fAjsHWIB#_C(3O8vkNX+R?z zHXZ`9cLep9y3GwXBo~jKe8rZsnIPCIB~6=ZM-g4>@fN^I-VDgD*@BR0;4FYB5F1t$ z3e0fEVhaWGzCfHKrUE=@R{@xpWoGo&+^M!q12&Bzzy&&pF_kp0N398MMGn|cLA4f( zcZ<)AyAG-yCL4z$%^cziw}1SRlJl);Tt`Vrh%LMQDd$^HVZ45l%bGVk9!h@vvPoWY z>Mlf#N+o~704xrGfN59qw7rPD><6GV zQ(`QWWK~|srAi}(i*gOFXzu;@32u>x=Z&AI2})R03$)f^#FFgEbX|#^Q7T9Dk%4|d zqYwb*3Kg*QqSpc-#NfaL>`lSYZW;g)WRNz-jb^tln*Sq(ueTymrm9Z`f@o>W_+z;8 zN1Uct>Ny^0wJ=Un42RmGH^}EF5@$Z%j5On!jVYPKyDNit97__-HF6qU)}AGtVJvW3 z*H>W`a|0E8IAUQtRkv0RClfXtUPEqsEd$^pE2$h^!i7vdA>=w2Y!S`d%c1$DQ1c&1 zYvm`Q{k!H~20E~J?6V4!G&o`gAPis)!WT+L=U_{~p-OfFYDZWwZ0e#Jz64ut+x~SG z4nwC5Qw9Rwk+2Aap>1A=yO*E~zv=e(9& z3j5!dzplj_<*m}hpZ^g8{_r3jc!JpSu&`b>?5*Lsx7C(gH96k%HfW{PFV=V=#+#D? zW(vR06v)SD35N}=c=rH<9N`i_m(HD-d19EIu+=o{#hlxGv_AiAwrYTK_ESxbaznyF zylAHLZ-PUrL=9mAyrIDRVMVp%JN88>l{)!Ak2F^%1;MkMM!)zzu|MONst&HgA@aCH zpSVr+C|A*-hh3UPb9?J468oq28L){fF~`Hw86(mS7&9Ja#D6POCGTg0>kZNYNplAn zYu3q`1`2=sD;dt^_C0LI_q=G+e9r!S+UEs?iv`ZM#U@rb^Y$g-s}BXkGg&DqWvNUZ zsShi95;c{+eXL~*R!(2v#l2xF=S(lx;j0*xN_+X|!qc<5t1|=lu_|w8&F=t(xj!8B z0T`WiDdCADwIA zM8pvWLR_R-Uk9oL1-7?I!xE)SGrC&e2h!|yE;4j=9Y`zmOSe`0sago^soywY$Lc!i z>L(-a(@5<8CyhQy>3pH|IOVoqCx}i9^{n(+Lw?|(ba&5Pi7Gs7O0Rotkc63uWke*< zW#Z?^!R(+;1VurZTvGQ`Uka=sEWkdZ?EU71xc=y9gK7*`$1PShk?b5*&m5!dJZI1R zLkwHIXW^-A=`E^$_`b>RzWX8wTeh3gMRvuvhp}}1aa`DHvh3&Vp3m=O*UEbyrXpm& zwDo-HlU*O}S^p%vvC^~gRd(~BXY)e#>+hbg|75pt<-TNxJsv7pVGJR7-`(*@df7hs z(^osCqNH7&5XwU|RVdcJeeb@T+<|ZJ!5g{5=-$I*xufjfqjz%0<-N!Cawl!QCw+3K zqrIn}XjLGq`lP07O)=4kW9DJ$`|+8U+hS?*Ln981*VY7aL{|ti{Q}O z*?M6BCeh7lH%)aisy1n~t2Iw?HmQH!A4MUZ@Q6J=s_TYg-a=u<8D0|O~Ps1ZEF8DRrA^>h~~A^v&n2Bd*iVzFZ)mLx^e z8k)JZ9hD}D(+9jVszz<-TwSwjm^D>Xf1KSS$U~wcj!=JM*QaKFqRw;i zO1(bdr^kct1uyu4c)3OUoP4rHSI5O8>?^^qlMYwl=6cHcsZV z$B0ak9t(V{Tj4ksCQXLFUE3A>neCD`11Ne(znT+{nLdwxd`eaN<{6FYZmOj6>TbH; zD`JUXx*s%+l4z4m_h&iER&|}RZm_-t&*})jg0#z{({{W5}o-(%Yki{tDH5v8#hz zkvx8>sI_Tp(6<{To=9=plPv|DOO1J6BwXfUa*0ZiIQk|fvfHMVg<=q(ayio2Q!tAH z(};eeQxZ%vD&3(N(Y5C9?w7T6K*K8WFknb8YLF;y)~DOST3zB$p4d}}o#(y;QJ9V5 zwz`5{pG^K;&FsV0u6pzOr+Uq?UA?mZjB#7u3r|vse4P1MYBr%k5D7KWyBcEfw=rd~ z4r%l=+c`G(oYHT`5>TQMlrMK|Bv`7l)VyK~X6_wM)a<~!o9h-dVoPC1#*^!w9WK>`A9Mgo4W;55daTvAmdF=q$6jPxOOJZl|ub4*~ zCW8x8s?Kapj5W8w#gCbvOQ78eA-hn2!pwIBtL5O`#}^4^@M`nVaf49<1M!CBUj=n` zz*|J0V3mvGa?h$rwSVbn3vN|dTsV@(R57zZm&G^Iu`!B=F0>R;*zsH5%xB7~B}o#I zYIPt40#OE5y;{@S7_G$xvDZ7&Q4wUs1zQo4PZaU8)yNFq{xK9)&Mc%*M(_%*&5>ky z61Az-@`fF*v9^$Nu#w|(>8BDBxv+%ru3K~4woRShvSd3ztSO!gVUvu__grQQ1iLP* zWT?INCA|LdYa$GQg5*!JxiZ{@lFC&S(G5ny0v!YB*x0Got{9wOM~ce zQCIXrq-{JA8pJP9Q{dcHdUoQpqP6~n<@1A6 z_;b>F6omwNjj4ytk`)(8pXm_uEu_kB8^xOWnXDuU*NIeAN9y6OQGB=LY!&a>FeWbf zeX;~n!Y<(7F0AqEW!XB9cQ4{CLI|59w21se9X^o?&Oqx1+x~l@6(M9)dajWh1P&P)OoAbvyruC1iw(Lt}0qfe*ktu1pJ>F|J zE#(D~SvYA?D`I{1nL(?vepEy9P=%f9!dg1hGtpS;N){ns(RK!3KGpDbM2GZzn5RjG z?s9T5ITn2)!g#-!)LD$KpHv?jXKCk?SAFzLE{B}DW9m-0~ zZ{k@-6+l8!z?#%8~!e>s$BDQTj1!n8p8;w zhIe|pjW7=^a69f4!rnvPY`G5+@M?1z@~%q3}X!%Vx~aW zE8EF0+@F56dKJV*v;s@|!F0ir$p{VKyxk?*#x8(&H=xvQ-k zSW$`RRze|N4>EG5Glx=t+`3VF1ya*sza(O(}R`l;^w86g0yojJx?d9A{2$f~y1_nDK`2$JhhCl&E9D4Z7Jftfo0 z(yrC{Q2Bx)D#)+2a(GDDNw`3dsK#T$A;;M{$$!XIsf3XFVFb=v;}AT+815Fn8ty(TRTE88)qyPsA>JkcsX~&_|4L>^I6$nA^_JS6Wv& z?z1d>F)q=*betnBbu{rpz5#PrO=zf}JZGXSA=XQ}1roWLE8hB2-dY=a+-UY*rbpkA zv}^rHJFjYi%Zw+(U0<85ju3Mj1opk0+FjF-_4;~3q zT|r4M4PYsOp~Z2Q#Z+pI-G)qb#>FCt@sADq%8Lo$7%XxJJn-1zCsS97(Efh0glOC7 zObMNA74#4i1$LLuLVCs8dd-@weH@D7cH$F!@ago66P-RTxr<;2 zprpQO;7mmi!Cj-J7N|1jIh>}3WDKY*nkbc-uzegbb?tb|<~F0tND+f#5gpQ%t!Sw6 zLYxxv+q&B0EeGo{eZG2ZK9Zj*kPPnCG>7GW0A;#X9y4Bp3-mJxk42cK$eDKC8cd7^ zK+%kgC?S&h6LNhmu&(fr@5GoVY&o|Di;~dAaYkMh6eGIVKl62!EJY=em ztMggjq6jOm$>aP*ckE;PlO^1+Hp-AAUDe+X4GR%XQ?J-t4-JTlhI!gkRvkzu8u|?} zBivF*(TghO9*am+oecAKfK5QvXifVlsgZ(qbU7?ytkBMzC$e(b)>|%`zg~E2xK)6z zs~%28E=k&~Ct|DjxJ15xPoCAA7P84h@bH^}W8E|1Qig(Uk>F4im^2iNMV_q0 zns!%+;Rzgzbjz4}0kZoV+i451xQ&?wDboM=7lHm;6tCp}ns~Yv5N>2j0m9ZR&8rhN zdweCvacpL$fKSL~UVkl7b^YS#{R?Im3q?DNIVE}sny~^)tCLyjT|XHm9Lt62(FBru zomuIsiSe+Bu7DZW0S)M-P{zE4(?dh)&`9hMX8e(aleHPfC*F)CV$X3?*|E2R^1z*yeLAyNJ~l)}?mHgdq3gvxWM>7~uF%aivm zvL>Pu+064|C(B|q-jvYalmZ>{SV7F^Bbp3L#dPLNM4x9FA#K(IzA`rD0WLqu1Y6<8 zuju|{*s${ZzG3ycQq@z;=9g>pmwn;if-O)}XECG8UQ+D+a)q&KTmBA9tI1buSBTzL zTb$N!s}f3XQqfp5qPO9+XLx5-Wbv!Pb!HDC&5L?}+v0YME(}K_+w6S1%y%PqmelFi)bTHKrGKraKie@`EM*+I0jT?B z`6EOcv8%z0V49q-dQp2S*Hg!RWWtZ<3t@#snEP)e1O*^~;jmuBad z+ey8|7;~{n&nzKn(uh0Df0vfI{$X-o3wzy}?!Q){Ww)pFovpNz6~$6k+^LfyRhgX^ zlD}4{BUQb?&TU4lF|FE)Hl%ZxA8A4sI*n4=o+7Y~*dz67u5GJbJF5?VS6BL$oJpA# zG`{oPepfR=rB*#Uri!DcA?FVP4~ax5;8g$1LtILgUa$GznwJa)G@rka&nB^-hN#-p} zsk;Sipog#>VW%*!xLE^-^anB*I=-YDsZfwhL?geii^=zK?tPBH4m9_~j zZI+&OEIk#QI*=yhk|(_h?$6z&h-miHFX_@#_{Jaq9sDVNc>*S(-9)k}(+el%D*pPC zHl*vm46D!_$Exikfc!htH=~d}FP2B}{%gHYrQ%Cn*Ad_#s74|Aa~yKLc2z{y(WSp5As}EIE&Pcg+7U zl}?Be{xFfrOEM5@4O9k!8JyOdkC>o>VXYCzbw7AXc;b|4607Rrc`3W5e^ksg>Z?J1-~ylS-dC3pZ@_M-bA=CEV-Aw<%x4^nC8FC6)| zm3x@CUYsk<@h0`(wuj;sH4|hyzVA)t)4qXjFx%#e1_xGje@Xszw(jcw4{8;d0IK3b zaJQ(h0zrcVUAS)QSc$)Xo_y&`e%gomKT>HRRPEte$`JD)l@1w=gVeOIY=z(X|K5Bh zb-hpP?%z-RESf=V*)oPDNzEpfv2bnNm3K;n=A|6bNhr&a;vh;WC@oy)9~`If^r;tUAg!X@JLRf|v2{M28yQvx#sMqcGfvn-Ty}{Rtpe zJ8l;Jkb#{I9n-ea6ojyd@;0EsX{Q+kAEav^VzLBd$hgd=8FlB{*3JK<(&scUq1^jdliWJ`YvmorA`MOHjf1DWs*f-B>JMVm4E;B5Dy~12so)R?jS`pYEgw>BNbs8}S z6eUN!fb`u6qXZERp5%mmi@NW*30?jW5}CcqjYt+96T}vLFAQ+!!5_*~;wEsJz35H6 zRQDLBe4gMjLgQx1#?lAQA8O$Crr~H>%NyTr;SN-Do#gM+T%8aW$>57$r@ZB}jOGHA z3gVYGEeH~%q($_V9bOKz__J9nvl8Cy7?4P2I6uT^chQ&$pok_(L$z292bhPzr3D4oY^8;=o(QzUcDs$0qdE7OULDH;t(FxscAgl4Cr!)>8+GZcmxvJclz zyPr|u$vgRZtNnyaP)J9NsX=`u^M~P5W&KG+jG(9{8USp*fT95e?xCR4%#F};wqv4L zKQW=g9}GF9`v~_ix3I0LB2}s*d<06UsZiUg0VDXfAD-gqGutSOfM+Bj+XK|yJXrsDib#@UhS<1;@MBU?5GSr~7NJY=5RF`% z`Y~bxCy)4<{+$*%qJd#er+LBbAWE1Ai;7#S z2WOcd8VD;RBO^$3klN1Mvz_g!n?rJ<*3q}XUjXu&8CA%vMUWl5bEOuDwY`AgxgQ;~ z<@U;*+BIeK7adpkX-dzpDSM(SJdLpnZsMSU%!~MnVB@SJDa0<79}J$MMk%j2(^gIP zeRgt-zrs&qQwje%za{vX^*)^ zpFjVi-a8jSN8VD>xU{- zG?VSMuj}JCp6x9Qcm2(Ge~Y_*`RaQYBTF6PHOt2CuR*}6nwyvG$>vS3Sl542>Eh;% zc5kY>UD-mve_g|vGCYpOIb*9AY#g^y6qT66V@Ha6lN$xUfw}hjNPz_Fp1dikd2+!W z0K^7A04BA+K^tjAvsBmlYsflNF#cQqHf$0$cpEtxqI&w3_@v!kLQFe0K4Xi_M3Mf) z^eWygE^(OwLp>t$>LI~t@uG0OeH8VjG1FS*<<9+$DZ;cVyH94DGyXxkktpo;=hreX z_W6WMSymqX$GxLsswwX}FE9J0sAp{9Q*CKD;Q59zGh1Y9&`f5oK!n|9uh~o2SE2=! zTAaZ87>|Rqrndr#M_FRyl-!5S<xJo-k(qWh4`(&c%&(&^(ms|;}h5SW0%!DQJEyh!3C-S#l5j;Kiz zPrVIEG=L6x5lNsn4SqAZPTmmO-{@}xvWQT`ldi-TFw}K@yG{chmKf$y5`@N3SyEA} z-S8rHpS^96r`pQtpia|0f86!O?DV`drgf9bFVJ9f`XyLrs_3G5P)xlQ?}-k?%89~V zVXY~&Uz}yr>C5&XQm4p4{xD2bpET_nB6P6owP%C{-WTCmUum5!!La<%?E^GSem0#c znj}REf1Klb)0f4em&)>!$M~O)Tf$$W{=wIih`&}tGw=1?wL0y-;;$_w-8D3ATw$b8 zcad7MzU{LLIQd1HL$1Cc%S%j6KV^?LXydBjVqLgtEcA!}cNeW8WlF@#INgwStjzO5 zN`D=N8AaLa$-#}^wYXA#)*y5Q$@NWf`NXs8Xn2BQBjpW*tR~f_qd0q=j&o z+sI(6?hkw2n&Lak8P)&~6GEb5?8CWdoz=5>B(t#`kj$_{SJ@npXby<~##LI#iF}NC zcq<$MgDBs)>t~}hVtnb_!d7to#oL0}sa|cNy{IY(^G74X+Q?j~P#9@ukJId+r7V~J zHnIra$3cVESH5o?^xp)U!u%^pZx2|E-3e?$Ev;az_*};DEs%DKU;Q3ZvXZag+y^+&| zK8@!v=a=~2fqlt0xRJ?MraxG(oh)`G*ge%BI7Y^E@*Y#id3 z0`X6Q&?D0J&_p3y`0SNwJmYD6M`@(FsX~v_Mf_6%2e>dtTvm6iLfv$#B7DkNLYQtU zr5T|dB3(5$15ufwF`l7LO$a4U6LL)V4<(e2O*QJk_fJXR3{7oBW*XjR`onQqnKG2j zvivUz6mxNv$J1YoXHxp(YCX=@K;W`$0jMwWB{~T0V^dq)v*atYlyB1|sk4kEa{?=~ zo{VRQNoFTX;zEg`;+2`*fJ`b!+&ALsExNfvxrE=Ca$&iIJD0gxlEB^BOz35nzb>xS zc)HPeI^|Nul>l>5tXwyCo((VlmK#?z=-L#|x&8 zAQ6DKbGdj$Tlks8Z|83Dr#~0u!SN4t@r#PyZu>*m;dq5ig$J>PN0o&q;{_{6g%|km zF7b0#9C3-5pevGu(g?fP0wCMYwTA_{W8f#6=hWcpXd`_xR9r z{Gv@b-nC=#+)-wsdoinE@rvZTh^_49+d>F;k)$M)t*VHpv!q_|0dSWw>sWFrS#tOJ z-M`O8*Z%M3Bnc_e#UjUr_ebyM@QZ*GCA|??|M}-OQgyMe+ zlVc%f>Ohs_!fOO{WgM^b0UeCQ#-QOqdUvdRI9{?N))o@G#~n)z_g!{}Uw0+1qe=n# zaY67gNgy|UnjPodN4BLkdxhejq?WV&f`i0HEwpqC7xl zY#unt9GuQw_4ZHYD!eK=uQI<1KWPm=W}+f7plWp%Kf|fIKCUvysk&>Ty63o}HN`vQ z7~B;K$&kV&)2$vC!loY-n$TlTDBoV)LR`ai z=iAx|ZU}9p-ojs^s#1WX*x*<@y7=u(b=^)*;}SC1_!YC;<%(S-@){yxPDqV3%egYL z7}G!mI_5r{Yrm#*62LMZ3!EjYU^@Y%gJe;X^HHW0ythT_(w)gf?3}YQqR~><0+FFDOPjXz&9Xh)J&@Xn>2DnM@ zIoq>5l3Ou$gf=lc)Nvb93-b; z;x2;~F2qyL%ndJF?aTEG1f!&}dQ@Gg9qfm;yM|P!LJ?E?UwDS+0s~uAhfE7V=H0{j zc5ROx(Ea6!m|q0L4N;{PzyN7TV^o4$IbqdUT#x&R3m*0kF+nXJ1V<)o9*ws@mi>0WIEI!&Ve+RcP$+^%Tz7H{Tfs2EXR_%5Df%VCun#J)T z8)7b0Yz>(k+MT-yYdaMG=ZT{b9Q&Q_B4W155N}?Aif}UvtAIGZY|^>cXLQsa)Kgv)4rHQr?{S_V4~%g?@oql z4xG42{;e)>->5CF;HYQqoP1$zTdR^>D^0Das9@KoEZ3%dHgnAHh4F<2#lSDX?TIdw zCDeuauv)*XM&CJp(PU~-6EfT_(`!XI#q(r}*w_KPG@eangX)KiU^m+{Ja}u*7rxXl zN_QJQuGC{6D(#)e@AE);#Kw+yt%j~X%Uvxi`8{g)6)&n=4Bigq3bu`CS+5Ym4aDaG zAwnO{*bY`V;CCB=B%2RR)m?h3#2B|vMH{w)+ZXgbV?@I*EhbHPLcw^gD_vxtrKj$u z$tG%$pgQT-;^W-sJA|cMgfpZ>=jGq%7bDgN=dPRWHDWVvc09-kVZWz&e3zfT+U=zH zCR|4+v9KpmbZuTJ}H`Vw1e8>G7N?bc`amEz~{zxbH4o;_>+mx#JuuKwMDqg|Yl zLB+RwuKdqzpa&kWq&J`KlX&d+=kBLReRDbA4^Fc5gdU=1guJZ|9(f$#<{s!Ws7Rh4 zBw|9t9;DK}JP}rhL>`CW+(X3VVbaVI5Bt$O=qV7A1q&JZ@1E9d)*AI^??|AU=kU!7H}p2Zik1--W1 zKM!sCaDEFtIo&*;{eJ$8>Y}KbjqBw_hN*G8Fb0=qt5bn=#iKujYOJ>6a7x2_lw2A2 zX*Q%Ns6#pJlCb___UGx}^Rs_5udqI8{bA@%us}B!U8>Aqmb*r|QC+3>ur)OV8K-#> zbkkA@=;h)<%iZxq+OCuazBBy0qNe!Ha&gYq_lo1W{&C@VRlkKJJVK#9T7h><^4~Aj zYopCC6>AAK97Jyn1DUGuAh_8Vjm!!_pQlFW_S^k1)e z{cp=RKa6aCT#m8Ie9}xjxTe(abou(LEa8=V-%ro4cHYU~rILROGO`6-42QT~tIl6H zdwPxwzUE_~it5uGr@9epx=9c~ARhfrd-{7DgW1i4US~Z=H;y?L8lzP&35Hd$t6L+f zE|&6FA}F}J+}dyVRS9X(CCp5xmWtb9rTO-tT>9{-^@+sLVzbLtI*@fuS-SEQ*5FxRn&1+pDMFY|Z zdrg|JD6X(%@uV9LT=)k`RI+I7o3D-RQHW+CaIaZf`rsgq@YKX}44h;1~+}q4fgd)RZY~m|eW@?IUl~{zC zb#0O#U&7~#sMvT>%^~a7Ru79hVn?)o+|*FwQ1GuGsG8p+L1SQy&1SrY+3Z}iT8AiY z9Rlu6yA;tA7&Y`Z)Yo{@Fq9}q;K)X7@%q{*Pb}jXL(%hN~M=c zN2qN<6YQO>w5P~3>7SnaO(W8-aq)@&be6r?-|6d7r? zU_`g*j~GkL2>$e9E$sE;SSRxR&*v;h6T`c&ud89q;wL!%c6m554N68->#yw#pLSo{ z7ll&>92UlJc9@WAKq%kaQ(f+5Q`4v+qiop+mdzYU@)Xi!SUSxuUU53vf>qk3hEQrl z!P#5P2jQal0z$@~axrfLyXt+fWD}xD07he3OsMXU^PqvdyxBQm7vVVQn+d8TH z3(TJU@!fL%UjPq5@V**)c;bsUeyHG+_Ymn{m%iv(2=d4x2S{j0fR%~9X6V^&m1TCT zZM%nv6$MPu$`}4$NP!>~^sVJ;;PBy$4Iq#J2+*Jv?%N9d*p{7??GGV!V%_TsxIuM! zjx2hkOdLeOB!xvRhJ||w9C%^7ukh(T2;@^~=%|n?4UTSZoShp%#~O=;j)w_xp^@D5 zxU$IbUj8dv++;+BLmO^Vl|1xeM}W9QSQ-t9v!rD$Efh;!@(Ko1@s$&~62&PZ`YtU@YuC#1tD?zyfGsim(aO z7Y$GV1AvjN93=n&#G)EPR1pIOm=h5WnSvi;kbns+qH0~SWI|pRM?}F3e|D_g-QdT^ z%FyADO*#!G2RRV~uCOa^ddxyfNV{>MAt9%^lm09NIEsx>Qy*Oj4OdA!+d*m;28-Xv z?6n!1;*>V1MC40-O0!lbXjMVXWl>vYOQa@MsXZ}jQ&ZAJrTuaOQcOrH5>SIAYzr6) z{t4q4m-UMi{K6Oi^hJ%Psa1raGX`RvfH1hJfEjE67&Iv77#XsPXFhEP444{1T*Lqx z{6Yo^D618QF@ppI)&@>U!Y~vd1F^Vt%EdqJiUl>f)YOgvK@+P>x>s z632$-F)jW3Umo`bNb;B`Fst}Qrx^G*aG*y7e$y-rC&oJCSeMzXutx>hSr31m755dK_tGQ14JO!d}m$$z*dt$ zgYxO%3ybKQG8xPW4G)8`4aorn9$<za=^Wt| zy!g=!jzPfNS`0r00WVl0Nyvm0DoJs`PYl3u2K^afAS%d!Cn%{>$non4upmeb!Vw?s zrc#b{fyE3|U}y;%VHP6zlX)5KX!Bs=qQLE`dp(UJ_t=UXLOtqL$2%sergyz@CGS|a zx+DLkNYkG73mY_Iakfr^f|aR&eI_IiVGFjjq{f0)3{=|*2X+Kl0B(fTKmmEw$6V$!Pxrg!OH_R4JSFz#dCxJV^Cjw=BmABS z^rV-CDRjKTTrGJQw?zYBXDzEsPeKtIAq)v9-~nkS zYbV4MzK(jg2yTT%*Z}Rx(q4cUB8-zK;Sg{|2whu&h#X{L*lj;Kh9{8)*vDS)v!{LS zZJ&3(>#Xp8AAIk9&(z%q@9@A%d@vXC1qVbR3kb==37U?8UnHam7@n}y5u9|t%Af%( z>ikrVpO70Q)_uTW@f2e4fFmcN`6X`!0+5Z68@u)P^QV9P?eE^)&o}t^{(b-bzklEv zKBAKd&s&Hh7`6>)1sf=d$8!K0V1-uLfW%6=hD!opn1NPUgF`xIY}s{y`nwL7Vv%cmu$A^FJZ%Js>n1 z0W3a;$N>y%xnK}6uTlUKWH|=-g>0!nVc@F-XaHa6Fc18`gg6AcYB?H6g>*uM4Pdzk z7>3pJD_>x_8A!TC2*WI-fj{6uJG?_Y%)^DqKb$MV{Tf0*^f^E5nIq&1Mkt$y5Ccgt z1xe6>EHH(t5rawSr?`lO&wLXM9Fz zj7Iw7!(=42W4y*wt43WZL}~0sZ~R7Z^fYSz)JFQkMsr*$a)cFb3`cfsM|XTj9vR1U zG^%r~NBx?|R#``Q+(&-wM}IsORQW-Cj3s+4NF*9a5YfkfTu6p&NN$UKBdiyR_~9LeDc$p}$Mk4#CGTuHnGNs~+-l8i~9dC3PsNtVPN zKCvl=FsYmD$(wXZn*1G^9Lib=$_BAXpX7=*2nI}>G6{+Z@_4d_;K`({N{$3dqwE=? z+{z8f%BMg|tE>n~g8>bw0Z?#-2kNw~ph}8>gJ00eu#8Jz#7eK+6|TI?3#rSd086=q zh}c4gQfd=cV6U!V%ZaeEzD!Izq)Yz2gcZDe%n51CrQl1&WC-H2r~olci9pQC>`eP( zOvyYd$Q;e02+f(GOwXhb;d%&%>XUzAgJ7UE8ps5mq_fQlho@AC!w3@Fv4dWqGz};Q z0!mHdq&d(uO%EYW5(uG8+ z3s9PyIq{Nu@uND5PYA_7VeGs7bjggOi22mer@&A* zwFx$j3XFtKSKA6JfCNfV1VY$TKJ8OK{Zl{E7Jyb+Z)IOzy2Ka_PRRtTc zfn2arLa>7d@P zTCG)Ey;WSzRbAaxUhP$1P4Oej;*K2i?M#)yQzyu+11IoBowNO_fARHlx8*D|Bc*Ouv zAO(HZ*HKUdZGBg3HJ~)W)^sITgFRS;O<09pScYv_hkaOxjaZ3=SSOeQLXZSrqzGeO z)|p6F4CUC9;LwF2ghj~Ml`NPH@{}2(m(~GLI$;+`(jSBYkjEicp;;l_FRK zLeQNF)jg1{PmjINp)CoKRftna)0;e;4CoXk8>Q8B+U)3@x(KO}8i6~310AIZv4C0z zRR{;&S+Z3WEI0+A4ai|UTKg(m`()dsO$bqt%fnFt8X$&HKuZYv7|Z|+Qs@O>aM|H1 zuH#BBOX=JG#UO=Xz)Z;zhf^3#Pg&3Q1f;U9TmqR}t=L$$Z3(x1+oO$Jgb0PcJc2s- z%}1kwGlP>o%K%Qe&VR8@JHxYoDc#MPfntD5g@^@8`-a7#-GVp-iy%OE>!n`t9bZoi--^KA>_v&~ zCC%o2PG<#Q@{M2leJS(R*yHWP^zGR7h0OM4#^;6K`3+zJzMcA=2=vY0lGtDV?Oyl& z--{^V0ghk^77z%IhyzAo1%Ax_&B*A4-U5>8(wUSbCJ-|yYwC>~?@OgRKF00c;5HBMtRW-$*oUbUrAB-Y<9 zmPsZKV<#qKJtodGHUK~VV?h36Dt==%rQtcI<2okEJMLfrwg^O^D+Snq$V-S-z$XUq z1!`-EN6scmW{7dhCI|>8hsXjN$gG60f*&>(Xmf~PP=HkEI2vF81&D!d+GAS=nLy6v zKqg{1HexwGWSB@~JN{x0uG2=Qh)8Gv2SA?&U;wUbtXYN{1z>?}S%_p_=5=yrh5m4? z6VNMDHo#Vpnjy}r7%-=hQ-E=%A_YKzT|TdwC(L1U83XMN7+Gv?(& zj$@$(=9duWm|SFI7GsK-g1x$dFZcpg;FhEl0|z((5X%A3`(~|K=!SmiH$;e1FegU% zf-J~`OjZb1U?&GifN^eR8^{3&n*jxQ=8RtFc2?*GSOqa4w-b1PYPM&e4iEznBLo`i zxJUp4@aO9_WPu)Nf*whOUSUF>h$<>8gb)G@Q-matgb|Ao(z9kOvKFgW0IXJMYLpYH3{2x^HiYNRe!{-s`O&TVRn zeCnYa?1St33L{I>%G8KHmoiy|7h6L=05bUTXY=A~y!`5EJo=C+;yxoonjYGt=N&vT-0t}<) zJRm2T&Nu}??j)Ezx3U3O_61pv08w^`&`!2=LI^Qv02Qbj7uf(YXuo!zyx2wvM(FBN znQgFG%BCcS+P~h6rrxu;jL|96&5$SpZhx z#RXT0@76dLSgUnP0M52>mF6}XSb%4~F{(Pi1~4D>7Vie&>4YHuKV}n}_;MCuS91>;!)Z$D8CNScU5;f*JmBfNBp1X3Wj0s$N#Ig7|(gGnIU6nO?|^;aJVjl6nzH&~0p?R zzr&7Sh>xF$kVlA--`tWv$CLl>h)}i|xWqhgfc}mK^;4DsobR{>=zCWL{G?O14KQ!* zE9r&!ZiiR|#ZLk&h&|YYY#Yb|Ui@ep;SpWWsaY@-&dMb547A^Bh&SI1{kAcrj}M1hE(?j zA&Bw^C>!KY0Ohv<<{zUX0KM%ed}yVEQZCIvNO1z%Wz2)J^Ffb%4<0bhVX4BLRC zR}i2y-^o<4u}+(|POO$Q#1B1Os|0tyo_ zV8n%T*|KKOqD`xIE!(zk-@=V6cP`z!VDIA1t9S3! zrzTKDV32gMgP}3A3~P`;fecke2o^ClW5MDF!^9*hLPLQhf`}C}c3cqg0|g3L*szj$ zb7zL85&(1UKtTcqG$K7d*$P3cf;JQXgyN~D-1{P^ObtI;wlTuo#rI!Mj1&?oX%AF)!%2?EkM=jOVQ!1jGs;Xd> z*s80q!WyfrtI}F)S1blLss}O3G$W?J0*exv$}#6$c5{B?k}Mivq^+}sru4fb6EG{oU_h5zh$$}DDtc8zc9JXve7Utm%%5koN;hLYL2Ok z2F7srN)6#w6rTz-5EF_kzrX-e5_7;1PAI12;!DM2mwk5H=Pf4=5J|kT%c8Q((CyKC z^WC@KHx=Cy%!A2n;m?O3&a>i+GmbCfkLwlms6)RL_}`Z&0Y@(?faG+V*})f#2r9%t zgC{B-QAaPMm;Qc?8sNp!0q34vgx<79#6ElNvykKw3>abODCWZxU%b(luQYg4g+t!F zzKug4z4RbDU;V8x{FUqE4;tUS_XJ@V>G$K4U;co|tEBvdrW$U&`>0MIzx?y3^}hX8 zN$xNA=JS8_M_BhSfC3!gNzj)P^^uA~GrJ!HGeo}!LU4KwWMKXzL^+ojkboMj)SOJV z!4HCvd>K3m0zJUI38GLh5nLe)cb3BURgf_I3n2}~REJgM0%SGZArJXBLX(v6gfARo zS6XPqBhHG5&WmAEF4&SE_ArVtk%bDz5fUk4F^lAaB13|x!1gIIj8#D*8OtalF+z@s zNO2-d{SGy3F1Zep)rqBF(V)QC>K2*PK_|4Nhz8%$3r4Ak%|=16iOkg zQ3(-{V)P>=D_K8D+DwqUq6s7jvB*z?GL)iB2_YcyNOpY@lW4RgD_g0`nrV`aE3v{U zur$hB;xd<56vHWgB$GS3>y=7uB{3-}Ont?&CSsrjB>a$vXF@ZY(wrtWt7*+^Vl$iC z+$J}>>CJC~Go0caCppV$&U2zOo$6dCJKO2bZ2AEbl(40`bQQ^CqOh3yG$TIamCTw< zAqRvQC_xKq(1Rj0p$c6nLmTSQhe9->5}hbTD{9e;Vl<-~-6%&p>d}vaG^8SZXbuei z2_bu?vY#p3Crgj0(tTmCMMAqt5rkmVo8mO5I^8Kxd+O7l0yU^Y9V$_aYSg15HK|Hn zDpQ;4)Tcrk z$6Bwkn&la0ffiHk>94Y)9W811cG=D@cC)H=9BMNZS%&x_wz8cqZEI`W+u}C2y4@{r zd+XcZ0yntA9WHT;Yuw`^H@V7PE_0jf+~-0!y0=ZAT7%hI#H}{F^t!HVKimE<3zjy# z;vMg}PRre&X*a#FI`4&EOWyawH@?L&FMDgI-usrQzI$=6eEaL){~oZqdev{f@N3`@ z5jZdW1u%mf9AEk-7+wdSaEBs%mjydG!x|PXge_bv3WNBM9`*``H*De)+qJ_ZR#k{w z?3NW@FMHpWA&P5kTD}mLuRLb_ad~@SUNf6(DCRS(u*^z^^HiSP<~!q= zcyFfjUF1AxKF7e$c^)*Ojkae%-^|Z0Mzo*{?dV6F>(GeiilTYU=>9Z^7SfvDG|D7B zX{}Ux(SU9=r%P?>0eSkIPpE}mEo>Zz;Z539B*wr#s^Q?RAYXH^S)>OeY zh;uZBM+;%jww(-L41ACj- z2KvGVX5dS4!+XQocJ{dqobF7^#0oPojcFni2r0k0;^a!$<5kuTR;515vTFQCjfywWFZHTpg{sy zAt@WoAQdraMKEXps*(delqXkp%GJAaYSV<`6DT-ABB20Z{z%FczF7Y z9Qvn=p5CLcu_j7qdJ=N5fEgq~-@Y(K3>1(GwKGH!G+=-N7*K;INn!&FSilBaW0HW< zoB^NGI^m0~)wP!UD_++w*aw;P2`s%JsYpN#l0b0>%s>@eqBzBxGEGd z0blr{G^RjFDi|;f82AFKg`a&ExjyN|XSea2e0=1mu!;sOfDx9TfC5A_{LU|;0S}N; z7R2y}vO^#SjrhVBOo4fmLT2&M%Vj|pm=p#Q1P0Ck1pHh< z07C-Mz%TG157s~qj9?Ik83HEYR-B+_H6ZVi9Ye_A@e#yk2wz1ALjtVA3tC|o$es{t z;Q=0=brm6~9U)^SVar9HNi-n_wn75LUPZhH4P@aK!l9cH;TNu282Z&1vLNIwVf;-% z=gnXr5=0NsoDA5&Dhz`!SiuwwVjhENFtnjPL@3ci}U#l+a1#2Er2LFB+M zGyrWl05CW~+5G|oBnSh{!0JI_D-w_-@)`am_7xt=1S3S@NiYI&Fhnjg1Q%3EBwz^_ zc!`x90s*?>F^&%`(wQv26)hs;Gg6i^!WlEVl`}%)H4>IIo*6ZMl{I4HH`0|hju|(4 zl{bRpIg*t)Y8g4UlsTf~JC2e%RvA08lsm%XJuZ?wHW@wclRe_&KhBXpA{jsGlRpCF zL28je{un_PlR+ZnL-vqD>KH>3lS4w}MMmNr(&4R9Br91YMuOxkYUD-^TSr>bM}}ld z@{dHqm`R?bCGHx&spL$45KFF@OI8v}(&SDSk4=skP8t(T9vjQ?WKs5yPkIA}|xc!30uTSXr8-P)=Le%|sDM0wGL+6Ij(^GG=2s=3_!; zWJ=~_Qf6gZ=4I-X6HEaiNWvSkgkMG&VDgh-ej7{>!XkL4QL1Kt6u}~RQdXf7;*I4P zi6$AHg1?YofXn02G z`gmb~Zd-*u(1m8`gBECPb|{5{==_N2hz@9pKIe%>XNtnrf)b@kT;Yvo0W09>j`C=a z`sj}WX^;x(kP>N;8tIWDX_6}Gk}_$NI_Z-_X_QLolu~JxT4|2@D0La=kqM`aswj;j zU6%Byj$Ub*n(3LMX_~6(nzCt|y6Kz3DV&lik7}uj9%zhuY5cgOkIw0icFLauYM=`0 zpb~1K8tS1UYN9IYqB3fuI_jfBYNSf)q*Cgk#_6SEs*(07j@Idm-f5TS>0f=P3f5>v z@TrehYO1R0sZ)dHt=j6CW@&(JsfX@Ss7lYC;%biyYAS3%3~&l5 z_<{m-APBTVpbA3+?8F1u0H6W`0vPM8Vr#Z)>$Y-hw|Z-*+-kUr>!#jlr|u_oqNuMr z7MK#InDQvOULl~8LNF++1H1_-$N&N`fDAkU0xSS4{OK=rpbVTq2M$B0r~(5RfW3Ze z!#eE4LTto7thiEat-`AnnyZAOE1s(Bx{m54vL{2FstxeypAJI;bRYsSEO&4q1lRy8 zv;qwvz$$V|!X`j4z^pGIzzKAU%pSnXN^H;y?a&f!(H3gOBJG>b0G9S>#&YPVqG!i? zES)VFpW6Na$@*!h{6YfEK(zvG3?RV4a>pttzyfIAo1`HFkOFtG!eX2)ci>;a0g}4&zzkgM3p#BAZ7irt?cx9{k6s2} z7P~s0yWZ&4CNAy*D)YL@@Y1X);2#1AL#MC;*zN=Z(7@XYY|fc4^x|*+>hHu(Z~sPV z_5NBfr(&r^xIA$N&h?1~72P z$xZ;kO7Q-g@ClJ8AVc?Es%Ej1ukv=M3%Q==f%B`HC)gkV0bYL;`F83-m6h z3zOsVmlJYSl^XZ=QG6Sh9 z!?4E6@b`&GP83#6D>2t z^SfrTA!jclC-O8?Gb5|SsR}DL11&2sK>RYmFPtqY^y|U)Fbbe-2YNs*yU9Acb3{w@ zx5jftTk||u1nlY;KEtv;rvyJga;NlgE~Bv;3xf?9Gu#ft+qS|m1j8Bw?4OSGMALLl zcdJF?v@^f%7H=d+=W_xNWtg4>NaJ)-8}(5mby7>OPHXWYBeG9#mq&;Gu`DZfRa^B{ zV|7+jDO1xk0o(J3LUpXHD2w8!i^ee28gN*zmsA4`S(E673T`x~wOYH%Si7}*nl&_| zH5b$MtJw8jk7r&#Z2|LjU$@F%1NL7bP$8CART29S%2w!L~~*Q!{mCbzAp!V|R9I_jYr4cXwqx%~MTi zbbUSdYnOIu#za8HB_xQ#DhTs?!*_hk_k7cLecSha3-c<7LMQ&=WqvnX%L`^*=7R=KWV5U?}!7^dNgkyMyYxst9c!zsM} zN||?$o0~a+p*d=)Ib5)LrNDXd;kC|NF9I+ zfvApo%s?mDL@dC7F_3~Kn8X^ug6wEOF}%*Dv_URR`j$I2uVQ*z7^JBqL<~SWr%y_# z`wg|@1gpEcxEKK~sDL=wKo9pqs!z<{u)!_Bz_^>l5x_#W#{}7c!`W<3naD)kPn3r)ZQubas&#JWt($)YgC5sZSJBmu?$dvOelmj%3H4g6Zzqsya&v`dPi z+d{KM#B})lp#O)?8x6Fa#KrH8o_K-~Tue%M{tiwUeM}ULOHBQL#JrTvJYdzlkI{J4 zR|L@;$ev3_vj|G<42;8X`ogme+1UEgPeks_K(iddEA#@bpH31S!7T_6K}d|mH_D?R zhe#*{9q@t*Xu#bUgdNnq3V?$f*bPfG{n1m$d#L*iAOsC)!b^OF#G8cTk4~@;`$0@c z$D2gep9C9-jta~G;*-f6)O`#T!`v7IbtuG{#KGop!qd1uh z$VBkSEfvL1nd$|@8^Kr^E)is-OGPJ-x|Strvnv_FIT?V73uP)-$bxf5hy!IR*o+Yw z3-;`33qu;81>L|5XUdcsle#n*GexSGij+f#MjQu(YLZwmY?^{4VjP+zc1(>pN=Zo8 zf^tTPq}oPThMTislr*`k293EG36dRA4C#*}xWW}vnq)A~B(h*oWSHR$;#+b}y`mvh zZD!4zId}H_8FXl$4m^}LZJI#@6eeK6i18YBY}vDE*S38dcW&LgdH3f14|s6l!-*F+ zejIsn<;$5jcm5oDbm`N5SGWFt9eeiLtxceaz~FRv2bu?~5IA&Y%a<|TYUO(KYuF@g zIYE?YH{!RUkTjp<6Puu&O;EA}qaB*+$G3$pRd0uh-3!J!tM0TBm>qEjq8F~D;dJ^54#Ob-L~lTbquRdmEi z)q3M1hYTwBh+HttC7iShI_X~hl9=TiS*}`aU=eRU(<-dy=&>h$H_KA3#P;3Au4fmG zn6Y+!n&n((GZ4yQ&EVjrP6#RP3EI1^+^8dTJsen2o@NoSpk{+OsY-Ws-kE1eNrTmc zN?CJl)uN3)x;ImmUYhBqoqihWsHNVm)$f4zK-SIRg+bnfyR`Y=j+3zE<2?tSW1Km@ zO=6`!drG#y{$0+r<;rClownM7uFY0kpH8Zn(E38w2+WmQepya~|D~B(VsVzUXP@9; z3dzM7AI$NSd%}Dmj?<{OlQ=ZUBqE*^H~c3757KgQEE(Uj#jQHA1-m&#?fRoGE+53iJX?Bk6W@b?&saXa$twcnngpJ5gH(y7HCKh>wr zKOg<{)hC~Q@vD9n)~q?3T!YF{uUWv{AzzG4!}na~BqE`OvyjypyV0#-D0vj#5|o6! z6$owwA)fS**F5Fz=zh*i;8biuK^0I>1lGfz_71hH)%^(XnTIfhKHaZ4UsAvjswQEVt zyP*bA$dlZ?q>5p-}Ya6IqZ64!cmsNiwIRiF9LQI;+99VwPhLu>10}j0)W&t^KKmrCXQh3_{wiqSJ zL_*S=JsBkqOF5{FCPAE9qRJ7<8Lddw!4f?=6i;Hw!hx8nCpoIz*u;U0W2tQxyF%AL z1(c?ql+&206Y1tsD7-zDOH5)T2rZPT7N0)LS1QYjqJ|i;Ta;{r8a3zOz&R+kXpAb& zOy^k1nw51@N;N~n=UT~EPq)4muAySP!|Ypn(le5sYxPtp25(^Uy>p zauF!H9r)xIrdCOiX%7FN8rm%^(wZF>*ym;L?<*^a6@oItnPwkQK&s zCJt``${&PP1R40`D~eI9EnZMi8Tdpi&d^n!0By{~kxb0gjDbC&f=gik7sdEnF~Z_FVXgAZLU!XT3IHOi5R3mb3&BVw)r79CJQ48YOcx9q}${z0vSj%Q%2>4uhq zIqb8bEV77VZ_*uMYJ&Iei9okh&7hbNx1Nn01am&i*nSzQ^7Zc z(Bdr~LC?i2v!7cn=v1dV%D)!&u!&u4N7c79hko?3tJ7#_KiiJXrfZ~6V_;*i+GHl} zpq*_iY-}4F-05V?vBF($bDulh$PU_l-6(B$;|ALCmN(SijZbQu#@faHHo7&lZ+`z9 zQh>rHzzJS(gGWl;%C7gqWixMwKYUaShv&Ux#czKf9I+Vw*Z60S@C#zR#1*{IfG0Ly za+9BYC<$k`#996th`$`>&}q3IDULOZqns)i$GO3c5DOh^fEX#=`Ot~ZZsROc+S%TAw{OPl z_$@oL$6j})&z*f|N4MGu&iA+f9q@rCdfbzacSPGA@enus`1F2mzyJI3f|vZ{DUWW# zFMipH*Sx$jKefi2JMw$4{OCzvdV*iR^M~L3>KmQ_-gP&*i~AbLOy{D2VhP!IQz5Bty$|NamV15pqMkq`rs8V(T=6HyTtkr5k_5epF# zBT*9j&=16*2O^Gps-iOfMFfkr|sY8Zb@_{0|qW5feEv z7?0)`v(Zzo(KqPu6qV5#!%-YDjuxrW93jvexpBX=ksY5y9eINeKMWkjksg;(D`{JBHC!{`x307BUqzQX@IiBV+RRK++_ygCuVfIBJqrP_h{B zN-bD&^jz{KF%BqY(kLm9CUw#`aPlUVQZ_EqAcc}1Ve%-ea`KYWDdmVMM=~p611d{T zDiM+@t&%MN4lBD7-nMcg(J}_UvL(ZEDv7cz=ko2&k}YdPE!Pq)-7+ZQGA<9UDCtr# zi_R|ZayIf(BH5BJE6*?g(%=GfFe4M?3ezxS12F+oF?kYx3T!1YvN6MPEG1JkPmVGx z)8#I+9W#>{H&fDn(lbA^8AEe4XA|Q}(=<^tHTP08Rnj$wEf#8E;L->-ol!Pv(>MXn zHY*c1*-lG8AkQyZJJCpi;3I|CMK02C%66^7v#Km_Ly@)pwV7=pnVAZI~G zR5WnyK|LcvB~%hv!3J_vM|YG*d(=mN6i9SWAnKq7j7(Npqz!JhI*q|?7IdbPAXr0$SZe@AH$x-a^i9W6JYS(j@AFt0v>@yt z7^c%$34#t{OoD!)6T+1`e<4{lgHLBO3uYh&Dga*NRbJFH{ih&YV zR!=n}THQ1}J3~%^pbdaQW_fl*!}S;_0VlQ-*NOov$ka^PU=mn#5+(tOHp62@a~L*Y zU(Xh8(^hTubpwVWGn_#l=;0pbmTv3TZtoUv^Hy*7mT&vkZ|9aClL<>c4L8NKlW*5l@frVJ!G_ZCv+%?*MJY0crzn;otJ?d*n$0)9;8`(epQ8qf`x^|g?ZLz#n=s4mW@6BLw*Ys zcI6~QJK=|g){G}XmBurL^Q>samVkYti5HoX<@JfD7?LCTZ>yM{t{97RLyL!yi}8&^ zqf?B-m_<5QEqwJ1V&Q3LRw&XJgz;B=lK_lS_LGhFhLKi}m3D{oOlY-Le}~F_Yv2@W zV5S5Zi4(ae8rhhe_>m=9nU}e4DH*LO_>!|YlMir{E6$5INoE2lJT!`GAv|nFl(O zo!P#iIhrwfnh~&?ZSI;iBb#GbOBU2RzqS=l`8U-Wm21}Ha5iWUqv!s9!5FAk7=~em zDPj^#L33GmmR*-P-T8D$I83B-q*HnrjI4gknIP`-6HMV`5t*0?0-%Rlcm% zI@v5aq49E|saa#4lW{w?RbyG38-``8Gw4u;h(Vbs4m4LO7BPsm7%X8~xpg|NbDw1y zA#u2t>Gzg5=RimF2T1-q~_TVD@5u{(Q`M|FA|+p%c_veB=hr>>v3uCkf2I3-lGU)x?e z+p}j|Zx@>aNBb~KTl!ABlizZ+W%06u8n%bqk=25>kGpSeoBpYB8#Z)%x1)MKHJGZS z^0zlKxQUs#vs<>2o4b`;w3)lPo!j?#`=KYVx?!=k*)zL|d%L;&xV`)9z&p3aoAt8(OTzLh&@Ce+%>l?Z?l#|O_@)n%IAJf5wcLr=g5*7i*8DSM*+Z3$e7b@JiC3zbx zp$LQk6E^&Ax1kd*!4itR6XLA%{(Q+Tv&l8@$$cWqvu?^)F}>IG z%5xwKYyeOv3Q)oP#?#iqnRmz0ISI~S8|*e7F5w59!BXcT$w7O9CT;e#5oqq zUvtX;{5aKi2C}?tA-u*D-LP|9iW|Kk&LA5wy>7MP2h2boIJ}uP-HN|kzCRt*C3`nl zl`8Pjw^95aS3GTPUDwr1+v>AcfDUD)d`&wJt<6}->>$uSwN9BoZu3a!0f z9dGBM6NJDLoFeF;p+0Zpp%Z>U4KM*3^xYgfAsQyt>wlourykAc z_UxhI9#UT!D76!&z!@gK?Vp*`>pcGMF+S9dohnQb74f^&3yu~)9^}uq%PIU`6+d2U zUx3Tyz}<5lE`AznAY4{`u_i~iL?|8JdvVn@I9wc+aT7J9P* z6P(}-1|A^p-J2J0o<1=;+s>GYXYS0Ia{}){`_U<*$B!SAh#X0>WJw1e zQmRzRAOZ>#Fkr-(NwcQSn>cgo+{v@2&!0ep0{us{sL`WHlPX=xw5ijlP@_tnO0}xh zt3tDC-O9CV&X^`pL}0M8tOJuKt%%9tr>)z!aO29IOSi7wyLjtH+sn7F-@kwZ1I|mh zu;I8l#8^SgxUu8MkRwZ;O#ZpD<;x^1Xx_}Zvt~tBetG5`;}@$^lX4_Mq}kMz8k=dX zrBPuK7hj$iB@wfzw;~}uaGMG}y0~V?Ad_d5x9rDAC!H)68EHnFLFFC^M!PfxQ#^s^ zmUY5(>4y+!_u`p3v+bU;Daz<&GjGO{{WD1{VONeBWm%Rk!6cJc1QuxEfdyWr;DQV` z=-`78Mu-%G6jo>`%8=A($C4`*~@=bg%Q8Pa9`aoEyJF);haIwL>7|%vs_CYjcIv5RP4qG7`02j<_UrGz00;abu$*lm zNfDBi+L;YWtg;y^Mez7!tVOm`gefz025~CAdNwh^6$m?Sl_VY8{(WtZ_NbH)$&tI>%$^ioy5gDKADSX1Ja!Y*>$@LTJVAmnxF`$j1bM@sEJKU?2Hd#{c+kjfhO7A{QAMI6Cr?aFnARCrQal zlFNZZ)8imF*_A+g@{>*DxwfYi`K4@Cr|*MLZqCZN*P(4-?G(v3IoIq!MTJ@>=?aKGMJdu2_Y ztYoccX3fl#-`@NGZ*Y#i^vrlPcW*y?Ce%v#5yC8;Y6?f9D@Q4ojyz~e$r?8klP;!4 zqId4+?2VLZtQoTf4cFwPbC+u!4Oy~e{Vqt-FIPvXo0_$a z&x}9DIW`CbqXZt9$wXpee4a$s550=niInWX5~KKaec9p3jJRvXa(}q5Xqrq(U=N(L z^(BnWhp&ZfPJ2l{s<4Vaoy2jonJB)lunzZ_&=5K(Z`rP}c}smg1eQ*)AFY(|44STa zYzRqwHDEoUE*-pJQ*xbe#pX-fhlZN1O2?N~WashYc!7{lRSL(Ew`&A#>ra){_FMWL z9&Xw;*8i!+N=uiJ)W7trvj@dbEZ%5u1ASHMXWqvz-TY_57;Jy5*7CZvzy(uBxwy|) z6P{K3*zwc~?fF9#jw|RKadFb}WmI`F(HblAN#9Nnn~C%_0nw%lOWa2-{a^hx)ZONX zo$E3pGfYdWLj~h01z~w`#I#O{XDx@!2W9Ze)dtvy7`-sFCV@gwjFh@yT2DG z1F|G=I$YzJsOLu?zLQUnx&ek-48n{A($?ehz{?ux5CQ6l!#1AknuvP{Hy!t8kj%PF zkm|^ynZqKjD^*?06|*JgoZ~)mi@G?no%E8dw1aWoOMEi2%>SE{ z&h~WT;q|33I0|)xEpaa*lXqCylpZdP#zJ}JRze>i58IE`KdF+wia_CDwGZoeab_N+ zu?{|0^U+X>$}C5KD$X(SZSI=J^ja7Z#^8m9iekWW1;JtN3V;DZ9n}~Yx@Yy zJ?e!(lLnuQ2JS*fw_G;c(DKF)p-2FW;5?h5Jr1kS9NqS~d^S6g*wj#NzT@L`Ha9cY z)YLq>bNA`lJc*&XWq@qH`yl6RVcnv+ZKxA-TOeoV>Fz_^i9^G>=4a248K1rRk| z&J1u9!vMF~3*$K_QCYV1a*XXoT|QrAN^0p7v-lO~biTwn-qNo+_ABw}`7)BRb@0l! zUoe1|bRiiiFi+kJ)!X?d_aym4C-ZhK9{-(r?+H|>79)LpzJ_LOn~1hJDB}6MZe-au znK^b)cKPpyRZ`n@xy7GKr@x!_<87at$Ntnj<=dj22_Akpww8%G$x|%18~IX$Z+Idy zb7qKLSW5)MrGM@QjkkY08awJb`}-5a*g-;A9{2K)_hKwNmN>?b`!AD!B`0;Ph*_Qt zJ8A9H;m;Nvo|7Lpf63Xw7sRbSK^#5HAsvX;o~_!ApMGv9|EW#t-1f9Qo0}&e)_MY) zmg8aH2B15|c6RI0jOnCQ^3k9th9zVC{Kw^gClg6s2j!N3H=X{S&Wv{*Hjn?^efsZ= z#Mpg2U`gK3`FFl<*?s!u=5sjm-`{?1?q6%;X~*4v{|B8+emCM^;A zUg2bo;|J>N7|R(pt-%P}ph$aMq+?5@^Gu}6aisKm#5FIatKyNj32fJ?qI_DS{AQx= z9!CXmMqd$+@-)(MH+u01$L1{_9Xb>J{5TrJ851TR5r~UUeh?kx6@&f=JeP|}JdR1` zj7>qs`UFu$5@MVqV)~+EwHJYR=vX{wToEd+#6FG>MaMvljV8ptE05EZ2gwIem7(Gr z?Bkn);$4EMq=EPvTx>N}Nar96lN_WJ6W6%(=1NXthmyz45b~3rrQRm+h?WYjM5Lw(p^r{UAZ#4 z`_nr`GdzMbys|QA3^KyXGVY#a1aM`d1~agtnU8}rgR(N=x|xqEGM}GhVz_Xj4jxzs zTvRa5TMc(73YRd8OQcSZ8@iLEmX+p^rOK6M>XDV*nw47-gHv{ZJh zXw4m&&DDIB8@-x4sg^fJo#$teHjje~+sGvyrbMQg9etaNoEUbrt@BpOoWeWl1IvPgQa=vGELGdzYGu7G8hDF-nx%E7q~p|} zsMetG+hFpv(CCcS^sJ$Cron=?(Pk^ldY<)qPUEAXM*FHpmk;62PA_g=ZaU;>VlZg( z+6wllV)dSHl4xsUS!#N4IV0c<^YCf2r)~4&_~uYrw-8^}XFM&Ff0_*hTcVuoBih5G z+gr5LTmBJSk}q2)^0cP$SjIZF;&@6jb6Rsb+Kp4^Tk%ynIXrD8RXPPuZG`!f2p%Rt z@B|8?0{#Kg2><|aLFpjn^o-1m7g(5>Sue1#F|)Gs3knMfi;0Ly$}6GNHPPC-1_nl^ zCgxU_*4MAwIXb(zy4|{c=gu7u4-ZdIFCV|V{sDphflvJdL;W9x-hKT1LC}kkXP6h* zu<*#JsMv(iD4f=#ucCL4Mem)7-6vB*`~g`ikgO0wzKkVbiT!Jne0)1|_gPkd60SHs zGYglUlbw^Bo0nIBFDxk|5Gt!{YU>-D+nT!u8{f@04sCXPSbjG&IWRapG(0jkJ~1&l zJux*iIsN6+=b4$=x%q{!^WT;hzOQ~;Tw7dOTV7pXU0eULzPYx(wYKs9jP?I9va`Lj zx3l|eXP5H&-?6>(YjgMD$Ij`-&y$^B$G?6b?*BgculTe7`_I9j!{Zamc6$6@addn_ z8KDdxQuaahtPv-PF+_J@4)_9p)?B@eg0jkfP^ekX?03Ut*fgX%j|rEZQn zOZ{4#C^o&hFz5GsYv!$Ql3Hi`(N9t*nH}Zwxc%h!dS>*^@vhFZ1lU+vfn_&&1q-I( zoEh)#rmWuJ;v~#}P#h{z!vCQ-;)@X!inAEW>46gjbF1590LZKuh2pe{FoCGONMJhY zruC(Gxqk8G1f^c4cP~*t2+N5YhwIBpXt=~mvOc@_$}1z$ij@>Im5r5DD?^FZG@E^K zy>yc{O4HU#`ub|7tD!OgVmy}{&GIU%_>t|`wDBV+pkHDwH}JFfT3*nPinaXE!;Q59 z44jhPieUFyFMLYgBi?sYp+FpY>SPRajIGaqL!6Crd{jsUGc^^kQ9;P3s8<&?ZEjYP zYx^a)svAE0NZ}Qr$(uDD8B}QIX1LULZ6CYucHLk|HWcVo*^&+cgr#;Grfq$98fP91 zZ@*o5-0s{k8zr^dvXbFjQ#&70wcA#Nefl31=V!-3f0j)9@sBecMXu^UD30G&=PA3N zobx$N^h@kfR6zPypM%Kx-g{2Z>bmX=*S3ERX!F(n8Whg-d(g-iUcEo8Y!I;j zL2f|$AwlA;-|tZ=W4YgB8b{lT1i?(D z(vkvkoTr@rd~)5&dGzH@roYOtTlrsksAu!e;e5~Y*M|$^?7-32ptYR}@1D^_Q{SrTVp+_MwLP-OKk{e#)HhF&vT4eie(L&-X`E{WSI`>^$!O zp0@k9alt^m?n>@c@vBhgU@d{a$I0f}Qp_61$ml=YPP-t43~OCy&QsP!FoHkAl1v`S z(iS`2bV}umAVP#j-dOU>VZbpHU2uglI3K3qe9or(>=6-ux?BJcUe;C<3Bda9>q6+P zuzyZA!s$w;`0LS7Y1Cfi)p$L6ASZQ-#{~B3 z(g|5XIMpwBE0iok?|F6e?pj$cofWcwV%A3q%9{%b7gAp!5Lw4!5od)xEMJb_ikk#H zM@w=RpncPf($4SQD@<$gyEhw8q900i@M(-)VDo2xW8kZmhwKPtJ`J9%nV;M)tsH|pIzceP zo_K{L0DvFhIZj3-h<66D`48{~WGKPvtB{q-g@zbWx)Ly92r5K$&7l+T&BE;g5Md%j z7uQQKEN97NahrjEkH|D^1sCvA0_ox4yu$(Ee@8IYc_X^8vEXn;0v16h2f(T;rn)A5 z8TIxg5K*r03>f~@I)@6QdSYxmc0EBJaRk~Qvwhw(=n@&sdRDTW?wdIsYLvk>`onOY z0U8B!RTKaY!j!qxvVgSq$W?xeY*!@Mo1$Yzcdo~^l@-T*Y~ZggWJ0ZAT}X>LE-%F& zjH2i--w~wNrvgh``p)TCEVsbzG4zrSLmRe_n@DVSLY~L{ZkvZ4*B4)Bht3apRC?1~ zTmbkef_@MU%o{J=CH~}qa85q}tYm&Md*P|*DZ^mfqIp0gGgtJ@Z=Wq3^xs5WE&8S; zA_vm7pJLsw#9DCM5WVMWK`T|Tm)29kVAkMuFrJhNhKhEue30RT?~ySWxAnHIint4!^dbB$uA>>TuNRpqEx4%y2U zqC?_xdcwdi2aur+d&??LQiERH3U`ytJadFk%qm0#Gsgp?pek9z@O2{RFXEW?6c%Fp zrzf=>z-nh4H(zQ5#f*l&qm`N)#Tl~aP6@AFHfR}J>-?>R!(WBAps9?|y-Xgp<_I~^ z1WhfL{fDnDM2W{cQ zs6(AL+|cCx2>SfnHS=hwK)x3J=0aQ>hw@C>>q~eLB1Q?M98_=32S9ix@YC`*0Txl@ zBsE3SkcZNeOD06M3K1bHwK}kU$z?&mhad$!2>ziK#Gr$LtG4LSlbUxD2Wa57=ZD$k z1HtEfQRI&tgqLds&SfjPg z0f&Y1<3T(@EsclaL;%iLNxdgZGohm0+ABHz2RBSJA5^-=+>C z!H-AVeyE8=OOV_wf^fZ@f@X)4Z~L|bC4c|0yVq2glaC{4FPAu2KCNjb|4B&b%(c0B z_U+2fVauE1-Q~Wg-+69&_b`(87H!U#FTe04T9O$v|CROqK0cZG>2Od=?$+7#{C8$O zuXS{?_G~ZbpVyLr_Q~)I^5Jjkzne+?XJ0K};Ci&lgE=q$9$D6(E&qFRI`9G;I5*TPkBPBO*e=wrDH6X9!r!gYcoXcQy#*Taow zB0$9vra|_G>k&36Su4&+UFFE@Es<*vBJGbY9S0+CiOW!EP9JO3ZCuo6>nM*wqYJeN z3dDJUiVn1oejF4Xgo_So`M*INR7`|@OjJ+|IR+OK*AkO3^B)w45JSN~k61wu0%CEv z*zA_r+?m+?6BCIFeqsvHR+5qxo9$p9HaqABvZ{wKpm319wt+t zB;)Fn=^QRIP*Wg|IECg^Uwg$d`zkEu6}Or?@5U?PSuqOD$yQ7eX-x@wkRr~dCOJe- zQBV_;IZ26TNma~By=$GSGOLOrq@uILG-grrMFxXb=J0cR%(T8 zx_8!UOjcH`Y|c=Y_j*=At4yIp_AR6A(v3^yvDr?9?5d$luQ#%7sB-Eyq~99nn0w_k z&q}pc1>tirp`r+=e~=TeD9sB7Lz+fEkUuUQCQC%-w^*Oktb!8_le9U`Xx3` zgpfCXBJy=3kDn@k(Lre0IG@8Se@#t@;!(pin7`vKK=G)d7BBd1Ebzy>031_rlEr^E zRB*Od@GqDjB#A$`f`_&7A?BPNBJtnL@wC}|z7=pSS9GY5t{bATU#yTNgwJ;fLW2fr zToHSShKjHm)7KXA&OPNnEgZR;aeo5DNdl^`i|NUMtV{nF-Dx-~lB?u(cYxAQK#p%C zFlo-*o5f>@5}i4oo3VFUh_(#KyPiS_t>oYsJAYjyWX~4;6kj;_8KM;cHHs4ru!0g+ zAO-qmXjs?{qC9z-5Tww*rYj77a5Y zYy}bm<)BK*fXW^OF09Lj2ek%Pan@=Dq9L>tm8w7pD-lq|ToY<2e{!W#-Mzfbgxet& zA%g~aVmy=C2;teHQJb)lk`gYFyH5f07Q>RnI8jF{&`hNnC9^+E^SV_1bxf;RNq>35 z8X&V5JjGP?ErhV>V<=?f?DYV`>ES@d1ocU|>#baSPwdT!@aqF^?rXEODi}bKctZmX zVnmz%oqO%I{~FYOMJij=tItu12)yyAM@*0*yK}`%PDad^>k8!4AJ&S{CBIc`2dGGQ z1f;4Ifm*mo4b|iNDJuvq#+MKYc+{83^SoBt!iDHUX#t3KK%?C}gaHo{xelelyzyxS z>3)EC8Pps20@d#!norSzByi1Py(MkqRnx5CdW1rF|V z_Zm}~h^c$^DvS*Y(!#*p@z)uX9RhfoFHr1Z;>BFhPb9KMwJ~)8Mv#j>7r7@uy75p( z031F%Ur-YYiFmri$^cudt~`Xi#aXsOJPoX2MvZua3_Os#*&Q zHSplQ40(*cAFoOuo9UKAUIjn21F7s)P9Zy6<1O1iv?qPUe{T<7lUF}Lc zLiAZAGV;1yknVBP>0#4w;z;OmDD2_Uc*8#;h2-shaJje7yH|atN8FiBq`H?h-z!1) zZc5@^#eRAa8lm3tPGjMn*7-X$Z=bFPMcB5_FtpDox6h=b&upR3;=Ip__r0~odmHEX zwxRFsbKe_|yb0;;RpDj3){009fmvJidxZ9T<@Wn@^!qLJ-#zaS;2n6NF%alH@HliJ zD0d*FV<2>4;Q9Fg8N)jmrZE_C-fu^OJ=}9uI(c6nmfD#Nqf}|TB*W62hcZHkaJfU- z9YeVbL;2@Jc;4Y6jo}jK;j++SLhf*7$8hz+aLxH}E$@eVjSu5k^IW{E-SgdohrMg*cGV`Jd@k@yVhafq@^0g_^e*&#VvO`3Wd%R7TykQg7vp&O@lxSOp09R% ze?HZoK*ib>HlC-_9e3k%Vx))+H%)r>L&x^gpZVd)8HoXb?xK6%Wz*t+loS z@-uBMz{uobc0=6e20{1fr`nWHKJ}mUc0T#*A~cX7dc2-y?fn-%Qk}_uw0Mvb(+n>W zVA+Gjor~SqtRk6w2?37`B#34_6MLK|8uV-`q*Jt$3CcifwzQq8yDsH`2hkHDrGF_G z5s07mi;MfGw3lL9Ku6{!gbEr|enTwhrD)#Y$%5CSK9prLFzRm&*F~54XNwl3ncRM) zr%%Q}ebDI8bl8U-h*1Dsi)sFA&eu`;IgYKjKDteq)3W=HW!eFj*Crsp)akF)euEi8 zH76jH?v%HhUmE?z3^{y@%jaqE)!FnD&i?%G@0pBwaKQcehDJVewF9h`cpg9Q)LIH)Le1Why)cOoH( zfZ|Rj2qQ_?-3oH+E5K?6`Ncik(E0sw?*sC)QWYjrwE}6ynKbW~7If>2idEA+A%qMO zP~3xPG6mGJ%`pHVW#9)t9+0uJ=Gg^gi6&FTRaz2Qiv*$EV8i=XT^N3lZ*_?}>;X{P zxrPrOqw0{nKzB{sfU+h{9)9O{>T8eke`v+8oW5Rp)Vrb*5NkOGT$NdUQj}&>!`B0$ zoRIoDP4q%!p%#;G;VO)Y$@w7>bUj2*5f5-REz&3ZPt|TJ0#_60P1)@kIWjII@MW`I?VSobqgW~R*| z{;B&Z^-}Ylv`+#Jp^&<=y6sB1F>&Lb9h5fU5lTW zok9XIGxj7vxfVh7$ykXGC|Qifg3u=0`t~;S z5<5F5AR3IvVJ}4G0?uBG_=n#)Yhe`A3b;N}ZFYm4cs8JA@@TD6^bZi0qYM8q=cjO5 zGA>cked<5HdtVod@_^_A<;Elk#?D%=7U17&cE`Z)!R} z0HtDzT~-&xi>c6^QooR$fgaUI4$@iFVTybp8B`l{9}DMHP-!v3SSz@Hz$uGq zvh0JR-@kMpsqkWUHxQ;}I=4a%=z=+A%Kx15AOu{_gZ5WP z3tpJuBprx5U%R6PZjwV!|LlDClxnFAsc`r63nF2sLNR87>OsIBmfjC}fVo4n4P$6htk$FG1N7e*ixosDm`IeDC`ge@ZZT?KYF?=~mF>OgXcS)YssV?4!__Ms zeA5yd|4JIHO=aIJO`%KU(o8PLtrO@(?s~a~EAksCQ*uD=jh_hW?mm-do~4bpPWN_v zr|edx!y$~7zlm6CrbmtTx04K1X2soZnAkcOM5;J?EAyFIpnQyK!Q5q5O-}c^VX6xU z{n<^<562BMO>Y$5vUPs)JyO*rxYJiv!gK1q>dj|I&wRh$UxT4su?SIAMaZkR%$t!M z9zl*T^3+>gW5vo^ZmC~v5?_o`{n4_lEpV6ScKj95);p;^EDnM%H9cD0Gk-$Vs#877 zT0L@FO@g!2Z~kcYEcio?3zk5-bhLUECv~-E<~|{}dY2biNO_gUiC^%pdefinsvL*p z@Oje>KNF}(?FCa`t~b2w-`Lp*p%(f=d--l_Fh7rkMncOi21*rU`@QaeaE*W-gjh$w zJH{&-_uq4PcHAEjh}L*8Bv#(>;DhXd#=}un)!dhAHFDsjnl;hRgUBtz%9p~)$wiO8 z+>F+IJnLEB`FQ@`faa60Pu4o0e1Cz^3R;X7>k3*vN?tz)3M? zOhky?VWqm#qRT#J5H23!M(2La#?~|urJ68D_ozjW|9N>73R*;eb4E{y{Z+I!-7RJV zl>SAPkFg^9Ma-o$Xi=??adsN6tmQ2RfbE6&o6zD<4TA;>85A)_{oCA@D*Xyg@_wE+ zw|Q6Xb2eyQG+ZQi|3RcRcTA{E3GEcg_G%T&XH2?vklh0lNrstU!@<- z);lguW_Blhl8Gb_)w_VFa0520a_J{^w^gRHl$<@3*lb5UZCTQX(mYgp^v!)AzfGN) z_CPiFncvGueMMsRRNvCGc-WMhv~J_6vG~s7$!EpHy);j)fBU_fOjv{wa!zT5@^IA| zV$gL>(PVQ}3f-J4M7PIz)76#~GlBH4PWD1VD4vtwstXxm-mXH9ASl5&kgaY#U_vo6 z-;0Pa6Yn*?tUmSXnNo>rww?&8m`cjTZll1DY;nWjoI6r~gJl*63X?z*K(wxY2E$em8YNc| zWz==+VGmd^ya~yE(~c^=*?=2=Ubm(^h(As5Oweu_A$1a$pE7( z5w48`-5)nZaGQNbXzgLZewaCz833#wpo2IqcigRMYW&_f?pwYXJ_H_U3Lxq5(rtm@ za*NHhOv6eYOdzP)6Yjuu3?#ui0zQbZdN_lIVIHz-Ot`ig?V)wr+era+>>Vh!pZs?y z52u6PrdLB?=BT~!b(;4|+JimcEePyIgs}g{bkZ~#$vO+&Cd0pQIx{>E zFnWKPUfK!+zE=C1HzdG@)(j1rlc)EQTmtRV8C+IE5y7mNS7+yDhJW|oPZVfd{w0Zo z>jILDoJbHCuj)m9t(OKkKUOi?QaDXZ595lor=Z`_@Dp~sjK*q9nJGcxdlrNIMyA3V z9l($`rLVSJ2ePw(1hMr$Ea`0bG)bM1EUUoemG?lY(4?Y3*AXVFB?t{K#bnpvp#kS5 z)*O<)m_~3;iM#)x$rp85XA5gE9fp}l91ngyON5)f_Aq#Js`fF<;!%yFuZMu?coX{? zt^86LlhZnk5qFgr)t)1`Kr)(YNjC66e-wUprlw6ZnVj9ZYfIMTnVTySYhTrrf70!g z{VV@T7mL@u=W90K|K+=Oo@tteLKaBD{6W2+toOoIJDk9F$I@K80dYLEOBXy>`=q*l zUBAJ*Ts(~$FxVAOdf}WZC=fh++j~Ev*m+ep`r42KgK_4&g&&?NCnJmwzjKZ>Ow_)d z2n6pwEGkB<>ohM<#CIM1;^o`$w^5%e-Q_FS&Py=sgRC`lJ*s)~b?YYL>CAhr$Mux7W+t=9pgj=2;x~wgG!$ zGE{bZ{8v(R=!%GT@UY#t{mg;TAIkqUWrY{19MC&?bT@tJhslLh)OjJBo!6p-ytqw^ z-!#C#mW9lPm;3odYX&LXf0;Ytmkva-FFbhTPXA-%Xy6UYZuHMNAHnY@w$|kRJje4j zyY7?TO!AY8d(U=%#_i31`TM6``+1>(z_~iR_Q|JvuS)Z}8|QDnIA@!De)N-#ynj>s z@7DL}v*m*G)9>9mo7(@jv;aDEGB+CBpas!DN1LEwp;~Z1VrU4ud>tl&zZ5?K7UYzA zTNk5g6(&H!B8g!WTaiM0pfBOX-4r5qLOIQyIK^WuJ*sgH9ma{FWMtU{P&tE4V5A!c z5dgyI(n!nIA3N&6eRVj@#5hOzS3)olLJy}KhU=IN;)%iJTgONY_AY0GC}sjBl-?jT zuw$evqNFWKCnly(Be*Bc=tUJDpmdfUCFF|XM8@)<0si$1Tt)!@)fhpm3yK}Gn( zBcduAae_=#(q0(uK+xYxDxI8IZvs}Yf{Gsn2uu(e_5dzqpRUbo5&b@Wvu=W1EcXG% zq&kMn>y0-R7)Ah*#KSqfFm!inW))PfuE?w(oVt!g?(G7g}11w{5PPz}E3p&Del4Q7}DE_uBT8R^&S8wk}f zAds#^PB49(0R)mkRN~=k6PRux1_WMZ#>YGjv5Dv~)pvR&_$#$5;&r^H zfTZc$G{y$H#48Ok(j;JW51=4-I^Hm9FUq}_4n6@KO@6RiF)c|O>~_WzSx16z4VT4S zpma{C;Xohp0GWF*tQZ%@$wcq(Fj}&wB0MybxNkaE!asg)c7z<6TWFc@8=d?(`W2e+ z?Z7+^GDgbHSroSDmK$64Ygw@wYjGRwgJuAY_Mn+$MAU3ZjX$;n77zH z;AXZO|8vK(4Zwh@u;)~x`@F5c^~cNI#?NiWTLFwWX1oz;d77(w)-hi8(eiIvJo#Y! zc%<+zlU2dR3GkmR$mlrqb<98gc;MN@qj)RoRW2I;@fItqNTSu-i3xi5CWb#&nV^qt zoL8CMC+fw!CiFhWUCSPI{#fgM^+-RC`4h6T;%fRlH}B}jH{RnktK-u>R`ilQ8FZ6z zzB%?!$(=$l{2ysr;YOeE#zbL&!67}!;4XSTyAecHHm z+N5#X^!>EiOB=S_xL&>KP_B<~3CvZ#PlTtFFMdy3nsdOeLjZdg0nJakX4kK4W|I9r zF>zwNQDCUtM|;h84yB(SfH1c1*cak})*XN;`RYw`T~~TrZwUaH!PZlOK;q0`ds~l4 zwCA(W4<&$6qHW#B&;C2MGBh9v25@Kla$f{}_mW+x{PoA~Do>u-1;*M1rz?lNwtGl! zwF`Zz^z7>w+x;)ckQvO&jOTnaQd0Ke&)6v*H9SuCQJriQj~aNqeQalboJe>4`x%Eq z`LlA40a ziaaqd)tu(v)Ix*^)%1H|(NxZ^aq~T}(dt@pEosI}>lm&WEG6;CFhdynQ%W9gbpAFS zH=-;p#2MBw1r|Vshi8LPXq~1?ZYI_q0kl*J9wG=BKuG|9vi0OMktxluOJ+A<6VAZJ zy14a7)eo_79Cq*lM!pKWGY1hwzD8~X9L8~)>mVwmv4zMtU-fVLCN86SaLwFT-d5o> zGeENx8v_A!p&FohNG*&5s8KRJ_7|e{X)X}}E++6x$(zm!-+nhLRa<>c!2r27F-Ruq zll^MCK5&07C1Z?rs*d5e`c{ILlTJ=hR&#YSafN-0m-Hd6#bDu9VS^YDm0X-npcALp z8^sua#>k1s9+=dRt0}5ujw)p_Ty!$M84tYOXd`h3P%om$G=@^(R3i-DMw*N1maou~ zP!}y5nKZco(BmNT?ewX8i)+bP>@*m$j(MH-mab#TWBAr3c8QUlrMQ?xLE>wWVk|wO zNg+m3nX)Kk8d8-hM`hgRP`?%L3Qh^c94g1cTd)%15K%yh%eRKxD6IYtSSY|+w`@UA zg-^!z=DRR@E*UdgLIS6&ECb+5soRDh({TlW810=cRotvpF1|JjqXG0I_dw79Y!6GK zpliZ3-K9v1rwtQ5^&TJ);N&E8!&#KiqOt}C=!->pBr4qTeoSj&4WWR0N=#3Zx*`ns=n{aBxf}}ZP#(% zEPK3J9<@ox*sS=>M`Y31(D5nP(RhDb!~De7r!@p_!hkCT#VduYU})2wS}&ado!|i6Wpb@Tg8M3* z^T*v?868t$BPWX1iRk(r37v(jWp~5scDMM;SF~stW9r*)U=S?~9f>p=IL#Uoh-Q8D z7dviW<=#2k6tx1nPy(7{zM@hUr-;9KF3LG|@g_``rT5#t5yN}8E(V($~4ahdA1XXU5sQjZq|G;I3fhJ<#0ttBdx=MG~hUN7>^g# z>p7XZQAq*uFrU;L$mScPCOvV3d2UZKmSJO3iRp_|m`5hF>ix;YJ^h?L z;aR=Q2S8Rzc(O*gA|`qBeUmq?7J^%n{GCKYa6u3-JTo#1WiDG^W$-bwmjXuNRJ{%f z`>JZUC1qc_+yVJ-+9s7M4dHt*~I+%F#Vc7A>!TM#9| z6zjc?h2mam1{oen8qRG-ruP0&57j5KxzeE0uQa*RB|cJ=1`G3sL9GsMtUZD!%jnA< z8T_0!Z2sa}0B38aGA557C{X^LVdyR;V_Xg8VHj*K(~nRK`N`TCQ+-zMCMurCvJTx; z8O&h*H#!fsQ+2=0Kk__Mee?v|8C0HpWER@6h66F|Vqv6tg#auZm&o7pJ2aop^j|Dw zhT!u=q2|>e7c@nuONJ%@fW`#HzDZGpKdzqmnb5uP@?Kmb2f@US>T)&6L||o&ShL9| zO~aqaZI59|eYcD!DeOinK6i7l3%A<^xYt4QTfqh8%-mKIL2qK*5UaN=rFaOvHAR8+ zNHAjXfWLxD1cNaVUN)g9Lgb&*mzC8d=rU0TPTzxRSU+@pA7gh!U`pZ_)>I zlY$46LN67Z=S3bZ7BO&4VEO~FvIVj)IXgHAzy~V!voOeEQ6dX%7;tq22e_u9S2?WQ z?cuHtNw47nActMdz|phYug*!|#exd30Cn=((YNAt7zY}-At2j7^OB!aLj+)E0AeJj zC=gU|Q3uB31Go4+iRouzU=*J~y|Xfk6o$kH1tGEURC-0u6lw2$;o&q%yL!KkeUTBI zg6Cwl_ixd$T=ggW+ZzwXn6jD47cTi6h)T|U z;a)u4sWC|GT8-a{!jF+`)vY^psj^EGMORW~{7;oOE8^Tk`n^4ASU4DQ`p*YXRCX8I zp8Vd;Yi%^0sEB5fy?c(@pRT$MZmxK55Dixi`Q);7rhd3R*Zi>iYi{Y@%F;lp>^<`N z1KfA-{6%C>e}0p@%EJ2He_G`8)1w0CHwx#$AQ}`B3wx0M&6NDB85vHmevFJ5p>{_` zvN;A7VyW6nTqF2Gjs;@`m--itfm=aBaT1mGxTs67#Dx;%hfx<_R-3m7C6d)PTQ1t) z`gD9TS%>CiIbI}d@M4OwWbmzcX*M>GXsatCIJY>pA2&KR zh9+J)R`9OZMrFH9lacU8LvwHT%d(vg{5dJS4(si*-G5KdWQibJ4LNcTj3-pCms+Yr z?j8N*bBaW&sfPS}Hm6Yeel8yA0rUOOXYzw;-*UuJu*(pDT>WU)zxX zpgixF|3P7^LvdViGE{Lwhb5DOYI&X=JkzG_RGPXg^jB&6>RNf=)ODx793QQHJC(mY zxcW?a#_e|cqc83`&mMQ&s_JaAyHosEW#NA6f%5#L`5S5T54JjwJ_mmP+dLQiTNAaY zc}9;~vZZxFEx*hO4O)6d+u5?5?qnghlH%*4xSIKt9GsSQPfL9;FZ{Xsrb3*B`qumG zeD&=*y_S%zM!nOv?bfYCft{waF|pltTJ4T|o&TP9Wc09fYy8gUN+N3gzPWyM}=H=tsKo{u)Q!q=E|3oYsqLP$4c z0F^FtS40Y9l$GdXCS7V-@ptm>0pTi2bhCzo;e7i@s%tTprd|_(EMA|1ZI6gfo&Y$Y zQX;y-OJ=-b`YnSxRJ=KY?A=e^UGgA^8tMZSk0t;Sgr-6}53$4t^iExUPmAQKTggtQW zHwwmOhA(An0qI#PMA9RLqc}Bv4b>`bX+rL&^KKci`y>PWBWc27?rUIY5|;nm6;3-t zRCkxm@}_V+*<&oDYwa~|aSTNMScg$k?n~+fw(jZ97KBO8KrPS}^1Va{tPUX5=|BxC z$2vNzBrtpgsHYSrGU|(m(;(d-@?L_D4|zCV)-*O7UtNU+afX*T-l>JO`kF8zA;?4B znm{%`;~TXY&cmWu3XP=07)5mCuTTY!EGvcFhm2+?Bkpq!@@o)*D?(4WwX87oT`MrE zARtjRP{;2D39Pn3Q8vB1`1&5ijP-h$e1d62(fx9)^F&eFOSmk2nC=-RtGz zYByH4!b1*4q`_fmX7A7U867Bfo6kug7yium5G*J(crcu@IO!JNfISM>{?6A7BZ3cK zOER8>3z+FdQUnGe-0zc3O@ff_0Xh&QDU9DsafnV{NXb+e0=IvNY)#W+yh8&0FTN^s z_YH!Ew_ncIHBaNY;*HSr<;IW$VFoU0y}P8POHYEi&4L0Ve7zT3n0jESPMuI>>}rz2 zoeC39c`ddPfO?SBAcJ}vU%m)JggzY9;|KGRq&L5gwN7Iy9$w{}z=|$``o&@Xeh8s& z(CPA_MY4MgGt%mI{@8<$q7u@KHWUj7q)y@zz--LR`9w1A)#24LoKH*iy$+^ zt3m<uv>xOV%gd6@gF73jq_5joc38Ak({`6u8L+647ZS>hp zh&j^ zkFxr@DYOD|UOOhQP2PX+8M=0@JLqFKS-b4!-<>u1=}c1oVXN%( zYtL_FoeOev zo^)>O?)1gtf^5U@@p4GkF^A6>N4Cd>PRZ=-9)%e9(X60CuDeE@ae~PwgIrC5Rwaep zlUzJ)f_!uOTo&O>{ccOiZhVJ}y#4z8n}VdhLIL($VZ=hDVSWp+^J20w4#!CFeS9b zPMYyS7&~YFBRVMGIU1pXwrIsTyo%rrz3tPcgEp>0} z^p5L1u+ddvWt2lBCRh;C#6U9$pYz=9Spcd;lxOF^rY>Uhd?;0!NQ<0A=S8p!vqN}^ z#*|}?B2p%Q^AZ|?a+BSjH1jEi?~yT#&e?R%!j@X}04o54mbo%`xUvHPt4I*4qiiN!p2@pu=T|yOzc=j1(g|rgo;l|6HPJm7Te2z7PurR~B&&+;a_oFXbK#pH2CCTwD4GA4Lp8!-Q zlTbo{3z|}J)dyddu(y>V1cNCoQu+d`D{7Tfr=%??uh5XPgvC$1%pYgf!D`V5i|+N&TE=6yNt8gpFndREV9XGP+?w zFWaInax(Jk!>6ZQ+4Z6Byr=;w4n+dX<^l?x6PNe=-b=`Rwxx?z%QAb%4TG_g?Z<?oZA`cf4i6KDe**Wo4Sle*w z(7X^H3*Mx11q0cG3AH{q?-egUEN;91VC5ru1=}TKKCrC1DhwF`xZj36O(Q*jD&y|r zd55)4D3BVseKT7b!cjH?lb*KnCkX4rK-z2zl#S3j0O2MAV=aXaY6BGWus-s}icBs9k=MD4MO9Zdtm zZ2<+`>5*)0ZBE`GMPb7I@BVeKN{WljH9B%$j%UXu1Em3w)kS|fY^Ruaue7(t-IWK{ z-&;S~wq5k#9MrE3B?`ZG&)^pZkyo(*ISaNmRV45(FnLgp%AUKb*~i#niDnP}L>^>3 zi3r?k#c&)}nhNde&4)m<+g%|=e)smAW8$kY739*rn2+pqL#CHw?G^R z*kkP_s9qmNb4OL@CFFqmnX&&ZkSYWyrL}x7VQb@GE#bisS&@%Uvwg=RE$W1uk@)P% zbtC{oKoypLEA{;*253Dd_VBIGx282?9W2D*0z~%ZBRLLOBi0l$u1X^YZYQHBr6}=An&0er*+i>YH14qu0dd--ZT#`ZM%a-Hd0|aq&w-Q-5OY6X4Zb` zn|&UvT7=A0Pbtj!H8r#i=?*lf5?MV6rnOjOE5qKK)Phlk=C2CoTtpTu0U{&=7$*QS zj5zLcn@i}|>Jo1JC^F|#=w>Dw(RHx!1H$R-H{IxF7`m9ro(gl9T>bg_pyk-w1I6u- zD=ZC)2QB!+?oH&(7nUi-pR;(jKVR5>;Wzg-QM{MXEamI${_L+%hhqL5+N&HjGwj;s zt1|vvF*cm`{@jK?xTmanyncK;=g%8C!xgEt68D2o9K|19#t(mzh4&YDWIfhqF6ehD zkLoYvXFY~w_8s-#llv>|p_tst{997FVwj*He}-RR- z8!-mU85@p|hbv3RR7fW&%VY!`Z(wPpDM@Y2TFpOXd#5bhSs~l6EH_>uH}mtPwkXS+ z3a&rpad%EAykR=rQ~nOTMOXZVQu9PTc(#B%pO(+lLO7ghs_IA1DJSL2c8mQ>)v$xRpIr;W_)x%v;!bpAgR6mE`;|})Qm*>&!U74tx)jVcY z*m8wc>InhiM2;sbs2wFavMsYHPnZ*HH_Ccy#KS%_UG02ClX5y?>4mG|897Hq)mOr?9QTG zZQ27ip~xI>Y*El@Rc~z7(`mc$5RpPT!F%`Aun}`9M&3`SGpMmMT&F9hu}cJr+Q(%T zkeXhFvL6#|nnQ6ut+qSg*gV|E^;U=Oc6qg@@rk!6Y^w1O;d0-1oz2wpeioDfOH&j2 z-r)DXLGi=1yFZ3DtcSImwxsWkboPzdpH9IZj()Hn^Eyn#-y3i38;@-2ayguMVm+Bd zKYS2-@6)S$?UkqX3J#~j`aXSVIz4=E+O=GtU8&f9FUKOt^gbI>{f5X*VkE>;9Z zva=)H4(E>EAhNohSk8%GPP%V$=AA_s@cQh#M@>#%`XgX7h0y9^c%eO17GRY^;xHp@ zF5Q2+s=Em#-Fnknw)kB-|FJJkJ@K$AJ>?WvlNu3P1(`!9~vJ-T7@M2`sL)=KrTD=za1WwZ?C@BTYNQ_d-L^k95*E zb}9S!;XpW#PA2|xYYh8b;J&|~=?fHly$cp{*%_KD4)doGJ6VyODVUM329fEVA$HH4 znzCt)l*s<}GQiaH8ODqv9xP-GL74#t5++zB|X z*ic)7K5>V!3Mdwf!-9_mH(n+(2WLKQ5si}_>Jm@Rjct3V3>oY`o*#eK;;GSR5A%mY z@r<-!oig#Kd;(|=QBiblGi-UljRt`5m5Fw%&&J#LX@0M-cq;X**S`Ps-sdulgw;an zGo+o(eBd#Ol*>d>^tY%Oh;QcC81v%`mw~MJ(U1D9G}lIkZP=Lu#dQA2G9tb0SXcYw zjnX`HwI5KQ#>?CtAVjJZuR!BO7BizY<{GI62o?d27RR?(x|P%9wJh#8qp@aIj-PJ6 zC>bkuR0`#Jx>rG?M)BzoC?E+)i=px&tt=VD>qek_Je?TzdNO3CWc*@Xm9g}Buf4VL z8JY4X=}W|(2^=hTF;mo-*`q6BKtOfbPe3b}MgubXTg|d@%(}Z@lJwcmxnpnq8J~Y- zx2}kL2s<{pka0ONt0?`q)#PH1zr6RtgY)T=OHYVw=f$#b$$wfdIQ*3LG%w2c)5^0o zNr9CYFG{nI7p0NTe=n)yIp_JRnXSR|bK^r;#aiR>Q+j_s;j5_ zTsJ&tqs@F9fGD@ktTSJxHe0RMv`3ox{XYMw+ca_e*-d}!;6`~b((iWbqxiGWzxu~3 z?+Wy)D@+GAXu~gTkNR;6$0pb$UDz24Gk?52vbXf{EtpA`+4Rf)_lF$9DDl$FNLENQ>e9iFZiShHUxPN64!0-$W)2xfz$NlfnPcE`HW?(lOH%%(Z6z+XBx}-vd0DR#j*PHbcaf#Zf*J&zKGQcD7hf^1({ zocsAO?M>B!oHOT#bL(f%SGO%F5H)!({7lI#`gu(;Ijc7nS(*8 z@34?ncbnhV{^#%$=x7#}J=@lUKQ&(j^qg)Wnr#+wD)s4^5Dz1z2c2U+beSc_4bcG^Q?3INU`;(w@uUu^CAn!5`&K~ofkZuY6Qk8w?|)bL0`EH3aC`1 zr{&+U`tEA{*6A(JND03BRnxrI`2Df%(tFpOE^eQ zFHPu%W`9=S?YF-k|H!?;*e}G=G>qVHp`$(YQP~4gr?&FhAA1-pWDmOY1!O;}zkaGx zip`8M?CwFnY2}wa{MW;)FYIZTbbeT^7Rd3Hz^*|Og`dQ4zq%~!b*?{qtorSCiT~s8 zLZn#?j8t{@xX&q_T`E{mai=`_vG+BFoXL-Ob}I9myivOp0(Y|^n=KyX=bi=?V7|<=(7~IQ=a59A`(aVviTaSN*fqBg9J}|V4eES24@{>JhuhQzr3XfN`Yq|#V zkKKOph`Ma5?lqJ@7FgnUIAil2XHVbs ztkE8yq~B?ZJiQ(;b85VXTosmE5LCv6x9+5$J`&hz*yBl-(14|Mie=(r%)PWcU{ zHRAi72eiChHowF5rte`{&?kFu73klRlJ4%E(7WD?diU$e(cbbIz4s$AS=(9bL>@eD zegdV%>_Coqa^uq1sU=-P(@_OI*N+Nbz2eNGgAEg-UWP4*+@Ba^9k4B(wZ%XkXnb0oj3LTgD(AD7$=R zK;c!OY4p4f1x^F7L=fQK6!={VT)FH>W8D&TH2^njje&n6j0WJCZegGO%#AE;* zQ^v&a3tgmRkX*L2%xK_f5=7c=)|v*eUxy$!0j9|dpEp@WWY`wa5+;eCf(bL{aflv9 z4;af9oA4zT!{$ptR51J(EMlL0CK$ugN8wMVLY1k|Xc{tDi6xlI-e3z3Cxac?rc>}x zS*6(yGEp^o)`0?X20+>RxPq*ZZMadYKh(+R&ddwKsRvf^2o%`}2+1;P# z^p$xsfbA`QCcPZ)jXAqcRjD6f^DYy820;0;gSD`TiUCVs3S5T@CNny!6wyamKBApq zGa7MR9^P2UyRRhFS&kI(9iPX*9k9Zj>p}^XQS#<7dw?)!qU1w7w2d%Icf!Cw`?ET- zVZaqhuoR5umHA8xauYw}Nr8P^gKbg}gmT_k3d)DTmV*1@i($Dy`w~oL^NjlP&6Y`* zjibhn!_gW}lXSkQEcIb<))EIz#34JVQsMH@9(HI8h1EzAzJr0YtwXlh7vceIsmjw2 zHbwHwWFD``Q}@`?FmB!cS>Evd~AxuaIAed5TE5HMg@8vNQqmO$ljB)m*~DcLGG50l-@X zwsZ*>HcXp3Z66!KTVSI8rz0h!Ag3x}|>We-E*acop2IA&OLmcaJ8+^`*| zEpuzSQDv{?);4=G# z!rr!*lu5*j8%Uk&g9K1`xhjumD2n7ff>aDkfj=^74oY85&^8V<%IOALj2IbP!-C6U zP9tA@aVQcNyu60>5)kZctd96)YzwflD*G56W0?~*AB<(Ipu*f};%g}I5EuVb;`1 z5(RefOZ>YZ*c-q`1{@hxqxQJA54LQ+pEZ~Cg~sEcXK^n5c5I|-rI<8nMxKtd6)Srm zqbtakjdx+)^;XOk(JGO;D)9EGti1RnGpa7Zi0Bz_k z5u01;yg!)7Z#ljQ&=0aU8vkKd6Bt!`%T7JjA?Ws8;cfWF?aRE&?m>5yUfl8dZH0H< z3=9f#Ee*Q&JDH#!oZMy|!@H(R6>Av`{@n*5tB0`O49OZd)1ihusae??5Id0^y4?pk zOA9TpNvaB>hsDjq=GVe<dNqt7c7B9zLLcZ^h%@WR1ZH1$qh#R>gpkyNtJb zB6l#6zm_PxOBCHDFa?9pQ~RYNkPbA6B^6>pi9Ed6@rN*dY* z0edy%gWusY5Ec)r)8*}Ge~p;i!7(AVG52<3Zq-6P2%+*%MTV2kCu_u|1v7F);vVnD z=w3l6kW}3QQ(* z(h(`*{Jm0HDX6X#g>xU2&pmn*^GG|SN0&b}*)-L(uG?ZVH36Pxzt`oImFC}>c1g4A z%DMD&G3j3CI(_*w98EKVLOMbxGxXq@ky-80S(!4OnMrkRDd(~zW3qB4Tl4s{QO7~c zxa`SzwwIIHzpsN74RdPZ5mMBgc$!5+cw_Rm`9o9*phiiUOMTIW{i4fS#n(cMZ`K$4Fvilg{z5oH>YrV@xBrZ& z^*k!{d0hSTg#G8qS})QF+5(ol;{w6}<{~$tH09FuI z@G}Mu$|!~sib8WB*-$8U4m3L_gA4tS;^Gw$#z;sUmz9xKR8&>h*3~yKHZ?IdH!(9e zKVxZaXMfhg+4=m1OPAfR-SG7C_4oC^?Hdr}%Wy+)|K*1I+`i`@bpKB1y`ZrBL3fF6 zK`*8K7-HzbKMPNn`n&$2hsxffD+SP1Zqe0(=o%4pY&_jD>+n*}!R73YAaZrggTx09 z6CTDV#3v*sB$1OJrKM-(X5~J~ee$$`;fcO@%@9RP-jr8VR==&OtE+EpYE)e=4IdAw0|#v*2VG--K8)=TOzn-$ZcWdv)8>|GbBnWci?pwEwArsSvvZ7tx%q{K zMFvW`!YGDI`geU_T>h*6Gf?`UXwubh-`CdGHrCevS(}?b8SE&de*FCF_J38swze6y z#i;F_?VaB{jQahTNXn?+|11Vm`WH{isK0^Izit^{e*>k5|I$bQA0Pb(#`!;g&wsn? zzkT~3KmTvf|Id^E^9Te>H)vKC8gnA7BMTD+(zVzz+|AStBeG^`O`*+X_%P}E7 z-_K2d6QQ-`b9tn{f?od0d6Asf{VV5Xsh<*c<(O4{6@v&pDc~enU;P&mx?#m2Lf58h zr%J6)Hq>k|h)}_gR*khk=DHNtO-?q}{aPB(JO0GFss8rVhklcpzNUttit$$ZLlK)V zK6heRk3Ij32o3wq#v^-R{r=tIpHm;c&-A}P>i&gPvTY{(g9vq^QSa`mF@j#cJmvy2 ziS6EC5TRF`2SMx-%d;^Yx$s#=(2MjGSi;Ih)R5H;4PsJEqyQoOV;*w}PC$>eI0g|a zepOrtKmf2AVVeI*gj$gGQQE2@5-`mzoFvL=rwo{anI|_xaM3c0neOQ~7yoxesOEL( z{XTvo7zDr$Br$Scp1VkRF!qugNaVK_rv6QYo|uJjJIE%>aOPUfLW-=6ezX;y!SAd$w+uhqCz zmq*^ErF+R&3+`gO>Q>)=_pKwjVWfc1@uU^%01`(>U z^!jfi^jAL?F1Iyc#OuQ#LXVgHmGiQ;HOwGFw?`bDr$=>M`o-3deMYJ|1Em4#j0oh~2O zP5+kPPv2jt&pEBVQJmx3u-0_-^udoyv%Yud+J8;!{CaO_6SmQXvbncCaii$&c)P;P z>E9#Y?+>?G3H^o?+Whfm=C?+~2Ej{9G#-6~@<7C;s}aQpgH5*a5123zQCP+j zwNEJ@js=kZbS>%sD6;j|#Wb^JV_QC7ljEXWO#qqh;#-;DDMm+ElF*@eh)wT+ueU3O zE%ydhfJe#C2K|*SY*`26`Gd*Xh{7fS0G=H2ITlfd1)svj@$bufS9yKr5?<~|C0$`P zqZqKX@~LyK(?nd|<9LB9B-_no!c|%E>7m+=Q=Vmkl{p21N;T1}wiJZj0Zlaj6iV+K zIp)NVr)(@YYpt#;Bwv>m6ra>EH{-ERNm|X}6xc+GxerAb#|w<<@OOpB2EYqtugNFJ z^ccTPPAflfmB^3%aPAZ}{ovJ%V%Cn~agXGf_sC+!XEz(Jy!@G&7#NvWX#3!V><_r9 z3-6514-$saptb6PoInMciXTwmx^(FlfxLV*nJogC)r0yd6cd%IbCuP2Qy)dzgxGjL z$}znvsE~thvlCE`M6XHlmrzq2wUi|dJq%!&0RY?<1D~>p!$c5>@YF4k0bjETl!IB^ zyBi2h0Klm(9|-%Z6eG0R@x(GB0-SauV3 zN5(Lgi6ZFQWt%LgGzUjXbeBFCLJ2PUoE-!`jNz6Z0I={ivyvzVD7W(_`E0WY{{fQJ z7+?U7ZO+KX(G9Rsl=Fu5vmjP9ko#15+zAhg@hz9v!v@WewiE(WG?(vo@i!NI={!j0 zuu~Y?L7t>k4VC9I`SOsTl3%tcwsjVN7StZGTuMk! zf7$04hsw+6I7wE87i>b91QdzO7V7W>$L|8Uc!+2$;Q3-y85UyMapD>irT?|UP{qxU zHbc&>&##tR{QBN2`g$Ja#;t#xZFU+ddqvV7`jqVy9>|OZJmcr-3bAkb`ea|D6LakR zDMO_}6#U#R9Wzvzj$W&?Pl zYgS3m-VUCpux1qtuV2eiiJ68W^0`i$N1P#|XJL@bk~R~+^kjcbF|X=Na>@Hh9kV1# z^j_xd$Eaj!|G=>vT<$Xss}!Dl?P7USen9T4hsBpN;+ATDzW^>1dukT^n|_tc{63X^ zQx<&^UtJYxTL3#DNCb8ti?LwfR7_=IdDz zJH>C%#4`99m#-)rd`o2z&yDAANg2$SYH7I?6XlCEkcp37+ijr%78e{?6HT0s3WHvcY)K$v|aFdtA69P~~p z5(T5Ye;^Wp2EokE4)F|BF285~xC z2vjs6%BE}{WxCspiY@Dx+QlMX>PoZU2aqI%T3Byhuf(#ILq4KrXFz)puINp$2%s6^ zFaVkJ8e=jTI4?z8YumIlU0h(~ydaab896Wavee!)a$awj zE>Zu=dC4@OY)0YuqOWK~ySqeR503W8{4Y5#|CR_1nTQe>WBPYQ=-)vvsV;Hp!T*j3 zU5<-Dh~|?2JrP=)`H&%fHcmYJpG0VD@Pq#y5&C}>^zwJkOKsA@L=t^B3BXSVX_6u5 z$gmJHBJ2M)=Or%EPJ+Q=4QaWy8c0v3tUXQXh0t~6H6JZ0W0gd)vgVJpZp!&XG-TaV zwE0u@ICNwu2@Vd1nlh;tOhT#-sU}&LB~__s`Gsn>Om4WRZh{}#*QMn)>+7wg(ypdm zexY_u;fQ_k@c!KSB-)Gboah4AZ|Yi8w{^IoomFV7n(KG)~v zvKk&{SfSaZN*xm{mEN;V#Z=X>6;L4Tj&WO!|Y(ZK0ys|cmuRE zZp^689AQcW>y<%9vp9C{*yxcVvuRmg7>H8aW6*i7X~&BM0#Lu~LN*jA=zN9;gLp&( z^U<8eFp$S&lXpvCaRQJB=Y2E)(;@@K2y%Qh@ItzYHU@Iyr6>5)Q@wHs&!%6&CYaAQ zgyj>(Xp>T~2{Qoztp;FWo5-6aAl4S@L%qhYh&WPYIt{RQ8i1YM1am7wNNFbgWstn3 zr{_O$=3qrzexqzKz=unhH1;W4(T|ZqG3AEWJAT-q^zUNuydCnq52pa~( z7#HEj0&7i+qdkk8ql!2tEJUNID4+dd$B z@Aa#Flmi;5k9l^+0>npETofqzsdf3ZEzqxwqhAq%2AIT@0eJ`zFI%YWwU_pr0Bjk| zfyVUX!EI)BCLJ8mz!vI-hU(&hCbmT%G~WpPfjM@T%3OxB)4+L~NGk%67ZA{N<7EUE z#6zV6vG{!cu+k$MOp^c^H!j$rt6n_Tl)YMINROPio(*rkr{4OWi4^$5 z2zsdrbgj7)R^umF65LR8cdF+8pBe%SaX=vJ`gd-UHs$5H+7iuLR8ejBaIGA3U7}ZQ zq;}m4`?_?N?980H0MRWg3LW==7s+CC@~Y^cy~sB&#! zOe5FkG}JdVRGncWy{vzyiF$%zv`OI|VU1lmjXe#Gy;F^Se;Nk_n})QTMqHc5=wVG0 zIZdA$nm$i8efiTw6MXko``x_jyP-4ih)pKyhwLIO+)okFDER)T_WLc@_d8+lcXJrW z2tO>mGvft`3j1AG@0QHujlP%_N`)M71Cb@p6w1!ibf_k?b6NdRm8PzlmRB7W^uj!r zUH@rAv(P~jCYNuffSbcD5gSq~BxEX!%yud~EvA#$qtc=tQhPd1v$P6(N)wy@qV!*{)UvOKJ({>5LHdS_v!iuhtiF+2w&5rtt~%f;1M(+8?c15Bb|q?-`X=X6U(@ zDrUAUE;pYNdSthfCNGqM>+QJuqT`u)`okA`zB(NZA&I=X9RcwgMRi$pL!C^Kwv3?0 z_P_(}>#sXcb$8zDZDVX-cj`{>cGs}+&Xk+)jJ9k$;npthmgN|Ch9KMRfb2=?wv4%( zYLVL=lA9R!q3ikG)K{zN(?=9ZC)Y&Srv z`=TjFlsu7z54#$uej03tWP`lM6tmjyd^hbyZgYalM>D+5UKOke-Cgz>TZsI4WX5EI z0l8EIg&qKP)Y=>QKUl4P%%ebr2|#{8|M4&g_;m(Rr}xGQ&zP5eyBbXTc%XzW#HI{p zV+)b6&2=68P{csz05aBq!STg&$IfuIf1}81C5BUc@0t({_6b4~N*e7NL>S~qI z9@m9DJj7BFZZrV)#eDQak8WFFehIti9#oopYl`WK}t-9WS~w> zzcBe+dKpki5t96S)E>>i13=Sa>_ZR~C%$f%ph;hU2EJ%3w~|AhS(W z*fpTeCd8)Hj2;eM9MHnE z$Ymepg)MQ(0dkPR))LRLn@GzCK)|an=rb;&7bb?RrpFSd5z{YaN{r4886A-so80|V z00DXEQUP2+KOVwP!RPxtlWB&q6ChH&bER@<>C&&ViI=K+IP`JF!TUw2)XzO|sHEqd zBNm90fO6s>QcFxawu=2$6N5g9!>mB3mI=(UuN?U5Gg^;@(7@O8;N&#P(>Nd>9x>gM z>xTt~^L&z^mSS;pA}m1qa?v8sbxGfM4kwbm!0$M?8|2eHZC%yjMQBKhG4PEeWPS%_ zGVsDX56DHx6MVPe_AUrlI&!icg2H=($_sqRC9ey?+Rt8ze*-_FT{53`JFVz}d3H^J zT3Ow(1j_%W)A_CR9Y^XwKln9A7Gub%jHyR+9=HT~L;7sQ2o(P9n8O$J{|Pxg9pip!#>tlch zgsH{*l|Cc%0wKLH0SZv&0<$uk$yO=He!YJI^~LhFpDLHV1aMG|L!=WL#7Fzg;>xTG zkdYv)TI0%j@zpjMmm{x>dLLJWXA;iZ*59I5XyPHZWjF&YFk~O)N9{Mo%{byA%X>&O z#dSd+Xi6SR~z4A48wTFg$0kge{Ji&IQC=#Y}mr}+d(p|5FJQ-~8~gW7TUxQaZNfATs}moO8g1GEe$2<@ghP)`d)d#&phT^BxC6zFZ1qnVsq(jF+Rd3H z3ZK3Y;XgZXmLh4DXOwkz!6IGm!aEYb%3Nc}S@$n(S@uiTd8hBuAp#D|0|{q6{zZg7 z9-nXKc>bS>P^h5Os!PS+MChqkR!{#$g!&6Odfhpj$mI2t4i$3Q#I;1RikRfO$htNp z2CLS@N}BJ^RxC73=4p&D(XXddztiMA|%C@MWNI( z0~Wc$O#@c-dBswsHblv2zm(6|h||VM>6u-rS-COqk*(4pqq8@Vj0`Uf-y5qbnswbh49R@oY&j8*?hgo;F|o;5#S^baD`-b&pu5N*2& zQ5$)yl|OG~Z}U$g)Y17;l$z7IXN85Fc7E+@&KH6fs+})|Lr=L}j*)!(HxYX7TE?}v z=WhH>ggz^Jd*16!`zcqSnuUK5p>F=2k~M!3q3RbHL*+FW{y~H;71dk}+xVLZU8uPf ze)JC_v=$eMGSQgLNMQgjHHl|6t}uwuhnM3qcUZ1IU=X2KAE(w&Tz;DQv)28QjXaZk zq$FeDcmMLpAY}OLv0tts*f(7uxt28-Bd!=e@hqrM{%|xk~1Dj(4G{ zLjA2_oA+an#6vxvralA$Ta?=s-ej#8vQ`)&B5WB%=w-P{3J`f`W|A2Zix8S`_k#b~ ziD2udG0i-CcF~!}XcomH$L2LpQ<4Nl!5^uYyDqX<&@QEI-E<5G?FLKF!w* z*Hvsercr@7F;8WDa4`_F7}4W-t7vqTL*kIeKy0|$2uGU`_EU-=c6R`{n_zeVg(y+m7j+48HHv;C&U}jkvMtL$h**vk zb;)P7()cP7Q43^2E0bPx3A32g5M_DIS0rT`FRf#OzW zvHGflwj^niD4V&rr(?tUvA1K@Z=&RSoK##tF}7gVwEOtpK9fFi%B$u*)E6J6?e>*N zUAD<8-9N3tZSmB2UH@rhKvI$B%KF3l(e2ThvMGf%U-gEkzvP3O1;4DO{Ju1&woy8e zbMbCTMpI3|M%a|prR^d0OFydLJl@Q?6ttG{-r(m(_$W6HxDiW*o*E~zTZ#`Rdpe<_ z@gzx|%goLbExdV-C5)sd?T>Su5ftzCP5d7?HeTVWnP`uA8i~=($I;mu zo^u5Tw_+3tj`oabJDa7(z`~1(muQ$*B zW@O7rsW@0Pc@96WAM9mOdv)zl!|Hv#FEQtKsfhZ6wu24%Ow#->%c?6ResL6q$@=5C8nEB4N!bliWa>nN+ zN&CHvw`l>95MXL*6&3~ifmDyjf(PiP{N|hRr}WR?w6#bI3!H)Ro1e=_6I9*S1R%#2 z2Evaw&^m2LLM~T)bB_5F+-3{rrBMGxgiddS!|&3dNkP0LSft@>C{T_}+zeR+eU7iM zRvR!xO5{fu0qWR2cXw)o^0cqu^{3%_p+gz;FI&(0!x0s%z)6(yqeEt zN+qB_OGl-j@naSMfFuu2SoQN>(hfAe_cQJN-38u@(j^LJ(ob=dqOWJ+{1nJm0OkFK zw;O1QVC-aj7IBlMnWMv0@0L;j-JP15!?2*{U(W072JQev5xy0vq|D6Wjzbw6Nmm3A zX3C1TRIp!z-$NXzJCEKs^~BmLMzEB{>EUZZ2Vf+PU>*!kvv?t*@j_jr5X{v)=|bgD zZ5}$qRG`7MJPeVnEszN=#!MWuL4cSyi61>8geU};Aw-{G^X~IFBkktjDnK|Mz{%G_ zJ){3Z&Swh17JMo)HZuJKo#6X{fWa5WZ#Ii~Ct-}LB)s+DxCn7PK&9b9l4Y`@6vIS5IfYbI_AXh%&~VX}V7Cl`VO#V+Ypan;O#<6Y zNo{7{rP$X>#t!eGlsITvo3Rm7Be~56(r(MuZYPVhm{%Oi0m^SiI936T+uA|~+N^pT zxQx`!R<*mfwY#;okD*%zUjgI!z|OsG@L&L^qRF{JV?7ABy_@3DALB?whyLAmCW?&e#12NHI zy=tPf*8u`I2GEglcSf|irDM+`bObVE6lxoS;yW!1<6vDztnP%nI&t?uo3fX89qnsJ za4|8i()5aWmKG6015pjlqDHhsa^bOV-Ij%BkGi@Zu97o*-@GpXCOqd%M0Yian_)3s zk3To$78N(<{h+wk}iPQ4Su_j-p;RMsh zxvmI;R)rB!zKj%|3qLCc$)+&7xbZ(T0vhdiHC(kwAb)r_*YO;g@}f{dl4Q~tW>Plt zq3obNztKF>i1BeZvVF^hRaGI0#q3WZp*jx$dU~g}KU@z{#_?x>Wm&@5Q5c;5ULhG3Cg(M%S zv-S3vzhn|#ZG2FCJdic%)-`9U{dmwq;+-_-cah_v_Y${r#zPYH!srXm^VoNH)0~&S zj}s-?23nm7Q0Gzci74*GI&Bxy;b_aSMRbviAHUiYjp_%Z6QH_@ysn7^=((fiiQL+1 zvf3nYZz5BA^3k=)LvoJ8tDIA>+SR-#v*nU9u2tEps8p@U=WI{vk<^O#s~>Zp&pw^=5(r|t*yo-@h`MQU(zxgXmHiqMAm8Z^h@)G}bxd z6P4ELG#3a45W!vx!0ZCwyH8I~GmYQFh+{y5XyNZ+k)M-62H1!wglIe^5wlFh1cN$1 zy;sLZFa-ld$|7QD(`!-4nfCl+WWak&jvXR`*&{Ln0TS&ZO4kE~yNdBSI_xw6t40J` zHC9OM^^3VLhqsX%hj8gwfH+zhTc%-STPJ%r;#3(3Lm`MtvrE?!j%7xiiUo1h5^gES zY7PJ-@L>6`GpJ&gqcl?Y$+uDzfa+OIB&ODwMnJldth*TN)UhYX1c?a*Ryx8sI9duT zj^3HA*_;WNj$k57*-VI;@50l55d#e_*^1F23?J_p-?KarDADY=6n$2f=K;nyk{Jy; zs3eF|VpnE1fgQ>70vJEUU+1VibdFL7hJAXr3nswldb|3Lrtk?`XLaUH;quziWL!^Z*TwZ6=9}rFm zj(Bn9N}70tx->{6({TL{+yW2!00N1-fMul?eb(d7@_|^&uA1%~^OahvN0X2q^HNm= zfBB_5^thtu5hnl&S>#g2_tim{-2kDjDESc3Ew`Kb367-+E{2yQg<&;sray zxSp|3hF-28=&`l;+~`v)pL+b=ise2SpIZuI!6;?)XlrqWAzmC@%7Mb+zN_gq#JH#X||SKM8Hit{(E z&pgar3)u}QrUKObJtJ2v^8@+M&U zQzOZl{HiGs)Z#2o{4B@?lB|R5MF-BAY%X?jrxEgdLxY}703(Wu#0|WqiJog5Ppo_h z(qVzkx=*Cxp!F{s%zNkg3jk6!SP2D?K$zFW#p}rcZAFUB@t0|RG~sL?T*Q=eg9j#6 zrxa_h0HU1+ZXEes6`-BCIxQAU7CVg)XvK+PekX8+Tbr>$N0YA{j6uO>HHZQ#F(Mlnxs8 z0cT1V(~rJVOC}r!leJB-G*`*NEw>gTs3#G18I4v?2`6j}z=$Fk8m7K09D02rTB z`00M~6x{1ftSAnUqz$68kr6EeEHp%ltiEQ16Z~_-wcqS}2LiqeT~^*GjXM*?*ZE?H z@lFCw8v`J`_*-R4%l?7b{=>5Ei`4!2uuaztwCAy(qff|d2evi5JA3Mlg)x zgw3uCEo?o7iF1`mgq;{7TEoO6 z&B?*qE)kMjczOi_(zeZ}lwezm^Q;Y99KdV)fdrFViYG62zrUXX4`y6VVCbjz<%O4F`K!u|H&_A{fb;M8pF9mS>o)PIQ3 z8-|r8iZ?gb4wP3%i*zqE`B90`@e1oR3uw=eKc?%gH=hL@{TmUwex$xd?*2C-bZIcF z_>0b==Jx7`7xtVNc@9|VEYqj1Zk%ZEZ~co1)j8Z8u51Y0r05>+pHb(WGFqmEu|&4I zqEadPxPK9$JYi&C#%c+{e-WW}a{a7AqFx20Nd0wop_qS&P{}J?!jHsq!-{TU0_-3N z+d9>BaU&bNaDwVg*rFXpWT90gN%wFyHBp~VQ#8fcgrg+IT)Iv4u9?!oUn2B-NxGv; z_?1K_zc#TfRl84riO}#5S(kIe#dFg#a>Snm(6yC52_Dq^W*PJ$Tp|zQu4s{W|M0-u zqSy^6Ss10%4;6}*ZZFG;tRqp0P{N9jSgOk%-_#6L9F+()Fpd)pgxAN4{%?rTcA45& zhletCBsy)`m$mZ3{k#v77o-~A3)2ju9+>@~h|rGp_9OYuUj%KqJ=RhBhX@^%s_ayHC)e?p2z{rc{9g6*J!R^YKa~j8 zJvycmq4c^cV^ktk<%78ll?b)e{!4_O)m5EvbiJ=SiG0%cVe(XT+HOiM>Y3`ND^K1# z_$wtO*iBu!8NhCJO;Bv_)2+|djsA*b>#DQ&_D*&k)z_bWASCYexKs^pi`Hz-yS&|>`24(Gi=oXG%H7RQdVSp;;hzs)tqxquySM&yQ{eD- zk80rEo#iKi!C(4hYVUtvfBohD`l6t|{_*-Zcm2op+HU25A%r03%@%||p4d`DUpwX8_~xcA#s zb3&&#L8H;~EIYb>V68OB2AzOR_o-PO?Uf@M5?)&@QlXN9< z`&NK#zz2wU6$b3+W58Oa@y^%oqsgOL90%`j2pl0K-s51d;Qjl3E*q;j&v)u_4<1r| zjtJ9NAgEMIjf6i~&HZ!?L&=gO9)<<$UI&1LqQOSTdf^%IN45ukj@ zc!}eAk?8br zIF|EDj|7|w;7P=50eCq08OXK;w%C|kmgoQ zK1HV7!1mH%k|Y|HR#-P5Md}CFHGeF!!3d`<`rjG(>qj+6WAs9QtK=k$Z)if^B8_5Gh8YN$dwvrHC0KlMN>^qp=tdOyp(!9gF-@AJ8 zPrFnxwJ@%rKv<((X4ORf0jCl(sf|$}>;A@jw@#8U4qhxE#$|(-<;Vm!OzsHQ0DsCt zhr||?_J#fiKeczG-D{uQa38GYU7!^>hn73f1%f485=8x*;T$MT(T6Heai1_oYa;Pl z&HdCcumPA;QZD8;V&iXl{Xu@3J4NzIl$Np^YF|E>Vx))X<_P-)MBGN zt%<>Rl-DgV7Xs)<^93Ouh|(7|tLo-OZhC8Az)&F))A?uSl2{^2b05geCksb9;lSwC zUgccupS-<;H`1qC)2>K5Q52>SD}wAv8oGAKLigXgojLmSv1_;aweCh1_$Yq4Yp?56cPrw|F>syYSt6r1 zmY8&pPF~+n*uSeGkNITjX7J%&Mb}PB^vT+3(vjuou02f}$`&l(cquFWVC1#Nj%ogh z>Dkvuj5MeFU;QcDr)ejf`VGfF1+DQPFLXox0}(2Y?Up@vb^Gh{p&ki1h`*nn=6@hU z;hyyT@NNmpRz7&xTxyiW%Rm4%{|6%U!yu{?$lv>sRw=I7tDDI){`$0$xc?xt5*-VN z#~VnYr3M{RelRbdNyhxcZc371IMdQliajy-(L zzH%se_Bh#qgHuEaOb1mSJnqTj2AjMI)puilp*9IY495EDPd&o>z!PXRP8S>*p0V3dM)}PO6Idp~YSR5sI?GImMZI zg*dy_5+U&OB1OGo2aRGi6Hh4tPgPF@-TKJPel(k&r@C~MqYkE|8iLRPYL$v0?-#=! z6>Cghmg5mdEf?z;L_2N+z;zJtHd<$Qv1oN(l!6fYU35IlbbWk5g2&66iv&jlfbjs6 ztD+`I03;smZ|=1%G!if>#7{{)T=Oug?uET#aoLSlH0L@ig0 z&P882_du-S7|$FDx$qs3chbWai8k}c87uToWsA97#kmwwAnfNL*kIg+HcP2060-v? zPPJE*0S}GDx%vS*p7#oRp~12%g2!kxv?IKL)mbU(tP<|(b#ZUM(zEX3FXFoqPDF%1 zM+hS@-v&hM2DoO4VKO5&&ia|0-55GLh0F?1fGqc!KaJ@@S9$1Rdc)=epf;mEt$!kM3@A3iv)6qBuccL1{79*< z$b0ZJe<(NSBqF|Vk_U@s(!uanQN_T>HFrfZ+j7}mX0C<{v92Q<{ zeHQrOlL*AxHC7E=#_yl;dA&liKo=B-7YismkcO48z*KM(G~*e()GCi&NI^6rE!su)BM*7g# z{`2TS^Di{0)r2VYHG`>JAN&vug#KOX6hCHT@H2CADf{f_uyD{8U2T<`{I%drCNH9A zsZqCDuX4a7G9CxrFJ0^F1*rfK>9q%Wfd^_t5Ipf&NK!R!VI7 zQ8R>Ahk7I`F55}+(>*A1d z2%?YS(iW5c3{PPs3Iz>x#y6Hn^6nD{+DOj*7kR_#=xTfU7=U4+!3YM-%5daWua{X2 z`P})6JTG4I)CM1=2H$gg%k%an--sgr)USt)FL__X?oTTU?!6Q|RYb|y3gp8Dn3bNe z)eG6fgeB^8WR*k=W2j1Kwo$!k3{>nweWsg|`0Z%%z#ADM^%Aa7$(Y}1@k&x>qowk1 zq?Xi6Tfbp#u78RXl70J@WmxHnLZRGi*z=_uxjuu~UpH>y;>waO7&#g!R2)=EqCx4* zp9;RSRB=?H1=bjeQoYcidP!N$yFo2bS^bjoDIHif;(wTGm_H4PYal23xyHVrd^(8 zht!sbcq0);trlE(>Isu)2Mu-LIa^1=k+$!3H>WxwOn4b!5&6*r80>d4@p%Q!^|Lh< zb`TQ5YN!}4e!usIno%(Sh1J}RRBz3+YfsXO{WL7sS!|ZoZavA&YD>ErZsD(@1zC2&6;>F?S%a)3k_R7~h79Cyb397zdvUM9)Waa|ScpS=sPb5LMnu4~ z`2ANM!>P+KkDYf%#}@gbiq}WwkoWC*U#aMc4$8bT$P(ce7VS5@-|-mX@>y8PMc0zq zYV>Gy^5*@qkHyx3O~a2*ERwoe{V8QrTcV8idCcOAI{xF#qioBacxII3OxCt?C+5Kh zz+%)7e$4L1gu&ipbeUKNSzkb`PJYSS7K8u`@}(_W@feLMwly@3=pl8j{@U1->B94% zq92QwLfG5@v}nnS%-oC(Aaom-%ulFO9HLG^v8CYPt&ZOxZu9by1k>#e_t9-0Ia`9Q zYiYQe=jH2n2_Aa*ymdWu@TvYPaVy^lv7KGqvL6&km>c#rL}Q?$Btaeh?YoWJEmaxF zZs^)I!$uNLYvQNjrhXL=whs_9dw5{lxb2Fk3CSSchoFs|{v=^B(tPrf=c6Go9w z(qI}(9hU_}7TDe^z!unKP6NPWN8Lk0SP|i{WBcQ|@?1 zwdqSya+A|Tu@qe@5o&m4@{{+x1qYP~b+noBd-*=J^jg#Ur0dt#lk>B|`gB>dH^-j6 zn+^GN5;_+;pKzh-_HuRBCmEBM7rx$q!?R5H063hcZ42(@xv&Tzi|4-x9TlH*(Rmk1qp{`M?I0}~%#++N@$ahWJ4ro>R!o02sgU~xD|_b=wyP?a%`F4y-sSR;uBx?g4_~~cEb?{exyG2Y%ni@pr|uTt zv@cUn?2XFVTaDgDOU{TpU()hpl|BkqA#CtW=>;^Zs~9Q~8YQ1z@KECgMg5f*R521? z#NM=Ote9(?a6P@4f5*r44K_MvH?71u_pK0hW(`%9{#@?X_p=^6_Bq4prK-2SCo$QM z+z=qptJPr`aXb!%Oc`aysy}Q~avh$FPrPvJ_cbrfeQw2uhj7u69AD--R$tGkytwn@ z0*Pm`>U(Um=3CDx*5!)=$@Yo(pZm88x?>e!6&L!3`!EwMqmKEt<@WNCwdH z{~|EBk@-3MiS+kx$;LlGfXI<#7=Jm5p7@8rqm$XdBn-TYM$Dw#%M{5@FsHZq3~J48 zZm6EK^YNf}&F>GDE4QpR@xSIewQ=6<<<7dlab@Ogk(x-)E4e^Q%44~&lxB%WTMJEId1kWxHX*P6lrhTxc!3NHBnZ*4k8p7^uA;EVR8#Dqt48B%_Ph3{o`D;;hcgYJ=m zoUPQTq=5%wRoGdk+ayF{-GgOU4|e_4?sd7^Xj;C@zdW;>7Xn^do;&B6ShC;RzM~i` z*y$-GvD(LTwdQ6(JQh^h(yub0cuyPTc|g&4YuJ1v{Q9g1*E^>HldCtfZvI|cjqdH5 zeWnyq`*dY0U7wWz4R&hw5gI#`N>xplg))FQPIz?;kS7<>?w+ z64-Mh*{u92KAQDVr{@{w6WBr|k4Ds$WTRBbAWolAtYZFjM{M+V`EAx2KKMM`JV+H8 zOJ3%F?cA6t5ab*(>wBh`aeOWS$mqZ2>oJ1r-D0QyqMogd9usLFX7{32&~OVCqe)z8 zW7BJYtcOM#aZVSbjbu&CMZYb8Q_7A_g0y{q%$sVr|i9!^@ zUv3OEcRb?=y4`*5aUIa)>Qv?=`g{(GZRZal;t)RQUEN)?87=J*c zjp@@RxU_-zhl1}3$+(FcJrIJ9;QI4 zlAMBn^5}&iOj8V?c;h+j=%eq++c9Q$g!SEH!EpBGiL(NsZDx2Qe(r8w=&xu^AHo^P zOM^FaWTF-#FNHg{ zkk!3aw)<7`h7zCWFKRQQ=pgDAua^OX@>U~i$R=7}_RDwA+pk<^Z64tQBc+Ytpf9Gs zAT3#*%xZ5>u#{h5b*FAxgH~OZ8-Pgt<3e~#Qnxr=rQr3WCHj&ryKlEFgU+Zv6H!AM zO7sz<-m#WIy;gne#DrpbhR8=t;<4QW@1rOdk%jYD3XCQ%t{aR6ig(t ziW=x!%-6!Z;aWmWqVH(+gy`;U2p6Euf`(!6d7+ZP-OwWX#y|nB!0*jxeyc6e5Z*IL zV;F?b)CyQZXEp^}0c>4>1|KqWQ6hAZNTwsuOIx3YjmoazkZXw|21Hma5uS{qGx1=W z9cGOyKoQ6YK;gF;6l*j}WR`fzO^!AbixekqFa%2Ypy!9YehDNU=?T}i0}xsp^S|SM zP_S(M)lhkb@sLq^vt*h_IX9l*8oKLFNtgvTNMhV>}gIR!(-7@-k&vH0esU6c{eyjmsax}umngXlf# zHF6nZ7*h-|WWOac4`7GAIgzitPQN5REzh+vT;E=r>EN)XrDqrn3D;UxO=XQ~Ga zScgaG-NsI+dK^&b2i$;98^f^ja;jfe=3*-6lQm(d8ak~N=Ar;3v>Udz&P+|yDnWDe z2k*w#*BcbTXK_fjU(Az4m>Ga}7mZv&uTz)dkjkQQLnO2(S?Pm_4~jvnk70<67{vW@ zOGa>bu)o2HPADyzkeK*45e^LuLs*6%zeLb~&~xhBw^vDtdJ6W4SLIQ6UHW;_fRjCuIgjTkBS;y zSK`kK`Ds5?Q|E?W0R8lKvhK%^^7sbW`d=c)(U93T#Ehd^Lk!IujXpLQ{!%h>3^A4q={>h??7`M=lMZukGzmx- zzAtBTOU1-{+%Rz4R6oS%c8HmIqbUuWSxSgORJvKtI3^+8Bu&MFKE(V8_ej!mdxs zE-pIL;jxrwDso8QJNlK{xrEv{INP6hadNqc_3-e#>~;CdRiA6u z{ewdT{sA9v-oA79-rWZeA4EpS#3v?aWaZ`+6qUXxuc&@mUEkK!-qZfNkJ!`S`*yIm zf4F<_Q}^)KH>2}IA7@8COpT0<4}Y8<{`l!XZ~y+v#Fz2O*{PYi&vWEC^3vS=@|T4b z^5VBIi{CyjtPd>hj;!oYf8YD^V|RJ&&yS5?R9A6heRFg3uc)}ayZ6s+pUNUqUBttq zM$>%#=J6cc_)k^s5c2^7{_N`Uowy;`Jcr`aU-ajE8Xls!;6vpf5gVdva$ap zHa@dxs+cHN5cuG=YU2^{NEO9)FWDff?~%aGzhYzc=a!&Fs@S+EHr$S?{W15h<=@1{ za~cZ9)yi$c?$dR^UK*cY7XK0(vz6bzstiZZj}#a_{+HNz$~5Irr4Yr)B`EaS>~q^+ zvGL~5FP5ndSI3DF^nzBMt-)m#j25xMFQe&UaL%%9r{Fi9lMrst_-T!K!eg>B#qa5t z*>+3~gWG2XZ7ja`u|mP0JnO$=W7BxM`J~& zZ642Q->GgxW*bPvWf(@>gArA~hc#sJGxIR~5pWx8Os_VMdZ5rJxfrifQ6hL1v{JU1 zsIwdE!pL{kG=R2zK6byk3jjd*P6QqluQZ4* zdMphf(Vtfv^nsk|1OSSeJA;J4vYpsx&r`)Md?8Ov`XkJWhCXdZ%!D?ycMmxY0 zLZs6#AZ>JRPhQ)6wUhg+hmJ1$@#bp)Om@qr_PfGgv9W5a+hMK%=gsg}Y6vQN_j>1`LnlU$Id!YhGzsXK(Evu`wh_oB7|xMl|R9 ze-|5H{0y0J@?K|yxZGafnZjIT+@1D%Y`Oc%M!luDgA;~<8rpCPWZ~x+XB-oc`+Lj zt3_GY+wDv8YwkQOuiZHOsoTVKv{pJ`b+lgeIq_&C;`{K?X37!M@zw=e>*HS!d6SNR zTS|=_{|V4$KG`-jw?5es+AF@VZxk?cVmEpD3`Kw5b@^m}_1o&n9=dvD9Q6IIpySVP zdrJ=-cHY%K4F1^=czR+X^_7xr`g;8Ug0mjDWXq;Ogt|X}NMVITa)i+^P%Umo8wGw+ zk0}fpC7{k>Ps5ZjbkSRpFK-S)S;`E+0?QGS@$>Yi`$@=Ln`nt%EaV!zr)1kEg2LTf zh`0~O@TdjGqQ->~5l%*&sdbOmt`$KZx3WqLD@JQmV=%(tZyuuNq1vtU?69)l(>6pL z=Bejt5Vj9#k@8rLub3tfogx>?Ld({M=USG0O?RFp;p;VF-h9b721O}J9KDzM=fm`j zXRwdSh9#8avOamG4|gMui-kr25S}d}4wqg6=6@6^occSq=$xP!ce%OvO08hdQ%~NQ zBBEgF?>i-HU!`or&;F`L;xp5+vaSQ&YF#h04&N>Bh7O$dvfIqEsw!dm%sG?~xDhkV zc1eFLJJ;^|N9bIyxZU}j_kB%?2`ps<>%IcQ!(JkTo`)f`!zd2c3!p!tC`T}fjsoCh zECWoZhZzgNLp2I$(6QjXuu&WoUQ)=oU$VOZh~&^H07{SIxj#5r1^6YU53;?m?f+!k z`|OY4_jr`{9IbWU8UTg}SOpV^y6cYkJjE+O2D5A^Pj6!(Q$Iz*CX49xw=WQ7sTPaa{-TO%&=tSX68IpU+TL9QL z_HN54M!!7Sc{L%qK5O=J@WYl*(%T~qa&wOur^&is)NlzcINyOzbr;X;XW)7yIa@sa zNA_6K-PVNF8#&+f%H`{`MJ{e`*94S7^&Cc*>nZ_+U@A61 zzq_gKa}@PbQ{#$zDO3IBc^~TaNo$ddR7iJ5y}fr^n(+f*4jAb8>{J8HBu_WiSFzX3 zI8lA!A&l{1d6Of?au^n6w+jMKz4a^JLs!SVp}m)Vcd?F@<2C?)Rm zTNA5(2Z9gPs-B&=tb9vwM#WeS=Flf}$!z@r>TyXI9fW_YE7}*d5U4?ij@t0meQHdI zQVO9FUgZS07dEn+F>9Upny{W3i)Cu4eA(htYQ|k8O9V2x6Bji0AjN1z4@=ktPL;lQ z%%QZK{RRO4_($70W-^|u9t-CD%r%zah@sZ{A|J-$X&4hoEL#>d{BHh}jS)LmP}9{+8Xh`x;mpJ#0^!?YS}b(Q>Hs z{vZ8%n+X5gci(B*1nFKRf^j!yZ|RK|*>&XwsDy_+u;ah9I zuYO{gwSRTV@76!z5B1XTn3)>hZSFW(4@&Bo{bse-{`q7hY^3AM-tb=6(a9!`xswdD z-tXq6Y{go4E^v9~;k5B`)M-GPXK2Vrqc(rP3efZ%CWxLG! z)sG7!hm#$Yow}q~Yu?sJGoLBD&8NrjgGP?N98va&%w1bC*2fFHr~CcPuQmcQk5{N- z<7iSBRct)@;i{kbZlr6sg;J}^5%jR_%Rgcx<@b}*<5jBISQs7ke-s;?aMZku|1LJd zS|9vR#YTaBJc^6(KM@=E2?|^hO8-S{oQ}}@eeenSpF+RDyg#!2z*Oj@3T#(_xQiM4;4$SVfdW&G_T{{jB4wv6I=D%kG!|`YVvh_7Q0BNk7Dc0omQYuK z?#0r0j9F{EwM7?zAT3E;1Dv1jX^?fsx)YbURg%Bl4Ddxkv;aVzx`6!iVAuMvCK=a`HO(`sB`_J}?7^3snw6u~?Fp})> z)dbAjlpw3%sf|fTf6BnL1$AZ8Ad@etWu%LggG{E&|#qhfsoUJ?0exkwzhuy zs#%dzULV7kj7?E53_(I=k!_XkG z3VIl*Ea1F1(VvkBG9zc3+@{w>0GWcoem2i`+E^VB-~=(C=BU?+^HTs%k+4>gs7sOf zog&HHBI))b*_k5w!y*NqVkNC&p0N9BcZxM~i?!N|b$;9vnJGr|lo)807`c?_(iNEG zmRPixoSP}JsUzF8n5IN8>rO!}Gi0&z)S@-KfzIJX|h6GA{F!+S!((2Xwt` zXzUO)*AGjBcwXGldJ*FCBJ|FSu-q4S+F#t8dGX-z1&*hTpjAeRbSaCzQx=PtXjHv66 zD{SO^D;@D&@_Fu{!6hvoVq~?AZM9;n!55y=W)({{6--ZV9Dj)3Tcf!7)f#+bwbXR= z;>`0!KjXm2n)4xX+Kn~UW`;XGHP_h^)xz`}%PPM3nb95906J=ud@TQDCv6np)9OYWMmd|FWnfnVAWgf_Wd?jI&c-ifPxgoQ+R_M=(9E{LCdN zn+(=V29u%jQ(h*$@cQA3su|@#t|+iJ{dE;`vdGViAo_;#)(G3XFTYNv)JMgeZGmlE z8xB^h3|*^EP&b)J!NGN`EdU4tn_>C0vEHdl%gjyUXHfefR1=W#tiN`Kr-7Ni-sqjH zPC-`13PArtT&CAc^;Rl26Rgw7sty1?cCJh;1=rtdISHc25JBp&9An-P=mZF((DoC0 zUB%co`v{<)UHZdvBu4bj5c@r!Yq z&6kfZQzpH{TfKVa*_M&r72h*$KV3OdurWC(#{_x5)23;-mEB?PP~aP(HPq8N2xb}W z5#xsF2Ni5V>{X&OO|QCkmV^9z&r{rF5gO>c$nb!$WBY5eh`Sv9GPl9!N^>96W<@^- zA33^c0?r%n*xO|GG37?Qc|z2!s_eXyr#serdkCbDdh${V;#>Dtmt^&j5BxF`yf?wz zBGq43HHaY&>K49s`@{;30~=l`1PNv8Z3UPWyw>FgL;SK-%ip>84Llm^)8HO#m(DwW zMZ^cVx=$<1zFdo(!8@})a8gnavo| z5lkG(+bz^3fn~7Z;81(bElU3>*++=q9WpgAG8kciDpafk>k}Io3o?`>y2@w4is+m# zeW2;eS7#LL;rwT>Qk|8KS8530RP)D0UWgv!_|GMK&AT7Tq2MvG5tMA9L8%uKH3VYm zIztA}Tmw(-jwsGWTpoSTDF)o4bv{jo{_(Qm|54c`~&5Q}rii+pYXYxz7UQpULK*oA|3{L}tI5&sw+7 z4$aLDpUh6g%)X_R&yHT4o4h|a{cNs6Vy;hWcIIS`%>QL!ZWctEtM>guoMT;0$f?Qw zf)=VQ`*CGsowbTCuSn~wjz>k<$+OJ3@;~p(^Q4Qe&6Fm(kf9IA@H{eI7n$J;nTbM1 z2+Rl5l^-R1<#;g9l{e4RHP82DUVt)B6%~c`7DU|_#2+k3<}FBfEy#XZkf$st2rMe; zEvmRLsy$fL$XnFvTGaWnD45;yX8rl^AB!6Br6Su}qX!WyT1(DaP1NbCZ8{#+qb04d z8quGRKl0S?hSfQ^N9+&QSwC5}uUWpBR|P(*XO+1V_PN%|eMNN|pgCH9KXzH^>^Gox ztbcjHxs4Ud87J$IHX{##mQ$W4^NSYuHX>vSK<@Vv52X`db~N$!f>p8SYc7I+-(S^| z%u4M@d6vDBm=`;gOQS=)#{ceJc1^?;95^^W-Ch*RIcu#M1f`_W&~pR5&i)KR{@jCi zGLZq@ylkW$z)9#2Dh1Zz^RDJfk79DZ497QZTCk3S&DaV^3jukr=K$aXgU%7>CsI^L zKlIi_pb-J8Azs=ZP+indj}8GCBhVCu___j^`)r?du1D@}j~|)!8V;O#mPSrtbY4E9 zlrNie&8_90c~F%V`0MDGV`la54p;8=0Roz@+@(+E-%@VfI@)o9<$I#*uF*lSJe2Fd z_LQ<^WPDj7`WL2kt7+L4cBxaX4m>IUyMBmO!{)cm%1}EWB&+7PZvSsz8?ZD0V#R+& z1O4fV$)Dw?-Qpu7JwN{#_5YT6#aH>sKL5FwMc^NeS}WN(KbzOTX>~tv-U`sJ8BRXphv8rRmwxOL;Eb5J07Sfqd06;o33@USfZu)_L| zZTq+WxTSQSr9Qc%AFGEWen*F9M}7Ry`D%`)%S!#F=ezZfdoLaLJv{EuKOQ_Y&*pAu zOPTpvOE(Lkl%Ixw<*fPot9pLt zT(#Mrshj3(+^Quo)-8GKJ#u?+Dx7@^7_%-QQpH9_6^**D7y=CokJmn8!6=Sh&i#KY zHrlV8%T*2dM{FFlJ00Gs@Q0n=k_nL zF-Ac5Ae!!}cW6RHWYjl;{|y}?(91NE(+iSY2*kjWd6{n1X&#>G2a|W!|B8*LlrIvo zXJHD|XbDl9Hb$$0a-g(B5Fi>ZZU6!aTxVH@)6&p&;|1y3#bV$U`;QnnMfXP~DON^` z#_SioUcO0{mQ*m|rizUONEB`!t|&Q(iQ@0*5P~Wn&d(c05PVSZD6M!*4D$62MGL7H zB~-By9Fbx|6&r78^49jiVL}lzq_+=N47&>i@_KDR(s2-$L78tQlm;v9&EAjCWjmG{ zthryOKhlm1Qn-m?#ux=gNiQG_2zy<~h$z}WCI5(xnL+NdpJ@A{9}82owM{?bELCWmYtUPGEO27?hi&x27+6idUtX*`D~ zy(f(JdRYb|pVL0e@Wt0O>Qu4uO2q~2$g;z9R;+4hk@C|>M!3LvR73)=3s(+XF6HZ7?GNBfJZFR!ikf_{+ zE9FTyTg76}Xf3)cQ53<@>pKZ#=)O2I%(r30L_2_#dw#<=qA2gqj|%7Z8I+R$YM~1| zKpy@G9s&iy;0|>~MfDRVI>B!^^W)YRT8Rq~dGQ}GdREkFVB5evQ}SbFmqgySw!5iq z7b6C_+JWN_RN#+!P(El7pOeIAv%bK$y0_;%Zp=m|9M0=#GIuFlW>~ezz6@W~f$45z zFMrX!^Zmt(2U5+ttAt{eT+^CJ<=EAjyD!qH4M$^+$fi3xQ{JynlBYv?i&UHIt_zE# z|H08K>g-GG|H?RZWS0K`{(~904>Q7oC@lTWEa!$%`7*=sZe&|?N>cdS`Fu<-nMjB& z1aq#TDP5kO3#dRi6T{cv0+M<_yGR@jBn@;$!;oiTI9O06mMw9ygOF^a$tjD`2TbE% zq|`xNQNjlTFcK;?DC``Y**G<(l>HnI7BxJRD9R`)?>!Dl%BFZF&gjl)0Azv zOz-XTh>)RZ(VS8Y=7c@wp#Xyr=RF@jR(WQ^9UUt~F^7>(C>Dg?!h-?dpUQWQYGONM zxu!G*emqY}{dkj)R>R4Rj{`y&pj|-Vr}b^5e?{c;x^MmV?$qP(2Kw88!5TdS%ka^Z zB)&&nZ^O*p#jQ|&YtJ{x6w@{-L=2qu5tvW#LJEfNWqQ%^Q`Gl<3wwDqiavHxUr$rS z%*80{F3?-!ji%L&%#TmM8F_0>P{qdPkIyzEy>*r~t?x{J%-ier*4sH?#X>(uzkif( zaySoOnq`SNEhtq=gTH4jxsgk+ny7k&x6~H!dJO(?)wrw8Ix%#-Sdhlo%vj4VHFLZ~ zLe5wJWI*F>u!6|tY!Q}c;e4`cDlQ}2mkl|c4ak`BjH#zMcB#=p{pEUDNn<}ds@Pbn zHc?Iu*tVlD`j8<#9BlnKf>Rn9vsR9Q(a;D9njfg>2q;FXU-W#J>+|*u*UMZgddnn^ z0)8sQfo4_w9CzX+I(Fez7l{-@0>!ijZFRxQEA)!bBzqnSmISfyC|jP$!55WA^Y{mY9Hg8 zP`)T1zmx_Sd}DJHo1Be_ltHv~SZK=#BPU-)o$9J|bxU_tq7gR=0cYFGt!Fgn@cB9W zBXiF#s9&ye=yBsu&)b@u`@Z`1D8!%bMcCJblp8YLZc;|1*QYc=I2s)+=)bY|)SA+f2}eX1e~7*x2tBEYN0(>jv)9 zNICLIm@>Yi4ne{-=|tgzj5*OIOWzW|iL?+mgV)D4_4bY7li73vNCJNJf%D(Q28nOf z&s_K8s%c31jT*gy>q_%5y-my)w@3vy_Y%4Lfl+ccnF5lBU!pmuymwm%K9feZffSOb zQ$koGX1_WH*Fwv@)-gu?(yK1sreCzZmi*l#WzKbm+dqW-m1IZSTizvSkt00?=~jfu z1VG$d?B7ZlDte*mQXs%--e=zb;}e>I#g_hZ^^OTrw!?^}V7rZWqbRF@JAlw9hZ7Cd zHQCtzt|C7N8ErxuqzRD0Wq<^9@6OE($X`C|9nA$5`5|tQbFIslu(#2fpPTM?ZK!Xz zcW|4ZUq*9l>XUGIn>@d;E$`Mc+3w(qAT}-@2fMXxN;rB<&o5o|yLEW8eoMQ4viuv( z{X_q(<0I6C6?C1kPBSFcK%s?ImQx`WFx)9zhf)}i_KP}m#ZP}4#&r_(_k%bAZ^BX% z)(L1L248fXb|#8*Z=PQdv=hEbnqJt_EtWwMovLQ=eZtKx^u>sU4xbuiohX>f_Cf@Ttv#Q#fh;(?7tWuv!0jA^z;6MdTYiuyP@K;SSe@EQfVhxo4qE=0%*6&G z9u>oyZO6rsBus>25_RTOkz(iqr&viyAySh8ewAS)Bz}IQniAxIR5Cf44t{8WpA^9X z?dc=`L+L2`NRlpVIO2{G7!CL%!$$X9L@bIN%jteMF9XzbtaF@Iicd@S_n8DScF$wO z9^tlj>Kz~n_)#~ZtjI*qTo0@@H-kB_M}nvq%FrwGxK~!LS5B+i4UgP~s4^Zy_=suVt}BhrxT)6(jDVcw^Gz@nK)los%0H?B`FFFv}q zZ?~(@Fg@OA& z-sY5J@Y4Z5qCptLp#S5+0J*_Ht-&Dk!Qk{peV4(|yv!zB%+SQa2o!mrM;H+Ypy=Mg z7%j>mEQ}bGp`t92c#a`rXm}PfMxx44__pi!(OB|_wra&v-bbHYc(L=(lB zUqd2cLm4AO9SY4&KNRBmhqEcevapm25BmIThl&yS1`1)CqORP;;rP+Pin93V_W+Vn z;G`~2$8~eyNlT=xQr52!y6TQhlrM#KL(S=g7$?B79>g?vKlB}#aBNF0kxCc~GUX24 z=M>R4kV?~|r>(uA1ui4(1Oebt{0zg9^g2*4k;?F_N_gZ*RA^^pMCbQBLVR=JUWpQX z@Vuo}cc|`MWxOqv%FmC21v3Dg_AB5k3qj}?StK^FOi)$w50p%>J77kQka8!5`3=>K zY5R?Te7Bf5SfPz~4}E+^8Qlt~_vLHkO!91AX!h#IL-Dv6vWWC`;5?uWHkcX_hEDWz+qdHgj41_<5GKqJ3 z7q*Zf4(V)LO!Q+vX_ILV5&-nVLW%T&>Lgjf>0co$n$OoXkzd6Nz(VmC0!KF!0LORe zCzM~oeRwjw%0YupgpAsrD+<4U6Z1ekInMHiD=^R=5NAM zyVN6e)hND>-;b(?ryzl5VsVGMZWffPZ2=@Fzyai5Khv(TL41SS&vRqtkg5!WL4U*? z7h=B*`2M*6jw*Wlm{fTTcLvCIY}6OQJqGyujKY3A4n4>MqOW{>r6|ibjv$Brh|uk1 zo8&xp0+4h9X|91kXthFTlF=nztng@g$5FA?M^S_lfdxX@)L^{TS^*{+JYLEeqhh!y zgq>#-fb>Kw-pLo7p&Wx+<`$DNyrBltNW|A^FmSuC;)JiRI__8+Ph`qME-}t4*c5-L z5GROKMM`XvlUAC~=p8`HV#@`c_P3w;&~eHm;$ zAHuqW3>RV-h9ts#>J}COgCq7~o*N4bqXXZK!rX`!;XNq><3?d`1D{TOzJtcr) zb>2Ulzc^RFIN!IpFuAyRDDM=wxQx2ALcFxfxU?p)wEkpi#@iakt1wA^wA#2XRB%3&>#{;DUr0hN zn(AVT-!P0UX@U`@ls+bLU8P7X-(1Z?(m&BlMGar0_8E$%{mdU~8V31(9RxD)jzJEN zXGdF0WzV=~!~&z4eXE-khP^5_htU)zkvjP~+JEIL=+0?-nd>z5aYIE!?-dhQC|eeg z#lj>6j0`pzcs|#sZ6Dd%-`r0HG9V6~wLSngM&5aHMqI zN@he2GKQlsdID)oVqEXd!>ztwMSib@LnN;rtAT|5jYJdB-M2gA0Jp**KX2VDlYqzg zNX0lv3?|4=I)HMoVEF=+Bw0wLDf-SniUI&641Dc({jp(I0Ls{LgHc!))+5}DQGf7m z^_wmu%rRQU4QeNV`7V&{2wiaI2Mu%@#`ApX*O--$t)$*7&iGkQJ$ zre#;0*k?5jES&U-bDZ8Av@S*k?t~f1JPI0YHzUJ>?OMaENVZirAiLt`N}mm?HuL%w z{EW=9hWu|mWkaoI8uP}-32^+{_r&Ei1uQf>EUEn3W$);xnIlv9LFuF>`17;2-{+-f zvSgZFm3kd)#RGfV3+UK5lHlrS2ZEd+#eA)~Uv}nUuwGZqxh{<-8R`@Y?JcsSLrWxr zKAkyTc2yGx;qLa`0XFljp*-!WW8e0}swR0A?SB{?e&qtu`1!H=fwTy4RK7t2z%g?q zN7Mw{i$}vt1)vkLJ%4~ykpqCLYLj9@Z5=*qcOPOfGqqV^Gj+5Mg6xh@!Q$Z9Hmp)XOWTZ@O&6JV+y3jPchJa^yuZ-<7*4_Q3;Q_pFE^zyv%2O zLTCI>&mQZX3A{cNbUPCYITKDk3$$GjZ9Eeja8_Gb65l?PygHN8VLL!Qhcchb2)TH) z7{f0do{$>jaydVhGFG5*R^(pl*K$_YF;;o%{OsvcP^{4s>V+EVg*x+vhR}uPbDrhR za|InEA-BaBLdN4!XFuwVzkfIzEjJ$daP~Fh%=qeEEVha6?{}B&tES)2o%t>mo?bq| z8*Ujf6Rmji)$5hU)@tI&>f%xp#+F&X%cii;8h)m$$xGMfOjG;DRZ-Qo7|&-#dCREO zS9#Ryz2ckha2gfZt08=!%U^x#pNK-)PISYsfsgwSgyk)K1u@@0HRbDnm7aG=+5kkU z0-;m^m2_VE7ru-Ta_cj6_b7CWqETW%3|ftKr-0nV`(A^pfW`u^{ij!>Xhxj4-C3-a zT|>+Zy#OekH|f*wGnlR3CRgsHe+z&_IcCZP2#M1sf2(z|w2DqP<3Oh9#Nx*noQaL< zI>2wk56C8aYw0?iadn&i^4!}RNF)6d?&XO1hq|J~bI4Y$X8uLO^Gj|EhMol!L{MFY zMFp>6(4L@pFk84HCxR& z`%I-03iWS?pMER!(J5e#UNFb?a|kp5L=2DRK}8QlWAp1Ro;ju&PGtKXrT%6;3ChR$ zDg|mCjD{=7PHk^r_DbT8w)kcZ7$fR%H#>;c;LJBFHunR2jV$xFFEGw zY^H1M_b)jYe1)|li<^GFloAvrKcRB3$uVqkePo=tLf4N+!%fM8Vwd<82SW>U>2%d^ zOG;3f2~z;s>{XYrXFxxv{U5|eo#d_CNpsz)n%6%n{vb9wZcj}rq&$lTiTJZF)e^mO; zUDyUxAD$f_|3(lS=L(SDO+Q)bk&>2%$SDbRsU;|(gquSAyVSGC@$ew(M6RqB>H)~f zF9>ASpmKi3@3)H|qhjNVJINBWu`oa$h>i3%a6{U9nrMmJYx-E|Qok$;X#qoEaI9(4 zINp;Axx6?Q+Gg6gf&4-`bt>EsL70*X1EeV?@+O-~nsQayvDPKcOtGTWee@5+M&=A> zRbUq$fkvS`4o@O1JJ@2acso!*+>cJ_nLKM^lFYkAR0;(Y-rYRUUHslp?29?FSmqNq ztVP*d;I8ObVIFKH#U*KJuYGbD`Y}ZoPQT-Z2nsI-vel=tmes)5$#C$Mt{@?S1n+_{ zJ1{M%bJ%HVp?IZA2x6mBvo%rrq)jVl<6^;8Czj-OC(>(*= zgCnV*;lGgHAH|2oCn;oMp(u0__SwOeBvt@&Znzs8oIN-{iaU{|6~uY_2&J<8ddO_s zs?!weR@QKu=j2R~@p_$l%Wexccn9fndvhWLOknZDXx|2p2k0(h<<(J=8)ZT{VtaYV zo}hz}kr2ej^Kl;VU&KcA&|W+}+xB-;R{Hk>Go}#|f(T-xx8R(0X}jROee1p8!kaG= zLW}R_y{{V7(*uQ;y({OQ6Zs&16+MqfKEi9(NSVUxQ9}7wOVP@bH(scysv=v7vY9m7 z8J=*Fo$Lrn(cS!yKB9ZYr5&RC<*jhhgX%AmVuuAUGewRf9gW3~+ke5uPP(w9#DDft z_^MtupoaApLD@kFkE=?rytg#v%DF9s+EHOY9UbE7PVKd^Z z5sHMyU(|*3wkm-74g!*8=_ZJ;3S<(e#nde7Ca$Rp;_{-!He=}_8?Oo$Y|94at4U*? zR)t93A#N^Z>7^yC4wVF15FjtaM-M?}9fT6r#0HBq z&^;<1e8LB>iHr7PV4!CmQq-u4PikXe^4&>Md0UgP_T{;{pdRtQdre}27R7cbol;5c zX<~&JIdx|eGpSRtg z(i%4?ZKRD!Pzp80jQWhm+#QNzqam8j!2fYed^@e1A(vnL2VLb`sBj@!v(=IP2Sf`n z{zBL{@6$(5Ij*7ju2o=|2!Gl}pyg{TzrgpGwb{6bc+XgRkkJ9AX>8TeT$|Qk6Hl_x z6p9e0jT-W;L|ql4S5q7e706mtyNYvy)VRr?==<5?&e9G&CJ)oKB; z($a8r8y3(AB_M#6$U+m(3ijnK+hlQOzZyse14~Bx*+o$nI+Q1c>^7Ua_YQytBUi#_ zI2j94uP=8niXiucz*O_)kaUETQ2Z?jd8+`T_pz$(fi-B9J1ZnwRxp%h1hG+jQ`yuX zT9H?q_c9K|C|*^n;{$-PYRMUyfrmNQs_@778tMw{!(HGa#T+BUOuX(xst6Nm!{e|OKmilN!mO@bIt&tJBR zTO+P*>Rargjx^&~C;NezGvD!3*oab)@~mk<63!bNz_Bs5J7Xg&$rqncw!z5X z?DnKUU;Yzz2a9s58CUr!Gg-I=yY2fg3#~QD0#lnj{Ej2$mr1GL)0-cc>KQOsLvYtQ zwnct4e{=2N&pa#JmN;wvPC1cXIJ01Bb0G_}Fj>i>LhoY3XBfjhqsgJ-6hR_a8(&QO zl+U01S;Y;@JKbmHmn7$&dP2)Yfuul*X8GQW+Lp-*AAvHndm5vpv#d+_!ybq6 zglW=p0f~2<2N(`S1?>&npvfZgdEk@PB6?FJ(`0)ku`RD7m~fed2-Z;XgSu! zaH4jqqLN!dH8&~Jr2z!coJ*q~i*6;ORlHeHhoUMmeo%@90I56kXx2A@vLPRe&(^Xw z&~{-cMBk30ei%B*_;nHFh%O?H9ia7EgkieR&4)vjA;Kx|zb0e~Q*snT_QFeCtV}fd z&L=m8x}ZuiTvqwc8II1ys!)H;AbT_*l9+-l86E%S^{Jn+kuThH-LEqx-q~7ZzAQ3; z!imW(tw_)5x7dKD4{9%YGH?ablbN$nj6I&2PtkcTB!|jz;1B!f0a%`(2D# zFoj`1y2Nz~?szHTalmJ|dW82}SolTa1P6`;APu>$a}s-=m(G%mV-_@0?;h>qOVbc;Q1r<`6rZ>e9+MpH)tftwK6B(oC zJX7tEoTq+^iJVNj)G)Xrfvrem_q zVRE2jcFke-p<@ZoVTq<=O+t_v>DUT#*edAQ8*PIQ#qVVbX@+?s9SX0 zmpR<+$>0@}F(#`J=gxq=S#Law<& zKJ>!Dxx&%(B1yR-ne?IsxuO;HVhy=s9rWV;x#HjGC0cSHFVRbGO&y1H3*1&VkWA$d> zGs;u&AXL=WRLC@E&d)2qhbX^|SFS*L+HcN8j6#T*W^oQu<20+UTfJ?hw$e5DjX zQ4yn__PA=vkO5(zn$NIdL%z`xoY8nI-}s2}B`zw~dHzeJ0B>DQRL|lV<5qU?5#!7i#&c zB+%BM$(pTzwz$B$YRjf~OG%f>o=eA!5X_ zzIOL`?Ow2DomFU+CQarAG&m}FpM&Blzx_^<+3S|jY^#%KLC0zY+a34yYxox8IDs-& zfy2zsxGb+uUqk)6d=V5}c#1SBQx|DUk*9t^0^BO1We2YeMuz=KX=2-5pCyQ^ z(0i>g2G=TCz9JC`V}s z#2t~wk+!i4gVtpQC%Zr~yevP#S+jznWL5d49>9WbC~1lx=o&!b1T#;Q2D@8@zU@*k z29m~F=VZpiiSvMXF5B1$;+Y?ikP=E>)^$=01BZ6i6#yyj06~~g%DgTjP#2Lo6n6qZ zyx`wJ-9=UeElHA(yX@ht+N(^0KIycvA_P*Vbm?dpq^1E$@nNJRwiqe9WpqpgRX~D3 z7VtS6ffHhUuysufAvh6+E4+`V#%3Cil1fBweFva0hdEvPk;iuR2{Kh`01LkX@X~?c zmLO6vN*7XbJ2^^6aDi_4Q}8ta!><5?a^EzmlQe5r%BhQj*Qg9Y3;AD2~Ds`MI64z|r|8sYGDhSCba zHWf-j2_!56ZfJCEsdABN9nDpsfYX75AmACFBmM?p+qL50+tCg=DhBvam&Cdk&5qRR zP-=&rAkmN1-6}P$ixeMtTTuC7ii`QDGv&CfgI*BQ;Rv zh7$LM3~HrM{yw~LDF?+jx|kf>I?D%&QB}#AUkWxns#%cP02r@p;CbxuppLS4`4$Ssw;NmXClxOv z3k2dM9FU*eEBU=4&Eh7F<;F{nFML(fRsf3wbb0qdNe)H`3*{dD?#Y#BBlqfcc?Kol z;3d&LA<1ylW<5ftWP-a;*0y!tD!Wy@Mn;oOyD-b@H$BR{`TEk8wH zjC}3m=llXX&VJO+6e52R8{KL-kc$LDYK3EJADf+Vd-97G){4sVi#!k;YeinyiXw=O zLi`ANqvZD4;{kq(F=+_|vC-Dj5VsGsQwyc3vzlU*${j00tCOAP*YDt!dHz^N=U65r z?z4EEd@jEZ`IFBYj}=;Lb&c!Dc{k-h)$vO)YA9GBTG@ql7!@nkRd4x~rd^ya^E6N_ zpskOe<5{W8+pD10tKkW#lh&)#2xu_ZYj6u_3e{`MW@8yL>Rkq4NtJ7gOY}W}OcL*45*Bc+dgc39t2etu z9uH3e(Q1!@3+Xx!Zm_8ov@MM$+hD*>JVEIPV7K{UEeJYnH#i&%I$kw6{uXpXZ*;;F zdPCayhDPWubK_fXA!ngRXDK0WT>MkD;8-pD zP&0F1J8ehr!=_R6nrXuKh<^Ze1X^3k6) zV-%pb2ToUAOJuB=@wZCUkBEbAM z3xm}NNB7V6dj>iGe`&uj`1(=UdGD|G`wZ4+vsESv32a8gb;Uml)pC{oXumJjt+iPk zt}mUgH0cSaQf?@ltni zC3R)Vq(oHFqqn(s`|s`dMVh6?Ut8+;r>o4qWIk*CTl>Aez6SFP1yUVqMEm{E^}&SS ziNWWZh1#2m%AZu*TQ2rz_LFQUcOPjq%=W+|Xr6b7TUexsJrVle(f;e|Wc@qGl~@Yj z&Gp&-^7H#0XE*?jWyKE#tbqme z#b5|SlGR$6goOWu7)!&>T7+y6cqEi(%4$7|s0551A$+-$8^bq#y&fw^!kQT^PF}nb zPlPtKk)S3&3y#;&wzlw6H7?#vGMtjLNHz%$GfaAwWL@y#WoGeKnrqz9)<>tQ6w7p% zsp5o>u3N>00nSIe+n-QYF?O;7JEmV}hjz1CSx<8tD9=EL4NCg`n)jja*zF44*a&58Ap0F z@X;XCKeykr&7+{;xObOUEx0PHRW0eWp`%PD*&a3T6zp@LytSh^YHjz&s?5cqEIn$! z-tu&OgwrH;{5fqHizf$r#}?6kFZIRmGqTV^Q7104zEd}mPWo{-oqXAwPId>5-CmLq z4!(Nu_nn_Z(K3;5GaxYsr(cGXI5vhK|1N&})v*B^F?#Y#wYJ}!Pkv)MJfC_c`1K-5P0AAuF;T(Zbp+eD+%?X)(#T@wTMqPc z*2VVla`AaX)D=9ziJqd5F?S++oaOBuzfv922k#@Pr30u?t?M!8O{~Xr2lHjsJc5L^ zuQsd0Qj03e^89`bUz*lqaxIBIPVlm09<1(o$f&%}-4zu%9z4R^4W=RF1)1+-M~QkR zP&@Ofg5v`DgFhjw>fkZTJyK9~*)hs0RgDXCY(J;6C+n*5RiID@8j^w+t~kNgsSy4S zqq6h8=M*D$Xt3MeHw<&Y;%_;i%y{ZIKiYGe3$>J{ds=#YBz!+=*G8!qS*m&<%1|WI zrWVj`EEJA^w;ICp6!jSq1O6~ykM!LD$KI-=@3<_M(Y48*CY$zZI z90(}dDWgQN9GM>FkfRgz3K)Z&jUj`N(3^TG*h&Lv5?_MKucRIsSHGF4T_RGxhVp?r z$=C7y1h=j^4l@X%_?>eZHh=Uhsunp~>dI#g3!)<722#f4nJ5hhKfS);^^KZezmv0i zf{$sUgB1G_&eboiJa?*2)oO8&#fX;b?xd$`XtATO*Qc4u72C~VPW}usKCLO4EV5VEBbv79$JL6@Hw|ku z0r2hxQaBV>eH52*_Bw>=H(*3BCn3>@0U2W;OlcthBo(g7%#Vr>lI~Rl0C@a>d3wrT z9*MkHcUC@3U^EHgF02#?h>da^Rk*V<0x^vT>ho0kZa2o4=K~9eX>*iT8)5G09eN-G z!+4G=lPm=vTR4;ZKr^sX@6n<)e`_`7>yilI?~~{3iNh}jDOsRKoCKPs*U#TTein~} z+wkYxOuCp7OQh1;=x(!--U7BIT`op-$CNnhZv~1*FoK=45~jOxEyNaYqD@8W5EpJE z3{_3G*jyPSjfjzwp!Wk7e6?gt?w7S$IOSGPmFLFOF6)Y(mD@>uK3P;q#)y$|` z%aD4V0Ql~V%4w;3UzxTVJ8>$ULX;QQ$gi6EgY50t9~;auVMTVY$YL9G&zBPBu{?!V zxHf)SJo30|UBRh*F@co1IXu<8Lx^CSm(G9Cnl3*Q2=m%jUcQ~XLLe6_eXhPN!*7LX zx2WhmzFW+fcbJv7+OxM*k*}bMxhsC9;sK!W;3l`x$F+M`1q<2bdf;3e0%rn(yi2%z z-dy*x$d5HidT{~oU@bgaq^%k%>*Oy(b^BkvsmF!@)EV4!w-F=K?Nm1CxCgb0YCgm# zkC^K|YpP*=KR|;rYL2#|q$B^WCJ8G@66i;#HnkG~sA}8f`*@?dn8HU%BTf)5a}5P} zO82F1tGrfzmrLvzO-nO1pWyc=sOgVPF&)4JR7Vm46aoMMAP|UzgoKQYjDmuKii(Pc zhK7!g4g!HNFfcGNF|n`^$R=zY92{I+Ts%BHe0+QY0s=xp!bguD5fKp)6BCn=kdTs+ zg27-iGBR>p!NI}F$;rjV#m&vl!^6YN%ge{d$Is9I`0--_0RcflK_MX_VPRnr5fM>Q zQ86(wadB}82?@|DJd%} ztEi}`Yw78~azb<6GgyL-5uK_~&VO_bj}B z{{JHyT!0TR!4ZGjBmXz```;ez->f2*{>|!t`$K+Rfg|*71wOh4|FI6A+=NeW!DqMO z^E>c`UHIZ2eCa>*SEji0{Zsq_{Y+-_3QtZDSmBjJYN1AsOce7WPkast@&(w5GNC=SqoX^ zcg?n4{?^`lb-eOtrr7p=9HD&N#?W~4Cf?3u==d6Vvh44ca*1|a+GDVU!mPg@y z#h~>l;RjID{LnRKROQUzL#Ak*7bl6tx)G-$xVw=+%*6UUL`~az^Mh_TGvfz6*WJxz z6Y@rjaML8~tyC*Gzh#v51E}d~1sMY(Q?%X=f6MiLJJah@(InFcjcq6ECs1i8JCq4C zBRgDhZzq?`L6|W$7Lh6DBk_js7Np~rSQlmmD{U9%B-z-cE}@RSzRTO*!#zZw~4vlE9q#la{6SZ$}*V z4;x>+!#ZkO3RgaAo=A&0Y8fv1a@5+>f_2>1GOT>uUOg9a+)=_L65|UvWk0FF5)@8R zIl?Kcs<{1$KF=P6+IG@gQZS%zg!h?_!k);DvczSg{OWrbAF(UghNZCVbeN+Nkty;F zaGZ@i<}R4)<8QtsH~9TB1Bv@_UtL=#e|m5VRCO}oZZEg;RC2i z<&B{M6g}S@0ct8NznrscJiJ7JnmFBL+3U|Wr2lRkJOl$K6si9^!2l5p{^wvo$IMO7 zANf>>Bqx)xp(gW*Z+f`!0-RX=l^f^K`i}!wQnAd(BA^> z0(@ZM_rSvzKDY=ULg+t&*28&!75;to;nY921|MJhHNFo2u>qgh_*)p5-?>}f`?bD* zvwd{Cdwjcpa&!3e`uOzv=h^jN!Jw$pSk!6xe-#Y;m35vkcP8_g4gdGS;B+FHEB~Ku zgYuMb`Qv}L4Xl2|w>Q@RgKZFaHSrg<58cwU@xeBD2nM=l#$A8d2F*1Vxwqv15e#@e z+ErTWc7GIU(%84Cf$*tCU;Tq^@ZSW3QMWSyU7)GxM-x1Wl!3j>S@4kNo1McdiSa*=%&Po9O<-n56^b#}4QOjZAE@8rfB7g*&b_U~Bbr&yLu=cT#c zuI6V3v+b#;N87OZXFUW1p$~{)0Kdq`+%GF@QQ9xx8VcX9$e0`6uT@#4#&ao3k%H6T+5I6Fq+YkQ5sS8tzmo_(hf!*;1A zxn7S!gO4zrjjA}Zx%_C;FsYkR`h|TlSu`7YQKIa4Sg)b)`-~NnwG4tHeyh)UIp-hr zRWO&UDb^o@sj3QT#OQOm8~nM$vHi{jd_@*%k!|DfYE|$esws;e5d9rQ!8EbDmKgCQ zM}|oo*LEGQmbD^;ZNt@~{)kO$btlsXqK3h{SQu+tG(fH8hl#@?mdDW<7$dFtn;!*= z9VE1L*gM~w>50{))0V}af*9V~e8zPz)sA(3BUI5vvUs`Rc6@)e62c9?-bi+Y-_$+R zp$hs!Z_|wruX2K_E(cluzQ5kC{0(PiUGDhA1o0mW?G#PN5B3GAAa1W7?EEIa)Tx}Z)azC8)Cla?D%(wC8yuZEyMP-V%!U;dMqwaU zxXEKl^3&Mod}(x8BC-Emi2(pbXb#AQcm$6S!Y3diBm$F=(UXv~5mE3HQArWg%7bZT z$sm&CG{O`#k0~MCR1h{Q2n#hG3xt6c!tk)AV`7tn%IfRuzkK=9)YR16+}y&#!t(X& z*H#Y?YsACG#>UnbAzM2;J9~SC>>V5sa&UBXbaMJrPH)~I^ycl`KlRqx+1bVAPr1B% z_ov+6JHg^@g0t9z{gble zv-Gozgo}&Bi;JwEXU)eyzaAVf?IY5+qr?59lij29ox`iG!(SVR_Zx?Bgay8S_%|V* z|0#sMeRK}LxPjl^A@txx-~76}x&3v0bNiolb$$DPONfL2n?wEkRm2zmPdnUPUH?s& zSJwz#TwWn`esTGy{(Sl85@P$;&j0zzAK&QjNBfr@{{1Rq=l^kszxF}w`B(5&sLJ|Z zc=mZi!AKe2Ana)GB{?_J37ks9TFILek5hQwHS!r4qAZwk`J(IeR(r zPo900hQM@txlzRCvp+rihe}KYF;=M+jTCpP8R6MK1mA~B3_BZMYJUI0L-zy`d|&?Q z*(ZlTS6sR~xqk5MAA;}irmxJ>-j^@X5tSIzpPv1S8WN!{#02l55(8Tntp@Ks0U5r3 zG}pTt`iE!FQec%5G7baNJ!AU=nfu_`(^T(FMhLC$tj9>Bv2MiT>rBCs|u67;BKNrT&4;b+SoiilOWO6Pa5W>^zRK zo{2!_B0PJK>B3Ksh)Q-4p8Z~tb;#|_PF~_eCFZCo!kCk0ity~Sg4t}Ir}^k@78Mmd zc=mK!C28b}at9nUn%c8pIJpMrDas&)1-6AS61Txoc zZ2bLU0|J?A?=b6sbJ(Gq@ zoElSa&z+7up61y3V${b`_7zcyIj0JL&a17FB1Ir`RnQK{N5|<75y;$uB9{RccFGF` zGS_}}LdCZ9V%j96oo4#QN9Ko0EULV~D5CVC5;LNlrTJoiwdg(|-v}Rhe|31Z90R4~ z9kI|vzg`Vx_DNo$Y%H%>i+#!^q8Ite@Mbb8tBKZ2&U3z&Ug0En}vB=F%A@}J-e@G?#*9rHC&l&Lm0+f6A?fJd!_0{q3 z*4z1|-)IWb4ydEvsEFVzP*8lC;RwTzT&cvpmd4OO@h{JTjPW3XZ?satv$HJFQw3Ih zkElQv6$C_cN01m1d|h9yuA38c)S`-nlgtVVaA_P^e2jXA{{a5(4c(F>4&Pwe2&+%PgLeklkUmxTl-616+d_M|B<}TfkYKm{8W;O zKh}V#pPyuSG+6XJ8$YT@?i1{Lxc-EQ+F+49e@kFASJ$VOgFNYNmR|Lw_%Ie>s7z4T zcv8!GK2KD!%4@dBh`IBEzS$l58;o&UfJ@3o@4CoX>Ii4_T9LxD5{=~Hi2~7!BH^eK zE!$kpsMETSt#_=v`&PaF1)BK+?j^bdN>l187iCtQ&tC9*Ogdg_q#F>I=tPiD)y!Q~ zSUxK?zG_LWm&q=d8DujIn0t|fG+yNXtW5W2c&4ANztWG`PWmaEPLKbK>Jf^1&ve9>?8YWSq<4c|A9(3=@I7OXF}FL!V=NSYSx`Utxy zwu)fYk-YpF7TU*YgSh>7OQx@}(|g|}Z2rZ134il&Uzsz)v(J?#&HIea^6tB}(MG0V zYxrS>$Mk-}alc@jG!?gKjHkhQL2~=`S4V|~eeG+s`X)4iO7Hs8Wh4qP{T)t)FDsVG z?JKuVSBa`XX6!f=Wu3OoG6%nXtW}Wabq_=^G$=@H5j(-H2k+=aS9W9#KgPZ5l#@H; zMcW$5ylyu)bw${==i=G8d$ka5jgPb8E9X<)PAR6+*yIsoIhMehTCSSjEKc2buh)ArpA?Qi8?2Jed}^&_ zWP9?P-x7N!YRT)I)7cRpxN{b%#3VHNQH-ZNOV0hsj*{}^SkRJFI#FJIu3QCsCzG=6L7FU0(=X_0NZLq9g--3Hd{{HKpq?`WC z;1X@Mfc*hK^RL;*hJxuI7cHy|41&fh1nLXD4jp1n>N|1lgkefMFX$h|`Y#AJwtqds z@)v7acc^XtoaUfP)4F(VywZA4b}ar~EcF5|P;vI`1nG#P^q%WV?K_piORTmP{NKx6 zpHok;_v2Q9q{3D7-`-q5GhA5xaMcapJv@2ocDHf-OE?V1dK!^nxTq-KJTg>x8XiHu z&iMIa#BHfPEo5Pt9^L($(buyagYVk_`}fcw#NFH!_q)TgqF-P~Zwuz#ucm8yx+%p-WooudiCSkUAJCEnLU5S&z4{J&Th;< z6KsE-mg@XE4*g`fVmk6dKfvgSO0{i+w$Ytxzx{-K`FcZWxp9~@^+fx7TMh!*()!-# zBs!*bb=v55YT)qvJ^KB+4vq8lys>>1&7t9I?%VlaaJ%NhvV#}Pzm_Rp+IAJ%@7=&p z*2Sc3h8*vX!am(>8!TIoefHWZh5Ozg{pR@9^SWcG{khM_a)Fu}s%>d#r3#^y-=!+| z=Q{&epV5Bprf$mObG<{K>r!txK!NW9-M}HpcdyW^eag3w)DJt97x~)Y>PoYx&Zln5 z=eW@iCk2Lm=9kT=`Y6=z&JDIu2xG9~p#;OIi+tx^!{9=0jMx6i&i<$@Ft$M-Se_p} zC_vPmn-6S=b`ASgXe~VBCZ-#BF&+^A&JPNDEj!~Se;s(}AGnJi$nG9Mrx2)?60}7Z zB&8cbY!$=_ey=Yayxtx3SOJFN9;B)eZ0F8tnc{B+_BREY+Utf)od(~KhR75JufGoQ znc?8Oe*V764E$8VYbFHln-bbf7^-*;lh+P?))X8r9M;wysyS#~QuCF4^wBMZyM~7L)z(LH{p<%b~0cQ%)zujXk z31cS&Vgs~d??YqpMVK&m-{lEMT@uHEhZrBdcV4rK+xZX&31g(Vas0ItH%lDPa>GDR z=E67>#d;I3R0EI4ZjKfKB?#`)^I^E*48pGupLOy`O-v(8+v!U6w@!^tHONU#TY;u|3Z@h`8hD3Y$7F_Zm* z5`mQ%AIIR$8BM$yidU{O?isVGdJB4)4XYWNIvID&nU$c3t(#1n59ycN0Ta9LR#}l| zW;0KkKNZ3s45GAyz z1--25wzzk$3~#k`NGbnIN$EHJa-6ObC2*9<(NDEj2NScvTv0 zE>`X6*&y2YTrI6(bTD3ty@ubjF^jxWVZYH1t4W2usaUDW#U-sIth?eMPRAM&AdA7b!Yh}@GO7u{uux;&BF6b5uc*~w^v)AhIvCXli?R>T^9B!j9>e(_b z*1liTTDspBk=8EJ+`jO!(L<~)%AjrS%ZClIf{FRiboTOn&!ofsj>U+M52a;i?8z4& z^N(9wS0dU6ezo4)=KcQFK5g43BUXoc@cHUXTW{%SWXg6N!#s4#24Gnyia`~zT`s9z z`<__W+{ zId|@vd;hw7p4qcQ*hwbCgePn5_4)Sn?DbIL!U)M$3a9q)hWIh#C6&FYU>of|ZRw@3 z>J}Sq;osg6l?6nN=P&J3*6G(RHL*C&w!+glUhS7Et#Y)< za*pU$D(yBK?Erh04v5nA+nf&A>llAq&GM$}@g42^k~$d9H)y^3$HZrV4|!;>X;4uo z#qDVz=rB5RbHiNjMUA?8l{W>FqD7E=?qe)AneWg8cTtW48V->PvSLS02 ztG&FZBP0W3T|R@~QN~xKMg;1{(oP1WOUF;1M$hoZE>8PL=q6T&#)I-4_De^vN+-r6 z#=K?5h3+OUOM78Z)1FSpYf~mYS|_WIzIvww8|O#1rHnMwP5MnDdS@cKU`&(nPm}3R zQ}|9(rGcku+NSB&rWu~6neb;=_-EL3XE=OkxYA~L+GhCHW(1yRgxaRPDiM7*5kKV( z)hA7@KaIV&#qg^{G`fUW=ATp5om2On(@dMwZky9to6~!qGr*rW;-5Fsoj3EHw@90Z zIJY)y^LEek4)_a3^a$Ptvm;-o@b68g3TGj!>gD(`{1g$L_!on97ejp)zo#vRw=G7j zEk->r8t5Xrr9o_rcI-A6pSID_(g{C|xnIvqnfS}u{L8tz%lW>`h0pLtOiNuqW(Sj& z9-bBg=ogE0SL%IN8q-#q+g4in=VRoS%G(wiy(DpL8vw0{YQFI5itwtFuVn5d{@OH{ ze{J^PWbSg?+UnZc`afhY|N5@(`o8b_VcPm}+xn^RnwkN;hT@zz)M`wsd-ro|Uu4tq z>XK^NYDb#QH`EQ)w&g*kB@CO5KS(RkYqP$S8|t0Q6Z?oT0&~8Kn_X#}J&_Yt^ecn> zbLxtSr|O96LUY$^%eTHugSne;=~ujj=G36JCifB5gyy^qwkXphlhU>xo|^!&h^lh% z_u}xXa)=!Alb(^ApUQS*p8c!Oc2rPz&nR|P-CKK9+kv@duw8$e-E^j5qm}%(ZX6k35ShKeHV_YdAj}VDS0g zUKl=pk}r;@g@JQz=e;X`yf1KA@7FF7b$a~aoOT@dR{jFGe!ApmH5qkeq&K;t7Xn2% z#pwhixCzUzcqOn2D@X*R;BkTc?$kBmvWVd;Im`2iZoCCZpv>_3y1TYZZFkZm$a9zJqy0&z?Zh6-qJnC0*3SG`{&I*7P z*1!Go0?TA^gY@mjApfSh>&E)@rV-`#5^Tk}4Xd63q>sKOFT6$Uy4Bx@pfEs})<6Zq zTWG;stByO~P9V-9P(JMamEtx5>;CcOTv34(J3sU?6KzT6?M zfoNob6%{0(GhwSc?sD`WW1=tO{Ld3QF7d&Gpt>W_d^!oc;*(Fs6{^K!0R4So)O8}G z=A>Z4G~+Gh`^WhVpdVqtG9yOggh{i1dI=#g`Qv)2IDz31Xtr+r`h#vy)Q+BI=)W-@DSdnjzlctGp8FK;GNXqZ*qlv zoh5+j=pS}_guYZQ*2&H^eq(SNjy9VrtGPgic$)UD)qI(5fjs0Y=bnZN+l{|u?u5?* zc+c1CvbS4~!|4V|nM^8{O0C-EjS7Wa3KysTz&Q6kuu*&5M-cWl;?MMk^JeGooG14p zv&N1vLVd6gsKmG=?X1$x7m}Cvf~ZKlF$=@cSrb}QSh<6t62ZJr;4RN`L{q}Ri_D1E zCxl9DWfeA^4jM-(7*&k!y%dit4nu{IxnkJ*qbCCOtASPGxc0rj%b}l#9ZR;tdC{7B z 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 P8GdQVTMf|(?Pc5M%vj?y1?ZnrWQAd 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�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%0DAj}33LXcvyq>oO4 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�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≠W!8ZlL(m>A!zJ)0T;f~6g6eT)_#qj&JjI^f|Z>a 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 literal 0 HcmV?d00001 diff --git a/docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/optimistic-concurrency.png b/docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/optimistic-concurrency.png new file mode 100644 index 0000000000000000000000000000000000000000..85253594c846f221366a20897350a3d6305486b3 GIT binary patch literal 21478 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 literal 0 HcmV?d00001 From daa15f93eb7e129df4d311da5a9e930cae8863ec Mon Sep 17 00:00:00 2001 From: Engincan VESKE Date: Wed, 6 Apr 2022 11:48:50 +0300 Subject: [PATCH 118/143] Update POST.md --- .../POST.md | 57 +++++++++---------- 1 file changed, 27 insertions(+), 30 deletions(-) diff --git a/docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/POST.md b/docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/POST.md index 4a594669ec..396da20f86 100644 --- a/docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/POST.md +++ b/docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/POST.md @@ -6,7 +6,7 @@ In this article, we'll create a basic application to demonstrate how "Concurrenc For this article, we can create a simple BookStore application and perform CRUD operations. -> To keep the article simple and shor, we'll only add **Book** entity and ignore the **Author** part. +> To keep the article simple and short, we'll only add the **Book** entity and ignore the **Author** part. We can create a new startup template with EF Core as a database provider and MVC for the UI Framework. @@ -24,7 +24,7 @@ After running the above command, our project boilerplate will be downloaded. The Let's start with defining our entities. -### Creating Entitites +### Creating Entities Create a `Book.cs` (/Books/Book.cs) class in the `.Domain` layer: @@ -45,9 +45,9 @@ public class Book : AuditedAggregateRoot * [Aggregate Root](https://docs.abp.io/en/abp/5.2/Entities#aggregateroot-class) entity classes already implement the `IHasConcurrencyStamp` interface, so if we inherit our entities from one of these entity classes we don't need to manually implement the `IHasConcurrencyStamp` interface. -* And we've derieved the `Book` entity from `AuditedAggregateRoot` here, so we don't need to implement `IHasConcurrencyStamp` interface because `AuditedAggregateRoot` class is already implement the `IHasConcurrencyStamp` interface. +* And we've derived the `Book` entity from `AuditedAggregateRoot` here, so we don't need to implement the `IHasConcurrencyStamp` interface because `AuditedAggregateRoot` class is already implemented the `IHasConcurrencyStamp` interface. -> You can read more details from the [Concurreny Check](https://docs.abp.io/en/abp/5.2/Concurrency-Check) documentation. +> You can read more details from the [Concurrency Check](https://docs.abp.io/en/abp/5.2/Concurrency-Check) documentation. Then, create a `BookType` (/Books/BookType.cs) enum in the `.Domain.Shared` layer: @@ -119,15 +119,15 @@ To do this, open your command line terminal in the directory of the `EntityFrame dotnet ef migrations add Added_Books ``` -After this command a new migration will be generated and then we can run the `*.DbMigrator` project to apply the last changes to the database such as creating a new table named `Books` according to the lastly created migration. +After this command, a new migration will be generated and then we can run the `*.DbMigrator` project to apply the last changes to the database such as creating a new table named `Books` according to the lastly created migration. ### Defining DTOs and Application Service Interfaces We can start to define the use cases of the application. -Create the DTO classes (under **Books** folder) in the `Application.Contracts` project: +Create the DTO classes (under the **Books** folder) in the `Application.Contracts` project: -* **BookDto.cs** +**BookDto.cs** ```csharp public class BookDto : AuditedEntityDto, IHasConcurrencyStamp @@ -144,11 +144,11 @@ public class BookDto : AuditedEntityDto, IHasConcurrencyStamp } ``` -* `AuditedEntityDto` class is not implemented from the `IHasConcurrencyStamp` interface, so for **BookDto** class we need to implement the `IHasConcurrencyStamp`. +* `AuditedEntityDto` class is not implemented from the `IHasConcurrencyStamp` interface, so for the **BookDto** class we need to implement the `IHasConcurrencyStamp`. * This is important, because we need to return books with their **ConcurrencyStamp** value. -* **CreateBookDto.cs** +**CreateBookDto.cs** ```csharp public class CreateBookDto @@ -169,7 +169,7 @@ public class CreateBookDto } ``` -* **UpdateBookDto.cs** +**UpdateBookDto.cs** ```csharp public class UpdateBookDto : IHasConcurrencyStamp @@ -192,13 +192,13 @@ public class UpdateBookDto : IHasConcurrencyStamp } ``` -* Here, we've also implemented the `IHasConcurrencyStamp` interface for the **UpdateBookDto** class. +* Here, we've implemented the `IHasConcurrencyStamp` interface for the **UpdateBookDto** class. * We will use this value while updating an existing book. ABP Framework will compare the current book's **ConcurrencyStamp** value with the provided one, if values are matched, this means everything is as it is supposed to be and will update the record. -* If values are mismatched, then it means record that we're trying to update is already updated by an other user and we need to get the latest changes to be able to make changes on it. +* If values are mismatched, then it means the record that we're trying to update is already updated by another user and we need to get the latest changes to be able to make changes on it. -* Also, in that case, `AbpDbConcurrencyException` will be thrown by the ABP Framework and we can either handle this exception manually or let the ABP Framework handle it behalf of use and shows a user-friendly error message as in the image below. +* Also, in that case, `AbpDbConcurrencyException` will be thrown by the ABP Framework and we can either handle this exception manually or let the ABP Framework handle it on behalf of use and shows a user-friendly error message as in the image below. ![](./optimistic-concurrency.png) @@ -243,13 +243,13 @@ public class BookAppService : } ``` -* He've used the `CrudAppService` base class. This class implements the all common CRUD operations and if we want to change a method, we can simply override the method and change it by our needs. +* We've used the `CrudAppService` base class. This class implements all common CRUD operations and if we want to change a method, we can simply override the method and change it to our needs. > Normally, you don't need to override the `UpdateAsync` method to do **Concurrency Check**. I wanted to override this method to show what we need to do for **Concurrency Check**. * We can look closer to the `UpdateAsync` method here, because as we've mentioned earlier we need to pass the provided **ConcurrencyStamp** value to be able to do **Concurrency Check/Control** to our entity while updating. We've used the `SetConcurrencyStampIfNotNull` extension method to set the **ConcurrencyStamp** value to our entity and update the record. -* In that point, if the given record already updated by any other user, **ConcurrencyStamp** mismatch will occur and `AbpDbConcurrencyException` will be thrown and thanks to **Concurrency Check** system of ABP, data-consistency will be provided and the current record won't be overrided. +* At that point, if the given record is already updated by any other user, a **ConcurrencyStamp** mismatch will occur and `AbpDbConcurrencyException` will be thrown thanks to **Concurrency Check** system of ABP, data-consistency will be provided and the current record won't be overridden. * And if the values are matched, the record will be updated successfully. @@ -268,7 +268,7 @@ public class BookStoreApplicationAutoMapperProfile : Profile ### User Interface -So far, we've applied the all neccessary steps for the **Concurrency Check** system, let's see it in the action. +So far, we've applied the all necessary steps for the **Concurrency Check** system, let's see it in the action. Create a razor page in the `.Web` layer named `Index` (**/Pages/Books/Index.cshtml**), open this file and replace the content with the following code block: @@ -305,7 +305,7 @@ Create a razor page in the `.Web` layer named `Index` (**/Pages/Books/Index.csht * We've defined a table and "New Book" button inside a card element here, we'll fill the table with our book records in the next step by using the **Datatables** library. -Create a `Index.js` (**/Pages/Books/Index.js**) file and add the following code block: +Create an `Index.js` (**/Pages/Books/Index.js**) file and add the following code block: ```js $(function () { @@ -398,7 +398,7 @@ $(function () { First, create **CreateModal** razor page and update the **CreateModal.cshtml** and **CreateModal.cshtml.cs** files as below: -* **CreateModal.cshtml** +**CreateModal.cshtml** ```html @page @@ -455,11 +455,11 @@ public class CreateModalModel : BookStorePageModel } ``` -* In this file, we simply define **CreateBookDto** as bind property and we'll use this classes' properties in the form. Thanks to the `abp-dynamic-form` tag-helper we don't need to define all of this form elements one by one, it will generate behalf of us. +* In this file, we simply define **CreateBookDto** as a bind property and we'll use this classes' properties in the form. Thanks to the `abp-dynamic-form` tag-helper we don't need to define all of these form elements one by one, it will generate behalf of us. We can create **EditModal** razor page and update the **EditModal.cshtml** and **EditModal.cshtml.cs** files as below: -* **EditModal.cshtml** +**EditModal.cshtml** ```html @page @@ -485,13 +485,13 @@ We can create **EditModal** razor page and update the **EditModal.cshtml** and * ``` -* Here, we didn't use the `abp-dynamic-form` tag-helper and add all neccessary form elements to our form one by one. +* Here, we didn't use the `abp-dynamic-form` tag-helper and added all necessary form elements to our form one by one. -* As you may notice, we've set input type as **hidden** for the **ConcurrencyStamp** input, because end-user should not see this value. +* As you may notice, we've set the input type as **hidden** for the **ConcurrencyStamp** input, because the end-user should not see this value. -> Instead of doing it like that, we could create a view model class and use the `[HiddenInput]` data attribute for the **ConcurrencyStamp** property and use the `abp-dynamic-form` tag-helper. But to simplify the article I didn't want to do that, if you want you can create a view model and define the neccessary data attributes for properties. +> Instead of doing it like that, we could create a view model class and use the `[HiddenInput]` data attribute for the **ConcurrencyStamp** property and use the `abp-dynamic-form` tag-helper. But to simplify the article I didn't want to do that, if you want you can create a view model and define the necessary data attributes for properties. -* **EditModal.cshtml.cs** +**EditModal.cshtml.cs** ```csharp public class EditModalModel : BookStorePageModel @@ -524,7 +524,7 @@ public class EditModalModel : BookStorePageModel } ``` -Lastly, we can define the neccessary mapping configurations and run the application to see results. +Lastly, we can define the necessary mapping configurations and run the application to see the result. Open the `BookStoreWebAutoMapperProfile.cs` and update the content as below: @@ -538,7 +538,7 @@ public class BookStoreWebAutoMapperProfile : Profile } ``` -Then we can run the application, navigates to **/Books** endpoint and see the result. +Then we can run the application, navigates to the **/Books** endpoint and see the result. ![](concurrency-mismatch.gif) @@ -546,7 +546,4 @@ Then we can run the application, navigates to **/Books** endpoint and see the re * After the first user updated the record, the second user tries to update the same record without getting the last state of the record. And therefore `AbpDbConcurrencyException` is thrown because **ConcurrencyStamp** values are different from each other. -* The second user should close and re-open the model to get the last state of the record and then he/she can make changes to the current record. - - -Thanks for reading the article. \ No newline at end of file +* The second user should close and re-open the model to get the last state of the record and then he/she can make changes to the current record. \ No newline at end of file From 6f3ea6dd19a495b86520b74bdb6383032a91a998 Mon Sep 17 00:00:00 2001 From: Hamza Albreem <94292623+braim23@users.noreply.github.com> Date: Wed, 6 Apr 2022 12:46:26 +0300 Subject: [PATCH 119/143] Quick Grammar Fixes --- .../POST.md | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/POST.md b/docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/POST.md index 396da20f86..0cd9687374 100644 --- a/docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/POST.md +++ b/docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/POST.md @@ -18,7 +18,7 @@ We can create a new startup template by using the [ABP CLI](https://docs.abp.io/ abp new Acme.BookStore -t app -csf ``` -After running the above command, our project boilerplate will be downloaded. Then we can open the solution and start to the development. +After running the above command, our project boilerplate will be downloaded. Then we can open the solution and start the development. ## Starting the Development @@ -43,9 +43,9 @@ public class Book : AuditedAggregateRoot * To enable **Concurrency Check** for our entities, our entities should implement the `IHasConcurrencyStamp` interface, directly or indirectly. -* [Aggregate Root](https://docs.abp.io/en/abp/5.2/Entities#aggregateroot-class) entity classes already implement the `IHasConcurrencyStamp` interface, so if we inherit our entities from one of these entity classes we don't need to manually implement the `IHasConcurrencyStamp` interface. +* [Aggregate Root](https://docs.abp.io/en/abp/5.2/Entities#aggregateroot-class) entity classes already implement the `IHasConcurrencyStamp` interface, so if we inherit our entities from one of these entity classes then we won't need to manually implement the `IHasConcurrencyStamp` interface. -* And we've derived the `Book` entity from `AuditedAggregateRoot` here, so we don't need to implement the `IHasConcurrencyStamp` interface because `AuditedAggregateRoot` class is already implemented the `IHasConcurrencyStamp` interface. +* And we've derived the `Book` entity from `AuditedAggregateRoot` here, so we don't need to implement the `IHasConcurrencyStamp` interface because `AuditedAggregateRoot` class already implemented the `IHasConcurrencyStamp` interface. > You can read more details from the [Concurrency Check](https://docs.abp.io/en/abp/5.2/Concurrency-Check) documentation. @@ -119,7 +119,7 @@ To do this, open your command line terminal in the directory of the `EntityFrame dotnet ef migrations add Added_Books ``` -After this command, a new migration will be generated and then we can run the `*.DbMigrator` project to apply the last changes to the database such as creating a new table named `Books` according to the lastly created migration. +After this command, a new migration will be generated and then we can run the `*.DbMigrator` project to apply the last changes to the database such as creating a new table named `Books` according to the last created migration. ### Defining DTOs and Application Service Interfaces @@ -144,7 +144,7 @@ public class BookDto : AuditedEntityDto, IHasConcurrencyStamp } ``` -* `AuditedEntityDto` class is not implemented from the `IHasConcurrencyStamp` interface, so for the **BookDto** class we need to implement the `IHasConcurrencyStamp`. +* The `AuditedEntityDto` class is not implemented from the `IHasConcurrencyStamp` interface, so for the **BookDto** class we need to implement the `IHasConcurrencyStamp`. * This is important, because we need to return books with their **ConcurrencyStamp** value. @@ -198,7 +198,7 @@ public class UpdateBookDto : IHasConcurrencyStamp * If values are mismatched, then it means the record that we're trying to update is already updated by another user and we need to get the latest changes to be able to make changes on it. -* Also, in that case, `AbpDbConcurrencyException` will be thrown by the ABP Framework and we can either handle this exception manually or let the ABP Framework handle it on behalf of use and shows a user-friendly error message as in the image below. +* Also, in that case, `AbpDbConcurrencyException` will be thrown by the ABP Framework and we can either handle this exception manually or let the ABP Framework handle it on behalf of us and show a user-friendly error message as in the image below. ![](./optimistic-concurrency.png) @@ -210,7 +210,7 @@ public interface IBookAppService : { } ``` -* We've implemented the `ICrudAppService` here, because we just need to perform CRUD operations and this interface help us to define common CRUD operation methods. +* We've implemented the `ICrudAppService` here, because we just need to perform CRUD operations and this interface helps us define common CRUD operation methods. ### Application Service Implementations @@ -249,7 +249,7 @@ public class BookAppService : * We can look closer to the `UpdateAsync` method here, because as we've mentioned earlier we need to pass the provided **ConcurrencyStamp** value to be able to do **Concurrency Check/Control** to our entity while updating. We've used the `SetConcurrencyStampIfNotNull` extension method to set the **ConcurrencyStamp** value to our entity and update the record. -* At that point, if the given record is already updated by any other user, a **ConcurrencyStamp** mismatch will occur and `AbpDbConcurrencyException` will be thrown thanks to **Concurrency Check** system of ABP, data-consistency will be provided and the current record won't be overridden. +* At that point, if the given record is already updated by any other user, a **ConcurrencyStamp** mismatch will occur and `AbpDbConcurrencyException` will be thrown thanks to the **Concurrency Check** system of ABP, data-consistency will be provided and the current record won't be overridden. * And if the values are matched, the record will be updated successfully. @@ -268,7 +268,7 @@ public class BookStoreApplicationAutoMapperProfile : Profile ### User Interface -So far, we've applied the all necessary steps for the **Concurrency Check** system, let's see it in the action. +So far, we've applied the all necessary steps for the **Concurrency Check** system, let's see it in action. Create a razor page in the `.Web` layer named `Index` (**/Pages/Books/Index.cshtml**), open this file and replace the content with the following code block: @@ -396,7 +396,7 @@ $(function () { * Also defined **create** and **update** modals by using [ABP Modal Manager](https://docs.abp.io/en/abp/latest/UI/AspNetCore/Modals#modalmanager-reference), but we didn't create them yet, so let's create the modals. -First, create **CreateModal** razor page and update the **CreateModal.cshtml** and **CreateModal.cshtml.cs** files as below: +First, create a **CreateModal** razor page and update the **CreateModal.cshtml** and **CreateModal.cshtml.cs** files as below: **CreateModal.cshtml** @@ -419,7 +419,7 @@ First, create **CreateModal** razor page and update the **CreateModal.cshtml** a ``` -* We've used `abp-dynamic-form` tag-helper and pass it a `Book` model, this tag helper will simply create form contents (inputs, select boxes etc.) behalf of us. +* We've used `abp-dynamic-form` tag-helper and passed it a `Book` model, this tag helper will simply create form contents (inputs, select boxes etc.) on behalf of us. * **CreateModal.cshtml.cs** @@ -455,9 +455,9 @@ public class CreateModalModel : BookStorePageModel } ``` -* In this file, we simply define **CreateBookDto** as a bind property and we'll use this classes' properties in the form. Thanks to the `abp-dynamic-form` tag-helper we don't need to define all of these form elements one by one, it will generate behalf of us. +* In this file, we simply define **CreateBookDto** as a bind property and we'll use this class's properties in the form. Thanks to the `abp-dynamic-form` tag-helper we don't need to define all of these form elements one by one, it will generate on behalf of us. -We can create **EditModal** razor page and update the **EditModal.cshtml** and **EditModal.cshtml.cs** files as below: +We can create an **EditModal** razor page and update the **EditModal.cshtml** and **EditModal.cshtml.cs** files as below: **EditModal.cshtml** @@ -485,9 +485,9 @@ We can create **EditModal** razor page and update the **EditModal.cshtml** and * ``` -* Here, we didn't use the `abp-dynamic-form` tag-helper and added all necessary form elements to our form one by one. +* Here, we didn't use the `abp-dynamic-form` tag-helper and added all the necessary form elements to our form one by one. -* As you may notice, we've set the input type as **hidden** for the **ConcurrencyStamp** input, because the end-user should not see this value. +* As you may have noticed, we've set the input type as **hidden** for the **ConcurrencyStamp** input, because the end-user should not see this value. > Instead of doing it like that, we could create a view model class and use the `[HiddenInput]` data attribute for the **ConcurrencyStamp** property and use the `abp-dynamic-form` tag-helper. But to simplify the article I didn't want to do that, if you want you can create a view model and define the necessary data attributes for properties. @@ -526,7 +526,7 @@ public class EditModalModel : BookStorePageModel Lastly, we can define the necessary mapping configurations and run the application to see the result. -Open the `BookStoreWebAutoMapperProfile.cs` and update the content as below: +Open the `BookStoreWebAutoMapperProfile.cs` class and update the content as below: ```csharp public class BookStoreWebAutoMapperProfile : Profile @@ -538,7 +538,7 @@ public class BookStoreWebAutoMapperProfile : Profile } ``` -Then we can run the application, navigates to the **/Books** endpoint and see the result. +Then we can run the application, navigate to the **/Books** endpoint and see the result. ![](concurrency-mismatch.gif) @@ -546,4 +546,4 @@ Then we can run the application, navigates to the **/Books** endpoint and see th * After the first user updated the record, the second user tries to update the same record without getting the last state of the record. And therefore `AbpDbConcurrencyException` is thrown because **ConcurrencyStamp** values are different from each other. -* The second user should close and re-open the model to get the last state of the record and then he/she can make changes to the current record. \ No newline at end of file +* The second user should close and re-open the model to get the last state of the record and then they can make changes to the current record. From 1b87d7e7e210f70b00f01c5f5b14457f8a519503 Mon Sep 17 00:00:00 2001 From: Eric Johnson Date: Wed, 6 Apr 2022 15:05:36 -0500 Subject: [PATCH 120/143] Fixed project file encoding to retain existing encoding. --- .../SolutionFileModifier.cs | 29 +++++-- .../VoloNugetPackagesVersionUpdater.cs | 83 +++++++++++++------ 2 files changed, 80 insertions(+), 32 deletions(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionFileModifier.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionFileModifier.cs index 08d8fa182d..b78ec017c2 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionFileModifier.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionFileModifier.cs @@ -12,11 +12,24 @@ public class SolutionFileModifier : ITransientDependency { public async Task RemoveProjectFromSolutionFileAsync(string solutionFile, string projectName) { - var solutionFileContent = File.ReadAllText(solutionFile); - solutionFileContent.NormalizeLineEndings(); - var lines = solutionFileContent.Split(new[] { Environment.NewLine, "\n" }, StringSplitOptions.None); - File.WriteAllText(solutionFile, - RemoveProject(lines.ToList(), projectName).JoinAsString(Environment.NewLine)); + using (var fs = File.Open(solutionFile, FileMode.Open, FileAccess.ReadWrite, FileShare.None)) + using (var sr = new StreamReader(fs, Encoding.Default, true)) + { + var solutionFileContent = await sr.ReadToEndAsync(); + solutionFileContent.NormalizeLineEndings(); + + var lines = solutionFileContent.Split(new[] { Environment.NewLine, "\n" }, StringSplitOptions.None); + var updatedContent = RemoveProject(lines.ToList(), projectName).JoinAsString(Environment.NewLine); + + fs.Seek(0, SeekOrigin.Begin); + fs.SetLength(0); + + using (var sw = new StreamWriter(fs, sr.CurrentEncoding)) + { + sw.Write(updatedContent); + sw.Flush(); + } + } } public async Task AddModuleToSolutionFileAsync(ModuleWithMastersInfo module, string solutionFile) @@ -64,7 +77,7 @@ public class SolutionFileModifier : ITransientDependency lines.InsertAfter(l => l.Contains("GlobalSection") && l.Contains("NestedProjects"), newPreSolutionLine); - File.WriteAllText(solutionFile, string.Join(Environment.NewLine, lines)); + File.WriteAllText(solutionFile, string.Join(Environment.NewLine, lines), Encoding.UTF8); } private List RemoveProject(List solutionFileLines, string projectName) @@ -174,7 +187,7 @@ public class SolutionFileModifier : ITransientDependency lines.InsertAfter(l => l.Contains("GlobalSection") && l.Contains("NestedProjects"), newPreSolutionLine); } - File.WriteAllText(solutionFile, string.Join(Environment.NewLine, lines)); + File.WriteAllText(solutionFile, string.Join(Environment.NewLine, lines), Encoding.UTF8); if (module.MasterModuleInfos != null) { @@ -219,7 +232,7 @@ public class SolutionFileModifier : ITransientDependency .Split(" ").Last(); } - File.WriteAllText(solutionFile, string.Join(Environment.NewLine, lines)); + File.WriteAllText(solutionFile, string.Join(Environment.NewLine, lines), Encoding.UTF8); return folderId; } diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/VoloNugetPackagesVersionUpdater.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/VoloNugetPackagesVersionUpdater.cs index 900930d472..4e94c983a9 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/VoloNugetPackagesVersionUpdater.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/VoloNugetPackagesVersionUpdater.cs @@ -9,6 +9,7 @@ using Volo.Abp.Cli.NuGet; using Volo.Abp.DependencyInjection; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Abstractions; +using System.Text; namespace Volo.Abp.Cli.ProjectModification; @@ -41,17 +42,28 @@ public class VoloNugetPackagesVersionUpdater : ITransientDependency async Task UpdateAsync(string filePath) { - var fileContent = File.ReadAllText(filePath); - var updatedContent = await UpdateVoloPackagesAsync(fileContent, - includePreviews, - includeReleaseCandidates, - switchToStable, - latestVersionFromNuget, - latestReleaseCandidateVersionFromNuget, - latestVersionFromMyGet, - version); - - File.WriteAllText(filePath, updatedContent); + using (var fs = File.Open(filePath, FileMode.Open, FileAccess.ReadWrite, FileShare.None)) + using (var sr = new StreamReader(fs, Encoding.Default, true)) + { + var fileContent = await sr.ReadToEndAsync(); + + var updatedContent = await UpdateVoloPackagesAsync(fileContent, + includePreviews, + includeReleaseCandidates, + switchToStable, + latestVersionFromNuget, + latestReleaseCandidateVersionFromNuget, + latestVersionFromMyGet, + version); + + fs.Seek(0, SeekOrigin.Begin); + fs.SetLength(0); + using (var sw = new StreamWriter(fs, sr.CurrentEncoding)) + { + sw.Write(updatedContent); + sw.Flush(); + } + } } Task.WaitAll(projectPaths.Select(UpdateAsync).ToArray()); @@ -70,27 +82,50 @@ public class VoloNugetPackagesVersionUpdater : ITransientDependency var latestReleaseCandidateVersionFromNuget = await _nuGetService.GetLatestVersionOrNullAsync("Volo.Abp.Core", includeReleaseCandidates: true); var latestVersionFromMyGet = await GetLatestVersionFromMyGet("Volo.Abp.Core"); - var fileContent = File.ReadAllText(projectPath); + using (var fs = File.Open(projectPath, FileMode.Open, FileAccess.ReadWrite, FileShare.None)) + using (var sr = new StreamReader(fs, Encoding.Default, true)) + { + var fileContent = await sr.ReadToEndAsync(); + + var updatedContent = await UpdateVoloPackagesAsync(fileContent, + includeNightlyPreviews, + includeReleaseCandidates, + switchToStable, + latestVersionFromNuget, + latestReleaseCandidateVersionFromNuget, + latestVersionFromMyGet, + version); - var updatedContent = await UpdateVoloPackagesAsync(fileContent, - includeNightlyPreviews, - includeReleaseCandidates, - switchToStable, - latestVersionFromNuget, - latestReleaseCandidateVersionFromNuget, - latestVersionFromMyGet, - version); + fs.Seek(0, SeekOrigin.Begin); + fs.SetLength(0); - File.WriteAllText(projectPath, updatedContent); + using (var sw = new StreamWriter(fs, sr.CurrentEncoding)) + { + sw.Write(updatedContent); + sw.Flush(); + } + } } } protected virtual async Task UpdateInternalAsync(string projectPath, bool includeNightlyPreviews = false, bool includeReleaseCandidates = false, bool switchToStable = false) { - var fileContent = File.ReadAllText(projectPath); - var updatedContent = await UpdateVoloPackagesAsync(fileContent, includeNightlyPreviews, includeReleaseCandidates, switchToStable); + using (var fs = File.Open(projectPath, FileMode.Open, FileAccess.ReadWrite, FileShare.None)) + using (var sr = new StreamReader(fs, Encoding.Default, true)) + { + var fileContent = await sr.ReadToEndAsync(); + + var updatedContent = await UpdateVoloPackagesAsync(fileContent, includeNightlyPreviews, includeReleaseCandidates, switchToStable); + + fs.Seek(0, SeekOrigin.Begin); + fs.SetLength(0); - File.WriteAllText(projectPath, updatedContent); + using (var sw = new StreamWriter(fs, sr.CurrentEncoding)) + { + sw.Write(updatedContent); + sw.Flush(); + } + } } protected virtual async Task SpecifiedVersionExists(string version, string packageId) From 05ffa67d047197b6799c3dfe98022ae891da379b Mon Sep 17 00:00:00 2001 From: rqx110 Date: Thu, 7 Apr 2022 08:41:28 +0800 Subject: [PATCH 121/143] move RightAligned parameter to BarDropdown --- .../Themes/Basic/LanguageSwitch.razor | 4 ++-- .../Themes/Basic/LanguageSwitch.razor | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.BasicTheme/Themes/Basic/LanguageSwitch.razor b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.BasicTheme/Themes/Basic/LanguageSwitch.razor index 75b64e05b7..afa3521d01 100644 --- a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.BasicTheme/Themes/Basic/LanguageSwitch.razor +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.BasicTheme/Themes/Basic/LanguageSwitch.razor @@ -7,11 +7,11 @@ @inject IAbpRequestLocalizationOptionsProvider RequestLocalizationOptionsProvider @if (_otherLanguages != null && _otherLanguages.Any()) { - + @_currentLanguage.DisplayName - + @foreach (var language in _otherLanguages) { @language.DisplayName diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LanguageSwitch.razor b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LanguageSwitch.razor index 6f89696075..4b41add531 100644 --- a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LanguageSwitch.razor +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LanguageSwitch.razor @@ -5,11 +5,11 @@ @inject IJSRuntime JsRuntime @if (_otherLanguages != null && _otherLanguages.Any()) { - + @_currentLanguage.DisplayName - + @foreach (var language in _otherLanguages) { @language.DisplayName From 3610732a919f07778d6b0e65d810c1ff6c46db38 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Thu, 7 Apr 2022 21:00:47 +0800 Subject: [PATCH 122/143] Enhance ABP CLI --- .../Volo/Abp/Cli/Commands/NewCommand.cs | 14 ++++++-------- .../Cli/Commands/ProjectCreationCommandBase.cs | 15 ++++++++++++--- .../Cli/ProjectModification/NpmPackagesUpdater.cs | 13 ++++++------- .../ProjectModification/ProjectNpmPackageAdder.cs | 12 ++++++------ 4 files changed, 30 insertions(+), 24 deletions(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs index c244abd719..420e64eb18 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs @@ -10,6 +10,7 @@ using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Abstractions; using Volo.Abp.Cli.Args; using Volo.Abp.Cli.Commands.Services; +using Volo.Abp.Cli.LIbs; using Volo.Abp.Cli.ProjectBuilding; using Volo.Abp.Cli.ProjectModification; using Volo.Abp.Cli.Utils; @@ -21,22 +22,19 @@ public class NewCommand : ProjectCreationCommandBase, IConsoleCommand, ITransien { public const string Name = "new"; - public ILogger Logger { get; set; } - protected TemplateProjectBuilder TemplateProjectBuilder { get; } public ITemplateInfoProvider TemplateInfoProvider { get; } - + public NewCommand(TemplateProjectBuilder templateProjectBuilder , ITemplateInfoProvider templateInfoProvider, ConnectionStringProvider connectionStringProvider, SolutionPackageVersionFinder solutionPackageVersionFinder, - ICmdHelper cmdHelper) - : base(connectionStringProvider, solutionPackageVersionFinder, cmdHelper) + ICmdHelper cmdHelper, + IInstallLibsService installLibsService) + : base(connectionStringProvider, solutionPackageVersionFinder, cmdHelper, installLibsService) { TemplateProjectBuilder = templateProjectBuilder; TemplateInfoProvider = templateInfoProvider; - - Logger = NullLogger.Instance; } public async Task ExecuteAsync(CommandLineArgs commandLineArgs) @@ -79,7 +77,7 @@ public class NewCommand : ProjectCreationCommandBase, IConsoleCommand, ITransien Logger.LogInformation($"'{projectName}' has been successfully created to '{projectArgs.OutputFolder}'"); RunGraphBuildForMicroserviceServiceTemplate(projectArgs); - RunInstallLibsForWebTemplate(projectArgs); + await RunInstallLibsForWebTemplateAsync(projectArgs); OpenRelatedWebPage(projectArgs, template, isTiered, commandLineArgs); } diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs index 860147c584..368f022bda 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs @@ -1,6 +1,7 @@ using System; using System.IO; using System.Linq; +using System.Threading.Tasks; using ICSharpCode.SharpZipLib.Core; using ICSharpCode.SharpZipLib.Zip; using Microsoft.Extensions.Logging; @@ -8,6 +9,7 @@ using Microsoft.Extensions.Logging.Abstractions; using Volo.Abp.Cli.ProjectModification; using Volo.Abp.Cli.Args; using Volo.Abp.Cli.Commands.Services; +using Volo.Abp.Cli.LIbs; using Volo.Abp.Cli.ProjectBuilding; using Volo.Abp.Cli.ProjectBuilding.Building; using Volo.Abp.Cli.ProjectBuilding.Templates.App; @@ -22,13 +24,19 @@ public abstract class ProjectCreationCommandBase public ConnectionStringProvider ConnectionStringProvider { get; } public SolutionPackageVersionFinder SolutionPackageVersionFinder { get; } public ICmdHelper CmdHelper { get; } + public IInstallLibsService InstallLibsService { get; } public ILogger Logger { get; set; } - public ProjectCreationCommandBase(ConnectionStringProvider connectionStringProvider, SolutionPackageVersionFinder solutionPackageVersionFinder, ICmdHelper cmdHelper) + public ProjectCreationCommandBase( + ConnectionStringProvider connectionStringProvider, + SolutionPackageVersionFinder solutionPackageVersionFinder, + ICmdHelper cmdHelper, + IInstallLibsService installLibsService) { ConnectionStringProvider = connectionStringProvider; SolutionPackageVersionFinder = solutionPackageVersionFinder; CmdHelper = cmdHelper; + InstallLibsService = installLibsService; Logger = NullLogger.Instance; } @@ -313,14 +321,15 @@ public abstract class ProjectCreationCommandBase } } - protected virtual void RunInstallLibsForWebTemplate(ProjectBuildArgs projectArgs) + protected async Task RunInstallLibsForWebTemplateAsync(ProjectBuildArgs projectArgs) { if (AppTemplateBase.IsAppTemplate(projectArgs.TemplateName) || ModuleTemplateBase.IsModuleTemplate(projectArgs.TemplateName) || AppNoLayersTemplateBase.IsAppNoLayersTemplate(projectArgs.TemplateName) || MicroserviceServiceTemplateBase.IsMicroserviceTemplate(projectArgs.TemplateName)) { - CmdHelper.RunCmd("abp install-libs", projectArgs.OutputFolder); + Logger.LogInformation("Installing client-side packages..."); + await InstallLibsService.InstallLibsAsync(projectArgs.OutputFolder); } } diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NpmPackagesUpdater.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NpmPackagesUpdater.cs index 2ade6dbd77..64517b1900 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NpmPackagesUpdater.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NpmPackagesUpdater.cs @@ -14,6 +14,7 @@ using NuGet.Versioning; using Volo.Abp.Cli.Args; using Volo.Abp.Cli.Commands; using Volo.Abp.Cli.Http; +using Volo.Abp.Cli.LIbs; using Volo.Abp.Cli.Utils; using Volo.Abp.DependencyInjection; using Volo.Abp.IO; @@ -25,7 +26,7 @@ public class NpmPackagesUpdater : ITransientDependency { public ILogger Logger { get; set; } protected ICancellationTokenProvider CancellationTokenProvider { get; } - public InstallLibsCommand InstallLibsCommand { get; } + public IInstallLibsService InstallLibsService { get; } public ICmdHelper CmdHelper { get; } private readonly PackageJsonFileFinder _packageJsonFileFinder; @@ -38,13 +39,13 @@ public class NpmPackagesUpdater : ITransientDependency NpmGlobalPackagesChecker npmGlobalPackagesChecker, ICancellationTokenProvider cancellationTokenProvider, CliHttpClientFactory cliHttpClientFactory, - InstallLibsCommand ınstallLibsCommand, + IInstallLibsService installLibsService, ICmdHelper cmdHelper) { _packageJsonFileFinder = packageJsonFileFinder; _npmGlobalPackagesChecker = npmGlobalPackagesChecker; CancellationTokenProvider = cancellationTokenProvider; - InstallLibsCommand = ınstallLibsCommand; + InstallLibsService = installLibsService; CmdHelper = cmdHelper; _cliHttpClientFactory = cliHttpClientFactory; Logger = NullLogger.Instance; @@ -306,10 +307,8 @@ public class NpmPackagesUpdater : ITransientDependency protected virtual async Task RunInstallLibsAsync(string fileDirectory) { - var args = new CommandLineArgs("install-libs"); - args.Options.Add(InstallLibsCommand.Options.WorkingDirectory.Short, fileDirectory); - - await InstallLibsCommand.ExecuteAsync(args); + Logger.LogInformation("Installing client-side packages..."); + await InstallLibsService.InstallLibsAsync(fileDirectory); } protected virtual void RunYarn(string fileDirectory) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectNpmPackageAdder.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectNpmPackageAdder.cs index 828b143192..36f33e1f6e 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectNpmPackageAdder.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectNpmPackageAdder.cs @@ -12,6 +12,7 @@ using Volo.Abp.Cli.Args; using Volo.Abp.Cli.Commands; using Volo.Abp.Cli.Commands.Services; using Volo.Abp.Cli.Http; +using Volo.Abp.Cli.LIbs; using Volo.Abp.Cli.ProjectBuilding; using Volo.Abp.Cli.Utils; using Volo.Abp.DependencyInjection; @@ -26,7 +27,7 @@ public class ProjectNpmPackageAdder : ITransientDependency public SourceCodeDownloadService SourceCodeDownloadService { get; } public AngularSourceCodeAdder AngularSourceCodeAdder { get; } public IRemoteServiceExceptionHandler RemoteServiceExceptionHandler { get; } - public InstallLibsCommand InstallLibsCommand { get; } + public IInstallLibsService InstallLibsService { get; } public ICmdHelper CmdHelper { get; } private readonly CliHttpClientFactory _cliHttpClientFactory; public ILogger Logger { get; set; } @@ -36,14 +37,14 @@ public class ProjectNpmPackageAdder : ITransientDependency SourceCodeDownloadService sourceCodeDownloadService, AngularSourceCodeAdder angularSourceCodeAdder, IRemoteServiceExceptionHandler remoteServiceExceptionHandler, - InstallLibsCommand ınstallLibsCommand, + IInstallLibsService installLibsService, ICmdHelper cmdHelper) { JsonSerializer = jsonSerializer; SourceCodeDownloadService = sourceCodeDownloadService; AngularSourceCodeAdder = angularSourceCodeAdder; RemoteServiceExceptionHandler = remoteServiceExceptionHandler; - InstallLibsCommand = ınstallLibsCommand; + InstallLibsService = installLibsService; CmdHelper = cmdHelper; _cliHttpClientFactory = cliHttpClientFactory; Logger = NullLogger.Instance; @@ -142,9 +143,8 @@ public class ProjectNpmPackageAdder : ITransientDependency return; } - await InstallLibsCommand.ExecuteAsync( - new CommandLineArgs("install-libs") - ); + Logger.LogInformation("Installing client-side packages..."); + await InstallLibsService.InstallLibsAsync(directory); } } From 0bde8008d989857205c477f56fd679e897923289 Mon Sep 17 00:00:00 2001 From: Engincan VESKE Date: Fri, 8 Apr 2022 10:20:21 +0300 Subject: [PATCH 123/143] Add new localizations to base resource --- .../AbpIoLocalization/Base/Localization/Resources/en.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json index f772006632..53d37df13d 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json @@ -119,6 +119,8 @@ "Events": "Events", "Volo.AbpIo.Domain:080000": "There is already a purchase item named \"{Name}\"", "MasteringAbpFrameworkBook": "Book: Mastering ABP Framework", - "ABPIO-CommonPreferenceDefinition": "Get latest news about ABP Platform like new posts, events and more." + "ABPIO-CommonPreferenceDefinition": "Get latest news about ABP Platform like new posts, events and more.", + "BuiltOn": "Built-on", + "AbpFramework": "ABP Framework" } } From 4a1d542988452089c59b84192fc327435a7c5880 Mon Sep 17 00:00:00 2001 From: braim23 <94292623+braim23@users.noreply.github.com> Date: Fri, 8 Apr 2022 10:44:16 +0300 Subject: [PATCH 124/143] Added a small "the" before "latest news" --- .../AbpIoLocalization/Base/Localization/Resources/en.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json index 53d37df13d..5d6e081085 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json @@ -119,7 +119,7 @@ "Events": "Events", "Volo.AbpIo.Domain:080000": "There is already a purchase item named \"{Name}\"", "MasteringAbpFrameworkBook": "Book: Mastering ABP Framework", - "ABPIO-CommonPreferenceDefinition": "Get latest news about ABP Platform like new posts, events and more.", + "ABPIO-CommonPreferenceDefinition": "Get the latest news about ABP Platform like new posts, events and more.", "BuiltOn": "Built-on", "AbpFramework": "ABP Framework" } From c77ff1d0bfb2d6ebad00d496be1f504401ae1ce0 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Fri, 8 Apr 2022 17:07:49 +0800 Subject: [PATCH 125/143] Update generate-proxy UsageInfo --- .../Volo/Abp/Cli/Commands/ProxyCommandBase.cs | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProxyCommandBase.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProxyCommandBase.cs index 2ce5ba8209..22311bb986 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProxyCommandBase.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProxyCommandBase.cs @@ -83,15 +83,18 @@ public abstract class ProxyCommandBase : IConsoleCommand, ITransientDependenc sb.AppendLine("Options:"); sb.AppendLine(""); sb.AppendLine("-m|--module (default: 'app') The name of the backend module you wish to generate proxies for."); - sb.AppendLine("-t|--type The name of generate type (csharp, js, ng)."); sb.AppendLine("-wd|--working-directory Execution directory."); sb.AppendLine("-u|--url API definition URL from."); - sb.AppendLine("-a|--api-name (default: 'default') The name of the API endpoint defined in the /src/environments/environment.ts."); - sb.AppendLine("-s|--source (default: 'defaultProject') Angular project name to resolve the root namespace & API definition URL from."); - sb.AppendLine("-o|--output JavaScript file path or folder to place generated code in."); - sb.AppendLine("-p|--prompt Asks the options from the command line prompt (for the missing options)"); - sb.AppendLine("--target (default: 'defaultProject') Angular project name to place generated code in."); - sb.AppendLine("--folder (default: 'ClientProxies') Folder name to place generated CSharp code in."); + sb.AppendLine("-t|--type The name of generate type (csharp, js, ng)."); + sb.AppendLine(" csharp"); + sb.AppendLine(" --folder (default: 'ClientProxies') Folder name to place generated CSharp code in."); + sb.AppendLine(" js"); + sb.AppendLine(" -o|--output JavaScript file path or folder to place generated code in."); + sb.AppendLine(" ng"); + sb.AppendLine(" -a|--api-name (default: 'default') The name of the API endpoint defined in the /src/environments/environment.ts."); + sb.AppendLine(" -s|--source (default: 'defaultProject') Angular project name to resolve the root namespace & API definition URL from."); + sb.AppendLine(" -p|--prompt Asks the options from the command line prompt (for the missing options)"); + sb.AppendLine(" --target (default: 'defaultProject') Angular project name to place generated code in."); sb.AppendLine(""); sb.AppendLine("See the documentation for more info: https://docs.abp.io/en/abp/latest/CLI"); From c4d5d5305706c6c2534cc671f35835d172b4ac5e Mon Sep 17 00:00:00 2001 From: maliming Date: Fri, 8 Apr 2022 22:51:41 +0800 Subject: [PATCH 126/143] Set `ContentLength` of `HttpContext.Response` --- .../ContentFormatters/RemoteStreamContentOutputFormatter.cs | 3 ++- .../RemoteStreamContentTestController_Tests.cs | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ContentFormatters/RemoteStreamContentOutputFormatter.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ContentFormatters/RemoteStreamContentOutputFormatter.cs index f62b16b19b..5c5e7ed6c0 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ContentFormatters/RemoteStreamContentOutputFormatter.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ContentFormatters/RemoteStreamContentOutputFormatter.cs @@ -18,13 +18,14 @@ public class RemoteStreamContentOutputFormatter : OutputFormatter return typeof(IRemoteStreamContent).IsAssignableFrom(type); } - public override async Task WriteResponseBodyAsync(OutputFormatterWriteContext context) + public async override Task WriteResponseBodyAsync(OutputFormatterWriteContext context) { var remoteStream = (IRemoteStreamContent)context.Object; if (remoteStream != null) { context.HttpContext.Response.ContentType = remoteStream.ContentType; + context.HttpContext.Response.ContentLength = remoteStream.ContentLength; if (!remoteStream.FileName.IsNullOrWhiteSpace()) { diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ContentFormatters/RemoteStreamContentTestController_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ContentFormatters/RemoteStreamContentTestController_Tests.cs index a56c8ef8ad..1a60ab9d6b 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ContentFormatters/RemoteStreamContentTestController_Tests.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ContentFormatters/RemoteStreamContentTestController_Tests.cs @@ -16,6 +16,7 @@ public class RemoteStreamContentTestController_Tests : AspNetCoreMvcTestBase var result = await GetResponseAsync("/api/remote-stream-content-test/download"); result.Content.Headers.ContentType?.ToString().ShouldBe("application/rtf"); result.Content.Headers.ContentDisposition?.FileName.ShouldBe("download.rtf"); + result.Content.Headers.ContentLength.ShouldBe("DownloadAsync".Length); (await result.Content.ReadAsStringAsync()).ShouldBe("DownloadAsync"); } From b3bd998465f3c591364397cf45c0309962ac3562 Mon Sep 17 00:00:00 2001 From: albert <9526587+ebicoglu@users.noreply.github.com> Date: Fri, 8 Apr 2022 18:17:41 +0300 Subject: [PATCH 127/143] Update POST.md --- .../POST.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/POST.md b/docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/POST.md index 0cd9687374..103329d1f3 100644 --- a/docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/POST.md +++ b/docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/POST.md @@ -1,10 +1,10 @@ -# Concurrency Check in ABP Based Applications +# Concurrency Check in ABP Projects -In this article, we'll create a basic application to demonstrate how "Concurrency Check/Control" can be done in an ABP based application. +In this article, we'll create a basic application to demonstrate how "Concurrency Check/Control" can be implemented in an ABP project. ## Creating the Solution -For this article, we can create a simple BookStore application and perform CRUD operations. +For this article, we will create a simple BookStore application and add CRUD functionality to the pages. Hence we deal with the concurrency situation. > To keep the article simple and short, we'll only add the **Book** entity and ignore the **Author** part. @@ -41,7 +41,7 @@ public class Book : AuditedAggregateRoot } ``` -* To enable **Concurrency Check** for our entities, our entities should implement the `IHasConcurrencyStamp` interface, directly or indirectly. +* To enable **Concurrency Check** for our entities, our entities should be implemented the `IHasConcurrencyStamp` interface, directly or indirectly. * [Aggregate Root](https://docs.abp.io/en/abp/5.2/Entities#aggregateroot-class) entity classes already implement the `IHasConcurrencyStamp` interface, so if we inherit our entities from one of these entity classes then we won't need to manually implement the `IHasConcurrencyStamp` interface. From 6bb69d99fb12510f96715f78649da102e322c041 Mon Sep 17 00:00:00 2001 From: albert <9526587+ebicoglu@users.noreply.github.com> Date: Fri, 8 Apr 2022 18:23:00 +0300 Subject: [PATCH 128/143] Update POST.md --- .../POST.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/POST.md b/docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/POST.md index 103329d1f3..cabe9cf872 100644 --- a/docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/POST.md +++ b/docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/POST.md @@ -1,4 +1,4 @@ -# Concurrency Check in ABP Projects +# Handle Concurrency with EF Core in an ABP Framework Project with ASP.NET Core MVC In this article, we'll create a basic application to demonstrate how "Concurrency Check/Control" can be implemented in an ABP project. From ef5906397c39c4384bddf0f40bc5992ba238ed6f Mon Sep 17 00:00:00 2001 From: Roc Date: Mon, 11 Apr 2022 12:11:14 +0800 Subject: [PATCH 129/143] Update CommandLineArgumentParser.cs --- .../Volo/Abp/Cli/Args/CommandLineArgumentParser.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Args/CommandLineArgumentParser.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Args/CommandLineArgumentParser.cs index ea8541cbb9..1b060a8dbc 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Args/CommandLineArgumentParser.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Args/CommandLineArgumentParser.cs @@ -98,7 +98,7 @@ public class CommandLineArgumentParser : ICommandLineArgumentParser, ITransientD { if (argument.Length <= 1) { - throw new ArgumentException("Should specify an option name after '--' prefix!"); + throw new ArgumentException("Should specify an option name after '-' prefix!"); } return argument.RemovePreFix("-"); From 02404b1ece873d3ccdd4375c13b18363b99907de Mon Sep 17 00:00:00 2001 From: Engincan VESKE Date: Mon, 11 Apr 2022 13:38:57 +0300 Subject: [PATCH 130/143] Update POST.md --- .../POST.md | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/POST.md b/docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/POST.md index cabe9cf872..b16d6bd9f1 100644 --- a/docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/POST.md +++ b/docs/en/Community-Articles/2022-04-06-Concurrency-Check-in-ABP-Based-Applications/POST.md @@ -6,8 +6,6 @@ In this article, we'll create a basic application to demonstrate how "Concurrenc For this article, we will create a simple BookStore application and add CRUD functionality to the pages. Hence we deal with the concurrency situation. -> To keep the article simple and short, we'll only add the **Book** entity and ignore the **Author** part. - We can create a new startup template with EF Core as a database provider and MVC for the UI Framework. > If you already have a project, you don't need to create a new startup template, you can directly implement the following steps to your project. So you can skip this section. @@ -15,7 +13,7 @@ We can create a new startup template with EF Core as a database provider and MVC We can create a new startup template by using the [ABP CLI](https://docs.abp.io/en/abp/latest/CLI). ```bash -abp new Acme.BookStore -t app -csf +abp new Acme.BookStore ``` After running the above command, our project boilerplate will be downloaded. Then we can open the solution and start the development. @@ -235,7 +233,8 @@ public class BookAppService : book.Type = input.Type; book.PublishDate = input.PublishDate; - book.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp); + //set Concurrency Stamp value to the entity + book.ConcurrencyStamp = input.ConcurrencyStamp; var updatedBook = await Repository.UpdateAsync(book); return ObjectMapper.Map(updatedBook); @@ -245,9 +244,9 @@ public class BookAppService : * We've used the `CrudAppService` base class. This class implements all common CRUD operations and if we want to change a method, we can simply override the method and change it to our needs. -> Normally, you don't need to override the `UpdateAsync` method to do **Concurrency Check**. I wanted to override this method to show what we need to do for **Concurrency Check**. +> Normally, you don't need to override the `UpdateAsync` method to do **Concurrency Check**. Because the `UpdateAsync` method of the `CrudAppService` class by default map input values to the entity. But I wanted to override this method to show what we need to do for **Concurrency Check**. -* We can look closer to the `UpdateAsync` method here, because as we've mentioned earlier we need to pass the provided **ConcurrencyStamp** value to be able to do **Concurrency Check/Control** to our entity while updating. We've used the `SetConcurrencyStampIfNotNull` extension method to set the **ConcurrencyStamp** value to our entity and update the record. +* We can look closer to the `UpdateAsync` method here, because as we've mentioned earlier we need to pass the provided **ConcurrencyStamp** value to be able to do **Concurrency Check/Control** to our entity while updating. * At that point, if the given record is already updated by any other user, a **ConcurrencyStamp** mismatch will occur and `AbpDbConcurrencyException` will be thrown thanks to the **Concurrency Check** system of ABP, data-consistency will be provided and the current record won't be overridden. From 6d3b06ba27ccf0197cc2c04944df15f19ab81ab4 Mon Sep 17 00:00:00 2001 From: braim23 <94292623+braim23@users.noreply.github.com> Date: Mon, 11 Apr 2022 15:29:15 +0300 Subject: [PATCH 131/143] related with the "Fix test result" issue --- .../src/Volo.Blogging.Web/Pages/Blogs/Posts/Detail.cshtml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Detail.cshtml b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Detail.cshtml index 66d2bf89c9..8329c993cd 100644 --- a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Detail.cshtml +++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Detail.cshtml @@ -79,7 +79,7 @@ @L["WiewsWithCount", @Model.Post.ReadCount] | - @L["CommentWithCount", @Model.CommentCount] + @L["CommentWithCount", @Model.CommentCount] @if (await Authorization.IsGrantedAsync(BloggingPermissions.Posts.Update)) @@ -162,7 +162,7 @@ -

    +
    @foreach (var commentWithRepliesDto in Model.CommentsWithReplies) {
    From c38ce7ed62aca66e5a8041d1631b8d8c69bfb160 Mon Sep 17 00:00:00 2001 From: Ebicoglu Date: Mon, 11 Apr 2022 15:31:32 +0300 Subject: [PATCH 132/143] Enhancements --- .../SolutionFileModifier.cs | 36 +++---- .../VoloNugetPackagesVersionUpdater.cs | 93 ++++++++++--------- 2 files changed, 70 insertions(+), 59 deletions(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionFileModifier.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionFileModifier.cs index b78ec017c2..45e0684b4a 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionFileModifier.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionFileModifier.cs @@ -10,24 +10,28 @@ namespace Volo.Abp.Cli.ProjectModification; public class SolutionFileModifier : ITransientDependency { + public static Encoding DefaultEncoding = Encoding.UTF8; + public async Task RemoveProjectFromSolutionFileAsync(string solutionFile, string projectName) { - using (var fs = File.Open(solutionFile, FileMode.Open, FileAccess.ReadWrite, FileShare.None)) - using (var sr = new StreamReader(fs, Encoding.Default, true)) + using (var fileStream = File.Open(solutionFile, FileMode.Open, FileAccess.ReadWrite, FileShare.None)) { - var solutionFileContent = await sr.ReadToEndAsync(); - solutionFileContent.NormalizeLineEndings(); + using (var sr = new StreamReader(fileStream, Encoding.Default, true)) + { + var solutionFileContent = await sr.ReadToEndAsync(); + solutionFileContent.NormalizeLineEndings(); - var lines = solutionFileContent.Split(new[] { Environment.NewLine, "\n" }, StringSplitOptions.None); - var updatedContent = RemoveProject(lines.ToList(), projectName).JoinAsString(Environment.NewLine); + var lines = solutionFileContent.Split(new[] { Environment.NewLine, "\n" }, StringSplitOptions.None); + var updatedContent = RemoveProject(lines.ToList(), projectName).JoinAsString(Environment.NewLine); - fs.Seek(0, SeekOrigin.Begin); - fs.SetLength(0); + fileStream.Seek(0, SeekOrigin.Begin); + fileStream.SetLength(0); - using (var sw = new StreamWriter(fs, sr.CurrentEncoding)) - { - sw.Write(updatedContent); - sw.Flush(); + using (var sw = new StreamWriter(fileStream, DefaultEncoding)) + { + await sw.WriteAsync(updatedContent); + await sw.FlushAsync(); + } } } } @@ -46,8 +50,8 @@ public class SolutionFileModifier : ITransientDependency { var srcFolderId = await AddNewFolderAndGetIdOrGetExistingIdAsync(solutionFile, "src"); - var file = File.ReadAllText(solutionFile); - var lines = file.Split(Environment.NewLine).ToList(); + var solutionFileContent = File.ReadAllText(solutionFile); + var lines = solutionFileContent.Split(Environment.NewLine).ToList(); if (lines.Any(l => l.Contains($"\"{package.Name}\""))) { @@ -77,7 +81,7 @@ public class SolutionFileModifier : ITransientDependency lines.InsertAfter(l => l.Contains("GlobalSection") && l.Contains("NestedProjects"), newPreSolutionLine); - File.WriteAllText(solutionFile, string.Join(Environment.NewLine, lines), Encoding.UTF8); + File.WriteAllText(solutionFile, string.Join(Environment.NewLine, lines), DefaultEncoding); } private List RemoveProject(List solutionFileLines, string projectName) @@ -150,7 +154,7 @@ public class SolutionFileModifier : ITransientDependency Path.Combine(Path.GetDirectoryName(solutionFile), "modules", module.Name, "test"), "*.csproj", SearchOption.AllDirectories).ToList(); - } + } foreach (var projectPath in projectsUnderModule) { diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/VoloNugetPackagesVersionUpdater.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/VoloNugetPackagesVersionUpdater.cs index 4e94c983a9..98ad57f4b4 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/VoloNugetPackagesVersionUpdater.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/VoloNugetPackagesVersionUpdater.cs @@ -18,6 +18,7 @@ public class VoloNugetPackagesVersionUpdater : ITransientDependency private readonly NuGetService _nuGetService; private readonly MyGetPackageListFinder _myGetPackageListFinder; public ILogger Logger { get; set; } + public static Encoding DefaultEncoding = Encoding.UTF8; public VoloNugetPackagesVersionUpdater(NuGetService nuGetService, MyGetPackageListFinder myGetPackageListFinder) { @@ -43,25 +44,27 @@ public class VoloNugetPackagesVersionUpdater : ITransientDependency async Task UpdateAsync(string filePath) { using (var fs = File.Open(filePath, FileMode.Open, FileAccess.ReadWrite, FileShare.None)) - using (var sr = new StreamReader(fs, Encoding.Default, true)) { - var fileContent = await sr.ReadToEndAsync(); - - var updatedContent = await UpdateVoloPackagesAsync(fileContent, - includePreviews, - includeReleaseCandidates, - switchToStable, - latestVersionFromNuget, - latestReleaseCandidateVersionFromNuget, - latestVersionFromMyGet, - version); - - fs.Seek(0, SeekOrigin.Begin); - fs.SetLength(0); - using (var sw = new StreamWriter(fs, sr.CurrentEncoding)) + using (var sr = new StreamReader(fs, Encoding.Default, true)) { - sw.Write(updatedContent); - sw.Flush(); + var fileContent = await sr.ReadToEndAsync(); + + var updatedContent = await UpdateVoloPackagesAsync(fileContent, + includePreviews, + includeReleaseCandidates, + switchToStable, + latestVersionFromNuget, + latestReleaseCandidateVersionFromNuget, + latestVersionFromMyGet, + version); + + fs.Seek(0, SeekOrigin.Begin); + fs.SetLength(0); + using (var sw = new StreamWriter(fs, DefaultEncoding)) + { + await sw.WriteAsync(updatedContent); + await sw.FlushAsync(); + } } } } @@ -83,26 +86,28 @@ public class VoloNugetPackagesVersionUpdater : ITransientDependency var latestVersionFromMyGet = await GetLatestVersionFromMyGet("Volo.Abp.Core"); using (var fs = File.Open(projectPath, FileMode.Open, FileAccess.ReadWrite, FileShare.None)) - using (var sr = new StreamReader(fs, Encoding.Default, true)) { - var fileContent = await sr.ReadToEndAsync(); + using (var sr = new StreamReader(fs, Encoding.Default, true)) + { + var fileContent = await sr.ReadToEndAsync(); - var updatedContent = await UpdateVoloPackagesAsync(fileContent, - includeNightlyPreviews, - includeReleaseCandidates, - switchToStable, - latestVersionFromNuget, - latestReleaseCandidateVersionFromNuget, - latestVersionFromMyGet, - version); + var updatedContent = await UpdateVoloPackagesAsync(fileContent, + includeNightlyPreviews, + includeReleaseCandidates, + switchToStable, + latestVersionFromNuget, + latestReleaseCandidateVersionFromNuget, + latestVersionFromMyGet, + version); - fs.Seek(0, SeekOrigin.Begin); - fs.SetLength(0); + fs.Seek(0, SeekOrigin.Begin); + fs.SetLength(0); - using (var sw = new StreamWriter(fs, sr.CurrentEncoding)) - { - sw.Write(updatedContent); - sw.Flush(); + using (var sw = new StreamWriter(fs, sr.CurrentEncoding)) + { + await sw.WriteAsync(updatedContent); + await sw.FlushAsync(); + } } } } @@ -111,19 +116,21 @@ public class VoloNugetPackagesVersionUpdater : ITransientDependency protected virtual async Task UpdateInternalAsync(string projectPath, bool includeNightlyPreviews = false, bool includeReleaseCandidates = false, bool switchToStable = false) { using (var fs = File.Open(projectPath, FileMode.Open, FileAccess.ReadWrite, FileShare.None)) - using (var sr = new StreamReader(fs, Encoding.Default, true)) { - var fileContent = await sr.ReadToEndAsync(); + using (var sr = new StreamReader(fs, Encoding.Default, true)) + { + var fileContent = await sr.ReadToEndAsync(); - var updatedContent = await UpdateVoloPackagesAsync(fileContent, includeNightlyPreviews, includeReleaseCandidates, switchToStable); + var updatedContent = await UpdateVoloPackagesAsync(fileContent, includeNightlyPreviews, includeReleaseCandidates, switchToStable); - fs.Seek(0, SeekOrigin.Begin); - fs.SetLength(0); + fs.Seek(0, SeekOrigin.Begin); + fs.SetLength(0); - using (var sw = new StreamWriter(fs, sr.CurrentEncoding)) - { - sw.Write(updatedContent); - sw.Flush(); + using (var sw = new StreamWriter(fs, sr.CurrentEncoding)) + { + await sw.WriteAsync(updatedContent); + await sw.FlushAsync(); + } } } } @@ -245,7 +252,7 @@ public class VoloNugetPackagesVersionUpdater : ITransientDependency } catch (Exception ex) { - Logger.LogError("Cannot update Volo.* packages! An error occured while updating the package \"{0}\". Error: {1}", packageId, ex.Message); + Logger.LogError("Cannot update Volo.* packages! An error occurred while updating the package \"{0}\". Error: {1}", packageId, ex.Message); Logger.LogException(ex); } From 8eaaf6b0455504ff5daef4ca6b671a425e898780 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Tue, 12 Apr 2022 10:57:57 +0300 Subject: [PATCH 133/143] Cli: Allow to generate code with Suite resolves https://github.com/volosoft/volo/issues/9596 --- .../Volo/Abp/Cli/Commands/SuiteCommand.cs | 198 +++++++++++++++++- .../Volo/Abp/Cli/Utils/CmdHelper.cs | 16 ++ .../Volo/Abp/Cli/Utils/ICmdHelper.cs | 6 +- 3 files changed, 212 insertions(+), 8 deletions(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/SuiteCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/SuiteCommand.cs index 0e797e682f..ad791d05b9 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/SuiteCommand.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/SuiteCommand.cs @@ -1,33 +1,51 @@ using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; using System.Linq; +using System.Net; +using System.Net.Http; +using System.Net.NetworkInformation; using System.Text; +using System.Threading; using System.Threading.Tasks; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Abstractions; +using Newtonsoft.Json.Linq; using NuGet.Versioning; using Volo.Abp.Cli.Args; using Volo.Abp.Cli.Commands.Services; +using Volo.Abp.Cli.Http; using Volo.Abp.Cli.NuGet; using Volo.Abp.Cli.Utils; using Volo.Abp.DependencyInjection; +using Volo.Abp.Http; +using Volo.Abp.Json; +using Volo.Abp.Threading; namespace Volo.Abp.Cli.Commands; public class SuiteCommand : IConsoleCommand, ITransientDependency { public const string Name = "suite"; - + public ICmdHelper CmdHelper { get; } private readonly AbpNuGetIndexUrlService _nuGetIndexUrlService; private readonly NuGetService _nuGetService; + private readonly CliHttpClientFactory _cliHttpClientFactory; private const string SuitePackageName = "Volo.Abp.Suite"; public ILogger Logger { get; set; } - public SuiteCommand(AbpNuGetIndexUrlService nuGetIndexUrlService, NuGetService nuGetService, ICmdHelper cmdHelper) + public SuiteCommand( + AbpNuGetIndexUrlService nuGetIndexUrlService, + NuGetService nuGetService, + ICmdHelper cmdHelper, + CliHttpClientFactory cliHttpClientFactory) { CmdHelper = cmdHelper; _nuGetIndexUrlService = nuGetIndexUrlService; _nuGetService = nuGetService; + _cliHttpClientFactory = cliHttpClientFactory; Logger = NullLogger.Instance; } @@ -48,6 +66,13 @@ public class SuiteCommand : IConsoleCommand, ITransientDependency RunSuite(); break; + case "generate": + await InstallSuiteIfNotInstalledAsync(); + var suiteProcess = RunSuiteTemporary(); + await GenerateCrudOnSuiteAsync(commandLineArgs); + suiteProcess?.Kill(); + break; + case "install": await InstallSuiteAsync(version, preview); break; @@ -63,6 +88,115 @@ public class SuiteCommand : IConsoleCommand, ITransientDependency } } + private async Task GenerateCrudOnSuiteAsync(CommandLineArgs args) + { + var entityFile = args.Options.GetOrNull(Options.Crud.Entity.Short, Options.Crud.Entity.Long); + var solutionFile = args.Options.GetOrNull(Options.Crud.Solution.Short, Options.Crud.Solution.Long); + + if (entityFile.IsNullOrEmpty() || !entityFile.EndsWith(".json") || !File.Exists(entityFile) || + solutionFile.IsNullOrEmpty() || !solutionFile.EndsWith(".sln")) + { + throw new UserFriendlyException("Invalid Arguments!"); + } + + Logger.LogInformation("Generating CRUD Page..."); + + var client = _cliHttpClientFactory.CreateClient(false); + var solutionId = await GetSolutionIdAsync(client, solutionFile); + + if (!solutionId.HasValue) + { + return; + } + + var entityContent = new StringContent( + File.ReadAllText(entityFile), + Encoding.UTF8, + MimeTypes.Application.Json + ); + + var responseMessage = await client.PostAsync( + $"http://localhost:3000/api/abpSuite/crudPageGenerator/{solutionId.ToString()}/save-and-generate-entity", + entityContent + ); + + var response = await responseMessage.Content.ReadAsStringAsync(); + + if (!response.IsNullOrWhiteSpace()) + { + Logger.LogError(response); + } + else + { + Logger.LogInformation("CRUD page generated."); + } + } + + private async Task GetSolutionIdAsync(HttpClient client, string solutionPath) + { + var timeIntervals = new List(); + for (var i = 0; i < 10; i++) + { + timeIntervals.Add(TimeSpan.FromSeconds(5)); + } + + var responseMessage = await client.GetHttpResponseMessageWithRetryAsync( + "http://localhost:3000/api/abpSuite/solutions", + _cliHttpClientFactory.GetCancellationToken(TimeSpan.FromMinutes(10)), + Logger, + timeIntervals.ToArray()); + + var response = await responseMessage.Content.ReadAsStringAsync(); + JArray solutions; + + try + { + solutions = (JArray)(JObject.Parse(response)["solutions"]); + } + catch (Exception) + { + Logger.LogError(response); + return await AddSolutionToSuiteAsync(client, solutionPath); + } + + foreach (JObject solution in solutions) + { + if (solution["path"].ToString() == solutionPath) + { + return Guid.Parse(solution["id"].ToString()); + } + } + + return await AddSolutionToSuiteAsync(client, solutionPath); + } + + private async Task AddSolutionToSuiteAsync(HttpClient client, string solutionPath) + { + var entityContent = new StringContent( + "{\"Path\": \"" + solutionPath.Replace("\\", "\\\\") + "\"}", + Encoding.UTF8, + MimeTypes.Application.Json + ); + + var responseMessage = await client.PostAsync( + "http://localhost:3000/api/abpSuite/addSolution", + entityContent, + _cliHttpClientFactory.GetCancellationToken(TimeSpan.FromMinutes(10)) + ); + + var response = await responseMessage.Content.ReadAsStringAsync(); + + try + { + return Guid.Parse(JObject.Parse(response)["id"].ToString()); + } + catch (Exception) + { + Logger.LogError(response); + return null; + } + } + private async Task InstallSuiteIfNotInstalledAsync() { var currentSuiteVersionAsString = GetCurrentSuiteVersion(); @@ -132,7 +266,8 @@ public class SuiteCommand : IConsoleCommand, ITransientDependency } CmdHelper.RunCmd( - $"dotnet tool install {SuitePackageName}{versionOption} --add-source {nugetIndexUrl} -g", out int exitCode + $"dotnet tool install {SuitePackageName}{versionOption} --add-source {nugetIndexUrl} -g", + out int exitCode ); if (exitCode == 0) @@ -155,7 +290,8 @@ public class SuiteCommand : IConsoleCommand, ITransientDependency private void ShowSuiteManualInstallCommand() { Logger.LogInformation("You can also run the following command to install ABP Suite."); - Logger.LogInformation("dotnet tool install -g Volo.Abp.Suite --add-source https://nuget.abp.io//v3/index.json"); + Logger.LogInformation( + "dotnet tool install -g Volo.Abp.Suite --add-source https://nuget.abp.io//v3/index.json"); } private async Task UpdateSuiteAsync(string version = null, bool preview = false) @@ -202,7 +338,8 @@ public class SuiteCommand : IConsoleCommand, ITransientDependency } CmdHelper.RunCmd( - $"dotnet tool update {SuitePackageName}{versionOption} --add-source {nugetIndexUrl} -g", out int exitCode + $"dotnet tool update {SuitePackageName}{versionOption} --add-source {nugetIndexUrl} -g", + out int exitCode ); if (exitCode != 0) @@ -231,7 +368,8 @@ public class SuiteCommand : IConsoleCommand, ITransientDependency private void ShowSuiteManualUpdateCommand() { Logger.LogError("You can also run the following command to update ABP Suite."); - Logger.LogError("dotnet tool update -g Volo.Abp.Suite --add-source https://nuget.abp.io//v3/index.json"); + Logger.LogError( + "dotnet tool update -g Volo.Abp.Suite --add-source https://nuget.abp.io//v3/index.json"); } private void RemoveSuite() @@ -258,6 +396,37 @@ public class SuiteCommand : IConsoleCommand, ITransientDependency CmdHelper.RunCmd("abp-suite"); } + private Process RunSuiteTemporary() + { + try + { + if (!GlobalToolHelper.IsGlobalToolInstalled("abp-suite")) + { + Logger.LogWarning( + "ABP Suite is not installed! To install it you can run the command: \"abp suite install\""); + return null; + } + } + catch (Exception ex) + { + Logger.LogWarning("Couldn't check ABP Suite installed status: " + ex.Message); + } + + if (IsSuiteAlreadyRunning()) + { + return null; + } + + return CmdHelper.RunCmdAndGetProcess("abp-suite --no-browser"); + } + + bool IsSuiteAlreadyRunning() + { + var ipGP = IPGlobalProperties.GetIPGlobalProperties(); + var endpoints = ipGP.GetActiveTcpListeners(); + return endpoints.Any(e => e.Port == 3000); + } + public string GetUsageInfo() { var sb = new StringBuilder(); @@ -306,5 +475,20 @@ public class SuiteCommand : IConsoleCommand, ITransientDependency public const string Long = "version"; public const string Short = "v"; } + + public static class Crud + { + public static class Solution + { + public const string Long = "solution"; + public const string Short = "s"; + } + + public static class Entity + { + public const string Long = "entity"; + public const string Short = "e"; + } + } } -} +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Utils/CmdHelper.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Utils/CmdHelper.cs index 483d047e86..741390dc73 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Utils/CmdHelper.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Utils/CmdHelper.cs @@ -58,6 +58,22 @@ public class CmdHelper : ICmdHelper, ITransientDependency } } + public Process RunCmdAndGetProcess(string command, string workingDirectory = null) + { + var procStartInfo = new ProcessStartInfo( + GetFileName(), + GetArguments(command) + ); + + if (!string.IsNullOrEmpty(workingDirectory)) + { + procStartInfo.WorkingDirectory = workingDirectory; + procStartInfo.CreateNoWindow = false; + } + + return Process.Start(procStartInfo); + } + public string RunCmdAndGetOutput(string command, string workingDirectory = null) { return RunCmdAndGetOutput(command, out int _, workingDirectory); diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Utils/ICmdHelper.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Utils/ICmdHelper.cs index 984b705d33..648215d24f 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Utils/ICmdHelper.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Utils/ICmdHelper.cs @@ -1,4 +1,6 @@ -namespace Volo.Abp.Cli.Utils; +using System.Diagnostics; + +namespace Volo.Abp.Cli.Utils; public interface ICmdHelper { @@ -12,6 +14,8 @@ public interface ICmdHelper void RunCmd(string command, string workingDirectory = null); + Process RunCmdAndGetProcess(string command, string workingDirectory = null); + void RunCmd(string command, out int exitCode, string workingDirectory = null); string RunCmdAndGetOutput(string command, string workingDirectory = null); From 4135675eaa351b0a675a72b9db69df1f28940cc6 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Tue, 12 Apr 2022 10:59:44 +0300 Subject: [PATCH 134/143] Update SuiteCommand.cs --- .../src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/SuiteCommand.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/SuiteCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/SuiteCommand.cs index ad791d05b9..b8aa608361 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/SuiteCommand.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/SuiteCommand.cs @@ -420,7 +420,7 @@ public class SuiteCommand : IConsoleCommand, ITransientDependency return CmdHelper.RunCmdAndGetProcess("abp-suite --no-browser"); } - bool IsSuiteAlreadyRunning() + private bool IsSuiteAlreadyRunning() { var ipGP = IPGlobalProperties.GetIPGlobalProperties(); var endpoints = ipGP.GetActiveTcpListeners(); From 46d5f9ebd815e0f1ab5d8365d168398f2553db94 Mon Sep 17 00:00:00 2001 From: Engincan VESKE Date: Tue, 12 Apr 2022 16:35:12 +0300 Subject: [PATCH 135/143] blogging: Revert 6d3b06ba27 --- .../src/Volo.Blogging.Web/Pages/Blogs/Posts/Detail.cshtml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Detail.cshtml b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Detail.cshtml index 8329c993cd..66d2bf89c9 100644 --- a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Detail.cshtml +++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Detail.cshtml @@ -79,7 +79,7 @@ @L["WiewsWithCount", @Model.Post.ReadCount] | - @L["CommentWithCount", @Model.CommentCount] + @L["CommentWithCount", @Model.CommentCount] @if (await Authorization.IsGrantedAsync(BloggingPermissions.Posts.Update)) @@ -162,7 +162,7 @@ -
    +
    @foreach (var commentWithRepliesDto in Model.CommentsWithReplies) {
    From e3c4c5ebe2cd87cbca5c8f6b7d2eef3d8ad9a5b9 Mon Sep 17 00:00:00 2001 From: Ebicoglu Date: Wed, 13 Apr 2022 02:24:59 +0300 Subject: [PATCH 136/143] Close Suite after code generation #12231 --- .../Volo/Abp/Cli/Commands/SuiteCommand.cs | 52 ++++++++++++++----- 1 file changed, 39 insertions(+), 13 deletions(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/SuiteCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/SuiteCommand.cs index b8aa608361..aabd5c6dfd 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/SuiteCommand.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/SuiteCommand.cs @@ -36,6 +36,8 @@ public class SuiteCommand : IConsoleCommand, ITransientDependency private const string SuitePackageName = "Volo.Abp.Suite"; public ILogger Logger { get; set; } + private const string AbpSuiteHost = "http://localhost:3000"; + public SuiteCommand( AbpNuGetIndexUrlService nuGetIndexUrlService, NuGetService nuGetService, @@ -68,9 +70,14 @@ public class SuiteCommand : IConsoleCommand, ITransientDependency case "generate": await InstallSuiteIfNotInstalledAsync(); - var suiteProcess = RunSuiteTemporary(); - await GenerateCrudOnSuiteAsync(commandLineArgs); - suiteProcess?.Kill(); + var suiteProcess = StartSuite(); + System.Threading.Thread.Sleep(500); //wait for initialization of the app + await GenerateCrudPageAsync(commandLineArgs); + if (suiteProcess != null) + { + KillSuite(); + } + break; case "install": @@ -88,7 +95,7 @@ public class SuiteCommand : IConsoleCommand, ITransientDependency } } - private async Task GenerateCrudOnSuiteAsync(CommandLineArgs args) + private async Task GenerateCrudPageAsync(CommandLineArgs args) { var entityFile = args.Options.GetOrNull(Options.Crud.Entity.Short, Options.Crud.Entity.Long); var solutionFile = args.Options.GetOrNull(Options.Crud.Solution.Short, Options.Crud.Solution.Long); @@ -98,7 +105,7 @@ public class SuiteCommand : IConsoleCommand, ITransientDependency { throw new UserFriendlyException("Invalid Arguments!"); } - + Logger.LogInformation("Generating CRUD Page..."); var client = _cliHttpClientFactory.CreateClient(false); @@ -108,7 +115,7 @@ public class SuiteCommand : IConsoleCommand, ITransientDependency { return; } - + var entityContent = new StringContent( File.ReadAllText(entityFile), Encoding.UTF8, @@ -116,7 +123,7 @@ public class SuiteCommand : IConsoleCommand, ITransientDependency ); var responseMessage = await client.PostAsync( - $"http://localhost:3000/api/abpSuite/crudPageGenerator/{solutionId.ToString()}/save-and-generate-entity", + $"{AbpSuiteHost}/api/abpSuite/crudPageGenerator/{solutionId.ToString()}/save-and-generate-entity", entityContent ); @@ -128,7 +135,7 @@ public class SuiteCommand : IConsoleCommand, ITransientDependency } else { - Logger.LogInformation("CRUD page generated."); + Logger.LogInformation("CRUD page generation successfully completed."); } } @@ -148,7 +155,7 @@ public class SuiteCommand : IConsoleCommand, ITransientDependency var response = await responseMessage.Content.ReadAsStringAsync(); JArray solutions; - + try { solutions = (JArray)(JObject.Parse(response)["solutions"]); @@ -185,7 +192,7 @@ public class SuiteCommand : IConsoleCommand, ITransientDependency ); var response = await responseMessage.Content.ReadAsStringAsync(); - + try { return Guid.Parse(JObject.Parse(response)["id"].ToString()); @@ -396,14 +403,13 @@ public class SuiteCommand : IConsoleCommand, ITransientDependency CmdHelper.RunCmd("abp-suite"); } - private Process RunSuiteTemporary() + private Process StartSuite() { try { if (!GlobalToolHelper.IsGlobalToolInstalled("abp-suite")) { - Logger.LogWarning( - "ABP Suite is not installed! To install it you can run the command: \"abp suite install\""); + Logger.LogWarning("ABP Suite is not installed! To install it you can run the command: \"abp suite install\""); return null; } } @@ -427,6 +433,26 @@ public class SuiteCommand : IConsoleCommand, ITransientDependency return endpoints.Any(e => e.Port == 3000); } + private void KillSuite() + { + try + { + var suiteProcesses = (from p in Process.GetProcesses() + where p.ProcessName.ToLower().Contains("abp-suite") + select p); + + foreach (var suiteProcess in suiteProcesses) + { + suiteProcess.Kill(); + Logger.LogInformation("Suite closed."); + } + } + catch (Exception ex) + { + Logger.LogInformation("Cannot close Suite." + ex.Message); + } + } + public string GetUsageInfo() { var sb = new StringBuilder(); From 67247e05e0e83f81b5bc2c2b49a6ead6523ad460 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Wed, 13 Apr 2022 09:25:27 +0800 Subject: [PATCH 137/143] Make methods of AuditPropertySetter virtual --- .../Volo/Abp/Auditing/AuditPropertySetter.cs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditPropertySetter.cs b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditPropertySetter.cs index 91b5019199..d85bad82eb 100644 --- a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditPropertySetter.cs +++ b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditPropertySetter.cs @@ -21,25 +21,25 @@ public class AuditPropertySetter : IAuditPropertySetter, ITransientDependency Clock = clock; } - public void SetCreationProperties(object targetObject) + public virtual void SetCreationProperties(object targetObject) { SetCreationTime(targetObject); SetCreatorId(targetObject); } - public void SetModificationProperties(object targetObject) + public virtual void SetModificationProperties(object targetObject) { SetLastModificationTime(targetObject); SetLastModifierId(targetObject); } - public void SetDeletionProperties(object targetObject) + public virtual void SetDeletionProperties(object targetObject) { SetDeletionTime(targetObject); SetDeleterId(targetObject); } - private void SetCreationTime(object targetObject) + protected virtual void SetCreationTime(object targetObject) { if (!(targetObject is IHasCreationTime objectWithCreationTime)) { @@ -52,7 +52,7 @@ public class AuditPropertySetter : IAuditPropertySetter, ITransientDependency } } - private void SetCreatorId(object targetObject) + protected virtual void SetCreatorId(object targetObject) { if (!CurrentUser.Id.HasValue) { @@ -95,7 +95,7 @@ public class AuditPropertySetter : IAuditPropertySetter, ITransientDependency } } - private void SetLastModificationTime(object targetObject) + protected virtual void SetLastModificationTime(object targetObject) { if (targetObject is IHasModificationTime objectWithModificationTime) { @@ -103,7 +103,7 @@ public class AuditPropertySetter : IAuditPropertySetter, ITransientDependency } } - private void SetLastModifierId(object targetObject) + protected virtual void SetLastModifierId(object targetObject) { if (!(targetObject is IModificationAuditedObject modificationAuditedObject)) { @@ -137,7 +137,7 @@ public class AuditPropertySetter : IAuditPropertySetter, ITransientDependency modificationAuditedObject.LastModifierId = CurrentUser.Id; } - private void SetDeletionTime(object targetObject) + protected virtual void SetDeletionTime(object targetObject) { if (targetObject is IHasDeletionTime objectWithDeletionTime) { @@ -148,7 +148,7 @@ public class AuditPropertySetter : IAuditPropertySetter, ITransientDependency } } - private void SetDeleterId(object targetObject) + protected virtual void SetDeleterId(object targetObject) { if (!(targetObject is IDeletionAuditedObject deletionAuditedObject)) { From 187732612a61687ae32f8a16063c240d47243936 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 14 Apr 2022 11:36:04 +0300 Subject: [PATCH 138/143] Update POST.md --- .../2022-04-14-Dependency-Injection/POST.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/en/Community-Articles/2022-04-14-Dependency-Injection/POST.md b/docs/en/Community-Articles/2022-04-14-Dependency-Injection/POST.md index edd74c1591..092fb72dbc 100644 --- a/docs/en/Community-Articles/2022-04-14-Dependency-Injection/POST.md +++ b/docs/en/Community-Articles/2022-04-14-Dependency-Injection/POST.md @@ -18,15 +18,15 @@ public class ElasticsearchExternalLogger : IExternalLogger { public async Task LogAsync(string logText) { - //TODO... + // TODO... } } public class AzureExternalLogger : IExternalLogger { - public Task LogAsync(string logText) + public async Task LogAsync(string logText) { - throw new System.NotImplementedException(); + // TODO... } } ```` From 47e1284aeb516a96d9e83e14f8d771b75b67f276 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Mon, 18 Apr 2022 09:33:27 +0800 Subject: [PATCH 139/143] No layers template missing console logs for non development environments --- .../Program.cs | 5 +---- .../MyCompanyName.MyProjectName.Blazor.Server/Program.cs | 5 +---- .../MyCompanyName.MyProjectName.Host.Mongo/Program.cs | 5 +---- .../aspnet-core/MyCompanyName.MyProjectName.Host/Program.cs | 5 +---- .../MyCompanyName.MyProjectName.Mvc.Mongo/Program.cs | 5 +---- .../aspnet-core/MyCompanyName.MyProjectName.Mvc/Program.cs | 5 +---- 6 files changed, 6 insertions(+), 24 deletions(-) diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/Program.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/Program.cs index 051587bb5c..07e558fb39 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/Program.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/Program.cs @@ -18,12 +18,9 @@ public class Program .MinimumLevel.Override("Microsoft", LogEventLevel.Information) .MinimumLevel.Override("Microsoft.EntityFrameworkCore", LogEventLevel.Warning) .Enrich.FromLogContext() -#if DEBUG .WriteTo.Async(c => c.File("Logs/logs.txt")) .WriteTo.Async(c => c.Console()); -#else - .WriteTo.Async(c => c.File("Logs/logs.txt")); -#endif + if (IsMigrateDatabase(args)) { loggerConfiguration.MinimumLevel.Override("Volo.Abp", LogEventLevel.Warning); diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Program.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Program.cs index 0226e0a554..4553f8cfd1 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Program.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Program.cs @@ -24,12 +24,9 @@ public class Program .MinimumLevel.Override("Microsoft", LogEventLevel.Information) .MinimumLevel.Override("Microsoft.EntityFrameworkCore", LogEventLevel.Warning) .Enrich.FromLogContext() -#if DEBUG .WriteTo.Async(c => c.File("Logs/logs.txt")) .WriteTo.Async(c => c.Console()); -#else - .WriteTo.Async(c => c.File("Logs/logs.txt")); -#endif + if (IsMigrateDatabase(args)) { loggerConfiguration.MinimumLevel.Override("Volo.Abp", LogEventLevel.Warning); diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host.Mongo/Program.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host.Mongo/Program.cs index a9366b95fe..6eb33e471a 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host.Mongo/Program.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host.Mongo/Program.cs @@ -17,12 +17,9 @@ public class Program .MinimumLevel.Override("Microsoft", LogEventLevel.Information) .MinimumLevel.Override("Microsoft.EntityFrameworkCore", LogEventLevel.Warning) .Enrich.FromLogContext() -#if DEBUG .WriteTo.Async(c => c.File("Logs/logs.txt")) .WriteTo.Async(c => c.Console()); -#else - .WriteTo.Async(c => c.File("Logs/logs.txt")); -#endif + if (IsMigrateDatabase(args)) { loggerConfiguration.MinimumLevel.Override("Volo.Abp", LogEventLevel.Warning); diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Program.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Program.cs index c4c428b90d..199b799da8 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Program.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Program.cs @@ -23,12 +23,9 @@ public class Program .MinimumLevel.Override("Microsoft", LogEventLevel.Information) .MinimumLevel.Override("Microsoft.EntityFrameworkCore", LogEventLevel.Warning) .Enrich.FromLogContext() -#if DEBUG .WriteTo.Async(c => c.File("Logs/logs.txt")) .WriteTo.Async(c => c.Console()); -#else - .WriteTo.Async(c => c.File("Logs/logs.txt")); -#endif + if (IsMigrateDatabase(args)) { loggerConfiguration.MinimumLevel.Override("Volo.Abp", LogEventLevel.Warning); diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc.Mongo/Program.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc.Mongo/Program.cs index e3b1aeed74..9d076b5f23 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc.Mongo/Program.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc.Mongo/Program.cs @@ -18,12 +18,9 @@ public class Program .MinimumLevel.Override("Microsoft", LogEventLevel.Information) .MinimumLevel.Override("Microsoft.EntityFrameworkCore", LogEventLevel.Warning) .Enrich.FromLogContext() -#if DEBUG .WriteTo.Async(c => c.File("Logs/logs.txt")) .WriteTo.Async(c => c.Console()); -#else - .WriteTo.Async(c => c.File("Logs/logs.txt")); -#endif + if (IsMigrateDatabase(args)) { loggerConfiguration.MinimumLevel.Override("Volo.Abp", LogEventLevel.Warning); diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Program.cs b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Program.cs index 358f8dda73..57e81aa17c 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Program.cs +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Program.cs @@ -24,12 +24,9 @@ public class Program .MinimumLevel.Override("Microsoft", LogEventLevel.Information) .MinimumLevel.Override("Microsoft.EntityFrameworkCore", LogEventLevel.Warning) .Enrich.FromLogContext() -#if DEBUG .WriteTo.Async(c => c.File("Logs/logs.txt")) .WriteTo.Async(c => c.Console()); -#else - .WriteTo.Async(c => c.File("Logs/logs.txt")); -#endif + if (IsMigrateDatabase(args)) { loggerConfiguration.MinimumLevel.Override("Volo.Abp", LogEventLevel.Warning); From 00e18120b0566c741011b7e572d62b866c508102 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Mon, 18 Apr 2022 11:19:32 +0800 Subject: [PATCH 140/143] Add IsEnabledAsync to IExternalLoginProvider --- .../Volo/Abp/Identity/ExternalLoginProviderBase.cs | 2 ++ .../Volo/Abp/Identity/IExternalLoginProvider.cs | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/ExternalLoginProviderBase.cs b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/ExternalLoginProviderBase.cs index d129ba917e..cfefad2a95 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/ExternalLoginProviderBase.cs +++ b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/ExternalLoginProviderBase.cs @@ -32,6 +32,8 @@ public abstract class ExternalLoginProviderBase : IExternalLoginProvider } public abstract Task TryAuthenticateAsync(string userName, string plainPassword); + + public abstract Task IsEnabledAsync(); public virtual async Task CreateUserAsync(string userName, string providerName) { diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IExternalLoginProvider.cs b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IExternalLoginProvider.cs index 56d6c643fb..52d3895d13 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IExternalLoginProvider.cs +++ b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IExternalLoginProvider.cs @@ -28,4 +28,10 @@ public interface IExternalLoginProvider /// The name of this provider /// The user that can be updated Task UpdateUserAsync(IdentityUser user, string providerName); + + /// + /// Return a value indicating whether this source is enabled. + /// + /// + Task IsEnabledAsync(); } From a16c1e3de5713f1cf9cc729c1d9e18bfe01a6bed Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Mon, 18 Apr 2022 12:06:07 +0800 Subject: [PATCH 141/143] Update FakeExternalLoginProvider --- .../Abp/Identity/AspNetCore/FakeExternalLoginProvider.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/modules/identity/test/Volo.Abp.Identity.AspNetCore.Tests/Volo/Abp/Identity/AspNetCore/FakeExternalLoginProvider.cs b/modules/identity/test/Volo.Abp.Identity.AspNetCore.Tests/Volo/Abp/Identity/AspNetCore/FakeExternalLoginProvider.cs index 6583156c82..fbfc0e2ef6 100644 --- a/modules/identity/test/Volo.Abp.Identity.AspNetCore.Tests/Volo/Abp/Identity/AspNetCore/FakeExternalLoginProvider.cs +++ b/modules/identity/test/Volo.Abp.Identity.AspNetCore.Tests/Volo/Abp/Identity/AspNetCore/FakeExternalLoginProvider.cs @@ -35,6 +35,11 @@ public class FakeExternalLoginProvider : ExternalLoginProviderBase, ITransientDe ); } + public override Task IsEnabledAsync() + { + return Task.FromResult(true); + } + protected override Task GetUserInfoAsync(string userName) { if (userName != "ext_user") From 4f21f6dc3ed5d2f6cb181ac9f87e799cb451c460 Mon Sep 17 00:00:00 2001 From: enisn Date: Mon, 18 Apr 2022 18:31:26 +0300 Subject: [PATCH 142/143] CmsKit - Prevent data seeding if global feature disabled --- .../Volo/CmsKit/Blogs/BlogFeatureDataSeedContributor.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogFeatureDataSeedContributor.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogFeatureDataSeedContributor.cs index b212e5e21a..e99ab47964 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogFeatureDataSeedContributor.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogFeatureDataSeedContributor.cs @@ -1,6 +1,7 @@ using System.Threading.Tasks; using Volo.Abp.Data; using Volo.Abp.DependencyInjection; +using Volo.Abp.GlobalFeatures; namespace Volo.CmsKit.Blogs; @@ -19,6 +20,11 @@ public class BlogFeatureDataSeedContributor : IDataSeedContributor, ITransientDe public async Task SeedAsync(DataSeedContext context) { + if (!GlobalFeatureManager.Instance.IsEnabled()) + { + return; + } + var blogs = await _blogRepository.GetListAsync(); foreach (var blog in blogs) From f1566fa44a932788a63431930e5aed69580ca2d5 Mon Sep 17 00:00:00 2001 From: enisn Date: Mon, 18 Apr 2022 18:32:29 +0300 Subject: [PATCH 143/143] Add missing BlogFeature property to ICmsKitDbContext --- .../Volo/CmsKit/EntityFrameworkCore/ICmsKitDbContext.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/ICmsKitDbContext.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/ICmsKitDbContext.cs index a405612f39..fca31f2d73 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/ICmsKitDbContext.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/ICmsKitDbContext.cs @@ -26,6 +26,7 @@ public interface ICmsKitDbContext : IEfCoreDbContext DbSet Pages { get; } DbSet Blogs { get; } DbSet BlogPosts { get; } + DbSet BlogFeatures { get; } DbSet MediaDescriptors { get; } DbSet MenuItems { get; } DbSet GlobalResources { get; }