From 28da906e75f86f7dcf875ab11d76ecede775ee5f Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Wed, 30 Dec 2020 17:09:56 +0800 Subject: [PATCH 001/472] Add NormalizeContainerName method --- .../BlobStoring/Aliyun/AliyunBlobProvider.cs | 11 ++++--- .../Abp/BlobStoring/Aws/AwsBlobProvider.cs | 14 +++++---- .../BlobStoring/Azure/AzureBlobProvider.cs | 12 ++++---- ...nioBlobContainerConfigurationExtensions.cs | 1 + .../BlobStoring/Minio/MinioBlobProvider.cs | 10 ++++--- .../Volo/Abp/BlobStoring/BlobProviderBase.cs | 29 +++++++++++++++++-- 6 files changed, 57 insertions(+), 20 deletions(-) diff --git a/framework/src/Volo.Abp.BlobStoring.Aliyun/Volo/Abp/BlobStoring/Aliyun/AliyunBlobProvider.cs b/framework/src/Volo.Abp.BlobStoring.Aliyun/Volo/Abp/BlobStoring/Aliyun/AliyunBlobProvider.cs index d6c9303afd..199c343659 100644 --- a/framework/src/Volo.Abp.BlobStoring.Aliyun/Volo/Abp/BlobStoring/Aliyun/AliyunBlobProvider.cs +++ b/framework/src/Volo.Abp.BlobStoring.Aliyun/Volo/Abp/BlobStoring/Aliyun/AliyunBlobProvider.cs @@ -10,13 +10,16 @@ namespace Volo.Abp.BlobStoring.Aliyun { protected IOssClientFactory OssClientFactory { get; } protected IAliyunBlobNameCalculator AliyunBlobNameCalculator { get; } + protected IServiceProvider ServiceProvider { get; } public AliyunBlobProvider( IOssClientFactory ossClientFactory, - IAliyunBlobNameCalculator aliyunBlobNameCalculator) + IAliyunBlobNameCalculator aliyunBlobNameCalculator, + IServiceProvider serviceProvider) { OssClientFactory = ossClientFactory; AliyunBlobNameCalculator = aliyunBlobNameCalculator; + ServiceProvider = serviceProvider; } protected virtual IOss GetOssClient(BlobContainerConfiguration blobContainerConfiguration) @@ -88,15 +91,15 @@ namespace Volo.Abp.BlobStoring.Aliyun return memoryStream; } - private static string GetContainerName(BlobProviderArgs args) + protected virtual string GetContainerName(BlobProviderArgs args) { var configuration = args.Configuration.GetAliyunConfiguration(); return configuration.ContainerName.IsNullOrWhiteSpace() ? args.ContainerName - : configuration.ContainerName; + : NormalizeContainerName(args, ServiceProvider, configuration.ContainerName); } - private bool BlobExists(IOss ossClient,string containerName, string blobName) + protected virtual bool BlobExists(IOss ossClient,string containerName, string blobName) { // Make sure Blob Container exists. return ossClient.DoesBucketExist(containerName) && diff --git a/framework/src/Volo.Abp.BlobStoring.Aws/Volo/Abp/BlobStoring/Aws/AwsBlobProvider.cs b/framework/src/Volo.Abp.BlobStoring.Aws/Volo/Abp/BlobStoring/Aws/AwsBlobProvider.cs index 191f9a0ac7..dbf2ce3848 100644 --- a/framework/src/Volo.Abp.BlobStoring.Aws/Volo/Abp/BlobStoring/Aws/AwsBlobProvider.cs +++ b/framework/src/Volo.Abp.BlobStoring.Aws/Volo/Abp/BlobStoring/Aws/AwsBlobProvider.cs @@ -12,12 +12,16 @@ namespace Volo.Abp.BlobStoring.Aws { protected IAwsBlobNameCalculator AwsBlobNameCalculator { get; } protected IAmazonS3ClientFactory AmazonS3ClientFactory { get; } + protected IServiceProvider ServiceProvider { get; } - public AwsBlobProvider(IAwsBlobNameCalculator awsBlobNameCalculator, - IAmazonS3ClientFactory amazonS3ClientFactory) + public AwsBlobProvider( + IAwsBlobNameCalculator awsBlobNameCalculator, + IAmazonS3ClientFactory amazonS3ClientFactory, + IServiceProvider serviceProvider) { AwsBlobNameCalculator = awsBlobNameCalculator; AmazonS3ClientFactory = amazonS3ClientFactory; + ServiceProvider = serviceProvider; } public async override Task SaveAsync(BlobProviderSaveArgs args) @@ -111,7 +115,7 @@ namespace Volo.Abp.BlobStoring.Aws return await AmazonS3ClientFactory.GetAmazonS3Client(configuration); } - private async Task BlobExistsAsync(AmazonS3Client amazonS3Client, string containerName, string blobName) + protected virtual async Task BlobExistsAsync(AmazonS3Client amazonS3Client, string containerName, string blobName) { // Make sure Blob Container exists. if (!await AmazonS3Util.DoesS3BucketExistV2Async(amazonS3Client, containerName)) @@ -147,12 +151,12 @@ namespace Volo.Abp.BlobStoring.Aws } } - private static string GetContainerName(BlobProviderArgs args) + protected virtual string GetContainerName(BlobProviderArgs args) { var configuration = args.Configuration.GetAwsConfiguration(); return configuration.ContainerName.IsNullOrWhiteSpace() ? args.ContainerName - : configuration.ContainerName; + : NormalizeContainerName(args, ServiceProvider, configuration.ContainerName); } } } diff --git a/framework/src/Volo.Abp.BlobStoring.Azure/Volo/Abp/BlobStoring/Azure/AzureBlobProvider.cs b/framework/src/Volo.Abp.BlobStoring.Azure/Volo/Abp/BlobStoring/Azure/AzureBlobProvider.cs index 3a9a062e76..58780c17b6 100644 --- a/framework/src/Volo.Abp.BlobStoring.Azure/Volo/Abp/BlobStoring/Azure/AzureBlobProvider.cs +++ b/framework/src/Volo.Abp.BlobStoring.Azure/Volo/Abp/BlobStoring/Azure/AzureBlobProvider.cs @@ -9,10 +9,12 @@ namespace Volo.Abp.BlobStoring.Azure public class AzureBlobProvider : BlobProviderBase, ITransientDependency { protected IAzureBlobNameCalculator AzureBlobNameCalculator { get; } + protected IServiceProvider ServiceProvider { get; } - public AzureBlobProvider(IAzureBlobNameCalculator azureBlobNameCalculator) + public AzureBlobProvider(IAzureBlobNameCalculator azureBlobNameCalculator, IServiceProvider serviceProvider) { AzureBlobNameCalculator = azureBlobNameCalculator; + ServiceProvider = serviceProvider; } public async override Task SaveAsync(BlobProviderSaveArgs args) @@ -87,22 +89,22 @@ namespace Volo.Abp.BlobStoring.Azure await blobContainerClient.CreateIfNotExistsAsync(); } - private async Task BlobExistsAsync(BlobProviderArgs args, string blobName) + protected virtual async Task BlobExistsAsync(BlobProviderArgs args, string blobName) { // Make sure Blob Container exists. return await ContainerExistsAsync(GetBlobContainerClient(args)) && (await GetBlobClient(args, blobName).ExistsAsync()).Value; } - private static string GetContainerName(BlobProviderArgs args) + protected virtual string GetContainerName(BlobProviderArgs args) { var configuration = args.Configuration.GetAzureConfiguration(); return configuration.ContainerName.IsNullOrWhiteSpace() ? args.ContainerName - : configuration.ContainerName; + : NormalizeContainerName(args, ServiceProvider, configuration.ContainerName); } - private static async Task ContainerExistsAsync(BlobContainerClient blobContainerClient) + protected virtual async Task ContainerExistsAsync(BlobContainerClient blobContainerClient) { return (await blobContainerClient.ExistsAsync()).Value; } diff --git a/framework/src/Volo.Abp.BlobStoring.Minio/Volo/Abp/BlobStoring/Minio/MinioBlobContainerConfigurationExtensions.cs b/framework/src/Volo.Abp.BlobStoring.Minio/Volo/Abp/BlobStoring/Minio/MinioBlobContainerConfigurationExtensions.cs index 3465914156..1449623ef4 100644 --- a/framework/src/Volo.Abp.BlobStoring.Minio/Volo/Abp/BlobStoring/Minio/MinioBlobContainerConfigurationExtensions.cs +++ b/framework/src/Volo.Abp.BlobStoring.Minio/Volo/Abp/BlobStoring/Minio/MinioBlobContainerConfigurationExtensions.cs @@ -15,6 +15,7 @@ namespace Volo.Abp.BlobStoring.Minio Action minioConfigureAction) { containerConfiguration.ProviderType = typeof(MinioBlobProvider); + containerConfiguration.NamingNormalizers.TryAdd(); minioConfigureAction(new MinioBlobProviderConfiguration(containerConfiguration)); diff --git a/framework/src/Volo.Abp.BlobStoring.Minio/Volo/Abp/BlobStoring/Minio/MinioBlobProvider.cs b/framework/src/Volo.Abp.BlobStoring.Minio/Volo/Abp/BlobStoring/Minio/MinioBlobProvider.cs index fca23324dc..f8f1a1e880 100644 --- a/framework/src/Volo.Abp.BlobStoring.Minio/Volo/Abp/BlobStoring/Minio/MinioBlobProvider.cs +++ b/framework/src/Volo.Abp.BlobStoring.Minio/Volo/Abp/BlobStoring/Minio/MinioBlobProvider.cs @@ -10,10 +10,12 @@ namespace Volo.Abp.BlobStoring.Minio public class MinioBlobProvider : BlobProviderBase, ITransientDependency { protected IMinioBlobNameCalculator MinioBlobNameCalculator { get; } + protected IServiceProvider ServiceProvider { get; } - public MinioBlobProvider(IMinioBlobNameCalculator minioBlobNameCalculator) + public MinioBlobProvider(IMinioBlobNameCalculator minioBlobNameCalculator, IServiceProvider serviceProvider) { MinioBlobNameCalculator = minioBlobNameCalculator; + ServiceProvider = serviceProvider; } public async override Task SaveAsync(BlobProviderSaveArgs args) @@ -108,7 +110,7 @@ namespace Volo.Abp.BlobStoring.Minio } } - private async Task BlobExistsAsync(MinioClient client, string containerName , string blobName) + protected virtual async Task BlobExistsAsync(MinioClient client, string containerName , string blobName) { // Make sure Blob Container exists. if (await client.BucketExistsAsync(containerName)) @@ -133,13 +135,13 @@ namespace Volo.Abp.BlobStoring.Minio return false; } - private static string GetContainerName(BlobProviderArgs args) + protected virtual string GetContainerName(BlobProviderArgs args) { var configuration = args.Configuration.GetMinioConfiguration(); return configuration.BucketName.IsNullOrWhiteSpace() ? args.ContainerName - : configuration.BucketName; + : NormalizeContainerName(args, ServiceProvider, configuration.BucketName); } } } diff --git a/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobProviderBase.cs b/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobProviderBase.cs index b1aafb6903..e0a798a7bb 100644 --- a/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobProviderBase.cs +++ b/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobProviderBase.cs @@ -1,5 +1,8 @@ -using System.IO; +using System; +using System.IO; +using System.Linq; using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; namespace Volo.Abp.BlobStoring { @@ -12,5 +15,27 @@ namespace Volo.Abp.BlobStoring public abstract Task ExistsAsync(BlobProviderExistsArgs args); public abstract Task GetOrNullAsync(BlobProviderGetArgs args); + + protected string NormalizeContainerName(BlobProviderArgs args, IServiceProvider serviceProvider, string containerName) + { + if (!args.Configuration.NamingNormalizers.Any()) + { + return containerName; + } + + using (var scope = serviceProvider.CreateScope()) + { + foreach (var normalizerType in args.Configuration.NamingNormalizers) + { + var normalizer = scope.ServiceProvider + .GetRequiredService(normalizerType) + .As(); + + containerName = normalizer.NormalizeContainerName(containerName); + } + + return containerName; + } + } } -} \ No newline at end of file +} From e457a7ede0ac34bdbd94d4fa96adf55b5c4b87b0 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Wed, 30 Dec 2020 17:37:34 +0800 Subject: [PATCH 002/472] Improved --- .../Abp/BlobStoring/Aliyun/AliyunBlobProviderConfiguration.cs | 2 +- .../Volo/Abp/BlobStoring/Aws/AwsBlobProviderConfiguration.cs | 2 +- .../Abp/BlobStoring/Azure/AzureBlobProviderConfiguration.cs | 2 +- .../Abp/BlobStoring/Minio/MinioBlobProviderConfiguration.cs | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/framework/src/Volo.Abp.BlobStoring.Aliyun/Volo/Abp/BlobStoring/Aliyun/AliyunBlobProviderConfiguration.cs b/framework/src/Volo.Abp.BlobStoring.Aliyun/Volo/Abp/BlobStoring/Aliyun/AliyunBlobProviderConfiguration.cs index 276cbd8fc7..6b83d9f7a9 100644 --- a/framework/src/Volo.Abp.BlobStoring.Aliyun/Volo/Abp/BlobStoring/Aliyun/AliyunBlobProviderConfiguration.cs +++ b/framework/src/Volo.Abp.BlobStoring.Aliyun/Volo/Abp/BlobStoring/Aliyun/AliyunBlobProviderConfiguration.cs @@ -82,7 +82,7 @@ namespace Volo.Abp.BlobStoring.Aliyun public string ContainerName { get => _containerConfiguration.GetConfigurationOrDefault(AliyunBlobProviderConfigurationNames.ContainerName); - set => _containerConfiguration.SetConfiguration(AliyunBlobProviderConfigurationNames.ContainerName, Check.NotNullOrWhiteSpace(value, nameof(value))); + set => _containerConfiguration.SetConfiguration(AliyunBlobProviderConfigurationNames.ContainerName, value); } /// diff --git a/framework/src/Volo.Abp.BlobStoring.Aws/Volo/Abp/BlobStoring/Aws/AwsBlobProviderConfiguration.cs b/framework/src/Volo.Abp.BlobStoring.Aws/Volo/Abp/BlobStoring/Aws/AwsBlobProviderConfiguration.cs index 2be373e428..86d127c0d9 100644 --- a/framework/src/Volo.Abp.BlobStoring.Aws/Volo/Abp/BlobStoring/Aws/AwsBlobProviderConfiguration.cs +++ b/framework/src/Volo.Abp.BlobStoring.Aws/Volo/Abp/BlobStoring/Aws/AwsBlobProviderConfiguration.cs @@ -82,7 +82,7 @@ namespace Volo.Abp.BlobStoring.Aws public string ContainerName { get => _containerConfiguration.GetConfigurationOrDefault(AwsBlobProviderConfigurationNames.ContainerName); - set => _containerConfiguration.SetConfiguration(AwsBlobProviderConfigurationNames.ContainerName, Check.NotNullOrWhiteSpace(value, nameof(value))); + set => _containerConfiguration.SetConfiguration(AwsBlobProviderConfigurationNames.ContainerName, value); } /// diff --git a/framework/src/Volo.Abp.BlobStoring.Azure/Volo/Abp/BlobStoring/Azure/AzureBlobProviderConfiguration.cs b/framework/src/Volo.Abp.BlobStoring.Azure/Volo/Abp/BlobStoring/Azure/AzureBlobProviderConfiguration.cs index 969057d7d6..8b409e008b 100644 --- a/framework/src/Volo.Abp.BlobStoring.Azure/Volo/Abp/BlobStoring/Azure/AzureBlobProviderConfiguration.cs +++ b/framework/src/Volo.Abp.BlobStoring.Azure/Volo/Abp/BlobStoring/Azure/AzureBlobProviderConfiguration.cs @@ -17,7 +17,7 @@ public string ContainerName { get => _containerConfiguration.GetConfigurationOrDefault(AzureBlobProviderConfigurationNames.ContainerName); - set => _containerConfiguration.SetConfiguration(AzureBlobProviderConfigurationNames.ContainerName, Check.NotNullOrWhiteSpace(value, nameof(value))); + set => _containerConfiguration.SetConfiguration(AzureBlobProviderConfigurationNames.ContainerName, value); } /// diff --git a/framework/src/Volo.Abp.BlobStoring.Minio/Volo/Abp/BlobStoring/Minio/MinioBlobProviderConfiguration.cs b/framework/src/Volo.Abp.BlobStoring.Minio/Volo/Abp/BlobStoring/Minio/MinioBlobProviderConfiguration.cs index 395aa76a72..fb510843e2 100644 --- a/framework/src/Volo.Abp.BlobStoring.Minio/Volo/Abp/BlobStoring/Minio/MinioBlobProviderConfiguration.cs +++ b/framework/src/Volo.Abp.BlobStoring.Minio/Volo/Abp/BlobStoring/Minio/MinioBlobProviderConfiguration.cs @@ -5,7 +5,7 @@ public string BucketName { get => _containerConfiguration.GetConfigurationOrDefault(MinioBlobProviderConfigurationNames.BucketName); - set => _containerConfiguration.SetConfiguration(MinioBlobProviderConfigurationNames.BucketName, Check.NotNullOrWhiteSpace(value, nameof(value))); + set => _containerConfiguration.SetConfiguration(MinioBlobProviderConfigurationNames.BucketName, value); } /// From 26fb70beee671bb273fcab961e6ff0bc1b14e5eb Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Wed, 30 Dec 2020 18:12:46 +0800 Subject: [PATCH 003/472] Make NormalizeContainerName mehtod virtual --- .../Volo/Abp/BlobStoring/BlobProviderBase.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobProviderBase.cs b/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobProviderBase.cs index e0a798a7bb..d96b6fa94b 100644 --- a/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobProviderBase.cs +++ b/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobProviderBase.cs @@ -16,7 +16,7 @@ namespace Volo.Abp.BlobStoring public abstract Task GetOrNullAsync(BlobProviderGetArgs args); - protected string NormalizeContainerName(BlobProviderArgs args, IServiceProvider serviceProvider, string containerName) + protected virtual string NormalizeContainerName(BlobProviderArgs args, IServiceProvider serviceProvider, string containerName) { if (!args.Configuration.NamingNormalizers.Any()) { From 243ee7229e53b930af34e36035d6380abfbdd907 Mon Sep 17 00:00:00 2001 From: enisn Date: Tue, 12 Jan 2021 11:37:15 +0300 Subject: [PATCH 004/472] CmsKit - Add blog entities --- .../Volo.CmsKit.Domain/Volo/CmsKit/Blogs/Blog.cs | 10 ++++++++++ .../Volo/CmsKit/Blogs/BlogPost.cs | 13 +++++++++++++ 2 files changed, 23 insertions(+) create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/Blog.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogPost.cs diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/Blog.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/Blog.cs new file mode 100644 index 0000000000..a7720d2a41 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/Blog.cs @@ -0,0 +1,10 @@ +using System; +using Volo.Abp.Domain.Entities.Auditing; + +namespace Volo.CmsKit.Domain.Volo.CmsKit.Blogs +{ + public class Blog : FullAuditedAggregateRoot + { + public string Name { get; set; } + } +} 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 new file mode 100644 index 0000000000..f15dd87f75 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogPost.cs @@ -0,0 +1,13 @@ +using System; +using Volo.Abp.Domain.Entities.Auditing; + +namespace Volo.CmsKit.Domain.Volo.CmsKit.Blogs +{ + public class BlogPost : FullAuditedEntity + { + public Guid BlogId { get; set; } + public string Title { get; set; } + public string CoverImageUrl { get; set; } + public bool IsPublished { get; set; } + } +} From 624c971e50744712e66f426e9e5ca26c2a3d549d Mon Sep 17 00:00:00 2001 From: enisn Date: Tue, 12 Jan 2021 11:37:31 +0300 Subject: [PATCH 005/472] CmsKit - Add BlogsFeature as global feature --- .../Volo/CmsKit/GlobalFeatures/BlogsFeature.cs | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/GlobalFeatures/BlogsFeature.cs diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/GlobalFeatures/BlogsFeature.cs b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/GlobalFeatures/BlogsFeature.cs new file mode 100644 index 0000000000..1b094ecf2d --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/GlobalFeatures/BlogsFeature.cs @@ -0,0 +1,17 @@ +using JetBrains.Annotations; +using Volo.Abp.GlobalFeatures; + +namespace Volo.CmsKit.GlobalFeatures +{ + [GlobalFeatureName(Name)] + public class BlogsFeature : GlobalFeature + { + public const string Name = "CmsKit.Blogs"; + + internal BlogsFeature( + [NotNull] GlobalCmsKitFeatures cmsKit + ) : base(cmsKit) + { + } + } +} From 8f29f3c267acd02e19d4d5642708e1f7eb1294d3 Mon Sep 17 00:00:00 2001 From: enisn Date: Tue, 12 Jan 2021 12:02:38 +0300 Subject: [PATCH 006/472] CmsKit - EfCore configuration of Blogs --- .../Volo/CmsKit/Blogs/BlogConsts.cs | 7 ++++ .../Volo/CmsKit/Blogs/BlogPostConsts.cs | 9 ++++ .../EntityFrameworkCore/CmsKitDbContext.cs | 3 ++ .../CmsKitDbContextModelCreatingExtensions.cs | 41 +++++++++++++++---- 4 files changed, 52 insertions(+), 8 deletions(-) create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Blogs/BlogConsts.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Blogs/BlogPostConsts.cs diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Blogs/BlogConsts.cs b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Blogs/BlogConsts.cs new file mode 100644 index 0000000000..e722d4656d --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Blogs/BlogConsts.cs @@ -0,0 +1,7 @@ +namespace Volo.CmsKit.Blogs +{ + public class BlogConsts + { + public static int MaxNameLength { get; set; } = 64; + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Blogs/BlogPostConsts.cs b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Blogs/BlogPostConsts.cs new file mode 100644 index 0000000000..1a4a657680 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Blogs/BlogPostConsts.cs @@ -0,0 +1,9 @@ +namespace Volo.CmsKit.Blogs +{ + public class BlogPostConsts + { + public static int MaxTitleLength { get; set; } = 256; + + public static int MaxCoverImageUrlLength { get; set; } = 2048; + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContext.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContext.cs index 0a4213e1b4..87ad080af6 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContext.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContext.cs @@ -3,6 +3,7 @@ using Volo.Abp.Data; using Volo.Abp.EntityFrameworkCore; using Volo.CmsKit.Comments; using Volo.CmsKit.Contents; +using Volo.CmsKit.Domain.Volo.CmsKit.Blogs; using Volo.CmsKit.Pages; using Volo.CmsKit.Ratings; using Volo.CmsKit.Reactions; @@ -22,6 +23,8 @@ namespace Volo.CmsKit.EntityFrameworkCore public DbSet Tags { get; set; } public DbSet EntityTags { get; set; } public DbSet Pages { get; set; } + public DbSet Blogs { get; set; } + public DbSet BlogPosts { get; set; } public CmsKitDbContext(DbContextOptions options) : base(options) diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs index 2cc5e8a52a..c7180fb098 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs @@ -13,6 +13,8 @@ using Volo.CmsKit.GlobalFeatures; using Volo.CmsKit.Pages; using Volo.CmsKit.Ratings; using Volo.CmsKit.Tags; +using Volo.CmsKit.Domain.Volo.CmsKit.Blogs; +using Volo.CmsKit.Blogs; namespace Volo.CmsKit.EntityFrameworkCore { @@ -58,8 +60,8 @@ namespace Volo.CmsKit.EntityFrameworkCore b.Property(x => x.EntityId).IsRequired().HasMaxLength(UserReactionConsts.MaxEntityIdLength); b.Property(x => x.ReactionName).IsRequired().HasMaxLength(UserReactionConsts.MaxReactionNameLength); - b.HasIndex(x => new {x.TenantId, x.EntityType, x.EntityId, x.ReactionName}); - b.HasIndex(x => new {x.TenantId, x.CreatorId, x.EntityType, x.EntityId, x.ReactionName}); + b.HasIndex(x => new { x.TenantId, x.EntityType, x.EntityId, x.ReactionName }); + b.HasIndex(x => new { x.TenantId, x.CreatorId, x.EntityType, x.EntityId, x.ReactionName }); }); } @@ -76,8 +78,8 @@ namespace Volo.CmsKit.EntityFrameworkCore b.Property(x => x.Text).IsRequired().HasMaxLength(CommentConsts.MaxTextLength); b.Property(x => x.RepliedCommentId); - b.HasIndex(x => new {x.TenantId, x.EntityType, x.EntityId}); - b.HasIndex(x => new {x.TenantId, x.RepliedCommentId}); + b.HasIndex(x => new { x.TenantId, x.EntityType, x.EntityId }); + b.HasIndex(x => new { x.TenantId, x.RepliedCommentId }); }); } @@ -173,7 +175,7 @@ namespace Volo.CmsKit.EntityFrameworkCore b.Property(x => x.EntityType).IsRequired().HasMaxLength(TagConsts.MaxEntityTypeLength); b.Property(x => x.Name).IsRequired().HasMaxLength(TagConsts.MaxNameLength); - b.HasIndex(x => new {x.TenantId, x.Name}); + b.HasIndex(x => new { x.TenantId, x.Name }); }); builder.Entity(b => @@ -182,12 +184,12 @@ namespace Volo.CmsKit.EntityFrameworkCore b.ConfigureByConvention(); - b.HasKey(x => new {x.EntityId, x.TagId}); + b.HasKey(x => new { x.EntityId, x.TagId }); b.Property(x => x.EntityId).IsRequired(); b.Property(x => x.TagId).IsRequired(); - b.HasIndex(x => new {x.TenantId, x.EntityId, x.TagId}); + b.HasIndex(x => new { x.TenantId, x.EntityId, x.TagId }); }); } @@ -203,7 +205,30 @@ namespace Volo.CmsKit.EntityFrameworkCore b.Property(x => x.Url).IsRequired().HasMaxLength(PageConsts.MaxUrlLength); b.Property(x => x.Description).HasMaxLength(PageConsts.MaxDescriptionLength); - b.HasIndex(x => new {x.TenantId, x.Url}); + b.HasIndex(x => new { x.TenantId, x.Url }); + }); + } + + if (GlobalFeatureManager.Instance.IsEnabled()) + { + builder.Entity(b => + { + b.ToTable(options.TablePrefix + "Blogs", options.Schema); + + b.ConfigureByConvention(); + + b.Property(p => p.Name).IsRequired().HasMaxLength(BlogConsts.MaxNameLength); + }); + + builder.Entity(b => + { + b.ToTable(options.TablePrefix + "BlogPosts", options.Schema); + + b.ConfigureByConvention(); + + b.Property(p => p.Title).IsRequired().HasMaxLength(BlogPostConsts.MaxTitleLength); + + b.Property(p => p.CoverImageUrl).HasMaxLength(BlogPostConsts.MaxCoverImageUrlLength); }); } } From 76cdea1e5802e52acd8204ba977c345df8e2397e Mon Sep 17 00:00:00 2001 From: enisn Date: Tue, 12 Jan 2021 12:09:38 +0300 Subject: [PATCH 007/472] CmsKit - Blog mongodb configuration --- .../Volo/CmsKit/MongoDB/CmsKitMongoDbContext.cs | 5 +++++ .../MongoDB/CmsKitMongoDbContextExtensions.cs | 11 +++++++++++ .../Volo/CmsKit/MongoDB/ICmsKitMongoDbContext.cs | 15 ++++++++++----- 3 files changed, 26 insertions(+), 5 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContext.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContext.cs index c61d8d9a13..45f3275acc 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContext.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContext.cs @@ -3,6 +3,7 @@ using Volo.Abp.Data; using Volo.Abp.MongoDB; using Volo.CmsKit.Comments; using Volo.CmsKit.Contents; +using Volo.CmsKit.Domain.Volo.CmsKit.Blogs; using Volo.CmsKit.Pages; using Volo.CmsKit.Ratings; using Volo.CmsKit.Reactions; @@ -31,6 +32,10 @@ namespace Volo.CmsKit.MongoDB public IMongoCollection Pages => Collection(); + public IMongoCollection Blogs => Collection(); + + public IMongoCollection BlogPosts => Collection(); + protected override void CreateModel(IMongoModelBuilder modelBuilder) { base.CreateModel(modelBuilder); diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContextExtensions.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContextExtensions.cs index 7f6dcfecf3..3d718d6955 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContextExtensions.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContextExtensions.cs @@ -3,6 +3,7 @@ using Volo.Abp; using Volo.Abp.MongoDB; using Volo.CmsKit.Comments; using Volo.CmsKit.Contents; +using Volo.CmsKit.Domain.Volo.CmsKit.Blogs; using Volo.CmsKit.Pages; using Volo.CmsKit.Ratings; using Volo.CmsKit.Reactions; @@ -64,6 +65,16 @@ namespace Volo.CmsKit.MongoDB { x.CollectionName = CmsKitDbProperties.DbTablePrefix + "Pages"; }); + + builder.Entity(x => + { + x.CollectionName = CmsKitDbProperties.DbTablePrefix + "Blogs"; + }); + + builder.Entity(x => + { + x.CollectionName = CmsKitDbProperties.DbTablePrefix + "BlogPosts"; + }); } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/ICmsKitMongoDbContext.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/ICmsKitMongoDbContext.cs index d33a5ee371..4fcdea7d55 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/ICmsKitMongoDbContext.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/ICmsKitMongoDbContext.cs @@ -3,6 +3,7 @@ using Volo.Abp.Data; using Volo.Abp.MongoDB; using Volo.CmsKit.Comments; using Volo.CmsKit.Contents; +using Volo.CmsKit.Domain.Volo.CmsKit.Blogs; using Volo.CmsKit.Pages; using Volo.CmsKit.Ratings; using Volo.CmsKit.Reactions; @@ -20,15 +21,19 @@ namespace Volo.CmsKit.MongoDB IMongoCollection Comments { get; } IMongoCollection CmsUsers { get; } - + IMongoCollection Ratings { get; } - + IMongoCollection Contents { get; } - + IMongoCollection Tags { get; } - + IMongoCollection EntityTags { get; } - + IMongoCollection Pages { get; } + + IMongoCollection Blogs { get; } + + IMongoCollection BlogPosts { get; } } } From 69a613d3f74b6d9ca4c0dfbfc066af55ef6ab0fe Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Thu, 14 Jan 2021 12:11:38 +0800 Subject: [PATCH 008/472] Add IBlobNormalizeNamingFactory --- .../BlobStoring/Aliyun/AliyunBlobProvider.cs | 8 +-- .../Abp/BlobStoring/Aws/AwsBlobProvider.cs | 8 +-- .../BlobStoring/Azure/AzureBlobProvider.cs | 10 +-- .../BlobStoring/Minio/MinioBlobProvider.cs | 10 +-- .../Volo/Abp/BlobStoring/BlobContainer.cs | 37 +++-------- .../Abp/BlobStoring/BlobContainerFactory.cs | 7 +- .../BlobStoring/BlobNormalizeNamingFactory.cs | 64 +++++++++++++++++++ .../Volo/Abp/BlobStoring/BlobProviderBase.cs | 27 +------- .../IBlobNormalizeNamingFactory.cs | 11 ++++ 9 files changed, 110 insertions(+), 72 deletions(-) create mode 100644 framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobNormalizeNamingFactory.cs create mode 100644 framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/IBlobNormalizeNamingFactory.cs diff --git a/framework/src/Volo.Abp.BlobStoring.Aliyun/Volo/Abp/BlobStoring/Aliyun/AliyunBlobProvider.cs b/framework/src/Volo.Abp.BlobStoring.Aliyun/Volo/Abp/BlobStoring/Aliyun/AliyunBlobProvider.cs index 199c343659..52d8674c67 100644 --- a/framework/src/Volo.Abp.BlobStoring.Aliyun/Volo/Abp/BlobStoring/Aliyun/AliyunBlobProvider.cs +++ b/framework/src/Volo.Abp.BlobStoring.Aliyun/Volo/Abp/BlobStoring/Aliyun/AliyunBlobProvider.cs @@ -10,16 +10,16 @@ namespace Volo.Abp.BlobStoring.Aliyun { protected IOssClientFactory OssClientFactory { get; } protected IAliyunBlobNameCalculator AliyunBlobNameCalculator { get; } - protected IServiceProvider ServiceProvider { get; } + protected IBlobNormalizeNamingFactory BlobNormalizeNamingFactory { get; } public AliyunBlobProvider( IOssClientFactory ossClientFactory, IAliyunBlobNameCalculator aliyunBlobNameCalculator, - IServiceProvider serviceProvider) + IBlobNormalizeNamingFactory blobNormalizeNamingFactory) { OssClientFactory = ossClientFactory; AliyunBlobNameCalculator = aliyunBlobNameCalculator; - ServiceProvider = serviceProvider; + BlobNormalizeNamingFactory = blobNormalizeNamingFactory; } protected virtual IOss GetOssClient(BlobContainerConfiguration blobContainerConfiguration) @@ -96,7 +96,7 @@ namespace Volo.Abp.BlobStoring.Aliyun var configuration = args.Configuration.GetAliyunConfiguration(); return configuration.ContainerName.IsNullOrWhiteSpace() ? args.ContainerName - : NormalizeContainerName(args, ServiceProvider, configuration.ContainerName); + : BlobNormalizeNamingFactory.NormalizeContainerName(args.Configuration, configuration.ContainerName); } protected virtual bool BlobExists(IOss ossClient,string containerName, string blobName) diff --git a/framework/src/Volo.Abp.BlobStoring.Aws/Volo/Abp/BlobStoring/Aws/AwsBlobProvider.cs b/framework/src/Volo.Abp.BlobStoring.Aws/Volo/Abp/BlobStoring/Aws/AwsBlobProvider.cs index dbf2ce3848..991be2b37c 100644 --- a/framework/src/Volo.Abp.BlobStoring.Aws/Volo/Abp/BlobStoring/Aws/AwsBlobProvider.cs +++ b/framework/src/Volo.Abp.BlobStoring.Aws/Volo/Abp/BlobStoring/Aws/AwsBlobProvider.cs @@ -12,16 +12,16 @@ namespace Volo.Abp.BlobStoring.Aws { protected IAwsBlobNameCalculator AwsBlobNameCalculator { get; } protected IAmazonS3ClientFactory AmazonS3ClientFactory { get; } - protected IServiceProvider ServiceProvider { get; } + protected IBlobNormalizeNamingFactory BlobNormalizeNamingFactory { get; } public AwsBlobProvider( IAwsBlobNameCalculator awsBlobNameCalculator, IAmazonS3ClientFactory amazonS3ClientFactory, - IServiceProvider serviceProvider) + IBlobNormalizeNamingFactory blobNormalizeNamingFactory) { AwsBlobNameCalculator = awsBlobNameCalculator; AmazonS3ClientFactory = amazonS3ClientFactory; - ServiceProvider = serviceProvider; + BlobNormalizeNamingFactory = blobNormalizeNamingFactory; } public async override Task SaveAsync(BlobProviderSaveArgs args) @@ -156,7 +156,7 @@ namespace Volo.Abp.BlobStoring.Aws var configuration = args.Configuration.GetAwsConfiguration(); return configuration.ContainerName.IsNullOrWhiteSpace() ? args.ContainerName - : NormalizeContainerName(args, ServiceProvider, configuration.ContainerName); + : BlobNormalizeNamingFactory.NormalizeContainerName(args.Configuration, configuration.ContainerName); } } } diff --git a/framework/src/Volo.Abp.BlobStoring.Azure/Volo/Abp/BlobStoring/Azure/AzureBlobProvider.cs b/framework/src/Volo.Abp.BlobStoring.Azure/Volo/Abp/BlobStoring/Azure/AzureBlobProvider.cs index 58780c17b6..8e401b73c7 100644 --- a/framework/src/Volo.Abp.BlobStoring.Azure/Volo/Abp/BlobStoring/Azure/AzureBlobProvider.cs +++ b/framework/src/Volo.Abp.BlobStoring.Azure/Volo/Abp/BlobStoring/Azure/AzureBlobProvider.cs @@ -9,12 +9,14 @@ namespace Volo.Abp.BlobStoring.Azure public class AzureBlobProvider : BlobProviderBase, ITransientDependency { protected IAzureBlobNameCalculator AzureBlobNameCalculator { get; } - protected IServiceProvider ServiceProvider { get; } + protected IBlobNormalizeNamingFactory BlobNormalizeNamingFactory { get; } - public AzureBlobProvider(IAzureBlobNameCalculator azureBlobNameCalculator, IServiceProvider serviceProvider) + public AzureBlobProvider( + IAzureBlobNameCalculator azureBlobNameCalculator, + IBlobNormalizeNamingFactory blobNormalizeNamingFactory) { AzureBlobNameCalculator = azureBlobNameCalculator; - ServiceProvider = serviceProvider; + BlobNormalizeNamingFactory = blobNormalizeNamingFactory; } public async override Task SaveAsync(BlobProviderSaveArgs args) @@ -101,7 +103,7 @@ namespace Volo.Abp.BlobStoring.Azure var configuration = args.Configuration.GetAzureConfiguration(); return configuration.ContainerName.IsNullOrWhiteSpace() ? args.ContainerName - : NormalizeContainerName(args, ServiceProvider, configuration.ContainerName); + : BlobNormalizeNamingFactory.NormalizeContainerName(args.Configuration, configuration.ContainerName); } protected virtual async Task ContainerExistsAsync(BlobContainerClient blobContainerClient) diff --git a/framework/src/Volo.Abp.BlobStoring.Minio/Volo/Abp/BlobStoring/Minio/MinioBlobProvider.cs b/framework/src/Volo.Abp.BlobStoring.Minio/Volo/Abp/BlobStoring/Minio/MinioBlobProvider.cs index f8f1a1e880..a182478017 100644 --- a/framework/src/Volo.Abp.BlobStoring.Minio/Volo/Abp/BlobStoring/Minio/MinioBlobProvider.cs +++ b/framework/src/Volo.Abp.BlobStoring.Minio/Volo/Abp/BlobStoring/Minio/MinioBlobProvider.cs @@ -10,12 +10,14 @@ namespace Volo.Abp.BlobStoring.Minio public class MinioBlobProvider : BlobProviderBase, ITransientDependency { protected IMinioBlobNameCalculator MinioBlobNameCalculator { get; } - protected IServiceProvider ServiceProvider { get; } + protected IBlobNormalizeNamingFactory BlobNormalizeNamingFactory { get; } - public MinioBlobProvider(IMinioBlobNameCalculator minioBlobNameCalculator, IServiceProvider serviceProvider) + public MinioBlobProvider( + IMinioBlobNameCalculator minioBlobNameCalculator, + IBlobNormalizeNamingFactory blobNormalizeNamingFactory) { MinioBlobNameCalculator = minioBlobNameCalculator; - ServiceProvider = serviceProvider; + BlobNormalizeNamingFactory = blobNormalizeNamingFactory; } public async override Task SaveAsync(BlobProviderSaveArgs args) @@ -141,7 +143,7 @@ namespace Volo.Abp.BlobStoring.Minio return configuration.BucketName.IsNullOrWhiteSpace() ? args.ContainerName - : NormalizeContainerName(args, ServiceProvider, configuration.BucketName); + : BlobNormalizeNamingFactory.NormalizeContainerName(args.Configuration, configuration.BucketName); } } } diff --git a/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobContainer.cs b/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobContainer.cs index cd2287e964..a95cdcadbe 100644 --- a/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobContainer.cs +++ b/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobContainer.cs @@ -1,9 +1,7 @@ using System; using System.IO; -using System.Linq; using System.Threading; using System.Threading.Tasks; -using Microsoft.Extensions.DependencyInjection; using Volo.Abp.MultiTenancy; using Volo.Abp.Threading; @@ -88,12 +86,15 @@ namespace Volo.Abp.BlobStoring protected IServiceProvider ServiceProvider { get; } + protected IBlobNormalizeNamingFactory BlobNormalizeNamingFactory { get; } + public BlobContainer( string containerName, BlobContainerConfiguration configuration, IBlobProvider provider, ICurrentTenant currentTenant, ICancellationTokenProvider cancellationTokenProvider, + IBlobNormalizeNamingFactory blobNormalizeNamingFactory, IServiceProvider serviceProvider) { ContainerName = containerName; @@ -101,6 +102,7 @@ namespace Volo.Abp.BlobStoring Provider = provider; CurrentTenant = currentTenant; CancellationTokenProvider = cancellationTokenProvider; + BlobNormalizeNamingFactory = blobNormalizeNamingFactory; ServiceProvider = serviceProvider; } @@ -112,7 +114,7 @@ namespace Volo.Abp.BlobStoring { using (CurrentTenant.Change(GetTenantIdOrNull())) { - var (normalizedContainerName, normalizedBlobName) = NormalizeNaming(ContainerName, name); + var (normalizedContainerName, normalizedBlobName) = BlobNormalizeNamingFactory.NormalizeNaming(Configuration, ContainerName, name); await Provider.SaveAsync( new BlobProviderSaveArgs( @@ -134,7 +136,7 @@ namespace Volo.Abp.BlobStoring using (CurrentTenant.Change(GetTenantIdOrNull())) { var (normalizedContainerName, normalizedBlobName) = - NormalizeNaming(ContainerName, name); + BlobNormalizeNamingFactory.NormalizeNaming(Configuration, ContainerName, name); return await Provider.DeleteAsync( new BlobProviderDeleteArgs( @@ -154,7 +156,7 @@ namespace Volo.Abp.BlobStoring using (CurrentTenant.Change(GetTenantIdOrNull())) { var (normalizedContainerName, normalizedBlobName) = - NormalizeNaming(ContainerName, name); + BlobNormalizeNamingFactory.NormalizeNaming(Configuration, ContainerName, name); return await Provider.ExistsAsync( new BlobProviderExistsArgs( @@ -190,7 +192,7 @@ namespace Volo.Abp.BlobStoring using (CurrentTenant.Change(GetTenantIdOrNull())) { var (normalizedContainerName, normalizedBlobName) = - NormalizeNaming(ContainerName, name); + BlobNormalizeNamingFactory.NormalizeNaming(Configuration, ContainerName, name); return await Provider.GetOrNullAsync( new BlobProviderGetArgs( @@ -212,28 +214,5 @@ namespace Volo.Abp.BlobStoring return CurrentTenant.Id; } - - protected virtual (string, string) NormalizeNaming(string containerName, string blobName) - { - if (!Configuration.NamingNormalizers.Any()) - { - return (containerName, blobName); - } - - using (var scope = ServiceProvider.CreateScope()) - { - foreach (var normalizerType in Configuration.NamingNormalizers) - { - var normalizer = scope.ServiceProvider - .GetRequiredService(normalizerType) - .As(); - - containerName = normalizer.NormalizeContainerName(containerName); - blobName = normalizer.NormalizeBlobName(blobName); - } - - return (containerName, blobName); - } - } } } diff --git a/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobContainerFactory.cs b/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobContainerFactory.cs index 7a4da39ef9..8013762164 100644 --- a/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobContainerFactory.cs +++ b/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobContainerFactory.cs @@ -17,18 +17,22 @@ namespace Volo.Abp.BlobStoring protected IServiceProvider ServiceProvider { get; } + protected IBlobNormalizeNamingFactory BlobNormalizeNamingFactory { get; } + public BlobContainerFactory( IBlobContainerConfigurationProvider configurationProvider, ICurrentTenant currentTenant, ICancellationTokenProvider cancellationTokenProvider, IBlobProviderSelector providerSelector, - IServiceProvider serviceProvider) + IServiceProvider serviceProvider, + IBlobNormalizeNamingFactory blobNormalizeNamingFactory) { ConfigurationProvider = configurationProvider; CurrentTenant = currentTenant; CancellationTokenProvider = cancellationTokenProvider; ProviderSelector = providerSelector; ServiceProvider = serviceProvider; + BlobNormalizeNamingFactory = blobNormalizeNamingFactory; } public virtual IBlobContainer Create(string name) @@ -41,6 +45,7 @@ namespace Volo.Abp.BlobStoring ProviderSelector.Get(name), CurrentTenant, CancellationTokenProvider, + BlobNormalizeNamingFactory, ServiceProvider ); } diff --git a/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobNormalizeNamingFactory.cs b/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobNormalizeNamingFactory.cs new file mode 100644 index 0000000000..cafba9bec2 --- /dev/null +++ b/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobNormalizeNamingFactory.cs @@ -0,0 +1,64 @@ +using System; +using System.Linq; +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.BlobStoring +{ + public class BlobNormalizeNamingFactory : IBlobNormalizeNamingFactory, ITransientDependency + { + protected IServiceProvider ServiceProvider { get; } + + public BlobNormalizeNamingFactory(IServiceProvider serviceProvider) + { + ServiceProvider = serviceProvider; + } + + public (string containerName, string blobName) NormalizeNaming( + BlobContainerConfiguration configuration, + string containerName, + string blobName) + { + + if (!configuration.NamingNormalizers.Any()) + { + return (containerName, blobName); + } + + using (var scope = ServiceProvider.CreateScope()) + { + foreach (var normalizerType in configuration.NamingNormalizers) + { + var normalizer = scope.ServiceProvider + .GetRequiredService(normalizerType) + .As(); + + containerName = containerName.IsNullOrWhiteSpace()? containerName: normalizer.NormalizeContainerName(containerName); + blobName = blobName.IsNullOrWhiteSpace()? blobName: normalizer.NormalizeBlobName(blobName); + } + + return (containerName, blobName); + } + } + + public string NormalizeContainerName(BlobContainerConfiguration configuration, string containerName) + { + if (!configuration.NamingNormalizers.Any()) + { + return containerName; + } + + return NormalizeNaming(configuration, containerName, null).containerName; + } + + public string NormalizeBlobName(BlobContainerConfiguration configuration, string blobName) + { + if (!configuration.NamingNormalizers.Any()) + { + return blobName; + } + + return NormalizeNaming(configuration, null, blobName).blobName; + } + } +} diff --git a/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobProviderBase.cs b/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobProviderBase.cs index d96b6fa94b..ea2bd1ed72 100644 --- a/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobProviderBase.cs +++ b/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobProviderBase.cs @@ -1,8 +1,5 @@ -using System; -using System.IO; -using System.Linq; +using System.IO; using System.Threading.Tasks; -using Microsoft.Extensions.DependencyInjection; namespace Volo.Abp.BlobStoring { @@ -15,27 +12,5 @@ namespace Volo.Abp.BlobStoring public abstract Task ExistsAsync(BlobProviderExistsArgs args); public abstract Task GetOrNullAsync(BlobProviderGetArgs args); - - protected virtual string NormalizeContainerName(BlobProviderArgs args, IServiceProvider serviceProvider, string containerName) - { - if (!args.Configuration.NamingNormalizers.Any()) - { - return containerName; - } - - using (var scope = serviceProvider.CreateScope()) - { - foreach (var normalizerType in args.Configuration.NamingNormalizers) - { - var normalizer = scope.ServiceProvider - .GetRequiredService(normalizerType) - .As(); - - containerName = normalizer.NormalizeContainerName(containerName); - } - - return containerName; - } - } } } diff --git a/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/IBlobNormalizeNamingFactory.cs b/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/IBlobNormalizeNamingFactory.cs new file mode 100644 index 0000000000..281196051d --- /dev/null +++ b/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/IBlobNormalizeNamingFactory.cs @@ -0,0 +1,11 @@ +namespace Volo.Abp.BlobStoring +{ + public interface IBlobNormalizeNamingFactory + { + (string containerName, string blobName) NormalizeNaming(BlobContainerConfiguration configuration, string containerName, string blobName); + + string NormalizeContainerName(BlobContainerConfiguration configuration, string containerName); + + string NormalizeBlobName(BlobContainerConfiguration configuration, string blobName); + } +} From d980ca961dfe4ea08c5986f123212ba8f986c003 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Thu, 14 Jan 2021 13:46:09 +0800 Subject: [PATCH 009/472] Rename IBlobNormalizeNamingFactory to IBlobNormalizeNamingService --- .../BlobStoring/Aliyun/AliyunBlobProvider.cs | 8 ++--- .../Abp/BlobStoring/Aws/AwsBlobProvider.cs | 8 ++--- .../BlobStoring/Azure/AzureBlobProvider.cs | 8 ++--- .../BlobStoring/Minio/MinioBlobProvider.cs | 8 ++--- .../Volo/Abp/BlobStoring/BlobContainer.cs | 36 +++++++++---------- .../Abp/BlobStoring/BlobContainerFactory.cs | 8 ++--- .../Abp/BlobStoring/BlobNormalizeNaming.cs | 15 ++++++++ ...ctory.cs => BlobNormalizeNamingService.cs} | 14 ++++---- ...tory.cs => IBlobNormalizeNamingService.cs} | 4 +-- 9 files changed, 62 insertions(+), 47 deletions(-) create mode 100644 framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobNormalizeNaming.cs rename framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/{BlobNormalizeNamingFactory.cs => BlobNormalizeNamingService.cs} (81%) rename framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/{IBlobNormalizeNamingFactory.cs => IBlobNormalizeNamingService.cs} (55%) diff --git a/framework/src/Volo.Abp.BlobStoring.Aliyun/Volo/Abp/BlobStoring/Aliyun/AliyunBlobProvider.cs b/framework/src/Volo.Abp.BlobStoring.Aliyun/Volo/Abp/BlobStoring/Aliyun/AliyunBlobProvider.cs index 52d8674c67..b06377245c 100644 --- a/framework/src/Volo.Abp.BlobStoring.Aliyun/Volo/Abp/BlobStoring/Aliyun/AliyunBlobProvider.cs +++ b/framework/src/Volo.Abp.BlobStoring.Aliyun/Volo/Abp/BlobStoring/Aliyun/AliyunBlobProvider.cs @@ -10,16 +10,16 @@ namespace Volo.Abp.BlobStoring.Aliyun { protected IOssClientFactory OssClientFactory { get; } protected IAliyunBlobNameCalculator AliyunBlobNameCalculator { get; } - protected IBlobNormalizeNamingFactory BlobNormalizeNamingFactory { get; } + protected IBlobNormalizeNamingService BlobNormalizeNamingService { get; } public AliyunBlobProvider( IOssClientFactory ossClientFactory, IAliyunBlobNameCalculator aliyunBlobNameCalculator, - IBlobNormalizeNamingFactory blobNormalizeNamingFactory) + IBlobNormalizeNamingService blobNormalizeNamingService) { OssClientFactory = ossClientFactory; AliyunBlobNameCalculator = aliyunBlobNameCalculator; - BlobNormalizeNamingFactory = blobNormalizeNamingFactory; + BlobNormalizeNamingService = blobNormalizeNamingService; } protected virtual IOss GetOssClient(BlobContainerConfiguration blobContainerConfiguration) @@ -96,7 +96,7 @@ namespace Volo.Abp.BlobStoring.Aliyun var configuration = args.Configuration.GetAliyunConfiguration(); return configuration.ContainerName.IsNullOrWhiteSpace() ? args.ContainerName - : BlobNormalizeNamingFactory.NormalizeContainerName(args.Configuration, configuration.ContainerName); + : BlobNormalizeNamingService.NormalizeContainerName(args.Configuration, configuration.ContainerName); } protected virtual bool BlobExists(IOss ossClient,string containerName, string blobName) diff --git a/framework/src/Volo.Abp.BlobStoring.Aws/Volo/Abp/BlobStoring/Aws/AwsBlobProvider.cs b/framework/src/Volo.Abp.BlobStoring.Aws/Volo/Abp/BlobStoring/Aws/AwsBlobProvider.cs index 991be2b37c..939e91f4ef 100644 --- a/framework/src/Volo.Abp.BlobStoring.Aws/Volo/Abp/BlobStoring/Aws/AwsBlobProvider.cs +++ b/framework/src/Volo.Abp.BlobStoring.Aws/Volo/Abp/BlobStoring/Aws/AwsBlobProvider.cs @@ -12,16 +12,16 @@ namespace Volo.Abp.BlobStoring.Aws { protected IAwsBlobNameCalculator AwsBlobNameCalculator { get; } protected IAmazonS3ClientFactory AmazonS3ClientFactory { get; } - protected IBlobNormalizeNamingFactory BlobNormalizeNamingFactory { get; } + protected IBlobNormalizeNamingService BlobNormalizeNamingService { get; } public AwsBlobProvider( IAwsBlobNameCalculator awsBlobNameCalculator, IAmazonS3ClientFactory amazonS3ClientFactory, - IBlobNormalizeNamingFactory blobNormalizeNamingFactory) + IBlobNormalizeNamingService blobNormalizeNamingService) { AwsBlobNameCalculator = awsBlobNameCalculator; AmazonS3ClientFactory = amazonS3ClientFactory; - BlobNormalizeNamingFactory = blobNormalizeNamingFactory; + BlobNormalizeNamingService = blobNormalizeNamingService; } public async override Task SaveAsync(BlobProviderSaveArgs args) @@ -156,7 +156,7 @@ namespace Volo.Abp.BlobStoring.Aws var configuration = args.Configuration.GetAwsConfiguration(); return configuration.ContainerName.IsNullOrWhiteSpace() ? args.ContainerName - : BlobNormalizeNamingFactory.NormalizeContainerName(args.Configuration, configuration.ContainerName); + : BlobNormalizeNamingService.NormalizeContainerName(args.Configuration, configuration.ContainerName); } } } diff --git a/framework/src/Volo.Abp.BlobStoring.Azure/Volo/Abp/BlobStoring/Azure/AzureBlobProvider.cs b/framework/src/Volo.Abp.BlobStoring.Azure/Volo/Abp/BlobStoring/Azure/AzureBlobProvider.cs index 8e401b73c7..b43e7eb030 100644 --- a/framework/src/Volo.Abp.BlobStoring.Azure/Volo/Abp/BlobStoring/Azure/AzureBlobProvider.cs +++ b/framework/src/Volo.Abp.BlobStoring.Azure/Volo/Abp/BlobStoring/Azure/AzureBlobProvider.cs @@ -9,14 +9,14 @@ namespace Volo.Abp.BlobStoring.Azure public class AzureBlobProvider : BlobProviderBase, ITransientDependency { protected IAzureBlobNameCalculator AzureBlobNameCalculator { get; } - protected IBlobNormalizeNamingFactory BlobNormalizeNamingFactory { get; } + protected IBlobNormalizeNamingService BlobNormalizeNamingService { get; } public AzureBlobProvider( IAzureBlobNameCalculator azureBlobNameCalculator, - IBlobNormalizeNamingFactory blobNormalizeNamingFactory) + IBlobNormalizeNamingService blobNormalizeNamingService) { AzureBlobNameCalculator = azureBlobNameCalculator; - BlobNormalizeNamingFactory = blobNormalizeNamingFactory; + BlobNormalizeNamingService = blobNormalizeNamingService; } public async override Task SaveAsync(BlobProviderSaveArgs args) @@ -103,7 +103,7 @@ namespace Volo.Abp.BlobStoring.Azure var configuration = args.Configuration.GetAzureConfiguration(); return configuration.ContainerName.IsNullOrWhiteSpace() ? args.ContainerName - : BlobNormalizeNamingFactory.NormalizeContainerName(args.Configuration, configuration.ContainerName); + : BlobNormalizeNamingService.NormalizeContainerName(args.Configuration, configuration.ContainerName); } protected virtual async Task ContainerExistsAsync(BlobContainerClient blobContainerClient) diff --git a/framework/src/Volo.Abp.BlobStoring.Minio/Volo/Abp/BlobStoring/Minio/MinioBlobProvider.cs b/framework/src/Volo.Abp.BlobStoring.Minio/Volo/Abp/BlobStoring/Minio/MinioBlobProvider.cs index a182478017..057e4ea0ba 100644 --- a/framework/src/Volo.Abp.BlobStoring.Minio/Volo/Abp/BlobStoring/Minio/MinioBlobProvider.cs +++ b/framework/src/Volo.Abp.BlobStoring.Minio/Volo/Abp/BlobStoring/Minio/MinioBlobProvider.cs @@ -10,14 +10,14 @@ namespace Volo.Abp.BlobStoring.Minio public class MinioBlobProvider : BlobProviderBase, ITransientDependency { protected IMinioBlobNameCalculator MinioBlobNameCalculator { get; } - protected IBlobNormalizeNamingFactory BlobNormalizeNamingFactory { get; } + protected IBlobNormalizeNamingService BlobNormalizeNamingService { get; } public MinioBlobProvider( IMinioBlobNameCalculator minioBlobNameCalculator, - IBlobNormalizeNamingFactory blobNormalizeNamingFactory) + IBlobNormalizeNamingService blobNormalizeNamingService) { MinioBlobNameCalculator = minioBlobNameCalculator; - BlobNormalizeNamingFactory = blobNormalizeNamingFactory; + BlobNormalizeNamingService = blobNormalizeNamingService; } public async override Task SaveAsync(BlobProviderSaveArgs args) @@ -143,7 +143,7 @@ namespace Volo.Abp.BlobStoring.Minio return configuration.BucketName.IsNullOrWhiteSpace() ? args.ContainerName - : BlobNormalizeNamingFactory.NormalizeContainerName(args.Configuration, configuration.BucketName); + : BlobNormalizeNamingService.NormalizeContainerName(args.Configuration, configuration.BucketName); } } } diff --git a/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobContainer.cs b/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobContainer.cs index a95cdcadbe..c4d45b840a 100644 --- a/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobContainer.cs +++ b/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobContainer.cs @@ -86,7 +86,7 @@ namespace Volo.Abp.BlobStoring protected IServiceProvider ServiceProvider { get; } - protected IBlobNormalizeNamingFactory BlobNormalizeNamingFactory { get; } + protected IBlobNormalizeNamingService BlobNormalizeNamingService { get; } public BlobContainer( string containerName, @@ -94,7 +94,7 @@ namespace Volo.Abp.BlobStoring IBlobProvider provider, ICurrentTenant currentTenant, ICancellationTokenProvider cancellationTokenProvider, - IBlobNormalizeNamingFactory blobNormalizeNamingFactory, + IBlobNormalizeNamingService blobNormalizeNamingService, IServiceProvider serviceProvider) { ContainerName = containerName; @@ -102,7 +102,7 @@ namespace Volo.Abp.BlobStoring Provider = provider; CurrentTenant = currentTenant; CancellationTokenProvider = cancellationTokenProvider; - BlobNormalizeNamingFactory = blobNormalizeNamingFactory; + BlobNormalizeNamingService = blobNormalizeNamingService; ServiceProvider = serviceProvider; } @@ -114,13 +114,13 @@ namespace Volo.Abp.BlobStoring { using (CurrentTenant.Change(GetTenantIdOrNull())) { - var (normalizedContainerName, normalizedBlobName) = BlobNormalizeNamingFactory.NormalizeNaming(Configuration, ContainerName, name); + var blobNormalizeNaming = BlobNormalizeNamingService.NormalizeNaming(Configuration, ContainerName, name); await Provider.SaveAsync( new BlobProviderSaveArgs( - normalizedContainerName, + blobNormalizeNaming.ContainerName, Configuration, - normalizedBlobName, + blobNormalizeNaming.BlobName, stream, overrideExisting, CancellationTokenProvider.FallbackToProvider(cancellationToken) @@ -135,14 +135,14 @@ namespace Volo.Abp.BlobStoring { using (CurrentTenant.Change(GetTenantIdOrNull())) { - var (normalizedContainerName, normalizedBlobName) = - BlobNormalizeNamingFactory.NormalizeNaming(Configuration, ContainerName, name); + var blobNormalizeNaming = + BlobNormalizeNamingService.NormalizeNaming(Configuration, ContainerName, name); return await Provider.DeleteAsync( new BlobProviderDeleteArgs( - normalizedContainerName, + blobNormalizeNaming.ContainerName, Configuration, - normalizedBlobName, + blobNormalizeNaming.BlobName, CancellationTokenProvider.FallbackToProvider(cancellationToken) ) ); @@ -155,14 +155,14 @@ namespace Volo.Abp.BlobStoring { using (CurrentTenant.Change(GetTenantIdOrNull())) { - var (normalizedContainerName, normalizedBlobName) = - BlobNormalizeNamingFactory.NormalizeNaming(Configuration, ContainerName, name); + var blobNormalizeNaming = + BlobNormalizeNamingService.NormalizeNaming(Configuration, ContainerName, name); return await Provider.ExistsAsync( new BlobProviderExistsArgs( - normalizedContainerName, + blobNormalizeNaming.ContainerName, Configuration, - normalizedBlobName, + blobNormalizeNaming.BlobName, CancellationTokenProvider.FallbackToProvider(cancellationToken) ) ); @@ -191,14 +191,14 @@ namespace Volo.Abp.BlobStoring { using (CurrentTenant.Change(GetTenantIdOrNull())) { - var (normalizedContainerName, normalizedBlobName) = - BlobNormalizeNamingFactory.NormalizeNaming(Configuration, ContainerName, name); + var blobNormalizeNaming = + BlobNormalizeNamingService.NormalizeNaming(Configuration, ContainerName, name); return await Provider.GetOrNullAsync( new BlobProviderGetArgs( - normalizedContainerName, + blobNormalizeNaming.ContainerName, Configuration, - normalizedBlobName, + blobNormalizeNaming.BlobName, CancellationTokenProvider.FallbackToProvider(cancellationToken) ) ); diff --git a/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobContainerFactory.cs b/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobContainerFactory.cs index 8013762164..0672554506 100644 --- a/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobContainerFactory.cs +++ b/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobContainerFactory.cs @@ -17,7 +17,7 @@ namespace Volo.Abp.BlobStoring protected IServiceProvider ServiceProvider { get; } - protected IBlobNormalizeNamingFactory BlobNormalizeNamingFactory { get; } + protected IBlobNormalizeNamingService BlobNormalizeNamingService { get; } public BlobContainerFactory( IBlobContainerConfigurationProvider configurationProvider, @@ -25,14 +25,14 @@ namespace Volo.Abp.BlobStoring ICancellationTokenProvider cancellationTokenProvider, IBlobProviderSelector providerSelector, IServiceProvider serviceProvider, - IBlobNormalizeNamingFactory blobNormalizeNamingFactory) + IBlobNormalizeNamingService blobNormalizeNamingService) { ConfigurationProvider = configurationProvider; CurrentTenant = currentTenant; CancellationTokenProvider = cancellationTokenProvider; ProviderSelector = providerSelector; ServiceProvider = serviceProvider; - BlobNormalizeNamingFactory = blobNormalizeNamingFactory; + BlobNormalizeNamingService = blobNormalizeNamingService; } public virtual IBlobContainer Create(string name) @@ -45,7 +45,7 @@ namespace Volo.Abp.BlobStoring ProviderSelector.Get(name), CurrentTenant, CancellationTokenProvider, - BlobNormalizeNamingFactory, + BlobNormalizeNamingService, ServiceProvider ); } diff --git a/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobNormalizeNaming.cs b/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobNormalizeNaming.cs new file mode 100644 index 0000000000..e7ad89425b --- /dev/null +++ b/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobNormalizeNaming.cs @@ -0,0 +1,15 @@ +namespace Volo.Abp.BlobStoring +{ + public class BlobNormalizeNaming + { + public string ContainerName { get; } + + public string BlobName { get; } + + public BlobNormalizeNaming(string containerName, string blobName) + { + ContainerName = containerName; + BlobName = blobName; + } + } +} diff --git a/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobNormalizeNamingFactory.cs b/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobNormalizeNamingService.cs similarity index 81% rename from framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobNormalizeNamingFactory.cs rename to framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobNormalizeNamingService.cs index cafba9bec2..b2e057032a 100644 --- a/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobNormalizeNamingFactory.cs +++ b/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobNormalizeNamingService.cs @@ -5,16 +5,16 @@ using Volo.Abp.DependencyInjection; namespace Volo.Abp.BlobStoring { - public class BlobNormalizeNamingFactory : IBlobNormalizeNamingFactory, ITransientDependency + public class BlobNormalizeNamingService : IBlobNormalizeNamingService, ITransientDependency { protected IServiceProvider ServiceProvider { get; } - public BlobNormalizeNamingFactory(IServiceProvider serviceProvider) + public BlobNormalizeNamingService(IServiceProvider serviceProvider) { ServiceProvider = serviceProvider; } - public (string containerName, string blobName) NormalizeNaming( + public BlobNormalizeNaming NormalizeNaming( BlobContainerConfiguration configuration, string containerName, string blobName) @@ -22,7 +22,7 @@ namespace Volo.Abp.BlobStoring if (!configuration.NamingNormalizers.Any()) { - return (containerName, blobName); + return new BlobNormalizeNaming(containerName, blobName); } using (var scope = ServiceProvider.CreateScope()) @@ -37,7 +37,7 @@ namespace Volo.Abp.BlobStoring blobName = blobName.IsNullOrWhiteSpace()? blobName: normalizer.NormalizeBlobName(blobName); } - return (containerName, blobName); + return new BlobNormalizeNaming(containerName, blobName); } } @@ -48,7 +48,7 @@ namespace Volo.Abp.BlobStoring return containerName; } - return NormalizeNaming(configuration, containerName, null).containerName; + return NormalizeNaming(configuration, containerName, null).ContainerName; } public string NormalizeBlobName(BlobContainerConfiguration configuration, string blobName) @@ -58,7 +58,7 @@ namespace Volo.Abp.BlobStoring return blobName; } - return NormalizeNaming(configuration, null, blobName).blobName; + return NormalizeNaming(configuration, null, blobName).BlobName; } } } diff --git a/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/IBlobNormalizeNamingFactory.cs b/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/IBlobNormalizeNamingService.cs similarity index 55% rename from framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/IBlobNormalizeNamingFactory.cs rename to framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/IBlobNormalizeNamingService.cs index 281196051d..fecb75ef6a 100644 --- a/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/IBlobNormalizeNamingFactory.cs +++ b/framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/IBlobNormalizeNamingService.cs @@ -1,8 +1,8 @@ namespace Volo.Abp.BlobStoring { - public interface IBlobNormalizeNamingFactory + public interface IBlobNormalizeNamingService { - (string containerName, string blobName) NormalizeNaming(BlobContainerConfiguration configuration, string containerName, string blobName); + BlobNormalizeNaming NormalizeNaming(BlobContainerConfiguration configuration, string containerName, string blobName); string NormalizeContainerName(BlobContainerConfiguration configuration, string containerName); From f0310da95f10dedff6cb0739880e42a6cced494e Mon Sep 17 00:00:00 2001 From: enisn Date: Thu, 14 Jan 2021 14:52:59 +0300 Subject: [PATCH 010/472] CmsKit - Add BlogPost Domain logic --- .../Volo/CmsKit/Blogs/BlogPostConsts.cs | 4 ++ .../Volo/CmsKit/CmsKitErrorCodes.cs | 5 ++ .../Volo/CmsKit/Blogs/BlogPost.cs | 56 +++++++++++++++++-- .../Volo/CmsKit/Blogs/BlogPostManager.cs | 40 +++++++++++++ .../BlogPostUrlSlugAlreadyExistException.cs | 27 +++++++++ .../Volo/CmsKit/Blogs/IBlogPostManager.cs | 12 ++++ .../Volo/CmsKit/Blogs/IBlogPostRepository.cs | 14 +++++ .../CmsKit/Blogs/BlogPostEfCoreRepository.cs | 24 ++++++++ .../CmsKitDbContextModelCreatingExtensions.cs | 5 ++ .../MongoDB/Blogs/BlogPostMongoRepository.cs | 22 ++++++++ 10 files changed, 205 insertions(+), 4 deletions(-) create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogPostManager.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogPostUrlSlugAlreadyExistException.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostManager.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostRepository.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/BlogPostEfCoreRepository.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/BlogPostMongoRepository.cs diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Blogs/BlogPostConsts.cs b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Blogs/BlogPostConsts.cs index 1a4a657680..4f3ad07f7b 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Blogs/BlogPostConsts.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Blogs/BlogPostConsts.cs @@ -5,5 +5,9 @@ public static int MaxTitleLength { get; set; } = 256; public static int MaxCoverImageUrlLength { get; set; } = 2048; + + public static int MaxUrlSlugLength { get; set; } = 256; + + public static int MinUrlSlugLength { get; set; } = 2; } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/CmsKitErrorCodes.cs b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/CmsKitErrorCodes.cs index 67042b5cc6..4edf42dcf8 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/CmsKitErrorCodes.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/CmsKitErrorCodes.cs @@ -10,5 +10,10 @@ { public const string UrlAlreadyExist = "CmsKit:Page:0001"; } + + public static class Blogs + { + public const string UrlSlugAlreadyExist = "CmsKit:BlogPost:0001"; + } } } 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 f15dd87f75..ac7c1221c0 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 @@ -1,13 +1,61 @@ -using System; +using JetBrains.Annotations; +using System; +using Volo.Abp; using Volo.Abp.Domain.Entities.Auditing; +using Volo.CmsKit.Blogs; namespace Volo.CmsKit.Domain.Volo.CmsKit.Blogs { public class BlogPost : FullAuditedEntity { - public Guid BlogId { get; set; } - public string Title { get; set; } + public Guid BlogId { get; protected set; } + + public string Title { get; protected set; } + + public string UrlSlug { get; protected set; } + public string CoverImageUrl { get; set; } - public bool IsPublished { get; set; } + + public bool IsPublished { get; protected set; } + + public DateTime? PublishDate { get; protected set; } + + protected BlogPost() + { + } + + public BlogPost( + Guid blogId, + [NotNull] string title, + [NotNull] string urlSlug, + [CanBeNull] string coverImageUrl = null, + bool isPublished = true) + { + BlogId = blogId; + SetTitle(title); + SetUrlSlug(urlSlug); + CoverImageUrl = coverImageUrl; + IsPublished = isPublished; + } + + public void SetTitle(string title) + { + Title = Check.NotNullOrWhiteSpace(title, nameof(title), BlogPostConsts.MaxTitleLength); + } + + public void SetUrlSlug(string urlSlug) + { + UrlSlug = Check.NotNullOrWhiteSpace(urlSlug, nameof(urlSlug), BlogPostConsts.MaxUrlSlugLength, BlogPostConsts.MinUrlSlugLength); + } + + public void SetIsPublished(bool isPublished) + { + if (!IsPublished && isPublished) + { + this.PublishDate = DateTime.UtcNow; + } + + IsPublished = IsPublished; + } } } 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 new file mode 100644 index 0000000000..f3a268e956 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogPostManager.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Volo.CmsKit.Domain.Volo.CmsKit.Blogs +{ + public class BlogPostManager : IBlogPostManager + { + protected readonly IBlogPostRepository _blogPostRepository; + + public BlogPostManager(IBlogPostRepository blogPostRepository) + { + _blogPostRepository = blogPostRepository; + } + + public async Task CreateAsync(BlogPost blogPost) + { + await CheckUrlSlugExistenceAsync(blogPost.UrlSlug); + + return await _blogPostRepository.InsertAsync(blogPost); + } + + public async Task UpdateAsync(BlogPost blogPost) + { + await CheckUrlSlugExistenceAsync(blogPost.UrlSlug); + + await _blogPostRepository.UpdateAsync(blogPost); + } + + private async Task CheckUrlSlugExistenceAsync(string urlSlug) + { + if (await _blogPostRepository.SlugExistsAsync(urlSlug)) + { + throw new BlogPostUrlSlugAlreadyExistException(urlSlug); + } + } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogPostUrlSlugAlreadyExistException.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogPostUrlSlugAlreadyExistException.cs new file mode 100644 index 0000000000..bccffef418 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogPostUrlSlugAlreadyExistException.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Volo.Abp; + +namespace Volo.CmsKit.Domain.Volo.CmsKit.Blogs +{ + public class BlogPostUrlSlugAlreadyExistException : BusinessException + { + internal BlogPostUrlSlugAlreadyExistException(string code = null, string message = null, string details = null, Exception innerException = null, Microsoft.Extensions.Logging.LogLevel logLevel = Microsoft.Extensions.Logging.LogLevel.Warning) : base(code, message, details, innerException, logLevel) + { + } + + internal BlogPostUrlSlugAlreadyExistException(System.Runtime.Serialization.SerializationInfo serializationInfo, System.Runtime.Serialization.StreamingContext context) : base(serializationInfo, context) + { + } + + public BlogPostUrlSlugAlreadyExistException(string urlSlug) + { + Code = CmsKitErrorCodes.Blogs.UrlSlugAlreadyExist; + + WithData(nameof(BlogPost.UrlSlug), urlSlug); + } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostManager.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostManager.cs new file mode 100644 index 0000000000..516e8f7835 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostManager.cs @@ -0,0 +1,12 @@ +using System; +using System.Threading.Tasks; + +namespace Volo.CmsKit.Domain.Volo.CmsKit.Blogs +{ + public interface IBlogPostManager + { + Task CreateAsync(BlogPost blogPost); + + Task UpdateAsync(BlogPost 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 new file mode 100644 index 0000000000..dfd0ec7977 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostRepository.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Volo.Abp.Domain.Repositories; + +namespace Volo.CmsKit.Domain.Volo.CmsKit.Blogs +{ + public interface IBlogPostRepository : IBasicRepository + { + Task SlugExistsAsync(string slug); + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/BlogPostEfCoreRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/BlogPostEfCoreRepository.cs new file mode 100644 index 0000000000..79a2bbe50f --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/BlogPostEfCoreRepository.cs @@ -0,0 +1,24 @@ +using Microsoft.EntityFrameworkCore; +using System; +using System.Threading.Tasks; +using Volo.Abp.Domain.Repositories.EntityFrameworkCore; +using Volo.Abp.EntityFrameworkCore; +using Volo.CmsKit.Domain.Volo.CmsKit.Blogs; +using Volo.CmsKit.EntityFrameworkCore; + +namespace Volo.CmsKit.Blogs +{ + public class BlogPostEfCoreRepository : EfCoreRepository, IBlogPostRepository + { + public BlogPostEfCoreRepository(IDbContextProvider dbContextProvider) : base(dbContextProvider) + { + } + + public async Task SlugExistsAsync(string slug) + { + var dbSet = await GetDbSetAsync(); + + return await dbSet.AnyAsync(x => x.UrlSlug.ToLower() == slug); + } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs index c7180fb098..79a245e693 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs @@ -15,6 +15,7 @@ using Volo.CmsKit.Ratings; using Volo.CmsKit.Tags; using Volo.CmsKit.Domain.Volo.CmsKit.Blogs; using Volo.CmsKit.Blogs; +using System.Security.Cryptography.X509Certificates; namespace Volo.CmsKit.EntityFrameworkCore { @@ -228,7 +229,11 @@ namespace Volo.CmsKit.EntityFrameworkCore b.Property(p => p.Title).IsRequired().HasMaxLength(BlogPostConsts.MaxTitleLength); + b.Property(p => p.UrlSlug).IsRequired().HasMaxLength(BlogPostConsts.MaxUrlSlugLength); + b.Property(p => p.CoverImageUrl).HasMaxLength(BlogPostConsts.MaxCoverImageUrlLength); + + b.HasIndex(x => x.UrlSlug); }); } } diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/BlogPostMongoRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/BlogPostMongoRepository.cs new file mode 100644 index 0000000000..55eb84e1bb --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/BlogPostMongoRepository.cs @@ -0,0 +1,22 @@ +using System; +using System.Threading.Tasks; +using Volo.Abp.Domain.Repositories.MongoDB; +using Volo.Abp.MongoDB; +using Volo.CmsKit.Domain.Volo.CmsKit.Blogs; + +namespace Volo.CmsKit.MongoDB.Blogs +{ + public class BlogPostMongoRepository : MongoDbRepository, IBlogPostRepository + { + public BlogPostMongoRepository(IMongoDbContextProvider dbContextProvider) : base(dbContextProvider) + { + } + + public async Task SlugExistsAsync(string slug) + { + var queryable = await GetQueryableAsync(); + + return await AsyncExecuter.AnyAsync(queryable, x => x.UrlSlug.ToLower() == slug); + } + } +} From 77c384a27dcc1a8593614520e723a4a13edc0b0e Mon Sep 17 00:00:00 2001 From: enisn Date: Fri, 15 Jan 2021 10:14:05 +0300 Subject: [PATCH 011/472] CmsKit - Normalization of url slug --- .../Volo/CmsKit/Blogs/BlogPost.cs | 27 ++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) 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 ac7c1221c0..8b5ea4f8f9 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 @@ -1,5 +1,6 @@ using JetBrains.Annotations; using System; +using System.Text.RegularExpressions; using Volo.Abp; using Volo.Abp.Domain.Entities.Auditing; using Volo.CmsKit.Blogs; @@ -45,7 +46,9 @@ namespace Volo.CmsKit.Domain.Volo.CmsKit.Blogs public void SetUrlSlug(string urlSlug) { - UrlSlug = Check.NotNullOrWhiteSpace(urlSlug, nameof(urlSlug), BlogPostConsts.MaxUrlSlugLength, BlogPostConsts.MinUrlSlugLength); + Check.NotNullOrWhiteSpace(urlSlug, nameof(urlSlug), BlogPostConsts.MaxUrlSlugLength, BlogPostConsts.MinUrlSlugLength); + + UrlSlug = NormalizeUrlSlug(urlSlug); } public void SetIsPublished(bool isPublished) @@ -57,5 +60,27 @@ namespace Volo.CmsKit.Domain.Volo.CmsKit.Blogs IsPublished = IsPublished; } + + private string NormalizeUrlSlug(string value) + { + value = value.ToLowerInvariant(); + + // TODO: Find best way to unidecode. + // value = value.Unidecode(); + + // Replace spaces + value = Regex.Replace(value, @"\s", "-", RegexOptions.Compiled); + + // Remove invalid chars + value = Regex.Replace(value, @"[^a-z0-9\s-_]", "", RegexOptions.Compiled); + + // Trim dashes from end & dots + value = value.Trim('-', '_', '.'); + + // Replace double occurences of - or _ + value = Regex.Replace(value, @"([-_]){2,}", "$1", RegexOptions.Compiled); + + return value; + } } } From b551e42fc98536d3c8062ed215e6ec648e83b756 Mon Sep 17 00:00:00 2001 From: Necati Meral Date: Fri, 15 Jan 2021 11:32:26 +0100 Subject: [PATCH 012/472] language selector should use whole row without version selector --- .../docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml index 1cdfe7ca2e..dc1ca956ed 100644 --- a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml +++ b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml @@ -126,7 +126,7 @@ @if (Model.LanguageSelectListItems.Count > 1) { -
+
From 80e556e1e84a7ba6a7908a77d208f121bdd34c05 Mon Sep 17 00:00:00 2001 From: enisn Date: Fri, 15 Jan 2021 13:34:38 +0300 Subject: [PATCH 013/472] CmsKit - Add BlogAdminAppService --- .../Volo/CmsKit/Admin/Blogs/BlogDto.cs | 10 ++++++++++ .../Admin/Blogs/IBlogAdminAppService.cs | 9 +++++++++ .../Permissions/CmsKitAdminPermissions.cs | 8 ++++++++ .../CmsKit/Admin/Blogs/BlogAdminAppService.cs | 20 +++++++++++++++++++ 4 files changed, 47 insertions(+) create mode 100644 modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogDto.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogAdminAppService.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogAdminAppService.cs diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogDto.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogDto.cs new file mode 100644 index 0000000000..9c88a0ed01 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogDto.cs @@ -0,0 +1,10 @@ +using System; +using Volo.Abp.Application.Dtos; + +namespace Volo.CmsKit.Admin.Blogs +{ + public class BlogDto : EntityDto + { + public string Name { get; set; } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogAdminAppService.cs new file mode 100644 index 0000000000..dfc488b0a3 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogAdminAppService.cs @@ -0,0 +1,9 @@ +using System; +using Volo.Abp.Application.Services; + +namespace Volo.CmsKit.Admin.Blogs +{ + public interface IBlogAdminAppService : ICrudAppService + { + } +} 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 a08ba9d6c8..ffe716b13c 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 @@ -29,5 +29,13 @@ namespace Volo.CmsKit.Permissions public const string Update = Default + ".Update"; public const string Delete = Default + ".Delete"; } + + public static class Blogs + { + public const string Default = GroupName + ".Blogs"; + public const string Create = Default + ".Create"; + public const string Update = Default + ".Update"; + public const string Delete = Default + ".Delete"; + } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogAdminAppService.cs new file mode 100644 index 0000000000..b66cf8b940 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogAdminAppService.cs @@ -0,0 +1,20 @@ +using System; +using Volo.Abp.Application.Services; +using Volo.Abp.Domain.Repositories; +using Volo.CmsKit.Domain.Volo.CmsKit.Blogs; +using Volo.CmsKit.Permissions; + +namespace Volo.CmsKit.Admin.Blogs +{ + public class BlogAdminAppService : CrudAppService, IBlogAdminAppService + { + public BlogAdminAppService(IRepository repository) : base(repository) + { + GetListPolicyName = CmsKitAdminPermissions.Blogs.Default; + GetPolicyName = CmsKitAdminPermissions.Blogs.Default; + CreatePolicyName = CmsKitAdminPermissions.Blogs.Create; + UpdatePolicyName = CmsKitAdminPermissions.Blogs.Update; + DeletePolicyName = CmsKitAdminPermissions.Blogs.Delete; + } + } +} From 93d4d441b874693177a01a8663e30190185e3399 Mon Sep 17 00:00:00 2001 From: enisn Date: Fri, 15 Jan 2021 14:26:32 +0300 Subject: [PATCH 014/472] CmsKit - Add BlogPost Application Services --- .../Volo/CmsKit/Admin/Blogs/BlogPostDto.cs | 20 +++++ .../Admin/Blogs/CreateUpdateBlogPostDto.cs | 17 ++++ .../Admin/Blogs/IBlogPostAdminAppService.cs | 17 ++++ .../Permissions/CmsKitAdminPermissions.cs | 7 ++ .../CmsKit/Admin/Blogs/BlogAdminAppService.cs | 4 +- .../Admin/Blogs/BlogPostAdminAppService.cs | 80 +++++++++++++++++++ .../Volo/CmsKit/Blogs/IBlogPostRepository.cs | 2 + .../CmsKit/Blogs/BlogPostEfCoreRepository.cs | 5 ++ .../MongoDB/Blogs/BlogPostMongoRepository.cs | 5 ++ 9 files changed, 156 insertions(+), 1 deletion(-) create mode 100644 modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogPostDto.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/CreateUpdateBlogPostDto.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs 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 new file mode 100644 index 0000000000..823efdfc4e --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogPostDto.cs @@ -0,0 +1,20 @@ +using System; +using Volo.Abp.Application.Dtos; + +namespace Volo.CmsKit.Admin.Blogs +{ + public class BlogPostDto : EntityDto + { + public Guid BlogId { get; protected set; } + + public string Title { get; protected set; } + + public string UrlSlug { get; protected set; } + + public string CoverImageUrl { get; set; } + + public bool IsPublished { get; protected set; } + + public DateTime? PublishDate { get; protected set; } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/CreateUpdateBlogPostDto.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/CreateUpdateBlogPostDto.cs new file mode 100644 index 0000000000..761eb15c55 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/CreateUpdateBlogPostDto.cs @@ -0,0 +1,17 @@ +using System; + +namespace Volo.CmsKit.Admin.Blogs +{ + public class CreateUpdateBlogPostDto + { + public Guid BlogId { get; protected set; } + + public string Title { get; protected set; } + + public string UrlSlug { get; protected set; } + + public string CoverImageUrl { get; set; } + + public bool IsPublished { get; protected set; } + } +} 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 new file mode 100644 index 0000000000..195778d92b --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogPostAdminAppService.cs @@ -0,0 +1,17 @@ +using System; +using System.Threading.Tasks; +using Volo.Abp.Application.Dtos; +using Volo.Abp.Application.Services; + +namespace Volo.CmsKit.Admin.Blogs +{ + public interface IBlogPostAdminAppService + : ICrudAppService< + BlogPostDto, + Guid, + PagedAndSortedResultRequestDto, + CreateUpdateBlogPostDto> + { + Task GetByUrlSlugAsync(string urlSlug); + } +} 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 ffe716b13c..2a70feefc5 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 @@ -37,5 +37,12 @@ namespace Volo.CmsKit.Permissions public const string Update = Default + ".Update"; public const string Delete = Default + ".Delete"; } + public static class BlogPosts + { + public const string Default = GroupName + ".BlogPosts"; + public const string Create = Default + ".Create"; + public const string Update = Default + ".Update"; + public const string Delete = Default + ".Delete"; + } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogAdminAppService.cs index b66cf8b940..ba30b20814 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogAdminAppService.cs @@ -1,4 +1,5 @@ -using System; +using Microsoft.AspNetCore.Authorization; +using System; using Volo.Abp.Application.Services; using Volo.Abp.Domain.Repositories; using Volo.CmsKit.Domain.Volo.CmsKit.Blogs; @@ -6,6 +7,7 @@ using Volo.CmsKit.Permissions; namespace Volo.CmsKit.Admin.Blogs { + [Authorize(CmsKitAdminPermissions.Blogs.Default)] public class BlogAdminAppService : CrudAppService, IBlogAdminAppService { public BlogAdminAppService(IRepository repository) : base(repository) 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 new file mode 100644 index 0000000000..87c3f24fc1 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs @@ -0,0 +1,80 @@ +using Microsoft.AspNetCore.Authorization; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Volo.Abp.Application.Dtos; +using Volo.Abp.Application.Services; +using Volo.Abp.Domain.Repositories; +using Volo.CmsKit.Domain.Volo.CmsKit.Blogs; +using Volo.CmsKit.Permissions; + +namespace Volo.CmsKit.Admin.Blogs +{ + [Authorize(CmsKitAdminPermissions.BlogPosts.Default)] + public class BlogPostAdminAppService + : CrudAppService< + BlogPost, + BlogPostDto, + Guid, + PagedAndSortedResultRequestDto, + CreateUpdateBlogPostDto> + , IBlogPostAdminAppService + { + protected readonly IBlogPostManager _blogPostManager; + protected readonly IBlogPostRepository _blogPostRepository; + + protected BlogPostAdminAppService( + IRepository repository, + IBlogPostManager blogPostManager, + IBlogPostRepository blogPostRepository) : base(repository) + { + _blogPostManager = blogPostManager; + _blogPostRepository = blogPostRepository; + + + GetListPolicyName = CmsKitAdminPermissions.BlogPosts.Default; + GetPolicyName = CmsKitAdminPermissions.BlogPosts.Default; + CreatePolicyName = CmsKitAdminPermissions.BlogPosts.Create; + UpdatePolicyName = CmsKitAdminPermissions.BlogPosts.Update; + DeletePolicyName = CmsKitAdminPermissions.BlogPosts.Delete; + } + + public async Task GetByUrlSlugAsync(string urlSlug) + { + var blogPost = await _blogPostRepository.GetByUrlSlugAsync(urlSlug); + + return MapToGetOutputDto(blogPost); + } + + [Authorize(CmsKitAdminPermissions.BlogPosts.Create)] + public override async Task CreateAsync(CreateUpdateBlogPostDto input) + { + var entity = await _blogPostManager + .CreateAsync( + new BlogPost( + input.BlogId, + input.Title, + input.UrlSlug, + input.CoverImageUrl, + input.IsPublished)); + + return MapToGetOutputDto(entity); + } + + [Authorize(CmsKitAdminPermissions.BlogPosts.Update)] + public override async Task UpdateAsync(Guid id, CreateUpdateBlogPostDto input) + { + var entity = await _blogPostRepository.GetAsync(id); + + entity.SetTitle(input.Title); + entity.SetUrlSlug(input.UrlSlug); + entity.SetIsPublished(input.IsPublished); + + MapToEntity(input, entity); + + return MapToGetOutputDto(entity); + } + } +} 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 dfd0ec7977..d354623891 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 @@ -10,5 +10,7 @@ namespace Volo.CmsKit.Domain.Volo.CmsKit.Blogs public interface IBlogPostRepository : IBasicRepository { Task SlugExistsAsync(string slug); + + Task GetByUrlSlugAsync(string urlSlug); } } diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/BlogPostEfCoreRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/BlogPostEfCoreRepository.cs index 79a2bbe50f..b6442dcf01 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/BlogPostEfCoreRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/BlogPostEfCoreRepository.cs @@ -14,6 +14,11 @@ namespace Volo.CmsKit.Blogs { } + public Task GetByUrlSlugAsync(string urlSlug) + { + return GetAsync(x => x.UrlSlug.ToLower() == urlSlug); + } + public async Task SlugExistsAsync(string slug) { var dbSet = await GetDbSetAsync(); diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/BlogPostMongoRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/BlogPostMongoRepository.cs index 55eb84e1bb..a761c69895 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/BlogPostMongoRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/BlogPostMongoRepository.cs @@ -12,6 +12,11 @@ namespace Volo.CmsKit.MongoDB.Blogs { } + public Task GetByUrlSlugAsync(string urlSlug) + { + return GetAsync(x => x.UrlSlug.ToLower() == urlSlug); + } + public async Task SlugExistsAsync(string slug) { var queryable = await GetQueryableAsync(); From 7120c35161b94ebde819a6558365b90e34104b00 Mon Sep 17 00:00:00 2001 From: Necati Meral Date: Mon, 18 Jan 2021 07:45:45 +0100 Subject: [PATCH 015/472] consolidated duplicate `if` --- .../docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml index dc1ca956ed..b6a33ec2ad 100644 --- a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml +++ b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml @@ -126,7 +126,7 @@ @if (Model.LanguageSelectListItems.Count > 1) { -
+
From 2ba8022f352fdfca4e6d71fb3883cc2e24adf188 Mon Sep 17 00:00:00 2001 From: enisn Date: Mon, 18 Jan 2021 09:52:25 +0300 Subject: [PATCH 016/472] CmsKit - Refactor Blogs namespaces & types --- .../cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/Blog.cs | 2 +- .../src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogPost.cs | 5 +++-- .../Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogPostManager.cs | 2 +- .../CmsKit/Blogs/BlogPostUrlSlugAlreadyExistException.cs | 2 +- .../Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostManager.cs | 2 +- .../Volo/CmsKit/Blogs/IBlogPostRepository.cs | 2 +- 6 files changed, 8 insertions(+), 7 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/Blog.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/Blog.cs index a7720d2a41..49b5bf9b43 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/Blog.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/Blog.cs @@ -1,7 +1,7 @@ using System; using Volo.Abp.Domain.Entities.Auditing; -namespace Volo.CmsKit.Domain.Volo.CmsKit.Blogs +namespace Volo.CmsKit.Blogs { public class Blog : FullAuditedAggregateRoot { 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 8b5ea4f8f9..af3931cbed 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 @@ -4,10 +4,11 @@ using System.Text.RegularExpressions; using Volo.Abp; using Volo.Abp.Domain.Entities.Auditing; using Volo.CmsKit.Blogs; +using Volo.CmsKit.Users; -namespace Volo.CmsKit.Domain.Volo.CmsKit.Blogs +namespace Volo.CmsKit.Blogs { - public class BlogPost : FullAuditedEntity + public class BlogPost : FullAuditedAggregateRootWithUser { public Guid BlogId { get; protected set; } 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 f3a268e956..06518cd29d 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 @@ -4,7 +4,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace Volo.CmsKit.Domain.Volo.CmsKit.Blogs +namespace Volo.CmsKit.Blogs { public class BlogPostManager : IBlogPostManager { diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogPostUrlSlugAlreadyExistException.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogPostUrlSlugAlreadyExistException.cs index bccffef418..22816c5d7e 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogPostUrlSlugAlreadyExistException.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogPostUrlSlugAlreadyExistException.cs @@ -5,7 +5,7 @@ using System.Text; using System.Threading.Tasks; using Volo.Abp; -namespace Volo.CmsKit.Domain.Volo.CmsKit.Blogs +namespace Volo.CmsKit.Blogs { public class BlogPostUrlSlugAlreadyExistException : BusinessException { diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostManager.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostManager.cs index 516e8f7835..eb5c0170e1 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostManager.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostManager.cs @@ -1,7 +1,7 @@ using System; using System.Threading.Tasks; -namespace Volo.CmsKit.Domain.Volo.CmsKit.Blogs +namespace Volo.CmsKit.Blogs { public interface IBlogPostManager { 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 d354623891..a9e35e3794 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 @@ -5,7 +5,7 @@ using System.Text; using System.Threading.Tasks; using Volo.Abp.Domain.Repositories; -namespace Volo.CmsKit.Domain.Volo.CmsKit.Blogs +namespace Volo.CmsKit.Blogs { public interface IBlogPostRepository : IBasicRepository { From f6286773930449df45117aa4209b54066e3596f9 Mon Sep 17 00:00:00 2001 From: enisn Date: Mon, 18 Jan 2021 10:09:53 +0300 Subject: [PATCH 017/472] CmsKit - Refactor Blogs --- .../Volo/CmsKit/Blogs/Blog.cs | 5 ++++- .../Volo/CmsKit/Blogs/BlogPost.cs | 22 ++++++------------- 2 files changed, 11 insertions(+), 16 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/Blog.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/Blog.cs index 49b5bf9b43..59354c8e59 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/Blog.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/Blog.cs @@ -1,10 +1,13 @@ using System; using Volo.Abp.Domain.Entities.Auditing; +using Volo.Abp.MultiTenancy; namespace Volo.CmsKit.Blogs { - public class Blog : FullAuditedAggregateRoot + public class Blog : FullAuditedAggregateRoot, IMultiTenant { public string Name { get; set; } + + public Guid? TenantId { get; } } } 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 af3931cbed..3494cff31e 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 @@ -3,24 +3,25 @@ using System; using System.Text.RegularExpressions; using Volo.Abp; using Volo.Abp.Domain.Entities.Auditing; +using Volo.Abp.MultiTenancy; using Volo.CmsKit.Blogs; using Volo.CmsKit.Users; namespace Volo.CmsKit.Blogs { - public class BlogPost : FullAuditedAggregateRootWithUser + public class BlogPost : FullAuditedAggregateRootWithUser , IMultiTenant { public Guid BlogId { get; protected set; } public string Title { get; protected set; } + public string ShortDescription { get; set; } + public string UrlSlug { get; protected set; } public string CoverImageUrl { get; set; } - public bool IsPublished { get; protected set; } - - public DateTime? PublishDate { get; protected set; } + public Guid? TenantId { get; } protected BlogPost() { @@ -30,14 +31,15 @@ namespace Volo.CmsKit.Blogs Guid blogId, [NotNull] string title, [NotNull] string urlSlug, + [CanBeNull] string shortDescription = null, [CanBeNull] string coverImageUrl = null, bool isPublished = true) { BlogId = blogId; SetTitle(title); SetUrlSlug(urlSlug); + ShortDescription = shortDescription; CoverImageUrl = coverImageUrl; - IsPublished = isPublished; } public void SetTitle(string title) @@ -52,16 +54,6 @@ namespace Volo.CmsKit.Blogs UrlSlug = NormalizeUrlSlug(urlSlug); } - public void SetIsPublished(bool isPublished) - { - if (!IsPublished && isPublished) - { - this.PublishDate = DateTime.UtcNow; - } - - IsPublished = IsPublished; - } - private string NormalizeUrlSlug(string value) { value = value.ToLowerInvariant(); From 395c3354083d3bf8d01c08fd5ceac6a3fdee8e9d Mon Sep 17 00:00:00 2001 From: enisn Date: Tue, 19 Jan 2021 13:53:14 +0300 Subject: [PATCH 018/472] CmsKit - Fix namespaces for Blogs --- .../Volo/CmsKit/Admin/Blogs/CreateUpdateBlogPostDto.cs | 2 -- .../Volo/CmsKit/Admin/Blogs/BlogAdminAppService.cs | 2 +- .../Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs | 6 ++---- .../Volo/CmsKit/Blogs/BlogPostEfCoreRepository.cs | 1 - .../Volo/CmsKit/EntityFrameworkCore/CmsKitDbContext.cs | 2 +- .../CmsKitDbContextModelCreatingExtensions.cs | 2 -- 6 files changed, 4 insertions(+), 11 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/CreateUpdateBlogPostDto.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/CreateUpdateBlogPostDto.cs index 761eb15c55..b013a9d397 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/CreateUpdateBlogPostDto.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/CreateUpdateBlogPostDto.cs @@ -11,7 +11,5 @@ namespace Volo.CmsKit.Admin.Blogs public string UrlSlug { get; protected set; } public string CoverImageUrl { get; set; } - - public bool IsPublished { get; protected set; } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogAdminAppService.cs index ba30b20814..e7075dcc22 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogAdminAppService.cs @@ -2,7 +2,7 @@ using System; using Volo.Abp.Application.Services; using Volo.Abp.Domain.Repositories; -using Volo.CmsKit.Domain.Volo.CmsKit.Blogs; +using Volo.CmsKit.Blogs; using Volo.CmsKit.Permissions; 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 87c3f24fc1..17cfd74763 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 @@ -7,7 +7,7 @@ using System.Threading.Tasks; using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Services; using Volo.Abp.Domain.Repositories; -using Volo.CmsKit.Domain.Volo.CmsKit.Blogs; +using Volo.CmsKit.Blogs; using Volo.CmsKit.Permissions; namespace Volo.CmsKit.Admin.Blogs @@ -57,8 +57,7 @@ namespace Volo.CmsKit.Admin.Blogs input.BlogId, input.Title, input.UrlSlug, - input.CoverImageUrl, - input.IsPublished)); + input.CoverImageUrl)); return MapToGetOutputDto(entity); } @@ -70,7 +69,6 @@ namespace Volo.CmsKit.Admin.Blogs entity.SetTitle(input.Title); entity.SetUrlSlug(input.UrlSlug); - entity.SetIsPublished(input.IsPublished); MapToEntity(input, entity); diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/BlogPostEfCoreRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/BlogPostEfCoreRepository.cs index b6442dcf01..96e80b7c90 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/BlogPostEfCoreRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/BlogPostEfCoreRepository.cs @@ -3,7 +3,6 @@ using System; using System.Threading.Tasks; using Volo.Abp.Domain.Repositories.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore; -using Volo.CmsKit.Domain.Volo.CmsKit.Blogs; using Volo.CmsKit.EntityFrameworkCore; namespace Volo.CmsKit.Blogs diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContext.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContext.cs index 87ad080af6..e7694574a9 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContext.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContext.cs @@ -1,9 +1,9 @@ using Microsoft.EntityFrameworkCore; using Volo.Abp.Data; using Volo.Abp.EntityFrameworkCore; +using Volo.CmsKit.Blogs; using Volo.CmsKit.Comments; using Volo.CmsKit.Contents; -using Volo.CmsKit.Domain.Volo.CmsKit.Blogs; using Volo.CmsKit.Pages; using Volo.CmsKit.Ratings; using Volo.CmsKit.Reactions; diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs index 79a245e693..2b9b3cdde0 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs @@ -13,9 +13,7 @@ using Volo.CmsKit.GlobalFeatures; using Volo.CmsKit.Pages; using Volo.CmsKit.Ratings; using Volo.CmsKit.Tags; -using Volo.CmsKit.Domain.Volo.CmsKit.Blogs; using Volo.CmsKit.Blogs; -using System.Security.Cryptography.X509Certificates; namespace Volo.CmsKit.EntityFrameworkCore { From 4733aecc405d16bcb7e2eba6968340dfffdf91ef Mon Sep 17 00:00:00 2001 From: enisn Date: Tue, 19 Jan 2021 15:59:42 +0300 Subject: [PATCH 019/472] CmsKit - Fix namespace problems --- .../Volo/CmsKit/MongoDB/Blogs/BlogPostMongoRepository.cs | 2 +- .../Volo/CmsKit/MongoDB/CmsKitMongoDbContext.cs | 2 +- .../Volo/CmsKit/MongoDB/CmsKitMongoDbContextExtensions.cs | 2 +- .../Volo/CmsKit/MongoDB/ICmsKitMongoDbContext.cs | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/BlogPostMongoRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/BlogPostMongoRepository.cs index a761c69895..63bfc0044f 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/BlogPostMongoRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/BlogPostMongoRepository.cs @@ -2,7 +2,7 @@ using System.Threading.Tasks; using Volo.Abp.Domain.Repositories.MongoDB; using Volo.Abp.MongoDB; -using Volo.CmsKit.Domain.Volo.CmsKit.Blogs; +using Volo.CmsKit.Blogs; namespace Volo.CmsKit.MongoDB.Blogs { diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContext.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContext.cs index 45f3275acc..b61ad967cd 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContext.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContext.cs @@ -3,7 +3,7 @@ using Volo.Abp.Data; using Volo.Abp.MongoDB; using Volo.CmsKit.Comments; using Volo.CmsKit.Contents; -using Volo.CmsKit.Domain.Volo.CmsKit.Blogs; +using Volo.CmsKit.Blogs; using Volo.CmsKit.Pages; using Volo.CmsKit.Ratings; using Volo.CmsKit.Reactions; diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContextExtensions.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContextExtensions.cs index 3d718d6955..46eecd1077 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContextExtensions.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContextExtensions.cs @@ -3,7 +3,7 @@ using Volo.Abp; using Volo.Abp.MongoDB; using Volo.CmsKit.Comments; using Volo.CmsKit.Contents; -using Volo.CmsKit.Domain.Volo.CmsKit.Blogs; +using Volo.CmsKit.Blogs; using Volo.CmsKit.Pages; using Volo.CmsKit.Ratings; using Volo.CmsKit.Reactions; diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/ICmsKitMongoDbContext.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/ICmsKitMongoDbContext.cs index 4fcdea7d55..cc0faf912f 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/ICmsKitMongoDbContext.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/ICmsKitMongoDbContext.cs @@ -3,7 +3,7 @@ using Volo.Abp.Data; using Volo.Abp.MongoDB; using Volo.CmsKit.Comments; using Volo.CmsKit.Contents; -using Volo.CmsKit.Domain.Volo.CmsKit.Blogs; +using Volo.CmsKit.Blogs; using Volo.CmsKit.Pages; using Volo.CmsKit.Ratings; using Volo.CmsKit.Reactions; From 982e5fe4ff4dd8221deb8a0fe791177a06fd009f Mon Sep 17 00:00:00 2001 From: enisn Date: Tue, 19 Jan 2021 16:15:52 +0300 Subject: [PATCH 020/472] CmsKit - Refactor BlogPost --- .../src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogPost.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) 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 3494cff31e..de05a27167 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 @@ -32,8 +32,7 @@ namespace Volo.CmsKit.Blogs [NotNull] string title, [NotNull] string urlSlug, [CanBeNull] string shortDescription = null, - [CanBeNull] string coverImageUrl = null, - bool isPublished = true) + [CanBeNull] string coverImageUrl = null) { BlogId = blogId; SetTitle(title); From 7d2bd589bd182a242900fdf2cc94d01c46db0cb7 Mon Sep 17 00:00:00 2001 From: enisn Date: Tue, 19 Jan 2021 17:26:11 +0300 Subject: [PATCH 021/472] CmsKit - Implementation of CoverImage for Blogpost --- .../Admin/Blogs/IBlogAdminAppService.cs | 2 +- .../Admin/Blogs/IBlogPostAdminAppService.cs | 5 + .../Admin/Blogs/BlogPostAdminAppService.cs | 36 ++++++-- .../Admin/Blogs/BlogPostAdminController.cs | 92 +++++++++++++++++++ .../Volo.CmsKit.Domain.csproj | 1 + .../Volo/CmsKit/Blogs/BlogPost.cs | 6 +- .../Blogs/BlogPostCoverImageContainer.cs | 9 ++ .../Volo/CmsKit/Blogs/CmsKitBlogOptions.cs | 31 +++++++ .../Volo/CmsKit/CmsKitDomainModule.cs | 6 +- 9 files changed, 172 insertions(+), 16 deletions(-) create mode 100644 modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogPostCoverImageContainer.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/CmsKitBlogOptions.cs diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogAdminAppService.cs index dfc488b0a3..4072c9f847 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogAdminAppService.cs @@ -3,7 +3,7 @@ using Volo.Abp.Application.Services; namespace Volo.CmsKit.Admin.Blogs { - public interface IBlogAdminAppService : ICrudAppService + public interface IBlogAdminAppService : ICrudAppService { } } 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 195778d92b..866c536b85 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 @@ -2,6 +2,7 @@ using System.Threading.Tasks; using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Services; +using Volo.Abp.Content; namespace Volo.CmsKit.Admin.Blogs { @@ -13,5 +14,9 @@ namespace Volo.CmsKit.Admin.Blogs CreateUpdateBlogPostDto> { Task GetByUrlSlugAsync(string urlSlug); + + Task SetCoverImageAsync(Guid id, RemoteStreamContent streamContent); + + Task GetCoverImageAsync(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 17cfd74763..2677b6c5ac 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,8 @@ using System.Text; using System.Threading.Tasks; using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Services; +using Volo.Abp.BlobStoring; +using Volo.Abp.Content; using Volo.Abp.Domain.Repositories; using Volo.CmsKit.Blogs; using Volo.CmsKit.Permissions; @@ -22,16 +24,17 @@ namespace Volo.CmsKit.Admin.Blogs CreateUpdateBlogPostDto> , IBlogPostAdminAppService { - protected readonly IBlogPostManager _blogPostManager; - protected readonly IBlogPostRepository _blogPostRepository; + protected readonly IBlogPostManager BlogPostManager; + protected readonly IBlogPostRepository BlogPostRepository; + protected readonly IBlobContainer BlobContainer; protected BlogPostAdminAppService( IRepository repository, IBlogPostManager blogPostManager, IBlogPostRepository blogPostRepository) : base(repository) { - _blogPostManager = blogPostManager; - _blogPostRepository = blogPostRepository; + BlogPostManager = blogPostManager; + BlogPostRepository = blogPostRepository; GetListPolicyName = CmsKitAdminPermissions.BlogPosts.Default; @@ -41,9 +44,9 @@ namespace Volo.CmsKit.Admin.Blogs DeletePolicyName = CmsKitAdminPermissions.BlogPosts.Delete; } - public async Task GetByUrlSlugAsync(string urlSlug) + public virtual async Task GetByUrlSlugAsync(string urlSlug) { - var blogPost = await _blogPostRepository.GetByUrlSlugAsync(urlSlug); + var blogPost = await BlogPostRepository.GetByUrlSlugAsync(urlSlug); return MapToGetOutputDto(blogPost); } @@ -51,7 +54,7 @@ namespace Volo.CmsKit.Admin.Blogs [Authorize(CmsKitAdminPermissions.BlogPosts.Create)] public override async Task CreateAsync(CreateUpdateBlogPostDto input) { - var entity = await _blogPostManager + var entity = await BlogPostManager .CreateAsync( new BlogPost( input.BlogId, @@ -65,7 +68,7 @@ namespace Volo.CmsKit.Admin.Blogs [Authorize(CmsKitAdminPermissions.BlogPosts.Update)] public override async Task UpdateAsync(Guid id, CreateUpdateBlogPostDto input) { - var entity = await _blogPostRepository.GetAsync(id); + var entity = await BlogPostRepository.GetAsync(id); entity.SetTitle(input.Title); entity.SetUrlSlug(input.UrlSlug); @@ -74,5 +77,22 @@ namespace Volo.CmsKit.Admin.Blogs return MapToGetOutputDto(entity); } + + public virtual async Task SetCoverImageAsync(Guid id, RemoteStreamContent streamContent) + { + await Repository.GetAsync(id); + + using (var stream = streamContent.GetStream()) + { + await BlobContainer.SaveAsync(id.ToString(), stream, overrideExisting: true); + } + } + + public virtual async Task GetCoverImageAsync(Guid id) + { + var stream = await BlobContainer.GetAsync(id.ToString()); + + return new RemoteStreamContent(stream); + } } } 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 new file mode 100644 index 0000000000..554200b492 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs @@ -0,0 +1,92 @@ +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +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.Permissions; + +namespace Volo.CmsKit.Admin.Blogs +{ + [RequiresGlobalFeature(typeof(BlogsFeature))] + [RemoteService(Name = CmsKitCommonRemoteServiceConsts.RemoteServiceName)] + [Area("cms-kit")] + [Authorize(CmsKitAdminPermissions.BlogPosts.Default)] + [Route("api/cms-kit-admin/blogs/blog-posts")] + public class BlogPostAdminController : CmsKitAdminController, IBlogPostAdminAppService + { + protected readonly IBlogPostAdminAppService BlogPostAdminAppService; + + public BlogPostAdminController(IBlogPostAdminAppService blogPostAdminAppService) + { + BlogPostAdminAppService = blogPostAdminAppService; + } + + public virtual Task CreateAsync(CreateUpdateBlogPostDto input) + { + return BlogPostAdminAppService.CreateAsync(input); + } + + public virtual Task DeleteAsync(Guid id) + { + return BlogPostAdminAppService.DeleteAsync(id); + } + + public virtual Task GetAsync(Guid id) + { + return BlogPostAdminAppService.GetAsync(id); + } + + public virtual Task GetByUrlSlugAsync(string urlSlug) + { + return BlogPostAdminAppService.GetByUrlSlugAsync(urlSlug); + } + + public virtual Task GetCoverImageAsync(Guid id) + { + Response.Headers.Add("Content-Disposition", $"inline;filename=\"{id}\""); + Response.Headers.Add("Accept-Ranges", "bytes"); + Response.Headers.Add("Cache-Control", "max-age=120"); + Response.ContentType = "image/*"; + + return BlogPostAdminAppService.GetCoverImageAsync(id); + } + + public virtual Task> GetListAsync(PagedAndSortedResultRequestDto input) + { + return BlogPostAdminAppService.GetListAsync(input); + } + + public virtual Task SetCoverImageAsync(Guid id, RemoteStreamContent streamContent) + { + return BlogPostAdminAppService.SetCoverImageAsync(id, streamContent); + } + + public virtual async Task UploadCoverImageAsync(Guid id, IFormFile file) + { + if (file == null) + { + return BadRequest(); + } + + using (var stream = file.OpenReadStream()) + { + await BlogPostAdminAppService.SetCoverImageAsync(id, new RemoteStreamContent(stream)); + } + + return StatusCode(201); + } + + public virtual Task UpdateAsync(Guid id, CreateUpdateBlogPostDto input) + { + return BlogPostAdminAppService.UpdateAsync(id, input); + } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo.CmsKit.Domain.csproj b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo.CmsKit.Domain.csproj index ee064cbedc..0fc25899e9 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo.CmsKit.Domain.csproj +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo.CmsKit.Domain.csproj @@ -12,6 +12,7 @@ + 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 de05a27167..73fda09418 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 @@ -19,8 +19,6 @@ namespace Volo.CmsKit.Blogs public string UrlSlug { get; protected set; } - public string CoverImageUrl { get; set; } - public Guid? TenantId { get; } protected BlogPost() @@ -31,14 +29,12 @@ namespace Volo.CmsKit.Blogs Guid blogId, [NotNull] string title, [NotNull] string urlSlug, - [CanBeNull] string shortDescription = null, - [CanBeNull] string coverImageUrl = null) + [CanBeNull] string shortDescription = null) { BlogId = blogId; SetTitle(title); SetUrlSlug(urlSlug); ShortDescription = shortDescription; - CoverImageUrl = coverImageUrl; } public void SetTitle(string title) diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogPostCoverImageContainer.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogPostCoverImageContainer.cs new file mode 100644 index 0000000000..824db4fe3a --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogPostCoverImageContainer.cs @@ -0,0 +1,9 @@ +using Volo.Abp.BlobStoring; + +namespace Volo.CmsKit.Blogs +{ + [BlobContainerName("blog-post-cover-images")] + public class BlogPostCoverImageContainer + { + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/CmsKitBlogOptions.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/CmsKitBlogOptions.cs new file mode 100644 index 0000000000..bc3dd30435 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/CmsKitBlogOptions.cs @@ -0,0 +1,31 @@ +using System; + +namespace Volo.CmsKit.Blogs +{ + public class CmsKitBlogOptions + { + private string routePrefix = "blog"; + + /// + /// Gets or sets route prefix. Default value is 'blog'. + /// + /// + /// This parameter will be used while presenting blogposts. + /// + public string RoutePrefix + { + get => GetFormattedRoutePrefix(); + set => routePrefix = value; + } + + private string GetFormattedRoutePrefix() + { + if (string.IsNullOrWhiteSpace(routePrefix)) + { + return "/"; + } + + return routePrefix.EnsureEndsWith('/').EnsureStartsWith('/'); + } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/CmsKitDomainModule.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/CmsKitDomainModule.cs index b1937dd6e0..c16734c377 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/CmsKitDomainModule.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/CmsKitDomainModule.cs @@ -1,4 +1,5 @@ -using Volo.Abp.Domain; +using Volo.Abp.BlobStoring; +using Volo.Abp.Domain; using Volo.Abp.Modularity; using Volo.Abp.Users; using Volo.CmsKit.Reactions; @@ -8,7 +9,8 @@ namespace Volo.CmsKit [DependsOn( typeof(CmsKitDomainSharedModule), typeof(AbpUsersDomainModule), - typeof(AbpDddDomainModule) + typeof(AbpDddDomainModule), + typeof(AbpBlobStoringModule) )] public class CmsKitDomainModule : AbpModule { From 3abd7483d990fe78d4f2314cae7799bce56f15cc Mon Sep 17 00:00:00 2001 From: enisn Date: Tue, 19 Jan 2021 18:09:06 +0300 Subject: [PATCH 022/472] CmsKit - Blogs domain improvements --- .../Volo/CmsKit/Blogs/Blog.cs | 19 +++++++++++++++++-- .../Volo/CmsKit/Blogs/BlogPostManager.cs | 3 ++- .../Volo/CmsKit/Blogs/IBlogRepository.cs | 9 +++++++++ .../Volo/CmsKit/Contents/ContentManager.cs | 2 +- .../Volo/CmsKit/Contents/IContentManager.cs | 2 +- .../Volo/CmsKit/Blogs/BlogEfCoreRepository.cs | 14 ++++++++++++++ .../MongoDB/Blogs/BlogMongoRepository.cs | 14 ++++++++++++++ 7 files changed, 58 insertions(+), 5 deletions(-) create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogRepository.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/BlogEfCoreRepository.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/BlogMongoRepository.cs diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/Blog.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/Blog.cs index 59354c8e59..9ae19ff512 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/Blog.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/Blog.cs @@ -1,4 +1,6 @@ -using System; +using JetBrains.Annotations; +using System; +using Volo.Abp; using Volo.Abp.Domain.Entities.Auditing; using Volo.Abp.MultiTenancy; @@ -6,8 +8,21 @@ namespace Volo.CmsKit.Blogs { public class Blog : FullAuditedAggregateRoot, IMultiTenant { - public string Name { get; set; } + public Blog( + [NotNull] string name, + [CanBeNull] Guid? tenantId = null) + { + SetName(name); + TenantId = tenantId; + } + + public string Name { get; protected set; } public Guid? TenantId { get; } + + public void SetName(string name) + { + Name = Check.NotNullOrWhiteSpace(name, nameof(name), maxLength: BlogConsts.MaxNameLength); + } } } 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 06518cd29d..2b139fbdb6 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 @@ -3,10 +3,11 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using Volo.Abp.Domain.Services; namespace Volo.CmsKit.Blogs { - public class BlogPostManager : IBlogPostManager + public class BlogPostManager : DomainService, IBlogPostManager { protected readonly IBlogPostRepository _blogPostRepository; diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogRepository.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogRepository.cs new file mode 100644 index 0000000000..8ded8b2933 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogRepository.cs @@ -0,0 +1,9 @@ +using System; +using Volo.Abp.Domain.Repositories; + +namespace Volo.CmsKit.Blogs +{ + public interface IBlogRepository : IRepository + { + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Contents/ContentManager.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Contents/ContentManager.cs index 6eb2521ba2..047d923ad6 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Contents/ContentManager.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Contents/ContentManager.cs @@ -7,7 +7,7 @@ using System.Threading.Tasks; using Volo.Abp.Domain.Services; using Volo.CmsKit.Contents; -namespace Volo.CmsKit.Domain.Volo.CmsKit.Contents +namespace Volo.CmsKit.Contents { public class ContentManager : DomainService, IContentManager { diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Contents/IContentManager.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Contents/IContentManager.cs index e795e7895c..d64bd0effe 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Contents/IContentManager.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Contents/IContentManager.cs @@ -2,7 +2,7 @@ using System.Threading.Tasks; using Volo.CmsKit.Contents; -namespace Volo.CmsKit.Domain.Volo.CmsKit.Contents +namespace Volo.CmsKit.Contents { public interface IContentManager { diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/BlogEfCoreRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/BlogEfCoreRepository.cs new file mode 100644 index 0000000000..db6d5258ca --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/BlogEfCoreRepository.cs @@ -0,0 +1,14 @@ +using System; +using Volo.Abp.Domain.Repositories.EntityFrameworkCore; +using Volo.Abp.EntityFrameworkCore; +using Volo.CmsKit.EntityFrameworkCore; + +namespace Volo.CmsKit.Blogs +{ + public class BlogEfCoreRepository : EfCoreRepository, IBlogRepository + { + public BlogEfCoreRepository(IDbContextProvider dbContextProvider) : base(dbContextProvider) + { + } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/BlogMongoRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/BlogMongoRepository.cs new file mode 100644 index 0000000000..50e900f989 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/BlogMongoRepository.cs @@ -0,0 +1,14 @@ +using System; +using Volo.Abp.Domain.Repositories.MongoDB; +using Volo.Abp.MongoDB; +using Volo.CmsKit.Blogs; + +namespace Volo.CmsKit.MongoDB.Blogs +{ + public class BlogMongoRepository : MongoDbRepository, IBlogRepository + { + public BlogMongoRepository(IMongoDbContextProvider dbContextProvider) : base(dbContextProvider) + { + } + } +} From 69c42890a4df1dd5c6c9de61c4a25fb61f33035b Mon Sep 17 00:00:00 2001 From: enisn Date: Tue, 19 Jan 2021 18:09:41 +0300 Subject: [PATCH 023/472] CmsKit - BlogPosts Domain tests --- .../Blogs/BlogPostAdminAppService_Tests.cs | 16 ++++ .../Blogs/BlogPostManager_Tests.cs | 75 +++++++++++++++++++ .../CmsKitDataSeedContributor.cs | 39 +++++++--- .../Volo.CmsKit.TestBase/CmsKitTestData.cs | 14 ++++ 4 files changed, 134 insertions(+), 10 deletions(-) create mode 100644 modules/cms-kit/test/Volo.CmsKit.Application.Tests/Blogs/BlogPostAdminAppService_Tests.cs create mode 100644 modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Blogs/BlogPostManager_Tests.cs 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 new file mode 100644 index 0000000000..f0b3d595f4 --- /dev/null +++ b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Blogs/BlogPostAdminAppService_Tests.cs @@ -0,0 +1,16 @@ +using System; +using Shouldly; +using Volo.CmsKit.Admin.Blogs; + +namespace Volo.CmsKit.Blogs +{ + public class BlogPostAdminAppService_Tests : CmsKitApplicationTestBase + { + private readonly IBlogPostAdminAppService blogPostAdminAppService; + + public BlogPostAdminAppService_Tests() + { + blogPostAdminAppService = GetRequiredService(); + } + } +} 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 new file mode 100644 index 0000000000..5950fc1333 --- /dev/null +++ b/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Blogs/BlogPostManager_Tests.cs @@ -0,0 +1,75 @@ +using Shouldly; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Volo.Abp.Guids; +using Volo.CmsKit.Tags; +using Xunit; + +namespace Volo.CmsKit.Blogs +{ + public class BlogPostManager_Tests : CmsKitDomainTestBase + { + private readonly IBlogPostManager blogPostManager; + private readonly IGuidGenerator guidGenerator; + private readonly IBlogPostRepository blogPostRepository; + private readonly CmsKitTestData cmsKitTestData; + + public BlogPostManager_Tests( + IBlogPostManager blogPostManager, + IGuidGenerator guidGenerator, + IBlogPostRepository blogPostRepository, + CmsKitTestData cmsKitTestData) + { + this.blogPostManager = blogPostManager; + this.guidGenerator = guidGenerator; + this.blogPostRepository = blogPostRepository; + this.cmsKitTestData = cmsKitTestData; + } + + [Fact] + public async Task CreateAsync_ShouldWorkProperly_WithCorrectData() + { + var title = "New blog post"; + var urlSlug = "new-blog-post"; + + var created = await blogPostManager.CreateAsync( + new BlogPost(guidGenerator.Create(), title, urlSlug)); + + created.Id.ShouldNotBe(Guid.Empty); + + var blogPost = await blogPostRepository.GetAsync(created.Id); + blogPost.Title.ShouldBe(title); + blogPost.UrlSlug.ShouldBe(urlSlug); + } + + [Fact] + public async Task CreateAsync_ShouldThrowException_WhenUrlSlugAlreadyExists() + { + var blogPost = new BlogPost(guidGenerator.Create(), "Any New Title", cmsKitTestData.Blog_1_UrlSlug); + + await Should.ThrowAsync(async () => + await blogPostManager.CreateAsync(blogPost)); + } + + [Fact] + public async Task UpdateAsync_ShoudlWorkProperly_WithCorrectData() + { + var newTitle = "Yet Another Post"; + var newUrlSlug = "yet-another-post"; + + var blogPost = await blogPostRepository.GetAsync(cmsKitTestData.Blog_1_Id); + + blogPost.SetTitle(newTitle); + blogPost.SetUrlSlug(newUrlSlug); + + await blogPostManager.UpdateAsync(blogPost); + + var updated = await blogPostRepository.GetAsync(cmsKitTestData.Blog_1_Id); + updated.Title.ShouldBe(newTitle); + updated.UrlSlug.ShouldBe(newUrlSlug); + } + } +} diff --git a/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs b/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs index 46a552641b..8af99d512d 100644 --- a/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs +++ b/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs @@ -6,6 +6,7 @@ using Volo.Abp.DependencyInjection; using Volo.Abp.Guids; using Volo.Abp.MultiTenancy; using Volo.Abp.Users; +using Volo.CmsKit.Blogs; using Volo.CmsKit.Comments; using Volo.CmsKit.Contents; using Volo.CmsKit.Pages; @@ -29,6 +30,9 @@ namespace Volo.CmsKit private readonly IEntityTagRepository _entityTagRepository; private readonly ITagManager _tagManager; private readonly IPageRepository _pageRepository; + private readonly IBlogRepository _blogRepository; + private readonly IBlogPostRepository _blogPostRepository; + public CmsKitDataSeedContributor( IGuidGenerator guidGenerator, ICmsUserRepository cmsUserRepository, @@ -36,11 +40,13 @@ namespace Volo.CmsKit ICommentRepository commentRepository, ReactionManager reactionManager, IRatingRepository ratingRepository, - ICurrentTenant currentTenant, + ICurrentTenant currentTenant, IContentRepository contentRepository, - ITagManager tagManager, - IEntityTagRepository entityTagRepository, - IPageRepository pageRepository) + ITagManager tagManager, + IEntityTagRepository entityTagRepository, + IPageRepository pageRepository, + IBlogRepository blogRepository, + IBlogPostRepository blogPostRepository) { _guidGenerator = guidGenerator; _cmsUserRepository = cmsUserRepository; @@ -53,6 +59,8 @@ namespace Volo.CmsKit _tagManager = tagManager; _entityTagRepository = entityTagRepository; _pageRepository = pageRepository; + _blogRepository = blogRepository; + _blogPostRepository = blogPostRepository; } public async Task SeedAsync(DataSeedContext context) @@ -72,6 +80,8 @@ namespace Volo.CmsKit await SeedTagsAsync(); await SeedPagesAsync(); + + await SeedBlogsAsync(); } } @@ -208,14 +218,14 @@ namespace Volo.CmsKit _cmsKitTestData.Content_1_EntityId, _cmsKitTestData.Content_1 ); - + var content2 = new Content( _cmsKitTestData.Content_2_Id, _cmsKitTestData.Content_2_EntityType, _cmsKitTestData.Content_2_EntityId, _cmsKitTestData.Content_2 ); - + var content3 = new Content( Guid.NewGuid(), "deleted_entity_type", @@ -239,11 +249,11 @@ namespace Volo.CmsKit await _entityTagRepository.InsertAsync(new EntityTag(tagEntity.Id, _cmsKitTestData.Content_1_EntityId)); } - + foreach (var tag in _cmsKitTestData.Content_2_Tags) { var tagEntity = await _tagManager.InsertAsync(_guidGenerator.Create(), _cmsKitTestData.Content_2_EntityType, tag); - + await _entityTagRepository.InsertAsync(new EntityTag(tagEntity.Id, _cmsKitTestData.Content_2_EntityId)); } } @@ -252,15 +262,24 @@ namespace Volo.CmsKit { var page1 = new Page(_cmsKitTestData.Page_1_Id, _cmsKitTestData.Page_1_Title, _cmsKitTestData.Page_1_Url, _cmsKitTestData.Page_1_Description); var page1Content = new Content(_guidGenerator.Create(), nameof(Page), page1.Id.ToString(), _cmsKitTestData.Page_1_Content); - + await _pageRepository.InsertAsync(page1); await _contentRepository.InsertAsync(page1Content); - + var page2 = new Page(_cmsKitTestData.Page_2_Id, _cmsKitTestData.Page_2_Title, _cmsKitTestData.Page_2_Url, _cmsKitTestData.Page_2_Description); var page2Content = new Content(_guidGenerator.Create(), nameof(Page), page2.Id.ToString(), _cmsKitTestData.Page_2_Content); await _pageRepository.InsertAsync(page2); await _contentRepository.InsertAsync(page2Content); } + + private async Task SeedBlogsAsync() + { + var blog = await _blogRepository.InsertAsync(new Blog(_cmsKitTestData.BlogName)); + + await _blogPostRepository.InsertAsync(new BlogPost(blog.Id, _cmsKitTestData.Blog_1_Title, _cmsKitTestData.Blog_1_UrlSlug, "Short desc 1")); + + await _blogPostRepository.InsertAsync(new BlogPost(blog.Id, _cmsKitTestData.Blog_2_Title, _cmsKitTestData.Blog_2_UrlSlug, "Short desc 2")); + } } } diff --git a/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitTestData.cs b/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitTestData.cs index 7433759f40..e4b4fc89cb 100644 --- a/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitTestData.cs +++ b/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitTestData.cs @@ -59,5 +59,19 @@ namespace Volo.CmsKit public Guid Page_2_Id { get; } = Guid.NewGuid(); public string Page_2_Content => Content_2; + + public string BlogName => "Cms Blog"; + + public Guid Blog_1_Id { get; } = Guid.NewGuid(); + + public string Blog_1_Title => "How to install CmsKit?"; + + public string Blog_1_UrlSlug => "how-to-install-cms-kit"; + + public Guid Blog_2_Id { get; } = Guid.NewGuid(); + + public string Blog_2_Title => "How to use CmsKit?"; + + public string Blog_2_UrlSlug => "how-to-use-cms-kit?"; } } From 42c72d712e67d6632dd6e0fdcb6fcd93aa7a5642 Mon Sep 17 00:00:00 2001 From: enisn Date: Tue, 19 Jan 2021 18:15:02 +0300 Subject: [PATCH 024/472] CmsKit - Remove CoverImageUrl from BlogPost --- .../Volo/CmsKit/Blogs/BlogPostConsts.cs | 4 +--- .../CmsKitDbContextModelCreatingExtensions.cs | 2 -- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Blogs/BlogPostConsts.cs b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Blogs/BlogPostConsts.cs index 4f3ad07f7b..a4388aa945 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Blogs/BlogPostConsts.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Blogs/BlogPostConsts.cs @@ -1,11 +1,9 @@ namespace Volo.CmsKit.Blogs { - public class BlogPostConsts + public static class BlogPostConsts { public static int MaxTitleLength { get; set; } = 256; - public static int MaxCoverImageUrlLength { get; set; } = 2048; - public static int MaxUrlSlugLength { get; set; } = 256; public static int MinUrlSlugLength { get; set; } = 2; diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs index 2b9b3cdde0..3322253205 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs @@ -229,8 +229,6 @@ namespace Volo.CmsKit.EntityFrameworkCore b.Property(p => p.UrlSlug).IsRequired().HasMaxLength(BlogPostConsts.MaxUrlSlugLength); - b.Property(p => p.CoverImageUrl).HasMaxLength(BlogPostConsts.MaxCoverImageUrlLength); - b.HasIndex(x => x.UrlSlug); }); } From 888a01d1cfb05c019d2d7a19e244a3e5a6ec60f9 Mon Sep 17 00:00:00 2001 From: enisn Date: Tue, 19 Jan 2021 18:15:24 +0300 Subject: [PATCH 025/472] CmsKit - namespace fix for ContentAdminAppService --- .../Volo/CmsKit/Admin/Contents/ContentAdminAppService.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Contents/ContentAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Contents/ContentAdminAppService.cs index 4695339fd7..06145b2fca 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Contents/ContentAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Contents/ContentAdminAppService.cs @@ -4,7 +4,6 @@ using System.Threading.Tasks; using Volo.Abp.Application.Services; using Volo.Abp.Domain.Repositories; using Volo.CmsKit.Contents; -using Volo.CmsKit.Domain.Volo.CmsKit.Contents; using Volo.CmsKit.Permissions; namespace Volo.CmsKit.Admin.Contents From 5121670195c1b2c41518ccd9e17c7a8b37dd6ca0 Mon Sep 17 00:00:00 2001 From: enisn Date: Wed, 20 Jan 2021 16:35:20 +0300 Subject: [PATCH 026/472] CmsKit - Refactoring for BlogPosts --- .../CmsKit/Admin/Blogs/BlogPostAdminAppService.cs | 4 ++-- .../Volo/CmsKit/Blogs/BlogPost.cs | 5 +++-- .../Volo/CmsKit/Blogs/IBlogRepository.cs | 2 +- .../Volo/CmsKit/Blogs/BlogEfCoreRepository.cs | 14 -------------- ...reRepository.cs => EfCoreBlogPostRepository.cs} | 4 ++-- .../Volo/CmsKit/Blogs/EfCoreBlogRepository.cs | 14 ++++++++++++++ .../CmsKitEntityFrameworkCoreModule.cs | 3 +++ .../CmsKit/EntityFrameworkCore/ICmsKitDbContext.cs | 3 +++ ...ngoRepository.cs => MongoBlogPostRepository.cs} | 4 ++-- ...ogMongoRepository.cs => MongoBlogRepository.cs} | 4 ++-- .../Volo/CmsKit/MongoDB/CmsKitMongoDbModule.cs | 4 ++++ 11 files changed, 36 insertions(+), 25 deletions(-) delete mode 100644 modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/BlogEfCoreRepository.cs rename modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/{BlogPostEfCoreRepository.cs => EfCoreBlogPostRepository.cs} (85%) create mode 100644 modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogRepository.cs rename modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/{BlogPostMongoRepository.cs => MongoBlogPostRepository.cs} (84%) rename modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/{BlogMongoRepository.cs => MongoBlogRepository.cs} (69%) 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 2677b6c5ac..7ff775f376 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 @@ -28,7 +28,7 @@ namespace Volo.CmsKit.Admin.Blogs protected readonly IBlogPostRepository BlogPostRepository; protected readonly IBlobContainer BlobContainer; - protected BlogPostAdminAppService( + public BlogPostAdminAppService( IRepository repository, IBlogPostManager blogPostManager, IBlogPostRepository blogPostRepository) : base(repository) @@ -36,7 +36,6 @@ namespace Volo.CmsKit.Admin.Blogs BlogPostManager = blogPostManager; BlogPostRepository = blogPostRepository; - GetListPolicyName = CmsKitAdminPermissions.BlogPosts.Default; GetPolicyName = CmsKitAdminPermissions.BlogPosts.Default; CreatePolicyName = CmsKitAdminPermissions.BlogPosts.Create; @@ -57,6 +56,7 @@ namespace Volo.CmsKit.Admin.Blogs var entity = await BlogPostManager .CreateAsync( new BlogPost( + GuidGenerator.Create(), input.BlogId, input.Title, input.UrlSlug, 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 73fda09418..ac41adbe2a 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 @@ -9,7 +9,7 @@ using Volo.CmsKit.Users; namespace Volo.CmsKit.Blogs { - public class BlogPost : FullAuditedAggregateRootWithUser , IMultiTenant + public class BlogPost : FullAuditedAggregateRootWithUser, IMultiTenant { public Guid BlogId { get; protected set; } @@ -26,10 +26,11 @@ namespace Volo.CmsKit.Blogs } public BlogPost( + Guid id, Guid blogId, [NotNull] string title, [NotNull] string urlSlug, - [CanBeNull] string shortDescription = null) + [CanBeNull] string shortDescription = null) : base(id) { BlogId = blogId; SetTitle(title); diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogRepository.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogRepository.cs index 8ded8b2933..90e59587a2 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogRepository.cs @@ -3,7 +3,7 @@ using Volo.Abp.Domain.Repositories; namespace Volo.CmsKit.Blogs { - public interface IBlogRepository : IRepository + public interface IBlogRepository : IBasicRepository { } } diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/BlogEfCoreRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/BlogEfCoreRepository.cs deleted file mode 100644 index db6d5258ca..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/BlogEfCoreRepository.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System; -using Volo.Abp.Domain.Repositories.EntityFrameworkCore; -using Volo.Abp.EntityFrameworkCore; -using Volo.CmsKit.EntityFrameworkCore; - -namespace Volo.CmsKit.Blogs -{ - public class BlogEfCoreRepository : EfCoreRepository, IBlogRepository - { - public BlogEfCoreRepository(IDbContextProvider dbContextProvider) : base(dbContextProvider) - { - } - } -} diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/BlogPostEfCoreRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs similarity index 85% rename from modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/BlogPostEfCoreRepository.cs rename to modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs index 96e80b7c90..09445da84d 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/BlogPostEfCoreRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogPostRepository.cs @@ -7,9 +7,9 @@ using Volo.CmsKit.EntityFrameworkCore; namespace Volo.CmsKit.Blogs { - public class BlogPostEfCoreRepository : EfCoreRepository, IBlogPostRepository + public class EfCoreBlogPostRepository : EfCoreRepository, IBlogPostRepository { - public BlogPostEfCoreRepository(IDbContextProvider dbContextProvider) : base(dbContextProvider) + public EfCoreBlogPostRepository(IDbContextProvider dbContextProvider) : base(dbContextProvider) { } diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogRepository.cs new file mode 100644 index 0000000000..a43504642c --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogRepository.cs @@ -0,0 +1,14 @@ +using System; +using Volo.Abp.Domain.Repositories.EntityFrameworkCore; +using Volo.Abp.EntityFrameworkCore; +using Volo.CmsKit.EntityFrameworkCore; + +namespace Volo.CmsKit.Blogs +{ + public class EfCoreBlogRepository : EfCoreRepository, IBlogRepository + { + public EfCoreBlogRepository(IDbContextProvider dbContextProvider) : base(dbContextProvider) + { + } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitEntityFrameworkCoreModule.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitEntityFrameworkCoreModule.cs index c995c21dfb..61cd667aed 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitEntityFrameworkCoreModule.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitEntityFrameworkCoreModule.cs @@ -2,6 +2,7 @@ using Volo.Abp.EntityFrameworkCore; using Volo.Abp.Modularity; using Volo.Abp.Users.EntityFrameworkCore; +using Volo.CmsKit.Blogs; using Volo.CmsKit.Comments; using Volo.CmsKit.Contents; using Volo.CmsKit.Pages; @@ -31,6 +32,8 @@ namespace Volo.CmsKit.EntityFrameworkCore options.AddRepository(); options.AddRepository(); options.AddRepository(); + options.AddRepository(); + options.AddRepository(); }); } } 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 a5981fd000..feb1a5aacd 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 @@ -1,6 +1,7 @@ using Microsoft.EntityFrameworkCore; using Volo.Abp.Data; using Volo.Abp.EntityFrameworkCore; +using Volo.CmsKit.Blogs; using Volo.CmsKit.Comments; using Volo.CmsKit.Contents; using Volo.CmsKit.Pages; @@ -22,5 +23,7 @@ namespace Volo.CmsKit.EntityFrameworkCore DbSet Tags { get; set; } DbSet EntityTags { get; set; } DbSet Pages { get; set; } + DbSet Blogs { get; set; } + DbSet BlogPosts { get; set; } } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/BlogPostMongoRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs similarity index 84% rename from modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/BlogPostMongoRepository.cs rename to modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs index 63bfc0044f..166eda7f0d 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/BlogPostMongoRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs @@ -6,9 +6,9 @@ using Volo.CmsKit.Blogs; namespace Volo.CmsKit.MongoDB.Blogs { - public class BlogPostMongoRepository : MongoDbRepository, IBlogPostRepository + public class MongoBlogPostRepository : MongoDbRepository, IBlogPostRepository { - public BlogPostMongoRepository(IMongoDbContextProvider dbContextProvider) : base(dbContextProvider) + public MongoBlogPostRepository(IMongoDbContextProvider dbContextProvider) : base(dbContextProvider) { } diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/BlogMongoRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogRepository.cs similarity index 69% rename from modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/BlogMongoRepository.cs rename to modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogRepository.cs index 50e900f989..195c29f1f7 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/BlogMongoRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogRepository.cs @@ -5,9 +5,9 @@ using Volo.CmsKit.Blogs; namespace Volo.CmsKit.MongoDB.Blogs { - public class BlogMongoRepository : MongoDbRepository, IBlogRepository + public class MongoBlogRepository : MongoDbRepository, IBlogRepository { - public BlogMongoRepository(IMongoDbContextProvider dbContextProvider) : base(dbContextProvider) + public MongoBlogRepository(IMongoDbContextProvider dbContextProvider) : base(dbContextProvider) { } } diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbModule.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbModule.cs index 898b1687a8..b5ef74ac34 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbModule.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbModule.cs @@ -2,8 +2,10 @@ using Volo.Abp.Modularity; using Volo.Abp.MongoDB; using Volo.Abp.Users.MongoDB; +using Volo.CmsKit.Blogs; using Volo.CmsKit.Comments; using Volo.CmsKit.Contents; +using Volo.CmsKit.MongoDB.Blogs; using Volo.CmsKit.MongoDB.Comments; using Volo.CmsKit.MongoDB.Contents; using Volo.CmsKit.MongoDB.Pages; @@ -38,6 +40,8 @@ namespace Volo.CmsKit.MongoDB options.AddRepository(); options.AddRepository(); options.AddRepository(); + options.AddRepository(); + options.AddRepository(); }); } } From 763e9af37611198897153d1a71f681991f7a6577 Mon Sep 17 00:00:00 2001 From: enisn Date: Wed, 20 Jan 2021 16:35:34 +0300 Subject: [PATCH 027/472] CmsKit - Update Tests for BlogPosts --- .../Blogs/BlogPostManager_Tests.cs | 22 ++++---- .../CmsKitDataSeedContributor.cs | 5 +- .../CmsKitFakeCurrentUser.cs | 53 +++++++++++++++++++ .../CmsKitTestBaseModule.cs | 2 +- .../Volo.CmsKit.TestBase/CmsKitTestData.cs | 15 +++--- 5 files changed, 75 insertions(+), 22 deletions(-) create mode 100644 modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitFakeCurrentUser.cs 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 5950fc1333..a9d7aa2da7 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 @@ -17,16 +17,12 @@ namespace Volo.CmsKit.Blogs private readonly IBlogPostRepository blogPostRepository; private readonly CmsKitTestData cmsKitTestData; - public BlogPostManager_Tests( - IBlogPostManager blogPostManager, - IGuidGenerator guidGenerator, - IBlogPostRepository blogPostRepository, - CmsKitTestData cmsKitTestData) + public BlogPostManager_Tests() { - this.blogPostManager = blogPostManager; - this.guidGenerator = guidGenerator; - this.blogPostRepository = blogPostRepository; - this.cmsKitTestData = cmsKitTestData; + this.blogPostManager = GetRequiredService(); + this.guidGenerator = GetRequiredService(); + this.blogPostRepository = GetRequiredService(); + this.cmsKitTestData = GetRequiredService(); } [Fact] @@ -36,7 +32,7 @@ namespace Volo.CmsKit.Blogs var urlSlug = "new-blog-post"; var created = await blogPostManager.CreateAsync( - new BlogPost(guidGenerator.Create(), title, urlSlug)); + new BlogPost(guidGenerator.Create(), cmsKitTestData.Blog_Id, title, urlSlug)); created.Id.ShouldNotBe(Guid.Empty); @@ -48,7 +44,7 @@ namespace Volo.CmsKit.Blogs [Fact] public async Task CreateAsync_ShouldThrowException_WhenUrlSlugAlreadyExists() { - var blogPost = new BlogPost(guidGenerator.Create(), "Any New Title", cmsKitTestData.Blog_1_UrlSlug); + var blogPost = new BlogPost(guidGenerator.Create(), cmsKitTestData.Blog_Id, "Any New Title", cmsKitTestData.BlogPost_1_UrlSlug); await Should.ThrowAsync(async () => await blogPostManager.CreateAsync(blogPost)); @@ -60,14 +56,14 @@ namespace Volo.CmsKit.Blogs var newTitle = "Yet Another Post"; var newUrlSlug = "yet-another-post"; - var blogPost = await blogPostRepository.GetAsync(cmsKitTestData.Blog_1_Id); + var blogPost = await blogPostRepository.GetAsync(cmsKitTestData.BlogPost_1_Id); blogPost.SetTitle(newTitle); blogPost.SetUrlSlug(newUrlSlug); await blogPostManager.UpdateAsync(blogPost); - var updated = await blogPostRepository.GetAsync(cmsKitTestData.Blog_1_Id); + var updated = await blogPostRepository.GetAsync(cmsKitTestData.BlogPost_1_Id); updated.Title.ShouldBe(newTitle); updated.UrlSlug.ShouldBe(newUrlSlug); } diff --git a/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs b/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs index 8af99d512d..66489f80e8 100644 --- a/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs +++ b/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Threading.Tasks; using Volo.Abp.Data; using Volo.Abp.DependencyInjection; +using Volo.Abp.Domain.Repositories; using Volo.Abp.Guids; using Volo.Abp.MultiTenancy; using Volo.Abp.Users; @@ -277,9 +278,9 @@ namespace Volo.CmsKit { var blog = await _blogRepository.InsertAsync(new Blog(_cmsKitTestData.BlogName)); - await _blogPostRepository.InsertAsync(new BlogPost(blog.Id, _cmsKitTestData.Blog_1_Title, _cmsKitTestData.Blog_1_UrlSlug, "Short desc 1")); + await _blogPostRepository.InsertAsync(new BlogPost(_cmsKitTestData.BlogPost_1_Id, blog.Id, _cmsKitTestData.BlogPost_1_Title, _cmsKitTestData.BlogPost_1_UrlSlug, "Short desc 1")); - await _blogPostRepository.InsertAsync(new BlogPost(blog.Id, _cmsKitTestData.Blog_2_Title, _cmsKitTestData.Blog_2_UrlSlug, "Short desc 2")); + await _blogPostRepository.InsertAsync(new BlogPost(_cmsKitTestData.BlogPost_2_Id, blog.Id, _cmsKitTestData.BlogPost_2_Title, _cmsKitTestData.BlogPost_2_UrlSlug, "Short desc 2")); } } } diff --git a/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitFakeCurrentUser.cs b/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitFakeCurrentUser.cs new file mode 100644 index 0000000000..ba9c492889 --- /dev/null +++ b/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitFakeCurrentUser.cs @@ -0,0 +1,53 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Security.Claims; +using System.Text; +using System.Threading.Tasks; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Users; + +namespace Volo.CmsKit +{ + public class CmsKitFakeCurrentUser : ITransientDependency, ICurrentUser + { + private readonly CmsKitTestData cmsKitTestData; + + public CmsKitFakeCurrentUser(CmsKitTestData cmsKitTestData) + { + this.cmsKitTestData = cmsKitTestData; + } + + public bool IsAuthenticated { get; } + public Guid? Id => cmsKitTestData.User1Id; + public string UserName => cmsKitTestData.User1UserName; + public string Name { get; } + public string SurName { get; } + public string PhoneNumber { get; } + public bool PhoneNumberVerified { get; } + public string Email { get; } + public bool EmailVerified { get; } + public Guid? TenantId { get; } + public string[] Roles { get; } + + public Claim FindClaim(string claimType) + { + throw new NotImplementedException(); + } + + public Claim[] FindClaims(string claimType) + { + throw new NotImplementedException(); + } + + public Claim[] GetAllClaims() + { + throw new NotImplementedException(); + } + + public bool IsInRole(string roleName) + { + throw new NotImplementedException(); + } + } +} diff --git a/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitTestBaseModule.cs b/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitTestBaseModule.cs index e12f3d31e8..afa4dbe47e 100644 --- a/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitTestBaseModule.cs +++ b/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitTestBaseModule.cs @@ -53,7 +53,7 @@ namespace Volo.CmsKit { using (var scope = context.ServiceProvider.CreateScope()) { - await scope.ServiceProvider + await scope.ServiceProvider .GetRequiredService() .SeedAsync(); } diff --git a/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitTestData.cs b/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitTestData.cs index e4b4fc89cb..2da69a5ac6 100644 --- a/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitTestData.cs +++ b/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitTestData.cs @@ -7,6 +7,7 @@ namespace Volo.CmsKit public class CmsKitTestData : ISingletonDependency { public Guid User1Id { get; } = Guid.NewGuid(); + public string User1UserName => "fake.user"; public Guid User2Id { get; } = Guid.NewGuid(); @@ -60,18 +61,20 @@ namespace Volo.CmsKit public string Page_2_Content => Content_2; + public Guid Blog_Id { get; } = Guid.NewGuid(); + public string BlogName => "Cms Blog"; - public Guid Blog_1_Id { get; } = Guid.NewGuid(); + public Guid BlogPost_1_Id { get; } = Guid.NewGuid(); - public string Blog_1_Title => "How to install CmsKit?"; + public string BlogPost_1_Title => "How to install CmsKit?"; - public string Blog_1_UrlSlug => "how-to-install-cms-kit"; + public string BlogPost_1_UrlSlug => "how-to-install-cms-kit"; - public Guid Blog_2_Id { get; } = Guid.NewGuid(); + public Guid BlogPost_2_Id { get; } = Guid.NewGuid(); - public string Blog_2_Title => "How to use CmsKit?"; + public string BlogPost_2_Title => "How to use CmsKit?"; - public string Blog_2_UrlSlug => "how-to-use-cms-kit?"; + public string BlogPost_2_UrlSlug => "how-to-use-cms-kit?"; } } From 0b3cd00846c4318dcc0f867f888fe007978876c8 Mon Sep 17 00:00:00 2001 From: enisn Date: Wed, 20 Jan 2021 16:44:23 +0300 Subject: [PATCH 028/472] CmsKit - Add missing Feature attributes to Blogs appservices --- .../Volo/CmsKit/Admin/Blogs/BlogAdminAppService.cs | 3 +++ .../Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs | 3 +++ 2 files changed, 6 insertions(+) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogAdminAppService.cs index e7075dcc22..b6c2195981 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogAdminAppService.cs @@ -2,11 +2,14 @@ using System; using Volo.Abp.Application.Services; using Volo.Abp.Domain.Repositories; +using Volo.Abp.GlobalFeatures; using Volo.CmsKit.Blogs; +using Volo.CmsKit.GlobalFeatures; using Volo.CmsKit.Permissions; namespace Volo.CmsKit.Admin.Blogs { + [RequiresGlobalFeature(typeof(BlogsFeature))] [Authorize(CmsKitAdminPermissions.Blogs.Default)] public class BlogAdminAppService : CrudAppService, IBlogAdminAppService { 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 7ff775f376..c714c6482b 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 @@ -9,11 +9,14 @@ using Volo.Abp.Application.Services; using Volo.Abp.BlobStoring; using Volo.Abp.Content; using Volo.Abp.Domain.Repositories; +using Volo.Abp.GlobalFeatures; using Volo.CmsKit.Blogs; +using Volo.CmsKit.GlobalFeatures; using Volo.CmsKit.Permissions; namespace Volo.CmsKit.Admin.Blogs { + [RequiresGlobalFeature(typeof(BlogsFeature))] [Authorize(CmsKitAdminPermissions.BlogPosts.Default)] public class BlogPostAdminAppService : CrudAppService< From e6db0a1efe4bb7c56906659c0168c4f21c24f2ff Mon Sep 17 00:00:00 2001 From: enisn Date: Wed, 20 Jan 2021 17:57:55 +0300 Subject: [PATCH 029/472] CmsKit - Add more test-cases for BlogPosts --- .../Volo/CmsKit/Admin/Blogs/BlogPostDto.cs | 12 +- .../Admin/Blogs/CreateUpdateBlogPostDto.cs | 8 +- .../Admin/Blogs/BlogPostAdminAppService.cs | 11 +- ...CmsKitAdminApplicationAutoMapperProfile.cs | 8 + .../Volo/CmsKit/Blogs/BlogPostConsts.cs | 4 +- .../Volo/CmsKit/Blogs/Blog.cs | 3 +- .../Volo/CmsKit/Blogs/BlogPost.cs | 4 +- .../Volo/CmsKit/Blogs/BlogPostManager.cs | 25 ++- .../BlogPostUrlSlugAlreadyExistException.cs | 6 +- .../CmsKitDbContextModelCreatingExtensions.cs | 2 + .../Blogs/BlogPostAdminAppService_Tests.cs | 199 ++++++++++++++++++ .../Data/BlogPostSample.png | Bin 0 -> 6932 bytes .../Volo.CmsKit.Application.Tests.csproj | 8 + .../CmsKitDataSeedContributor.cs | 2 +- .../Volo.CmsKit.TestBase/CmsKitTestData.cs | 1 + 15 files changed, 263 insertions(+), 30 deletions(-) create mode 100644 modules/cms-kit/test/Volo.CmsKit.Application.Tests/Data/BlogPostSample.png 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 823efdfc4e..2c3ff84d48 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 @@ -5,16 +5,10 @@ namespace Volo.CmsKit.Admin.Blogs { public class BlogPostDto : EntityDto { - public Guid BlogId { get; protected set; } + public Guid BlogId { get; set; } - public string Title { get; protected set; } + public string Title { get; set; } - public string UrlSlug { get; protected set; } - - public string CoverImageUrl { get; set; } - - public bool IsPublished { get; protected set; } - - public DateTime? PublishDate { get; protected set; } + public string UrlSlug { get; set; } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/CreateUpdateBlogPostDto.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/CreateUpdateBlogPostDto.cs index b013a9d397..09d881189b 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/CreateUpdateBlogPostDto.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/CreateUpdateBlogPostDto.cs @@ -4,12 +4,12 @@ namespace Volo.CmsKit.Admin.Blogs { public class CreateUpdateBlogPostDto { - public Guid BlogId { get; protected set; } + public Guid BlogId { get; set; } - public string Title { get; protected set; } + public string Title { get; set; } - public string UrlSlug { get; protected set; } + public string UrlSlug { get; set; } - public string CoverImageUrl { get; set; } + public string ShortDescription { 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 c714c6482b..36ded2ba1f 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 @@ -1,8 +1,5 @@ using Microsoft.AspNetCore.Authorization; using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; using System.Threading.Tasks; using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Services; @@ -34,10 +31,12 @@ namespace Volo.CmsKit.Admin.Blogs public BlogPostAdminAppService( IRepository repository, IBlogPostManager blogPostManager, - IBlogPostRepository blogPostRepository) : base(repository) + IBlogPostRepository blogPostRepository, + IBlobContainer blobContainer) : base(repository) { BlogPostManager = blogPostManager; BlogPostRepository = blogPostRepository; + BlobContainer = blobContainer; GetListPolicyName = CmsKitAdminPermissions.BlogPosts.Default; GetPolicyName = CmsKitAdminPermissions.BlogPosts.Default; @@ -63,7 +62,7 @@ namespace Volo.CmsKit.Admin.Blogs input.BlogId, input.Title, input.UrlSlug, - input.CoverImageUrl)); + input.ShortDescription)); return MapToGetOutputDto(entity); } @@ -78,6 +77,8 @@ namespace Volo.CmsKit.Admin.Blogs MapToEntity(input, entity); + await BlogPostManager.UpdateAsync(entity); + return MapToGetOutputDto(entity); } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/CmsKitAdminApplicationAutoMapperProfile.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/CmsKitAdminApplicationAutoMapperProfile.cs index 1524fe6299..e682e80d30 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/CmsKitAdminApplicationAutoMapperProfile.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/CmsKitAdminApplicationAutoMapperProfile.cs @@ -1,6 +1,8 @@ using AutoMapper; +using Volo.CmsKit.Admin.Blogs; using Volo.CmsKit.Admin.Contents; using Volo.CmsKit.Admin.Pages; +using Volo.CmsKit.Blogs; using Volo.CmsKit.Contents; using Volo.CmsKit.Pages; @@ -16,6 +18,12 @@ namespace Volo.CmsKit.Admin CreateMap(MemberList.Destination); CreateMap(MemberList.Source); CreateMap(MemberList.Source); + + CreateMap(MemberList.Destination); + CreateMap(MemberList.Source); + + CreateMap(MemberList.Destination) + .ReverseMap(); } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Blogs/BlogPostConsts.cs b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Blogs/BlogPostConsts.cs index a4388aa945..607effcebd 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Blogs/BlogPostConsts.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Blogs/BlogPostConsts.cs @@ -2,10 +2,12 @@ { public static class BlogPostConsts { - public static int MaxTitleLength { get; set; } = 256; + public static int MaxTitleLength { get; set; } = 64; public static int MaxUrlSlugLength { get; set; } = 256; public static int MinUrlSlugLength { get; set; } = 2; + + public static int MaxShortDescriptionLength { get; set; } = 256; } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/Blog.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/Blog.cs index 9ae19ff512..0ec587f52e 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/Blog.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/Blog.cs @@ -9,8 +9,9 @@ namespace Volo.CmsKit.Blogs public class Blog : FullAuditedAggregateRoot, IMultiTenant { public Blog( + Guid id, [NotNull] string name, - [CanBeNull] Guid? tenantId = null) + [CanBeNull] Guid? tenantId = null) : base(id) { SetName(name); TenantId = tenantId; 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 ac41adbe2a..62a73ec352 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 @@ -15,10 +15,10 @@ namespace Volo.CmsKit.Blogs public string Title { get; protected set; } - public string ShortDescription { get; set; } - public string UrlSlug { get; protected set; } + public string ShortDescription { get; set; } + public Guid? TenantId { get; } protected BlogPost() 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 2b139fbdb6..6bbb772072 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 @@ -9,33 +9,46 @@ namespace Volo.CmsKit.Blogs { public class BlogPostManager : DomainService, IBlogPostManager { - protected readonly IBlogPostRepository _blogPostRepository; + protected readonly IBlogPostRepository blogPostRepository; + protected readonly IBlogRepository blogRepository; - public BlogPostManager(IBlogPostRepository blogPostRepository) + public BlogPostManager( + IBlogPostRepository blogPostRepository, + IBlogRepository blogRepository) { - _blogPostRepository = blogPostRepository; + this.blogPostRepository = blogPostRepository; + this.blogRepository = blogRepository; } public async Task CreateAsync(BlogPost blogPost) { + await CheckBlogExistenceAsync(blogPost.BlogId); + await CheckUrlSlugExistenceAsync(blogPost.UrlSlug); - return await _blogPostRepository.InsertAsync(blogPost); + return await blogPostRepository.InsertAsync(blogPost); } public async Task UpdateAsync(BlogPost blogPost) { + await CheckBlogExistenceAsync(blogPost.BlogId); + await CheckUrlSlugExistenceAsync(blogPost.UrlSlug); - await _blogPostRepository.UpdateAsync(blogPost); + await blogPostRepository.UpdateAsync(blogPost); } private async Task CheckUrlSlugExistenceAsync(string urlSlug) { - if (await _blogPostRepository.SlugExistsAsync(urlSlug)) + if (await blogPostRepository.SlugExistsAsync(urlSlug)) { throw new BlogPostUrlSlugAlreadyExistException(urlSlug); } } + + private async Task CheckBlogExistenceAsync(Guid blogId) + { + await blogRepository.GetAsync(blogId); + } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogPostUrlSlugAlreadyExistException.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogPostUrlSlugAlreadyExistException.cs index 22816c5d7e..c21ccfa8e7 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogPostUrlSlugAlreadyExistException.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogPostUrlSlugAlreadyExistException.cs @@ -19,9 +19,13 @@ namespace Volo.CmsKit.Blogs public BlogPostUrlSlugAlreadyExistException(string urlSlug) { + UrlSlug = urlSlug; + Code = CmsKitErrorCodes.Blogs.UrlSlugAlreadyExist; - WithData(nameof(BlogPost.UrlSlug), urlSlug); + WithData(nameof(UrlSlug), UrlSlug); } + + public string UrlSlug { get; } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs index 3322253205..c868bde907 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs @@ -229,6 +229,8 @@ namespace Volo.CmsKit.EntityFrameworkCore b.Property(p => p.UrlSlug).IsRequired().HasMaxLength(BlogPostConsts.MaxUrlSlugLength); + b.Property(p => p.ShortDescription).HasMaxLength(BlogPostConsts.MaxShortDescriptionLength); + b.HasIndex(x => x.UrlSlug); }); } 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 f0b3d595f4..07897d0d5b 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 @@ -1,16 +1,215 @@ using System; +using System.IO; +using System.Threading.Tasks; +using Castle.DynamicProxy.Generators; using Shouldly; +using Volo.Abp.Application.Dtos; +using Volo.Abp.Content; +using Volo.Abp.Domain.Entities; using Volo.CmsKit.Admin.Blogs; +using Xunit; namespace Volo.CmsKit.Blogs { public class BlogPostAdminAppService_Tests : CmsKitApplicationTestBase { private readonly IBlogPostAdminAppService blogPostAdminAppService; + private readonly CmsKitTestData cmsKitTestData; + private readonly IBlogPostRepository blogPostRepository; public BlogPostAdminAppService_Tests() { blogPostAdminAppService = GetRequiredService(); + cmsKitTestData = GetRequiredService(); + blogPostRepository = GetRequiredService(); } + + [Fact] + public async Task CreateAsync_ShouldWorkProperly_WithCorrectData() + { + var title = "My awesome new Post"; + var urlSlug = "my-awesome-new-post"; + var shortDescription = "This blog is all about awesomeness 🤗!"; + + var created = await blogPostAdminAppService.CreateAsync(new CreateUpdateBlogPostDto + { + BlogId = cmsKitTestData.Blog_Id, + Title = title, + UrlSlug = urlSlug, + ShortDescription = shortDescription + }); + + created.Id.ShouldNotBe(Guid.Empty); + + var blogPost = await blogPostRepository.GetAsync(created.Id); + + blogPost.Title.ShouldBe(title); + blogPost.UrlSlug.ShouldBe(urlSlug); + blogPost.ShortDescription.ShouldBe(shortDescription); + } + + [Fact] + public async Task CreateAsync_ShouldThrowException_WithNonExistingBlogId() + { + var title = "Another My Awesome New Post"; + var urlSlug = "another-my-awesome-new-post"; + var shortDescription = "This blog is all about awesomeness 🤗!"; + + var dto = new CreateUpdateBlogPostDto + { + // Non-existing Id + BlogId = Guid.NewGuid(), + Title = title, + UrlSlug = urlSlug, + ShortDescription = shortDescription + }; + + var exception = await Should.ThrowAsync(async () => + await blogPostAdminAppService.CreateAsync(dto)); + + exception.EntityType.ShouldBe(typeof(Blog)); + } + + [Fact] + public async Task GetAsync_ShouldWorkProperly_WithExistingId() + { + var blogPost = await blogPostAdminAppService.GetAsync(cmsKitTestData.BlogPost_1_Id); + + blogPost.Title.ShouldBe(cmsKitTestData.BlogPost_1_Title); + blogPost.UrlSlug.ShouldBe(cmsKitTestData.BlogPost_1_UrlSlug); + } + + [Fact] + public async Task GetAsync_ShouldThrowException_WithNonExistingId() + { + var nonExistingId = Guid.NewGuid(); + var exception = await Should.ThrowAsync(async () => + await blogPostAdminAppService.GetAsync(nonExistingId)); + + exception.EntityType.ShouldBe(typeof(BlogPost)); + exception.Id.ShouldBe(nonExistingId); + } + + [Fact] + public async Task GetByUrlSlugAsync_ShouldWorkProperly_WithExistingUrlSlug() + { + var blogPost = await blogPostAdminAppService.GetByUrlSlugAsync(cmsKitTestData.BlogPost_1_UrlSlug); + + blogPost.Id.ShouldBe(cmsKitTestData.BlogPost_1_Id); + blogPost.Title.ShouldBe(cmsKitTestData.BlogPost_1_Title); + } + + [Fact] + public async Task GetByUrlSlugAsync_ShouldThrowException_WithNonExistingUrlSlug() + { + var nonExistingUrlSlug = "any-other-url"; + var exception = await Should.ThrowAsync(async () => + await blogPostAdminAppService.GetByUrlSlugAsync(cmsKitTestData.Page_1_Url)); + + exception.EntityType.ShouldBe(typeof(BlogPost)); + } + + [Fact] + public async Task GetListAsync_ShouldWorkProperly_WithDefaultParameters() + { + var list = await blogPostAdminAppService.GetListAsync(new PagedAndSortedResultRequestDto()); + + list.ShouldNotBeNull(); + list.TotalCount.ShouldBe(2); + list.Items.ShouldNotBeEmpty(); + list.Items.Count.ShouldBe(2); + } + + [Fact] + public async Task UpdateAsync_ShouldWorkProperly_WithRegularDatas() + { + var shortDescription = "Another short description"; + var title = "[Solved] Another Blog Post"; + var urlSlug = "another-short-blog-post"; + + await blogPostAdminAppService.UpdateAsync(cmsKitTestData.BlogPost_2_Id, new CreateUpdateBlogPostDto + { + BlogId = cmsKitTestData.Blog_Id, + ShortDescription = shortDescription, + Title = title, + UrlSlug = urlSlug, + }); + + var blogPost = await blogPostRepository.GetAsync(cmsKitTestData.BlogPost_2_Id); + + blogPost.Title.ShouldBe(title); + blogPost.ShortDescription.ShouldBe(shortDescription); + blogPost.UrlSlug.ShouldBe(urlSlug); + } + + [Fact] + public async Task UpdateAsync_ShouldThrowException_WhileChangingWithNonExistingBlogId() + { + var nonExistingId = Guid.NewGuid(); + + var dto = new CreateUpdateBlogPostDto + { + BlogId = nonExistingId, + Title = cmsKitTestData.Page_2_Title, + UrlSlug = cmsKitTestData.BlogPost_2_UrlSlug + }; + + var exception = await Should.ThrowAsync(async () => + await blogPostAdminAppService.UpdateAsync(cmsKitTestData.BlogPost_2_Id, dto)); + + exception.EntityType.ShouldBe(typeof(Blog)); + exception.Id.ShouldBe(nonExistingId); + } + + [Fact] + public async Task UpdateAsync_ShouldThrowException_WhileUpdatingWithAlreadyExistingSlug() + { + var dto = new CreateUpdateBlogPostDto + { + BlogId = cmsKitTestData.Blog_Id, + Title = "Some new title", + UrlSlug = cmsKitTestData.BlogPost_1_UrlSlug + }; + + var exception = await Should.ThrowAsync(async () => + await blogPostAdminAppService.UpdateAsync(cmsKitTestData.BlogPost_2_Id, dto)); + + exception.UrlSlug.ShouldBe(cmsKitTestData.BlogPost_1_UrlSlug); + } + + [Fact] + public async Task DeleteAsync_ShouldWorkProperly_WithExistingId() + { + await blogPostAdminAppService.DeleteAsync(cmsKitTestData.Page_2_Id); + + var exception = await Should.ThrowAsync(async () => + await blogPostRepository.GetAsync(cmsKitTestData.Page_2_Id)); + + exception.EntityType.ShouldBe(typeof(BlogPost)); + exception.Id.ShouldBe(cmsKitTestData.Page_2_Id); + } + + [Fact] + public async Task SetCoverImage_ShouldNotThrowException_WithCorrectData() + { + using (var imageStream = GetSampleImageStream()) + { + await WithUnitOfWorkAsync(async () => + { + await blogPostAdminAppService.SetCoverImageAsync( + cmsKitTestData.BlogPost_2_Id, + new RemoteStreamContent(imageStream)); + }); + } + } + + private Stream GetSampleImageStream() + { + var assembly = GetType().Assembly; + var resourceName = "Volo.CmsKit.Data.BlogPostSample.png"; + + return assembly.GetManifestResourceStream(resourceName); + } + // SetCoverImage } } diff --git a/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Data/BlogPostSample.png b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Data/BlogPostSample.png new file mode 100644 index 0000000000000000000000000000000000000000..117bc57c3d3730c6ddc12346bb60c351716520c6 GIT binary patch literal 6932 zcmV+v8|&nWP)CMy6iA^<4*`1(2kKIPu#T0C7+DOG7o zYs0t0tDCIW&etITC*s}W%f!s~^7bA8B!Ovz8~`HZ+vL2jy|$~io{XUE=j>rYWX{6R z=m0|K07-UVc+9}fv!t{Z03Di%oag{dh;oXQftGJoa;~4RL>xy^E>vMXWIql=S1(#{ zQFG47&Pf?fmxY;7EK`ekjr-2sY*ugZZmFh5P<{Bm&O-o4>@92WW{Qr1knww*000S_QL3Q;02$m#L_t(|ob6rvU)wmg zPbxoT%TCC{0h0%D(uR}(O$(UN*zo#o6Gz?>_cnZ&ZTZ@%(Ocdg|x~!J395(oBpE-LiYD z$$b2_2v10^H*D&Tfl*aS2pf(yYQJrSCn3MJU7ZqB4Lv8#up5`2|JB7Qgz&{YSj;3!b@EyqAJOce4Y5Gy? zxd;CfklWB6hyP9)H@)W`{;Q{Nz(0~gM)%DYdMq8p_c!4mt$;p#=4tH7KjZY=V<|?* zwSx_*#((Gb62s6VKbT-s%d(D~b@0qniKu_7$7GS`9!nvb>mO6_kNjK%U9GQY!}j#- zY(Bi~HrEdtN%f1X<_p*Yb!J4M+H;Sk0QnQUYAf(ZrjD<|>50VAb#ETtVm)OII+N$t z0cxH@4DT&@1vK)kO5hdYf7v+<6yUEpM}ra)+@C5|09nJQ z8E+waJ@|L6Y65@LIcmv5Kj?d&_scK8cwSvz8h2hZq%GiFKKbBN>DA!h)vF2oH#jLd zyw+@V8`+`6uq>V6+STH^oivI3OF3$1&3?=r6!dEFZ<$- zK}sR~?GniCd*kzSuV3s*dHC18@%Vh)uYVWYEbyYCja6~UG#Z(@3V+W@z>j<3IQ=Pu z`_sg3!7B<+%Mo@)_wlofs6U--h!K%)7zA&whq+E&2L8cdyT%Zm`>$Shk>VkV!hu!smGx5{eENtD5X^GIuT|`9 zQ>H25?@p_7hE5>U9;Gg4lDuUnyGjsQtJFQPWB(ldkuGFTg5jiQ>tyeL5yP@;cT>1J zZdZ`?%-?N7_^h%U;A~YO21Qb)nZ(~46$q(da#KhT__GY&XYX}Fbq$VtyZdn_{)m8C zxr5M1_*)3;xCzaMAxwQSf42^8AahhHL%}3zi=|A{?y4|L;6KbiNwp_^QJ`*V{7@`7 ziK|N980?uf3x8ztaHcz7NLj5tna%<{zI_T`O#R(09B8Rbz{#d?0M@uw*c$@=e$&c& zfG{g9*Hyfb+@3T-)>h^XceIBy1Aj!gs5oEfsc+LPATZl-2k7x6T)1s;2_K-Pv@BA{ ztjazL!2e623aO+K>I}1o)-Al25m`-X0lb4y$iQD`Ea1+valj_e?_PBH=h{`Q7Uw_( zmk7g6m9l4d^4L_3N5fK zm$jZFbC|VFAKJBqh(?@VZ5ejM(Z;rQ$za3x;tudvhvB5+&&Eju?2%MhFQ4BtMPec9LA6{&0Cfc< z^k!->D+r-~ok%k)@h6+qY9#kU&;#1N!mq9i8rHM*9Y5XUvqmVM!3fL?=X*C(DEtx5te=Bb<$ z;oP$-U@l};$s)_0@h3v;Wy4;4Ll;JkzeNR~$b}{m+6x3{O>qS}ZTV+<9KLGS8D~# zrG5>J^pxug3IBZfcg_`9eJdgQX5fFMNI^jx0EC-|&p2Nz;t34Fz>ORQFaZiAY0|6715XDLjwJs2u*k!F;KDFfc%T5-J_Sqqwg5%vFqsQB zS{44(_z6HF4AoL$I0qIg3-2!&KWg!w@PORRDaGo8uNL)|p~CJlQ#FAfo6A9umCg#8h@#j_MuM;%p zhE9j+K8Ry+_K&8-Et#D(m;?7z!k;=!$DF6B+YoX8JAvNQ9l&`TJseou=hCZpU}9)a zS*Z~i5F3eJTxOD$K8K73&LI9q!9tpt0Axe@*)@Bd+06K9GX6N`IWC3K zBDQn?lYl>xLH|1Z$L9$aI(44!h>c!V%4ir(u0>@0>Cjn-h%2DKJ|*%0^zZmz6ZU&*+b^}`Cn0|=XDON15{gBM zLq8PRMa2FXx-uDcVzaDBv8BoxOYpvH*Ulm zaqBPO)n*BHE*zbb#eiILX^X=r0ROBdR}z=?Mr?kZFfJ~;n3ZeJ-)EIZ7XI<1U9M7T z1mHJ`{UZSstKb$>0909X1BeP<=vJlYR(m2lO;7@>mmda5Q-@w$VoErtk zuO{%*o60>Klmh?GVX}CQP3lgKv1!(Eb#BDRQtZ?`<@NaPZ5B%?|@PGH$;rBc) z$na;vlHw0iFxoObX~!j5=@YA5XBmf-4G4=mWgj+`CUBh;(#0uYQWf1l690+{e#-w| z2LDrK3-Mp4;?G?PmV_=$+yk>D{H?MN;{&16QWDZ72*fB=@`s<2NXP$g#RmBFzwux> zv&8y$F3Eq0e|qo=;D1qel3%|k{<2B&E%@{3;Ht8b@$VME|Bnwc{xk-}y#>ncHW0eMr?j>e{_@`&!xuviRm6Rf2e^UH; z7T}*HKY`z0vR?ss0mUD9fhDy`A0!E5(Z%sE9e?AC8EvKkJPr{*h$VY7@vr>)_xpGS zKE3}tj=fcU5ZR}xGHy^YT?^oGGAi1*;Z)WE21z7}|Cmp;qyxs)FWST(0sKog)9G^t z?FBG5#lrOruWbAy8T8w`_YuAOFVDb(azmDt=7tB`_yB)9BN)>Ho2gXHCIE-eDE=vE>70RAOegNI&rc5na-Mq=H<^BHZDXSUrc7~1N=daQ4!*1*xr`_@`w5seLDC8_>0uyt{tBvQ1R^I z368&(SvdwEtCncU;KEvAhCkSJoiY{>Xq(WZgMj##at?vO-wQ4fTc()`wnSy|Z@~i^ zv{(#OT=3+5yI}Yn)}NG!^TKj5jz8GzWsDYJzOk};0sl-9nj}z1OLmL-6&OI(_&LC)XYW3PK*Yu#bg5L;DY7gpGulWa}u!9TnA8d{BzIWL1AuQ<$gW5 zO^yxVUl{-s0pa`wfTyd`1_<0F{zZEFPT?_TRu}BUSI}m8hoioa#9u>9P5^gU(0CMo z#s%qAhYbtN^s^uFz^~*xH=wBi#R8&KYSei zc*U6X9K6ziDMX4tDUerhLv^ZUOO2K$cjFN7?+Zp+_H`&?vkOtg%lKExC{sELT~d(A zzY7JBb`&pS-F__oI`8iRPkYcZr~^^_jUpQLT6mjtooYF{GgX%q0sqQe@D0c+eE?G| z9t0Ik90mSWGh;vP@3RAw0H&M|H#jSdzce0&zt-XYtlIz+5YJA<_%n|?ll+y~f8aD_ znp3Q7&LZNUXqbUMPSmEOw-&9~#I+qN{G(Sj)XN#nJ__F#mBkEdIJ(PrT~SKokMw&G zSZTtOyGMd_jPWmcro~IxS30_piVlLdmeS8Hfxo**9K^G`lK12e)~6!CdZJ2Ijek|^ zt>yk3UbmNcrKt6wkHf?9Eh_{6l%AOnkTV74l{h*Y<8Kzc6S8H9Z$iXgTzEcfKizMK zozzZ}3H&R;Rk9yUr?zeJX4b)At0fzXk)*elg8vQ#YcdVk!~FA$`((#VZ6hv`3m?YM zl1)e|{_a92;sB6F@X;AuR-qS0lF<+N7tce<{g*V-*|lHVe!ZJ4G~3ANOO(XFa=c1@ z8)2(+Kl*(4bvqe-vE}=nh~!=Y$fT9Py8UGtMi09SH@YLSs)mw!T4>AJp@J@0^-|-X zt~Wcv7TGoI+BMqJtyS|<;BdDIS(ZzmF~q-+_N5D;VDH_lBT})Vd6ka8%1DhnhN*jo z8FJ4yjz3zYKP=f7Wz{pL3_`j?2 zI;K@&huh5dY0?t`yBF%ED#yIy{U@>6f(6Qo1he0i1X>y)TXjH$)O21pj0mBZh^)WpGXgY74Noy*g$ru zb`M1SE5W2lYdrlbt=7XA8qFtSNoDZ&FHl0^6E5YO7<2qf*DW2UnbUw#>&5NKa`CTJ zhE9$|L)I!Sv68^QQaNAcwUZ{wu01gc!67l!R04l*i<9OS;pP1odKKXRv2@+`{teAu z#vZ`E1qCepXvg$_sRc&C*2(BUANh0bRKO(scOCmOdT=Asn`P!`?uFkv5FCa5-&Rf2lq(HmKjJ_Y`fo48E6 zMe)P1j)pn;&J#fz3ND($|LvUOuzgPNstLS7yJ@K|lF+%|xKB$l{B>Nm1{sW})kFp{ zdDsf=Zuu}5)3V3v_T+U}#DHf1?qPT(M>qsh;vbnF!-jY@@~%B3spedbvZt9K3^9mi zyZ4l>Vf@D=)~Qw7kWn)|o`RuTbTZD|SVOJz7szSjInI zUW8I5D0$!(j^Eh-gyDZ(`F7gfKYzG>{yW?m<=4~ivR6<#{yTD`q3s`5@NTRWINAy}P*sOk=;7**68MuEkTC4_LDmHN zdyVT4l&_=bNTb@c?QL~)mpyDYvz@F9eZxPG!emeo*@_Ykf84s5EE`u3C~|-w8qMw5SpHIfnapy$;h#(HNQ%m0 zoPJ=|k0|9om%0>`$h%7G)zH)7pGch_wt%xNdsm~|M)JK_S@$@-E_y=zE0u|y8A_bD z$fIDm(q$Fxl-#@vlr($uvaFu$3Fo z>(58hd5j&IX6bzI3#KQ=zcQ|=@A%ehS@G=p$?V8fU(abQ9+hu=sr1zNM~+j{5r{W| zX5g#q_DM44UOzdTEozps7%lo$M|ooP_0p5$UvV$(w9Lxx$~EobYJEK$&d<(L1^cQ6v=hs0$4F8Hd-#m5&BJ_VY zy-Vo`Ycchn82??7*wtgC5Y~?dKbO%7C_JKc`{ejXD=-~d$}+uFLWE3mt}1=i@732lJcmb#u91FPq`);%qSf8QrX> arvC?iPWR;4_05R@0000Volo.CmsKit + + + + + + + + diff --git a/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs b/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs index 66489f80e8..42b0605e5d 100644 --- a/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs +++ b/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs @@ -276,7 +276,7 @@ namespace Volo.CmsKit private async Task SeedBlogsAsync() { - var blog = await _blogRepository.InsertAsync(new Blog(_cmsKitTestData.BlogName)); + var blog = await _blogRepository.InsertAsync(new Blog(_cmsKitTestData.Blog_Id, _cmsKitTestData.BlogName)); await _blogPostRepository.InsertAsync(new BlogPost(_cmsKitTestData.BlogPost_1_Id, blog.Id, _cmsKitTestData.BlogPost_1_Title, _cmsKitTestData.BlogPost_1_UrlSlug, "Short desc 1")); diff --git a/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitTestData.cs b/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitTestData.cs index 2da69a5ac6..117cf49b11 100644 --- a/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitTestData.cs +++ b/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitTestData.cs @@ -7,6 +7,7 @@ namespace Volo.CmsKit public class CmsKitTestData : ISingletonDependency { public Guid User1Id { get; } = Guid.NewGuid(); + public string User1UserName => "fake.user"; public Guid User2Id { get; } = Guid.NewGuid(); From 8aef06bde3787e28161fbc38d1c5ec99154e89b5 Mon Sep 17 00:00:00 2001 From: enisn Date: Mon, 1 Feb 2021 12:25:46 +0300 Subject: [PATCH 030/472] CmsKit - Add Http Method bindings to BlogPostAdminController --- .../CmsKit/Admin/Blogs/BlogPostAdminController.cs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) 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 554200b492..e923cabf46 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 @@ -29,26 +29,35 @@ namespace Volo.CmsKit.Admin.Blogs BlogPostAdminAppService = blogPostAdminAppService; } + [HttpGet] public virtual Task CreateAsync(CreateUpdateBlogPostDto input) { return BlogPostAdminAppService.CreateAsync(input); } + [HttpDelete] + [Route("{id}")] public virtual Task DeleteAsync(Guid id) { return BlogPostAdminAppService.DeleteAsync(id); } + [HttpGet] + [Route("{id:Guid}")] public virtual Task GetAsync(Guid id) { return BlogPostAdminAppService.GetAsync(id); } + [HttpGet] + [Route("{urlSlug}")] public virtual Task GetByUrlSlugAsync(string urlSlug) { return BlogPostAdminAppService.GetByUrlSlugAsync(urlSlug); } + [HttpGet] + [Route("{id}/cover-image")] public virtual Task GetCoverImageAsync(Guid id) { Response.Headers.Add("Content-Disposition", $"inline;filename=\"{id}\""); @@ -59,16 +68,20 @@ namespace Volo.CmsKit.Admin.Blogs return BlogPostAdminAppService.GetCoverImageAsync(id); } + [HttpGet] public virtual Task> GetListAsync(PagedAndSortedResultRequestDto input) { return BlogPostAdminAppService.GetListAsync(input); } + [NonAction] public virtual Task SetCoverImageAsync(Guid id, RemoteStreamContent streamContent) { return BlogPostAdminAppService.SetCoverImageAsync(id, streamContent); } + [HttpPost] + [Route("{id}/cover-image")] public virtual async Task UploadCoverImageAsync(Guid id, IFormFile file) { if (file == null) @@ -84,6 +97,8 @@ namespace Volo.CmsKit.Admin.Blogs return StatusCode(201); } + [HttpPut] + [Route("{id}")] public virtual Task UpdateAsync(Guid id, CreateUpdateBlogPostDto input) { return BlogPostAdminAppService.UpdateAsync(id, input); From 83b92083656c19b6b242035222a7a66a8512b15e Mon Sep 17 00:00:00 2001 From: enisn Date: Mon, 1 Feb 2021 12:49:38 +0300 Subject: [PATCH 031/472] CmsKit - Add BlogAdminController --- .../Permissions/CmsKitAdminPermissions.cs | 1 + .../CmsKit/Admin/Blogs/BlogAdminController.cs | 68 +++++++++++++++++++ 2 files changed, 69 insertions(+) create mode 100644 modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogAdminController.cs 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 2a70feefc5..38c95ed83d 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 @@ -37,6 +37,7 @@ namespace Volo.CmsKit.Permissions public const string Update = Default + ".Update"; public const string Delete = Default + ".Delete"; } + public static class BlogPosts { public const string Default = GroupName + ".BlogPosts"; diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogAdminController.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogAdminController.cs new file mode 100644 index 0000000000..36cc6d9ef7 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogAdminController.cs @@ -0,0 +1,68 @@ +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Volo.Abp; +using Volo.Abp.Application.Dtos; +using Volo.Abp.GlobalFeatures; +using Volo.CmsKit.GlobalFeatures; +using Volo.CmsKit.Permissions; + +namespace Volo.CmsKit.Admin.Blogs +{ + [RequiresGlobalFeature(typeof(BlogsFeature))] + [RemoteService(Name = CmsKitCommonRemoteServiceConsts.RemoteServiceName)] + [Area("cms-kit")] + [Authorize(CmsKitAdminPermissions.Blogs.Default)] + [Route("api/cms-kit-admin/blogs/blogs")] + public class BlogAdminController : CmsKitAdminController, IBlogAdminAppService + { + protected IBlogAdminAppService BlogAdminAppService { get; } + + public BlogAdminController(IBlogAdminAppService blogAdminAppService) + { + BlogAdminAppService = blogAdminAppService; + } + + [HttpPost] + [Authorize(CmsKitAdminPermissions.Blogs.Create)] + public Task CreateAsync(BlogDto input) + { + return BlogAdminAppService.CreateAsync(input); + } + + [HttpDelete] + [Route("{id}")] + [Authorize(CmsKitAdminPermissions.Blogs.Delete)] + public Task DeleteAsync(Guid id) + { + return BlogAdminAppService.DeleteAsync(id); + } + + [HttpGet] + [Route("{id}")] + [Authorize(CmsKitAdminPermissions.Blogs.Default)] + public Task GetAsync(Guid id) + { + return BlogAdminAppService.GetAsync(id); + } + + [HttpGet] + [Authorize(CmsKitAdminPermissions.Blogs.Default)] + public Task> GetListAsync([FromQuery] PagedAndSortedResultRequestDto input) + { + return BlogAdminAppService.GetListAsync(input); + } + + [HttpPut] + [Route("{id}")] + [Authorize(CmsKitAdminPermissions.Blogs.Update)] + public Task UpdateAsync(Guid id, BlogDto input) + { + return BlogAdminAppService.UpdateAsync(id, input); + } + } +} From fd05d1404f4c90b97beb7ad8ddfe28b4dbc2f80c Mon Sep 17 00:00:00 2001 From: enisn Date: Mon, 1 Feb 2021 12:56:31 +0300 Subject: [PATCH 032/472] CmsKit - Add missing authorize attributes to BlogPostAdminController --- .../Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs | 8 ++++++++ 1 file changed, 8 insertions(+) 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 e923cabf46..54550113fd 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 @@ -30,6 +30,7 @@ namespace Volo.CmsKit.Admin.Blogs } [HttpGet] + [Authorize(CmsKitAdminPermissions.BlogPosts.Create)] public virtual Task CreateAsync(CreateUpdateBlogPostDto input) { return BlogPostAdminAppService.CreateAsync(input); @@ -37,6 +38,7 @@ namespace Volo.CmsKit.Admin.Blogs [HttpDelete] [Route("{id}")] + [Authorize(CmsKitAdminPermissions.BlogPosts.Delete)] public virtual Task DeleteAsync(Guid id) { return BlogPostAdminAppService.DeleteAsync(id); @@ -44,6 +46,7 @@ namespace Volo.CmsKit.Admin.Blogs [HttpGet] [Route("{id:Guid}")] + [Authorize(CmsKitAdminPermissions.BlogPosts.Default)] public virtual Task GetAsync(Guid id) { return BlogPostAdminAppService.GetAsync(id); @@ -51,6 +54,7 @@ namespace Volo.CmsKit.Admin.Blogs [HttpGet] [Route("{urlSlug}")] + [Authorize(CmsKitAdminPermissions.BlogPosts.Default)] public virtual Task GetByUrlSlugAsync(string urlSlug) { return BlogPostAdminAppService.GetByUrlSlugAsync(urlSlug); @@ -58,6 +62,7 @@ namespace Volo.CmsKit.Admin.Blogs [HttpGet] [Route("{id}/cover-image")] + [Authorize(CmsKitAdminPermissions.BlogPosts.Default)] public virtual Task GetCoverImageAsync(Guid id) { Response.Headers.Add("Content-Disposition", $"inline;filename=\"{id}\""); @@ -69,6 +74,7 @@ namespace Volo.CmsKit.Admin.Blogs } [HttpGet] + [Authorize(CmsKitAdminPermissions.BlogPosts.Default)] public virtual Task> GetListAsync(PagedAndSortedResultRequestDto input) { return BlogPostAdminAppService.GetListAsync(input); @@ -82,6 +88,7 @@ namespace Volo.CmsKit.Admin.Blogs [HttpPost] [Route("{id}/cover-image")] + [Authorize(CmsKitAdminPermissions.BlogPosts.Update)] public virtual async Task UploadCoverImageAsync(Guid id, IFormFile file) { if (file == null) @@ -99,6 +106,7 @@ namespace Volo.CmsKit.Admin.Blogs [HttpPut] [Route("{id}")] + [Authorize(CmsKitAdminPermissions.BlogPosts.Update)] public virtual Task UpdateAsync(Guid id, CreateUpdateBlogPostDto input) { return BlogPostAdminAppService.UpdateAsync(id, input); From 0555f99352ea50144fefcfeafdef69e89611e353 Mon Sep 17 00:00:00 2001 From: enisn Date: Mon, 1 Feb 2021 14:33:37 +0300 Subject: [PATCH 033/472] CmsKit - Add Blogs Permissions into PermissionDefinitionProvider --- .../CmsKitAdminPermissionDefinitionProvider.cs | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) 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 bc55cc14e1..0303af762e 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 @@ -1,4 +1,5 @@ -using Volo.Abp.Authorization.Permissions; + +using Volo.Abp.Authorization.Permissions; using Volo.Abp.GlobalFeatures; using Volo.Abp.Localization; using Volo.CmsKit.GlobalFeatures; @@ -12,7 +13,6 @@ namespace Volo.CmsKit.Permissions { var cmsGroup = context.GetGroupOrNull(CmsKitAdminPermissions.GroupName) ?? context.AddGroup(CmsKitAdminPermissions.GroupName, L("Permission:CmsKit")); - if (GlobalFeatureManager.Instance.IsEnabled()) { var contentGroup = cmsGroup.AddPermission(CmsKitAdminPermissions.Contents.Default, L("Permission:Contents")); @@ -35,6 +35,19 @@ namespace Volo.CmsKit.Permissions pageManagement.AddChild(CmsKitAdminPermissions.Pages.Update, L("Permission:PageManagement:Update")); pageManagement.AddChild(CmsKitAdminPermissions.Pages.Delete, L("Permission:PageManagement:Delete")); } + + if (GlobalFeatureManager.Instance.IsEnabled()) + { + var blogManagement = cmsGroup.AddPermission(CmsKitAdminPermissions.Blogs.Default, L("Permission:BlogManagement")); + blogManagement.AddChild(CmsKitAdminPermissions.Blogs.Create, L("Permission:BlogManagement.Create")); + blogManagement.AddChild(CmsKitAdminPermissions.Blogs.Update, L("Permission:BlogManagement.Update")); + blogManagement.AddChild(CmsKitAdminPermissions.Blogs.Delete, L("Permission:BlogManagement.Delete")); + + var blogPostManagement = cmsGroup.AddPermission(CmsKitAdminPermissions.BlogPosts.Default, L("Permission:BlogPostManagement")); + blogManagement.AddChild(CmsKitAdminPermissions.BlogPosts.Create, L("Permission:BlogPostManagement.Create")); + blogManagement.AddChild(CmsKitAdminPermissions.BlogPosts.Update, L("Permission:BlogPostManagement.Update")); + blogManagement.AddChild(CmsKitAdminPermissions.BlogPosts.Delete, L("Permission:BlogPostManagement.Delete")); + } } private static LocalizableString L(string name) From 4b23cb616addb4e653039c3d9e497c2e12377e5a Mon Sep 17 00:00:00 2001 From: enisn Date: Mon, 1 Feb 2021 15:03:34 +0300 Subject: [PATCH 034/472] CmsKit - Add missing validations to BlogDto --- .../Volo/CmsKit/Admin/Blogs/BlogDto.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogDto.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogDto.cs index 9c88a0ed01..1b772c51e5 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogDto.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogDto.cs @@ -1,10 +1,13 @@ using System; using Volo.Abp.Application.Dtos; +using Volo.Abp.Validation; +using Volo.CmsKit.Blogs; namespace Volo.CmsKit.Admin.Blogs { public class BlogDto : EntityDto { + [DynamicMaxLength(typeof(BlogConsts), nameof(BlogConsts.MaxNameLength))] public string Name { get; set; } } } From 4290f3b93261b6a8fd8b9b0d54dbae58a9af3a0a Mon Sep 17 00:00:00 2001 From: enisn Date: Mon, 1 Feb 2021 15:44:57 +0300 Subject: [PATCH 035/472] CmsKit - Add UrlSlug to Blog --- .../Volo/CmsKit/Admin/Blogs/BlogDto.cs | 6 + .../Volo/CmsKit/Blogs/BlogConsts.cs | 1 + .../Volo.CmsKit.Domain.csproj | 4 + .../Volo/CmsKit/Blogs/Blog.cs | 12 ++ .../Volo/CmsKit/Blogs/BlogPost.cs | 25 +--- .../Blogs/Extensions/UrlSlugExtensions.cs | 30 ++++ .../Blogs/UrlSlugExtensions_Tests.cs | 139 ++++++++++++++++++ .../CmsKitDataSeedContributor.cs | 2 +- .../Volo.CmsKit.TestBase/CmsKitTestData.cs | 2 + 9 files changed, 197 insertions(+), 24 deletions(-) create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/Extensions/UrlSlugExtensions.cs create mode 100644 modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Blogs/UrlSlugExtensions_Tests.cs diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogDto.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogDto.cs index 1b772c51e5..0f112d15b8 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogDto.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogDto.cs @@ -1,4 +1,5 @@ using System; +using System.ComponentModel.DataAnnotations; using Volo.Abp.Application.Dtos; using Volo.Abp.Validation; using Volo.CmsKit.Blogs; @@ -7,7 +8,12 @@ namespace Volo.CmsKit.Admin.Blogs { public class BlogDto : EntityDto { + [Required] [DynamicMaxLength(typeof(BlogConsts), nameof(BlogConsts.MaxNameLength))] public string Name { get; set; } + + [Required] + [DynamicMaxLength(typeof(BlogConsts), nameof(BlogConsts.MaxUrlSlugLength))] + public string UrlSlug { get; set; } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Blogs/BlogConsts.cs b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Blogs/BlogConsts.cs index e722d4656d..7d2467226d 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Blogs/BlogConsts.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Blogs/BlogConsts.cs @@ -3,5 +3,6 @@ public class BlogConsts { public static int MaxNameLength { get; set; } = 64; + public static int MaxUrlSlugLength { get; set; } = 64; } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo.CmsKit.Domain.csproj b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo.CmsKit.Domain.csproj index 0fc25899e9..7355bc87d1 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo.CmsKit.Domain.csproj +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo.CmsKit.Domain.csproj @@ -8,6 +8,10 @@ + + + + diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/Blog.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/Blog.cs index 0ec587f52e..1dc571d69f 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/Blog.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/Blog.cs @@ -3,6 +3,7 @@ using System; using Volo.Abp; using Volo.Abp.Domain.Entities.Auditing; using Volo.Abp.MultiTenancy; +using Volo.CmsKit.Blogs.Extensions; namespace Volo.CmsKit.Blogs { @@ -11,19 +12,30 @@ namespace Volo.CmsKit.Blogs public Blog( Guid id, [NotNull] string name, + [NotNull] string urlSlug, [CanBeNull] Guid? tenantId = null) : base(id) { SetName(name); + SetUrlSlug(urlSlug); TenantId = tenantId; } public string Name { get; protected set; } + public string UrlSlug { get; protected set; } + public Guid? TenantId { get; } public void SetName(string name) { Name = Check.NotNullOrWhiteSpace(name, nameof(name), maxLength: BlogConsts.MaxNameLength); } + + public void SetUrlSlug(string urlSlug) + { + Check.NotNullOrWhiteSpace(urlSlug, nameof(urlSlug), maxLength: BlogConsts.MaxNameLength); + + UrlSlug = urlSlug.NormalizeAsUrlSlug(); + } } } 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 62a73ec352..db0d22b18a 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 @@ -5,6 +5,7 @@ using Volo.Abp; using Volo.Abp.Domain.Entities.Auditing; using Volo.Abp.MultiTenancy; using Volo.CmsKit.Blogs; +using Volo.CmsKit.Blogs.Extensions; using Volo.CmsKit.Users; namespace Volo.CmsKit.Blogs @@ -47,29 +48,7 @@ namespace Volo.CmsKit.Blogs { Check.NotNullOrWhiteSpace(urlSlug, nameof(urlSlug), BlogPostConsts.MaxUrlSlugLength, BlogPostConsts.MinUrlSlugLength); - UrlSlug = NormalizeUrlSlug(urlSlug); - } - - private string NormalizeUrlSlug(string value) - { - value = value.ToLowerInvariant(); - - // TODO: Find best way to unidecode. - // value = value.Unidecode(); - - // Replace spaces - value = Regex.Replace(value, @"\s", "-", RegexOptions.Compiled); - - // Remove invalid chars - value = Regex.Replace(value, @"[^a-z0-9\s-_]", "", RegexOptions.Compiled); - - // Trim dashes from end & dots - value = value.Trim('-', '_', '.'); - - // Replace double occurences of - or _ - value = Regex.Replace(value, @"([-_]){2,}", "$1", RegexOptions.Compiled); - - return value; + UrlSlug = urlSlug.NormalizeAsUrlSlug(); } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/Extensions/UrlSlugExtensions.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/Extensions/UrlSlugExtensions.cs new file mode 100644 index 0000000000..45765c4a09 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/Extensions/UrlSlugExtensions.cs @@ -0,0 +1,30 @@ +using System.Text.RegularExpressions; +using Unidecode.NET; + +namespace Volo.CmsKit.Blogs.Extensions +{ + public static class UrlSlugExtensions + { + public static string NormalizeAsUrlSlug(this string value) + { + value = value.ToLowerInvariant(); + + // Unidecode for non-latin characters + value = value.Unidecode(); + + // Replace spaces + value = Regex.Replace(value, @"\s", "-", RegexOptions.Compiled); + + // Remove invalid chars + value = Regex.Replace(value, @"[^a-z0-9\s-_]", "", RegexOptions.Compiled); + + // Trim dashes & dots + value = value.Trim('-', '_', '.'); + + // Replace double occurences of - or _ + value = Regex.Replace(value, @"([-_]){2,}", "$1", RegexOptions.Compiled); + + return value; + } + } +} diff --git a/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Blogs/UrlSlugExtensions_Tests.cs b/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Blogs/UrlSlugExtensions_Tests.cs new file mode 100644 index 0000000000..0c32ab3285 --- /dev/null +++ b/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Blogs/UrlSlugExtensions_Tests.cs @@ -0,0 +1,139 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Xunit; +using Volo.CmsKit.Blogs.Extensions; +using Shouldly; + +namespace Volo.CmsKit.Blogs +{ + public class UrlSlugExtensions_Tests + { + [Fact] + public void NormalizeAsUrlSlug_ShouldWorkProperly() + { + // Arrange + var name = "My awesome name"; + var expected = "my-awesome-name"; + + // Act + var actual = name.NormalizeAsUrlSlug(); + + // Assert + actual.ShouldBe(expected); + } + [Fact] + public void NormalizeAsUrlSlug_ShouldWorkProperly_WithDot() + { + // Arrange + var name = "My Perfect Title v.2"; + var expected = "my-perfect-title-v2"; + + // Act + var actual = name.NormalizeAsUrlSlug(); + + // Assert + actual.ShouldBe(expected); + } + + [Fact] + public void NormalizeAsUrlSlug_ShouldWorkProperly_WithQuestionMark() + { + // Arrange + var name = "Are you gonna die?"; + var expected = "are-you-gonna-die"; + + // Act + var actual = name.NormalizeAsUrlSlug(); + + // Assert + actual.ShouldBe(expected); + } + + [Fact] + public void NormalizeAsUrlSlug_ShouldWorkProperly_WithAmpersand() + { + // Arrange + var name = "We & Machines Challenge"; + var expected = "we-machines-challenge"; + + // Act + var actual = name.NormalizeAsUrlSlug(); + + // Assert + actual.ShouldBe(expected); + } + + [Fact] + public void NormalizeAsUrlSlug_ShouldWorkProperly_WithDoubleDash() + { + // Arrange + var name = "Go and Code --part 2"; + var expected = "go-and-code-part-2"; + + // Act + var actual = name.NormalizeAsUrlSlug(); + + // Assert + actual.ShouldBe(expected); + } + + [Fact] + public void NormalizeAsUrlSlug_ShouldWorkProperly_WithCyrillicChars() + { + // Arrange + var name = "Мое классное название"; + var expected = "moe-klassnoe-nazvanie"; + + // Act + var actual = name.NormalizeAsUrlSlug(); + + // Assert + actual.ShouldBe(expected); + } + + [Fact] + public void NormalizeAsUrlSlug_ShouldWorkProperly_WithTurkishChars() + { + // Arrange + var name = "Özel Türkçe karakterler: ğüşiöç"; + var expected = "ozel-turkce-karakterler-gusioc"; + + // Act + var actual = name.NormalizeAsUrlSlug(); + + // Assert + actual.ShouldBe(expected); + } + + [Fact] + public void NormalizeAsUrlSlug_ShouldWorkProperly_WithChineseChars() + { + // Arrange + var name = "我的挑战"; + var expected = "o-e-iao-han"; + + // Act + var actual = name.NormalizeAsUrlSlug(); + + // Assert + actual.ShouldBe(expected); + } + + [Fact] + public void NormalizeAsUrlSlug_ShouldWorkProperly_WithEmoji() + { + // Arrange + var name = "Let's Rock 👊"; + var expected = "lets-rock"; + + // Act + var actual = name.NormalizeAsUrlSlug(); + + // Assert + actual.ShouldBe(expected); + } + } +} diff --git a/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs b/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs index aaed5e3d16..9b1f820c23 100644 --- a/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs +++ b/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs @@ -308,7 +308,7 @@ namespace Volo.CmsKit private async Task SeedBlogsAsync() { - var blog = await _blogRepository.InsertAsync(new Blog(_cmsKitTestData.Blog_Id, _cmsKitTestData.BlogName)); + var blog = await _blogRepository.InsertAsync(new Blog(_cmsKitTestData.Blog_Id, _cmsKitTestData.BlogName, _cmsKitTestData.BlogUrlSlug)); await _blogPostRepository.InsertAsync(new BlogPost(_cmsKitTestData.BlogPost_1_Id, blog.Id, _cmsKitTestData.BlogPost_1_Title, _cmsKitTestData.BlogPost_1_UrlSlug, "Short desc 1")); diff --git a/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitTestData.cs b/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitTestData.cs index 2a0cc0e8bf..99682fbbfb 100644 --- a/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitTestData.cs +++ b/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitTestData.cs @@ -77,6 +77,8 @@ namespace Volo.CmsKit public string BlogName => "Cms Blog"; + public string BlogUrlSlug => "cms-blog"; + public Guid BlogPost_1_Id { get; } = Guid.NewGuid(); public string BlogPost_1_Title => "How to install CmsKit?"; From 84ff2c3518cadb682f034d231f5c66700b32e6a6 Mon Sep 17 00:00:00 2001 From: enisn Date: Mon, 1 Feb 2021 15:47:19 +0300 Subject: [PATCH 036/472] CmsKit - Add missing ModelCreating constraints for Blog --- .../CmsKitDbContextModelCreatingExtensions.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs index fff291d960..ca64253676 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs @@ -197,6 +197,8 @@ namespace Volo.CmsKit.EntityFrameworkCore b.ConfigureByConvention(); b.Property(p => p.Name).IsRequired().HasMaxLength(BlogConsts.MaxNameLength); + + b.Property(p => p.UrlSlug).IsRequired().HasMaxLength(BlogConsts.MaxUrlSlugLength); }); builder.Entity(b => From 5f561456372a1bcfa349e12bd32742a3f954841c Mon Sep 17 00:00:00 2001 From: enisn Date: Mon, 1 Feb 2021 16:36:25 +0300 Subject: [PATCH 037/472] CmsKit - Add lookup endpoint for Blogs --- .../Volo/CmsKit/Admin/Blogs/BlogLookupDto.cs | 16 ++++++++++++++++ .../CmsKit/Admin/Blogs/IBlogAdminAppService.cs | 4 ++++ .../CmsKit/Admin/Blogs/BlogAdminAppService.cs | 14 ++++++++++++++ .../CmsKit/Admin/Blogs/BlogAdminController.cs | 9 +++++++++ 4 files changed, 43 insertions(+) create mode 100644 modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogLookupDto.cs diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogLookupDto.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogLookupDto.cs new file mode 100644 index 0000000000..74e63b9150 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogLookupDto.cs @@ -0,0 +1,16 @@ +using System; + +namespace Volo.CmsKit.Admin.Application.Contracts.Volo.CmsKit.Admin.Blogs +{ + public class BlogLookupDto + { + public BlogLookupDto(Guid id, string name) + { + Id = id; + Name = name; + } + + public Guid Id { get; set; } + public string Name { get; set; } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogAdminAppService.cs index 4072c9f847..9f4d16c7f6 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogAdminAppService.cs @@ -1,9 +1,13 @@ using System; +using System.Collections.Generic; +using System.Threading.Tasks; using Volo.Abp.Application.Services; +using Volo.CmsKit.Admin.Application.Contracts.Volo.CmsKit.Admin.Blogs; namespace Volo.CmsKit.Admin.Blogs { public interface IBlogAdminAppService : ICrudAppService { + Task> GetLookupAsync(); } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogAdminAppService.cs index b6c2195981..5c8ae8e26c 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogAdminAppService.cs @@ -1,8 +1,12 @@ using Microsoft.AspNetCore.Authorization; using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; using Volo.Abp.Application.Services; using Volo.Abp.Domain.Repositories; using Volo.Abp.GlobalFeatures; +using Volo.CmsKit.Admin.Application.Contracts.Volo.CmsKit.Admin.Blogs; using Volo.CmsKit.Blogs; using Volo.CmsKit.GlobalFeatures; using Volo.CmsKit.Permissions; @@ -21,5 +25,15 @@ namespace Volo.CmsKit.Admin.Blogs UpdatePolicyName = CmsKitAdminPermissions.Blogs.Update; DeletePolicyName = CmsKitAdminPermissions.Blogs.Delete; } + + [Authorize(CmsKitAdminPermissions.Blogs.Default)] + public async Task> GetLookupAsync() + { + var blogs = await Repository.GetListAsync(); + + return blogs + .Select(s => new BlogLookupDto(s.Id, s.Name)) + .ToList(); + } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogAdminController.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogAdminController.cs index 36cc6d9ef7..b12b4f83b1 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogAdminController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogAdminController.cs @@ -8,6 +8,7 @@ using System.Threading.Tasks; using Volo.Abp; using Volo.Abp.Application.Dtos; using Volo.Abp.GlobalFeatures; +using Volo.CmsKit.Admin.Application.Contracts.Volo.CmsKit.Admin.Blogs; using Volo.CmsKit.GlobalFeatures; using Volo.CmsKit.Permissions; @@ -64,5 +65,13 @@ namespace Volo.CmsKit.Admin.Blogs { return BlogAdminAppService.UpdateAsync(id, input); } + + [HttpGet] + [Route("lookup")] + [Authorize(CmsKitAdminPermissions.Blogs.Default)] + public Task> GetLookupAsync() + { + return BlogAdminAppService.GetLookupAsync(); + } } } From 80ad8a12239cfa5c7dadf97f10146389d39733ca Mon Sep 17 00:00:00 2001 From: enisn Date: Mon, 1 Feb 2021 16:36:50 +0300 Subject: [PATCH 038/472] CmsKit - Add missing Validations for CreateUpdateBlogPostDto --- .../CmsKit/Admin/Blogs/CreateUpdateBlogPostDto.cs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/CreateUpdateBlogPostDto.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/CreateUpdateBlogPostDto.cs index 09d881189b..71d091bfa4 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/CreateUpdateBlogPostDto.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/CreateUpdateBlogPostDto.cs @@ -1,15 +1,27 @@ using System; +using System.ComponentModel.DataAnnotations; +using Volo.Abp.Validation; +using Volo.CmsKit.Blogs; namespace Volo.CmsKit.Admin.Blogs { public class CreateUpdateBlogPostDto { + [Required] public Guid BlogId { get; set; } + [Required] + [DynamicMaxLength(typeof(BlogPostConsts), nameof(BlogPostConsts.MaxTitleLength))] public string Title { get; set; } + [Required] + [DynamicStringLength( + typeof(BlogPostConsts), + nameof(BlogPostConsts.MaxUrlSlugLength), + nameof(BlogPostConsts.MinUrlSlugLength))] public string UrlSlug { get; set; } + [DynamicMaxLength(typeof(BlogPostConsts), nameof(BlogPostConsts.MaxShortDescriptionLength))] public string ShortDescription { get; set; } } } From 1ec3b2398072e80b946d03d3d75fd5bb73905f19 Mon Sep 17 00:00:00 2001 From: enisn Date: Mon, 1 Feb 2021 17:37:31 +0300 Subject: [PATCH 039/472] CmsKit - Fix HttpMethod for Create Blog --- .../Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 54550113fd..0dc8d512ad 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 @@ -29,7 +29,7 @@ namespace Volo.CmsKit.Admin.Blogs BlogPostAdminAppService = blogPostAdminAppService; } - [HttpGet] + [HttpPost] [Authorize(CmsKitAdminPermissions.BlogPosts.Create)] public virtual Task CreateAsync(CreateUpdateBlogPostDto input) { From 9feeaf37d33932d754e39da75dfab7918720383a Mon Sep 17 00:00:00 2001 From: enisn Date: Tue, 2 Feb 2021 11:48:19 +0300 Subject: [PATCH 040/472] CmsKit - Ensure CmsUser is created while creating BlogPost --- .../Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) 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 36ded2ba1f..3b3d323132 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 @@ -7,9 +7,11 @@ using Volo.Abp.BlobStoring; using Volo.Abp.Content; using Volo.Abp.Domain.Repositories; using Volo.Abp.GlobalFeatures; +using Volo.Abp.Users; using Volo.CmsKit.Blogs; using Volo.CmsKit.GlobalFeatures; using Volo.CmsKit.Permissions; +using Volo.CmsKit.Users; namespace Volo.CmsKit.Admin.Blogs { @@ -27,16 +29,19 @@ namespace Volo.CmsKit.Admin.Blogs protected readonly IBlogPostManager BlogPostManager; protected readonly IBlogPostRepository BlogPostRepository; protected readonly IBlobContainer BlobContainer; + protected readonly ICmsUserLookupService UserLookupService; public BlogPostAdminAppService( IRepository repository, IBlogPostManager blogPostManager, IBlogPostRepository blogPostRepository, - IBlobContainer blobContainer) : base(repository) + IBlobContainer blobContainer, + ICmsUserLookupService userLookupService) : base(repository) { BlogPostManager = blogPostManager; BlogPostRepository = blogPostRepository; BlobContainer = blobContainer; + UserLookupService = userLookupService; GetListPolicyName = CmsKitAdminPermissions.BlogPosts.Default; GetPolicyName = CmsKitAdminPermissions.BlogPosts.Default; @@ -55,6 +60,8 @@ namespace Volo.CmsKit.Admin.Blogs [Authorize(CmsKitAdminPermissions.BlogPosts.Create)] public override async Task CreateAsync(CreateUpdateBlogPostDto input) { + _ = await UserLookupService.GetByIdAsync(CurrentUser.GetId()); + var entity = await BlogPostManager .CreateAsync( new BlogPost( From 12f378c729f742b3207db4e13a8e2dc9d7a72f2d Mon Sep 17 00:00:00 2001 From: enisn Date: Tue, 2 Feb 2021 11:48:35 +0300 Subject: [PATCH 041/472] CmsKit - Add missing ShortDescription to BlogPost --- .../Volo/CmsKit/Admin/Blogs/BlogPostDto.cs | 1 + .../src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogPost.cs | 7 ++++++- 2 files changed, 7 insertions(+), 1 deletion(-) 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 2c3ff84d48..e1463ceba3 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 @@ -10,5 +10,6 @@ namespace Volo.CmsKit.Admin.Blogs public string Title { get; set; } public string UrlSlug { get; set; } + public string ShortDescription { get; protected set; } } } 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 db0d22b18a..1ebe6d72d7 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 @@ -18,7 +18,7 @@ namespace Volo.CmsKit.Blogs public string UrlSlug { get; protected set; } - public string ShortDescription { get; set; } + public string ShortDescription { get; protected set; } public Guid? TenantId { get; } @@ -50,5 +50,10 @@ namespace Volo.CmsKit.Blogs UrlSlug = urlSlug.NormalizeAsUrlSlug(); } + + public void SetShortDescription(string shortDescription) + { + ShortDescription = Check.Length(shortDescription, nameof(shortDescription), BlogPostConsts.MaxShortDescriptionLength); + } } } From 85cab4311d9123cff63816ace7bfb685727533c8 Mon Sep 17 00:00:00 2001 From: enisn Date: Tue, 2 Feb 2021 15:47:44 +0300 Subject: [PATCH 042/472] CmsKit - BlogPost Public logic in Repositories & AppServices --- .../Admin/Blogs/IBlogPostAdminAppService.cs | 8 +- .../Admin/Blogs/BlogPostAdminAppService.cs | 9 +- .../Admin/Blogs/BlogPostAdminController.cs | 6 +- .../Volo/CmsKit/Users/CmsUserDto.cs | 20 +++ ...msKitCommonApplicationAutoMapperProfile.cs | 3 + .../Volo/CmsKit/Blogs/Blog.cs | 2 +- .../Volo/CmsKit/Blogs/BlogPost.cs | 2 +- .../Volo/CmsKit/Blogs/BlogPostManager.cs | 10 +- .../BlogPostUrlSlugAlreadyExistException.cs | 10 +- .../Volo/CmsKit/Blogs/IBlogPostRepository.cs | 7 +- .../Volo/CmsKit/Blogs/IBlogRepository.cs | 2 + .../CmsKit/Blogs/EfCoreBlogPostRepository.cs | 32 ++++- .../Volo/CmsKit/Blogs/EfCoreBlogRepository.cs | 6 + .../CmsKitDbContextModelCreatingExtensions.cs | 2 +- .../MongoDB/Blogs/MongoBlogPostRepository.cs | 34 ++++- .../MongoDB/Blogs/MongoBlogRepository.cs | 6 + .../CmsKit/Public/Blogs/BlogPostPublicDto.cs | 17 +++ .../Public/Blogs/IBlogPostPublicAppService.cs | 13 ++ .../Public/Blogs/BlogPostPublicAppService.cs | 41 ++++++ .../PublicApplicationAutoMapperProfile.cs | 6 +- .../Blogs/BlogPostAdminAppService_Tests.cs | 16 ++- .../Blogs/BlogPostRepository_Test.cs | 14 ++ .../Blogs/BlogRepository_Test.cs | 14 ++ .../MongoDB/Blogs/BlogPostRepository_Test.cs | 16 +++ .../MongoDB/Blogs/BlogRepository_Test.cs | 16 +++ .../Blogs/BlogPostRepository_Test.cs | 125 ++++++++++++++++++ .../Blogs/BlogRepository_Test.cs | 47 +++++++ 27 files changed, 448 insertions(+), 36 deletions(-) create mode 100644 modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Users/CmsUserDto.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/BlogPostPublicDto.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs create mode 100644 modules/cms-kit/test/Volo.CmsKit.EntityFrameworkCore.Tests/EntityFrameworkCore/Blogs/BlogPostRepository_Test.cs create mode 100644 modules/cms-kit/test/Volo.CmsKit.EntityFrameworkCore.Tests/EntityFrameworkCore/Blogs/BlogRepository_Test.cs create mode 100644 modules/cms-kit/test/Volo.CmsKit.MongoDB.Tests/MongoDB/Blogs/BlogPostRepository_Test.cs create mode 100644 modules/cms-kit/test/Volo.CmsKit.MongoDB.Tests/MongoDB/Blogs/BlogRepository_Test.cs create mode 100644 modules/cms-kit/test/Volo.CmsKit.TestBase/Blogs/BlogPostRepository_Test.cs create mode 100644 modules/cms-kit/test/Volo.CmsKit.TestBase/Blogs/BlogRepository_Test.cs 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 866c536b85..902f31f025 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 @@ -6,14 +6,14 @@ using Volo.Abp.Content; namespace Volo.CmsKit.Admin.Blogs { - public interface IBlogPostAdminAppService + public interface IBlogPostAdminAppService : ICrudAppService< - BlogPostDto, - Guid, + BlogPostDto, + Guid, PagedAndSortedResultRequestDto, CreateUpdateBlogPostDto> { - Task GetByUrlSlugAsync(string urlSlug); + Task GetByUrlSlugAsync(string blogUrlSlug, string urlSlug); Task SetCoverImageAsync(Guid id, RemoteStreamContent streamContent); 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 3b3d323132..3034311d70 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 @@ -28,6 +28,7 @@ namespace Volo.CmsKit.Admin.Blogs { protected readonly IBlogPostManager BlogPostManager; protected readonly IBlogPostRepository BlogPostRepository; + protected readonly IBlogRepository BlogRepository; protected readonly IBlobContainer BlobContainer; protected readonly ICmsUserLookupService UserLookupService; @@ -35,11 +36,13 @@ namespace Volo.CmsKit.Admin.Blogs IRepository repository, IBlogPostManager blogPostManager, IBlogPostRepository blogPostRepository, + IBlogRepository blogRepository, IBlobContainer blobContainer, ICmsUserLookupService userLookupService) : base(repository) { BlogPostManager = blogPostManager; BlogPostRepository = blogPostRepository; + BlogRepository = blogRepository; BlobContainer = blobContainer; UserLookupService = userLookupService; @@ -50,9 +53,11 @@ namespace Volo.CmsKit.Admin.Blogs DeletePolicyName = CmsKitAdminPermissions.BlogPosts.Delete; } - public virtual async Task GetByUrlSlugAsync(string urlSlug) + public virtual async Task GetByUrlSlugAsync(string blogUrlSlug, string urlSlug) { - var blogPost = await BlogPostRepository.GetByUrlSlugAsync(urlSlug); + var blog = await BlogRepository.GetByUrlSlugAsync(blogUrlSlug); + + var blogPost = await BlogPostRepository.GetByUrlSlugAsync(blog.Id, urlSlug); return MapToGetOutputDto(blogPost); } 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 0dc8d512ad..b71f731efd 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 @@ -53,11 +53,11 @@ namespace Volo.CmsKit.Admin.Blogs } [HttpGet] - [Route("{urlSlug}")] + [Route("{blogUrlSlug}/{urlSlug}")] [Authorize(CmsKitAdminPermissions.BlogPosts.Default)] - public virtual Task GetByUrlSlugAsync(string urlSlug) + public virtual Task GetByUrlSlugAsync(string blogUrlSlug, string urlSlug) { - return BlogPostAdminAppService.GetByUrlSlugAsync(urlSlug); + return BlogPostAdminAppService.GetByUrlSlugAsync(blogUrlSlug, urlSlug); } [HttpGet] diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Users/CmsUserDto.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Users/CmsUserDto.cs new file mode 100644 index 0000000000..3600688f4b --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Users/CmsUserDto.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Volo.Abp.Application.Dtos; + +namespace Volo.CmsKit.Users +{ + public class CmsUserDto : EntityDto + { + public virtual Guid? TenantId { get; protected set; } + + public virtual string UserName { get; protected set; } + + public virtual string Name { get; set; } + + public virtual string Surname { get; set; } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/CmsKitCommonApplicationAutoMapperProfile.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/CmsKitCommonApplicationAutoMapperProfile.cs index e5044dc200..9d89ddadeb 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/CmsKitCommonApplicationAutoMapperProfile.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/CmsKitCommonApplicationAutoMapperProfile.cs @@ -2,6 +2,7 @@ using Volo.CmsKit.Contents; using Volo.CmsKit.Pages; using Volo.CmsKit.Tags; +using Volo.CmsKit.Users; namespace Volo.CmsKit { @@ -10,6 +11,8 @@ namespace Volo.CmsKit public CmsKitCommonApplicationAutoMapperProfile() { CreateMap(); + + CreateMap(); } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/Blog.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/Blog.cs index 1dc571d69f..75d319b33b 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/Blog.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/Blog.cs @@ -24,7 +24,7 @@ namespace Volo.CmsKit.Blogs public string UrlSlug { get; protected set; } - public Guid? TenantId { get; } + public Guid? TenantId { get; protected set; } public void SetName(string name) { 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 1ebe6d72d7..2a9f6673f2 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 @@ -20,7 +20,7 @@ namespace Volo.CmsKit.Blogs public string ShortDescription { get; protected set; } - public Guid? TenantId { get; } + public Guid? TenantId { get; protected set; } protected BlogPost() { 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 6bbb772072..61198e0fad 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 @@ -24,7 +24,7 @@ namespace Volo.CmsKit.Blogs { await CheckBlogExistenceAsync(blogPost.BlogId); - await CheckUrlSlugExistenceAsync(blogPost.UrlSlug); + await CheckUrlSlugExistenceAsync(blogPost.BlogId, blogPost.UrlSlug); return await blogPostRepository.InsertAsync(blogPost); } @@ -33,16 +33,16 @@ namespace Volo.CmsKit.Blogs { await CheckBlogExistenceAsync(blogPost.BlogId); - await CheckUrlSlugExistenceAsync(blogPost.UrlSlug); + await CheckUrlSlugExistenceAsync(blogPost.BlogId, blogPost.UrlSlug); await blogPostRepository.UpdateAsync(blogPost); } - private async Task CheckUrlSlugExistenceAsync(string urlSlug) + private async Task CheckUrlSlugExistenceAsync(Guid blogId, string urlSlug) { - if (await blogPostRepository.SlugExistsAsync(urlSlug)) + if (await blogPostRepository.SlugExistsAsync(blogId, urlSlug)) { - throw new BlogPostUrlSlugAlreadyExistException(urlSlug); + throw new BlogPostUrlSlugAlreadyExistException(blogId, urlSlug); } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogPostUrlSlugAlreadyExistException.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogPostUrlSlugAlreadyExistException.cs index c21ccfa8e7..b000f5996d 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogPostUrlSlugAlreadyExistException.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogPostUrlSlugAlreadyExistException.cs @@ -1,8 +1,4 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; using Volo.Abp; namespace Volo.CmsKit.Blogs @@ -17,15 +13,19 @@ namespace Volo.CmsKit.Blogs { } - public BlogPostUrlSlugAlreadyExistException(string urlSlug) + public BlogPostUrlSlugAlreadyExistException(Guid blogId, string urlSlug) { UrlSlug = urlSlug; + BlogId = blogId; Code = CmsKitErrorCodes.Blogs.UrlSlugAlreadyExist; WithData(nameof(UrlSlug), UrlSlug); + WithData(nameof(BlogId), BlogId); } public string UrlSlug { get; } + + public Guid BlogId { get; } } } 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 a9e35e3794..fdb721d8d8 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 @@ -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,8 +10,10 @@ namespace Volo.CmsKit.Blogs { public interface IBlogPostRepository : IBasicRepository { - Task SlugExistsAsync(string slug); + Task SlugExistsAsync(Guid blogId, string slug, CancellationToken cancellationToken = default); - Task GetByUrlSlugAsync(string urlSlug); + Task GetByUrlSlugAsync(Guid blogId, string urlSlug, CancellationToken cancellationToken = default); + + Task> GetPagedListAsync(Guid blogId, int skipCount, int maxResultCount, string sorting, bool includeDetails = false, CancellationToken cancellationToken = default); } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogRepository.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogRepository.cs index 90e59587a2..152c17d615 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogRepository.cs @@ -1,9 +1,11 @@ using System; +using System.Threading.Tasks; using Volo.Abp.Domain.Repositories; namespace Volo.CmsKit.Blogs { public interface IBlogRepository : IBasicRepository { + public Task GetByUrlSlugAsync(string urlSlug); } } 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 09445da84d..1a6546d5fc 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 @@ -1,9 +1,15 @@ using Microsoft.EntityFrameworkCore; using System; +using System.Collections.Generic; +using System.Linq.Dynamic.Core; +using System.Security.Cryptography.X509Certificates; +using System.Threading; using System.Threading.Tasks; using Volo.Abp.Domain.Repositories.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore; using Volo.CmsKit.EntityFrameworkCore; +using System.Linq; +using System.Data.Common; namespace Volo.CmsKit.Blogs { @@ -13,16 +19,34 @@ namespace Volo.CmsKit.Blogs { } - public Task GetByUrlSlugAsync(string urlSlug) + public Task GetByUrlSlugAsync(Guid blogId, string urlSlug, CancellationToken cancellationToken = default) { - return GetAsync(x => x.UrlSlug.ToLower() == urlSlug); + return GetAsync(x => x.BlogId == blogId && x.UrlSlug.ToLower() == urlSlug, cancellationToken: cancellationToken); } - public async Task SlugExistsAsync(string slug) + public async Task> GetPagedListAsync(Guid blogId, int skipCount, int maxResultCount, string sorting, bool includeDetails = false, CancellationToken cancellationToken = default) + { + + var queryable = (await GetQueryableAsync()) + .Include(i => i.Creator) + .Where(x => x.BlogId == blogId); + + if (!sorting.IsNullOrWhiteSpace()) + { + queryable = queryable.OrderBy(sorting); + } + + return await queryable + .Skip(skipCount) + .Take(maxResultCount) + .ToListAsync(cancellationToken); + } + + public async Task SlugExistsAsync(Guid blogId, string slug, CancellationToken cancellationToken = default) { var dbSet = await GetDbSetAsync(); - return await dbSet.AnyAsync(x => x.UrlSlug.ToLower() == slug); + return await dbSet.AnyAsync(x => x.BlogId == blogId && x.UrlSlug.ToLower() == slug, cancellationToken); } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogRepository.cs index a43504642c..76211780f6 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogRepository.cs @@ -1,4 +1,5 @@ using System; +using System.Threading.Tasks; using Volo.Abp.Domain.Repositories.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore; using Volo.CmsKit.EntityFrameworkCore; @@ -10,5 +11,10 @@ namespace Volo.CmsKit.Blogs public EfCoreBlogRepository(IDbContextProvider dbContextProvider) : base(dbContextProvider) { } + + public Task GetByUrlSlugAsync(string urlSlug) + { + return GetAsync(x => x.UrlSlug == urlSlug); + } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs index ca64253676..57d1f5511c 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs @@ -213,7 +213,7 @@ namespace Volo.CmsKit.EntityFrameworkCore b.Property(p => p.ShortDescription).HasMaxLength(BlogPostConsts.MaxShortDescriptionLength); - b.HasIndex(x => x.UrlSlug); + b.HasIndex(x => new { x.UrlSlug, x.BlogId }); }); } else 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 166eda7f0d..638c219bb6 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 @@ -1,4 +1,8 @@ using System; +using System.Collections.Generic; +using System.Linq; +using System.Linq.Dynamic.Core; +using System.Threading; using System.Threading.Tasks; using Volo.Abp.Domain.Repositories.MongoDB; using Volo.Abp.MongoDB; @@ -12,16 +16,38 @@ namespace Volo.CmsKit.MongoDB.Blogs { } - public Task GetByUrlSlugAsync(string urlSlug) + public Task GetByUrlSlugAsync(Guid blogId, string urlSlug, CancellationToken cancellationToken = default) { - return GetAsync(x => x.UrlSlug.ToLower() == urlSlug); + return GetAsync(x => x.BlogId == blogId && x.UrlSlug.ToLower() == urlSlug, cancellationToken: cancellationToken); } - public async Task SlugExistsAsync(string slug) + public async Task> GetPagedListAsync(Guid blogId, int skipCount, int maxResultCount, string sorting, bool includeDetails = false, CancellationToken cancellationToken = default) + { + var dbContext = await GetDbContextAsync(cancellationToken); + var blogPostQueryable = await GetQueryableAsync(); + + var queryable = blogPostQueryable + .Where(x => x.BlogId == blogId) + //.Join(dbContext.CmsUsers, outerKeySelector: x => x.CreatorId, innerKeySelector: x => x.Id, resultSelector: s => s) + ; + + if (!sorting.IsNullOrWhiteSpace()) + { + queryable = queryable.OrderBy(sorting); + } + + queryable = queryable + .Skip(skipCount) + .Take(maxResultCount); + + return await AsyncExecuter.ToListAsync(queryable, cancellationToken); + } + + public async Task SlugExistsAsync(Guid blogId, string slug, CancellationToken cancellationToken = default) { var queryable = await GetQueryableAsync(); - return await AsyncExecuter.AnyAsync(queryable, x => x.UrlSlug.ToLower() == slug); + return await AsyncExecuter.AnyAsync(queryable, x => x.BlogId == blogId && x.UrlSlug.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 195c29f1f7..998edf6e67 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 @@ -1,4 +1,5 @@ using System; +using System.Threading.Tasks; using Volo.Abp.Domain.Repositories.MongoDB; using Volo.Abp.MongoDB; using Volo.CmsKit.Blogs; @@ -10,5 +11,10 @@ namespace Volo.CmsKit.MongoDB.Blogs public MongoBlogRepository(IMongoDbContextProvider dbContextProvider) : base(dbContextProvider) { } + + public Task GetByUrlSlugAsync(string urlSlug) + { + return GetAsync(x => x.UrlSlug == urlSlug); + } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/BlogPostPublicDto.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/BlogPostPublicDto.cs new file mode 100644 index 0000000000..94d3f3fdbc --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/BlogPostPublicDto.cs @@ -0,0 +1,17 @@ +using System; +using Volo.Abp.Application.Dtos; +using Volo.CmsKit.Users; + +namespace Volo.CmsKit.Public.Blogs +{ + public class BlogPostPublicDto : AuditedEntityWithUserDto + { + public Guid BlogId { get; set; } + + public string Title { get; set; } + + public string UrlSlug { get; set; } + + public string ShortDescription { 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 new file mode 100644 index 0000000000..de460f0764 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs @@ -0,0 +1,13 @@ +using System.Collections.Generic; +using System.Threading.Tasks; +using Volo.Abp.Application.Dtos; + +namespace Volo.CmsKit.Public.Blogs +{ + public interface IBlogPostPublicAppService + { + Task> GetListAsync(string blogUrlSlug, PagedAndSortedResultRequestDto input); + + Task GetAsync(string blogUrlSlug, string blogPostUrlSlug); + } +} 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 new file mode 100644 index 0000000000..907e7e7518 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using Volo.Abp.Application.Dtos; +using Volo.CmsKit.Blogs; + +namespace Volo.CmsKit.Public.Blogs +{ + public class BlogPostPublicAppService : CmsKitPublicAppServiceBase, IBlogPostPublicAppService + { + protected IBlogRepository BlogRepository { get; } + + protected IBlogPostRepository BlogPostRepository { get; } + + public BlogPostPublicAppService( + IBlogRepository blogRepository, + IBlogPostRepository blogPostRepository) + { + BlogRepository = blogRepository; + BlogPostRepository = blogPostRepository; + } + + public async Task GetAsync(string blogUrlSlug, string blogPostUrlSlug) + { + var blog = await BlogRepository.GetByUrlSlugAsync(blogUrlSlug); + + var blogPost = await BlogPostRepository.GetByUrlSlugAsync(blog.Id, blogPostUrlSlug); + + return ObjectMapper.Map(blogPost); + } + + public async Task> GetListAsync(string blogUrlSlug, PagedAndSortedResultRequestDto input) + { + var blog = await BlogRepository.GetByUrlSlugAsync(blogUrlSlug); + + var blogPosts = await BlogPostRepository.GetPagedListAsync(blog.Id, input.SkipCount, input.MaxResultCount, input.Sorting); + + return ObjectMapper.Map, List>(blogPosts); + } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/PublicApplicationAutoMapperProfile.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/PublicApplicationAutoMapperProfile.cs index a45eaff0b2..46dab5a9a1 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/PublicApplicationAutoMapperProfile.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/PublicApplicationAutoMapperProfile.cs @@ -1,8 +1,10 @@ using AutoMapper; using Volo.Abp.AutoMapper; +using Volo.CmsKit.Blogs; using Volo.CmsKit.Comments; using Volo.CmsKit.Contents; using Volo.CmsKit.Pages; +using Volo.CmsKit.Public.Blogs; using Volo.CmsKit.Public.Comments; using Volo.CmsKit.Public.Contents; using Volo.CmsKit.Public.Pages; @@ -16,7 +18,7 @@ namespace Volo.CmsKit.Public { public PublicApplicationAutoMapperProfile() { - CreateMap(); + CreateMap(); CreateMap() .Ignore(x=> x.Author); @@ -30,6 +32,8 @@ namespace Volo.CmsKit.Public CreateMap(); CreateMap(); + + CreateMap(MemberList.None); } } } 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 07897d0d5b..71bb043ce8 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 @@ -93,22 +93,32 @@ namespace Volo.CmsKit.Blogs [Fact] public async Task GetByUrlSlugAsync_ShouldWorkProperly_WithExistingUrlSlug() { - var blogPost = await blogPostAdminAppService.GetByUrlSlugAsync(cmsKitTestData.BlogPost_1_UrlSlug); + var blogPost = await blogPostAdminAppService.GetByUrlSlugAsync(cmsKitTestData.BlogUrlSlug, cmsKitTestData.BlogPost_1_UrlSlug); blogPost.Id.ShouldBe(cmsKitTestData.BlogPost_1_Id); blogPost.Title.ShouldBe(cmsKitTestData.BlogPost_1_Title); } [Fact] - public async Task GetByUrlSlugAsync_ShouldThrowException_WithNonExistingUrlSlug() + public async Task GetByUrlSlugAsync_ShouldThrowException_WithNonExistingBlogPostUrlSlug() { var nonExistingUrlSlug = "any-other-url"; var exception = await Should.ThrowAsync(async () => - await blogPostAdminAppService.GetByUrlSlugAsync(cmsKitTestData.Page_1_Url)); + await blogPostAdminAppService.GetByUrlSlugAsync(cmsKitTestData.BlogUrlSlug, nonExistingUrlSlug)); exception.EntityType.ShouldBe(typeof(BlogPost)); } + [Fact] + public async Task GetByUrlSlugAsync_ShouldThrowException_WithNonExistingBlogUrlSlug() + { + var nonExistingUrlSlug = "any-other-url"; + var exception = await Should.ThrowAsync(async () => + await blogPostAdminAppService.GetByUrlSlugAsync(nonExistingUrlSlug, cmsKitTestData.Page_1_Url)); + + exception.EntityType.ShouldBe(typeof(Blog)); + } + [Fact] public async Task GetListAsync_ShouldWorkProperly_WithDefaultParameters() { diff --git a/modules/cms-kit/test/Volo.CmsKit.EntityFrameworkCore.Tests/EntityFrameworkCore/Blogs/BlogPostRepository_Test.cs b/modules/cms-kit/test/Volo.CmsKit.EntityFrameworkCore.Tests/EntityFrameworkCore/Blogs/BlogPostRepository_Test.cs new file mode 100644 index 0000000000..d393ef943e --- /dev/null +++ b/modules/cms-kit/test/Volo.CmsKit.EntityFrameworkCore.Tests/EntityFrameworkCore/Blogs/BlogPostRepository_Test.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Volo.CmsKit.Blogs; +using Volo.CmsKit.Pages; + +namespace Volo.CmsKit.EntityFrameworkCore.Blogs +{ + public class BlogPostRepository_Test : BlogPostRepository_Test + { + } +} diff --git a/modules/cms-kit/test/Volo.CmsKit.EntityFrameworkCore.Tests/EntityFrameworkCore/Blogs/BlogRepository_Test.cs b/modules/cms-kit/test/Volo.CmsKit.EntityFrameworkCore.Tests/EntityFrameworkCore/Blogs/BlogRepository_Test.cs new file mode 100644 index 0000000000..40b74d4064 --- /dev/null +++ b/modules/cms-kit/test/Volo.CmsKit.EntityFrameworkCore.Tests/EntityFrameworkCore/Blogs/BlogRepository_Test.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Volo.CmsKit.Blogs; + +namespace Volo.CmsKit.EntityFrameworkCore.Blogs +{ + public class BlogRepository_Test : BlogRepository_Test + { + + } +} diff --git a/modules/cms-kit/test/Volo.CmsKit.MongoDB.Tests/MongoDB/Blogs/BlogPostRepository_Test.cs b/modules/cms-kit/test/Volo.CmsKit.MongoDB.Tests/MongoDB/Blogs/BlogPostRepository_Test.cs new file mode 100644 index 0000000000..4bdec74132 --- /dev/null +++ b/modules/cms-kit/test/Volo.CmsKit.MongoDB.Tests/MongoDB/Blogs/BlogPostRepository_Test.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Volo.CmsKit.Blogs; +using Xunit; + +namespace Volo.CmsKit.MongoDB.Blogs +{ + [Collection(MongoTestCollection.Name)] + public class BlogPostRepository_Test : BlogPostRepository_Test + { + + } +} diff --git a/modules/cms-kit/test/Volo.CmsKit.MongoDB.Tests/MongoDB/Blogs/BlogRepository_Test.cs b/modules/cms-kit/test/Volo.CmsKit.MongoDB.Tests/MongoDB/Blogs/BlogRepository_Test.cs new file mode 100644 index 0000000000..9cac7b473c --- /dev/null +++ b/modules/cms-kit/test/Volo.CmsKit.MongoDB.Tests/MongoDB/Blogs/BlogRepository_Test.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Volo.CmsKit.Blogs; +using Xunit; + +namespace Volo.CmsKit.MongoDB.Blogs +{ + [Collection(MongoTestCollection.Name)] + public class BlogRepository_Test : BlogRepository_Test + { + + } +} 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 new file mode 100644 index 0000000000..efd07101cb --- /dev/null +++ b/modules/cms-kit/test/Volo.CmsKit.TestBase/Blogs/BlogPostRepository_Test.cs @@ -0,0 +1,125 @@ +using Shouldly; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Volo.Abp.Domain.Entities; +using Volo.Abp.Modularity; +using Xunit; + +namespace Volo.CmsKit.Blogs +{ + public abstract class BlogPostRepository_Test : CmsKitTestBase + where TStartupModule : IAbpModule + { + private readonly CmsKitTestData testData; + private readonly IBlogPostRepository blogPostRepository; + + public BlogPostRepository_Test() + { + testData = GetRequiredService(); + blogPostRepository = GetRequiredService(); + } + + [Fact] + public async Task SlugExistsAsync_ShouldReturnTrue_WithExistingUrlSlug() + { + var result = await blogPostRepository.SlugExistsAsync(testData.Blog_Id, testData.BlogPost_1_UrlSlug); + + result.ShouldBeTrue(); + } + + [Fact] + public async Task SlugExistsAsync_ShouldReturnFalse_WithNonExistingUrlSlug() + { + var nonExistingSlug = "any-other-url-slug"; + + var result = await blogPostRepository.SlugExistsAsync(testData.Blog_Id, nonExistingSlug); + + result.ShouldBeFalse(); + } + + [Fact] + public async Task SlugExistsAsync_ShouldReturnFalse_WithNonExistingBlogId() + { + var nonExistingBlogId = Guid.NewGuid(); + + var result = await blogPostRepository.SlugExistsAsync(nonExistingBlogId, testData.BlogPost_1_UrlSlug); + + result.ShouldBeFalse(); + } + + [Fact] + public async Task GetByUrlSlugAsync_ShouldWorkProperly_WithCorrectParameters() + { + var blogPost = await blogPostRepository.GetByUrlSlugAsync(testData.Blog_Id, testData.BlogPost_1_UrlSlug); + + blogPost.ShouldNotBeNull(); + blogPost.Id.ShouldBe(testData.BlogPost_1_Id); + blogPost.UrlSlug.ShouldBe(testData.BlogPost_1_UrlSlug); + } + + [Fact] + public async Task GetByUrlSlugAsync_ShouldThrowException_WithNonExistingBlogPostUrlSlug() + { + var nonExistingSlugUrl = "absolutely-non-existing-url"; + var exception = await Should.ThrowAsync( + async () => await blogPostRepository.GetByUrlSlugAsync(testData.Blog_Id, nonExistingSlugUrl)); + + exception.ShouldNotBeNull(); + exception.EntityType.ShouldBe(typeof(BlogPost)); + } + + [Fact] + public async Task GetByUrlSlugAsync_ShouldThrowException_WithNonExistingBlogId() + { + var nonExistingBlogId = Guid.NewGuid(); + var exception = await Should.ThrowAsync( + async () => await blogPostRepository.GetByUrlSlugAsync(nonExistingBlogId, testData.BlogPost_1_UrlSlug)); + + exception.ShouldNotBeNull(); + exception.EntityType.ShouldBe(typeof(BlogPost)); + } + + [Fact] + public async Task GetPagedListAsync_ShouldWorkProperly_WithBlogId_WhileGetting10_WithoutSorting() + { + var result = await blogPostRepository.GetPagedListAsync(testData.Blog_Id, 0, 10, default); + + result.ShouldNotBeNull(); + result.ShouldNotBeEmpty(); + result.Count.ShouldBe(2); + } + + [Fact] + public async Task GetPagedListAsync_ShouldWorkProperly_WithBlogId_WhileGetting1_WithoutSorting() + { + var result = await blogPostRepository.GetPagedListAsync(testData.Blog_Id, default, 1, default); + + result.ShouldNotBeNull(); + result.ShouldNotBeEmpty(); + result.Count.ShouldBe(1); + } + + [Fact] + public async Task GetPagedListAsync_ShouldWorkProperly_WithBlogId_WhileGetting1InPage2_WithoutSorting() + { + var result = await blogPostRepository.GetPagedListAsync(testData.Blog_Id, 1, 1, default); + + result.ShouldNotBeNull(); + result.ShouldNotBeEmpty(); + result.Count.ShouldBe(1); + } + + [Fact] + public async Task GetPagedListAsync_ShouldWorkProperly_WithBlogId_WhileGetting10_WithSortingByTitle() + { + var result = await blogPostRepository.GetPagedListAsync(testData.Blog_Id, default, 10, nameof(BlogPost.Title)); + + result.ShouldNotBeNull(); + result.ShouldNotBeEmpty(); + result.Count.ShouldBe(2); + } + } +} diff --git a/modules/cms-kit/test/Volo.CmsKit.TestBase/Blogs/BlogRepository_Test.cs b/modules/cms-kit/test/Volo.CmsKit.TestBase/Blogs/BlogRepository_Test.cs new file mode 100644 index 0000000000..1f425ff7f7 --- /dev/null +++ b/modules/cms-kit/test/Volo.CmsKit.TestBase/Blogs/BlogRepository_Test.cs @@ -0,0 +1,47 @@ +using Shouldly; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Volo.Abp.Domain.Entities; +using Volo.Abp.Modularity; +using Xunit; + +namespace Volo.CmsKit.Blogs +{ + public abstract class BlogRepository_Test : CmsKitTestBase + where TStartupModule : IAbpModule + { + private readonly CmsKitTestData testData; + private readonly IBlogRepository blogRepository; + + public BlogRepository_Test() + { + this.testData = GetRequiredService(); + this.blogRepository = GetRequiredService(); + } + + [Fact] + public async Task GetByUrlSlugAsync_ShouldWorkProperly_WithExistingSlug() + { + var blog = await blogRepository.GetByUrlSlugAsync(testData.BlogUrlSlug); + + blog.ShouldNotBeNull(); + blog.UrlSlug.ShouldBe(testData.BlogUrlSlug); + blog.Id.ShouldBe(testData.Blog_Id); + } + + [Fact] + public async Task GetByUrlSlugAsync_ShouldThrowException_WithNonExistingSlug() + { + var nonExistingSlug = "some-blog-slug-that-doesnt-exist"; + + var exception = await Should.ThrowAsync( + async () => await blogRepository.GetByUrlSlugAsync(nonExistingSlug)); + + exception.ShouldNotBeNull(); + exception.EntityType.ShouldBe(typeof(Blog)); + } + } +} From ca9c92b895c76b16910b4699d3e07fcdce6435e4 Mon Sep 17 00:00:00 2001 From: enisn Date: Wed, 3 Feb 2021 14:29:40 +0300 Subject: [PATCH 043/472] CmsKit - Public Pages of BlogPosts --- .../Volo/CmsKit/Blogs/BlogPostConsts.cs | 2 + .../CmsKit/Localization/Resources/en.json | 14 ++--- .../CmsKit/Localization/Resources/tr.json | 6 ++- .../Volo/CmsKit/Blogs/IBlogPostRepository.cs | 2 + .../CmsKit/Blogs/EfCoreBlogPostRepository.cs | 20 +++++-- .../MongoDB/Blogs/MongoBlogPostRepository.cs | 25 ++++++--- .../Public/Blogs/IBlogPostPublicAppService.cs | 2 +- .../Public/Blogs/BlogPostPublicAppService.cs | 6 ++- .../CmsKitPublicWebModule.cs | 8 +-- .../Pages/CmsKit/Blogs/BlogPost.cshtml | 53 +++++++++++++++++++ .../Pages/CmsKit/Blogs/BlogPost.cshtml.cs | 33 ++++++++++++ .../Pages/CmsKit/Blogs/Index.cshtml | 46 ++++++++++++++++ .../Pages/CmsKit/Blogs/Index.cshtml.cs | 45 ++++++++++++++++ .../Components/Blogs/BlogPost/Default.cshtml | 31 +++++++++++ .../BlogPost/DefaultBlogPostViewComponent.cs | 29 ++++++++++ .../Blogs/BlogPostComment/Default.cshtml | 22 ++++++++ .../DefaultBlogPostCommentViewComponent.cs | 39 ++++++++++++++ .../Pages/CmsKitPublicPageBase.cs | 26 +++++++++ 18 files changed, 385 insertions(+), 24 deletions(-) create mode 100644 modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Blogs/BlogPost.cshtml create mode 100644 modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Blogs/BlogPost.cshtml.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Blogs/Index.cshtml create mode 100644 modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Blogs/Index.cshtml.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Blogs/BlogPost/Default.cshtml create mode 100644 modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Blogs/BlogPost/DefaultBlogPostViewComponent.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Blogs/BlogPostComment/Default.cshtml create mode 100644 modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Blogs/BlogPostComment/DefaultBlogPostCommentViewComponent.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKitPublicPageBase.cs diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Blogs/BlogPostConsts.cs b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Blogs/BlogPostConsts.cs index 607effcebd..28ca2d9141 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Blogs/BlogPostConsts.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Blogs/BlogPostConsts.cs @@ -9,5 +9,7 @@ public static int MinUrlSlugLength { get; set; } = 2; public static int MaxShortDescriptionLength { get; set; } = 256; + + public const string EntityType = "BlogPost"; } } 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 00eccab1be..f59a5c981b 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 @@ -3,10 +3,13 @@ "texts": { "CmsKit:0002": "Content already exists!", "CmsKit:0003": "The entity {0} is not taggable.", + "CmsKit:Page:0001": "The given url ({0}) already exists.", "CommentAuthorizationExceptionMessage": "Those comments are not allowed for public display.", "Comments": "Comments", "Delete": "Delete", "Edit": "Edit", + "Read": "Read", + "LastModification": "Last Modification", "LoginToAddComment": "Login to add comment", "LoginToRate": "Login to rate", "LoginToReply": "Login to reply", @@ -17,14 +20,14 @@ "Permission:Contents.Create": "Create Content", "Permission:Contents.Delete": "Delete Content", "Permission:Contents.Update": "Update Content", - "Permission:TagManagement": "Tag Management", - "Permission:TagManagement.Create": "Create", - "Permission:TagManagement.Delete": "Delete", - "Permission:TagManagement.Update": "Update", "Permission:PageManagement": "Page Management", "Permission:PageManagement:Create": "Create", "Permission:PageManagement:Delete": "Delete", "Permission:PageManagement:Update": "Update", + "Permission:TagManagement": "Tag Management", + "Permission:TagManagement.Create": "Create", + "Permission:TagManagement.Delete": "Delete", + "Permission:TagManagement.Update": "Update", "PickYourReaction": "Pick your reaction", "RatingUndoMessage": "Your rating will be undo.", "Reply": "Reply", @@ -35,7 +38,6 @@ "Undo": "Undo", "Update": "Update", "YourComment": "Your comment", - "YourReply": "Your reply", - "CmsKit:Page:0001": "The given url ({0}) already exists." + "YourReply": "Your reply" } } 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 1ebb0c126b..77fe348ad6 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 @@ -3,10 +3,13 @@ "texts": { "CmsKit:0002": "İçerik zaten mevcut!", "CmsKit:0003": "{0} ögesi etiketlenebilir değil.", + "CmsKit:Page:0001": "Girilen url ({0}) kullanımdadır.", "CommentAuthorizationExceptionMessage": "Bu yorumları görebilmek için yetki gerekir.", "Comments": "Yorumlar", "Delete": "Sil", "Edit": "Düzenle", + "Read": "Oku", + "LastModification": "Son Güncellenme", "LoginToAddComment": "Yorum yapmak için giriş yap", "LoginToRate": "Oylamak için giriş yapın", "LoginToReply": "Cevap vermek için giriş yap", @@ -31,7 +34,6 @@ "Undo": "Geri al", "Update": "Güncelle", "YourComment": "Yorumunuz", - "YourReply": "Cevabınız", - "CmsKit:Page:0001": "Girilen url ({0}) kullanımdadır." + "YourReply": "Cevabınız" } } 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 fdb721d8d8..c3cf64b44c 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 @@ -15,5 +15,7 @@ namespace Volo.CmsKit.Blogs Task GetByUrlSlugAsync(Guid blogId, string urlSlug, CancellationToken cancellationToken = default); Task> GetPagedListAsync(Guid blogId, int skipCount, int maxResultCount, string sorting, bool includeDetails = false, CancellationToken cancellationToken = default); + + Task GetCountAsync(Guid blogId, CancellationToken cancellationToken = default); } } 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 1a6546d5fc..df2893dd1e 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 @@ -10,6 +10,7 @@ using Volo.Abp.EntityFrameworkCore; using Volo.CmsKit.EntityFrameworkCore; using System.Linq; using System.Data.Common; +using Volo.Abp.Domain.Entities; namespace Volo.CmsKit.Blogs { @@ -19,14 +20,27 @@ namespace Volo.CmsKit.Blogs { } - public Task GetByUrlSlugAsync(Guid blogId, string urlSlug, CancellationToken cancellationToken = default) + public async Task GetByUrlSlugAsync(Guid blogId, string urlSlug, CancellationToken cancellationToken = default) { - return GetAsync(x => x.BlogId == blogId && x.UrlSlug.ToLower() == urlSlug, cancellationToken: cancellationToken); + var dbSet = await GetDbSetAsync(); + + return await dbSet + .Include(i=> i.Creator) + .Where(x => + x.BlogId == blogId && x.UrlSlug.ToLower() == urlSlug) + .FirstOrDefaultAsync(cancellationToken: cancellationToken) + ?? throw new EntityNotFoundException(typeof(BlogPost)); } - public async Task> GetPagedListAsync(Guid blogId, int skipCount, int maxResultCount, string sorting, bool includeDetails = false, CancellationToken cancellationToken = default) + public async Task GetCountAsync(Guid blogId, CancellationToken cancellationToken = default) { + return await (await GetQueryableAsync()).CountAsync( + x => x.BlogId == blogId, + cancellationToken); + } + public async Task> GetPagedListAsync(Guid blogId, int skipCount, int maxResultCount, string sorting, bool includeDetails = false, CancellationToken cancellationToken = default) + { var queryable = (await GetQueryableAsync()) .Include(i => i.Creator) .Where(x => x.BlogId == blogId); 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 638c219bb6..bcd6e33211 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 @@ -1,4 +1,6 @@ -using System; +using MongoDB.Driver; +using Nito.AsyncEx; +using System; using System.Collections.Generic; using System.Linq; using System.Linq.Dynamic.Core; @@ -7,6 +9,7 @@ using System.Threading.Tasks; using Volo.Abp.Domain.Repositories.MongoDB; using Volo.Abp.MongoDB; using Volo.CmsKit.Blogs; +using Volo.CmsKit.Users; namespace Volo.CmsKit.MongoDB.Blogs { @@ -18,18 +21,28 @@ namespace Volo.CmsKit.MongoDB.Blogs public Task GetByUrlSlugAsync(Guid blogId, string urlSlug, CancellationToken cancellationToken = default) { - return GetAsync(x => x.BlogId == blogId && x.UrlSlug.ToLower() == urlSlug, cancellationToken: cancellationToken); + return GetAsync(x => + x.BlogId == blogId && + x.UrlSlug.ToLower() == urlSlug, + includeDetails: true, + cancellationToken: cancellationToken); + } + + public async Task GetCountAsync(Guid blogId, CancellationToken cancellationToken = default) + { + return await AsyncExecuter.CountAsync( + await WithDetailsAsync(), + x => x.BlogId == blogId, + cancellationToken); } public async Task> GetPagedListAsync(Guid blogId, int skipCount, int maxResultCount, string sorting, bool includeDetails = false, CancellationToken cancellationToken = default) { var dbContext = await GetDbContextAsync(cancellationToken); - var blogPostQueryable = await GetQueryableAsync(); + var blogPostQueryable = await WithDetailsAsync(); var queryable = blogPostQueryable - .Where(x => x.BlogId == blogId) - //.Join(dbContext.CmsUsers, outerKeySelector: x => x.CreatorId, innerKeySelector: x => x.Id, resultSelector: s => s) - ; + .Where(x => x.BlogId == blogId); if (!sorting.IsNullOrWhiteSpace()) { 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 de460f0764..6771ae6adf 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 @@ -6,7 +6,7 @@ namespace Volo.CmsKit.Public.Blogs { public interface IBlogPostPublicAppService { - Task> GetListAsync(string blogUrlSlug, PagedAndSortedResultRequestDto input); + Task> GetListAsync(string blogUrlSlug, PagedAndSortedResultRequestDto input); Task GetAsync(string blogUrlSlug, string blogPostUrlSlug); } 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 907e7e7518..d9bb9ab281 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 @@ -29,13 +29,15 @@ namespace Volo.CmsKit.Public.Blogs return ObjectMapper.Map(blogPost); } - public async Task> GetListAsync(string blogUrlSlug, PagedAndSortedResultRequestDto input) + public async Task> GetListAsync(string blogUrlSlug, PagedAndSortedResultRequestDto input) { var blog = await BlogRepository.GetByUrlSlugAsync(blogUrlSlug); var blogPosts = await BlogPostRepository.GetPagedListAsync(blog.Id, input.SkipCount, input.MaxResultCount, input.Sorting); - return ObjectMapper.Map, List>(blogPosts); + return new PagedResultDto( + await BlogPostRepository.GetCountAsync(blog.Id), + ObjectMapper.Map, List>(blogPosts)); } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/CmsKitPublicWebModule.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/CmsKitPublicWebModule.cs index 953102aa79..d49ef63a85 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/CmsKitPublicWebModule.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/CmsKitPublicWebModule.cs @@ -61,10 +61,10 @@ namespace Volo.CmsKit.Public.Web { Configure(options => { - if (GlobalFeatureManager.Instance.IsEnabled()) - { - options.Conventions.AddPageRoute("/CmsKit/Pages/Index", @"{*pageUrl:minlength(1)}"); - } + //if (GlobalFeatureManager.Instance.IsEnabled()) + //{ + // options.Conventions.AddPageRoute("/CmsKit/Pages/Index", @"{*pageUrl:minlength(1)}"); + //} }); } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Blogs/BlogPost.cshtml b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Blogs/BlogPost.cshtml new file mode 100644 index 0000000000..cf047d525c --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Blogs/BlogPost.cshtml @@ -0,0 +1,53 @@ +@page "/b/{blogUrlSlug}/{blogPostUrlSlug}" + +@using Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.Blogs.BlogPost +@using Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.Blogs.BlogPostComment +@using Volo.CmsKit.Public.Web.Pages.CmsKit.Blogs +@using Volo.CmsKit.Public.Web.Pages +@using Volo.Abp.GlobalFeatures +@using Volo.CmsKit.GlobalFeatures +@using Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.ReactionSelection +@using Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.Rating + +@inherits CmsKitPublicPageBase + +@model BlogPostModel + +@{ + PageLayout.Content.Title = Model.BlogPost.Title; +} + +@await Component.InvokeAsync(typeof(DefaultBlogPostViewComponent), new +{ + Model.BlogUrlSlug, + Model.BlogPostUrlSlug +}) + +@if (GlobalFeatureManager.Instance.IsEnabled()) +{ + @await Component.InvokeAsync(typeof(ReactionSelectionViewComponent), new + { + entityType = Volo.CmsKit.Blogs.BlogPostConsts.EntityType, + entityId = Model.BlogPost.Id.ToString() + }) +} + +@if (GlobalFeatureManager.Instance.IsEnabled()) +{ + @await Component.InvokeAsync(typeof(RatingViewComponent), new + { + entityType = Volo.CmsKit.Blogs.BlogPostConsts.EntityType, + entityId = Model.BlogPost.Id.ToString() + }) +} + +
+ +@if (GlobalFeatureManager.Instance.IsEnabled()) +{ + @await Component.InvokeAsync(typeof(DefaultBlogPostCommentViewComponent), new + { + entityType = Volo.CmsKit.Blogs.BlogPostConsts.EntityType, + entityId = Model.BlogPost.Id.ToString() + }) +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Blogs/BlogPost.cshtml.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Blogs/BlogPost.cshtml.cs new file mode 100644 index 0000000000..4a63ec1692 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Blogs/BlogPost.cshtml.cs @@ -0,0 +1,33 @@ +using Microsoft.AspNetCore.Mvc; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Volo.CmsKit.Public.Blogs; + +namespace Volo.CmsKit.Public.Web.Pages.CmsKit.Blogs +{ + public class BlogPostModel : CmsKitPublicPageModelBase + { + [BindProperty(SupportsGet = true)] + public string BlogUrlSlug { get; set; } + + [BindProperty(SupportsGet = true)] + public string BlogPostUrlSlug { get; set; } + + public BlogPostPublicDto BlogPost { get; private set; } + + protected IBlogPostPublicAppService BlogPostPublicAppService { get; } + + public BlogPostModel(IBlogPostPublicAppService blogPostPublicAppService) + { + BlogPostPublicAppService = blogPostPublicAppService; + } + + public async Task OnGetAsync() + { + BlogPost = await BlogPostPublicAppService.GetAsync(BlogUrlSlug, BlogPostUrlSlug); + } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Blogs/Index.cshtml b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Blogs/Index.cshtml new file mode 100644 index 0000000000..06a20650c7 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Blogs/Index.cshtml @@ -0,0 +1,46 @@ +@page "/b/{blogUrlSlug}" + +@using Volo.CmsKit.Public.Web.Pages + +@inherits CmsKitPublicPageBase + +@model Volo.CmsKit.Public.Web.Pages.CmsKit.Blogs.IndexModel + + + @foreach (var blog in Model.Blogs.Items) + { + + + + + @blog.Title + + + @@@blog.Creator?.UserName + + + + + @blog.ShortDescription + + + + + + + + + + @blog.CreationTime + + + + + + } + + + + + diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Blogs/Index.cshtml.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Blogs/Index.cshtml.cs new file mode 100644 index 0000000000..d375efef61 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Blogs/Index.cshtml.cs @@ -0,0 +1,45 @@ +using Microsoft.AspNetCore.Mvc; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Volo.Abp.Application.Dtos; +using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Pagination; +using Volo.CmsKit.Public.Blogs; + +namespace Volo.CmsKit.Public.Web.Pages.CmsKit.Blogs +{ + public class IndexModel : CmsKitPublicPageModelBase + { + public const int PageSize = 12; + + [BindProperty(SupportsGet = true)] + public string BlogUrlSlug { get; set; } + + [BindProperty(SupportsGet = true)] + public int CurrentPage { get; set; } = 1; + + public PagedResultDto Blogs { get; private set; } + + public PagerModel PagerModel => new PagerModel(Blogs.TotalCount, Blogs.Items.Count, CurrentPage, PageSize, Request.Path.ToString()); + + protected IBlogPostPublicAppService BlogPostPublicAppService { get; } + + public IndexModel(IBlogPostPublicAppService blogPostPublicAppService) + { + BlogPostPublicAppService = blogPostPublicAppService; + } + + public async Task OnGetAsync() + { + Blogs = await BlogPostPublicAppService.GetListAsync( + BlogUrlSlug, + new PagedAndSortedResultRequestDto + { + SkipCount = PageSize * (CurrentPage - 1), + MaxResultCount = PageSize + }); + } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Blogs/BlogPost/Default.cshtml b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Blogs/BlogPost/Default.cshtml new file mode 100644 index 0000000000..df409d6dde --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Blogs/BlogPost/Default.cshtml @@ -0,0 +1,31 @@ +@model Volo.CmsKit.Public.Blogs.BlogPostPublicDto +@using Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.Contents +@using Volo.Abp.AspNetCore.Mvc.UI.Layout +@using Volo.CmsKit.Localization +@using Microsoft.Extensions.Localization + +@inject IStringLocalizer L + + + + + @Model.Title + @@@Model.Creator?.UserName + + + @await Component.InvokeAsync(typeof(ContentViewComponent), new + { + entityType = Volo.CmsKit.Blogs.BlogPostConsts.EntityType, + entityId = Model.Id.ToString() + }) + + + @Model.CreationTime + @if (Model.LastModificationTime != null) + { + @L["LastModification"].Value : @Model.LastModificationTime + } + + + + diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Blogs/BlogPost/DefaultBlogPostViewComponent.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Blogs/BlogPost/DefaultBlogPostViewComponent.cs new file mode 100644 index 0000000000..4a055d6679 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Blogs/BlogPost/DefaultBlogPostViewComponent.cs @@ -0,0 +1,29 @@ +using Microsoft.AspNetCore.Mvc; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Volo.Abp.AspNetCore.Mvc; +using Volo.CmsKit.Public.Blogs; + +namespace Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.Blogs.BlogPost +{ + [ViewComponent(Name = "CmsDefaultBlogPost")] + public class DefaultBlogPostViewComponent : AbpViewComponent + { + protected IBlogPostPublicAppService BlogPostPublicAppService { get; } + + public DefaultBlogPostViewComponent(IBlogPostPublicAppService blogPostPublicAppService) + { + BlogPostPublicAppService = blogPostPublicAppService; + } + + public virtual async Task InvokeAsync(string blogUrlSlug, string blogPostUrlSlug) + { + var blogPost = await BlogPostPublicAppService.GetAsync(blogUrlSlug, blogPostUrlSlug); + + return View("~/Pages/CmsKit/Shared/Components/Blogs/BlogPost/Default.cshtml", blogPost); + } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Blogs/BlogPostComment/Default.cshtml b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Blogs/BlogPostComment/Default.cshtml new file mode 100644 index 0000000000..c34f64eb0c --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Blogs/BlogPostComment/Default.cshtml @@ -0,0 +1,22 @@ +@using Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.Commenting +@using Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.Blogs.BlogPostComment +@using Volo.CmsKit.Localization +@using Microsoft.Extensions.Localization + +@inject IStringLocalizer L + +@model DefaultBlogPostCommentViewComponent.DefaultBlogPostCommentViewModel + + + + + @L["Comments"] + + + @await Component.InvokeAsync(typeof(CommentingViewComponent), new + { + entityType = Model.EntityType, + entityId = Model.EntityId + }) + + \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Blogs/BlogPostComment/DefaultBlogPostCommentViewComponent.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Blogs/BlogPostComment/DefaultBlogPostCommentViewComponent.cs new file mode 100644 index 0000000000..c551146f5f --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Blogs/BlogPostComment/DefaultBlogPostCommentViewComponent.cs @@ -0,0 +1,39 @@ +using Microsoft.AspNetCore.Mvc; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Volo.Abp.AspNetCore.Mvc; +using Volo.CmsKit.Public.Blogs; + +namespace Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.Blogs.BlogPostComment +{ + [ViewComponent(Name = "CmsDefaultBlogPostComment")] + public class DefaultBlogPostCommentViewComponent : AbpViewComponent + { + protected IBlogPostPublicAppService BlogPostPublicAppService; + + public DefaultBlogPostCommentViewComponent(IBlogPostPublicAppService blogPostPublicAppService) + { + BlogPostPublicAppService = blogPostPublicAppService; + } + + public virtual async Task InvokeAsync(string entityType, string entityId) + { + return View( + "~/Pages/CmsKit/Shared/Components/Blogs/BlogPostComment/Default.cshtml", + new DefaultBlogPostCommentViewModel + { + EntityType = entityType, + EntityId = entityId + }); + } + + public class DefaultBlogPostCommentViewModel + { + public string EntityType { get; set; } + public string EntityId { get; set; } + } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKitPublicPageBase.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKitPublicPageBase.cs new file mode 100644 index 0000000000..879745bf24 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKitPublicPageBase.cs @@ -0,0 +1,26 @@ +using Microsoft.AspNetCore.Mvc.Razor.Internal; +using Microsoft.Extensions.Localization; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Volo.Abp.AspNetCore.Mvc.UI.Layout; +using Volo.CmsKit.Localization; + +namespace Volo.CmsKit.Public.Web.Pages +{ + public class CmsKitPublicPageBase : Microsoft.AspNetCore.Mvc.RazorPages.Page + { + [RazorInject] + public IStringLocalizer L { get; set; } + + [RazorInject] + public IPageLayout PageLayout { get; set; } + + public override Task ExecuteAsync() + { + return Task.CompletedTask; // Will be overriden by razor pages. (.cshtml) + } + } +} From f228768ee804f9e7531b287ede1ffa48506c7375 Mon Sep 17 00:00:00 2001 From: enisn Date: Wed, 3 Feb 2021 16:01:42 +0300 Subject: [PATCH 044/472] CmsKit - Add Existence check for blog --- .../Volo/CmsKit/Blogs/BlogPostManager.cs | 4 +++- .../Volo/CmsKit/Blogs/IBlogRepository.cs | 1 + .../Volo/CmsKit/Blogs/EfCoreBlogRepository.cs | 9 ++++++++- .../MongoDB/Blogs/MongoBlogRepository.cs | 10 +++++++++- .../Blogs/BlogRepository_Test.cs | 18 ++++++++++++++++++ 5 files changed, 39 insertions(+), 3 deletions(-) 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 61198e0fad..228d8eccbf 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 @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using Volo.Abp.Domain.Entities; using Volo.Abp.Domain.Services; namespace Volo.CmsKit.Blogs @@ -48,7 +49,8 @@ namespace Volo.CmsKit.Blogs private async Task CheckBlogExistenceAsync(Guid blogId) { - await blogRepository.GetAsync(blogId); + if (!await blogRepository.ExistsAsync(blogId)) + throw new EntityNotFoundException(typeof(Blog), blogId); } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogRepository.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogRepository.cs index 152c17d615..bbff825189 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogRepository.cs @@ -7,5 +7,6 @@ namespace Volo.CmsKit.Blogs public interface IBlogRepository : IBasicRepository { public Task GetByUrlSlugAsync(string urlSlug); + Task ExistsAsync(Guid blogId); } } diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogRepository.cs index 76211780f6..677857d2b6 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogRepository.cs @@ -1,4 +1,6 @@ -using System; +using Microsoft.EntityFrameworkCore; +using System; +using System.Security.Cryptography.X509Certificates; using System.Threading.Tasks; using Volo.Abp.Domain.Repositories.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore; @@ -12,6 +14,11 @@ namespace Volo.CmsKit.Blogs { } + public async Task ExistsAsync(Guid blogId) + { + return await (await GetQueryableAsync()).AnyAsync(x => x.Id == blogId); + } + public Task GetByUrlSlugAsync(string urlSlug) { return GetAsync(x => x.UrlSlug == urlSlug); 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 998edf6e67..b1d9d3167b 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 @@ -1,4 +1,5 @@ -using System; +using MongoDB.Driver.Core.Operations; +using System; using System.Threading.Tasks; using Volo.Abp.Domain.Repositories.MongoDB; using Volo.Abp.MongoDB; @@ -12,6 +13,13 @@ namespace Volo.CmsKit.MongoDB.Blogs { } + public async Task ExistsAsync(Guid blogId) + { + return await AsyncExecuter.AnyAsync( + await GetQueryableAsync(), + x => x.Id == blogId); + } + public Task GetByUrlSlugAsync(string urlSlug) { return GetAsync(x => x.UrlSlug == urlSlug); diff --git a/modules/cms-kit/test/Volo.CmsKit.TestBase/Blogs/BlogRepository_Test.cs b/modules/cms-kit/test/Volo.CmsKit.TestBase/Blogs/BlogRepository_Test.cs index 1f425ff7f7..5119dfd75b 100644 --- a/modules/cms-kit/test/Volo.CmsKit.TestBase/Blogs/BlogRepository_Test.cs +++ b/modules/cms-kit/test/Volo.CmsKit.TestBase/Blogs/BlogRepository_Test.cs @@ -43,5 +43,23 @@ namespace Volo.CmsKit.Blogs exception.ShouldNotBeNull(); exception.EntityType.ShouldBe(typeof(Blog)); } + + [Fact] + public async Task ExistsAsync_ShouldReturnTrue_WithExistingId() + { + var result = await blogRepository.ExistsAsync(testData.Blog_Id); + + result.ShouldBeTrue(); + } + + [Fact] + public async Task ExistsAsync_ShouldReturnFalse_WithExistingId() + { + var nonExistingId = Guid.NewGuid(); + + var result = await blogRepository.ExistsAsync(nonExistingId); + + result.ShouldBeFalse(); + } } } From 07ec565b48adffed6f2cb5c7ba70717507d5b39c Mon Sep 17 00:00:00 2001 From: enisn Date: Wed, 3 Feb 2021 16:12:04 +0300 Subject: [PATCH 045/472] CmsKit - Uncomment Pages Page initialization --- .../src/Volo.CmsKit.Public.Web/CmsKitPublicWebModule.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/CmsKitPublicWebModule.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/CmsKitPublicWebModule.cs index d49ef63a85..953102aa79 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/CmsKitPublicWebModule.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/CmsKitPublicWebModule.cs @@ -61,10 +61,10 @@ namespace Volo.CmsKit.Public.Web { Configure(options => { - //if (GlobalFeatureManager.Instance.IsEnabled()) - //{ - // options.Conventions.AddPageRoute("/CmsKit/Pages/Index", @"{*pageUrl:minlength(1)}"); - //} + if (GlobalFeatureManager.Instance.IsEnabled()) + { + options.Conventions.AddPageRoute("/CmsKit/Pages/Index", @"{*pageUrl:minlength(1)}"); + } }); } } From c330356f661992c1e5203abe404bb45b5fe202e5 Mon Sep 17 00:00:00 2001 From: enisn Date: Wed, 3 Feb 2021 16:01:42 +0300 Subject: [PATCH 046/472] CmsKit - Add Existence check for blog --- .../Volo/CmsKit/Blogs/BlogPostManager.cs | 4 +++- .../Volo/CmsKit/Blogs/IBlogRepository.cs | 1 + .../Volo/CmsKit/Blogs/EfCoreBlogRepository.cs | 9 ++++++++- .../Volo/CmsKit/MongoDB/Blogs/MongoBlogRepository.cs | 10 +++++++++- 4 files changed, 21 insertions(+), 3 deletions(-) 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 6bbb772072..a419802b8e 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 @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using Volo.Abp.Domain.Entities; using Volo.Abp.Domain.Services; namespace Volo.CmsKit.Blogs @@ -48,7 +49,8 @@ namespace Volo.CmsKit.Blogs private async Task CheckBlogExistenceAsync(Guid blogId) { - await blogRepository.GetAsync(blogId); + if (!await blogRepository.ExistsAsync(blogId)) + throw new EntityNotFoundException(typeof(Blog), blogId); } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogRepository.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogRepository.cs index 90e59587a2..d6b2dc58b1 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogRepository.cs @@ -5,5 +5,6 @@ namespace Volo.CmsKit.Blogs { public interface IBlogRepository : IBasicRepository { + Task ExistsAsync(Guid blogId); } } diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogRepository.cs index a43504642c..0db324ebcf 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogRepository.cs @@ -1,4 +1,6 @@ -using System; +using Microsoft.EntityFrameworkCore; +using System; +using System.Threading.Tasks; using Volo.Abp.Domain.Repositories.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore; using Volo.CmsKit.EntityFrameworkCore; @@ -10,5 +12,10 @@ namespace Volo.CmsKit.Blogs public EfCoreBlogRepository(IDbContextProvider dbContextProvider) : base(dbContextProvider) { } + + public async Task ExistsAsync(Guid blogId) + { + return await (await GetQueryableAsync()).AnyAsync(x => x.Id == blogId); + } } } 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 195c29f1f7..e63f816bef 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 @@ -1,4 +1,5 @@ -using System; +using MongoDB.Driver.Core.Operations; +using System; using Volo.Abp.Domain.Repositories.MongoDB; using Volo.Abp.MongoDB; using Volo.CmsKit.Blogs; @@ -10,5 +11,12 @@ namespace Volo.CmsKit.MongoDB.Blogs public MongoBlogRepository(IMongoDbContextProvider dbContextProvider) : base(dbContextProvider) { } + + public async Task ExistsAsync(Guid blogId) + { + return await AsyncExecuter.AnyAsync( + await GetQueryableAsync(), + x => x.Id == blogId); + } } } From ebe0a85a0047d9f12bc719cf894c1b4ba7853131 Mon Sep 17 00:00:00 2001 From: enisn Date: Wed, 3 Feb 2021 16:19:16 +0300 Subject: [PATCH 047/472] CmsKit - Remove unnecessary CmsKitBlogOptions --- .../Volo/CmsKit/Blogs/CmsKitBlogOptions.cs | 31 ------------------- 1 file changed, 31 deletions(-) delete mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/CmsKitBlogOptions.cs diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/CmsKitBlogOptions.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/CmsKitBlogOptions.cs deleted file mode 100644 index bc3dd30435..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/CmsKitBlogOptions.cs +++ /dev/null @@ -1,31 +0,0 @@ -using System; - -namespace Volo.CmsKit.Blogs -{ - public class CmsKitBlogOptions - { - private string routePrefix = "blog"; - - /// - /// Gets or sets route prefix. Default value is 'blog'. - /// - /// - /// This parameter will be used while presenting blogposts. - /// - public string RoutePrefix - { - get => GetFormattedRoutePrefix(); - set => routePrefix = value; - } - - private string GetFormattedRoutePrefix() - { - if (string.IsNullOrWhiteSpace(routePrefix)) - { - return "/"; - } - - return routePrefix.EnsureEndsWith('/').EnsureStartsWith('/'); - } - } -} From 0efd22e552d132f1bd0d57c6c6bcff4b330905d6 Mon Sep 17 00:00:00 2001 From: enisn Date: Wed, 3 Feb 2021 16:20:11 +0300 Subject: [PATCH 048/472] CmsKit - Convert mapping to AutoMapper for BlogLookupDto --- .../Volo/CmsKit/Admin/Blogs/BlogLookupDto.cs | 8 +------- .../Volo/CmsKit/Admin/Blogs/BlogAdminAppService.cs | 5 +---- .../Admin/CmsKitAdminApplicationAutoMapperProfile.cs | 2 ++ 3 files changed, 4 insertions(+), 11 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogLookupDto.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogLookupDto.cs index 74e63b9150..ed514d839d 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogLookupDto.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogLookupDto.cs @@ -1,15 +1,9 @@ using System; -namespace Volo.CmsKit.Admin.Application.Contracts.Volo.CmsKit.Admin.Blogs +namespace Volo.CmsKit.Admin.Blogs { public class BlogLookupDto { - public BlogLookupDto(Guid id, string name) - { - Id = id; - Name = name; - } - public Guid Id { get; set; } public string Name { get; set; } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogAdminAppService.cs index 5c8ae8e26c..0703bc94a4 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogAdminAppService.cs @@ -6,7 +6,6 @@ using System.Threading.Tasks; using Volo.Abp.Application.Services; using Volo.Abp.Domain.Repositories; using Volo.Abp.GlobalFeatures; -using Volo.CmsKit.Admin.Application.Contracts.Volo.CmsKit.Admin.Blogs; using Volo.CmsKit.Blogs; using Volo.CmsKit.GlobalFeatures; using Volo.CmsKit.Permissions; @@ -31,9 +30,7 @@ namespace Volo.CmsKit.Admin.Blogs { var blogs = await Repository.GetListAsync(); - return blogs - .Select(s => new BlogLookupDto(s.Id, s.Name)) - .ToList(); + return ObjectMapper.Map, List>(blogs); } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/CmsKitAdminApplicationAutoMapperProfile.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/CmsKitAdminApplicationAutoMapperProfile.cs index 46afe04213..8fc2567093 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/CmsKitAdminApplicationAutoMapperProfile.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/CmsKitAdminApplicationAutoMapperProfile.cs @@ -27,6 +27,8 @@ namespace Volo.CmsKit.Admin CreateMap(MemberList.Destination) .ReverseMap(); + CreateMap(MemberList.Destination); + CreateMap(MemberList.Destination); } } From 29cd7ed4ccef4a410347b342e63f431160891d9d Mon Sep 17 00:00:00 2001 From: enisn Date: Wed, 3 Feb 2021 16:20:35 +0300 Subject: [PATCH 049/472] CmsKit - Namespace fix --- .../Volo/CmsKit/Admin/Blogs/IBlogAdminAppService.cs | 1 - .../src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogRepository.cs | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogAdminAppService.cs index 9f4d16c7f6..b6000be499 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogAdminAppService.cs @@ -2,7 +2,6 @@ using System.Collections.Generic; using System.Threading.Tasks; using Volo.Abp.Application.Services; -using Volo.CmsKit.Admin.Application.Contracts.Volo.CmsKit.Admin.Blogs; namespace Volo.CmsKit.Admin.Blogs { diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogRepository.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogRepository.cs index d6b2dc58b1..0061e1a397 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogRepository.cs @@ -1,4 +1,5 @@ using System; +using System.Threading.Tasks; using Volo.Abp.Domain.Repositories; namespace Volo.CmsKit.Blogs From 12ed6ae59152c40ad0f1af82240aaea2aa6a4ca3 Mon Sep 17 00:00:00 2001 From: enisn Date: Wed, 3 Feb 2021 16:26:59 +0300 Subject: [PATCH 050/472] CmsKit - Using fix at MongoBlogRepository --- .../Volo/CmsKit/MongoDB/Blogs/MongoBlogRepository.cs | 1 + 1 file changed, 1 insertion(+) 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 e63f816bef..23e0fe1436 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 @@ -1,5 +1,6 @@ using MongoDB.Driver.Core.Operations; using System; +using System.Threading.Tasks; using Volo.Abp.Domain.Repositories.MongoDB; using Volo.Abp.MongoDB; using Volo.CmsKit.Blogs; From 094512ade0dd702a9af21220322dd68404fc45c6 Mon Sep 17 00:00:00 2001 From: enisn Date: Wed, 3 Feb 2021 16:27:36 +0300 Subject: [PATCH 051/472] CmsKit - Namespace fix at BlogAdminController --- .../Volo/CmsKit/Admin/Blogs/BlogAdminController.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogAdminController.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogAdminController.cs index b12b4f83b1..e6c4370df9 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogAdminController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogAdminController.cs @@ -8,7 +8,6 @@ using System.Threading.Tasks; using Volo.Abp; using Volo.Abp.Application.Dtos; using Volo.Abp.GlobalFeatures; -using Volo.CmsKit.Admin.Application.Contracts.Volo.CmsKit.Admin.Blogs; using Volo.CmsKit.GlobalFeatures; using Volo.CmsKit.Permissions; From 42cf0238ba98f37ad89c866d69d9b2c712d9afa6 Mon Sep 17 00:00:00 2001 From: enisn Date: Wed, 3 Feb 2021 16:51:17 +0300 Subject: [PATCH 052/472] CmsKit - Add missing error resources --- .../Volo/CmsKit/Localization/Resources/en.json | 13 +++++++------ .../Volo/CmsKit/Localization/Resources/tr.json | 5 +++-- 2 files changed, 10 insertions(+), 8 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 00eccab1be..118344b626 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 @@ -3,6 +3,8 @@ "texts": { "CmsKit:0002": "Content already exists!", "CmsKit:0003": "The entity {0} is not taggable.", + "CmsKit:BlogPost:0001": "Same url slug already exists!", + "CmsKit:Page:0001": "The given url ({0}) already exists.", "CommentAuthorizationExceptionMessage": "Those comments are not allowed for public display.", "Comments": "Comments", "Delete": "Delete", @@ -17,14 +19,14 @@ "Permission:Contents.Create": "Create Content", "Permission:Contents.Delete": "Delete Content", "Permission:Contents.Update": "Update Content", - "Permission:TagManagement": "Tag Management", - "Permission:TagManagement.Create": "Create", - "Permission:TagManagement.Delete": "Delete", - "Permission:TagManagement.Update": "Update", "Permission:PageManagement": "Page Management", "Permission:PageManagement:Create": "Create", "Permission:PageManagement:Delete": "Delete", "Permission:PageManagement:Update": "Update", + "Permission:TagManagement": "Tag Management", + "Permission:TagManagement.Create": "Create", + "Permission:TagManagement.Delete": "Delete", + "Permission:TagManagement.Update": "Update", "PickYourReaction": "Pick your reaction", "RatingUndoMessage": "Your rating will be undo.", "Reply": "Reply", @@ -35,7 +37,6 @@ "Undo": "Undo", "Update": "Update", "YourComment": "Your comment", - "YourReply": "Your reply", - "CmsKit:Page:0001": "The given url ({0}) already exists." + "YourReply": "Your reply" } } 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 1ebb0c126b..13d7bc7e37 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 @@ -3,6 +3,8 @@ "texts": { "CmsKit:0002": "İçerik zaten mevcut!", "CmsKit:0003": "{0} ögesi etiketlenebilir değil.", + "CmsKit:BlogPost:0001": "Aynı url etiketi zaten mevcut.", + "CmsKit:Page:0001": "Girilen url ({0}) kullanımdadır.", "CommentAuthorizationExceptionMessage": "Bu yorumları görebilmek için yetki gerekir.", "Comments": "Yorumlar", "Delete": "Sil", @@ -31,7 +33,6 @@ "Undo": "Geri al", "Update": "Güncelle", "YourComment": "Yorumunuz", - "YourReply": "Cevabınız", - "CmsKit:Page:0001": "Girilen url ({0}) kullanımdadır." + "YourReply": "Cevabınız" } } From 25d5df54864936c8aa496cf32e80b41beb5357ba Mon Sep 17 00:00:00 2001 From: enisn Date: Thu, 4 Feb 2021 10:03:22 +0300 Subject: [PATCH 053/472] CmsKit - Add TagComponent to BlogPost page --- .../Pages/CmsKit/Blogs/BlogPost.cshtml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Blogs/BlogPost.cshtml b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Blogs/BlogPost.cshtml index cf047d525c..12aa1d4f05 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Blogs/BlogPost.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Blogs/BlogPost.cshtml @@ -8,6 +8,7 @@ @using Volo.CmsKit.GlobalFeatures @using Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.ReactionSelection @using Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.Rating +@using Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.Tags @inherits CmsKitPublicPageBase @@ -23,6 +24,15 @@ Model.BlogPostUrlSlug }) +@if (GlobalFeatureManager.Instance.IsEnabled()) +{ + @await Component.InvokeAsync(typeof(TagViewComponent), new + { + entityType = Volo.CmsKit.Blogs.BlogPostConsts.EntityType, + entityId = Model.BlogPost.Id.ToString() + }) +} + @if (GlobalFeatureManager.Instance.IsEnabled()) { @await Component.InvokeAsync(typeof(ReactionSelectionViewComponent), new From a5bf8ebe9ebbdab0ece73936408a3298fab2c957 Mon Sep 17 00:00:00 2001 From: enisn Date: Thu, 4 Feb 2021 11:24:41 +0300 Subject: [PATCH 054/472] CmsKit - Alternative way to handle pages --- .../CmsKitPublicWebModule.cs | 4 --- .../Controllers/PageController.cs | 34 +++++++++++++++++++ .../Pages/CmsKit/Pages/Index.cshtml | 13 ------- .../Pages/CmsKit/Pages/Index.cshtml.cs | 34 ------------------- .../Views/Page/Index.cshtml | 9 +++++ 5 files changed, 43 insertions(+), 51 deletions(-) create mode 100644 modules/cms-kit/src/Volo.CmsKit.Public.Web/Controllers/PageController.cs delete mode 100644 modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Pages/Index.cshtml delete mode 100644 modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Pages/Index.cshtml.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Public.Web/Views/Page/Index.cshtml diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/CmsKitPublicWebModule.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/CmsKitPublicWebModule.cs index 953102aa79..b5c7b9bb3f 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/CmsKitPublicWebModule.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/CmsKitPublicWebModule.cs @@ -61,10 +61,6 @@ namespace Volo.CmsKit.Public.Web { Configure(options => { - if (GlobalFeatureManager.Instance.IsEnabled()) - { - options.Conventions.AddPageRoute("/CmsKit/Pages/Index", @"{*pageUrl:minlength(1)}"); - } }); } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Controllers/PageController.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Controllers/PageController.cs new file mode 100644 index 0000000000..1eed5857f1 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Controllers/PageController.cs @@ -0,0 +1,34 @@ +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.ActionConstraints; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Volo.CmsKit.Public.Pages; + +namespace Volo.CmsKit.Public.Web.Controllers +{ + public class PageController : CmsKitPublicControllerBase + { + protected IPageAppService PageAppService { get; } + + public PageController(IPageAppService pageAppService) + { + PageAppService = pageAppService; + } + + [HttpGet("/{*url}", Order = int.MaxValue)] + public async Task Index(string url) + { + var page = await PageAppService.FindByUrlAsync(url); + + if (page == null) + { + return NotFound(); + } + + return View("~/Views/Page/Index.cshtml", page); + } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Pages/Index.cshtml b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Pages/Index.cshtml deleted file mode 100644 index 73c7637b01..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Pages/Index.cshtml +++ /dev/null @@ -1,13 +0,0 @@ -@page "{*pageUrl}" -@using Microsoft.AspNetCore.Mvc.Localization -@using Volo.CmsKit.Localization -@using Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.Pages -@model Volo.CmsKit.Public.Web.Pages.CmsKit.Pages.IndexModel -@inject IHtmlLocalizer L - -@await Component.InvokeAsync(typeof(DefaultPageViewComponent), - new - { - pageId = Model.Page.Id, - title = Model.Page.Title - }) \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Pages/Index.cshtml.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Pages/Index.cshtml.cs deleted file mode 100644 index 5443608845..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Pages/Index.cshtml.cs +++ /dev/null @@ -1,34 +0,0 @@ -using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc; -using Volo.CmsKit.Public.Pages; -using Volo.CmsKit.Web.Pages; - -namespace Volo.CmsKit.Public.Web.Pages.CmsKit.Pages -{ - public class IndexModel : CommonPageModel - { - [BindProperty(SupportsGet = true)] - public string PageUrl { get; set; } - - protected readonly IPageAppService PageAppService; - - public PageDto Page; - - public IndexModel(IPageAppService pageAppService) - { - PageAppService = pageAppService; - } - - public async Task OnGetAsync() - { - Page = await PageAppService.FindByUrlAsync(PageUrl); - - if (Page == null) - { - return NotFound(); - } - - return Page(); - } - } -} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Views/Page/Index.cshtml b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Views/Page/Index.cshtml new file mode 100644 index 0000000000..de094041e4 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Views/Page/Index.cshtml @@ -0,0 +1,9 @@ +@model Volo.CmsKit.Public.Pages.PageDto + +@using Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.Pages + +@await Component.InvokeAsync(typeof(DefaultPageViewComponent), new +{ + pageId = Model.Id, + title = Model.Title +}) \ No newline at end of file From ef3204c8bc026aa318c95347815f0be81e3ffdae Mon Sep 17 00:00:00 2001 From: enisn Date: Thu, 4 Feb 2021 11:31:38 +0300 Subject: [PATCH 055/472] CmsKit - Method name fix for PageController --- .../src/Volo.CmsKit.Public.Web/Controllers/PageController.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Controllers/PageController.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Controllers/PageController.cs index 1eed5857f1..a2124cbaff 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Controllers/PageController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Controllers/PageController.cs @@ -19,7 +19,7 @@ namespace Volo.CmsKit.Public.Web.Controllers } [HttpGet("/{*url}", Order = int.MaxValue)] - public async Task Index(string url) + public async Task IndexAsync(string url) { var page = await PageAppService.FindByUrlAsync(url); From 9c742d7eac6f9aceccce51888e426c3f6182e375 Mon Sep 17 00:00:00 2001 From: enisn Date: Thu, 4 Feb 2021 14:54:08 +0300 Subject: [PATCH 056/472] CmsKit - BlogPost Tagging --- .../Volo/CmsKit/Admin/Tags/EntityTagSetDto.cs | 15 +++++++ .../Admin/Tags/IEntityTagAdminAppService.cs | 2 + .../Admin/CmsKitAdminApplicationModule.cs | 30 +++++++++++++ .../Admin/Tags/EntityTagAdminAppService.cs | 39 ++++++++++++++--- .../Admin/Tags/EntityTagAdminController.cs | 42 +++++++++++++++++++ .../Volo/CmsKit}/Tags/ITagAppService.cs | 2 +- .../Volo/CmsKit}/Tags/TagAppService.cs | 2 +- .../CmsKit/Localization/Resources/en.json | 3 +- .../CmsKit/Localization/Resources/tr.json | 3 +- .../Volo/CmsKit/Tags/IEntityTagRepository.cs | 2 + .../CmsKit/Tags/EfCoreEntityTagRepository.cs | 10 +++++ .../MongoDB/Tags/MongoEntityTagRepository.cs | 9 ++++ .../Pages/CmsKit/Blogs/BlogPost.cshtml | 2 +- .../Pages/CmsKit/Blogs/Index.cshtml | 4 +- .../Properties/launchSettings.json | 27 ++++++++++++ .../Tags/TagPublicAppService_Tests.cs | 2 +- .../Tags/EntityTagRepository_Test.cs | 14 +++++++ .../MongoDB/Tags/EntityTagRepository_Test.cs | 16 +++++++ .../Tags/EntityTagRepository_Test.cs | 38 +++++++++++++++++ 19 files changed, 249 insertions(+), 13 deletions(-) create mode 100644 modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Tags/EntityTagSetDto.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Tags/EntityTagAdminController.cs rename modules/cms-kit/src/{Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public => Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit}/Tags/ITagAppService.cs (89%) rename modules/cms-kit/src/{Volo.CmsKit.Public.Application/Volo/CmsKit/Public => Volo.CmsKit.Common.Application/Volo/CmsKit}/Tags/TagAppService.cs (95%) create mode 100644 modules/cms-kit/src/Volo.CmsKit.Public.Web/Properties/launchSettings.json create mode 100644 modules/cms-kit/test/Volo.CmsKit.EntityFrameworkCore.Tests/EntityFrameworkCore/Tags/EntityTagRepository_Test.cs create mode 100644 modules/cms-kit/test/Volo.CmsKit.MongoDB.Tests/MongoDB/Tags/EntityTagRepository_Test.cs create mode 100644 modules/cms-kit/test/Volo.CmsKit.TestBase/Tags/EntityTagRepository_Test.cs diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Tags/EntityTagSetDto.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Tags/EntityTagSetDto.cs new file mode 100644 index 0000000000..d80c1aa62a --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Tags/EntityTagSetDto.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Volo.CmsKit.Admin.Tags +{ + public class EntityTagSetDto + { + public string EntityId { get; set; } + public string EntityType { get; set; } + public List Tags { get; set; } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Tags/IEntityTagAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Tags/IEntityTagAdminAppService.cs index aece4d5c00..a6660a324f 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Tags/IEntityTagAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Tags/IEntityTagAdminAppService.cs @@ -7,5 +7,7 @@ namespace Volo.CmsKit.Admin.Tags Task AddTagToEntityAsync(EntityTagCreateDto input); Task RemoveTagFromEntityAsync(EntityTagRemoveDto input); + + Task SetEntityTagsAsync(EntityTagSetDto input); } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/CmsKitAdminApplicationModule.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/CmsKitAdminApplicationModule.cs index b34e918058..2ad96af963 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/CmsKitAdminApplicationModule.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/CmsKitAdminApplicationModule.cs @@ -1,6 +1,14 @@ using Microsoft.Extensions.DependencyInjection; +using System.Collections.Generic; using Volo.Abp.AutoMapper; +using Volo.Abp.GlobalFeatures; +using Volo.Abp.Localization; using Volo.Abp.Modularity; +using Volo.CmsKit.Blogs; +using Volo.CmsKit.GlobalFeatures; +using Volo.CmsKit.Localization; +using Volo.CmsKit.Permissions; +using Volo.CmsKit.Tags; namespace Volo.CmsKit.Admin { @@ -11,6 +19,11 @@ namespace Volo.CmsKit.Admin )] public class CmsKitAdminApplicationModule : AbpModule { + public override void PreConfigureServices(ServiceConfigurationContext context) + { + ConfigureTagOptions(); + } + public override void ConfigureServices(ServiceConfigurationContext context) { context.Services.AddAutoMapperObjectMapper(); @@ -20,5 +33,22 @@ namespace Volo.CmsKit.Admin options.AddMaps(validate: true); }); } + + private void ConfigureTagOptions() + { + Configure(opts => + { + if (GlobalFeatureManager.Instance.IsEnabled()) + { + opts.EntityTypes.AddIfNotContains( + new TagEntityTypeDefiniton( + BlogPostConsts.EntityType, + LocalizableString.Create("BlogPost"), + CmsKitAdminPermissions.BlogPosts.Update, + CmsKitAdminPermissions.BlogPosts.Update, + CmsKitAdminPermissions.BlogPosts.Update)); + } + }); + } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Tags/EntityTagAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Tags/EntityTagAdminAppService.cs index 1ef6a8bdf9..b36ffedbd2 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Tags/EntityTagAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Tags/EntityTagAdminAppService.cs @@ -1,24 +1,32 @@ using System; +using System.Collections.Generic; +using System.Linq; using System.Threading.Tasks; using Volo.CmsKit.Admin.Tags; using Volo.CmsKit.Tags; -namespace Volo.CmsKit.Admin.Application.Volo.CmsKit.Admin.Tags +namespace Volo.CmsKit.Admin.Tags { public class EntityTagAdminAppService : CmsKitAdminAppServiceBase, IEntityTagAdminAppService { - protected ITagDefinitionStore _tagDefinitionStore; - protected IEntityTagManager _entityTagManager; - protected ITagManager _tagManager; + protected readonly ITagDefinitionStore _tagDefinitionStore; + protected readonly IEntityTagManager _entityTagManager; + protected readonly ITagManager _tagManager; + protected readonly ITagRepository _tagRepository; + protected readonly IEntityTagRepository _entityTagRepository; public EntityTagAdminAppService( ITagDefinitionStore tagDefinitionStore, IEntityTagManager entityTagManager, - ITagManager tagManager) + ITagManager tagManager, + ITagRepository tagRepository, + IEntityTagRepository entityTagRepository) { _tagDefinitionStore = tagDefinitionStore; _entityTagManager = entityTagManager; _tagManager = tagManager; + _tagRepository = tagRepository; + _entityTagRepository = entityTagRepository; } public async Task AddTagToEntityAsync(EntityTagCreateDto input) @@ -48,5 +56,26 @@ namespace Volo.CmsKit.Admin.Application.Volo.CmsKit.Admin.Tags input.EntityId, CurrentTenant?.Id); } + + public async Task SetEntityTagsAsync(EntityTagSetDto input) + { + var definition = await _tagDefinitionStore.GetTagEntityTypeDefinitionsAsync(input.EntityType); + + await CheckPolicyAsync(definition.UpdatePolicy); + + var existingTags = await _tagRepository.GetAllRelatedTagsAsync(input.EntityType, input.EntityId, CurrentTenant?.Id); + + var deletedTags = existingTags.Where(x => !input.Tags.Contains(x.Name)).ToList(); + var addedTags = input.Tags.Where(x => !existingTags.Any(a => a.Name == x)); + + await _entityTagRepository.DeleteManyAsync(deletedTags.Select(s => s.Id).ToArray()); + + foreach (var addedTag in addedTags) + { + var tag = await _tagManager.GetOrAddAsync(input.EntityType, addedTag, CurrentTenant?.Id); + + await _entityTagManager.AddTagToEntityAsync(tag.Id, input.EntityType, input.EntityId, CurrentTenant?.Id); + } + } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Tags/EntityTagAdminController.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Tags/EntityTagAdminController.cs new file mode 100644 index 0000000000..532fae8554 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Tags/EntityTagAdminController.cs @@ -0,0 +1,42 @@ +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using System.Threading.Tasks; +using Volo.Abp; +using Volo.Abp.GlobalFeatures; +using Volo.CmsKit.GlobalFeatures; +using Volo.CmsKit.Permissions; + +namespace Volo.CmsKit.Admin.Tags +{ + [RequiresGlobalFeature(typeof(TagsFeature))] + [RemoteService(Name = CmsKitCommonRemoteServiceConsts.RemoteServiceName)] + [Area("cms-kit")] + [Route("api/cms-kit-admin/entity-tags")] + public class EntityTagAdminController : CmsKitAdminController, IEntityTagAdminAppService + { + protected IEntityTagAdminAppService EntityTagAdminAppService { get; } + + public EntityTagAdminController(IEntityTagAdminAppService entityTagAdminAppService) + { + EntityTagAdminAppService = entityTagAdminAppService; + } + + [HttpPost] + public Task AddTagToEntityAsync(EntityTagCreateDto input) + { + return EntityTagAdminAppService.AddTagToEntityAsync(input); + } + + [HttpDelete] + public Task RemoveTagFromEntityAsync(EntityTagRemoveDto input) + { + return EntityTagAdminAppService.RemoveTagFromEntityAsync(input); + } + + [HttpPut] + public Task SetEntityTagsAsync(EntityTagSetDto input) + { + return EntityTagAdminAppService.SetEntityTagsAsync(input); + } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Tags/ITagAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Tags/ITagAppService.cs similarity index 89% rename from modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Tags/ITagAppService.cs rename to modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Tags/ITagAppService.cs index 34d54b9006..5ab01940e1 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Tags/ITagAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Tags/ITagAppService.cs @@ -3,7 +3,7 @@ using System.Threading.Tasks; using Volo.Abp.Application.Services; using Volo.CmsKit.Tags; -namespace Volo.CmsKit.Public.Tags +namespace Volo.CmsKit.Tags { public interface ITagAppService : IApplicationService { diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Tags/TagAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Tags/TagAppService.cs similarity index 95% rename from modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Tags/TagAppService.cs rename to modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Tags/TagAppService.cs index 593f011b02..caa6dc4181 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Tags/TagAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Tags/TagAppService.cs @@ -5,7 +5,7 @@ using System.Text; using System.Threading.Tasks; using Volo.CmsKit.Tags; -namespace Volo.CmsKit.Public.Tags +namespace Volo.CmsKit.Tags { public class TagAppService : CmsKitAppServiceBase, ITagAppService { 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 f59a5c981b..f0cfbc3f63 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 @@ -4,11 +4,11 @@ "CmsKit:0002": "Content already exists!", "CmsKit:0003": "The entity {0} is not taggable.", "CmsKit:Page:0001": "The given url ({0}) already exists.", + "CmsKit:Tag:0002": "The entity is not taggable!", "CommentAuthorizationExceptionMessage": "Those comments are not allowed for public display.", "Comments": "Comments", "Delete": "Delete", "Edit": "Edit", - "Read": "Read", "LastModification": "Last Modification", "LoginToAddComment": "Login to add comment", "LoginToRate": "Login to rate", @@ -30,6 +30,7 @@ "Permission:TagManagement.Update": "Update", "PickYourReaction": "Pick your reaction", "RatingUndoMessage": "Your rating will be undo.", + "Read": "Read", "Reply": "Reply", "Send": "Send", "Star": "Star", 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 77fe348ad6..cbe3c89182 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 @@ -4,11 +4,11 @@ "CmsKit:0002": "İçerik zaten mevcut!", "CmsKit:0003": "{0} ögesi etiketlenebilir değil.", "CmsKit:Page:0001": "Girilen url ({0}) kullanımdadır.", + "CmsKit:Tag:0002": "Bu öge etiketlenebilir değil.", "CommentAuthorizationExceptionMessage": "Bu yorumları görebilmek için yetki gerekir.", "Comments": "Yorumlar", "Delete": "Sil", "Edit": "Düzenle", - "Read": "Oku", "LastModification": "Son Güncellenme", "LoginToAddComment": "Yorum yapmak için giriş yap", "LoginToRate": "Oylamak için giriş yapın", @@ -26,6 +26,7 @@ "Permission:TagManagement.Update": "Etiket Güncelleme", "PickYourReaction": "Tepkinizi seçin", "RatingUndoMessage": "Oylamanız geri alınacak.", + "Read": "Oku", "Reply": "Cevapla", "Send": "Gönder", "Star": "Yıldız", diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/IEntityTagRepository.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/IEntityTagRepository.cs index f2ed160671..6ea4f009a2 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/IEntityTagRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/IEntityTagRepository.cs @@ -13,5 +13,7 @@ namespace Volo.CmsKit.Tags [NotNull] string entityId, [CanBeNull] Guid? tenantId, CancellationToken cancellationToken = default); + + Task DeleteManyAsync(Guid[] tagIds, CancellationToken cancellationToken = default); } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Tags/EfCoreEntityTagRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Tags/EfCoreEntityTagRepository.cs index a82fb7005a..f1d0119885 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Tags/EfCoreEntityTagRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Tags/EfCoreEntityTagRepository.cs @@ -1,5 +1,8 @@ using JetBrains.Annotations; +using Nito.Disposables; using System; +using System.Linq; +using System.Linq.Dynamic.Core; using System.Threading; using System.Threading.Tasks; using Volo.Abp.Domain.Repositories.EntityFrameworkCore; @@ -14,6 +17,13 @@ namespace Volo.CmsKit.Tags { } + public async Task DeleteManyAsync(Guid[] tagIds, CancellationToken cancellationToken = default) + { + var dbSet = await GetDbSetAsync(); + + dbSet.RemoveRange(dbSet.Where(x => tagIds.Contains(x.TagId))); + } + public Task FindAsync( [NotNull] Guid tagId, [NotNull] string entityId, diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Tags/MongoEntityTagRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Tags/MongoEntityTagRepository.cs index 3f9e1814fc..c073f8206f 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Tags/MongoEntityTagRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Tags/MongoEntityTagRepository.cs @@ -1,5 +1,7 @@ using JetBrains.Annotations; +using MongoDB.Driver; using System; +using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using Volo.Abp.Domain.Repositories.MongoDB; @@ -14,6 +16,13 @@ namespace Volo.CmsKit.MongoDB.Tags { } + public async Task DeleteManyAsync(Guid[] tagIds, CancellationToken cancellationToken = default) + { + var collection = await GetCollectionAsync(); + + await collection.DeleteManyAsync(Builders.Filter.In(x => x.TagId, tagIds)); + } + public Task FindAsync( [NotNull] Guid tagId, [NotNull] string entityId, diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Blogs/BlogPost.cshtml b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Blogs/BlogPost.cshtml index 12aa1d4f05..e03bf06991 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Blogs/BlogPost.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Blogs/BlogPost.cshtml @@ -1,4 +1,4 @@ -@page "/b/{blogUrlSlug}/{blogPostUrlSlug}" +@page "/blogs/{blogUrlSlug}/{blogPostUrlSlug}" @using Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.Blogs.BlogPost @using Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.Blogs.BlogPostComment diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Blogs/Index.cshtml b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Blogs/Index.cshtml index 06a20650c7..bd683fbc85 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Blogs/Index.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Blogs/Index.cshtml @@ -1,4 +1,4 @@ -@page "/b/{blogUrlSlug}" +@page "/blogs/{blogUrlSlug}" @using Volo.CmsKit.Public.Web.Pages @@ -24,7 +24,7 @@ @blog.ShortDescription - + diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Properties/launchSettings.json b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Properties/launchSettings.json new file mode 100644 index 0000000000..60e2c66615 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Properties/launchSettings.json @@ -0,0 +1,27 @@ +{ + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:60873/", + "sslPort": 44300 + } + }, + "profiles": { + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "Volo.CmsKit.Public.Web": { + "commandName": "Project", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + }, + "applicationUrl": "https://localhost:5001;http://localhost:5000" + } + } +} \ No newline at end of file diff --git a/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Tags/TagPublicAppService_Tests.cs b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Tags/TagPublicAppService_Tests.cs index 50eefd186b..26a7454a2b 100644 --- a/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Tags/TagPublicAppService_Tests.cs +++ b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Tags/TagPublicAppService_Tests.cs @@ -3,7 +3,7 @@ using NSubstitute; using Shouldly; using System.Threading.Tasks; using Volo.Abp.Users; -using Volo.CmsKit.Public.Tags; +using Volo.CmsKit.Tags; using Xunit; namespace Volo.CmsKit.Tags diff --git a/modules/cms-kit/test/Volo.CmsKit.EntityFrameworkCore.Tests/EntityFrameworkCore/Tags/EntityTagRepository_Test.cs b/modules/cms-kit/test/Volo.CmsKit.EntityFrameworkCore.Tests/EntityFrameworkCore/Tags/EntityTagRepository_Test.cs new file mode 100644 index 0000000000..01464f46e8 --- /dev/null +++ b/modules/cms-kit/test/Volo.CmsKit.EntityFrameworkCore.Tests/EntityFrameworkCore/Tags/EntityTagRepository_Test.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Volo.CmsKit.Tags; + +namespace Volo.CmsKit.EntityFrameworkCore.Tags +{ + public class EntityTagRepository_Test : EntityTagRepository_Test + { + + } +} diff --git a/modules/cms-kit/test/Volo.CmsKit.MongoDB.Tests/MongoDB/Tags/EntityTagRepository_Test.cs b/modules/cms-kit/test/Volo.CmsKit.MongoDB.Tests/MongoDB/Tags/EntityTagRepository_Test.cs new file mode 100644 index 0000000000..919455b109 --- /dev/null +++ b/modules/cms-kit/test/Volo.CmsKit.MongoDB.Tests/MongoDB/Tags/EntityTagRepository_Test.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Volo.CmsKit.Tags; +using Xunit; + +namespace Volo.CmsKit.MongoDB.Tags +{ + [Collection(MongoTestCollection.Name)] + public class EntityTagRepository_Test : EntityTagRepository_Test + { + + } +} diff --git a/modules/cms-kit/test/Volo.CmsKit.TestBase/Tags/EntityTagRepository_Test.cs b/modules/cms-kit/test/Volo.CmsKit.TestBase/Tags/EntityTagRepository_Test.cs new file mode 100644 index 0000000000..3d60ac0b6a --- /dev/null +++ b/modules/cms-kit/test/Volo.CmsKit.TestBase/Tags/EntityTagRepository_Test.cs @@ -0,0 +1,38 @@ +using Shouldly; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Volo.Abp.Modularity; +using Xunit; + +namespace Volo.CmsKit.Tags +{ + public abstract class EntityTagRepository_Test : CmsKitTestBase + where TStartupModule : IAbpModule + { + private CmsKitTestData _cmsKitTestData; + private IEntityTagRepository _entityTagRepository; + private ITagRepository _tagRepository; + + public EntityTagRepository_Test() + { + _cmsKitTestData = GetRequiredService(); + _entityTagRepository = GetRequiredService(); + _tagRepository = GetRequiredService(); + } + + [Fact] + public async Task DeleteManyAsync_ShouldWorkProperly_WithExistingIds() + { + var relatedTags = await _tagRepository.GetAllRelatedTagsAsync(_cmsKitTestData.Content_1_EntityType, _cmsKitTestData.Content_1_EntityId); + + await _entityTagRepository.DeleteManyAsync(relatedTags.Select(s => s.Id).ToArray()); + + relatedTags = await _tagRepository.GetAllRelatedTagsAsync(_cmsKitTestData.Content_1_EntityType, _cmsKitTestData.Content_1_EntityId); + + relatedTags.ShouldBeEmpty(); + } + } +} From b22ad8e2a199958f6b5834aff90263b81a576c47 Mon Sep 17 00:00:00 2001 From: enisn Date: Thu, 4 Feb 2021 14:57:16 +0300 Subject: [PATCH 057/472] CmsKit - Remove unnecessary lines in .csproj --- .../Volo.CmsKit.Application.Tests.csproj | 4 ---- 1 file changed, 4 deletions(-) diff --git a/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Volo.CmsKit.Application.Tests.csproj b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Volo.CmsKit.Application.Tests.csproj index bd5f553367..3fac76bfd9 100644 --- a/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Volo.CmsKit.Application.Tests.csproj +++ b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Volo.CmsKit.Application.Tests.csproj @@ -5,10 +5,6 @@ Volo.CmsKit - - - - From 3b5115392603cdeee91d70e7b288cd2d3e380f67 Mon Sep 17 00:00:00 2001 From: Ahmet Date: Thu, 4 Feb 2021 16:17:30 +0300 Subject: [PATCH 058/472] Added validations to author create & edit modals --- docs/en/Tutorials/Part-9.md | 176 +++++++++++++++++++++++------------- 1 file changed, 114 insertions(+), 62 deletions(-) diff --git a/docs/en/Tutorials/Part-9.md b/docs/en/Tutorials/Part-9.md index a1b4b03e21..d416052260 100644 --- a/docs/en/Tutorials/Part-9.md +++ b/docs/en/Tutorials/Part-9.md @@ -843,8 +843,10 @@ Create a new Razor Component Page, `/Pages/Authors.razor`, in the `Acme.BookStor ````xml @page "/authors" @using Acme.BookStore.Authors +@using Acme.BookStore.Localization @inherits BookStoreComponentBase @inject IAuthorAppService AuthorAppService +@inject AbpBlazorMessageLocalizerHelper LH @@ -917,68 +919,104 @@ Create a new Razor Component Page, `/Pages/Authors.razor`, in the `Acme.BookStor - - @L["NewAuthor"] - - - - - @L["Name"] - - - - @L["BirthDate"] - - - - @L["ShortBio"] - - - - - - - +
+ + @L["NewAuthor"] + + + + + + + @L["Name"] + + + + + + + + + @L["BirthDate"] + + + + + @L["ShortBio"] + + + + + + + + + + + + + +
- - @EditingAuthor.Name - - - - - @L["Name"] - - - - @L["BirthDate"] - - - - @L["ShortBio"] - - - - - - - +
+ + @EditingAuthor.Name + + + + + + + @L["Name"] + + + + + + + + + @L["BirthDate"] + + + + + @L["ShortBio"] + + + + + + + + + + + + + +
```` @@ -1025,6 +1063,10 @@ namespace Acme.BookStore.Blazor.Pages private Modal CreateAuthorModal { get; set; } private Modal EditAuthorModal { get; set; } + private Validations CreateValidationsRef; + + private Validations EditValidationsRef; + public Authors() { NewAuthor = new CreateAuthorDto(); @@ -1079,6 +1121,8 @@ namespace Acme.BookStore.Blazor.Pages private void OpenCreateAuthorModal() { + CreateValidationsRef?.ClearAll(); + NewAuthor = new CreateAuthorDto(); CreateAuthorModal.Show(); } @@ -1090,6 +1134,8 @@ namespace Acme.BookStore.Blazor.Pages private void OpenEditAuthorModal(AuthorDto author) { + EditValidationsRef?.ClearAll(); + EditingAuthorId = author.Id; EditingAuthor = ObjectMapper.Map(author); EditAuthorModal.Show(); @@ -1114,16 +1160,22 @@ namespace Acme.BookStore.Blazor.Pages private async Task CreateAuthorAsync() { - await AuthorAppService.CreateAsync(NewAuthor); - await GetAuthorsAsync(); - CreateAuthorModal.Hide(); + if (CreateValidationsRef?.ValidateAll() ?? true) + { + await AuthorAppService.CreateAsync(NewAuthor); + await GetAuthorsAsync(); + CreateAuthorModal.Hide(); + } } private async Task UpdateAuthorAsync() { - await AuthorAppService.UpdateAsync(EditingAuthorId, EditingAuthor); - await GetAuthorsAsync(); - EditAuthorModal.Hide(); + if (EditValidationsRef?.ValidateAll() ?? true) + { + await AuthorAppService.UpdateAsync(EditingAuthorId, EditingAuthor); + await GetAuthorsAsync(); + EditAuthorModal.Hide(); + } } } } From 050cf07cfd27b77cd788498ec64789641ab6a6b5 Mon Sep 17 00:00:00 2001 From: enisn Date: Fri, 5 Feb 2021 12:40:14 +0300 Subject: [PATCH 059/472] CmsKit - Use Async method instead of AsyncExecuter in MongoBlogPostRepository --- .../Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) 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 bcd6e33211..5c20165d11 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 @@ -1,4 +1,5 @@ using MongoDB.Driver; +using MongoDB.Driver.Linq; using Nito.AsyncEx; using System; using System.Collections.Generic; @@ -58,9 +59,9 @@ namespace Volo.CmsKit.MongoDB.Blogs public async Task SlugExistsAsync(Guid blogId, string slug, CancellationToken cancellationToken = default) { - var queryable = await GetQueryableAsync(); + var queryable = await GetMongoQueryableAsync(); - return await AsyncExecuter.AnyAsync(queryable, x => x.BlogId == blogId && x.UrlSlug.ToLower() == slug, cancellationToken); + return await queryable.AnyAsync(x => x.BlogId == blogId && x.UrlSlug.ToLower() == slug, cancellationToken); } } } From 8429f4366027d092a5f1d33fde58ac70b8cac326 Mon Sep 17 00:00:00 2001 From: enisn Date: Fri, 5 Feb 2021 12:40:49 +0300 Subject: [PATCH 060/472] CmsKit - Fix content-type of BlogPost Cover Image --- .../Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 b71f731efd..e2c2f523b1 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 @@ -68,7 +68,7 @@ namespace Volo.CmsKit.Admin.Blogs Response.Headers.Add("Content-Disposition", $"inline;filename=\"{id}\""); Response.Headers.Add("Accept-Ranges", "bytes"); Response.Headers.Add("Cache-Control", "max-age=120"); - Response.ContentType = "image/*"; + Response.ContentType = "image"; return BlogPostAdminAppService.GetCoverImageAsync(id); } From 0831fa9c5d2c5655e7a7d7b700a30f0ca88507f4 Mon Sep 17 00:00:00 2001 From: enisn Date: Fri, 5 Feb 2021 13:14:27 +0300 Subject: [PATCH 061/472] CmsKit - Fix Public BlogPost Controller --- .../Public/Blogs/IBlogPostPublicAppService.cs | 6 ++- .../Public/Blogs/BlogPostPublicAppService.cs | 11 +++++ .../Public/Blogs/BlogPostPublicController.cs | 49 +++++++++++++++++++ 3 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs 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 6771ae6adf..e6c5af3376 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,6 +1,8 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.Threading.Tasks; using Volo.Abp.Application.Dtos; +using Volo.Abp.Content; namespace Volo.CmsKit.Public.Blogs { @@ -9,5 +11,7 @@ namespace Volo.CmsKit.Public.Blogs Task> GetListAsync(string blogUrlSlug, PagedAndSortedResultRequestDto input); Task GetAsync(string blogUrlSlug, string blogPostUrlSlug); + + Task GetCoverImageAsync(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 d9bb9ab281..a6eaa6e96d 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 @@ -2,6 +2,8 @@ using System.Collections.Generic; using System.Threading.Tasks; using Volo.Abp.Application.Dtos; +using Volo.Abp.BlobStoring; +using Volo.Abp.Content; using Volo.CmsKit.Blogs; namespace Volo.CmsKit.Public.Blogs @@ -10,6 +12,8 @@ namespace Volo.CmsKit.Public.Blogs { protected IBlogRepository BlogRepository { get; } + protected IBlobContainer BlobContainer { get; } + protected IBlogPostRepository BlogPostRepository { get; } public BlogPostPublicAppService( @@ -39,5 +43,12 @@ namespace Volo.CmsKit.Public.Blogs await BlogPostRepository.GetCountAsync(blog.Id), ObjectMapper.Map, List>(blogPosts)); } + + public async Task GetCoverImageAsync(Guid id) + { + var stream = await BlobContainer.GetAsync(id.ToString()); + + return new RemoteStreamContent(stream); + } } } 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 new file mode 100644 index 0000000000..c5dc7246ce --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs @@ -0,0 +1,49 @@ +using Microsoft.AspNetCore.Mvc; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Volo.Abp; +using Volo.Abp.Application.Dtos; +using Volo.Abp.Content; +using Volo.CmsKit.Public.Blogs; + +namespace Volo.CmsKit.Public.HttpApi.Volo.CmsKit.Public.Blogs +{ + [RemoteService(Name = CmsKitPublicRemoteServiceConsts.RemoteServiceName)] + [Area("cms-kit")] + [Route("api/cms-kit-public/blog-posts")] + public class BlogPostPublicController : CmsKitPublicControllerBase, IBlogPostPublicAppService + { + protected IBlogPostPublicAppService BlogPostPublicAppService { get; } + + public BlogPostPublicController(IBlogPostPublicAppService blogPostPublicAppService) + { + BlogPostPublicAppService = blogPostPublicAppService; + } + + [HttpGet] + public Task GetAsync(string blogUrlSlug, string blogPostUrlSlug) + { + return BlogPostPublicAppService.GetAsync(blogUrlSlug, blogPostUrlSlug); + } + + [HttpGet] + [Route("{id}/cover-image")] + public Task GetCoverImageAsync(Guid id) + { + Response.Headers.Add("Content-Disposition", $"inline;filename=\"{id}\""); + Response.Headers.Add("Accept-Ranges", "bytes"); + Response.Headers.Add("Cache-Control", "max-age=120"); + Response.ContentType = "image"; + return BlogPostPublicAppService.GetCoverImageAsync(id); + } + + [HttpGet] + public Task> GetListAsync(string blogUrlSlug, PagedAndSortedResultRequestDto input) + { + return BlogPostPublicAppService.GetListAsync(blogUrlSlug, input); + } + } +} From f356f1cf7b94f4ed3024719744ccbc6aff124681 Mon Sep 17 00:00:00 2001 From: enisn Date: Fri, 5 Feb 2021 13:42:58 +0300 Subject: [PATCH 062/472] CmsKit - Refactor BlogPostPublicController --- .../Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) 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 c5dc7246ce..091efcf183 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 @@ -7,10 +7,13 @@ 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.Public.Blogs; -namespace Volo.CmsKit.Public.HttpApi.Volo.CmsKit.Public.Blogs +namespace Volo.CmsKit.Public.Blogs { + [RequiresGlobalFeature(typeof(BlogsFeature))] [RemoteService(Name = CmsKitPublicRemoteServiceConsts.RemoteServiceName)] [Area("cms-kit")] [Route("api/cms-kit-public/blog-posts")] @@ -37,6 +40,7 @@ namespace Volo.CmsKit.Public.HttpApi.Volo.CmsKit.Public.Blogs Response.Headers.Add("Accept-Ranges", "bytes"); Response.Headers.Add("Cache-Control", "max-age=120"); Response.ContentType = "image"; + return BlogPostPublicAppService.GetCoverImageAsync(id); } From dd00b6c2ef0ee7f5a202603d9267bb452c2ac17a Mon Sep 17 00:00:00 2001 From: enisn Date: Fri, 5 Feb 2021 13:51:22 +0300 Subject: [PATCH 063/472] CmsKit - Add images to UI --- .../src/Volo.CmsKit.Public.Web/Pages/CmsKit/Blogs/Index.cshtml | 1 + .../CmsKit/Shared/Components/Blogs/BlogPost/Default.cshtml | 2 ++ 2 files changed, 3 insertions(+) diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Blogs/Index.cshtml b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Blogs/Index.cshtml index bd683fbc85..7a3660dbf5 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Blogs/Index.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Blogs/Index.cshtml @@ -20,6 +20,7 @@ + @blog.ShortDescription diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Blogs/BlogPost/Default.cshtml b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Blogs/BlogPost/Default.cshtml index df409d6dde..ebb009448d 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Blogs/BlogPost/Default.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Blogs/BlogPost/Default.cshtml @@ -12,7 +12,9 @@ @Model.Title @@@Model.Creator?.UserName + + @await Component.InvokeAsync(typeof(ContentViewComponent), new { entityType = Volo.CmsKit.Blogs.BlogPostConsts.EntityType, From 3b179f347f78291da2309552ab1b08d97ae0a157 Mon Sep 17 00:00:00 2001 From: enisn Date: Fri, 5 Feb 2021 13:56:07 +0300 Subject: [PATCH 064/472] CmsKit - merge issues fix --- .../Volo/CmsKit/Blogs/EfCoreBlogRepository.cs | 5 ----- 1 file changed, 5 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogRepository.cs index 1f8fe1184b..677857d2b6 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogRepository.cs @@ -23,10 +23,5 @@ namespace Volo.CmsKit.Blogs { return GetAsync(x => x.UrlSlug == urlSlug); } - - public async Task ExistsAsync(Guid blogId) - { - return await (await GetQueryableAsync()).AnyAsync(x => x.Id == blogId); - } } } From 3a80beab459b23bfae7bc46704d543d0952f401b Mon Sep 17 00:00:00 2001 From: enisn Date: Fri, 5 Feb 2021 13:58:08 +0300 Subject: [PATCH 065/472] CmsKit - Fix public image displaying --- .../Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) 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 a6eaa6e96d..497aad76c3 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 @@ -12,16 +12,18 @@ namespace Volo.CmsKit.Public.Blogs { protected IBlogRepository BlogRepository { get; } - protected IBlobContainer BlobContainer { get; } - protected IBlogPostRepository BlogPostRepository { get; } + protected IBlobContainer BlobContainer { get; } + public BlogPostPublicAppService( IBlogRepository blogRepository, - IBlogPostRepository blogPostRepository) + IBlogPostRepository blogPostRepository, + IBlobContainer blobContainer) { BlogRepository = blogRepository; BlogPostRepository = blogPostRepository; + BlobContainer = blobContainer; } public async Task GetAsync(string blogUrlSlug, string blogPostUrlSlug) From 8db321aa930146917ef4c652bcdabb9b4b75a45a Mon Sep 17 00:00:00 2001 From: enisn Date: Fri, 5 Feb 2021 15:27:56 +0300 Subject: [PATCH 066/472] CmsKit - Fix merge issues --- .../Volo/CmsKit/MongoDB/Blogs/MongoBlogRepository.cs | 7 ------- 1 file changed, 7 deletions(-) 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 f36ed3a666..b1d9d3167b 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 @@ -24,12 +24,5 @@ namespace Volo.CmsKit.MongoDB.Blogs { return GetAsync(x => x.UrlSlug == urlSlug); } - - public async Task ExistsAsync(Guid blogId) - { - return await AsyncExecuter.AnyAsync( - await GetQueryableAsync(), - x => x.Id == blogId); - } } } From a83c4f470cf6d6aae911494ebc4aa762add49fc7 Mon Sep 17 00:00:00 2001 From: enisn Date: Fri, 5 Feb 2021 16:25:37 +0300 Subject: [PATCH 067/472] CmsKit - Fix updating UrlSlug Check --- .../Admin/Blogs/BlogPostAdminAppService.cs | 16 ++++++----- .../Volo/CmsKit/Blogs/BlogPost.cs | 2 +- .../Volo/CmsKit/Blogs/BlogPostManager.cs | 9 +++++-- .../Volo/CmsKit/Blogs/IBlogPostManager.cs | 2 ++ .../Blogs/BlogPostManager_Tests.cs | 27 ++++++++++++++++--- .../Volo.CmsKit.TestBase/CmsKitTestData.cs | 4 +-- 6 files changed, 46 insertions(+), 14 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 3034311d70..cb95d1fe87 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 @@ -82,16 +82,20 @@ namespace Volo.CmsKit.Admin.Blogs [Authorize(CmsKitAdminPermissions.BlogPosts.Update)] public override async Task UpdateAsync(Guid id, CreateUpdateBlogPostDto input) { - var entity = await BlogPostRepository.GetAsync(id); + var blogPost = await BlogPostRepository.GetAsync(id); - entity.SetTitle(input.Title); - entity.SetUrlSlug(input.UrlSlug); + blogPost.SetTitle(input.Title); - MapToEntity(input, entity); + if (blogPost.UrlSlug != input.UrlSlug) + { + await BlogPostManager.SetSlugUrlAsync(blogPost, input.UrlSlug); + } - await BlogPostManager.UpdateAsync(entity); + MapToEntity(input, blogPost); - return MapToGetOutputDto(entity); + await BlogPostManager.UpdateAsync(blogPost); + + return MapToGetOutputDto(blogPost); } public virtual async Task SetCoverImageAsync(Guid id, RemoteStreamContent streamContent) 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 2a9f6673f2..53f44af35d 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 @@ -44,7 +44,7 @@ namespace Volo.CmsKit.Blogs Title = Check.NotNullOrWhiteSpace(title, nameof(title), BlogPostConsts.MaxTitleLength); } - public void SetUrlSlug(string urlSlug) + internal void SetUrlSlug(string urlSlug) { Check.NotNullOrWhiteSpace(urlSlug, nameof(urlSlug), BlogPostConsts.MaxUrlSlugLength, BlogPostConsts.MinUrlSlugLength); 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 228d8eccbf..b28e705191 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 @@ -34,11 +34,16 @@ namespace Volo.CmsKit.Blogs { await CheckBlogExistenceAsync(blogPost.BlogId); - await CheckUrlSlugExistenceAsync(blogPost.BlogId, blogPost.UrlSlug); - await blogPostRepository.UpdateAsync(blogPost); } + public async Task SetSlugUrlAsync(BlogPost blogPost, string newSlug) + { + await CheckUrlSlugExistenceAsync(blogPost.BlogId, newSlug); + + blogPost.SetUrlSlug(newSlug); + } + private async Task CheckUrlSlugExistenceAsync(Guid blogId, string urlSlug) { if (await blogPostRepository.SlugExistsAsync(blogId, urlSlug)) diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostManager.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostManager.cs index eb5c0170e1..5027fa8e38 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostManager.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogPostManager.cs @@ -8,5 +8,7 @@ namespace Volo.CmsKit.Blogs Task CreateAsync(BlogPost blogPost); Task UpdateAsync(BlogPost blogPost); + + Task SetSlugUrlAsync(BlogPost blogPost, string newSlug); } } 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 a9d7aa2da7..84eddeec3c 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 @@ -54,18 +54,39 @@ namespace Volo.CmsKit.Blogs public async Task UpdateAsync_ShoudlWorkProperly_WithCorrectData() { var newTitle = "Yet Another Post"; - var newUrlSlug = "yet-another-post"; var blogPost = await blogPostRepository.GetAsync(cmsKitTestData.BlogPost_1_Id); blogPost.SetTitle(newTitle); - blogPost.SetUrlSlug(newUrlSlug); await blogPostManager.UpdateAsync(blogPost); var updated = await blogPostRepository.GetAsync(cmsKitTestData.BlogPost_1_Id); updated.Title.ShouldBe(newTitle); - updated.UrlSlug.ShouldBe(newUrlSlug); + } + + [Fact] + public async Task SetUrlSlugAsync_ShouldWorkProperly_WithNonExistingSlug() + { + var newUrlSlug = "yet-another-post"; + + var blogPost = await blogPostRepository.GetAsync(cmsKitTestData.BlogPost_1_Id); + + await blogPostManager.SetSlugUrlAsync(blogPost, newUrlSlug); + + blogPost.UrlSlug.ShouldBe(newUrlSlug); + } + + [Fact] + public async Task SetUrlSlugAsync_ShouldThrowException_WithExistingSlug() + { + var blogPost = await blogPostRepository.GetAsync(cmsKitTestData.BlogPost_1_Id); + + var exception = await Should.ThrowAsync(async () => + await blogPostManager.SetSlugUrlAsync(blogPost, cmsKitTestData.BlogPost_2_UrlSlug)); + + exception.BlogId.ShouldBe(blogPost.BlogId); + exception.UrlSlug.ShouldBe(cmsKitTestData.BlogPost_2_UrlSlug); } } } diff --git a/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitTestData.cs b/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitTestData.cs index 99682fbbfb..a212d8505d 100644 --- a/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitTestData.cs +++ b/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitTestData.cs @@ -87,8 +87,8 @@ namespace Volo.CmsKit public Guid BlogPost_2_Id { get; } = Guid.NewGuid(); - public string BlogPost_2_Title => "How to use CmsKit?"; + public string BlogPost_2_Title => "How to use CmsKit"; - public string BlogPost_2_UrlSlug => "how-to-use-cms-kit?"; + public string BlogPost_2_UrlSlug => "how-to-use-cms-kit"; } } From 4d82f418235844c3c4a53ce642eabe5d04b8ffe4 Mon Sep 17 00:00:00 2001 From: maliming Date: Sun, 7 Feb 2021 20:29:21 +0800 Subject: [PATCH 068/472] Remove AddAutofac method. Resolve #7627 --- .../ServiceCollectionExtensions.cs | 67 ------------------- 1 file changed, 67 deletions(-) delete mode 100644 framework/src/Volo.Abp.Autofac/Autofac/Extensions/DependencyInjection/ServiceCollectionExtensions.cs diff --git a/framework/src/Volo.Abp.Autofac/Autofac/Extensions/DependencyInjection/ServiceCollectionExtensions.cs b/framework/src/Volo.Abp.Autofac/Autofac/Extensions/DependencyInjection/ServiceCollectionExtensions.cs deleted file mode 100644 index 4b61ae5a6e..0000000000 --- a/framework/src/Volo.Abp.Autofac/Autofac/Extensions/DependencyInjection/ServiceCollectionExtensions.cs +++ /dev/null @@ -1,67 +0,0 @@ -// This software is part of the Autofac IoC container -// Copyright © 2017 Autofac Contributors -// http://autofac.org -// -// Permission is hereby granted, free of charge, to any person -// obtaining a copy of this software and associated documentation -// files (the "Software"), to deal in the Software without -// restriction, including without limitation the rights to use, -// copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the -// Software is furnished to do so, subject to the following -// conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -// OTHER DEALINGS IN THE SOFTWARE. - -using System; -using System.Collections.Generic; -using System.Linq; -using JetBrains.Annotations; -using Microsoft.Extensions.DependencyInjection; -using Volo.Abp; - -namespace Autofac.Extensions.DependencyInjection -{ - /// - /// Extension methods on to register the . - /// - public static class ServiceCollectionExtensions - { - /// - /// Adds the to the service collection. - /// - /// The service collection to add the factory to. - /// Action on a that adds component registrations to the container. - /// The service collection. - public static IServiceCollection AddAutofac(this IServiceCollection services, Action configurationAction = null) - { - return services - .ClearServiceProviderFactories() - .AddSingleton>(new AutofacServiceProviderFactory(configurationAction)); - } - - private static IServiceCollection ClearServiceProviderFactories([NotNull] this IServiceCollection services) - { - Check.NotNull(services, nameof(services)); - - services.RemoveAll( - service => service.ImplementationInstance? - .GetType() - .GetInterfaces() - .Any(i => i.IsGenericType && i.GetGenericTypeDefinition() == typeof(IServiceProviderFactory<>)) == true - ); - - return services; - } - } -} From 5a3d52593357a1ec04cefeb4330332e827a0c49e Mon Sep 17 00:00:00 2001 From: enisn Date: Mon, 8 Feb 2021 10:14:15 +0300 Subject: [PATCH 069/472] CmsKit - Convert plain status code to CreadAtAction method --- .../Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 e2c2f523b1..b4c411f1dc 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 @@ -101,7 +101,7 @@ namespace Volo.CmsKit.Admin.Blogs await BlogPostAdminAppService.SetCoverImageAsync(id, new RemoteStreamContent(stream)); } - return StatusCode(201); + return CreatedAtAction(nameof(GetCoverImageAsync), new { id }); } [HttpPut] From cf627f80aa99916a5722b938ca72a0a65b65af9c Mon Sep 17 00:00:00 2001 From: Ahmet Date: Mon, 8 Feb 2021 12:03:27 +0300 Subject: [PATCH 070/472] Added mediadescriptor and related domain settings --- .../Volo/CmsKit/CmsKitErrorCodes.cs | 5 +++ .../GlobalFeatures/GlobalCmsKitFeatures.cs | 3 ++ .../CmsKit/GlobalFeatures/MediasFeature.cs | 18 ++++++++ .../CmsKit/Localization/Resources/en.json | 3 +- .../Extensions/MediaDescriptorExtensions.cs | 19 +++++++++ .../Medias/IMediaDescriptorRepository.cs | 10 +++++ .../InvalidMediaDescriptorNameException.cs | 23 ++++++++++ .../Volo/CmsKit/Medias/MediaContainer.cs | 10 +++++ .../Volo/CmsKit/Medias/MediaDescriptor.cs | 42 +++++++++++++++++++ 9 files changed, 132 insertions(+), 1 deletion(-) create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/GlobalFeatures/MediasFeature.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Medias/Extensions/MediaDescriptorExtensions.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Medias/IMediaDescriptorRepository.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Medias/InvalidMediaDescriptorNameException.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Medias/MediaContainer.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Medias/MediaDescriptor.cs diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/CmsKitErrorCodes.cs b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/CmsKitErrorCodes.cs index fa31692bfe..434a162abe 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/CmsKitErrorCodes.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/CmsKitErrorCodes.cs @@ -19,5 +19,10 @@ { public const string UrlSlugAlreadyExist = "CmsKit:BlogPost:0001"; } + + public static class MediaDescriptors + { + public const string InvalidName = "CmsKit:Medias:0001"; + } } } 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 f6293fc659..08eaf7a919 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 @@ -10,6 +10,8 @@ namespace Volo.CmsKit.GlobalFeatures public ReactionsFeature Reactions => GetFeature(); public CommentsFeature Comments => GetFeature(); + + public MediasFeature Medias => GetFeature(); public RatingsFeature Ratings => GetFeature(); @@ -23,6 +25,7 @@ namespace Volo.CmsKit.GlobalFeatures : base(featureManager) { AddFeature(new ReactionsFeature(this)); + AddFeature(new MediasFeature(this)); AddFeature(new CommentsFeature(this)); AddFeature(new RatingsFeature(this)); AddFeature(new TagsFeature(this)); diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/GlobalFeatures/MediasFeature.cs b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/GlobalFeatures/MediasFeature.cs new file mode 100644 index 0000000000..b39f3a10e3 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/GlobalFeatures/MediasFeature.cs @@ -0,0 +1,18 @@ +using JetBrains.Annotations; +using Volo.Abp.GlobalFeatures; + +namespace Volo.CmsKit.GlobalFeatures +{ + [GlobalFeatureName(Name)] + public class MediasFeature : GlobalFeature + { + public const string Name = "CmsKit.Medias"; + + internal MediasFeature( + [NotNull] GlobalCmsKitFeatures cmsKit + ) : base(cmsKit) + { + + } + } +} \ 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 8b2588a12f..520664d0aa 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 @@ -40,6 +40,7 @@ "Undo": "Undo", "Update": "Update", "YourComment": "Your comment", - "YourReply": "Your reply" + "YourReply": "Your reply", + "CmsKit:Medias:0001": "'{Name}' is not a valid media name." } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Medias/Extensions/MediaDescriptorExtensions.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Medias/Extensions/MediaDescriptorExtensions.cs new file mode 100644 index 0000000000..579affbd02 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Medias/Extensions/MediaDescriptorExtensions.cs @@ -0,0 +1,19 @@ +using System.IO; +using System.Linq; + +namespace Volo.CmsKit.Medias.Extensions +{ + public static class MediaDescriptorExtensions + { + public static bool IsValidMediaFileName(this string name) + { + if (string.IsNullOrWhiteSpace(name)) + { + return false; + } + + // "con" is not valid folder/file name for Windows OS + return !(Path.GetInvalidFileNameChars().Any(name.Contains) || name == "con"); + } + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Medias/IMediaDescriptorRepository.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Medias/IMediaDescriptorRepository.cs new file mode 100644 index 0000000000..552c840897 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Medias/IMediaDescriptorRepository.cs @@ -0,0 +1,10 @@ +using System; +using Volo.Abp.Domain.Repositories; + +namespace Volo.CmsKit.Medias +{ + public interface IMediaDescriptorRepository : IBasicRepository + { + + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Medias/InvalidMediaDescriptorNameException.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Medias/InvalidMediaDescriptorNameException.cs new file mode 100644 index 0000000000..376c221cd1 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Medias/InvalidMediaDescriptorNameException.cs @@ -0,0 +1,23 @@ +using System; +using System.Runtime.Serialization; +using JetBrains.Annotations; +using Volo.Abp; + +namespace Volo.CmsKit.Medias +{ + [Serializable] + public class InvalidMediaDescriptorNameException : BusinessException + { + public InvalidMediaDescriptorNameException([NotNull] string name) + { + Code = CmsKitErrorCodes.MediaDescriptors.InvalidName; + WithData(nameof(MediaDescriptor.Name), name); + } + + public InvalidMediaDescriptorNameException(SerializationInfo serializationInfo, StreamingContext context) + : base(serializationInfo, context) + { + + } + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Medias/MediaContainer.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Medias/MediaContainer.cs new file mode 100644 index 0000000000..d1bb7a76da --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Medias/MediaContainer.cs @@ -0,0 +1,10 @@ +using Volo.Abp.BlobStoring; + +namespace Volo.CmsKit.Medias +{ + [BlobContainerName("cms-kit-medias")] + public class MediaContainer + { + + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Medias/MediaDescriptor.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Medias/MediaDescriptor.cs new file mode 100644 index 0000000000..78bc42119d --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Medias/MediaDescriptor.cs @@ -0,0 +1,42 @@ +using System; +using Volo.Abp.Domain.Entities.Auditing; +using Volo.Abp.MultiTenancy; +using Volo.CmsKit.Medias.Extensions; + +namespace Volo.CmsKit.Medias +{ + public class MediaDescriptor : FullAuditedAggregateRoot, IMultiTenant + { + public Guid? TenantId { get; protected set; } + + public string Name { get; protected set; } + + public string MimeType { get; set; } + + public int Size { get; protected set; } + + protected MediaDescriptor() + { + + } + + public MediaDescriptor(Guid id, Guid? tenantId, string name, string mimeType, int size) : base(id) + { + TenantId = tenantId; + MimeType = mimeType; + Size = size; + + SetName(name); + } + + public void SetName(string name) + { + if (!name.IsValidMediaFileName()) + { + throw new InvalidMediaDescriptorNameException(name); + } + + Name = name; + } + } +} \ No newline at end of file From 8bfdc1ed5f7c8faf1eb3965072ed2d1465c3e9a2 Mon Sep 17 00:00:00 2001 From: Ahmet Date: Mon, 8 Feb 2021 12:22:57 +0300 Subject: [PATCH 071/472] Constants added and renaming folder --- .../CmsKit/MediaDescriptors/MediaDescriptorConsts.cs | 11 +++++++++++ .../Extensions/MediaDescriptorExtensions.cs | 2 +- .../IMediaDescriptorRepository.cs | 2 +- .../InvalidMediaDescriptorNameException.cs | 2 +- .../{Medias => MediaDescriptors}/MediaContainer.cs | 2 +- .../{Medias => MediaDescriptors}/MediaDescriptor.cs | 8 +++++--- 6 files changed, 20 insertions(+), 7 deletions(-) create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/MediaDescriptors/MediaDescriptorConsts.cs rename modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/{Medias => MediaDescriptors}/Extensions/MediaDescriptorExtensions.cs (90%) rename modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/{Medias => MediaDescriptors}/IMediaDescriptorRepository.cs (80%) rename modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/{Medias => MediaDescriptors}/InvalidMediaDescriptorNameException.cs (93%) rename modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/{Medias => MediaDescriptors}/MediaContainer.cs (76%) rename modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/{Medias => MediaDescriptors}/MediaDescriptor.cs (79%) diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/MediaDescriptors/MediaDescriptorConsts.cs b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/MediaDescriptors/MediaDescriptorConsts.cs new file mode 100644 index 0000000000..5f4741828e --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/MediaDescriptors/MediaDescriptorConsts.cs @@ -0,0 +1,11 @@ +namespace Volo.CmsKit.MediaDescriptors +{ + public class MediaDescriptorConsts + { + public static int MaxNameLength { get; set; } = 255; + + public static int MaxMimeTypeLength { get; set; } = 128; + + public static int MaxSizeLength = int.MaxValue; + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Medias/Extensions/MediaDescriptorExtensions.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/MediaDescriptors/Extensions/MediaDescriptorExtensions.cs similarity index 90% rename from modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Medias/Extensions/MediaDescriptorExtensions.cs rename to modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/MediaDescriptors/Extensions/MediaDescriptorExtensions.cs index 579affbd02..a1fa903d55 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Medias/Extensions/MediaDescriptorExtensions.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/MediaDescriptors/Extensions/MediaDescriptorExtensions.cs @@ -1,7 +1,7 @@ using System.IO; using System.Linq; -namespace Volo.CmsKit.Medias.Extensions +namespace Volo.CmsKit.MediaDescriptors.Extensions { public static class MediaDescriptorExtensions { diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Medias/IMediaDescriptorRepository.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/MediaDescriptors/IMediaDescriptorRepository.cs similarity index 80% rename from modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Medias/IMediaDescriptorRepository.cs rename to modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/MediaDescriptors/IMediaDescriptorRepository.cs index 552c840897..f9f003b6c3 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Medias/IMediaDescriptorRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/MediaDescriptors/IMediaDescriptorRepository.cs @@ -1,7 +1,7 @@ using System; using Volo.Abp.Domain.Repositories; -namespace Volo.CmsKit.Medias +namespace Volo.CmsKit.MediaDescriptors { public interface IMediaDescriptorRepository : IBasicRepository { diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Medias/InvalidMediaDescriptorNameException.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/MediaDescriptors/InvalidMediaDescriptorNameException.cs similarity index 93% rename from modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Medias/InvalidMediaDescriptorNameException.cs rename to modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/MediaDescriptors/InvalidMediaDescriptorNameException.cs index 376c221cd1..0634448fa2 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Medias/InvalidMediaDescriptorNameException.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/MediaDescriptors/InvalidMediaDescriptorNameException.cs @@ -3,7 +3,7 @@ using System.Runtime.Serialization; using JetBrains.Annotations; using Volo.Abp; -namespace Volo.CmsKit.Medias +namespace Volo.CmsKit.MediaDescriptors { [Serializable] public class InvalidMediaDescriptorNameException : BusinessException diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Medias/MediaContainer.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/MediaDescriptors/MediaContainer.cs similarity index 76% rename from modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Medias/MediaContainer.cs rename to modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/MediaDescriptors/MediaContainer.cs index d1bb7a76da..bbb4a41327 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Medias/MediaContainer.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/MediaDescriptors/MediaContainer.cs @@ -1,6 +1,6 @@ using Volo.Abp.BlobStoring; -namespace Volo.CmsKit.Medias +namespace Volo.CmsKit.MediaDescriptors { [BlobContainerName("cms-kit-medias")] public class MediaContainer diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Medias/MediaDescriptor.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/MediaDescriptors/MediaDescriptor.cs similarity index 79% rename from modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Medias/MediaDescriptor.cs rename to modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/MediaDescriptors/MediaDescriptor.cs index 78bc42119d..5041e20c8a 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Medias/MediaDescriptor.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/MediaDescriptors/MediaDescriptor.cs @@ -1,9 +1,10 @@ using System; +using Volo.Abp; using Volo.Abp.Domain.Entities.Auditing; using Volo.Abp.MultiTenancy; -using Volo.CmsKit.Medias.Extensions; +using Volo.CmsKit.MediaDescriptors.Extensions; -namespace Volo.CmsKit.Medias +namespace Volo.CmsKit.MediaDescriptors { public class MediaDescriptor : FullAuditedAggregateRoot, IMultiTenant { @@ -23,7 +24,8 @@ namespace Volo.CmsKit.Medias public MediaDescriptor(Guid id, Guid? tenantId, string name, string mimeType, int size) : base(id) { TenantId = tenantId; - MimeType = mimeType; + + MimeType = Check.NotNullOrWhiteSpace(mimeType, nameof(name), MediaDescriptorConsts.MaxMimeTypeLength); Size = size; SetName(name); From 75e13d55bd4a7bc68cb01b61a887cfa1b1cc5213 Mon Sep 17 00:00:00 2001 From: Ahmet Date: Mon, 8 Feb 2021 12:30:35 +0300 Subject: [PATCH 072/472] added media descriptor repositores and orm settings --- .../EntityFrameworkCore/CmsKitDbContext.cs | 2 ++ .../CmsKitDbContextModelCreatingExtensions.cs | 19 +++++++++++++++++++ .../CmsKitEntityFrameworkCoreModule.cs | 2 ++ .../EntityFrameworkCore/ICmsKitDbContext.cs | 2 ++ .../EfCoreMediaDescriptorRepository.cs | 14 ++++++++++++++ .../CmsKit/MongoDB/CmsKitMongoDbContext.cs | 3 +++ .../MongoDB/CmsKitMongoDbContextExtensions.cs | 6 ++++++ .../CmsKit/MongoDB/CmsKitMongoDbModule.cs | 3 +++ .../CmsKit/MongoDB/ICmsKitMongoDbContext.cs | 3 +++ .../MongoMediaDescriptorRepository.cs | 14 ++++++++++++++ 10 files changed, 68 insertions(+) create mode 100644 modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/MediaDescriptors/EfCoreMediaDescriptorRepository.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/MediaDescriptors/MongoMediaDescriptorRepository.cs diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContext.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContext.cs index e7694574a9..17a5dc5c34 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContext.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContext.cs @@ -4,6 +4,7 @@ using Volo.Abp.EntityFrameworkCore; using Volo.CmsKit.Blogs; using Volo.CmsKit.Comments; using Volo.CmsKit.Contents; +using Volo.CmsKit.MediaDescriptors; using Volo.CmsKit.Pages; using Volo.CmsKit.Ratings; using Volo.CmsKit.Reactions; @@ -25,6 +26,7 @@ namespace Volo.CmsKit.EntityFrameworkCore public DbSet Pages { get; set; } public DbSet Blogs { get; set; } public DbSet BlogPosts { get; set; } + public DbSet MediaDescriptors { get; set; } public CmsKitDbContext(DbContextOptions options) : base(options) diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs index 57d1f5511c..2bd81c7755 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs @@ -14,6 +14,7 @@ using Volo.CmsKit.Pages; using Volo.CmsKit.Ratings; using Volo.CmsKit.Tags; using Volo.CmsKit.Blogs; +using Volo.CmsKit.MediaDescriptors; namespace Volo.CmsKit.EntityFrameworkCore { @@ -221,6 +222,24 @@ namespace Volo.CmsKit.EntityFrameworkCore builder.Ignore(); builder.Ignore(); } + + if (GlobalFeatureManager.Instance.IsEnabled()) + { + builder.Entity(b => + { + b.ToTable(options.TablePrefix + "MediaDescriptors", options.Schema); + + b.ConfigureByConvention(); + + b.Property(x => x.Name).IsRequired().HasMaxLength(MediaDescriptorConsts.MaxNameLength); + b.Property(x => x.MimeType).IsRequired().HasMaxLength(MediaDescriptorConsts.MaxMimeTypeLength); + b.Property(x => x.Size).HasMaxLength(MediaDescriptorConsts.MaxSizeLength); + }); + } + else + { + builder.Ignore(); + } } } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitEntityFrameworkCoreModule.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitEntityFrameworkCoreModule.cs index 61cd667aed..e67a4f2d1b 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitEntityFrameworkCoreModule.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitEntityFrameworkCoreModule.cs @@ -5,6 +5,7 @@ using Volo.Abp.Users.EntityFrameworkCore; using Volo.CmsKit.Blogs; using Volo.CmsKit.Comments; using Volo.CmsKit.Contents; +using Volo.CmsKit.MediaDescriptors; using Volo.CmsKit.Pages; using Volo.CmsKit.Ratings; using Volo.CmsKit.Reactions; @@ -34,6 +35,7 @@ namespace Volo.CmsKit.EntityFrameworkCore options.AddRepository(); options.AddRepository(); options.AddRepository(); + options.AddRepository(); }); } } 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 feb1a5aacd..42b0a5da89 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 @@ -4,6 +4,7 @@ using Volo.Abp.EntityFrameworkCore; using Volo.CmsKit.Blogs; using Volo.CmsKit.Comments; using Volo.CmsKit.Contents; +using Volo.CmsKit.MediaDescriptors; using Volo.CmsKit.Pages; using Volo.CmsKit.Ratings; using Volo.CmsKit.Reactions; @@ -25,5 +26,6 @@ namespace Volo.CmsKit.EntityFrameworkCore DbSet Pages { get; set; } DbSet Blogs { get; set; } DbSet BlogPosts { get; set; } + DbSet MediaDescriptors { get; set; } } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/MediaDescriptors/EfCoreMediaDescriptorRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/MediaDescriptors/EfCoreMediaDescriptorRepository.cs new file mode 100644 index 0000000000..083664e423 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/MediaDescriptors/EfCoreMediaDescriptorRepository.cs @@ -0,0 +1,14 @@ +using System; +using Volo.Abp.Domain.Repositories.EntityFrameworkCore; +using Volo.Abp.EntityFrameworkCore; +using Volo.CmsKit.EntityFrameworkCore; + +namespace Volo.CmsKit.MediaDescriptors +{ + public class EfCoreMediaDescriptorRepository : EfCoreRepository, IMediaDescriptorRepository + { + public EfCoreMediaDescriptorRepository(IDbContextProvider dbContextProvider) : base(dbContextProvider) + { + } + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContext.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContext.cs index b61ad967cd..a62ed224df 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContext.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContext.cs @@ -4,6 +4,7 @@ using Volo.Abp.MongoDB; using Volo.CmsKit.Comments; using Volo.CmsKit.Contents; using Volo.CmsKit.Blogs; +using Volo.CmsKit.MediaDescriptors; using Volo.CmsKit.Pages; using Volo.CmsKit.Ratings; using Volo.CmsKit.Reactions; @@ -35,6 +36,8 @@ namespace Volo.CmsKit.MongoDB public IMongoCollection Blogs => Collection(); public IMongoCollection BlogPosts => Collection(); + + public IMongoCollection MediaDescriptors => Collection(); protected override void CreateModel(IMongoModelBuilder modelBuilder) { diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContextExtensions.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContextExtensions.cs index 46eecd1077..f4e46a38fa 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContextExtensions.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContextExtensions.cs @@ -4,6 +4,7 @@ using Volo.Abp.MongoDB; using Volo.CmsKit.Comments; using Volo.CmsKit.Contents; using Volo.CmsKit.Blogs; +using Volo.CmsKit.MediaDescriptors; using Volo.CmsKit.Pages; using Volo.CmsKit.Ratings; using Volo.CmsKit.Reactions; @@ -75,6 +76,11 @@ namespace Volo.CmsKit.MongoDB { x.CollectionName = CmsKitDbProperties.DbTablePrefix + "BlogPosts"; }); + + builder.Entity(x => + { + x.CollectionName = CmsKitDbProperties.DbTablePrefix + "MediaDescriptors"; + }); } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbModule.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbModule.cs index b5ef74ac34..11e3a0eb86 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbModule.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbModule.cs @@ -5,9 +5,11 @@ using Volo.Abp.Users.MongoDB; using Volo.CmsKit.Blogs; using Volo.CmsKit.Comments; using Volo.CmsKit.Contents; +using Volo.CmsKit.MediaDescriptors; using Volo.CmsKit.MongoDB.Blogs; using Volo.CmsKit.MongoDB.Comments; using Volo.CmsKit.MongoDB.Contents; +using Volo.CmsKit.MongoDB.MediaDescriptors; using Volo.CmsKit.MongoDB.Pages; using Volo.CmsKit.MongoDB.Ratings; using Volo.CmsKit.MongoDB.Reactions; @@ -42,6 +44,7 @@ namespace Volo.CmsKit.MongoDB options.AddRepository(); options.AddRepository(); options.AddRepository(); + options.AddRepository(); }); } } diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/ICmsKitMongoDbContext.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/ICmsKitMongoDbContext.cs index cc0faf912f..f3cf7064f8 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/ICmsKitMongoDbContext.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/ICmsKitMongoDbContext.cs @@ -4,6 +4,7 @@ using Volo.Abp.MongoDB; using Volo.CmsKit.Comments; using Volo.CmsKit.Contents; using Volo.CmsKit.Blogs; +using Volo.CmsKit.MediaDescriptors; using Volo.CmsKit.Pages; using Volo.CmsKit.Ratings; using Volo.CmsKit.Reactions; @@ -35,5 +36,7 @@ namespace Volo.CmsKit.MongoDB IMongoCollection Blogs { get; } IMongoCollection BlogPosts { get; } + + IMongoCollection MediaDescriptors { get; } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/MediaDescriptors/MongoMediaDescriptorRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/MediaDescriptors/MongoMediaDescriptorRepository.cs new file mode 100644 index 0000000000..0d656eb0dd --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/MediaDescriptors/MongoMediaDescriptorRepository.cs @@ -0,0 +1,14 @@ +using System; +using Volo.Abp.Domain.Repositories.MongoDB; +using Volo.Abp.MongoDB; +using Volo.CmsKit.MediaDescriptors; + +namespace Volo.CmsKit.MongoDB.MediaDescriptors +{ + public class MongoMediaDescriptorRepository : MongoDbRepository, IMediaDescriptorRepository + { + public MongoMediaDescriptorRepository(IMongoDbContextProvider dbContextProvider) : base(dbContextProvider) + { + } + } +} \ No newline at end of file From 8db77d3567b269439cc36f56f332c2e73ad12a5e Mon Sep 17 00:00:00 2001 From: Ahmet Date: Mon, 8 Feb 2021 13:23:25 +0300 Subject: [PATCH 073/472] update media descriptor size parameter type --- .../Volo/CmsKit/MediaDescriptors/MediaDescriptor.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/MediaDescriptors/MediaDescriptor.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/MediaDescriptors/MediaDescriptor.cs index 5041e20c8a..f1b2dafa90 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/MediaDescriptors/MediaDescriptor.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/MediaDescriptors/MediaDescriptor.cs @@ -14,14 +14,14 @@ namespace Volo.CmsKit.MediaDescriptors public string MimeType { get; set; } - public int Size { get; protected set; } + public long Size { get; protected set; } protected MediaDescriptor() { } - public MediaDescriptor(Guid id, Guid? tenantId, string name, string mimeType, int size) : base(id) + public MediaDescriptor(Guid id, Guid? tenantId, string name, string mimeType, long size) : base(id) { TenantId = tenantId; From 12211458f82dbc9ddb507a5c9e4af5764850f43e Mon Sep 17 00:00:00 2001 From: Ahmet Date: Mon, 8 Feb 2021 14:13:51 +0300 Subject: [PATCH 074/472] Added admin app service --- .../MediaDescriptors/GetMediaRequestDto.cs | 7 ++ .../IMediaDescriptorAdminAppService.cs | 19 +++++ .../MediaDescriptors/MediaDescriptorDto.cs | 14 ++++ .../MediaDescriptorGetListDto.cs | 14 ++++ .../MediaDescriptorGetListInput.cs | 9 +++ .../UpdateMediaDescriptorDto.cs | 13 +++ .../UploadMediaStreamContent.cs | 23 ++++++ ...CmsKitAdminApplicationAutoMapperProfile.cs | 5 ++ .../MediaDescriptorAdminAppService.cs | 80 +++++++++++++++++++ .../MediaDescriptorAdminController.cs | 64 +++++++++++++++ 10 files changed, 248 insertions(+) create mode 100644 modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/MediaDescriptors/GetMediaRequestDto.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/MediaDescriptors/IMediaDescriptorAdminAppService.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/MediaDescriptors/MediaDescriptorDto.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/MediaDescriptors/MediaDescriptorGetListDto.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/MediaDescriptors/MediaDescriptorGetListInput.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/MediaDescriptors/UpdateMediaDescriptorDto.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/MediaDescriptors/UploadMediaStreamContent.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/MediaDescriptors/MediaDescriptorAdminAppService.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/MediaDescriptors/MediaDescriptorAdminController.cs diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/MediaDescriptors/GetMediaRequestDto.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/MediaDescriptors/GetMediaRequestDto.cs new file mode 100644 index 0000000000..1311b306bb --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/MediaDescriptors/GetMediaRequestDto.cs @@ -0,0 +1,7 @@ +namespace Volo.CmsKit.Admin.MediaDescriptors +{ + public class GetMediaRequestDto + { + public bool Download { get; set; } = false; + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/MediaDescriptors/IMediaDescriptorAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/MediaDescriptors/IMediaDescriptorAdminAppService.cs new file mode 100644 index 0000000000..2fb86ba7f5 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/MediaDescriptors/IMediaDescriptorAdminAppService.cs @@ -0,0 +1,19 @@ +using System; +using System.Threading.Tasks; +using Volo.Abp.Application.Services; +using Volo.Abp.Content; + +namespace Volo.CmsKit.Admin.MediaDescriptors +{ + public interface IMediaDescriptorAdminAppService + : ICrudAppService< + MediaDescriptorDto, + MediaDescriptorGetListDto, + Guid, + MediaDescriptorGetListInput, + UploadMediaStreamContent, + UpdateMediaDescriptorDto> + { + Task DownloadAsync(Guid id, GetMediaRequestDto request); + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/MediaDescriptors/MediaDescriptorDto.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/MediaDescriptors/MediaDescriptorDto.cs new file mode 100644 index 0000000000..d82eb63992 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/MediaDescriptors/MediaDescriptorDto.cs @@ -0,0 +1,14 @@ +using System; +using Volo.Abp.Application.Dtos; + +namespace Volo.CmsKit.Admin.MediaDescriptors +{ + public class MediaDescriptorDto : EntityDto + { + public string Name { get; set; } + + public string MimeType { get; set; } + + public int Size { get; set; } + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/MediaDescriptors/MediaDescriptorGetListDto.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/MediaDescriptors/MediaDescriptorGetListDto.cs new file mode 100644 index 0000000000..2be684d894 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/MediaDescriptors/MediaDescriptorGetListDto.cs @@ -0,0 +1,14 @@ +using System; +using Volo.Abp.Application.Dtos; + +namespace Volo.CmsKit.Admin.MediaDescriptors +{ + public class MediaDescriptorGetListDto : EntityDto + { + public string Name { get; set; } + + public string MimeType { get; set; } + + public int Size { get; set; } + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/MediaDescriptors/MediaDescriptorGetListInput.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/MediaDescriptors/MediaDescriptorGetListInput.cs new file mode 100644 index 0000000000..6d8316a749 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/MediaDescriptors/MediaDescriptorGetListInput.cs @@ -0,0 +1,9 @@ +using Volo.Abp.Application.Dtos; + +namespace Volo.CmsKit.Admin.MediaDescriptors +{ + public class MediaDescriptorGetListInput : PagedAndSortedResultRequestDto + { + + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/MediaDescriptors/UpdateMediaDescriptorDto.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/MediaDescriptors/UpdateMediaDescriptorDto.cs new file mode 100644 index 0000000000..ba3e60ba50 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/MediaDescriptors/UpdateMediaDescriptorDto.cs @@ -0,0 +1,13 @@ +using System.ComponentModel.DataAnnotations; +using Volo.Abp.Validation; +using Volo.CmsKit.MediaDescriptors; + +namespace Volo.CmsKit.Admin.MediaDescriptors +{ + public class UpdateMediaDescriptorDto + { + [Required] + [DynamicStringLength(typeof(MediaDescriptorConsts), nameof(MediaDescriptorConsts.MaxNameLength))] + public string Name { get; set; } + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/MediaDescriptors/UploadMediaStreamContent.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/MediaDescriptors/UploadMediaStreamContent.cs new file mode 100644 index 0000000000..b6dcb1323d --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/MediaDescriptors/UploadMediaStreamContent.cs @@ -0,0 +1,23 @@ +using System.ComponentModel.DataAnnotations; +using System.IO; +using Volo.Abp.Content; +using Volo.Abp.Validation; +using Volo.CmsKit.MediaDescriptors; + +namespace Volo.CmsKit.Admin.MediaDescriptors +{ + public class UploadMediaStreamContent : RemoteStreamContent + { + [Required] + [DynamicStringLength(typeof(MediaDescriptorConsts), nameof(MediaDescriptorConsts.MaxNameLength))] + public string Name { get; set; } + + [Required] + [DynamicStringLength(typeof(MediaDescriptorConsts), nameof(MediaDescriptorConsts.MaxMimeTypeLength))] + public string MimeType { get; set; } + + public UploadMediaStreamContent(Stream stream) : base(stream) + { + } + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/CmsKitAdminApplicationAutoMapperProfile.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/CmsKitAdminApplicationAutoMapperProfile.cs index 8fc2567093..7d23bbbae5 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/CmsKitAdminApplicationAutoMapperProfile.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/CmsKitAdminApplicationAutoMapperProfile.cs @@ -1,10 +1,12 @@ using AutoMapper; using Volo.CmsKit.Admin.Blogs; using Volo.CmsKit.Admin.Contents; +using Volo.CmsKit.Admin.MediaDescriptors; using Volo.CmsKit.Admin.Pages; using Volo.CmsKit.Blogs; using Volo.CmsKit.Admin.Tags; using Volo.CmsKit.Contents; +using Volo.CmsKit.MediaDescriptors; using Volo.CmsKit.Pages; using Volo.CmsKit.Tags; @@ -30,6 +32,9 @@ namespace Volo.CmsKit.Admin CreateMap(MemberList.Destination); CreateMap(MemberList.Destination); + + CreateMap(); + CreateMap(); } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/MediaDescriptors/MediaDescriptorAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/MediaDescriptors/MediaDescriptorAdminAppService.cs new file mode 100644 index 0000000000..84c8a9a993 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/MediaDescriptors/MediaDescriptorAdminAppService.cs @@ -0,0 +1,80 @@ +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Authorization; +using Volo.Abp.Application.Dtos; +using Volo.Abp.BlobStoring; +using Volo.Abp.Content; +using Volo.CmsKit.MediaDescriptors; + +namespace Volo.CmsKit.Admin.MediaDescriptors +{ + [Authorize] + public class MediaDescriptorAdminAppService : CmsKitAdminAppServiceBase, IMediaDescriptorAdminAppService + { + protected readonly IBlobContainer MediaContainer; + protected readonly IMediaDescriptorRepository MediaDescriptorRepository; + + public MediaDescriptorAdminAppService(IBlobContainer mediaContainer, IMediaDescriptorRepository mediaDescriptorRepository) + { + MediaContainer = mediaContainer; + MediaDescriptorRepository = mediaDescriptorRepository; + } + + public virtual async Task GetAsync(Guid id) + { + var entity = await MediaDescriptorRepository.GetAsync(id); + + return ObjectMapper.Map(entity); + } + + public virtual async Task> GetListAsync(MediaDescriptorGetListInput input) + { + var totalCount = await MediaDescriptorRepository.GetCountAsync(); + var entites = await MediaDescriptorRepository.GetListAsync(); + + var dtos = ObjectMapper.Map, List>(entites); + + return new PagedResultDto(totalCount, dtos); + } + + public virtual async Task CreateAsync(UploadMediaStreamContent input) + { + var newId = GuidGenerator.Create(); + var newEntity = new MediaDescriptor(newId, CurrentTenant.Id, input.Name, input.MimeType, input.ContentLength ?? 0); + + await MediaDescriptorRepository.InsertAsync(newEntity); + await MediaContainer.SaveAsync(newId.ToString(), input.GetStream()); + + return ObjectMapper.Map(newEntity); + } + + public virtual async Task UpdateAsync(Guid id, UpdateMediaDescriptorDto input) + { + var entity = await MediaDescriptorRepository.GetAsync(id); + + entity.SetName(input.Name); + + await MediaDescriptorRepository.UpdateAsync(entity); + + return ObjectMapper.Map(entity); + } + + public virtual async Task DeleteAsync(Guid id) + { + await MediaContainer.DeleteAsync(id.ToString()); + await MediaDescriptorRepository.DeleteAsync(id); + } + + public virtual async Task DownloadAsync(Guid id, GetMediaRequestDto request) + { + var entity = await MediaDescriptorRepository.GetAsync(id); + var stream = await MediaContainer.GetAsync(id.ToString()); + + return new RemoteStreamContent(stream) + { + ContentType = entity.MimeType + }; + } + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/MediaDescriptors/MediaDescriptorAdminController.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/MediaDescriptors/MediaDescriptorAdminController.cs new file mode 100644 index 0000000000..ce4325978d --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/MediaDescriptors/MediaDescriptorAdminController.cs @@ -0,0 +1,64 @@ +using System; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Volo.Abp; +using Volo.Abp.Application.Dtos; +using Volo.Abp.Content; +using Volo.Abp.GlobalFeatures; +using Volo.CmsKit.GlobalFeatures; + +namespace Volo.CmsKit.Admin.MediaDescriptors +{ + [RequiresGlobalFeature(typeof(MediasFeature))] + [RemoteService(Name = CmsKitCommonRemoteServiceConsts.RemoteServiceName)] + [Area("cms-kit")] + [Route("api/cms-kit-admin/medias")] + public class MediaDescriptorAdminController : CmsKitAdminController, IMediaDescriptorAdminAppService + { + protected readonly IMediaDescriptorAdminAppService MediaDescriptorAdminAppService; + + public MediaDescriptorAdminController(IMediaDescriptorAdminAppService mediaDescriptorAdminAppService) + { + MediaDescriptorAdminAppService = mediaDescriptorAdminAppService; + } + + [HttpGet] + [Route("{id}")] + public virtual Task GetAsync(Guid id) + { + return MediaDescriptorAdminAppService.GetAsync(id); + } + + [HttpGet] + public virtual Task> GetListAsync(MediaDescriptorGetListInput input) + { + return MediaDescriptorAdminAppService.GetListAsync(input); + } + + [HttpPost] + public virtual Task CreateAsync(UploadMediaStreamContent input) + { + return MediaDescriptorAdminAppService.CreateAsync(input); + } + + [HttpPut] + [Route("{id}")] + public virtual Task UpdateAsync(Guid id, UpdateMediaDescriptorDto input) + { + return MediaDescriptorAdminAppService.UpdateAsync(id, input); + } + + [HttpDelete] + public virtual Task DeleteAsync(Guid id) + { + return MediaDescriptorAdminAppService.DeleteAsync(id); + } + + [HttpGet] + [Route("download/{id}")] + public virtual Task DownloadAsync(Guid id, GetMediaRequestDto request) + { + return MediaDescriptorAdminAppService.DownloadAsync(id, request); + } + } +} \ No newline at end of file From 31ba40c2549eb8b2aba9ca65b22e39b5db2a7801 Mon Sep 17 00:00:00 2001 From: Ilkay Ilknur Date: Mon, 8 Feb 2021 14:14:12 +0300 Subject: [PATCH 075/472] small design changes. --- .../Volo.CmsKit.Public.Web/Pages/CmsKit/Blogs/Index.cshtml | 2 +- .../CmsKit/Shared/Components/Blogs/BlogPost/Default.cshtml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Blogs/Index.cshtml b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Blogs/Index.cshtml index 7a3660dbf5..998bfa2881 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Blogs/Index.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Blogs/Index.cshtml @@ -20,7 +20,7 @@ - + @blog.ShortDescription diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Blogs/BlogPost/Default.cshtml b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Blogs/BlogPost/Default.cshtml index ebb009448d..a6cef52512 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Blogs/BlogPost/Default.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Blogs/BlogPost/Default.cshtml @@ -10,11 +10,11 @@ @Model.Title - @@@Model.Creator?.UserName + @Model.Creator?.UserName - + @**@ @await Component.InvokeAsync(typeof(ContentViewComponent), new { entityType = Volo.CmsKit.Blogs.BlogPostConsts.EntityType, From 530dbb9506be655b0cbb3b02f58748c8e6faf2b3 Mon Sep 17 00:00:00 2001 From: enisn Date: Mon, 8 Feb 2021 15:28:01 +0300 Subject: [PATCH 076/472] CmsKit - Remove lookup from Blogs and add searching --- .../Volo/CmsKit/Admin/Blogs/BlogGetListInput.cs | 9 +++++++++ .../Volo/CmsKit/Admin/Blogs/IBlogAdminAppService.cs | 3 +-- .../Volo/CmsKit/Admin/Blogs/BlogAdminAppService.cs | 13 +++++++------ .../Volo/CmsKit/Admin/Blogs/BlogAdminController.cs | 10 +--------- 4 files changed, 18 insertions(+), 17 deletions(-) create mode 100644 modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogGetListInput.cs diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogGetListInput.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogGetListInput.cs new file mode 100644 index 0000000000..e26307c6d0 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogGetListInput.cs @@ -0,0 +1,9 @@ +using Volo.Abp.Application.Dtos; + +namespace Volo.CmsKit.Admin.Blogs +{ + public class BlogGetListInput : PagedAndSortedResultRequestDto + { + public string Filter { get; set; } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogAdminAppService.cs index b6000be499..f0485cc344 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogAdminAppService.cs @@ -5,8 +5,7 @@ using Volo.Abp.Application.Services; namespace Volo.CmsKit.Admin.Blogs { - public interface IBlogAdminAppService : ICrudAppService + public interface IBlogAdminAppService : ICrudAppService { - Task> GetLookupAsync(); } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogAdminAppService.cs index 0703bc94a4..5c833f5256 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogAdminAppService.cs @@ -14,7 +14,7 @@ namespace Volo.CmsKit.Admin.Blogs { [RequiresGlobalFeature(typeof(BlogsFeature))] [Authorize(CmsKitAdminPermissions.Blogs.Default)] - public class BlogAdminAppService : CrudAppService, IBlogAdminAppService + public class BlogAdminAppService : CrudAppService, IBlogAdminAppService { public BlogAdminAppService(IRepository repository) : base(repository) { @@ -25,12 +25,13 @@ namespace Volo.CmsKit.Admin.Blogs DeletePolicyName = CmsKitAdminPermissions.Blogs.Delete; } - [Authorize(CmsKitAdminPermissions.Blogs.Default)] - public async Task> GetLookupAsync() + protected override async Task> CreateFilteredQueryAsync(BlogGetListInput input) { - var blogs = await Repository.GetListAsync(); - - return ObjectMapper.Map, List>(blogs); + var queryable = await base.CreateFilteredQueryAsync(input); + return queryable + .WhereIf( + !input.Filter.IsNullOrWhiteSpace(), + x => x.Name.ToLower().Contains(input.Filter)); } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogAdminController.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogAdminController.cs index e6c4370df9..d63a3317ce 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogAdminController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogAdminController.cs @@ -52,7 +52,7 @@ namespace Volo.CmsKit.Admin.Blogs [HttpGet] [Authorize(CmsKitAdminPermissions.Blogs.Default)] - public Task> GetListAsync([FromQuery] PagedAndSortedResultRequestDto input) + public Task> GetListAsync([FromQuery] BlogGetListInput input) { return BlogAdminAppService.GetListAsync(input); } @@ -64,13 +64,5 @@ namespace Volo.CmsKit.Admin.Blogs { return BlogAdminAppService.UpdateAsync(id, input); } - - [HttpGet] - [Route("lookup")] - [Authorize(CmsKitAdminPermissions.Blogs.Default)] - public Task> GetLookupAsync() - { - return BlogAdminAppService.GetLookupAsync(); - } } } From bd97a9651252bdb7679e0c963aa1fdaf4986168b Mon Sep 17 00:00:00 2001 From: enisn Date: Mon, 8 Feb 2021 16:55:22 +0300 Subject: [PATCH 077/472] CmsKit - Disable Page feature temporarily --- .../cms-kit/host/Volo.CmsKit.Host.Shared/FeatureConfigurer.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/cms-kit/host/Volo.CmsKit.Host.Shared/FeatureConfigurer.cs b/modules/cms-kit/host/Volo.CmsKit.Host.Shared/FeatureConfigurer.cs index 9046c60aca..b108d08b02 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Host.Shared/FeatureConfigurer.cs +++ b/modules/cms-kit/host/Volo.CmsKit.Host.Shared/FeatureConfigurer.cs @@ -1,5 +1,6 @@ using Volo.Abp.GlobalFeatures; using Volo.Abp.Threading; +using Volo.CmsKit.GlobalFeatures; namespace Volo.CmsKit { @@ -12,6 +13,7 @@ namespace Volo.CmsKit OneTimeRunner.Run(() => { GlobalFeatureManager.Instance.Modules.CmsKit().EnableAll(); + GlobalFeatureManager.Instance.Modules.CmsKit().Disable(); }); } } From cccd47a2f9e842b02e694212ca8fe999492b7865 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Mon, 8 Feb 2021 16:56:20 +0300 Subject: [PATCH 078/472] admin.abp.io localization: IsFreeToActiveLicenseOwners --- .../AbpIoLocalization/Admin/Localization/Resources/en.json | 1 + 1 file changed, 1 insertion(+) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json index c190a91470..66c7327d88 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json @@ -35,6 +35,7 @@ "NameFilter": "Name", "CreationTime": "Creation time", "IsPro": "Is pro", + "IsFreeToActiveLicenseOwners": "Is free to active license owners", "ShowOnModuleList": "Show on module list", "EfCoreConfigureMethodName": "Configure method name", "IsProFilter": "Is pro", From 8a2100c1d5466edf719395c7f37161062b847a17 Mon Sep 17 00:00:00 2001 From: maliming Date: Mon, 8 Feb 2021 22:36:35 +0800 Subject: [PATCH 079/472] Remove setting connection string on the tenant management UI. Resolve #7655 --- .../TenantManagement/TenantManagement.razor | 43 ------------- .../TenantManagement.razor.cs | 48 +-------------- .../Tenants/ConnectionStringsModal.cshtml | 26 -------- .../Tenants/ConnectionStringsModal.cshtml.cs | 61 ------------------- .../Tenants/ConnectionStringsModal.js | 20 ------ .../Pages/TenantManagement/Tenants/Index.js | 16 ----- 6 files changed, 1 insertion(+), 213 deletions(-) delete mode 100644 modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/ConnectionStringsModal.cshtml delete mode 100644 modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/ConnectionStringsModal.cshtml.cs delete mode 100644 modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/ConnectionStringsModal.js diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor index 2a5aabfe8d..47fac0a124 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor @@ -40,10 +40,6 @@ RequiredPolicy="@UpdatePolicyName" Clicked="() => OpenEditModalAsync(context)" Text="@L["Edit"]"> - } -@* ************************* EDIT CONNECTION STRING MODAL ************************* *@ -@if (HasManageConnectionStringsPermission) -{ - - - -
- - @L["ConnectionStrings"] - - - - - - - @L["DisplayName:UseSharedDatabase"] - - - - @if (!TenantInfo.UseSharedDatabase) - { - - - @L["DisplayName:DefaultConnectionString"] - - - - } - - - - - - -
-
-
-} - @if (HasManageFeaturesPermission) { diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor.cs index 1bc3ce7cd1..46a4b7df18 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor.cs @@ -20,9 +20,6 @@ namespace Volo.Abp.TenantManagement.Blazor.Pages.TenantManagement protected FeatureManagementModal FeatureManagementModal; - protected Modal ManageConnectionStringModal; - protected Validations ManageConnectionStringValidations; - protected TenantInfoModel TenantInfo; public TenantManagement() @@ -33,8 +30,6 @@ namespace Volo.Abp.TenantManagement.Blazor.Pages.TenantManagement CreatePolicyName = TenantManagementPermissions.Tenants.Create; UpdatePolicyName = TenantManagementPermissions.Tenants.Update; DeletePolicyName = TenantManagementPermissions.Tenants.Delete; - ManageConnectionStringsPolicyName = TenantManagementPermissions.Tenants.ManageConnectionStrings; - ManageFeaturesPolicyName = TenantManagementPermissions.Tenants.ManageFeatures; TenantInfo = new TenantInfoModel(); } @@ -47,47 +42,6 @@ namespace Volo.Abp.TenantManagement.Blazor.Pages.TenantManagement HasManageFeaturesPermission = await AuthorizationService.IsGrantedAsync(ManageFeaturesPolicyName); } - protected virtual async Task OpenEditConnectionStringModalAsync(TenantDto entity) - { - ManageConnectionStringValidations.ClearAll(); - - var tenantConnectionString = await AppService.GetDefaultConnectionStringAsync(entity.Id); - - TenantInfo = new TenantInfoModel - { - Id = entity.Id, - DefaultConnectionString = tenantConnectionString, - UseSharedDatabase = tenantConnectionString.IsNullOrWhiteSpace() - }; - - ManageConnectionStringModal.Show(); - } - - protected virtual Task CloseEditConnectionStringModal() - { - ManageConnectionStringModal.Hide(); - return Task.CompletedTask; - } - - protected virtual async Task UpdateConnectionStringAsync() - { - if (ManageConnectionStringValidations.ValidateAll()) - { - await CheckPolicyAsync(ManageConnectionStringsPolicyName); - - if (TenantInfo.UseSharedDatabase || TenantInfo.DefaultConnectionString.IsNullOrWhiteSpace()) - { - await AppService.DeleteDefaultConnectionStringAsync(TenantInfo.Id); - } - else - { - await AppService.UpdateDefaultConnectionStringAsync(TenantInfo.Id, TenantInfo.DefaultConnectionString); - } - - ManageConnectionStringModal.Hide(); - } - } - protected override string GetDeleteConfirmationMessage(TenantDto entity) { return string.Format(L["TenantDeletionConfirmationMessage"], entity.Name); @@ -103,4 +57,4 @@ namespace Volo.Abp.TenantManagement.Blazor.Pages.TenantManagement [Required] public string DefaultConnectionString { get; set; } } -} \ No newline at end of file +} diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/ConnectionStringsModal.cshtml b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/ConnectionStringsModal.cshtml deleted file mode 100644 index 6b6e33ed55..0000000000 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/ConnectionStringsModal.cshtml +++ /dev/null @@ -1,26 +0,0 @@ -@page -@using Microsoft.Extensions.Localization -@using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal -@using Volo.Abp.TenantManagement.Localization -@using Volo.Abp.TenantManagement.Web.Pages.TenantManagement.Tenants -@model ConnectionStringsModal -@inject IStringLocalizer L -@{ - Layout = null; -} -
- - - - - - - -
- -
- -
- -
-
\ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/ConnectionStringsModal.cshtml.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/ConnectionStringsModal.cshtml.cs deleted file mode 100644 index 45a36060e0..0000000000 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/ConnectionStringsModal.cshtml.cs +++ /dev/null @@ -1,61 +0,0 @@ -using System; -using System.ComponentModel.DataAnnotations; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc; -using Volo.Abp.Validation; - -namespace Volo.Abp.TenantManagement.Web.Pages.TenantManagement.Tenants -{ - public class ConnectionStringsModal : TenantManagementPageModel - { - [BindProperty] - public TenantInfoModel Tenant { get; set; } - - protected ITenantAppService TenantAppService { get; } - - public ConnectionStringsModal(ITenantAppService tenantAppService) - { - TenantAppService = tenantAppService; - } - - public virtual async Task OnGetAsync(Guid id) - { - var defaultConnectionString = await TenantAppService.GetDefaultConnectionStringAsync(id); - Tenant = new TenantInfoModel - { - Id = id, - DefaultConnectionString = defaultConnectionString, - UseSharedDatabase = defaultConnectionString.IsNullOrWhiteSpace() - }; - - return Page(); - } - - public virtual async Task OnPostAsync() - { - ValidateModel(); - - if (Tenant.UseSharedDatabase || Tenant.DefaultConnectionString.IsNullOrWhiteSpace()) - { - await TenantAppService.DeleteDefaultConnectionStringAsync(Tenant.Id); - } - else - { - await TenantAppService.UpdateDefaultConnectionStringAsync(Tenant.Id, Tenant.DefaultConnectionString); - } - - return NoContent(); - } - - public class TenantInfoModel - { - [HiddenInput] - public Guid Id { get; set; } - - public bool UseSharedDatabase { get; set; } - - [DynamicStringLength(typeof(TenantConnectionStringConsts), nameof(TenantConnectionStringConsts.MaxValueLength))] - public string DefaultConnectionString { get; set; } - } - } -} diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/ConnectionStringsModal.js b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/ConnectionStringsModal.js deleted file mode 100644 index de01d1cfdd..0000000000 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/ConnectionStringsModal.js +++ /dev/null @@ -1,20 +0,0 @@ -(function ($) { - abp.modals.TenantConnectionStringManagement = function () { - var initModal = function (publicApi, args) { - publicApi - .getModal() - .find('input[name="Tenant.UseSharedDatabase"]') - .change(function () { - var $this = $(this); - $('#Tenant_DefaultConnectionString_Wrap').toggleClass( - 'd-none' - ); - $this.val($this.prop('checked')); - }); - }; - - return { - initModal: initModal, - }; - }; -})(jQuery); diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/Index.js b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/Index.js index 69bbb0b955..9f61ffdcfc 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/Index.js +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/Index.js @@ -11,11 +11,6 @@ var _featuresModal = new abp.ModalManager( abp.appPath + 'FeatureManagement/FeatureManagementModal' ); - var _connectionStringsModal = new abp.ModalManager({ - viewUrl: - abp.appPath + 'TenantManagement/Tenants/ConnectionStringsModal', - modalClass: 'TenantConnectionStringManagement', - }); var _dataTable = null; @@ -34,17 +29,6 @@ }); }, }, - { - text: l('ConnectionStrings'), - visible: abp.auth.isGranted( - 'AbpTenantManagement.Tenants.ManageConnectionStrings' - ), - action: function (data) { - _connectionStringsModal.open({ - id: data.record.id, - }); - }, - }, { text: l('Features'), visible: abp.auth.isGranted( From 3a6a9c11e76076a871f311e602f7cf5fbdea3c0e Mon Sep 17 00:00:00 2001 From: Alper Ebicoglu Date: Mon, 8 Feb 2021 17:38:52 +0300 Subject: [PATCH 080/472] Update en.json --- .../AbpIoLocalization/Admin/Localization/Resources/en.json | 2 +- 1 file changed, 1 insertion(+), 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 66c7327d88..fad5ba7f3b 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json @@ -35,7 +35,7 @@ "NameFilter": "Name", "CreationTime": "Creation time", "IsPro": "Is pro", - "IsFreeToActiveLicenseOwners": "Is free to active license owners", + "IsFreeToActiveLicenseOwners": "Free to license owners", "ShowOnModuleList": "Show on module list", "EfCoreConfigureMethodName": "Configure method name", "IsProFilter": "Is pro", From f2816f79fdb7641e87a2a0d9b1fdc6bff2b02e07 Mon Sep 17 00:00:00 2001 From: maliming Date: Tue, 9 Feb 2021 09:25:16 +0800 Subject: [PATCH 081/472] Update TenantManagement.razor.cs --- .../Pages/TenantManagement/TenantManagement.razor.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor.cs index 46a4b7df18..475be40e38 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor.cs @@ -30,6 +30,8 @@ namespace Volo.Abp.TenantManagement.Blazor.Pages.TenantManagement CreatePolicyName = TenantManagementPermissions.Tenants.Create; UpdatePolicyName = TenantManagementPermissions.Tenants.Update; DeletePolicyName = TenantManagementPermissions.Tenants.Delete; + + ManageFeaturesPolicyName = TenantManagementPermissions.Tenants.ManageFeatures; TenantInfo = new TenantInfoModel(); } From eb55d640912026b3544e3cd8a4b1285bdd665aac Mon Sep 17 00:00:00 2001 From: maliming Date: Tue, 9 Feb 2021 09:38:49 +0800 Subject: [PATCH 082/472] Remove ConnectionStringsModal.js --- .../Pages/TenantManagement/TenantManagement.razor.cs | 9 +-------- .../Pages/TenantManagement/Tenants/Index.cshtml | 1 - 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor.cs index 475be40e38..6bae1b0b9f 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor.cs @@ -13,7 +13,6 @@ namespace Volo.Abp.TenantManagement.Blazor.Pages.TenantManagement { protected const string FeatureProviderName = "T"; - protected bool HasManageConnectionStringsPermission; protected bool HasManageFeaturesPermission; protected string ManageConnectionStringsPolicyName; protected string ManageFeaturesPolicyName; @@ -30,7 +29,7 @@ namespace Volo.Abp.TenantManagement.Blazor.Pages.TenantManagement CreatePolicyName = TenantManagementPermissions.Tenants.Create; UpdatePolicyName = TenantManagementPermissions.Tenants.Update; DeletePolicyName = TenantManagementPermissions.Tenants.Delete; - + ManageFeaturesPolicyName = TenantManagementPermissions.Tenants.ManageFeatures; TenantInfo = new TenantInfoModel(); @@ -40,7 +39,6 @@ namespace Volo.Abp.TenantManagement.Blazor.Pages.TenantManagement { await base.SetPermissionsAsync(); - HasManageConnectionStringsPermission = await AuthorizationService.IsGrantedAsync(ManageConnectionStringsPolicyName); HasManageFeaturesPermission = await AuthorizationService.IsGrantedAsync(ManageFeaturesPolicyName); } @@ -53,10 +51,5 @@ namespace Volo.Abp.TenantManagement.Blazor.Pages.TenantManagement public class TenantInfoModel { public Guid Id { get; set; } - - public bool UseSharedDatabase { get; set; } - - [Required] - public string DefaultConnectionString { get; set; } } } diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/Index.cshtml b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/Index.cshtml index 67fd507bcc..12857a7efb 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/Index.cshtml +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/Index.cshtml @@ -20,7 +20,6 @@ @section scripts { - } From 033b5c3503d6daec54acaa4d615331ee2d1d0811 Mon Sep 17 00:00:00 2001 From: maliming Date: Tue, 9 Feb 2021 10:49:28 +0800 Subject: [PATCH 083/472] Remove AuthorizePage and ManageConnectionStringsPolicyName. --- .../Pages/TenantManagement/TenantManagement.razor.cs | 1 - .../AbpTenantManagementWebModule.cs | 1 - 2 files changed, 2 deletions(-) diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor.cs index 6bae1b0b9f..72c5d4e589 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor.cs @@ -14,7 +14,6 @@ namespace Volo.Abp.TenantManagement.Blazor.Pages.TenantManagement protected const string FeatureProviderName = "T"; protected bool HasManageFeaturesPermission; - protected string ManageConnectionStringsPolicyName; protected string ManageFeaturesPolicyName; protected FeatureManagementModal FeatureManagementModal; diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/AbpTenantManagementWebModule.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/AbpTenantManagementWebModule.cs index e03a7ec2a2..02433ff1c0 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/AbpTenantManagementWebModule.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/AbpTenantManagementWebModule.cs @@ -61,7 +61,6 @@ namespace Volo.Abp.TenantManagement.Web options.Conventions.AuthorizePage("/TenantManagement/Tenants/Index", TenantManagementPermissions.Tenants.Default); options.Conventions.AuthorizePage("/TenantManagement/Tenants/CreateModal", TenantManagementPermissions.Tenants.Create); options.Conventions.AuthorizePage("/TenantManagement/Tenants/EditModal", TenantManagementPermissions.Tenants.Update); - options.Conventions.AuthorizePage("/TenantManagement/Tenants/ConnectionStrings", TenantManagementPermissions.Tenants.ManageConnectionStrings); }); Configure(options => From e57f186206129d9eadab2b921a600b6c29fb6077 Mon Sep 17 00:00:00 2001 From: Erol Arkat Date: Tue, 9 Feb 2021 09:39:50 +0300 Subject: [PATCH 084/472] version update --- common.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common.props b/common.props index f5db446396..268e4c8b1d 100644 --- a/common.props +++ b/common.props @@ -1,7 +1,7 @@ latest - 4.2.0 + 4.2.1 $(NoWarn);CS1591;CS0436 https://abp.io/assets/abp_nupkg.png https://abp.io/ From 5cdad9c210a8e137daf946ea07841baa27003bcf Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Tue, 9 Feb 2021 14:54:45 +0800 Subject: [PATCH 085/472] Add email settings to setting-management --- .gitignore | 1 + .../Volo.Abp.SettingManagement.sln | 37 + .../DemoAppDbContext.cs | 26 + .../DemoAppDbContextFactory.cs | 29 + .../DemoAppModule.cs | 136 + .../20210209024820_init.Designer.cs | 809 + .../Migrations/20210209024820_init.cs | 500 + .../DemoAppDbContextModelSnapshot.cs | 807 + .../Pages/Index.cshtml | 10 + .../Pages/Index.cshtml.cs | 11 + .../Pages/_ViewImports.cshtml | 4 + .../Program.cs | 47 + .../Properties/launchSettings.json | 28 + .../Startup.cs | 20 + .../Volo.Abp.SettingManagement.DemoApp.csproj | 63 + .../abp.resourcemapping.js | 12 + .../appsettings.Development.json | 10 + .../appsettings.json | 5 + .../gulpfile.js | 9 + .../package.json | 8 + .../@fortawesome/fontawesome-free/css/all.css | 4619 +++++ .../fontawesome-free/css/v4-shims.css | 2172 +++ .../webfonts/fa-brands-400.eot | Bin 0 -> 136822 bytes .../webfonts/fa-brands-400.svg | 3717 ++++ .../webfonts/fa-brands-400.ttf | Bin 0 -> 136516 bytes .../webfonts/fa-brands-400.woff | Bin 0 -> 92136 bytes .../webfonts/fa-brands-400.woff2 | Bin 0 -> 78472 bytes .../webfonts/fa-regular-400.eot | Bin 0 -> 34350 bytes .../webfonts/fa-regular-400.svg | 801 + .../webfonts/fa-regular-400.ttf | Bin 0 -> 34052 bytes .../webfonts/fa-regular-400.woff | Bin 0 -> 16776 bytes .../webfonts/fa-regular-400.woff2 | Bin 0 -> 13588 bytes .../webfonts/fa-solid-900.eot | Bin 0 -> 204814 bytes .../webfonts/fa-solid-900.svg | 5028 +++++ .../webfonts/fa-solid-900.ttf | Bin 0 -> 204528 bytes .../webfonts/fa-solid-900.woff | Bin 0 -> 104280 bytes .../webfonts/fa-solid-900.woff2 | Bin 0 -> 80252 bytes .../wwwroot/libs/abp/core/abp.css | 56 + .../wwwroot/libs/abp/core/abp.js | 769 + .../wwwroot/libs/abp/jquery/abp.jquery.js | 395 + .../wwwroot/libs/abp/luxon/abp.luxon.js | 46 + .../wwwroot/libs/abp/utils/abp-utils.umd.js | 694 + .../libs/abp/utils/abp-utils.umd.js.map | 1 + .../libs/abp/utils/abp-utils.umd.min.js | 2 + .../libs/abp/utils/abp-utils.umd.min.js.map | 1 + .../bootstrap-datepicker.css.map | 1 + .../bootstrap-datepicker.min.css | 7 + .../bootstrap-datepicker.min.js | 8 + .../locales/bootstrap-datepicker-en-CA.min.js | 1 + .../locales/bootstrap-datepicker.ar-tn.min.js | 1 + .../locales/bootstrap-datepicker.ar.min.js | 1 + .../locales/bootstrap-datepicker.az.min.js | 1 + .../locales/bootstrap-datepicker.bg.min.js | 1 + .../locales/bootstrap-datepicker.bm.min.js | 1 + .../locales/bootstrap-datepicker.bn.min.js | 1 + .../locales/bootstrap-datepicker.br.min.js | 1 + .../locales/bootstrap-datepicker.bs.min.js | 1 + .../locales/bootstrap-datepicker.ca.min.js | 1 + .../locales/bootstrap-datepicker.cs.min.js | 1 + .../locales/bootstrap-datepicker.cy.min.js | 1 + .../locales/bootstrap-datepicker.da.min.js | 1 + .../locales/bootstrap-datepicker.de.min.js | 1 + .../locales/bootstrap-datepicker.el.min.js | 1 + .../locales/bootstrap-datepicker.en-AU.min.js | 1 + .../locales/bootstrap-datepicker.en-CA.min.js | 1 + .../locales/bootstrap-datepicker.en-GB.min.js | 1 + .../locales/bootstrap-datepicker.en-IE.min.js | 1 + .../locales/bootstrap-datepicker.en-NZ.min.js | 1 + .../locales/bootstrap-datepicker.en-ZA.min.js | 1 + .../locales/bootstrap-datepicker.eo.min.js | 1 + .../locales/bootstrap-datepicker.es.min.js | 1 + .../locales/bootstrap-datepicker.et.min.js | 1 + .../locales/bootstrap-datepicker.eu.min.js | 1 + .../locales/bootstrap-datepicker.fa.min.js | 1 + .../locales/bootstrap-datepicker.fi.min.js | 1 + .../locales/bootstrap-datepicker.fo.min.js | 1 + .../locales/bootstrap-datepicker.fr-CH.min.js | 1 + .../locales/bootstrap-datepicker.fr.min.js | 1 + .../locales/bootstrap-datepicker.gl.min.js | 1 + .../locales/bootstrap-datepicker.he.min.js | 1 + .../locales/bootstrap-datepicker.hi.min.js | 1 + .../locales/bootstrap-datepicker.hr.min.js | 1 + .../locales/bootstrap-datepicker.hu.min.js | 1 + .../locales/bootstrap-datepicker.hy.min.js | 1 + .../locales/bootstrap-datepicker.id.min.js | 1 + .../locales/bootstrap-datepicker.is.min.js | 1 + .../locales/bootstrap-datepicker.it-CH.min.js | 1 + .../locales/bootstrap-datepicker.it.min.js | 1 + .../locales/bootstrap-datepicker.ja.min.js | 1 + .../locales/bootstrap-datepicker.ka.min.js | 1 + .../locales/bootstrap-datepicker.kh.min.js | 1 + .../locales/bootstrap-datepicker.kk.min.js | 1 + .../locales/bootstrap-datepicker.km.min.js | 1 + .../locales/bootstrap-datepicker.ko.min.js | 1 + .../locales/bootstrap-datepicker.kr.min.js | 1 + .../locales/bootstrap-datepicker.lt.min.js | 1 + .../locales/bootstrap-datepicker.lv.min.js | 1 + .../locales/bootstrap-datepicker.me.min.js | 1 + .../locales/bootstrap-datepicker.mk.min.js | 1 + .../locales/bootstrap-datepicker.mn.min.js | 1 + .../locales/bootstrap-datepicker.ms.min.js | 1 + .../locales/bootstrap-datepicker.nl-BE.min.js | 1 + .../locales/bootstrap-datepicker.nl.min.js | 1 + .../locales/bootstrap-datepicker.no.min.js | 1 + .../locales/bootstrap-datepicker.oc.min.js | 1 + .../locales/bootstrap-datepicker.pl.min.js | 1 + .../locales/bootstrap-datepicker.pt-BR.min.js | 1 + .../locales/bootstrap-datepicker.pt.min.js | 1 + .../locales/bootstrap-datepicker.ro.min.js | 1 + .../bootstrap-datepicker.rs-latin.min.js | 1 + .../locales/bootstrap-datepicker.rs.min.js | 1 + .../locales/bootstrap-datepicker.ru.min.js | 1 + .../locales/bootstrap-datepicker.si.min.js | 1 + .../locales/bootstrap-datepicker.sk.min.js | 1 + .../locales/bootstrap-datepicker.sl.min.js | 1 + .../locales/bootstrap-datepicker.sq.min.js | 1 + .../bootstrap-datepicker.sr-latin.min.js | 1 + .../locales/bootstrap-datepicker.sr.min.js | 1 + .../locales/bootstrap-datepicker.sv.min.js | 1 + .../locales/bootstrap-datepicker.sw.min.js | 1 + .../locales/bootstrap-datepicker.ta.min.js | 1 + .../locales/bootstrap-datepicker.tg.min.js | 1 + .../locales/bootstrap-datepicker.th.min.js | 1 + .../locales/bootstrap-datepicker.tk.min.js | 1 + .../locales/bootstrap-datepicker.tr.min.js | 1 + .../locales/bootstrap-datepicker.uk.min.js | 1 + .../bootstrap-datepicker.uz-cyrl.min.js | 1 + .../bootstrap-datepicker.uz-latn.min.js | 1 + .../locales/bootstrap-datepicker.vi.min.js | 1 + .../locales/bootstrap-datepicker.zh-CN.min.js | 1 + .../locales/bootstrap-datepicker.zh-TW.min.js | 1 + .../libs/bootstrap/css/bootstrap-rtl.css | 11392 ++++++++++++ .../libs/bootstrap/css/bootstrap-rtl.css.map | 1 + .../libs/bootstrap/css/bootstrap-rtl.min.css | 7 + .../bootstrap/css/bootstrap-rtl.min.css.map | 1 + .../wwwroot/libs/bootstrap/css/bootstrap.css | 10298 +++++++++++ .../libs/bootstrap/css/bootstrap.css.map | 1 + .../libs/bootstrap/css/bootstrap.min.css | 7 + .../libs/bootstrap/css/bootstrap.min.css.map | 1 + .../libs/bootstrap/js/bootstrap.bundle.js | 7045 +++++++ .../libs/bootstrap/js/bootstrap.bundle.js.map | 1 + .../libs/bootstrap/js/bootstrap.bundle.min.js | 7 + .../bootstrap/js/bootstrap.bundle.min.js.map | 1 + .../css/dataTables.bootstrap4.css | 210 + .../js/dataTables.bootstrap4.js | 184 + .../datatables.net/js/jquery.dataTables.js | 15383 ++++++++++++++++ .../libs/jquery-form/jquery.form.min.js | 23 + .../libs/jquery-form/jquery.form.min.js.map | 1 + .../jquery.validate.unobtrusive.js | 432 + .../libs/jquery-validation/jquery.validate.js | 1657 ++ .../localization/messages_ar.js | 35 + .../localization/messages_ar.min.js | 4 + .../localization/messages_az.js | 35 + .../localization/messages_az.min.js | 4 + .../localization/messages_bg.js | 35 + .../localization/messages_bg.min.js | 4 + .../localization/messages_bn_BD.js | 35 + .../localization/messages_bn_BD.min.js | 4 + .../localization/messages_ca.js | 35 + .../localization/messages_ca.min.js | 4 + .../localization/messages_cs.js | 36 + .../localization/messages_cs.min.js | 4 + .../localization/messages_da.js | 46 + .../localization/messages_da.min.js | 4 + .../localization/messages_de.js | 82 + .../localization/messages_de.min.js | 4 + .../localization/messages_el.js | 35 + .../localization/messages_el.min.js | 4 + .../localization/messages_es.js | 38 + .../localization/messages_es.min.js | 4 + .../localization/messages_es_AR.js | 39 + .../localization/messages_es_AR.min.js | 4 + .../localization/messages_es_PE.js | 39 + .../localization/messages_es_PE.min.js | 4 + .../localization/messages_et.js | 33 + .../localization/messages_et.min.js | 4 + .../localization/messages_eu.js | 35 + .../localization/messages_eu.min.js | 4 + .../localization/messages_fa.js | 39 + .../localization/messages_fa.min.js | 4 + .../localization/messages_fi.js | 33 + .../localization/messages_fi.min.js | 4 + .../localization/messages_fr.js | 64 + .../localization/messages_fr.min.js | 4 + .../localization/messages_ge.js | 35 + .../localization/messages_ge.min.js | 4 + .../localization/messages_gl.js | 40 + .../localization/messages_gl.min.js | 4 + .../localization/messages_he.js | 35 + .../localization/messages_he.min.js | 4 + .../localization/messages_hr.js | 35 + .../localization/messages_hr.min.js | 4 + .../localization/messages_hu.js | 35 + .../localization/messages_hu.min.js | 4 + .../localization/messages_hy_AM.js | 35 + .../localization/messages_hy_AM.min.js | 4 + .../localization/messages_id.js | 34 + .../localization/messages_id.min.js | 4 + .../localization/messages_is.js | 33 + .../localization/messages_is.min.js | 4 + .../localization/messages_it.js | 39 + .../localization/messages_it.min.js | 4 + .../localization/messages_ja.js | 36 + .../localization/messages_ja.min.js | 4 + .../localization/messages_ka.js | 35 + .../localization/messages_ka.min.js | 4 + .../localization/messages_kk.js | 35 + .../localization/messages_kk.min.js | 4 + .../localization/messages_ko.js | 35 + .../localization/messages_ko.min.js | 4 + .../localization/messages_lt.js | 35 + .../localization/messages_lt.min.js | 4 + .../localization/messages_lv.js | 35 + .../localization/messages_lv.min.js | 4 + .../localization/messages_mk.js | 35 + .../localization/messages_mk.min.js | 4 + .../localization/messages_my.js | 35 + .../localization/messages_my.min.js | 4 + .../localization/messages_nl.js | 46 + .../localization/messages_nl.min.js | 4 + .../localization/messages_no.js | 35 + .../localization/messages_no.min.js | 4 + .../localization/messages_pl.js | 38 + .../localization/messages_pl.min.js | 4 + .../localization/messages_pt_BR.js | 91 + .../localization/messages_pt_BR.min.js | 4 + .../localization/messages_pt_PT.js | 39 + .../localization/messages_pt_PT.min.js | 4 + .../localization/messages_ro.js | 35 + .../localization/messages_ro.min.js | 4 + .../localization/messages_ru.js | 35 + .../localization/messages_ru.min.js | 4 + .../localization/messages_sd.js | 35 + .../localization/messages_sd.min.js | 4 + .../localization/messages_si.js | 35 + .../localization/messages_si.min.js | 4 + .../localization/messages_sk.js | 33 + .../localization/messages_sk.min.js | 4 + .../localization/messages_sl.js | 35 + .../localization/messages_sl.min.js | 4 + .../localization/messages_sr.js | 36 + .../localization/messages_sr.min.js | 4 + .../localization/messages_sr_lat.js | 36 + .../localization/messages_sr_lat.min.js | 4 + .../localization/messages_sv.js | 35 + .../localization/messages_sv.min.js | 4 + .../localization/messages_th.js | 35 + .../localization/messages_th.min.js | 4 + .../localization/messages_tj.js | 35 + .../localization/messages_tj.min.js | 4 + .../localization/messages_tr.js | 37 + .../localization/messages_tr.min.js | 4 + .../localization/messages_uk.js | 35 + .../localization/messages_uk.min.js | 4 + .../localization/messages_ur.js | 35 + .../localization/messages_ur.min.js | 4 + .../localization/messages_vi.js | 35 + .../localization/messages_vi.min.js | 4 + .../localization/messages_zh.js | 36 + .../localization/messages_zh.min.js | 4 + .../localization/messages_zh_TW.js | 37 + .../localization/messages_zh_TW.min.js | 4 + .../localization/methods_de.js | 24 + .../localization/methods_de.min.js | 4 + .../localization/methods_es_CL.js | 24 + .../localization/methods_es_CL.min.js | 4 + .../localization/methods_fi.js | 24 + .../localization/methods_fi.min.js | 4 + .../localization/methods_it.js | 24 + .../localization/methods_it.min.js | 4 + .../localization/methods_nl.js | 24 + .../localization/methods_nl.min.js | 4 + .../localization/methods_pt.js | 21 + .../localization/methods_pt.min.js | 4 + .../wwwroot/libs/jquery/jquery.js | 10872 +++++++++++ .../wwwroot/libs/lodash/lodash.min.js | 139 + .../wwwroot/libs/luxon/luxon.js | 8296 +++++++++ .../wwwroot/libs/luxon/luxon.js.map | 1 + .../wwwroot/libs/luxon/luxon.min.js | 1 + .../wwwroot/libs/luxon/luxon.min.js.map | 1 + .../jquery.mCustomScrollbar.concat.min.js | 5 + .../jquery.mCustomScrollbar.css | 1267 ++ .../jquery.mCustomScrollbar.js | 2458 +++ .../mCSB_buttons.png | Bin 0 -> 2998 bytes .../package.json | 37 + .../malihu-custom-scrollbar-plugin/readme.md | 82 + .../wwwroot/libs/select2/css/select2.min.css | 1 + .../wwwroot/libs/select2/js/i18n/af.js | 3 + .../wwwroot/libs/select2/js/i18n/ar.js | 3 + .../wwwroot/libs/select2/js/i18n/az.js | 3 + .../wwwroot/libs/select2/js/i18n/bg.js | 3 + .../wwwroot/libs/select2/js/i18n/bn.js | 3 + .../wwwroot/libs/select2/js/i18n/bs.js | 3 + .../wwwroot/libs/select2/js/i18n/ca.js | 3 + .../wwwroot/libs/select2/js/i18n/cs.js | 3 + .../wwwroot/libs/select2/js/i18n/da.js | 3 + .../wwwroot/libs/select2/js/i18n/de.js | 3 + .../wwwroot/libs/select2/js/i18n/dsb.js | 3 + .../wwwroot/libs/select2/js/i18n/el.js | 3 + .../wwwroot/libs/select2/js/i18n/en.js | 3 + .../wwwroot/libs/select2/js/i18n/es.js | 3 + .../wwwroot/libs/select2/js/i18n/et.js | 3 + .../wwwroot/libs/select2/js/i18n/eu.js | 3 + .../wwwroot/libs/select2/js/i18n/fa.js | 3 + .../wwwroot/libs/select2/js/i18n/fi.js | 3 + .../wwwroot/libs/select2/js/i18n/fr.js | 3 + .../wwwroot/libs/select2/js/i18n/gl.js | 3 + .../wwwroot/libs/select2/js/i18n/he.js | 3 + .../wwwroot/libs/select2/js/i18n/hi.js | 3 + .../wwwroot/libs/select2/js/i18n/hr.js | 3 + .../wwwroot/libs/select2/js/i18n/hsb.js | 3 + .../wwwroot/libs/select2/js/i18n/hu.js | 3 + .../wwwroot/libs/select2/js/i18n/hy.js | 3 + .../wwwroot/libs/select2/js/i18n/id.js | 3 + .../wwwroot/libs/select2/js/i18n/is.js | 3 + .../wwwroot/libs/select2/js/i18n/it.js | 3 + .../wwwroot/libs/select2/js/i18n/ja.js | 3 + .../wwwroot/libs/select2/js/i18n/ka.js | 3 + .../wwwroot/libs/select2/js/i18n/km.js | 3 + .../wwwroot/libs/select2/js/i18n/ko.js | 3 + .../wwwroot/libs/select2/js/i18n/lt.js | 3 + .../wwwroot/libs/select2/js/i18n/lv.js | 3 + .../wwwroot/libs/select2/js/i18n/mk.js | 3 + .../wwwroot/libs/select2/js/i18n/ms.js | 3 + .../wwwroot/libs/select2/js/i18n/nb.js | 3 + .../wwwroot/libs/select2/js/i18n/ne.js | 3 + .../wwwroot/libs/select2/js/i18n/nl.js | 3 + .../wwwroot/libs/select2/js/i18n/pl.js | 3 + .../wwwroot/libs/select2/js/i18n/ps.js | 3 + .../wwwroot/libs/select2/js/i18n/pt-BR.js | 3 + .../wwwroot/libs/select2/js/i18n/pt.js | 3 + .../wwwroot/libs/select2/js/i18n/ro.js | 3 + .../wwwroot/libs/select2/js/i18n/ru.js | 3 + .../wwwroot/libs/select2/js/i18n/sk.js | 3 + .../wwwroot/libs/select2/js/i18n/sl.js | 3 + .../wwwroot/libs/select2/js/i18n/sq.js | 3 + .../wwwroot/libs/select2/js/i18n/sr-Cyrl.js | 3 + .../wwwroot/libs/select2/js/i18n/sr.js | 3 + .../wwwroot/libs/select2/js/i18n/sv.js | 3 + .../wwwroot/libs/select2/js/i18n/th.js | 3 + .../wwwroot/libs/select2/js/i18n/tk.js | 3 + .../wwwroot/libs/select2/js/i18n/tr.js | 3 + .../wwwroot/libs/select2/js/i18n/uk.js | 3 + .../wwwroot/libs/select2/js/i18n/vi.js | 3 + .../wwwroot/libs/select2/js/i18n/zh-CN.js | 3 + .../wwwroot/libs/select2/js/i18n/zh-TW.js | 3 + .../js/select2-bootstrap-modal-patch.js | 4 + .../libs/select2/js/select2.full.min.js | 2 + .../wwwroot/libs/select2/js/select2.min.js | 2 + .../wwwroot/libs/sweetalert/sweetalert.min.js | 1 + .../wwwroot/libs/timeago/jquery.timeago.js | 232 + .../wwwroot/libs/timeago/locales/README.md | 27 + .../libs/timeago/locales/jquery.timeago.af.js | 30 + .../libs/timeago/locales/jquery.timeago.am.js | 30 + .../libs/timeago/locales/jquery.timeago.ar.js | 104 + .../locales/jquery.timeago.az-short.js | 30 + .../libs/timeago/locales/jquery.timeago.az.js | 30 + .../libs/timeago/locales/jquery.timeago.be.js | 43 + .../libs/timeago/locales/jquery.timeago.bg.js | 28 + .../libs/timeago/locales/jquery.timeago.bs.js | 55 + .../libs/timeago/locales/jquery.timeago.ca.js | 30 + .../libs/timeago/locales/jquery.timeago.cs.js | 34 + .../libs/timeago/locales/jquery.timeago.cy.js | 30 + .../libs/timeago/locales/jquery.timeago.da.js | 28 + .../locales/jquery.timeago.de-short.js | 30 + .../libs/timeago/locales/jquery.timeago.de.js | 28 + .../libs/timeago/locales/jquery.timeago.dv.js | 32 + .../libs/timeago/locales/jquery.timeago.el.js | 28 + .../locales/jquery.timeago.en-short.js | 30 + .../libs/timeago/locales/jquery.timeago.en.js | 30 + .../locales/jquery.timeago.es-short.js | 31 + .../libs/timeago/locales/jquery.timeago.es.js | 29 + .../libs/timeago/locales/jquery.timeago.et.js | 28 + .../libs/timeago/locales/jquery.timeago.eu.js | 28 + .../locales/jquery.timeago.fa-short.js | 30 + .../libs/timeago/locales/jquery.timeago.fa.js | 32 + .../libs/timeago/locales/jquery.timeago.fi.js | 38 + .../locales/jquery.timeago.fr-short.js | 26 + .../libs/timeago/locales/jquery.timeago.fr.js | 27 + .../libs/timeago/locales/jquery.timeago.gl.js | 28 + .../libs/timeago/locales/jquery.timeago.he.js | 26 + .../libs/timeago/locales/jquery.timeago.hr.js | 54 + .../libs/timeago/locales/jquery.timeago.hu.js | 28 + .../libs/timeago/locales/jquery.timeago.hy.js | 28 + .../libs/timeago/locales/jquery.timeago.id.js | 29 + .../libs/timeago/locales/jquery.timeago.is.js | 29 + .../locales/jquery.timeago.it-short.js | 30 + .../libs/timeago/locales/jquery.timeago.it.js | 28 + .../libs/timeago/locales/jquery.timeago.ja.js | 29 + .../libs/timeago/locales/jquery.timeago.jv.js | 28 + .../libs/timeago/locales/jquery.timeago.ko.js | 31 + .../libs/timeago/locales/jquery.timeago.ky.js | 42 + .../libs/timeago/locales/jquery.timeago.lt.js | 30 + .../libs/timeago/locales/jquery.timeago.lv.js | 30 + .../libs/timeago/locales/jquery.timeago.mk.js | 30 + .../libs/timeago/locales/jquery.timeago.nl.js | 30 + .../libs/timeago/locales/jquery.timeago.no.js | 28 + .../libs/timeago/locales/jquery.timeago.pl.js | 39 + .../locales/jquery.timeago.pt-br-short.js | 30 + .../timeago/locales/jquery.timeago.pt-br.js | 28 + .../locales/jquery.timeago.pt-short.js | 30 + .../libs/timeago/locales/jquery.timeago.pt.js | 26 + .../libs/timeago/locales/jquery.timeago.ro.js | 29 + .../libs/timeago/locales/jquery.timeago.rs.js | 54 + .../libs/timeago/locales/jquery.timeago.ru.js | 43 + .../libs/timeago/locales/jquery.timeago.rw.js | 30 + .../libs/timeago/locales/jquery.timeago.si.js | 28 + .../libs/timeago/locales/jquery.timeago.sk.js | 34 + .../libs/timeago/locales/jquery.timeago.sl.js | 46 + .../libs/timeago/locales/jquery.timeago.sq.js | 26 + .../libs/timeago/locales/jquery.timeago.sr.js | 54 + .../libs/timeago/locales/jquery.timeago.sv.js | 28 + .../libs/timeago/locales/jquery.timeago.th.js | 30 + .../locales/jquery.timeago.tr-short.js | 30 + .../libs/timeago/locales/jquery.timeago.tr.js | 26 + .../libs/timeago/locales/jquery.timeago.uk.js | 42 + .../libs/timeago/locales/jquery.timeago.ur.js | 30 + .../libs/timeago/locales/jquery.timeago.uz.js | 29 + .../libs/timeago/locales/jquery.timeago.vi.js | 30 + .../timeago/locales/jquery.timeago.zh-CN.js | 31 + .../timeago/locales/jquery.timeago.zh-TW.js | 30 + .../wwwroot/libs/toastr/toastr.css | 228 + .../wwwroot/libs/toastr/toastr.js.map | 1 + .../wwwroot/libs/toastr/toastr.min.css | 1 + .../wwwroot/libs/toastr/toastr.min.js | 2 + .../yarn.lock | 2592 +++ .../FodyWeavers.xml | 3 + .../FodyWeavers.xsd | 30 + ...ingManagement.Application.Contracts.csproj | 22 + ...ingManagementApplicationContractsModule.cs | 15 + .../Abp/SettingManagement/EmailSettingsDto.cs | 23 + .../IEmailSettingsAppService.cs | 12 + ...gManagementPermissionDefinitionProvider.cs | 21 + .../SettingManagementPermissions.cs | 16 + .../SettingManagementRemoteServiceConsts.cs | 7 + .../UpdateEmailSettingsDto.cs | 37 + .../FodyWeavers.xml | 3 + ...o.Abp.SettingManagement.Application.csproj | 17 + .../EmailSettingsAppService.cs | 46 + .../SettingManagementAppServiceBase.cs | 14 + .../SettingManagementApplicationModule.cs | 15 + .../AbpSettingManagementBlazorModule.cs | 13 +- .../EmailSettingGroupViewComponent.razor | 103 + .../EmailSettingGroupViewComponent.razor.cs | 41 + ...ettingManagementBlazorAutoMapperProfile.cs | 4 +- .../EmailSettingManagementPageContributor.cs | 41 + .../Volo.Abp.SettingManagement.Blazor.csproj | 1 + .../Resources/AbpSettingManagement/de-DE.json | 16 +- .../Resources/AbpSettingManagement/en.json | 16 +- .../Resources/AbpSettingManagement/es.json | 16 +- .../Resources/AbpSettingManagement/tr.json | 16 +- .../AbpSettingManagement/zh-Hans.json | 16 +- .../FodyWeavers.xml | 3 + .../FodyWeavers.xsd | 30 + ...bp.SettingManagement.HttpApi.Client.csproj | 16 + ...AbpSettingManagementHttpApiClientModule.cs | 20 + .../FodyWeavers.xml | 3 + .../FodyWeavers.xsd | 30 + .../Volo.Abp.SettingManagement.HttpApi.csproj | 16 + .../AbpSettingManagementHttpApiModule.cs | 35 + .../EmailSettingsController.cs | 32 + .../AbpSettingManagementWebModule.cs | 19 + .../EmailSettingGroup/Default.cshtml | 28 + .../Components/EmailSettingGroup/Default.js | 27 + .../EmailSettingGroupViewComponent.cs | 24 + .../EmailSettingManagementPageContributor.cs | 42 + .../Volo.Abp.SettingManagement.Web.csproj | 5 + 467 files changed, 99746 insertions(+), 15 deletions(-) create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/DemoAppDbContext.cs create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/DemoAppDbContextFactory.cs create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/DemoAppModule.cs create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/Migrations/20210209024820_init.Designer.cs create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/Migrations/20210209024820_init.cs create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/Migrations/DemoAppDbContextModelSnapshot.cs create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/Pages/Index.cshtml create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/Pages/Index.cshtml.cs create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/Pages/_ViewImports.cshtml create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/Program.cs create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/Properties/launchSettings.json create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/Startup.cs create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/Volo.Abp.SettingManagement.DemoApp.csproj create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/abp.resourcemapping.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/appsettings.Development.json create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/appsettings.json create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/gulpfile.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/package.json create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/css/all.css create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/css/v4-shims.css create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-brands-400.eot create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-brands-400.svg create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-brands-400.ttf create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-brands-400.woff create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-brands-400.woff2 create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-regular-400.eot create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-regular-400.svg create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-regular-400.ttf create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-regular-400.woff create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-regular-400.woff2 create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-solid-900.eot create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-solid-900.svg create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-solid-900.ttf create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-solid-900.woff create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-solid-900.woff2 create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/abp/core/abp.css create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/abp/core/abp.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/abp/jquery/abp.jquery.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/abp/luxon/abp.luxon.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/abp/utils/abp-utils.umd.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/abp/utils/abp-utils.umd.js.map create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/abp/utils/abp-utils.umd.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/abp/utils/abp-utils.umd.min.js.map create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/bootstrap-datepicker.css.map create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/bootstrap-datepicker.min.css create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/bootstrap-datepicker.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker-en-CA.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ar-tn.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ar.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.az.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.bg.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.bm.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.bn.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.br.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.bs.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ca.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.cs.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.cy.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.da.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.de.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.el.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.en-AU.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.en-CA.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.en-GB.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.en-IE.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.en-NZ.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.en-ZA.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.eo.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.es.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.et.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.eu.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.fa.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.fi.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.fo.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.fr-CH.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.fr.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.gl.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.he.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.hi.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.hr.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.hu.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.hy.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.id.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.is.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.it-CH.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.it.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ja.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ka.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.kh.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.kk.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.km.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ko.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.kr.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.lt.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.lv.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.me.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.mk.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.mn.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ms.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.nl-BE.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.nl.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.no.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.oc.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.pl.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.pt-BR.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.pt.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ro.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.rs-latin.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.rs.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ru.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.si.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.sk.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.sl.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.sq.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.sr-latin.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.sr.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.sv.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.sw.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ta.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.tg.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.th.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.tk.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.tr.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.uk.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.uz-cyrl.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.uz-latn.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.vi.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.zh-CN.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.zh-TW.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap/css/bootstrap-rtl.css create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap/css/bootstrap-rtl.css.map create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap/css/bootstrap-rtl.min.css create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap/css/bootstrap-rtl.min.css.map create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap/css/bootstrap.css create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap/css/bootstrap.css.map create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap/css/bootstrap.min.css create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap/css/bootstrap.min.css.map create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap/js/bootstrap.bundle.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap/js/bootstrap.bundle.js.map create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap/js/bootstrap.bundle.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap/js/bootstrap.bundle.min.js.map create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/datatables.net-bs4/css/dataTables.bootstrap4.css create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/datatables.net-bs4/js/dataTables.bootstrap4.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/datatables.net/js/jquery.dataTables.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-form/jquery.form.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-form/jquery.form.min.js.map create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/jquery.validate.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_ar.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_ar.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_az.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_az.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_bg.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_bg.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_bn_BD.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_bn_BD.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_ca.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_ca.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_cs.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_cs.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_da.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_da.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_de.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_de.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_el.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_el.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_es.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_es.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_es_AR.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_es_AR.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_es_PE.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_es_PE.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_et.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_et.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_eu.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_eu.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_fa.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_fa.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_fi.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_fi.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_fr.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_fr.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_ge.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_ge.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_gl.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_gl.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_he.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_he.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_hr.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_hr.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_hu.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_hu.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_hy_AM.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_hy_AM.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_id.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_id.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_is.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_is.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_it.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_it.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_ja.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_ja.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_ka.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_ka.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_kk.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_kk.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_ko.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_ko.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_lt.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_lt.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_lv.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_lv.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_mk.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_mk.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_my.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_my.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_nl.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_nl.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_no.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_no.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_pl.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_pl.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_pt_BR.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_pt_BR.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_pt_PT.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_pt_PT.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_ro.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_ro.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_ru.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_ru.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_sd.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_sd.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_si.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_si.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_sk.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_sk.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_sl.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_sl.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_sr.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_sr.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_sr_lat.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_sr_lat.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_sv.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_sv.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_th.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_th.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_tj.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_tj.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_tr.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_tr.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_uk.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_uk.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_ur.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_ur.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_vi.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_vi.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_zh.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_zh.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_zh_TW.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/messages_zh_TW.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/methods_de.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/methods_de.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/methods_es_CL.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/methods_es_CL.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/methods_fi.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/methods_fi.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/methods_it.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/methods_it.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/methods_nl.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/methods_nl.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/methods_pt.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery-validation/localization/methods_pt.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/jquery/jquery.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/lodash/lodash.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/luxon/luxon.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/luxon/luxon.js.map create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/luxon/luxon.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/luxon/luxon.min.js.map create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/malihu-custom-scrollbar-plugin/jquery.mCustomScrollbar.concat.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/malihu-custom-scrollbar-plugin/jquery.mCustomScrollbar.css create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/malihu-custom-scrollbar-plugin/jquery.mCustomScrollbar.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/malihu-custom-scrollbar-plugin/mCSB_buttons.png create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/malihu-custom-scrollbar-plugin/package.json create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/malihu-custom-scrollbar-plugin/readme.md create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/select2/css/select2.min.css create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/select2/js/i18n/af.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/select2/js/i18n/ar.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/select2/js/i18n/az.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/select2/js/i18n/bg.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/select2/js/i18n/bn.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/select2/js/i18n/bs.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/select2/js/i18n/ca.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/select2/js/i18n/cs.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/select2/js/i18n/da.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/select2/js/i18n/de.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/select2/js/i18n/dsb.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/select2/js/i18n/el.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/select2/js/i18n/en.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/select2/js/i18n/es.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/select2/js/i18n/et.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/select2/js/i18n/eu.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/select2/js/i18n/fa.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/select2/js/i18n/fi.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/select2/js/i18n/fr.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/select2/js/i18n/gl.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/select2/js/i18n/he.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/select2/js/i18n/hi.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/select2/js/i18n/hr.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/select2/js/i18n/hsb.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/select2/js/i18n/hu.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/select2/js/i18n/hy.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/select2/js/i18n/id.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/select2/js/i18n/is.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/select2/js/i18n/it.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/select2/js/i18n/ja.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/select2/js/i18n/ka.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/select2/js/i18n/km.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/select2/js/i18n/ko.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/select2/js/i18n/lt.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/select2/js/i18n/lv.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/select2/js/i18n/mk.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/select2/js/i18n/ms.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/select2/js/i18n/nb.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/select2/js/i18n/ne.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/select2/js/i18n/nl.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/select2/js/i18n/pl.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/select2/js/i18n/ps.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/select2/js/i18n/pt-BR.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/select2/js/i18n/pt.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/select2/js/i18n/ro.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/select2/js/i18n/ru.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/select2/js/i18n/sk.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/select2/js/i18n/sl.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/select2/js/i18n/sq.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/select2/js/i18n/sr-Cyrl.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/select2/js/i18n/sr.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/select2/js/i18n/sv.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/select2/js/i18n/th.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/select2/js/i18n/tk.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/select2/js/i18n/tr.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/select2/js/i18n/uk.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/select2/js/i18n/vi.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/select2/js/i18n/zh-CN.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/select2/js/i18n/zh-TW.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/select2/js/select2-bootstrap-modal-patch.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/select2/js/select2.full.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/select2/js/select2.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/sweetalert/sweetalert.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/jquery.timeago.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/locales/README.md create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/locales/jquery.timeago.af.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/locales/jquery.timeago.am.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/locales/jquery.timeago.ar.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/locales/jquery.timeago.az-short.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/locales/jquery.timeago.az.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/locales/jquery.timeago.be.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/locales/jquery.timeago.bg.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/locales/jquery.timeago.bs.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/locales/jquery.timeago.ca.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/locales/jquery.timeago.cs.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/locales/jquery.timeago.cy.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/locales/jquery.timeago.da.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/locales/jquery.timeago.de-short.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/locales/jquery.timeago.de.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/locales/jquery.timeago.dv.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/locales/jquery.timeago.el.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/locales/jquery.timeago.en-short.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/locales/jquery.timeago.en.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/locales/jquery.timeago.es-short.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/locales/jquery.timeago.es.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/locales/jquery.timeago.et.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/locales/jquery.timeago.eu.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/locales/jquery.timeago.fa-short.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/locales/jquery.timeago.fa.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/locales/jquery.timeago.fi.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/locales/jquery.timeago.fr-short.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/locales/jquery.timeago.fr.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/locales/jquery.timeago.gl.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/locales/jquery.timeago.he.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/locales/jquery.timeago.hr.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/locales/jquery.timeago.hu.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/locales/jquery.timeago.hy.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/locales/jquery.timeago.id.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/locales/jquery.timeago.is.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/locales/jquery.timeago.it-short.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/locales/jquery.timeago.it.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/locales/jquery.timeago.ja.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/locales/jquery.timeago.jv.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/locales/jquery.timeago.ko.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/locales/jquery.timeago.ky.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/locales/jquery.timeago.lt.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/locales/jquery.timeago.lv.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/locales/jquery.timeago.mk.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/locales/jquery.timeago.nl.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/locales/jquery.timeago.no.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/locales/jquery.timeago.pl.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/locales/jquery.timeago.pt-br-short.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/locales/jquery.timeago.pt-br.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/locales/jquery.timeago.pt-short.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/locales/jquery.timeago.pt.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/locales/jquery.timeago.ro.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/locales/jquery.timeago.rs.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/locales/jquery.timeago.ru.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/locales/jquery.timeago.rw.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/locales/jquery.timeago.si.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/locales/jquery.timeago.sk.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/locales/jquery.timeago.sl.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/locales/jquery.timeago.sq.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/locales/jquery.timeago.sr.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/locales/jquery.timeago.sv.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/locales/jquery.timeago.th.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/locales/jquery.timeago.tr-short.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/locales/jquery.timeago.tr.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/locales/jquery.timeago.uk.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/locales/jquery.timeago.ur.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/locales/jquery.timeago.uz.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/locales/jquery.timeago.vi.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/locales/jquery.timeago.zh-CN.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/timeago/locales/jquery.timeago.zh-TW.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/toastr/toastr.css create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/toastr/toastr.js.map create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/toastr/toastr.min.css create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/toastr/toastr.min.js create mode 100644 modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/yarn.lock create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.Application.Contracts/FodyWeavers.xml create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.Application.Contracts/FodyWeavers.xsd create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.Application.Contracts/Volo.Abp.SettingManagement.Application.Contracts.csproj create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.Application.Contracts/Volo/Abp/SettingManagement/AbpSettingManagementApplicationContractsModule.cs create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.Application.Contracts/Volo/Abp/SettingManagement/EmailSettingsDto.cs create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.Application.Contracts/Volo/Abp/SettingManagement/IEmailSettingsAppService.cs create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.Application.Contracts/Volo/Abp/SettingManagement/SettingManagementPermissionDefinitionProvider.cs create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.Application.Contracts/Volo/Abp/SettingManagement/SettingManagementPermissions.cs create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.Application.Contracts/Volo/Abp/SettingManagement/SettingManagementRemoteServiceConsts.cs create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.Application.Contracts/Volo/Abp/SettingManagement/UpdateEmailSettingsDto.cs create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.Application/FodyWeavers.xml create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.Application/Volo.Abp.SettingManagement.Application.csproj create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.Application/Volo/Abp/SettingManagement/EmailSettingsAppService.cs create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.Application/Volo/Abp/SettingManagement/SettingManagementAppServiceBase.cs create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.Application/Volo/Abp/SettingManagement/SettingManagementApplicationModule.cs create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Pages/SettingManagement/EmailSettingGroup/EmailSettingGroupViewComponent.razor create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Pages/SettingManagement/EmailSettingGroup/EmailSettingGroupViewComponent.razor.cs create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Settings/EmailSettingManagementPageContributor.cs create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.HttpApi.Client/FodyWeavers.xml create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.HttpApi.Client/FodyWeavers.xsd create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.HttpApi.Client/Volo.Abp.SettingManagement.HttpApi.Client.csproj create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.HttpApi.Client/Volo/Abp/SettingManagement/AbpSettingManagementHttpApiClientModule.cs create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.HttpApi/FodyWeavers.xml create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.HttpApi/FodyWeavers.xsd create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.HttpApi/Volo.Abp.SettingManagement.HttpApi.csproj create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.HttpApi/Volo/Abp/SettingManagement/AbpSettingManagementHttpApiModule.cs create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.HttpApi/Volo/Abp/SettingManagement/EmailSettingsController.cs create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/Default.cshtml create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/Default.js create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/EmailSettingGroupViewComponent.cs create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.Web/Settings/EmailSettingManagementPageContributor.cs diff --git a/.gitignore b/.gitignore index 407241c7fc..3c5c4f89da 100644 --- a/.gitignore +++ b/.gitignore @@ -269,6 +269,7 @@ modules/blog/app/Volo.BlogTestApp/Logs/*.* modules/blogging/app/Volo.BloggingTestApp/Logs/*.* modules/blogging/app/Volo.BloggingTestApp/wwwroot/files/*.* modules/docs/app/VoloDocs.Web/Logs/*.* +modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/Logs/*.* templates/module/app/MyCompanyName.MyProjectName.DemoApp/Logs/*.* templates/mvc/src/MyCompanyName.MyProjectName.Web/Logs/*.* diff --git a/modules/setting-management/Volo.Abp.SettingManagement.sln b/modules/setting-management/Volo.Abp.SettingManagement.sln index 8292218678..b7b5725614 100644 --- a/modules/setting-management/Volo.Abp.SettingManagement.sln +++ b/modules/setting-management/Volo.Abp.SettingManagement.sln @@ -27,6 +27,18 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.SettingManagement. EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.SettingManagement.Blazor", "src\Volo.Abp.SettingManagement.Blazor\Volo.Abp.SettingManagement.Blazor.csproj", "{BDF54E3C-C262-406E-8060-84C423335BDD}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.SettingManagement.Application", "src\Volo.Abp.SettingManagement.Application\Volo.Abp.SettingManagement.Application.csproj", "{30798284-C33B-49D8-91A7-B379D8166F69}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.SettingManagement.Application.Contracts", "src\Volo.Abp.SettingManagement.Application.Contracts\Volo.Abp.SettingManagement.Application.Contracts.csproj", "{BE6CB9AD-889C-4D4D-AD2C-6571689F99DD}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.SettingManagement.HttpApi", "src\Volo.Abp.SettingManagement.HttpApi\Volo.Abp.SettingManagement.HttpApi.csproj", "{BCE3E834-B90B-469A-B274-74D401FAFD6E}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.SettingManagement.HttpApi.Client", "src\Volo.Abp.SettingManagement.HttpApi.Client\Volo.Abp.SettingManagement.HttpApi.Client.csproj", "{F3126FDD-A574-4940-AE06-78898E2DE98F}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "app", "app", "{D3222BEC-EDCE-4509-9A19-36C43C9A59FB}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.SettingManagement.DemoApp", "app\Volo.Abp.SettingManagement.DemoApp\Volo.Abp.SettingManagement.DemoApp.csproj", "{8488F380-83DD-4209-80B7-87ACAB83A052}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -73,6 +85,26 @@ Global {BDF54E3C-C262-406E-8060-84C423335BDD}.Debug|Any CPU.Build.0 = Debug|Any CPU {BDF54E3C-C262-406E-8060-84C423335BDD}.Release|Any CPU.ActiveCfg = Release|Any CPU {BDF54E3C-C262-406E-8060-84C423335BDD}.Release|Any CPU.Build.0 = Release|Any CPU + {30798284-C33B-49D8-91A7-B379D8166F69}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {30798284-C33B-49D8-91A7-B379D8166F69}.Debug|Any CPU.Build.0 = Debug|Any CPU + {30798284-C33B-49D8-91A7-B379D8166F69}.Release|Any CPU.ActiveCfg = Release|Any CPU + {30798284-C33B-49D8-91A7-B379D8166F69}.Release|Any CPU.Build.0 = Release|Any CPU + {BE6CB9AD-889C-4D4D-AD2C-6571689F99DD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BE6CB9AD-889C-4D4D-AD2C-6571689F99DD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BE6CB9AD-889C-4D4D-AD2C-6571689F99DD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BE6CB9AD-889C-4D4D-AD2C-6571689F99DD}.Release|Any CPU.Build.0 = Release|Any CPU + {BCE3E834-B90B-469A-B274-74D401FAFD6E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BCE3E834-B90B-469A-B274-74D401FAFD6E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BCE3E834-B90B-469A-B274-74D401FAFD6E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BCE3E834-B90B-469A-B274-74D401FAFD6E}.Release|Any CPU.Build.0 = Release|Any CPU + {F3126FDD-A574-4940-AE06-78898E2DE98F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F3126FDD-A574-4940-AE06-78898E2DE98F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F3126FDD-A574-4940-AE06-78898E2DE98F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F3126FDD-A574-4940-AE06-78898E2DE98F}.Release|Any CPU.Build.0 = Release|Any CPU + {8488F380-83DD-4209-80B7-87ACAB83A052}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8488F380-83DD-4209-80B7-87ACAB83A052}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8488F380-83DD-4209-80B7-87ACAB83A052}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8488F380-83DD-4209-80B7-87ACAB83A052}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -88,6 +120,11 @@ Global {DF76DE74-1029-4FEA-8ADF-3C5636944757} = {7E8D2943-ADE7-4C89-8048-0780CE07E0E0} {AF6BE46D-AC88-4DEF-BBEC-F60A00847D43} = {F1BE945B-F0CF-4712-BC2B-9AF8C02059EA} {BDF54E3C-C262-406E-8060-84C423335BDD} = {F1BE945B-F0CF-4712-BC2B-9AF8C02059EA} + {30798284-C33B-49D8-91A7-B379D8166F69} = {F1BE945B-F0CF-4712-BC2B-9AF8C02059EA} + {BE6CB9AD-889C-4D4D-AD2C-6571689F99DD} = {F1BE945B-F0CF-4712-BC2B-9AF8C02059EA} + {BCE3E834-B90B-469A-B274-74D401FAFD6E} = {F1BE945B-F0CF-4712-BC2B-9AF8C02059EA} + {F3126FDD-A574-4940-AE06-78898E2DE98F} = {F1BE945B-F0CF-4712-BC2B-9AF8C02059EA} + {8488F380-83DD-4209-80B7-87ACAB83A052} = {D3222BEC-EDCE-4509-9A19-36C43C9A59FB} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {24B3A486-E7CA-4AA5-B76F-27D351A97E59} diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/DemoAppDbContext.cs b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/DemoAppDbContext.cs new file mode 100644 index 0000000000..5c595e9509 --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/DemoAppDbContext.cs @@ -0,0 +1,26 @@ +using Microsoft.EntityFrameworkCore; +using Volo.Abp.EntityFrameworkCore; +using Volo.Abp.Identity.EntityFrameworkCore; +using Volo.Abp.PermissionManagement.EntityFrameworkCore; +using Volo.Abp.SettingManagement.EntityFrameworkCore; + +namespace Volo.Abp.SettingManagement.DemoApp +{ + public class DemoAppDbContext: AbpDbContext + { + public DemoAppDbContext(DbContextOptions options) + : base(options) + { + + } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + + modelBuilder.ConfigurePermissionManagement(); + modelBuilder.ConfigureSettingManagement(); + modelBuilder.ConfigureIdentity(); + } + } +} diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/DemoAppDbContextFactory.cs b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/DemoAppDbContextFactory.cs new file mode 100644 index 0000000000..94ab7d0a75 --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/DemoAppDbContextFactory.cs @@ -0,0 +1,29 @@ +using System.IO; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Design; +using Microsoft.Extensions.Configuration; + +namespace Volo.Abp.SettingManagement.DemoApp +{ + public class DemoAppDbContextFactory : IDesignTimeDbContextFactory + { + public DemoAppDbContext CreateDbContext(string[] args) + { + var configuration = BuildConfiguration(); + + var builder = new DbContextOptionsBuilder() + .UseSqlServer(configuration.GetConnectionString("Default")); + + return new DemoAppDbContext(builder.Options); + } + + private static IConfigurationRoot BuildConfiguration() + { + var builder = new ConfigurationBuilder() + .SetBasePath(Directory.GetCurrentDirectory()) + .AddJsonFile("appsettings.json", optional: false); + + return builder.Build(); + } + } +} diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/DemoAppModule.cs b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/DemoAppModule.cs new file mode 100644 index 0000000000..68e272ffb7 --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/DemoAppModule.cs @@ -0,0 +1,136 @@ +using System.IO; +using Microsoft.AspNetCore.Builder; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.DependencyInjection.Extensions; +using Microsoft.Extensions.Hosting; +using Microsoft.OpenApi.Models; +using Volo.Abp.Account; +using Volo.Abp.Account.Web; +using Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic; +using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared; +using Volo.Abp.Autofac; +using Volo.Abp.Data; +using Volo.Abp.Emailing; +using Volo.Abp.EntityFrameworkCore; +using Volo.Abp.EntityFrameworkCore.SqlServer; +using Volo.Abp.Identity; +using Volo.Abp.Identity.EntityFrameworkCore; +using Volo.Abp.Identity.Web; +using Volo.Abp.Localization; +using Volo.Abp.Modularity; +using Volo.Abp.MultiTenancy; +using Volo.Abp.PermissionManagement; +using Volo.Abp.PermissionManagement.EntityFrameworkCore; +using Volo.Abp.PermissionManagement.Identity; +using Volo.Abp.SettingManagement.EntityFrameworkCore; +using Volo.Abp.SettingManagement.Web; +using Volo.Abp.Threading; +using Volo.Abp.VirtualFileSystem; + +namespace Volo.Abp.SettingManagement.DemoApp +{ + [DependsOn( + typeof(AbpSettingManagementWebModule), + typeof(AbpSettingManagementApplicationModule), + typeof(AbpAutofacModule), + typeof(AbpAccountWebModule), + typeof(AbpAccountApplicationModule), + typeof(AbpEntityFrameworkCoreSqlServerModule), + typeof(AbpSettingManagementEntityFrameworkCoreModule), + typeof(AbpPermissionManagementEntityFrameworkCoreModule), + typeof(AbpPermissionManagementApplicationModule), + typeof(AbpIdentityWebModule), + typeof(AbpIdentityApplicationModule), + typeof(AbpIdentityEntityFrameworkCoreModule), + typeof(AbpPermissionManagementDomainIdentityModule), + typeof(AbpAspNetCoreMvcUiBasicThemeModule) + )] + public class DemoAppModule : AbpModule + { + public override void ConfigureServices(ServiceConfigurationContext context) + { + var hostingEnvironment = context.Services.GetHostingEnvironment(); + var configuration = context.Services.GetConfiguration(); + +#if DEBUG + context.Services.Replace(ServiceDescriptor.Singleton()); +#endif + + Configure(options => + { + options.UseSqlServer(); + }); + + if (hostingEnvironment.IsDevelopment()) + { + Configure(options => + { + options.FileSets.ReplaceEmbeddedByPhysical(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}..{0}src{0}Volo.Abp.SettingManagement.Web", Path.DirectorySeparatorChar))); + options.FileSets.ReplaceEmbeddedByPhysical(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}..{0}src{0}Volo.Abp.SettingManagement.Domain", Path.DirectorySeparatorChar))); + options.FileSets.ReplaceEmbeddedByPhysical(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}..{0}src{0}Volo.Abp.SettingManagement.Application", Path.DirectorySeparatorChar))); + options.FileSets.ReplaceEmbeddedByPhysical(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}..{0}src{0}Volo.Abp.SettingManagement.Application.Contracts", Path.DirectorySeparatorChar))); + }); + } + + context.Services.AddSwaggerGen( + options => + { + options.SwaggerDoc("v1", new OpenApiInfo { Title = "AbpSettingManagement API", Version = "v1" }); + options.DocInclusionPredicate((docName, description) => true); + options.CustomSchemaIds(type => type.FullName); + }); + + Configure(options => + { + options.Languages.Add(new LanguageInfo("en", "en", "English")); + options.Languages.Add(new LanguageInfo("tr", "tr", "Türkçe")); + }); + + Configure(options => + { + options.IsEnabled = true; + }); + } + + public override void OnApplicationInitialization(ApplicationInitializationContext context) + { + var app = context.GetApplicationBuilder(); + + if (context.GetEnvironment().IsDevelopment()) + { + app.UseDeveloperExceptionPage(); + } + else + { + app.UseErrorPage(); + app.UseHsts(); + } + + app.UseHttpsRedirection(); + app.UseVirtualFiles(); + app.UseRouting(); + app.UseAuthentication(); + app.UseAuthorization(); + app.UseMultiTenancy(); + app.UseAbpRequestLocalization(); + + app.UseSwagger(); + app.UseSwaggerUI(options => + { + options.SwaggerEndpoint("/swagger/v1/swagger.json", "SettingManagement APP API"); + }); + + app.UseConfiguredEndpoints(); + + using (var scope = context.ServiceProvider.CreateScope()) + { + AsyncHelper.RunSync(async () => + { + await scope.ServiceProvider + .GetRequiredService() + .SeedAsync(); + }); + } + } + } +} diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/Migrations/20210209024820_init.Designer.cs b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/Migrations/20210209024820_init.Designer.cs new file mode 100644 index 0000000000..913e150570 --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/Migrations/20210209024820_init.Designer.cs @@ -0,0 +1,809 @@ +// +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.Abp.SettingManagement.DemoApp; + +namespace Volo.Abp.SettingManagement.DemoApp.Migrations +{ + [DbContext(typeof(DemoAppDbContext))] + [Migration("20210209024820_init")] + partial class init + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .UseIdentityColumns() + .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) + .HasAnnotation("Relational:MaxIdentifierLength", 128) + .HasAnnotation("ProductVersion", "5.0.2"); + + 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"); + }); + + 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"); + }); + + 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"); + }); + + 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"); + }); + + 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"); + }); + + 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("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"); + }); + + 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"); + }); + + 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"); + }); + + 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"); + }); + + 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"); + }); + + 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"); + }); + + 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"); + }); + + 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"); + }); + + 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("Name", "ProviderName", "ProviderKey"); + + b.ToTable("AbpPermissionGrants"); + }); + + 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"); + + b.ToTable("AbpSettings"); + }); + + 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.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"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/Migrations/20210209024820_init.cs b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/Migrations/20210209024820_init.cs new file mode 100644 index 0000000000..a60b127956 --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/Migrations/20210209024820_init.cs @@ -0,0 +1,500 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +namespace Volo.Abp.SettingManagement.DemoApp.Migrations +{ + public partial class init : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "AbpClaimTypes", + columns: table => new + { + Id = table.Column(type: "uniqueidentifier", nullable: false), + Name = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), + Required = table.Column(type: "bit", nullable: false), + IsStatic = table.Column(type: "bit", nullable: false), + Regex = table.Column(type: "nvarchar(512)", maxLength: 512, nullable: true), + RegexDescription = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: true), + Description = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), + ValueType = table.Column(type: "int", nullable: false), + ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true), + ConcurrencyStamp = table.Column(type: "nvarchar(40)", maxLength: 40, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpClaimTypes", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AbpLinkUsers", + columns: table => new + { + Id = table.Column(type: "uniqueidentifier", nullable: false), + SourceUserId = table.Column(type: "uniqueidentifier", nullable: false), + SourceTenantId = table.Column(type: "uniqueidentifier", nullable: true), + TargetUserId = table.Column(type: "uniqueidentifier", nullable: false), + TargetTenantId = table.Column(type: "uniqueidentifier", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpLinkUsers", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AbpOrganizationUnits", + columns: table => new + { + Id = table.Column(type: "uniqueidentifier", nullable: false), + TenantId = table.Column(type: "uniqueidentifier", nullable: true), + ParentId = table.Column(type: "uniqueidentifier", nullable: true), + Code = table.Column(type: "nvarchar(95)", maxLength: 95, nullable: false), + DisplayName = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), + ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true), + ConcurrencyStamp = table.Column(type: "nvarchar(40)", maxLength: 40, nullable: true), + CreationTime = table.Column(type: "datetime2", nullable: false), + CreatorId = table.Column(type: "uniqueidentifier", nullable: true), + LastModificationTime = table.Column(type: "datetime2", nullable: true), + LastModifierId = table.Column(type: "uniqueidentifier", nullable: true), + IsDeleted = table.Column(type: "bit", nullable: false, defaultValue: false), + DeleterId = table.Column(type: "uniqueidentifier", nullable: true), + DeletionTime = table.Column(type: "datetime2", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpOrganizationUnits", x => x.Id); + table.ForeignKey( + name: "FK_AbpOrganizationUnits_AbpOrganizationUnits_ParentId", + column: x => x.ParentId, + principalTable: "AbpOrganizationUnits", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + }); + + migrationBuilder.CreateTable( + name: "AbpPermissionGrants", + columns: table => new + { + Id = table.Column(type: "uniqueidentifier", nullable: false), + TenantId = table.Column(type: "uniqueidentifier", nullable: true), + Name = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), + ProviderName = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: false), + ProviderKey = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpPermissionGrants", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AbpRoles", + columns: table => new + { + Id = table.Column(type: "uniqueidentifier", nullable: false), + TenantId = table.Column(type: "uniqueidentifier", nullable: true), + Name = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), + NormalizedName = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), + IsDefault = table.Column(type: "bit", nullable: false), + IsStatic = table.Column(type: "bit", nullable: false), + IsPublic = table.Column(type: "bit", nullable: false), + ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true), + ConcurrencyStamp = table.Column(type: "nvarchar(40)", maxLength: 40, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpRoles", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AbpSecurityLogs", + columns: table => new + { + Id = table.Column(type: "uniqueidentifier", nullable: false), + TenantId = table.Column(type: "uniqueidentifier", nullable: true), + ApplicationName = table.Column(type: "nvarchar(96)", maxLength: 96, nullable: true), + Identity = table.Column(type: "nvarchar(96)", maxLength: 96, nullable: true), + Action = table.Column(type: "nvarchar(96)", maxLength: 96, nullable: true), + UserId = table.Column(type: "uniqueidentifier", nullable: true), + UserName = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), + TenantName = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: true), + ClientId = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: true), + CorrelationId = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: true), + ClientIpAddress = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: true), + BrowserInfo = table.Column(type: "nvarchar(512)", maxLength: 512, nullable: true), + CreationTime = table.Column(type: "datetime2", nullable: false), + ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true), + ConcurrencyStamp = table.Column(type: "nvarchar(40)", maxLength: 40, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpSecurityLogs", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AbpSettings", + columns: table => new + { + Id = table.Column(type: "uniqueidentifier", nullable: false), + Name = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), + Value = table.Column(type: "nvarchar(2048)", maxLength: 2048, nullable: false), + ProviderName = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: true), + ProviderKey = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpSettings", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AbpUsers", + columns: table => new + { + Id = table.Column(type: "uniqueidentifier", nullable: false), + TenantId = table.Column(type: "uniqueidentifier", nullable: true), + UserName = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), + NormalizedUserName = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), + Name = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: true), + Surname = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: true), + Email = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), + NormalizedEmail = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), + EmailConfirmed = table.Column(type: "bit", nullable: false, defaultValue: false), + PasswordHash = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), + SecurityStamp = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), + IsExternal = table.Column(type: "bit", nullable: false, defaultValue: false), + PhoneNumber = table.Column(type: "nvarchar(16)", maxLength: 16, nullable: true), + PhoneNumberConfirmed = table.Column(type: "bit", nullable: false, defaultValue: false), + TwoFactorEnabled = table.Column(type: "bit", nullable: false, defaultValue: false), + LockoutEnd = table.Column(type: "datetimeoffset", nullable: true), + LockoutEnabled = table.Column(type: "bit", nullable: false, defaultValue: false), + AccessFailedCount = table.Column(type: "int", nullable: false, defaultValue: 0), + ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true), + ConcurrencyStamp = table.Column(type: "nvarchar(40)", maxLength: 40, nullable: true), + CreationTime = table.Column(type: "datetime2", nullable: false), + CreatorId = table.Column(type: "uniqueidentifier", nullable: true), + LastModificationTime = table.Column(type: "datetime2", nullable: true), + LastModifierId = table.Column(type: "uniqueidentifier", nullable: true), + IsDeleted = table.Column(type: "bit", nullable: false, defaultValue: false), + DeleterId = table.Column(type: "uniqueidentifier", nullable: true), + DeletionTime = table.Column(type: "datetime2", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpUsers", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AbpOrganizationUnitRoles", + columns: table => new + { + RoleId = table.Column(type: "uniqueidentifier", nullable: false), + OrganizationUnitId = table.Column(type: "uniqueidentifier", nullable: false), + TenantId = table.Column(type: "uniqueidentifier", nullable: true), + CreationTime = table.Column(type: "datetime2", nullable: false), + CreatorId = table.Column(type: "uniqueidentifier", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpOrganizationUnitRoles", x => new { x.OrganizationUnitId, x.RoleId }); + table.ForeignKey( + name: "FK_AbpOrganizationUnitRoles_AbpOrganizationUnits_OrganizationUnitId", + column: x => x.OrganizationUnitId, + principalTable: "AbpOrganizationUnits", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_AbpOrganizationUnitRoles_AbpRoles_RoleId", + column: x => x.RoleId, + principalTable: "AbpRoles", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "AbpRoleClaims", + columns: table => new + { + Id = table.Column(type: "uniqueidentifier", nullable: false), + RoleId = table.Column(type: "uniqueidentifier", nullable: false), + TenantId = table.Column(type: "uniqueidentifier", nullable: true), + ClaimType = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), + ClaimValue = table.Column(type: "nvarchar(1024)", maxLength: 1024, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpRoleClaims", x => x.Id); + table.ForeignKey( + name: "FK_AbpRoleClaims_AbpRoles_RoleId", + column: x => x.RoleId, + principalTable: "AbpRoles", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "AbpUserClaims", + columns: table => new + { + Id = table.Column(type: "uniqueidentifier", nullable: false), + UserId = table.Column(type: "uniqueidentifier", nullable: false), + TenantId = table.Column(type: "uniqueidentifier", nullable: true), + ClaimType = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), + ClaimValue = table.Column(type: "nvarchar(1024)", maxLength: 1024, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpUserClaims", x => x.Id); + table.ForeignKey( + name: "FK_AbpUserClaims_AbpUsers_UserId", + column: x => x.UserId, + principalTable: "AbpUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "AbpUserLogins", + columns: table => new + { + UserId = table.Column(type: "uniqueidentifier", nullable: false), + LoginProvider = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: false), + TenantId = table.Column(type: "uniqueidentifier", nullable: true), + ProviderKey = table.Column(type: "nvarchar(196)", maxLength: 196, nullable: false), + ProviderDisplayName = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpUserLogins", x => new { x.UserId, x.LoginProvider }); + table.ForeignKey( + name: "FK_AbpUserLogins_AbpUsers_UserId", + column: x => x.UserId, + principalTable: "AbpUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "AbpUserOrganizationUnits", + columns: table => new + { + UserId = table.Column(type: "uniqueidentifier", nullable: false), + OrganizationUnitId = table.Column(type: "uniqueidentifier", nullable: false), + TenantId = table.Column(type: "uniqueidentifier", nullable: true), + CreationTime = table.Column(type: "datetime2", nullable: false), + CreatorId = table.Column(type: "uniqueidentifier", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpUserOrganizationUnits", x => new { x.OrganizationUnitId, x.UserId }); + table.ForeignKey( + name: "FK_AbpUserOrganizationUnits_AbpOrganizationUnits_OrganizationUnitId", + column: x => x.OrganizationUnitId, + principalTable: "AbpOrganizationUnits", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_AbpUserOrganizationUnits_AbpUsers_UserId", + column: x => x.UserId, + principalTable: "AbpUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "AbpUserRoles", + columns: table => new + { + UserId = table.Column(type: "uniqueidentifier", nullable: false), + RoleId = table.Column(type: "uniqueidentifier", nullable: false), + TenantId = table.Column(type: "uniqueidentifier", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpUserRoles", x => new { x.UserId, x.RoleId }); + table.ForeignKey( + name: "FK_AbpUserRoles_AbpRoles_RoleId", + column: x => x.RoleId, + principalTable: "AbpRoles", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_AbpUserRoles_AbpUsers_UserId", + column: x => x.UserId, + principalTable: "AbpUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "AbpUserTokens", + columns: table => new + { + UserId = table.Column(type: "uniqueidentifier", nullable: false), + LoginProvider = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: false), + Name = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), + TenantId = table.Column(type: "uniqueidentifier", nullable: true), + Value = table.Column(type: "nvarchar(max)", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpUserTokens", x => new { x.UserId, x.LoginProvider, x.Name }); + table.ForeignKey( + name: "FK_AbpUserTokens_AbpUsers_UserId", + column: x => x.UserId, + principalTable: "AbpUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateIndex( + name: "IX_AbpLinkUsers_SourceUserId_SourceTenantId_TargetUserId_TargetTenantId", + table: "AbpLinkUsers", + columns: new[] { "SourceUserId", "SourceTenantId", "TargetUserId", "TargetTenantId" }, + unique: true, + filter: "[SourceTenantId] IS NOT NULL AND [TargetTenantId] IS NOT NULL"); + + migrationBuilder.CreateIndex( + name: "IX_AbpOrganizationUnitRoles_RoleId_OrganizationUnitId", + table: "AbpOrganizationUnitRoles", + columns: new[] { "RoleId", "OrganizationUnitId" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpOrganizationUnits_Code", + table: "AbpOrganizationUnits", + column: "Code"); + + migrationBuilder.CreateIndex( + name: "IX_AbpOrganizationUnits_ParentId", + table: "AbpOrganizationUnits", + column: "ParentId"); + + migrationBuilder.CreateIndex( + name: "IX_AbpPermissionGrants_Name_ProviderName_ProviderKey", + table: "AbpPermissionGrants", + columns: new[] { "Name", "ProviderName", "ProviderKey" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpRoleClaims_RoleId", + table: "AbpRoleClaims", + column: "RoleId"); + + migrationBuilder.CreateIndex( + name: "IX_AbpRoles_NormalizedName", + table: "AbpRoles", + column: "NormalizedName"); + + migrationBuilder.CreateIndex( + name: "IX_AbpSecurityLogs_TenantId_Action", + table: "AbpSecurityLogs", + columns: new[] { "TenantId", "Action" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpSecurityLogs_TenantId_ApplicationName", + table: "AbpSecurityLogs", + columns: new[] { "TenantId", "ApplicationName" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpSecurityLogs_TenantId_Identity", + table: "AbpSecurityLogs", + columns: new[] { "TenantId", "Identity" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpSecurityLogs_TenantId_UserId", + table: "AbpSecurityLogs", + columns: new[] { "TenantId", "UserId" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpSettings_Name_ProviderName_ProviderKey", + table: "AbpSettings", + columns: new[] { "Name", "ProviderName", "ProviderKey" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpUserClaims_UserId", + table: "AbpUserClaims", + column: "UserId"); + + migrationBuilder.CreateIndex( + name: "IX_AbpUserLogins_LoginProvider_ProviderKey", + table: "AbpUserLogins", + columns: new[] { "LoginProvider", "ProviderKey" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpUserOrganizationUnits_UserId_OrganizationUnitId", + table: "AbpUserOrganizationUnits", + columns: new[] { "UserId", "OrganizationUnitId" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpUserRoles_RoleId_UserId", + table: "AbpUserRoles", + columns: new[] { "RoleId", "UserId" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpUsers_Email", + table: "AbpUsers", + column: "Email"); + + migrationBuilder.CreateIndex( + name: "IX_AbpUsers_NormalizedEmail", + table: "AbpUsers", + column: "NormalizedEmail"); + + migrationBuilder.CreateIndex( + name: "IX_AbpUsers_NormalizedUserName", + table: "AbpUsers", + column: "NormalizedUserName"); + + migrationBuilder.CreateIndex( + name: "IX_AbpUsers_UserName", + table: "AbpUsers", + column: "UserName"); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "AbpClaimTypes"); + + migrationBuilder.DropTable( + name: "AbpLinkUsers"); + + migrationBuilder.DropTable( + name: "AbpOrganizationUnitRoles"); + + migrationBuilder.DropTable( + name: "AbpPermissionGrants"); + + migrationBuilder.DropTable( + name: "AbpRoleClaims"); + + migrationBuilder.DropTable( + name: "AbpSecurityLogs"); + + migrationBuilder.DropTable( + name: "AbpSettings"); + + migrationBuilder.DropTable( + name: "AbpUserClaims"); + + migrationBuilder.DropTable( + name: "AbpUserLogins"); + + migrationBuilder.DropTable( + name: "AbpUserOrganizationUnits"); + + migrationBuilder.DropTable( + name: "AbpUserRoles"); + + migrationBuilder.DropTable( + name: "AbpUserTokens"); + + migrationBuilder.DropTable( + name: "AbpOrganizationUnits"); + + migrationBuilder.DropTable( + name: "AbpRoles"); + + migrationBuilder.DropTable( + name: "AbpUsers"); + } + } +} diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/Migrations/DemoAppDbContextModelSnapshot.cs b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/Migrations/DemoAppDbContextModelSnapshot.cs new file mode 100644 index 0000000000..72995d69a7 --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/Migrations/DemoAppDbContextModelSnapshot.cs @@ -0,0 +1,807 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Volo.Abp.EntityFrameworkCore; +using Volo.Abp.SettingManagement.DemoApp; + +namespace Volo.Abp.SettingManagement.DemoApp.Migrations +{ + [DbContext(typeof(DemoAppDbContext))] + partial class DemoAppDbContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .UseIdentityColumns() + .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) + .HasAnnotation("Relational:MaxIdentifierLength", 128) + .HasAnnotation("ProductVersion", "5.0.2"); + + 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"); + }); + + 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"); + }); + + 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"); + }); + + 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"); + }); + + 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"); + }); + + 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("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"); + }); + + 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"); + }); + + 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"); + }); + + 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"); + }); + + 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"); + }); + + 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"); + }); + + 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"); + }); + + 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"); + }); + + 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("Name", "ProviderName", "ProviderKey"); + + b.ToTable("AbpPermissionGrants"); + }); + + 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"); + + b.ToTable("AbpSettings"); + }); + + 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.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"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/Pages/Index.cshtml b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/Pages/Index.cshtml new file mode 100644 index 0000000000..3a7083d68f --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/Pages/Index.cshtml @@ -0,0 +1,10 @@ +@page +@using Volo.Abp.Users +@model Volo.Abp.SettingManagement.DemoApp.Pages.IndexModel +@inject ICurrentUser CurrentUser + +

Welcome to the SettingManagement demo application.

+@if (!CurrentUser.IsAuthenticated) +{ + Login +} diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/Pages/Index.cshtml.cs b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/Pages/Index.cshtml.cs new file mode 100644 index 0000000000..14e4b728a3 --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/Pages/Index.cshtml.cs @@ -0,0 +1,11 @@ +using Microsoft.AspNetCore.Mvc.RazorPages; + +namespace Volo.Abp.SettingManagement.DemoApp.Pages +{ + public class IndexModel : PageModel + { + public void OnGet() + { + } + } +} diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/Pages/_ViewImports.cshtml b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/Pages/_ViewImports.cshtml new file mode 100644 index 0000000000..c1da1f5f10 --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/Pages/_ViewImports.cshtml @@ -0,0 +1,4 @@ +@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers +@addTagHelper *, Volo.Abp.AspNetCore.Mvc.UI +@addTagHelper *, Volo.Abp.AspNetCore.Mvc.UI.Bootstrap +@addTagHelper *, Volo.Abp.AspNetCore.Mvc.UI.Bundling \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/Program.cs b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/Program.cs new file mode 100644 index 0000000000..19907d2ee5 --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/Program.cs @@ -0,0 +1,47 @@ +using System; +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Hosting; +using Serilog; +using Serilog.Events; + +namespace Volo.Abp.SettingManagement.DemoApp +{ + public class Program + { + public static int Main(string[] args) + { + Log.Logger = new LoggerConfiguration() + .MinimumLevel.Debug() + .MinimumLevel.Override("Microsoft", LogEventLevel.Information) + .MinimumLevel.Override("Microsoft.EntityFrameworkCore", LogEventLevel.Warning) + .Enrich.FromLogContext() + .WriteTo.File("Logs/logs.txt") + .CreateLogger(); + + try + { + Log.Information("Starting web host."); + CreateHostBuilder(args).Build().Run(); + return 0; + } + catch (Exception ex) + { + Log.Fatal(ex, "Host terminated unexpectedly!"); + return 1; + } + finally + { + Log.CloseAndFlush(); + } + } + + internal static IHostBuilder CreateHostBuilder(string[] args) => + Host.CreateDefaultBuilder(args) + .ConfigureWebHostDefaults(webBuilder => + { + webBuilder.UseStartup(); + }) + .UseAutofac() + .UseSerilog(); + } +} diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/Properties/launchSettings.json b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/Properties/launchSettings.json new file mode 100644 index 0000000000..ee96111e8e --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/Properties/launchSettings.json @@ -0,0 +1,28 @@ +{ + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:63774", + "sslPort": 44396 + } + }, + "profiles": { + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "Volo.Abp.SettingManagement.DemoApp": { + "commandName": "Project", + "dotnetRunMessages": "true", + "launchBrowser": true, + "applicationUrl": "https://localhost:5001;http://localhost:5000", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/Startup.cs b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/Startup.cs new file mode 100644 index 0000000000..50b57f668a --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/Startup.cs @@ -0,0 +1,20 @@ +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; + +namespace Volo.Abp.SettingManagement.DemoApp +{ + public class Startup + { + public void ConfigureServices(IServiceCollection services) + { + services.AddApplication(); + } + + public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory) + { + app.InitializeApplication(); + } + } +} diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/Volo.Abp.SettingManagement.DemoApp.csproj b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/Volo.Abp.SettingManagement.DemoApp.csproj new file mode 100644 index 0000000000..b07c6bb8ae --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/Volo.Abp.SettingManagement.DemoApp.csproj @@ -0,0 +1,63 @@ + + + + + + net5.0 + InProcess + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Always + + + Always + + + + + <_ContentIncludedByDefault Remove="Pages\Error.cshtml" /> + <_ContentIncludedByDefault Remove="Pages\Index.cshtml" /> + <_ContentIncludedByDefault Remove="Pages\Privacy.cshtml" /> + <_ContentIncludedByDefault Remove="Pages\Shared\_Layout.cshtml" /> + <_ContentIncludedByDefault Remove="Pages\Shared\_ValidationScriptsPartial.cshtml" /> + <_ContentIncludedByDefault Remove="Pages\_ViewImports.cshtml" /> + <_ContentIncludedByDefault Remove="Pages\_ViewStart.cshtml" /> + + + diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/abp.resourcemapping.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/abp.resourcemapping.js new file mode 100644 index 0000000000..56d68b1b51 --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/abp.resourcemapping.js @@ -0,0 +1,12 @@ +module.exports = { + aliases: { + "@node_modules": "./node_modules", + "@libs": "./wwwroot/libs" + }, + clean: [ + "@libs" + ], + mappings: { + + } +} \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/appsettings.Development.json b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/appsettings.Development.json new file mode 100644 index 0000000000..51737579ef --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/appsettings.Development.json @@ -0,0 +1,10 @@ +{ + "DetailedErrors": true, + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft": "Warning", + "Microsoft.Hosting.Lifetime": "Information" + } + } +} diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/appsettings.json b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/appsettings.json new file mode 100644 index 0000000000..6de3c41adf --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/appsettings.json @@ -0,0 +1,5 @@ +{ + "ConnectionStrings": { + "Default": "Server=(LocalDb)\\MSSQLLocalDB;Database=SettingManagementDemoApp;Trusted_Connection=True" + } +} diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/gulpfile.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/gulpfile.js new file mode 100644 index 0000000000..5dcf4c5c6f --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/gulpfile.js @@ -0,0 +1,9 @@ +"use strict"; + +var gulp = require("gulp"), + path = require('path'), + copyResources = require('./node_modules/@abp/aspnetcore.mvc.ui/gulp/copy-resources.js'); + +exports.default = function(){ + return copyResources(path.resolve('./')); +}; \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/package.json b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/package.json new file mode 100644 index 0000000000..83a2d8ef83 --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/package.json @@ -0,0 +1,8 @@ +{ + "version": "0.1.0", + "name": "demo-app", + "private": true, + "dependencies": { + "@abp/aspnetcore.mvc.ui.theme.basic": "^4.2.0" + } +} diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/css/all.css b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/css/all.css new file mode 100644 index 0000000000..b33b27dd9a --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/css/all.css @@ -0,0 +1,4619 @@ +/*! + * Font Awesome Free 5.15.2 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + */ +.fa, +.fas, +.far, +.fal, +.fad, +.fab { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + display: inline-block; + font-style: normal; + font-variant: normal; + text-rendering: auto; + line-height: 1; } + +.fa-lg { + font-size: 1.33333em; + line-height: 0.75em; + vertical-align: -.0667em; } + +.fa-xs { + font-size: .75em; } + +.fa-sm { + font-size: .875em; } + +.fa-1x { + font-size: 1em; } + +.fa-2x { + font-size: 2em; } + +.fa-3x { + font-size: 3em; } + +.fa-4x { + font-size: 4em; } + +.fa-5x { + font-size: 5em; } + +.fa-6x { + font-size: 6em; } + +.fa-7x { + font-size: 7em; } + +.fa-8x { + font-size: 8em; } + +.fa-9x { + font-size: 9em; } + +.fa-10x { + font-size: 10em; } + +.fa-fw { + text-align: center; + width: 1.25em; } + +.fa-ul { + list-style-type: none; + margin-left: 2.5em; + padding-left: 0; } + .fa-ul > li { + position: relative; } + +.fa-li { + left: -2em; + position: absolute; + text-align: center; + width: 2em; + line-height: inherit; } + +.fa-border { + border: solid 0.08em #eee; + border-radius: .1em; + padding: .2em .25em .15em; } + +.fa-pull-left { + float: left; } + +.fa-pull-right { + float: right; } + +.fa.fa-pull-left, +.fas.fa-pull-left, +.far.fa-pull-left, +.fal.fa-pull-left, +.fab.fa-pull-left { + margin-right: .3em; } + +.fa.fa-pull-right, +.fas.fa-pull-right, +.far.fa-pull-right, +.fal.fa-pull-right, +.fab.fa-pull-right { + margin-left: .3em; } + +.fa-spin { + -webkit-animation: fa-spin 2s infinite linear; + animation: fa-spin 2s infinite linear; } + +.fa-pulse { + -webkit-animation: fa-spin 1s infinite steps(8); + animation: fa-spin 1s infinite steps(8); } + +@-webkit-keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +@keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +.fa-rotate-90 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)"; + -webkit-transform: rotate(90deg); + transform: rotate(90deg); } + +.fa-rotate-180 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)"; + -webkit-transform: rotate(180deg); + transform: rotate(180deg); } + +.fa-rotate-270 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)"; + -webkit-transform: rotate(270deg); + transform: rotate(270deg); } + +.fa-flip-horizontal { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)"; + -webkit-transform: scale(-1, 1); + transform: scale(-1, 1); } + +.fa-flip-vertical { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"; + -webkit-transform: scale(1, -1); + transform: scale(1, -1); } + +.fa-flip-both, .fa-flip-horizontal.fa-flip-vertical { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"; + -webkit-transform: scale(-1, -1); + transform: scale(-1, -1); } + +:root .fa-rotate-90, +:root .fa-rotate-180, +:root .fa-rotate-270, +:root .fa-flip-horizontal, +:root .fa-flip-vertical, +:root .fa-flip-both { + -webkit-filter: none; + filter: none; } + +.fa-stack { + display: inline-block; + height: 2em; + line-height: 2em; + position: relative; + vertical-align: middle; + width: 2.5em; } + +.fa-stack-1x, +.fa-stack-2x { + left: 0; + position: absolute; + text-align: center; + width: 100%; } + +.fa-stack-1x { + line-height: inherit; } + +.fa-stack-2x { + font-size: 2em; } + +.fa-inverse { + color: #fff; } + +/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen +readers do not read off random characters that represent icons */ +.fa-500px:before { + content: "\f26e"; } + +.fa-accessible-icon:before { + content: "\f368"; } + +.fa-accusoft:before { + content: "\f369"; } + +.fa-acquisitions-incorporated:before { + content: "\f6af"; } + +.fa-ad:before { + content: "\f641"; } + +.fa-address-book:before { + content: "\f2b9"; } + +.fa-address-card:before { + content: "\f2bb"; } + +.fa-adjust:before { + content: "\f042"; } + +.fa-adn:before { + content: "\f170"; } + +.fa-adversal:before { + content: "\f36a"; } + +.fa-affiliatetheme:before { + content: "\f36b"; } + +.fa-air-freshener:before { + content: "\f5d0"; } + +.fa-airbnb:before { + content: "\f834"; } + +.fa-algolia:before { + content: "\f36c"; } + +.fa-align-center:before { + content: "\f037"; } + +.fa-align-justify:before { + content: "\f039"; } + +.fa-align-left:before { + content: "\f036"; } + +.fa-align-right:before { + content: "\f038"; } + +.fa-alipay:before { + content: "\f642"; } + +.fa-allergies:before { + content: "\f461"; } + +.fa-amazon:before { + content: "\f270"; } + +.fa-amazon-pay:before { + content: "\f42c"; } + +.fa-ambulance:before { + content: "\f0f9"; } + +.fa-american-sign-language-interpreting:before { + content: "\f2a3"; } + +.fa-amilia:before { + content: "\f36d"; } + +.fa-anchor:before { + content: "\f13d"; } + +.fa-android:before { + content: "\f17b"; } + +.fa-angellist:before { + content: "\f209"; } + +.fa-angle-double-down:before { + content: "\f103"; } + +.fa-angle-double-left:before { + content: "\f100"; } + +.fa-angle-double-right:before { + content: "\f101"; } + +.fa-angle-double-up:before { + content: "\f102"; } + +.fa-angle-down:before { + content: "\f107"; } + +.fa-angle-left:before { + content: "\f104"; } + +.fa-angle-right:before { + content: "\f105"; } + +.fa-angle-up:before { + content: "\f106"; } + +.fa-angry:before { + content: "\f556"; } + +.fa-angrycreative:before { + content: "\f36e"; } + +.fa-angular:before { + content: "\f420"; } + +.fa-ankh:before { + content: "\f644"; } + +.fa-app-store:before { + content: "\f36f"; } + +.fa-app-store-ios:before { + content: "\f370"; } + +.fa-apper:before { + content: "\f371"; } + +.fa-apple:before { + content: "\f179"; } + +.fa-apple-alt:before { + content: "\f5d1"; } + +.fa-apple-pay:before { + content: "\f415"; } + +.fa-archive:before { + content: "\f187"; } + +.fa-archway:before { + content: "\f557"; } + +.fa-arrow-alt-circle-down:before { + content: "\f358"; } + +.fa-arrow-alt-circle-left:before { + content: "\f359"; } + +.fa-arrow-alt-circle-right:before { + content: "\f35a"; } + +.fa-arrow-alt-circle-up:before { + content: "\f35b"; } + +.fa-arrow-circle-down:before { + content: "\f0ab"; } + +.fa-arrow-circle-left:before { + content: "\f0a8"; } + +.fa-arrow-circle-right:before { + content: "\f0a9"; } + +.fa-arrow-circle-up:before { + content: "\f0aa"; } + +.fa-arrow-down:before { + content: "\f063"; } + +.fa-arrow-left:before { + content: "\f060"; } + +.fa-arrow-right:before { + content: "\f061"; } + +.fa-arrow-up:before { + content: "\f062"; } + +.fa-arrows-alt:before { + content: "\f0b2"; } + +.fa-arrows-alt-h:before { + content: "\f337"; } + +.fa-arrows-alt-v:before { + content: "\f338"; } + +.fa-artstation:before { + content: "\f77a"; } + +.fa-assistive-listening-systems:before { + content: "\f2a2"; } + +.fa-asterisk:before { + content: "\f069"; } + +.fa-asymmetrik:before { + content: "\f372"; } + +.fa-at:before { + content: "\f1fa"; } + +.fa-atlas:before { + content: "\f558"; } + +.fa-atlassian:before { + content: "\f77b"; } + +.fa-atom:before { + content: "\f5d2"; } + +.fa-audible:before { + content: "\f373"; } + +.fa-audio-description:before { + content: "\f29e"; } + +.fa-autoprefixer:before { + content: "\f41c"; } + +.fa-avianex:before { + content: "\f374"; } + +.fa-aviato:before { + content: "\f421"; } + +.fa-award:before { + content: "\f559"; } + +.fa-aws:before { + content: "\f375"; } + +.fa-baby:before { + content: "\f77c"; } + +.fa-baby-carriage:before { + content: "\f77d"; } + +.fa-backspace:before { + content: "\f55a"; } + +.fa-backward:before { + content: "\f04a"; } + +.fa-bacon:before { + content: "\f7e5"; } + +.fa-bacteria:before { + content: "\e059"; } + +.fa-bacterium:before { + content: "\e05a"; } + +.fa-bahai:before { + content: "\f666"; } + +.fa-balance-scale:before { + content: "\f24e"; } + +.fa-balance-scale-left:before { + content: "\f515"; } + +.fa-balance-scale-right:before { + content: "\f516"; } + +.fa-ban:before { + content: "\f05e"; } + +.fa-band-aid:before { + content: "\f462"; } + +.fa-bandcamp:before { + content: "\f2d5"; } + +.fa-barcode:before { + content: "\f02a"; } + +.fa-bars:before { + content: "\f0c9"; } + +.fa-baseball-ball:before { + content: "\f433"; } + +.fa-basketball-ball:before { + content: "\f434"; } + +.fa-bath:before { + content: "\f2cd"; } + +.fa-battery-empty:before { + content: "\f244"; } + +.fa-battery-full:before { + content: "\f240"; } + +.fa-battery-half:before { + content: "\f242"; } + +.fa-battery-quarter:before { + content: "\f243"; } + +.fa-battery-three-quarters:before { + content: "\f241"; } + +.fa-battle-net:before { + content: "\f835"; } + +.fa-bed:before { + content: "\f236"; } + +.fa-beer:before { + content: "\f0fc"; } + +.fa-behance:before { + content: "\f1b4"; } + +.fa-behance-square:before { + content: "\f1b5"; } + +.fa-bell:before { + content: "\f0f3"; } + +.fa-bell-slash:before { + content: "\f1f6"; } + +.fa-bezier-curve:before { + content: "\f55b"; } + +.fa-bible:before { + content: "\f647"; } + +.fa-bicycle:before { + content: "\f206"; } + +.fa-biking:before { + content: "\f84a"; } + +.fa-bimobject:before { + content: "\f378"; } + +.fa-binoculars:before { + content: "\f1e5"; } + +.fa-biohazard:before { + content: "\f780"; } + +.fa-birthday-cake:before { + content: "\f1fd"; } + +.fa-bitbucket:before { + content: "\f171"; } + +.fa-bitcoin:before { + content: "\f379"; } + +.fa-bity:before { + content: "\f37a"; } + +.fa-black-tie:before { + content: "\f27e"; } + +.fa-blackberry:before { + content: "\f37b"; } + +.fa-blender:before { + content: "\f517"; } + +.fa-blender-phone:before { + content: "\f6b6"; } + +.fa-blind:before { + content: "\f29d"; } + +.fa-blog:before { + content: "\f781"; } + +.fa-blogger:before { + content: "\f37c"; } + +.fa-blogger-b:before { + content: "\f37d"; } + +.fa-bluetooth:before { + content: "\f293"; } + +.fa-bluetooth-b:before { + content: "\f294"; } + +.fa-bold:before { + content: "\f032"; } + +.fa-bolt:before { + content: "\f0e7"; } + +.fa-bomb:before { + content: "\f1e2"; } + +.fa-bone:before { + content: "\f5d7"; } + +.fa-bong:before { + content: "\f55c"; } + +.fa-book:before { + content: "\f02d"; } + +.fa-book-dead:before { + content: "\f6b7"; } + +.fa-book-medical:before { + content: "\f7e6"; } + +.fa-book-open:before { + content: "\f518"; } + +.fa-book-reader:before { + content: "\f5da"; } + +.fa-bookmark:before { + content: "\f02e"; } + +.fa-bootstrap:before { + content: "\f836"; } + +.fa-border-all:before { + content: "\f84c"; } + +.fa-border-none:before { + content: "\f850"; } + +.fa-border-style:before { + content: "\f853"; } + +.fa-bowling-ball:before { + content: "\f436"; } + +.fa-box:before { + content: "\f466"; } + +.fa-box-open:before { + content: "\f49e"; } + +.fa-box-tissue:before { + content: "\e05b"; } + +.fa-boxes:before { + content: "\f468"; } + +.fa-braille:before { + content: "\f2a1"; } + +.fa-brain:before { + content: "\f5dc"; } + +.fa-bread-slice:before { + content: "\f7ec"; } + +.fa-briefcase:before { + content: "\f0b1"; } + +.fa-briefcase-medical:before { + content: "\f469"; } + +.fa-broadcast-tower:before { + content: "\f519"; } + +.fa-broom:before { + content: "\f51a"; } + +.fa-brush:before { + content: "\f55d"; } + +.fa-btc:before { + content: "\f15a"; } + +.fa-buffer:before { + content: "\f837"; } + +.fa-bug:before { + content: "\f188"; } + +.fa-building:before { + content: "\f1ad"; } + +.fa-bullhorn:before { + content: "\f0a1"; } + +.fa-bullseye:before { + content: "\f140"; } + +.fa-burn:before { + content: "\f46a"; } + +.fa-buromobelexperte:before { + content: "\f37f"; } + +.fa-bus:before { + content: "\f207"; } + +.fa-bus-alt:before { + content: "\f55e"; } + +.fa-business-time:before { + content: "\f64a"; } + +.fa-buy-n-large:before { + content: "\f8a6"; } + +.fa-buysellads:before { + content: "\f20d"; } + +.fa-calculator:before { + content: "\f1ec"; } + +.fa-calendar:before { + content: "\f133"; } + +.fa-calendar-alt:before { + content: "\f073"; } + +.fa-calendar-check:before { + content: "\f274"; } + +.fa-calendar-day:before { + content: "\f783"; } + +.fa-calendar-minus:before { + content: "\f272"; } + +.fa-calendar-plus:before { + content: "\f271"; } + +.fa-calendar-times:before { + content: "\f273"; } + +.fa-calendar-week:before { + content: "\f784"; } + +.fa-camera:before { + content: "\f030"; } + +.fa-camera-retro:before { + content: "\f083"; } + +.fa-campground:before { + content: "\f6bb"; } + +.fa-canadian-maple-leaf:before { + content: "\f785"; } + +.fa-candy-cane:before { + content: "\f786"; } + +.fa-cannabis:before { + content: "\f55f"; } + +.fa-capsules:before { + content: "\f46b"; } + +.fa-car:before { + content: "\f1b9"; } + +.fa-car-alt:before { + content: "\f5de"; } + +.fa-car-battery:before { + content: "\f5df"; } + +.fa-car-crash:before { + content: "\f5e1"; } + +.fa-car-side:before { + content: "\f5e4"; } + +.fa-caravan:before { + content: "\f8ff"; } + +.fa-caret-down:before { + content: "\f0d7"; } + +.fa-caret-left:before { + content: "\f0d9"; } + +.fa-caret-right:before { + content: "\f0da"; } + +.fa-caret-square-down:before { + content: "\f150"; } + +.fa-caret-square-left:before { + content: "\f191"; } + +.fa-caret-square-right:before { + content: "\f152"; } + +.fa-caret-square-up:before { + content: "\f151"; } + +.fa-caret-up:before { + content: "\f0d8"; } + +.fa-carrot:before { + content: "\f787"; } + +.fa-cart-arrow-down:before { + content: "\f218"; } + +.fa-cart-plus:before { + content: "\f217"; } + +.fa-cash-register:before { + content: "\f788"; } + +.fa-cat:before { + content: "\f6be"; } + +.fa-cc-amazon-pay:before { + content: "\f42d"; } + +.fa-cc-amex:before { + content: "\f1f3"; } + +.fa-cc-apple-pay:before { + content: "\f416"; } + +.fa-cc-diners-club:before { + content: "\f24c"; } + +.fa-cc-discover:before { + content: "\f1f2"; } + +.fa-cc-jcb:before { + content: "\f24b"; } + +.fa-cc-mastercard:before { + content: "\f1f1"; } + +.fa-cc-paypal:before { + content: "\f1f4"; } + +.fa-cc-stripe:before { + content: "\f1f5"; } + +.fa-cc-visa:before { + content: "\f1f0"; } + +.fa-centercode:before { + content: "\f380"; } + +.fa-centos:before { + content: "\f789"; } + +.fa-certificate:before { + content: "\f0a3"; } + +.fa-chair:before { + content: "\f6c0"; } + +.fa-chalkboard:before { + content: "\f51b"; } + +.fa-chalkboard-teacher:before { + content: "\f51c"; } + +.fa-charging-station:before { + content: "\f5e7"; } + +.fa-chart-area:before { + content: "\f1fe"; } + +.fa-chart-bar:before { + content: "\f080"; } + +.fa-chart-line:before { + content: "\f201"; } + +.fa-chart-pie:before { + content: "\f200"; } + +.fa-check:before { + content: "\f00c"; } + +.fa-check-circle:before { + content: "\f058"; } + +.fa-check-double:before { + content: "\f560"; } + +.fa-check-square:before { + content: "\f14a"; } + +.fa-cheese:before { + content: "\f7ef"; } + +.fa-chess:before { + content: "\f439"; } + +.fa-chess-bishop:before { + content: "\f43a"; } + +.fa-chess-board:before { + content: "\f43c"; } + +.fa-chess-king:before { + content: "\f43f"; } + +.fa-chess-knight:before { + content: "\f441"; } + +.fa-chess-pawn:before { + content: "\f443"; } + +.fa-chess-queen:before { + content: "\f445"; } + +.fa-chess-rook:before { + content: "\f447"; } + +.fa-chevron-circle-down:before { + content: "\f13a"; } + +.fa-chevron-circle-left:before { + content: "\f137"; } + +.fa-chevron-circle-right:before { + content: "\f138"; } + +.fa-chevron-circle-up:before { + content: "\f139"; } + +.fa-chevron-down:before { + content: "\f078"; } + +.fa-chevron-left:before { + content: "\f053"; } + +.fa-chevron-right:before { + content: "\f054"; } + +.fa-chevron-up:before { + content: "\f077"; } + +.fa-child:before { + content: "\f1ae"; } + +.fa-chrome:before { + content: "\f268"; } + +.fa-chromecast:before { + content: "\f838"; } + +.fa-church:before { + content: "\f51d"; } + +.fa-circle:before { + content: "\f111"; } + +.fa-circle-notch:before { + content: "\f1ce"; } + +.fa-city:before { + content: "\f64f"; } + +.fa-clinic-medical:before { + content: "\f7f2"; } + +.fa-clipboard:before { + content: "\f328"; } + +.fa-clipboard-check:before { + content: "\f46c"; } + +.fa-clipboard-list:before { + content: "\f46d"; } + +.fa-clock:before { + content: "\f017"; } + +.fa-clone:before { + content: "\f24d"; } + +.fa-closed-captioning:before { + content: "\f20a"; } + +.fa-cloud:before { + content: "\f0c2"; } + +.fa-cloud-download-alt:before { + content: "\f381"; } + +.fa-cloud-meatball:before { + content: "\f73b"; } + +.fa-cloud-moon:before { + content: "\f6c3"; } + +.fa-cloud-moon-rain:before { + content: "\f73c"; } + +.fa-cloud-rain:before { + content: "\f73d"; } + +.fa-cloud-showers-heavy:before { + content: "\f740"; } + +.fa-cloud-sun:before { + content: "\f6c4"; } + +.fa-cloud-sun-rain:before { + content: "\f743"; } + +.fa-cloud-upload-alt:before { + content: "\f382"; } + +.fa-cloudflare:before { + content: "\e07d"; } + +.fa-cloudscale:before { + content: "\f383"; } + +.fa-cloudsmith:before { + content: "\f384"; } + +.fa-cloudversify:before { + content: "\f385"; } + +.fa-cocktail:before { + content: "\f561"; } + +.fa-code:before { + content: "\f121"; } + +.fa-code-branch:before { + content: "\f126"; } + +.fa-codepen:before { + content: "\f1cb"; } + +.fa-codiepie:before { + content: "\f284"; } + +.fa-coffee:before { + content: "\f0f4"; } + +.fa-cog:before { + content: "\f013"; } + +.fa-cogs:before { + content: "\f085"; } + +.fa-coins:before { + content: "\f51e"; } + +.fa-columns:before { + content: "\f0db"; } + +.fa-comment:before { + content: "\f075"; } + +.fa-comment-alt:before { + content: "\f27a"; } + +.fa-comment-dollar:before { + content: "\f651"; } + +.fa-comment-dots:before { + content: "\f4ad"; } + +.fa-comment-medical:before { + content: "\f7f5"; } + +.fa-comment-slash:before { + content: "\f4b3"; } + +.fa-comments:before { + content: "\f086"; } + +.fa-comments-dollar:before { + content: "\f653"; } + +.fa-compact-disc:before { + content: "\f51f"; } + +.fa-compass:before { + content: "\f14e"; } + +.fa-compress:before { + content: "\f066"; } + +.fa-compress-alt:before { + content: "\f422"; } + +.fa-compress-arrows-alt:before { + content: "\f78c"; } + +.fa-concierge-bell:before { + content: "\f562"; } + +.fa-confluence:before { + content: "\f78d"; } + +.fa-connectdevelop:before { + content: "\f20e"; } + +.fa-contao:before { + content: "\f26d"; } + +.fa-cookie:before { + content: "\f563"; } + +.fa-cookie-bite:before { + content: "\f564"; } + +.fa-copy:before { + content: "\f0c5"; } + +.fa-copyright:before { + content: "\f1f9"; } + +.fa-cotton-bureau:before { + content: "\f89e"; } + +.fa-couch:before { + content: "\f4b8"; } + +.fa-cpanel:before { + content: "\f388"; } + +.fa-creative-commons:before { + content: "\f25e"; } + +.fa-creative-commons-by:before { + content: "\f4e7"; } + +.fa-creative-commons-nc:before { + content: "\f4e8"; } + +.fa-creative-commons-nc-eu:before { + content: "\f4e9"; } + +.fa-creative-commons-nc-jp:before { + content: "\f4ea"; } + +.fa-creative-commons-nd:before { + content: "\f4eb"; } + +.fa-creative-commons-pd:before { + content: "\f4ec"; } + +.fa-creative-commons-pd-alt:before { + content: "\f4ed"; } + +.fa-creative-commons-remix:before { + content: "\f4ee"; } + +.fa-creative-commons-sa:before { + content: "\f4ef"; } + +.fa-creative-commons-sampling:before { + content: "\f4f0"; } + +.fa-creative-commons-sampling-plus:before { + content: "\f4f1"; } + +.fa-creative-commons-share:before { + content: "\f4f2"; } + +.fa-creative-commons-zero:before { + content: "\f4f3"; } + +.fa-credit-card:before { + content: "\f09d"; } + +.fa-critical-role:before { + content: "\f6c9"; } + +.fa-crop:before { + content: "\f125"; } + +.fa-crop-alt:before { + content: "\f565"; } + +.fa-cross:before { + content: "\f654"; } + +.fa-crosshairs:before { + content: "\f05b"; } + +.fa-crow:before { + content: "\f520"; } + +.fa-crown:before { + content: "\f521"; } + +.fa-crutch:before { + content: "\f7f7"; } + +.fa-css3:before { + content: "\f13c"; } + +.fa-css3-alt:before { + content: "\f38b"; } + +.fa-cube:before { + content: "\f1b2"; } + +.fa-cubes:before { + content: "\f1b3"; } + +.fa-cut:before { + content: "\f0c4"; } + +.fa-cuttlefish:before { + content: "\f38c"; } + +.fa-d-and-d:before { + content: "\f38d"; } + +.fa-d-and-d-beyond:before { + content: "\f6ca"; } + +.fa-dailymotion:before { + content: "\e052"; } + +.fa-dashcube:before { + content: "\f210"; } + +.fa-database:before { + content: "\f1c0"; } + +.fa-deaf:before { + content: "\f2a4"; } + +.fa-deezer:before { + content: "\e077"; } + +.fa-delicious:before { + content: "\f1a5"; } + +.fa-democrat:before { + content: "\f747"; } + +.fa-deploydog:before { + content: "\f38e"; } + +.fa-deskpro:before { + content: "\f38f"; } + +.fa-desktop:before { + content: "\f108"; } + +.fa-dev:before { + content: "\f6cc"; } + +.fa-deviantart:before { + content: "\f1bd"; } + +.fa-dharmachakra:before { + content: "\f655"; } + +.fa-dhl:before { + content: "\f790"; } + +.fa-diagnoses:before { + content: "\f470"; } + +.fa-diaspora:before { + content: "\f791"; } + +.fa-dice:before { + content: "\f522"; } + +.fa-dice-d20:before { + content: "\f6cf"; } + +.fa-dice-d6:before { + content: "\f6d1"; } + +.fa-dice-five:before { + content: "\f523"; } + +.fa-dice-four:before { + content: "\f524"; } + +.fa-dice-one:before { + content: "\f525"; } + +.fa-dice-six:before { + content: "\f526"; } + +.fa-dice-three:before { + content: "\f527"; } + +.fa-dice-two:before { + content: "\f528"; } + +.fa-digg:before { + content: "\f1a6"; } + +.fa-digital-ocean:before { + content: "\f391"; } + +.fa-digital-tachograph:before { + content: "\f566"; } + +.fa-directions:before { + content: "\f5eb"; } + +.fa-discord:before { + content: "\f392"; } + +.fa-discourse:before { + content: "\f393"; } + +.fa-disease:before { + content: "\f7fa"; } + +.fa-divide:before { + content: "\f529"; } + +.fa-dizzy:before { + content: "\f567"; } + +.fa-dna:before { + content: "\f471"; } + +.fa-dochub:before { + content: "\f394"; } + +.fa-docker:before { + content: "\f395"; } + +.fa-dog:before { + content: "\f6d3"; } + +.fa-dollar-sign:before { + content: "\f155"; } + +.fa-dolly:before { + content: "\f472"; } + +.fa-dolly-flatbed:before { + content: "\f474"; } + +.fa-donate:before { + content: "\f4b9"; } + +.fa-door-closed:before { + content: "\f52a"; } + +.fa-door-open:before { + content: "\f52b"; } + +.fa-dot-circle:before { + content: "\f192"; } + +.fa-dove:before { + content: "\f4ba"; } + +.fa-download:before { + content: "\f019"; } + +.fa-draft2digital:before { + content: "\f396"; } + +.fa-drafting-compass:before { + content: "\f568"; } + +.fa-dragon:before { + content: "\f6d5"; } + +.fa-draw-polygon:before { + content: "\f5ee"; } + +.fa-dribbble:before { + content: "\f17d"; } + +.fa-dribbble-square:before { + content: "\f397"; } + +.fa-dropbox:before { + content: "\f16b"; } + +.fa-drum:before { + content: "\f569"; } + +.fa-drum-steelpan:before { + content: "\f56a"; } + +.fa-drumstick-bite:before { + content: "\f6d7"; } + +.fa-drupal:before { + content: "\f1a9"; } + +.fa-dumbbell:before { + content: "\f44b"; } + +.fa-dumpster:before { + content: "\f793"; } + +.fa-dumpster-fire:before { + content: "\f794"; } + +.fa-dungeon:before { + content: "\f6d9"; } + +.fa-dyalog:before { + content: "\f399"; } + +.fa-earlybirds:before { + content: "\f39a"; } + +.fa-ebay:before { + content: "\f4f4"; } + +.fa-edge:before { + content: "\f282"; } + +.fa-edge-legacy:before { + content: "\e078"; } + +.fa-edit:before { + content: "\f044"; } + +.fa-egg:before { + content: "\f7fb"; } + +.fa-eject:before { + content: "\f052"; } + +.fa-elementor:before { + content: "\f430"; } + +.fa-ellipsis-h:before { + content: "\f141"; } + +.fa-ellipsis-v:before { + content: "\f142"; } + +.fa-ello:before { + content: "\f5f1"; } + +.fa-ember:before { + content: "\f423"; } + +.fa-empire:before { + content: "\f1d1"; } + +.fa-envelope:before { + content: "\f0e0"; } + +.fa-envelope-open:before { + content: "\f2b6"; } + +.fa-envelope-open-text:before { + content: "\f658"; } + +.fa-envelope-square:before { + content: "\f199"; } + +.fa-envira:before { + content: "\f299"; } + +.fa-equals:before { + content: "\f52c"; } + +.fa-eraser:before { + content: "\f12d"; } + +.fa-erlang:before { + content: "\f39d"; } + +.fa-ethereum:before { + content: "\f42e"; } + +.fa-ethernet:before { + content: "\f796"; } + +.fa-etsy:before { + content: "\f2d7"; } + +.fa-euro-sign:before { + content: "\f153"; } + +.fa-evernote:before { + content: "\f839"; } + +.fa-exchange-alt:before { + content: "\f362"; } + +.fa-exclamation:before { + content: "\f12a"; } + +.fa-exclamation-circle:before { + content: "\f06a"; } + +.fa-exclamation-triangle:before { + content: "\f071"; } + +.fa-expand:before { + content: "\f065"; } + +.fa-expand-alt:before { + content: "\f424"; } + +.fa-expand-arrows-alt:before { + content: "\f31e"; } + +.fa-expeditedssl:before { + content: "\f23e"; } + +.fa-external-link-alt:before { + content: "\f35d"; } + +.fa-external-link-square-alt:before { + content: "\f360"; } + +.fa-eye:before { + content: "\f06e"; } + +.fa-eye-dropper:before { + content: "\f1fb"; } + +.fa-eye-slash:before { + content: "\f070"; } + +.fa-facebook:before { + content: "\f09a"; } + +.fa-facebook-f:before { + content: "\f39e"; } + +.fa-facebook-messenger:before { + content: "\f39f"; } + +.fa-facebook-square:before { + content: "\f082"; } + +.fa-fan:before { + content: "\f863"; } + +.fa-fantasy-flight-games:before { + content: "\f6dc"; } + +.fa-fast-backward:before { + content: "\f049"; } + +.fa-fast-forward:before { + content: "\f050"; } + +.fa-faucet:before { + content: "\e005"; } + +.fa-fax:before { + content: "\f1ac"; } + +.fa-feather:before { + content: "\f52d"; } + +.fa-feather-alt:before { + content: "\f56b"; } + +.fa-fedex:before { + content: "\f797"; } + +.fa-fedora:before { + content: "\f798"; } + +.fa-female:before { + content: "\f182"; } + +.fa-fighter-jet:before { + content: "\f0fb"; } + +.fa-figma:before { + content: "\f799"; } + +.fa-file:before { + content: "\f15b"; } + +.fa-file-alt:before { + content: "\f15c"; } + +.fa-file-archive:before { + content: "\f1c6"; } + +.fa-file-audio:before { + content: "\f1c7"; } + +.fa-file-code:before { + content: "\f1c9"; } + +.fa-file-contract:before { + content: "\f56c"; } + +.fa-file-csv:before { + content: "\f6dd"; } + +.fa-file-download:before { + content: "\f56d"; } + +.fa-file-excel:before { + content: "\f1c3"; } + +.fa-file-export:before { + content: "\f56e"; } + +.fa-file-image:before { + content: "\f1c5"; } + +.fa-file-import:before { + content: "\f56f"; } + +.fa-file-invoice:before { + content: "\f570"; } + +.fa-file-invoice-dollar:before { + content: "\f571"; } + +.fa-file-medical:before { + content: "\f477"; } + +.fa-file-medical-alt:before { + content: "\f478"; } + +.fa-file-pdf:before { + content: "\f1c1"; } + +.fa-file-powerpoint:before { + content: "\f1c4"; } + +.fa-file-prescription:before { + content: "\f572"; } + +.fa-file-signature:before { + content: "\f573"; } + +.fa-file-upload:before { + content: "\f574"; } + +.fa-file-video:before { + content: "\f1c8"; } + +.fa-file-word:before { + content: "\f1c2"; } + +.fa-fill:before { + content: "\f575"; } + +.fa-fill-drip:before { + content: "\f576"; } + +.fa-film:before { + content: "\f008"; } + +.fa-filter:before { + content: "\f0b0"; } + +.fa-fingerprint:before { + content: "\f577"; } + +.fa-fire:before { + content: "\f06d"; } + +.fa-fire-alt:before { + content: "\f7e4"; } + +.fa-fire-extinguisher:before { + content: "\f134"; } + +.fa-firefox:before { + content: "\f269"; } + +.fa-firefox-browser:before { + content: "\e007"; } + +.fa-first-aid:before { + content: "\f479"; } + +.fa-first-order:before { + content: "\f2b0"; } + +.fa-first-order-alt:before { + content: "\f50a"; } + +.fa-firstdraft:before { + content: "\f3a1"; } + +.fa-fish:before { + content: "\f578"; } + +.fa-fist-raised:before { + content: "\f6de"; } + +.fa-flag:before { + content: "\f024"; } + +.fa-flag-checkered:before { + content: "\f11e"; } + +.fa-flag-usa:before { + content: "\f74d"; } + +.fa-flask:before { + content: "\f0c3"; } + +.fa-flickr:before { + content: "\f16e"; } + +.fa-flipboard:before { + content: "\f44d"; } + +.fa-flushed:before { + content: "\f579"; } + +.fa-fly:before { + content: "\f417"; } + +.fa-folder:before { + content: "\f07b"; } + +.fa-folder-minus:before { + content: "\f65d"; } + +.fa-folder-open:before { + content: "\f07c"; } + +.fa-folder-plus:before { + content: "\f65e"; } + +.fa-font:before { + content: "\f031"; } + +.fa-font-awesome:before { + content: "\f2b4"; } + +.fa-font-awesome-alt:before { + content: "\f35c"; } + +.fa-font-awesome-flag:before { + content: "\f425"; } + +.fa-font-awesome-logo-full:before { + content: "\f4e6"; } + +.fa-fonticons:before { + content: "\f280"; } + +.fa-fonticons-fi:before { + content: "\f3a2"; } + +.fa-football-ball:before { + content: "\f44e"; } + +.fa-fort-awesome:before { + content: "\f286"; } + +.fa-fort-awesome-alt:before { + content: "\f3a3"; } + +.fa-forumbee:before { + content: "\f211"; } + +.fa-forward:before { + content: "\f04e"; } + +.fa-foursquare:before { + content: "\f180"; } + +.fa-free-code-camp:before { + content: "\f2c5"; } + +.fa-freebsd:before { + content: "\f3a4"; } + +.fa-frog:before { + content: "\f52e"; } + +.fa-frown:before { + content: "\f119"; } + +.fa-frown-open:before { + content: "\f57a"; } + +.fa-fulcrum:before { + content: "\f50b"; } + +.fa-funnel-dollar:before { + content: "\f662"; } + +.fa-futbol:before { + content: "\f1e3"; } + +.fa-galactic-republic:before { + content: "\f50c"; } + +.fa-galactic-senate:before { + content: "\f50d"; } + +.fa-gamepad:before { + content: "\f11b"; } + +.fa-gas-pump:before { + content: "\f52f"; } + +.fa-gavel:before { + content: "\f0e3"; } + +.fa-gem:before { + content: "\f3a5"; } + +.fa-genderless:before { + content: "\f22d"; } + +.fa-get-pocket:before { + content: "\f265"; } + +.fa-gg:before { + content: "\f260"; } + +.fa-gg-circle:before { + content: "\f261"; } + +.fa-ghost:before { + content: "\f6e2"; } + +.fa-gift:before { + content: "\f06b"; } + +.fa-gifts:before { + content: "\f79c"; } + +.fa-git:before { + content: "\f1d3"; } + +.fa-git-alt:before { + content: "\f841"; } + +.fa-git-square:before { + content: "\f1d2"; } + +.fa-github:before { + content: "\f09b"; } + +.fa-github-alt:before { + content: "\f113"; } + +.fa-github-square:before { + content: "\f092"; } + +.fa-gitkraken:before { + content: "\f3a6"; } + +.fa-gitlab:before { + content: "\f296"; } + +.fa-gitter:before { + content: "\f426"; } + +.fa-glass-cheers:before { + content: "\f79f"; } + +.fa-glass-martini:before { + content: "\f000"; } + +.fa-glass-martini-alt:before { + content: "\f57b"; } + +.fa-glass-whiskey:before { + content: "\f7a0"; } + +.fa-glasses:before { + content: "\f530"; } + +.fa-glide:before { + content: "\f2a5"; } + +.fa-glide-g:before { + content: "\f2a6"; } + +.fa-globe:before { + content: "\f0ac"; } + +.fa-globe-africa:before { + content: "\f57c"; } + +.fa-globe-americas:before { + content: "\f57d"; } + +.fa-globe-asia:before { + content: "\f57e"; } + +.fa-globe-europe:before { + content: "\f7a2"; } + +.fa-gofore:before { + content: "\f3a7"; } + +.fa-golf-ball:before { + content: "\f450"; } + +.fa-goodreads:before { + content: "\f3a8"; } + +.fa-goodreads-g:before { + content: "\f3a9"; } + +.fa-google:before { + content: "\f1a0"; } + +.fa-google-drive:before { + content: "\f3aa"; } + +.fa-google-pay:before { + content: "\e079"; } + +.fa-google-play:before { + content: "\f3ab"; } + +.fa-google-plus:before { + content: "\f2b3"; } + +.fa-google-plus-g:before { + content: "\f0d5"; } + +.fa-google-plus-square:before { + content: "\f0d4"; } + +.fa-google-wallet:before { + content: "\f1ee"; } + +.fa-gopuram:before { + content: "\f664"; } + +.fa-graduation-cap:before { + content: "\f19d"; } + +.fa-gratipay:before { + content: "\f184"; } + +.fa-grav:before { + content: "\f2d6"; } + +.fa-greater-than:before { + content: "\f531"; } + +.fa-greater-than-equal:before { + content: "\f532"; } + +.fa-grimace:before { + content: "\f57f"; } + +.fa-grin:before { + content: "\f580"; } + +.fa-grin-alt:before { + content: "\f581"; } + +.fa-grin-beam:before { + content: "\f582"; } + +.fa-grin-beam-sweat:before { + content: "\f583"; } + +.fa-grin-hearts:before { + content: "\f584"; } + +.fa-grin-squint:before { + content: "\f585"; } + +.fa-grin-squint-tears:before { + content: "\f586"; } + +.fa-grin-stars:before { + content: "\f587"; } + +.fa-grin-tears:before { + content: "\f588"; } + +.fa-grin-tongue:before { + content: "\f589"; } + +.fa-grin-tongue-squint:before { + content: "\f58a"; } + +.fa-grin-tongue-wink:before { + content: "\f58b"; } + +.fa-grin-wink:before { + content: "\f58c"; } + +.fa-grip-horizontal:before { + content: "\f58d"; } + +.fa-grip-lines:before { + content: "\f7a4"; } + +.fa-grip-lines-vertical:before { + content: "\f7a5"; } + +.fa-grip-vertical:before { + content: "\f58e"; } + +.fa-gripfire:before { + content: "\f3ac"; } + +.fa-grunt:before { + content: "\f3ad"; } + +.fa-guilded:before { + content: "\e07e"; } + +.fa-guitar:before { + content: "\f7a6"; } + +.fa-gulp:before { + content: "\f3ae"; } + +.fa-h-square:before { + content: "\f0fd"; } + +.fa-hacker-news:before { + content: "\f1d4"; } + +.fa-hacker-news-square:before { + content: "\f3af"; } + +.fa-hackerrank:before { + content: "\f5f7"; } + +.fa-hamburger:before { + content: "\f805"; } + +.fa-hammer:before { + content: "\f6e3"; } + +.fa-hamsa:before { + content: "\f665"; } + +.fa-hand-holding:before { + content: "\f4bd"; } + +.fa-hand-holding-heart:before { + content: "\f4be"; } + +.fa-hand-holding-medical:before { + content: "\e05c"; } + +.fa-hand-holding-usd:before { + content: "\f4c0"; } + +.fa-hand-holding-water:before { + content: "\f4c1"; } + +.fa-hand-lizard:before { + content: "\f258"; } + +.fa-hand-middle-finger:before { + content: "\f806"; } + +.fa-hand-paper:before { + content: "\f256"; } + +.fa-hand-peace:before { + content: "\f25b"; } + +.fa-hand-point-down:before { + content: "\f0a7"; } + +.fa-hand-point-left:before { + content: "\f0a5"; } + +.fa-hand-point-right:before { + content: "\f0a4"; } + +.fa-hand-point-up:before { + content: "\f0a6"; } + +.fa-hand-pointer:before { + content: "\f25a"; } + +.fa-hand-rock:before { + content: "\f255"; } + +.fa-hand-scissors:before { + content: "\f257"; } + +.fa-hand-sparkles:before { + content: "\e05d"; } + +.fa-hand-spock:before { + content: "\f259"; } + +.fa-hands:before { + content: "\f4c2"; } + +.fa-hands-helping:before { + content: "\f4c4"; } + +.fa-hands-wash:before { + content: "\e05e"; } + +.fa-handshake:before { + content: "\f2b5"; } + +.fa-handshake-alt-slash:before { + content: "\e05f"; } + +.fa-handshake-slash:before { + content: "\e060"; } + +.fa-hanukiah:before { + content: "\f6e6"; } + +.fa-hard-hat:before { + content: "\f807"; } + +.fa-hashtag:before { + content: "\f292"; } + +.fa-hat-cowboy:before { + content: "\f8c0"; } + +.fa-hat-cowboy-side:before { + content: "\f8c1"; } + +.fa-hat-wizard:before { + content: "\f6e8"; } + +.fa-hdd:before { + content: "\f0a0"; } + +.fa-head-side-cough:before { + content: "\e061"; } + +.fa-head-side-cough-slash:before { + content: "\e062"; } + +.fa-head-side-mask:before { + content: "\e063"; } + +.fa-head-side-virus:before { + content: "\e064"; } + +.fa-heading:before { + content: "\f1dc"; } + +.fa-headphones:before { + content: "\f025"; } + +.fa-headphones-alt:before { + content: "\f58f"; } + +.fa-headset:before { + content: "\f590"; } + +.fa-heart:before { + content: "\f004"; } + +.fa-heart-broken:before { + content: "\f7a9"; } + +.fa-heartbeat:before { + content: "\f21e"; } + +.fa-helicopter:before { + content: "\f533"; } + +.fa-highlighter:before { + content: "\f591"; } + +.fa-hiking:before { + content: "\f6ec"; } + +.fa-hippo:before { + content: "\f6ed"; } + +.fa-hips:before { + content: "\f452"; } + +.fa-hire-a-helper:before { + content: "\f3b0"; } + +.fa-history:before { + content: "\f1da"; } + +.fa-hive:before { + content: "\e07f"; } + +.fa-hockey-puck:before { + content: "\f453"; } + +.fa-holly-berry:before { + content: "\f7aa"; } + +.fa-home:before { + content: "\f015"; } + +.fa-hooli:before { + content: "\f427"; } + +.fa-hornbill:before { + content: "\f592"; } + +.fa-horse:before { + content: "\f6f0"; } + +.fa-horse-head:before { + content: "\f7ab"; } + +.fa-hospital:before { + content: "\f0f8"; } + +.fa-hospital-alt:before { + content: "\f47d"; } + +.fa-hospital-symbol:before { + content: "\f47e"; } + +.fa-hospital-user:before { + content: "\f80d"; } + +.fa-hot-tub:before { + content: "\f593"; } + +.fa-hotdog:before { + content: "\f80f"; } + +.fa-hotel:before { + content: "\f594"; } + +.fa-hotjar:before { + content: "\f3b1"; } + +.fa-hourglass:before { + content: "\f254"; } + +.fa-hourglass-end:before { + content: "\f253"; } + +.fa-hourglass-half:before { + content: "\f252"; } + +.fa-hourglass-start:before { + content: "\f251"; } + +.fa-house-damage:before { + content: "\f6f1"; } + +.fa-house-user:before { + content: "\e065"; } + +.fa-houzz:before { + content: "\f27c"; } + +.fa-hryvnia:before { + content: "\f6f2"; } + +.fa-html5:before { + content: "\f13b"; } + +.fa-hubspot:before { + content: "\f3b2"; } + +.fa-i-cursor:before { + content: "\f246"; } + +.fa-ice-cream:before { + content: "\f810"; } + +.fa-icicles:before { + content: "\f7ad"; } + +.fa-icons:before { + content: "\f86d"; } + +.fa-id-badge:before { + content: "\f2c1"; } + +.fa-id-card:before { + content: "\f2c2"; } + +.fa-id-card-alt:before { + content: "\f47f"; } + +.fa-ideal:before { + content: "\e013"; } + +.fa-igloo:before { + content: "\f7ae"; } + +.fa-image:before { + content: "\f03e"; } + +.fa-images:before { + content: "\f302"; } + +.fa-imdb:before { + content: "\f2d8"; } + +.fa-inbox:before { + content: "\f01c"; } + +.fa-indent:before { + content: "\f03c"; } + +.fa-industry:before { + content: "\f275"; } + +.fa-infinity:before { + content: "\f534"; } + +.fa-info:before { + content: "\f129"; } + +.fa-info-circle:before { + content: "\f05a"; } + +.fa-innosoft:before { + content: "\e080"; } + +.fa-instagram:before { + content: "\f16d"; } + +.fa-instagram-square:before { + content: "\e055"; } + +.fa-instalod:before { + content: "\e081"; } + +.fa-intercom:before { + content: "\f7af"; } + +.fa-internet-explorer:before { + content: "\f26b"; } + +.fa-invision:before { + content: "\f7b0"; } + +.fa-ioxhost:before { + content: "\f208"; } + +.fa-italic:before { + content: "\f033"; } + +.fa-itch-io:before { + content: "\f83a"; } + +.fa-itunes:before { + content: "\f3b4"; } + +.fa-itunes-note:before { + content: "\f3b5"; } + +.fa-java:before { + content: "\f4e4"; } + +.fa-jedi:before { + content: "\f669"; } + +.fa-jedi-order:before { + content: "\f50e"; } + +.fa-jenkins:before { + content: "\f3b6"; } + +.fa-jira:before { + content: "\f7b1"; } + +.fa-joget:before { + content: "\f3b7"; } + +.fa-joint:before { + content: "\f595"; } + +.fa-joomla:before { + content: "\f1aa"; } + +.fa-journal-whills:before { + content: "\f66a"; } + +.fa-js:before { + content: "\f3b8"; } + +.fa-js-square:before { + content: "\f3b9"; } + +.fa-jsfiddle:before { + content: "\f1cc"; } + +.fa-kaaba:before { + content: "\f66b"; } + +.fa-kaggle:before { + content: "\f5fa"; } + +.fa-key:before { + content: "\f084"; } + +.fa-keybase:before { + content: "\f4f5"; } + +.fa-keyboard:before { + content: "\f11c"; } + +.fa-keycdn:before { + content: "\f3ba"; } + +.fa-khanda:before { + content: "\f66d"; } + +.fa-kickstarter:before { + content: "\f3bb"; } + +.fa-kickstarter-k:before { + content: "\f3bc"; } + +.fa-kiss:before { + content: "\f596"; } + +.fa-kiss-beam:before { + content: "\f597"; } + +.fa-kiss-wink-heart:before { + content: "\f598"; } + +.fa-kiwi-bird:before { + content: "\f535"; } + +.fa-korvue:before { + content: "\f42f"; } + +.fa-landmark:before { + content: "\f66f"; } + +.fa-language:before { + content: "\f1ab"; } + +.fa-laptop:before { + content: "\f109"; } + +.fa-laptop-code:before { + content: "\f5fc"; } + +.fa-laptop-house:before { + content: "\e066"; } + +.fa-laptop-medical:before { + content: "\f812"; } + +.fa-laravel:before { + content: "\f3bd"; } + +.fa-lastfm:before { + content: "\f202"; } + +.fa-lastfm-square:before { + content: "\f203"; } + +.fa-laugh:before { + content: "\f599"; } + +.fa-laugh-beam:before { + content: "\f59a"; } + +.fa-laugh-squint:before { + content: "\f59b"; } + +.fa-laugh-wink:before { + content: "\f59c"; } + +.fa-layer-group:before { + content: "\f5fd"; } + +.fa-leaf:before { + content: "\f06c"; } + +.fa-leanpub:before { + content: "\f212"; } + +.fa-lemon:before { + content: "\f094"; } + +.fa-less:before { + content: "\f41d"; } + +.fa-less-than:before { + content: "\f536"; } + +.fa-less-than-equal:before { + content: "\f537"; } + +.fa-level-down-alt:before { + content: "\f3be"; } + +.fa-level-up-alt:before { + content: "\f3bf"; } + +.fa-life-ring:before { + content: "\f1cd"; } + +.fa-lightbulb:before { + content: "\f0eb"; } + +.fa-line:before { + content: "\f3c0"; } + +.fa-link:before { + content: "\f0c1"; } + +.fa-linkedin:before { + content: "\f08c"; } + +.fa-linkedin-in:before { + content: "\f0e1"; } + +.fa-linode:before { + content: "\f2b8"; } + +.fa-linux:before { + content: "\f17c"; } + +.fa-lira-sign:before { + content: "\f195"; } + +.fa-list:before { + content: "\f03a"; } + +.fa-list-alt:before { + content: "\f022"; } + +.fa-list-ol:before { + content: "\f0cb"; } + +.fa-list-ul:before { + content: "\f0ca"; } + +.fa-location-arrow:before { + content: "\f124"; } + +.fa-lock:before { + content: "\f023"; } + +.fa-lock-open:before { + content: "\f3c1"; } + +.fa-long-arrow-alt-down:before { + content: "\f309"; } + +.fa-long-arrow-alt-left:before { + content: "\f30a"; } + +.fa-long-arrow-alt-right:before { + content: "\f30b"; } + +.fa-long-arrow-alt-up:before { + content: "\f30c"; } + +.fa-low-vision:before { + content: "\f2a8"; } + +.fa-luggage-cart:before { + content: "\f59d"; } + +.fa-lungs:before { + content: "\f604"; } + +.fa-lungs-virus:before { + content: "\e067"; } + +.fa-lyft:before { + content: "\f3c3"; } + +.fa-magento:before { + content: "\f3c4"; } + +.fa-magic:before { + content: "\f0d0"; } + +.fa-magnet:before { + content: "\f076"; } + +.fa-mail-bulk:before { + content: "\f674"; } + +.fa-mailchimp:before { + content: "\f59e"; } + +.fa-male:before { + content: "\f183"; } + +.fa-mandalorian:before { + content: "\f50f"; } + +.fa-map:before { + content: "\f279"; } + +.fa-map-marked:before { + content: "\f59f"; } + +.fa-map-marked-alt:before { + content: "\f5a0"; } + +.fa-map-marker:before { + content: "\f041"; } + +.fa-map-marker-alt:before { + content: "\f3c5"; } + +.fa-map-pin:before { + content: "\f276"; } + +.fa-map-signs:before { + content: "\f277"; } + +.fa-markdown:before { + content: "\f60f"; } + +.fa-marker:before { + content: "\f5a1"; } + +.fa-mars:before { + content: "\f222"; } + +.fa-mars-double:before { + content: "\f227"; } + +.fa-mars-stroke:before { + content: "\f229"; } + +.fa-mars-stroke-h:before { + content: "\f22b"; } + +.fa-mars-stroke-v:before { + content: "\f22a"; } + +.fa-mask:before { + content: "\f6fa"; } + +.fa-mastodon:before { + content: "\f4f6"; } + +.fa-maxcdn:before { + content: "\f136"; } + +.fa-mdb:before { + content: "\f8ca"; } + +.fa-medal:before { + content: "\f5a2"; } + +.fa-medapps:before { + content: "\f3c6"; } + +.fa-medium:before { + content: "\f23a"; } + +.fa-medium-m:before { + content: "\f3c7"; } + +.fa-medkit:before { + content: "\f0fa"; } + +.fa-medrt:before { + content: "\f3c8"; } + +.fa-meetup:before { + content: "\f2e0"; } + +.fa-megaport:before { + content: "\f5a3"; } + +.fa-meh:before { + content: "\f11a"; } + +.fa-meh-blank:before { + content: "\f5a4"; } + +.fa-meh-rolling-eyes:before { + content: "\f5a5"; } + +.fa-memory:before { + content: "\f538"; } + +.fa-mendeley:before { + content: "\f7b3"; } + +.fa-menorah:before { + content: "\f676"; } + +.fa-mercury:before { + content: "\f223"; } + +.fa-meteor:before { + content: "\f753"; } + +.fa-microblog:before { + content: "\e01a"; } + +.fa-microchip:before { + content: "\f2db"; } + +.fa-microphone:before { + content: "\f130"; } + +.fa-microphone-alt:before { + content: "\f3c9"; } + +.fa-microphone-alt-slash:before { + content: "\f539"; } + +.fa-microphone-slash:before { + content: "\f131"; } + +.fa-microscope:before { + content: "\f610"; } + +.fa-microsoft:before { + content: "\f3ca"; } + +.fa-minus:before { + content: "\f068"; } + +.fa-minus-circle:before { + content: "\f056"; } + +.fa-minus-square:before { + content: "\f146"; } + +.fa-mitten:before { + content: "\f7b5"; } + +.fa-mix:before { + content: "\f3cb"; } + +.fa-mixcloud:before { + content: "\f289"; } + +.fa-mixer:before { + content: "\e056"; } + +.fa-mizuni:before { + content: "\f3cc"; } + +.fa-mobile:before { + content: "\f10b"; } + +.fa-mobile-alt:before { + content: "\f3cd"; } + +.fa-modx:before { + content: "\f285"; } + +.fa-monero:before { + content: "\f3d0"; } + +.fa-money-bill:before { + content: "\f0d6"; } + +.fa-money-bill-alt:before { + content: "\f3d1"; } + +.fa-money-bill-wave:before { + content: "\f53a"; } + +.fa-money-bill-wave-alt:before { + content: "\f53b"; } + +.fa-money-check:before { + content: "\f53c"; } + +.fa-money-check-alt:before { + content: "\f53d"; } + +.fa-monument:before { + content: "\f5a6"; } + +.fa-moon:before { + content: "\f186"; } + +.fa-mortar-pestle:before { + content: "\f5a7"; } + +.fa-mosque:before { + content: "\f678"; } + +.fa-motorcycle:before { + content: "\f21c"; } + +.fa-mountain:before { + content: "\f6fc"; } + +.fa-mouse:before { + content: "\f8cc"; } + +.fa-mouse-pointer:before { + content: "\f245"; } + +.fa-mug-hot:before { + content: "\f7b6"; } + +.fa-music:before { + content: "\f001"; } + +.fa-napster:before { + content: "\f3d2"; } + +.fa-neos:before { + content: "\f612"; } + +.fa-network-wired:before { + content: "\f6ff"; } + +.fa-neuter:before { + content: "\f22c"; } + +.fa-newspaper:before { + content: "\f1ea"; } + +.fa-nimblr:before { + content: "\f5a8"; } + +.fa-node:before { + content: "\f419"; } + +.fa-node-js:before { + content: "\f3d3"; } + +.fa-not-equal:before { + content: "\f53e"; } + +.fa-notes-medical:before { + content: "\f481"; } + +.fa-npm:before { + content: "\f3d4"; } + +.fa-ns8:before { + content: "\f3d5"; } + +.fa-nutritionix:before { + content: "\f3d6"; } + +.fa-object-group:before { + content: "\f247"; } + +.fa-object-ungroup:before { + content: "\f248"; } + +.fa-octopus-deploy:before { + content: "\e082"; } + +.fa-odnoklassniki:before { + content: "\f263"; } + +.fa-odnoklassniki-square:before { + content: "\f264"; } + +.fa-oil-can:before { + content: "\f613"; } + +.fa-old-republic:before { + content: "\f510"; } + +.fa-om:before { + content: "\f679"; } + +.fa-opencart:before { + content: "\f23d"; } + +.fa-openid:before { + content: "\f19b"; } + +.fa-opera:before { + content: "\f26a"; } + +.fa-optin-monster:before { + content: "\f23c"; } + +.fa-orcid:before { + content: "\f8d2"; } + +.fa-osi:before { + content: "\f41a"; } + +.fa-otter:before { + content: "\f700"; } + +.fa-outdent:before { + content: "\f03b"; } + +.fa-page4:before { + content: "\f3d7"; } + +.fa-pagelines:before { + content: "\f18c"; } + +.fa-pager:before { + content: "\f815"; } + +.fa-paint-brush:before { + content: "\f1fc"; } + +.fa-paint-roller:before { + content: "\f5aa"; } + +.fa-palette:before { + content: "\f53f"; } + +.fa-palfed:before { + content: "\f3d8"; } + +.fa-pallet:before { + content: "\f482"; } + +.fa-paper-plane:before { + content: "\f1d8"; } + +.fa-paperclip:before { + content: "\f0c6"; } + +.fa-parachute-box:before { + content: "\f4cd"; } + +.fa-paragraph:before { + content: "\f1dd"; } + +.fa-parking:before { + content: "\f540"; } + +.fa-passport:before { + content: "\f5ab"; } + +.fa-pastafarianism:before { + content: "\f67b"; } + +.fa-paste:before { + content: "\f0ea"; } + +.fa-patreon:before { + content: "\f3d9"; } + +.fa-pause:before { + content: "\f04c"; } + +.fa-pause-circle:before { + content: "\f28b"; } + +.fa-paw:before { + content: "\f1b0"; } + +.fa-paypal:before { + content: "\f1ed"; } + +.fa-peace:before { + content: "\f67c"; } + +.fa-pen:before { + content: "\f304"; } + +.fa-pen-alt:before { + content: "\f305"; } + +.fa-pen-fancy:before { + content: "\f5ac"; } + +.fa-pen-nib:before { + content: "\f5ad"; } + +.fa-pen-square:before { + content: "\f14b"; } + +.fa-pencil-alt:before { + content: "\f303"; } + +.fa-pencil-ruler:before { + content: "\f5ae"; } + +.fa-penny-arcade:before { + content: "\f704"; } + +.fa-people-arrows:before { + content: "\e068"; } + +.fa-people-carry:before { + content: "\f4ce"; } + +.fa-pepper-hot:before { + content: "\f816"; } + +.fa-perbyte:before { + content: "\e083"; } + +.fa-percent:before { + content: "\f295"; } + +.fa-percentage:before { + content: "\f541"; } + +.fa-periscope:before { + content: "\f3da"; } + +.fa-person-booth:before { + content: "\f756"; } + +.fa-phabricator:before { + content: "\f3db"; } + +.fa-phoenix-framework:before { + content: "\f3dc"; } + +.fa-phoenix-squadron:before { + content: "\f511"; } + +.fa-phone:before { + content: "\f095"; } + +.fa-phone-alt:before { + content: "\f879"; } + +.fa-phone-slash:before { + content: "\f3dd"; } + +.fa-phone-square:before { + content: "\f098"; } + +.fa-phone-square-alt:before { + content: "\f87b"; } + +.fa-phone-volume:before { + content: "\f2a0"; } + +.fa-photo-video:before { + content: "\f87c"; } + +.fa-php:before { + content: "\f457"; } + +.fa-pied-piper:before { + content: "\f2ae"; } + +.fa-pied-piper-alt:before { + content: "\f1a8"; } + +.fa-pied-piper-hat:before { + content: "\f4e5"; } + +.fa-pied-piper-pp:before { + content: "\f1a7"; } + +.fa-pied-piper-square:before { + content: "\e01e"; } + +.fa-piggy-bank:before { + content: "\f4d3"; } + +.fa-pills:before { + content: "\f484"; } + +.fa-pinterest:before { + content: "\f0d2"; } + +.fa-pinterest-p:before { + content: "\f231"; } + +.fa-pinterest-square:before { + content: "\f0d3"; } + +.fa-pizza-slice:before { + content: "\f818"; } + +.fa-place-of-worship:before { + content: "\f67f"; } + +.fa-plane:before { + content: "\f072"; } + +.fa-plane-arrival:before { + content: "\f5af"; } + +.fa-plane-departure:before { + content: "\f5b0"; } + +.fa-plane-slash:before { + content: "\e069"; } + +.fa-play:before { + content: "\f04b"; } + +.fa-play-circle:before { + content: "\f144"; } + +.fa-playstation:before { + content: "\f3df"; } + +.fa-plug:before { + content: "\f1e6"; } + +.fa-plus:before { + content: "\f067"; } + +.fa-plus-circle:before { + content: "\f055"; } + +.fa-plus-square:before { + content: "\f0fe"; } + +.fa-podcast:before { + content: "\f2ce"; } + +.fa-poll:before { + content: "\f681"; } + +.fa-poll-h:before { + content: "\f682"; } + +.fa-poo:before { + content: "\f2fe"; } + +.fa-poo-storm:before { + content: "\f75a"; } + +.fa-poop:before { + content: "\f619"; } + +.fa-portrait:before { + content: "\f3e0"; } + +.fa-pound-sign:before { + content: "\f154"; } + +.fa-power-off:before { + content: "\f011"; } + +.fa-pray:before { + content: "\f683"; } + +.fa-praying-hands:before { + content: "\f684"; } + +.fa-prescription:before { + content: "\f5b1"; } + +.fa-prescription-bottle:before { + content: "\f485"; } + +.fa-prescription-bottle-alt:before { + content: "\f486"; } + +.fa-print:before { + content: "\f02f"; } + +.fa-procedures:before { + content: "\f487"; } + +.fa-product-hunt:before { + content: "\f288"; } + +.fa-project-diagram:before { + content: "\f542"; } + +.fa-pump-medical:before { + content: "\e06a"; } + +.fa-pump-soap:before { + content: "\e06b"; } + +.fa-pushed:before { + content: "\f3e1"; } + +.fa-puzzle-piece:before { + content: "\f12e"; } + +.fa-python:before { + content: "\f3e2"; } + +.fa-qq:before { + content: "\f1d6"; } + +.fa-qrcode:before { + content: "\f029"; } + +.fa-question:before { + content: "\f128"; } + +.fa-question-circle:before { + content: "\f059"; } + +.fa-quidditch:before { + content: "\f458"; } + +.fa-quinscape:before { + content: "\f459"; } + +.fa-quora:before { + content: "\f2c4"; } + +.fa-quote-left:before { + content: "\f10d"; } + +.fa-quote-right:before { + content: "\f10e"; } + +.fa-quran:before { + content: "\f687"; } + +.fa-r-project:before { + content: "\f4f7"; } + +.fa-radiation:before { + content: "\f7b9"; } + +.fa-radiation-alt:before { + content: "\f7ba"; } + +.fa-rainbow:before { + content: "\f75b"; } + +.fa-random:before { + content: "\f074"; } + +.fa-raspberry-pi:before { + content: "\f7bb"; } + +.fa-ravelry:before { + content: "\f2d9"; } + +.fa-react:before { + content: "\f41b"; } + +.fa-reacteurope:before { + content: "\f75d"; } + +.fa-readme:before { + content: "\f4d5"; } + +.fa-rebel:before { + content: "\f1d0"; } + +.fa-receipt:before { + content: "\f543"; } + +.fa-record-vinyl:before { + content: "\f8d9"; } + +.fa-recycle:before { + content: "\f1b8"; } + +.fa-red-river:before { + content: "\f3e3"; } + +.fa-reddit:before { + content: "\f1a1"; } + +.fa-reddit-alien:before { + content: "\f281"; } + +.fa-reddit-square:before { + content: "\f1a2"; } + +.fa-redhat:before { + content: "\f7bc"; } + +.fa-redo:before { + content: "\f01e"; } + +.fa-redo-alt:before { + content: "\f2f9"; } + +.fa-registered:before { + content: "\f25d"; } + +.fa-remove-format:before { + content: "\f87d"; } + +.fa-renren:before { + content: "\f18b"; } + +.fa-reply:before { + content: "\f3e5"; } + +.fa-reply-all:before { + content: "\f122"; } + +.fa-replyd:before { + content: "\f3e6"; } + +.fa-republican:before { + content: "\f75e"; } + +.fa-researchgate:before { + content: "\f4f8"; } + +.fa-resolving:before { + content: "\f3e7"; } + +.fa-restroom:before { + content: "\f7bd"; } + +.fa-retweet:before { + content: "\f079"; } + +.fa-rev:before { + content: "\f5b2"; } + +.fa-ribbon:before { + content: "\f4d6"; } + +.fa-ring:before { + content: "\f70b"; } + +.fa-road:before { + content: "\f018"; } + +.fa-robot:before { + content: "\f544"; } + +.fa-rocket:before { + content: "\f135"; } + +.fa-rocketchat:before { + content: "\f3e8"; } + +.fa-rockrms:before { + content: "\f3e9"; } + +.fa-route:before { + content: "\f4d7"; } + +.fa-rss:before { + content: "\f09e"; } + +.fa-rss-square:before { + content: "\f143"; } + +.fa-ruble-sign:before { + content: "\f158"; } + +.fa-ruler:before { + content: "\f545"; } + +.fa-ruler-combined:before { + content: "\f546"; } + +.fa-ruler-horizontal:before { + content: "\f547"; } + +.fa-ruler-vertical:before { + content: "\f548"; } + +.fa-running:before { + content: "\f70c"; } + +.fa-rupee-sign:before { + content: "\f156"; } + +.fa-rust:before { + content: "\e07a"; } + +.fa-sad-cry:before { + content: "\f5b3"; } + +.fa-sad-tear:before { + content: "\f5b4"; } + +.fa-safari:before { + content: "\f267"; } + +.fa-salesforce:before { + content: "\f83b"; } + +.fa-sass:before { + content: "\f41e"; } + +.fa-satellite:before { + content: "\f7bf"; } + +.fa-satellite-dish:before { + content: "\f7c0"; } + +.fa-save:before { + content: "\f0c7"; } + +.fa-schlix:before { + content: "\f3ea"; } + +.fa-school:before { + content: "\f549"; } + +.fa-screwdriver:before { + content: "\f54a"; } + +.fa-scribd:before { + content: "\f28a"; } + +.fa-scroll:before { + content: "\f70e"; } + +.fa-sd-card:before { + content: "\f7c2"; } + +.fa-search:before { + content: "\f002"; } + +.fa-search-dollar:before { + content: "\f688"; } + +.fa-search-location:before { + content: "\f689"; } + +.fa-search-minus:before { + content: "\f010"; } + +.fa-search-plus:before { + content: "\f00e"; } + +.fa-searchengin:before { + content: "\f3eb"; } + +.fa-seedling:before { + content: "\f4d8"; } + +.fa-sellcast:before { + content: "\f2da"; } + +.fa-sellsy:before { + content: "\f213"; } + +.fa-server:before { + content: "\f233"; } + +.fa-servicestack:before { + content: "\f3ec"; } + +.fa-shapes:before { + content: "\f61f"; } + +.fa-share:before { + content: "\f064"; } + +.fa-share-alt:before { + content: "\f1e0"; } + +.fa-share-alt-square:before { + content: "\f1e1"; } + +.fa-share-square:before { + content: "\f14d"; } + +.fa-shekel-sign:before { + content: "\f20b"; } + +.fa-shield-alt:before { + content: "\f3ed"; } + +.fa-shield-virus:before { + content: "\e06c"; } + +.fa-ship:before { + content: "\f21a"; } + +.fa-shipping-fast:before { + content: "\f48b"; } + +.fa-shirtsinbulk:before { + content: "\f214"; } + +.fa-shoe-prints:before { + content: "\f54b"; } + +.fa-shopify:before { + content: "\e057"; } + +.fa-shopping-bag:before { + content: "\f290"; } + +.fa-shopping-basket:before { + content: "\f291"; } + +.fa-shopping-cart:before { + content: "\f07a"; } + +.fa-shopware:before { + content: "\f5b5"; } + +.fa-shower:before { + content: "\f2cc"; } + +.fa-shuttle-van:before { + content: "\f5b6"; } + +.fa-sign:before { + content: "\f4d9"; } + +.fa-sign-in-alt:before { + content: "\f2f6"; } + +.fa-sign-language:before { + content: "\f2a7"; } + +.fa-sign-out-alt:before { + content: "\f2f5"; } + +.fa-signal:before { + content: "\f012"; } + +.fa-signature:before { + content: "\f5b7"; } + +.fa-sim-card:before { + content: "\f7c4"; } + +.fa-simplybuilt:before { + content: "\f215"; } + +.fa-sink:before { + content: "\e06d"; } + +.fa-sistrix:before { + content: "\f3ee"; } + +.fa-sitemap:before { + content: "\f0e8"; } + +.fa-sith:before { + content: "\f512"; } + +.fa-skating:before { + content: "\f7c5"; } + +.fa-sketch:before { + content: "\f7c6"; } + +.fa-skiing:before { + content: "\f7c9"; } + +.fa-skiing-nordic:before { + content: "\f7ca"; } + +.fa-skull:before { + content: "\f54c"; } + +.fa-skull-crossbones:before { + content: "\f714"; } + +.fa-skyatlas:before { + content: "\f216"; } + +.fa-skype:before { + content: "\f17e"; } + +.fa-slack:before { + content: "\f198"; } + +.fa-slack-hash:before { + content: "\f3ef"; } + +.fa-slash:before { + content: "\f715"; } + +.fa-sleigh:before { + content: "\f7cc"; } + +.fa-sliders-h:before { + content: "\f1de"; } + +.fa-slideshare:before { + content: "\f1e7"; } + +.fa-smile:before { + content: "\f118"; } + +.fa-smile-beam:before { + content: "\f5b8"; } + +.fa-smile-wink:before { + content: "\f4da"; } + +.fa-smog:before { + content: "\f75f"; } + +.fa-smoking:before { + content: "\f48d"; } + +.fa-smoking-ban:before { + content: "\f54d"; } + +.fa-sms:before { + content: "\f7cd"; } + +.fa-snapchat:before { + content: "\f2ab"; } + +.fa-snapchat-ghost:before { + content: "\f2ac"; } + +.fa-snapchat-square:before { + content: "\f2ad"; } + +.fa-snowboarding:before { + content: "\f7ce"; } + +.fa-snowflake:before { + content: "\f2dc"; } + +.fa-snowman:before { + content: "\f7d0"; } + +.fa-snowplow:before { + content: "\f7d2"; } + +.fa-soap:before { + content: "\e06e"; } + +.fa-socks:before { + content: "\f696"; } + +.fa-solar-panel:before { + content: "\f5ba"; } + +.fa-sort:before { + content: "\f0dc"; } + +.fa-sort-alpha-down:before { + content: "\f15d"; } + +.fa-sort-alpha-down-alt:before { + content: "\f881"; } + +.fa-sort-alpha-up:before { + content: "\f15e"; } + +.fa-sort-alpha-up-alt:before { + content: "\f882"; } + +.fa-sort-amount-down:before { + content: "\f160"; } + +.fa-sort-amount-down-alt:before { + content: "\f884"; } + +.fa-sort-amount-up:before { + content: "\f161"; } + +.fa-sort-amount-up-alt:before { + content: "\f885"; } + +.fa-sort-down:before { + content: "\f0dd"; } + +.fa-sort-numeric-down:before { + content: "\f162"; } + +.fa-sort-numeric-down-alt:before { + content: "\f886"; } + +.fa-sort-numeric-up:before { + content: "\f163"; } + +.fa-sort-numeric-up-alt:before { + content: "\f887"; } + +.fa-sort-up:before { + content: "\f0de"; } + +.fa-soundcloud:before { + content: "\f1be"; } + +.fa-sourcetree:before { + content: "\f7d3"; } + +.fa-spa:before { + content: "\f5bb"; } + +.fa-space-shuttle:before { + content: "\f197"; } + +.fa-speakap:before { + content: "\f3f3"; } + +.fa-speaker-deck:before { + content: "\f83c"; } + +.fa-spell-check:before { + content: "\f891"; } + +.fa-spider:before { + content: "\f717"; } + +.fa-spinner:before { + content: "\f110"; } + +.fa-splotch:before { + content: "\f5bc"; } + +.fa-spotify:before { + content: "\f1bc"; } + +.fa-spray-can:before { + content: "\f5bd"; } + +.fa-square:before { + content: "\f0c8"; } + +.fa-square-full:before { + content: "\f45c"; } + +.fa-square-root-alt:before { + content: "\f698"; } + +.fa-squarespace:before { + content: "\f5be"; } + +.fa-stack-exchange:before { + content: "\f18d"; } + +.fa-stack-overflow:before { + content: "\f16c"; } + +.fa-stackpath:before { + content: "\f842"; } + +.fa-stamp:before { + content: "\f5bf"; } + +.fa-star:before { + content: "\f005"; } + +.fa-star-and-crescent:before { + content: "\f699"; } + +.fa-star-half:before { + content: "\f089"; } + +.fa-star-half-alt:before { + content: "\f5c0"; } + +.fa-star-of-david:before { + content: "\f69a"; } + +.fa-star-of-life:before { + content: "\f621"; } + +.fa-staylinked:before { + content: "\f3f5"; } + +.fa-steam:before { + content: "\f1b6"; } + +.fa-steam-square:before { + content: "\f1b7"; } + +.fa-steam-symbol:before { + content: "\f3f6"; } + +.fa-step-backward:before { + content: "\f048"; } + +.fa-step-forward:before { + content: "\f051"; } + +.fa-stethoscope:before { + content: "\f0f1"; } + +.fa-sticker-mule:before { + content: "\f3f7"; } + +.fa-sticky-note:before { + content: "\f249"; } + +.fa-stop:before { + content: "\f04d"; } + +.fa-stop-circle:before { + content: "\f28d"; } + +.fa-stopwatch:before { + content: "\f2f2"; } + +.fa-stopwatch-20:before { + content: "\e06f"; } + +.fa-store:before { + content: "\f54e"; } + +.fa-store-alt:before { + content: "\f54f"; } + +.fa-store-alt-slash:before { + content: "\e070"; } + +.fa-store-slash:before { + content: "\e071"; } + +.fa-strava:before { + content: "\f428"; } + +.fa-stream:before { + content: "\f550"; } + +.fa-street-view:before { + content: "\f21d"; } + +.fa-strikethrough:before { + content: "\f0cc"; } + +.fa-stripe:before { + content: "\f429"; } + +.fa-stripe-s:before { + content: "\f42a"; } + +.fa-stroopwafel:before { + content: "\f551"; } + +.fa-studiovinari:before { + content: "\f3f8"; } + +.fa-stumbleupon:before { + content: "\f1a4"; } + +.fa-stumbleupon-circle:before { + content: "\f1a3"; } + +.fa-subscript:before { + content: "\f12c"; } + +.fa-subway:before { + content: "\f239"; } + +.fa-suitcase:before { + content: "\f0f2"; } + +.fa-suitcase-rolling:before { + content: "\f5c1"; } + +.fa-sun:before { + content: "\f185"; } + +.fa-superpowers:before { + content: "\f2dd"; } + +.fa-superscript:before { + content: "\f12b"; } + +.fa-supple:before { + content: "\f3f9"; } + +.fa-surprise:before { + content: "\f5c2"; } + +.fa-suse:before { + content: "\f7d6"; } + +.fa-swatchbook:before { + content: "\f5c3"; } + +.fa-swift:before { + content: "\f8e1"; } + +.fa-swimmer:before { + content: "\f5c4"; } + +.fa-swimming-pool:before { + content: "\f5c5"; } + +.fa-symfony:before { + content: "\f83d"; } + +.fa-synagogue:before { + content: "\f69b"; } + +.fa-sync:before { + content: "\f021"; } + +.fa-sync-alt:before { + content: "\f2f1"; } + +.fa-syringe:before { + content: "\f48e"; } + +.fa-table:before { + content: "\f0ce"; } + +.fa-table-tennis:before { + content: "\f45d"; } + +.fa-tablet:before { + content: "\f10a"; } + +.fa-tablet-alt:before { + content: "\f3fa"; } + +.fa-tablets:before { + content: "\f490"; } + +.fa-tachometer-alt:before { + content: "\f3fd"; } + +.fa-tag:before { + content: "\f02b"; } + +.fa-tags:before { + content: "\f02c"; } + +.fa-tape:before { + content: "\f4db"; } + +.fa-tasks:before { + content: "\f0ae"; } + +.fa-taxi:before { + content: "\f1ba"; } + +.fa-teamspeak:before { + content: "\f4f9"; } + +.fa-teeth:before { + content: "\f62e"; } + +.fa-teeth-open:before { + content: "\f62f"; } + +.fa-telegram:before { + content: "\f2c6"; } + +.fa-telegram-plane:before { + content: "\f3fe"; } + +.fa-temperature-high:before { + content: "\f769"; } + +.fa-temperature-low:before { + content: "\f76b"; } + +.fa-tencent-weibo:before { + content: "\f1d5"; } + +.fa-tenge:before { + content: "\f7d7"; } + +.fa-terminal:before { + content: "\f120"; } + +.fa-text-height:before { + content: "\f034"; } + +.fa-text-width:before { + content: "\f035"; } + +.fa-th:before { + content: "\f00a"; } + +.fa-th-large:before { + content: "\f009"; } + +.fa-th-list:before { + content: "\f00b"; } + +.fa-the-red-yeti:before { + content: "\f69d"; } + +.fa-theater-masks:before { + content: "\f630"; } + +.fa-themeco:before { + content: "\f5c6"; } + +.fa-themeisle:before { + content: "\f2b2"; } + +.fa-thermometer:before { + content: "\f491"; } + +.fa-thermometer-empty:before { + content: "\f2cb"; } + +.fa-thermometer-full:before { + content: "\f2c7"; } + +.fa-thermometer-half:before { + content: "\f2c9"; } + +.fa-thermometer-quarter:before { + content: "\f2ca"; } + +.fa-thermometer-three-quarters:before { + content: "\f2c8"; } + +.fa-think-peaks:before { + content: "\f731"; } + +.fa-thumbs-down:before { + content: "\f165"; } + +.fa-thumbs-up:before { + content: "\f164"; } + +.fa-thumbtack:before { + content: "\f08d"; } + +.fa-ticket-alt:before { + content: "\f3ff"; } + +.fa-tiktok:before { + content: "\e07b"; } + +.fa-times:before { + content: "\f00d"; } + +.fa-times-circle:before { + content: "\f057"; } + +.fa-tint:before { + content: "\f043"; } + +.fa-tint-slash:before { + content: "\f5c7"; } + +.fa-tired:before { + content: "\f5c8"; } + +.fa-toggle-off:before { + content: "\f204"; } + +.fa-toggle-on:before { + content: "\f205"; } + +.fa-toilet:before { + content: "\f7d8"; } + +.fa-toilet-paper:before { + content: "\f71e"; } + +.fa-toilet-paper-slash:before { + content: "\e072"; } + +.fa-toolbox:before { + content: "\f552"; } + +.fa-tools:before { + content: "\f7d9"; } + +.fa-tooth:before { + content: "\f5c9"; } + +.fa-torah:before { + content: "\f6a0"; } + +.fa-torii-gate:before { + content: "\f6a1"; } + +.fa-tractor:before { + content: "\f722"; } + +.fa-trade-federation:before { + content: "\f513"; } + +.fa-trademark:before { + content: "\f25c"; } + +.fa-traffic-light:before { + content: "\f637"; } + +.fa-trailer:before { + content: "\e041"; } + +.fa-train:before { + content: "\f238"; } + +.fa-tram:before { + content: "\f7da"; } + +.fa-transgender:before { + content: "\f224"; } + +.fa-transgender-alt:before { + content: "\f225"; } + +.fa-trash:before { + content: "\f1f8"; } + +.fa-trash-alt:before { + content: "\f2ed"; } + +.fa-trash-restore:before { + content: "\f829"; } + +.fa-trash-restore-alt:before { + content: "\f82a"; } + +.fa-tree:before { + content: "\f1bb"; } + +.fa-trello:before { + content: "\f181"; } + +.fa-tripadvisor:before { + content: "\f262"; } + +.fa-trophy:before { + content: "\f091"; } + +.fa-truck:before { + content: "\f0d1"; } + +.fa-truck-loading:before { + content: "\f4de"; } + +.fa-truck-monster:before { + content: "\f63b"; } + +.fa-truck-moving:before { + content: "\f4df"; } + +.fa-truck-pickup:before { + content: "\f63c"; } + +.fa-tshirt:before { + content: "\f553"; } + +.fa-tty:before { + content: "\f1e4"; } + +.fa-tumblr:before { + content: "\f173"; } + +.fa-tumblr-square:before { + content: "\f174"; } + +.fa-tv:before { + content: "\f26c"; } + +.fa-twitch:before { + content: "\f1e8"; } + +.fa-twitter:before { + content: "\f099"; } + +.fa-twitter-square:before { + content: "\f081"; } + +.fa-typo3:before { + content: "\f42b"; } + +.fa-uber:before { + content: "\f402"; } + +.fa-ubuntu:before { + content: "\f7df"; } + +.fa-uikit:before { + content: "\f403"; } + +.fa-umbraco:before { + content: "\f8e8"; } + +.fa-umbrella:before { + content: "\f0e9"; } + +.fa-umbrella-beach:before { + content: "\f5ca"; } + +.fa-uncharted:before { + content: "\e084"; } + +.fa-underline:before { + content: "\f0cd"; } + +.fa-undo:before { + content: "\f0e2"; } + +.fa-undo-alt:before { + content: "\f2ea"; } + +.fa-uniregistry:before { + content: "\f404"; } + +.fa-unity:before { + content: "\e049"; } + +.fa-universal-access:before { + content: "\f29a"; } + +.fa-university:before { + content: "\f19c"; } + +.fa-unlink:before { + content: "\f127"; } + +.fa-unlock:before { + content: "\f09c"; } + +.fa-unlock-alt:before { + content: "\f13e"; } + +.fa-unsplash:before { + content: "\e07c"; } + +.fa-untappd:before { + content: "\f405"; } + +.fa-upload:before { + content: "\f093"; } + +.fa-ups:before { + content: "\f7e0"; } + +.fa-usb:before { + content: "\f287"; } + +.fa-user:before { + content: "\f007"; } + +.fa-user-alt:before { + content: "\f406"; } + +.fa-user-alt-slash:before { + content: "\f4fa"; } + +.fa-user-astronaut:before { + content: "\f4fb"; } + +.fa-user-check:before { + content: "\f4fc"; } + +.fa-user-circle:before { + content: "\f2bd"; } + +.fa-user-clock:before { + content: "\f4fd"; } + +.fa-user-cog:before { + content: "\f4fe"; } + +.fa-user-edit:before { + content: "\f4ff"; } + +.fa-user-friends:before { + content: "\f500"; } + +.fa-user-graduate:before { + content: "\f501"; } + +.fa-user-injured:before { + content: "\f728"; } + +.fa-user-lock:before { + content: "\f502"; } + +.fa-user-md:before { + content: "\f0f0"; } + +.fa-user-minus:before { + content: "\f503"; } + +.fa-user-ninja:before { + content: "\f504"; } + +.fa-user-nurse:before { + content: "\f82f"; } + +.fa-user-plus:before { + content: "\f234"; } + +.fa-user-secret:before { + content: "\f21b"; } + +.fa-user-shield:before { + content: "\f505"; } + +.fa-user-slash:before { + content: "\f506"; } + +.fa-user-tag:before { + content: "\f507"; } + +.fa-user-tie:before { + content: "\f508"; } + +.fa-user-times:before { + content: "\f235"; } + +.fa-users:before { + content: "\f0c0"; } + +.fa-users-cog:before { + content: "\f509"; } + +.fa-users-slash:before { + content: "\e073"; } + +.fa-usps:before { + content: "\f7e1"; } + +.fa-ussunnah:before { + content: "\f407"; } + +.fa-utensil-spoon:before { + content: "\f2e5"; } + +.fa-utensils:before { + content: "\f2e7"; } + +.fa-vaadin:before { + content: "\f408"; } + +.fa-vector-square:before { + content: "\f5cb"; } + +.fa-venus:before { + content: "\f221"; } + +.fa-venus-double:before { + content: "\f226"; } + +.fa-venus-mars:before { + content: "\f228"; } + +.fa-vest:before { + content: "\e085"; } + +.fa-vest-patches:before { + content: "\e086"; } + +.fa-viacoin:before { + content: "\f237"; } + +.fa-viadeo:before { + content: "\f2a9"; } + +.fa-viadeo-square:before { + content: "\f2aa"; } + +.fa-vial:before { + content: "\f492"; } + +.fa-vials:before { + content: "\f493"; } + +.fa-viber:before { + content: "\f409"; } + +.fa-video:before { + content: "\f03d"; } + +.fa-video-slash:before { + content: "\f4e2"; } + +.fa-vihara:before { + content: "\f6a7"; } + +.fa-vimeo:before { + content: "\f40a"; } + +.fa-vimeo-square:before { + content: "\f194"; } + +.fa-vimeo-v:before { + content: "\f27d"; } + +.fa-vine:before { + content: "\f1ca"; } + +.fa-virus:before { + content: "\e074"; } + +.fa-virus-slash:before { + content: "\e075"; } + +.fa-viruses:before { + content: "\e076"; } + +.fa-vk:before { + content: "\f189"; } + +.fa-vnv:before { + content: "\f40b"; } + +.fa-voicemail:before { + content: "\f897"; } + +.fa-volleyball-ball:before { + content: "\f45f"; } + +.fa-volume-down:before { + content: "\f027"; } + +.fa-volume-mute:before { + content: "\f6a9"; } + +.fa-volume-off:before { + content: "\f026"; } + +.fa-volume-up:before { + content: "\f028"; } + +.fa-vote-yea:before { + content: "\f772"; } + +.fa-vr-cardboard:before { + content: "\f729"; } + +.fa-vuejs:before { + content: "\f41f"; } + +.fa-walking:before { + content: "\f554"; } + +.fa-wallet:before { + content: "\f555"; } + +.fa-warehouse:before { + content: "\f494"; } + +.fa-watchman-monitoring:before { + content: "\e087"; } + +.fa-water:before { + content: "\f773"; } + +.fa-wave-square:before { + content: "\f83e"; } + +.fa-waze:before { + content: "\f83f"; } + +.fa-weebly:before { + content: "\f5cc"; } + +.fa-weibo:before { + content: "\f18a"; } + +.fa-weight:before { + content: "\f496"; } + +.fa-weight-hanging:before { + content: "\f5cd"; } + +.fa-weixin:before { + content: "\f1d7"; } + +.fa-whatsapp:before { + content: "\f232"; } + +.fa-whatsapp-square:before { + content: "\f40c"; } + +.fa-wheelchair:before { + content: "\f193"; } + +.fa-whmcs:before { + content: "\f40d"; } + +.fa-wifi:before { + content: "\f1eb"; } + +.fa-wikipedia-w:before { + content: "\f266"; } + +.fa-wind:before { + content: "\f72e"; } + +.fa-window-close:before { + content: "\f410"; } + +.fa-window-maximize:before { + content: "\f2d0"; } + +.fa-window-minimize:before { + content: "\f2d1"; } + +.fa-window-restore:before { + content: "\f2d2"; } + +.fa-windows:before { + content: "\f17a"; } + +.fa-wine-bottle:before { + content: "\f72f"; } + +.fa-wine-glass:before { + content: "\f4e3"; } + +.fa-wine-glass-alt:before { + content: "\f5ce"; } + +.fa-wix:before { + content: "\f5cf"; } + +.fa-wizards-of-the-coast:before { + content: "\f730"; } + +.fa-wodu:before { + content: "\e088"; } + +.fa-wolf-pack-battalion:before { + content: "\f514"; } + +.fa-won-sign:before { + content: "\f159"; } + +.fa-wordpress:before { + content: "\f19a"; } + +.fa-wordpress-simple:before { + content: "\f411"; } + +.fa-wpbeginner:before { + content: "\f297"; } + +.fa-wpexplorer:before { + content: "\f2de"; } + +.fa-wpforms:before { + content: "\f298"; } + +.fa-wpressr:before { + content: "\f3e4"; } + +.fa-wrench:before { + content: "\f0ad"; } + +.fa-x-ray:before { + content: "\f497"; } + +.fa-xbox:before { + content: "\f412"; } + +.fa-xing:before { + content: "\f168"; } + +.fa-xing-square:before { + content: "\f169"; } + +.fa-y-combinator:before { + content: "\f23b"; } + +.fa-yahoo:before { + content: "\f19e"; } + +.fa-yammer:before { + content: "\f840"; } + +.fa-yandex:before { + content: "\f413"; } + +.fa-yandex-international:before { + content: "\f414"; } + +.fa-yarn:before { + content: "\f7e3"; } + +.fa-yelp:before { + content: "\f1e9"; } + +.fa-yen-sign:before { + content: "\f157"; } + +.fa-yin-yang:before { + content: "\f6ad"; } + +.fa-yoast:before { + content: "\f2b1"; } + +.fa-youtube:before { + content: "\f167"; } + +.fa-youtube-square:before { + content: "\f431"; } + +.fa-zhihu:before { + content: "\f63f"; } + +.sr-only { + border: 0; + clip: rect(0, 0, 0, 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; } + +.sr-only-focusable:active, .sr-only-focusable:focus { + clip: auto; + height: auto; + margin: 0; + overflow: visible; + position: static; + width: auto; } +@font-face { + font-family: 'Font Awesome 5 Brands'; + font-style: normal; + font-weight: 400; + font-display: block; + src: url("../webfonts/fa-brands-400.eot"); + src: url("../webfonts/fa-brands-400.eot?#iefix") format("embedded-opentype"), url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.woff") format("woff"), url("../webfonts/fa-brands-400.ttf") format("truetype"), url("../webfonts/fa-brands-400.svg#fontawesome") format("svg"); } + +.fab { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } +@font-face { + font-family: 'Font Awesome 5 Free'; + font-style: normal; + font-weight: 400; + font-display: block; + src: url("../webfonts/fa-regular-400.eot"); + src: url("../webfonts/fa-regular-400.eot?#iefix") format("embedded-opentype"), url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.woff") format("woff"), url("../webfonts/fa-regular-400.ttf") format("truetype"), url("../webfonts/fa-regular-400.svg#fontawesome") format("svg"); } + +.far { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } +@font-face { + font-family: 'Font Awesome 5 Free'; + font-style: normal; + font-weight: 900; + font-display: block; + src: url("../webfonts/fa-solid-900.eot"); + src: url("../webfonts/fa-solid-900.eot?#iefix") format("embedded-opentype"), url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.woff") format("woff"), url("../webfonts/fa-solid-900.ttf") format("truetype"), url("../webfonts/fa-solid-900.svg#fontawesome") format("svg"); } + +.fa, +.fas { + font-family: 'Font Awesome 5 Free'; + font-weight: 900; } diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/css/v4-shims.css b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/css/v4-shims.css new file mode 100644 index 0000000000..698118c28a --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/css/v4-shims.css @@ -0,0 +1,2172 @@ +/*! + * Font Awesome Free 5.15.2 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + */ +.fa.fa-glass:before { + content: "\f000"; } + +.fa.fa-meetup { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-star-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-star-o:before { + content: "\f005"; } + +.fa.fa-remove:before { + content: "\f00d"; } + +.fa.fa-close:before { + content: "\f00d"; } + +.fa.fa-gear:before { + content: "\f013"; } + +.fa.fa-trash-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-trash-o:before { + content: "\f2ed"; } + +.fa.fa-file-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-file-o:before { + content: "\f15b"; } + +.fa.fa-clock-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-clock-o:before { + content: "\f017"; } + +.fa.fa-arrow-circle-o-down { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-arrow-circle-o-down:before { + content: "\f358"; } + +.fa.fa-arrow-circle-o-up { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-arrow-circle-o-up:before { + content: "\f35b"; } + +.fa.fa-play-circle-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-play-circle-o:before { + content: "\f144"; } + +.fa.fa-repeat:before { + content: "\f01e"; } + +.fa.fa-rotate-right:before { + content: "\f01e"; } + +.fa.fa-refresh:before { + content: "\f021"; } + +.fa.fa-list-alt { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-dedent:before { + content: "\f03b"; } + +.fa.fa-video-camera:before { + content: "\f03d"; } + +.fa.fa-picture-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-picture-o:before { + content: "\f03e"; } + +.fa.fa-photo { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-photo:before { + content: "\f03e"; } + +.fa.fa-image { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-image:before { + content: "\f03e"; } + +.fa.fa-pencil:before { + content: "\f303"; } + +.fa.fa-map-marker:before { + content: "\f3c5"; } + +.fa.fa-pencil-square-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-pencil-square-o:before { + content: "\f044"; } + +.fa.fa-share-square-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-share-square-o:before { + content: "\f14d"; } + +.fa.fa-check-square-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-check-square-o:before { + content: "\f14a"; } + +.fa.fa-arrows:before { + content: "\f0b2"; } + +.fa.fa-times-circle-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-times-circle-o:before { + content: "\f057"; } + +.fa.fa-check-circle-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-check-circle-o:before { + content: "\f058"; } + +.fa.fa-mail-forward:before { + content: "\f064"; } + +.fa.fa-expand:before { + content: "\f424"; } + +.fa.fa-compress:before { + content: "\f422"; } + +.fa.fa-eye { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-eye-slash { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-warning:before { + content: "\f071"; } + +.fa.fa-calendar:before { + content: "\f073"; } + +.fa.fa-arrows-v:before { + content: "\f338"; } + +.fa.fa-arrows-h:before { + content: "\f337"; } + +.fa.fa-bar-chart { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-bar-chart:before { + content: "\f080"; } + +.fa.fa-bar-chart-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-bar-chart-o:before { + content: "\f080"; } + +.fa.fa-twitter-square { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-facebook-square { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-gears:before { + content: "\f085"; } + +.fa.fa-thumbs-o-up { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-thumbs-o-up:before { + content: "\f164"; } + +.fa.fa-thumbs-o-down { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-thumbs-o-down:before { + content: "\f165"; } + +.fa.fa-heart-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-heart-o:before { + content: "\f004"; } + +.fa.fa-sign-out:before { + content: "\f2f5"; } + +.fa.fa-linkedin-square { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-linkedin-square:before { + content: "\f08c"; } + +.fa.fa-thumb-tack:before { + content: "\f08d"; } + +.fa.fa-external-link:before { + content: "\f35d"; } + +.fa.fa-sign-in:before { + content: "\f2f6"; } + +.fa.fa-github-square { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-lemon-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-lemon-o:before { + content: "\f094"; } + +.fa.fa-square-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-square-o:before { + content: "\f0c8"; } + +.fa.fa-bookmark-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-bookmark-o:before { + content: "\f02e"; } + +.fa.fa-twitter { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-facebook { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-facebook:before { + content: "\f39e"; } + +.fa.fa-facebook-f { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-facebook-f:before { + content: "\f39e"; } + +.fa.fa-github { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-credit-card { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-feed:before { + content: "\f09e"; } + +.fa.fa-hdd-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-hdd-o:before { + content: "\f0a0"; } + +.fa.fa-hand-o-right { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-hand-o-right:before { + content: "\f0a4"; } + +.fa.fa-hand-o-left { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-hand-o-left:before { + content: "\f0a5"; } + +.fa.fa-hand-o-up { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-hand-o-up:before { + content: "\f0a6"; } + +.fa.fa-hand-o-down { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-hand-o-down:before { + content: "\f0a7"; } + +.fa.fa-arrows-alt:before { + content: "\f31e"; } + +.fa.fa-group:before { + content: "\f0c0"; } + +.fa.fa-chain:before { + content: "\f0c1"; } + +.fa.fa-scissors:before { + content: "\f0c4"; } + +.fa.fa-files-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-files-o:before { + content: "\f0c5"; } + +.fa.fa-floppy-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-floppy-o:before { + content: "\f0c7"; } + +.fa.fa-navicon:before { + content: "\f0c9"; } + +.fa.fa-reorder:before { + content: "\f0c9"; } + +.fa.fa-pinterest { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-pinterest-square { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-google-plus-square { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-google-plus { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-google-plus:before { + content: "\f0d5"; } + +.fa.fa-money { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-money:before { + content: "\f3d1"; } + +.fa.fa-unsorted:before { + content: "\f0dc"; } + +.fa.fa-sort-desc:before { + content: "\f0dd"; } + +.fa.fa-sort-asc:before { + content: "\f0de"; } + +.fa.fa-linkedin { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-linkedin:before { + content: "\f0e1"; } + +.fa.fa-rotate-left:before { + content: "\f0e2"; } + +.fa.fa-legal:before { + content: "\f0e3"; } + +.fa.fa-tachometer:before { + content: "\f3fd"; } + +.fa.fa-dashboard:before { + content: "\f3fd"; } + +.fa.fa-comment-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-comment-o:before { + content: "\f075"; } + +.fa.fa-comments-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-comments-o:before { + content: "\f086"; } + +.fa.fa-flash:before { + content: "\f0e7"; } + +.fa.fa-clipboard { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-paste { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-paste:before { + content: "\f328"; } + +.fa.fa-lightbulb-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-lightbulb-o:before { + content: "\f0eb"; } + +.fa.fa-exchange:before { + content: "\f362"; } + +.fa.fa-cloud-download:before { + content: "\f381"; } + +.fa.fa-cloud-upload:before { + content: "\f382"; } + +.fa.fa-bell-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-bell-o:before { + content: "\f0f3"; } + +.fa.fa-cutlery:before { + content: "\f2e7"; } + +.fa.fa-file-text-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-file-text-o:before { + content: "\f15c"; } + +.fa.fa-building-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-building-o:before { + content: "\f1ad"; } + +.fa.fa-hospital-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-hospital-o:before { + content: "\f0f8"; } + +.fa.fa-tablet:before { + content: "\f3fa"; } + +.fa.fa-mobile:before { + content: "\f3cd"; } + +.fa.fa-mobile-phone:before { + content: "\f3cd"; } + +.fa.fa-circle-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-circle-o:before { + content: "\f111"; } + +.fa.fa-mail-reply:before { + content: "\f3e5"; } + +.fa.fa-github-alt { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-folder-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-folder-o:before { + content: "\f07b"; } + +.fa.fa-folder-open-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-folder-open-o:before { + content: "\f07c"; } + +.fa.fa-smile-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-smile-o:before { + content: "\f118"; } + +.fa.fa-frown-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-frown-o:before { + content: "\f119"; } + +.fa.fa-meh-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-meh-o:before { + content: "\f11a"; } + +.fa.fa-keyboard-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-keyboard-o:before { + content: "\f11c"; } + +.fa.fa-flag-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-flag-o:before { + content: "\f024"; } + +.fa.fa-mail-reply-all:before { + content: "\f122"; } + +.fa.fa-star-half-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-star-half-o:before { + content: "\f089"; } + +.fa.fa-star-half-empty { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-star-half-empty:before { + content: "\f089"; } + +.fa.fa-star-half-full { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-star-half-full:before { + content: "\f089"; } + +.fa.fa-code-fork:before { + content: "\f126"; } + +.fa.fa-chain-broken:before { + content: "\f127"; } + +.fa.fa-shield:before { + content: "\f3ed"; } + +.fa.fa-calendar-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-calendar-o:before { + content: "\f133"; } + +.fa.fa-maxcdn { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-html5 { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-css3 { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-ticket:before { + content: "\f3ff"; } + +.fa.fa-minus-square-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-minus-square-o:before { + content: "\f146"; } + +.fa.fa-level-up:before { + content: "\f3bf"; } + +.fa.fa-level-down:before { + content: "\f3be"; } + +.fa.fa-pencil-square:before { + content: "\f14b"; } + +.fa.fa-external-link-square:before { + content: "\f360"; } + +.fa.fa-compass { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-caret-square-o-down { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-caret-square-o-down:before { + content: "\f150"; } + +.fa.fa-toggle-down { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-toggle-down:before { + content: "\f150"; } + +.fa.fa-caret-square-o-up { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-caret-square-o-up:before { + content: "\f151"; } + +.fa.fa-toggle-up { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-toggle-up:before { + content: "\f151"; } + +.fa.fa-caret-square-o-right { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-caret-square-o-right:before { + content: "\f152"; } + +.fa.fa-toggle-right { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-toggle-right:before { + content: "\f152"; } + +.fa.fa-eur:before { + content: "\f153"; } + +.fa.fa-euro:before { + content: "\f153"; } + +.fa.fa-gbp:before { + content: "\f154"; } + +.fa.fa-usd:before { + content: "\f155"; } + +.fa.fa-dollar:before { + content: "\f155"; } + +.fa.fa-inr:before { + content: "\f156"; } + +.fa.fa-rupee:before { + content: "\f156"; } + +.fa.fa-jpy:before { + content: "\f157"; } + +.fa.fa-cny:before { + content: "\f157"; } + +.fa.fa-rmb:before { + content: "\f157"; } + +.fa.fa-yen:before { + content: "\f157"; } + +.fa.fa-rub:before { + content: "\f158"; } + +.fa.fa-ruble:before { + content: "\f158"; } + +.fa.fa-rouble:before { + content: "\f158"; } + +.fa.fa-krw:before { + content: "\f159"; } + +.fa.fa-won:before { + content: "\f159"; } + +.fa.fa-btc { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-bitcoin { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-bitcoin:before { + content: "\f15a"; } + +.fa.fa-file-text:before { + content: "\f15c"; } + +.fa.fa-sort-alpha-asc:before { + content: "\f15d"; } + +.fa.fa-sort-alpha-desc:before { + content: "\f881"; } + +.fa.fa-sort-amount-asc:before { + content: "\f160"; } + +.fa.fa-sort-amount-desc:before { + content: "\f884"; } + +.fa.fa-sort-numeric-asc:before { + content: "\f162"; } + +.fa.fa-sort-numeric-desc:before { + content: "\f886"; } + +.fa.fa-youtube-square { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-youtube { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-xing { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-xing-square { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-youtube-play { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-youtube-play:before { + content: "\f167"; } + +.fa.fa-dropbox { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-stack-overflow { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-instagram { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-flickr { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-adn { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-bitbucket { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-bitbucket-square { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-bitbucket-square:before { + content: "\f171"; } + +.fa.fa-tumblr { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-tumblr-square { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-long-arrow-down:before { + content: "\f309"; } + +.fa.fa-long-arrow-up:before { + content: "\f30c"; } + +.fa.fa-long-arrow-left:before { + content: "\f30a"; } + +.fa.fa-long-arrow-right:before { + content: "\f30b"; } + +.fa.fa-apple { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-windows { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-android { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-linux { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-dribbble { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-skype { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-foursquare { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-trello { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-gratipay { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-gittip { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-gittip:before { + content: "\f184"; } + +.fa.fa-sun-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-sun-o:before { + content: "\f185"; } + +.fa.fa-moon-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-moon-o:before { + content: "\f186"; } + +.fa.fa-vk { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-weibo { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-renren { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-pagelines { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-stack-exchange { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-arrow-circle-o-right { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-arrow-circle-o-right:before { + content: "\f35a"; } + +.fa.fa-arrow-circle-o-left { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-arrow-circle-o-left:before { + content: "\f359"; } + +.fa.fa-caret-square-o-left { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-caret-square-o-left:before { + content: "\f191"; } + +.fa.fa-toggle-left { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-toggle-left:before { + content: "\f191"; } + +.fa.fa-dot-circle-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-dot-circle-o:before { + content: "\f192"; } + +.fa.fa-vimeo-square { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-try:before { + content: "\f195"; } + +.fa.fa-turkish-lira:before { + content: "\f195"; } + +.fa.fa-plus-square-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-plus-square-o:before { + content: "\f0fe"; } + +.fa.fa-slack { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-wordpress { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-openid { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-institution:before { + content: "\f19c"; } + +.fa.fa-bank:before { + content: "\f19c"; } + +.fa.fa-mortar-board:before { + content: "\f19d"; } + +.fa.fa-yahoo { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-google { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-reddit { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-reddit-square { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-stumbleupon-circle { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-stumbleupon { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-delicious { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-digg { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-pied-piper-pp { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-pied-piper-alt { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-drupal { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-joomla { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-spoon:before { + content: "\f2e5"; } + +.fa.fa-behance { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-behance-square { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-steam { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-steam-square { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-automobile:before { + content: "\f1b9"; } + +.fa.fa-envelope-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-envelope-o:before { + content: "\f0e0"; } + +.fa.fa-spotify { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-deviantart { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-soundcloud { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-file-pdf-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-file-pdf-o:before { + content: "\f1c1"; } + +.fa.fa-file-word-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-file-word-o:before { + content: "\f1c2"; } + +.fa.fa-file-excel-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-file-excel-o:before { + content: "\f1c3"; } + +.fa.fa-file-powerpoint-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-file-powerpoint-o:before { + content: "\f1c4"; } + +.fa.fa-file-image-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-file-image-o:before { + content: "\f1c5"; } + +.fa.fa-file-photo-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-file-photo-o:before { + content: "\f1c5"; } + +.fa.fa-file-picture-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-file-picture-o:before { + content: "\f1c5"; } + +.fa.fa-file-archive-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-file-archive-o:before { + content: "\f1c6"; } + +.fa.fa-file-zip-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-file-zip-o:before { + content: "\f1c6"; } + +.fa.fa-file-audio-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-file-audio-o:before { + content: "\f1c7"; } + +.fa.fa-file-sound-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-file-sound-o:before { + content: "\f1c7"; } + +.fa.fa-file-video-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-file-video-o:before { + content: "\f1c8"; } + +.fa.fa-file-movie-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-file-movie-o:before { + content: "\f1c8"; } + +.fa.fa-file-code-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-file-code-o:before { + content: "\f1c9"; } + +.fa.fa-vine { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-codepen { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-jsfiddle { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-life-ring { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-life-bouy { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-life-bouy:before { + content: "\f1cd"; } + +.fa.fa-life-buoy { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-life-buoy:before { + content: "\f1cd"; } + +.fa.fa-life-saver { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-life-saver:before { + content: "\f1cd"; } + +.fa.fa-support { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-support:before { + content: "\f1cd"; } + +.fa.fa-circle-o-notch:before { + content: "\f1ce"; } + +.fa.fa-rebel { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-ra { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-ra:before { + content: "\f1d0"; } + +.fa.fa-resistance { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-resistance:before { + content: "\f1d0"; } + +.fa.fa-empire { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-ge { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-ge:before { + content: "\f1d1"; } + +.fa.fa-git-square { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-git { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-hacker-news { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-y-combinator-square { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-y-combinator-square:before { + content: "\f1d4"; } + +.fa.fa-yc-square { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-yc-square:before { + content: "\f1d4"; } + +.fa.fa-tencent-weibo { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-qq { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-weixin { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-wechat { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-wechat:before { + content: "\f1d7"; } + +.fa.fa-send:before { + content: "\f1d8"; } + +.fa.fa-paper-plane-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-paper-plane-o:before { + content: "\f1d8"; } + +.fa.fa-send-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-send-o:before { + content: "\f1d8"; } + +.fa.fa-circle-thin { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-circle-thin:before { + content: "\f111"; } + +.fa.fa-header:before { + content: "\f1dc"; } + +.fa.fa-sliders:before { + content: "\f1de"; } + +.fa.fa-futbol-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-futbol-o:before { + content: "\f1e3"; } + +.fa.fa-soccer-ball-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-soccer-ball-o:before { + content: "\f1e3"; } + +.fa.fa-slideshare { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-twitch { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-yelp { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-newspaper-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-newspaper-o:before { + content: "\f1ea"; } + +.fa.fa-paypal { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-google-wallet { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-cc-visa { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-cc-mastercard { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-cc-discover { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-cc-amex { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-cc-paypal { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-cc-stripe { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-bell-slash-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-bell-slash-o:before { + content: "\f1f6"; } + +.fa.fa-trash:before { + content: "\f2ed"; } + +.fa.fa-copyright { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-eyedropper:before { + content: "\f1fb"; } + +.fa.fa-area-chart:before { + content: "\f1fe"; } + +.fa.fa-pie-chart:before { + content: "\f200"; } + +.fa.fa-line-chart:before { + content: "\f201"; } + +.fa.fa-lastfm { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-lastfm-square { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-ioxhost { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-angellist { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-cc { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-cc:before { + content: "\f20a"; } + +.fa.fa-ils:before { + content: "\f20b"; } + +.fa.fa-shekel:before { + content: "\f20b"; } + +.fa.fa-sheqel:before { + content: "\f20b"; } + +.fa.fa-meanpath { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-meanpath:before { + content: "\f2b4"; } + +.fa.fa-buysellads { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-connectdevelop { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-dashcube { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-forumbee { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-leanpub { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-sellsy { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-shirtsinbulk { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-simplybuilt { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-skyatlas { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-diamond { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-diamond:before { + content: "\f3a5"; } + +.fa.fa-intersex:before { + content: "\f224"; } + +.fa.fa-facebook-official { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-facebook-official:before { + content: "\f09a"; } + +.fa.fa-pinterest-p { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-whatsapp { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-hotel:before { + content: "\f236"; } + +.fa.fa-viacoin { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-medium { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-y-combinator { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-yc { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-yc:before { + content: "\f23b"; } + +.fa.fa-optin-monster { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-opencart { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-expeditedssl { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-battery-4:before { + content: "\f240"; } + +.fa.fa-battery:before { + content: "\f240"; } + +.fa.fa-battery-3:before { + content: "\f241"; } + +.fa.fa-battery-2:before { + content: "\f242"; } + +.fa.fa-battery-1:before { + content: "\f243"; } + +.fa.fa-battery-0:before { + content: "\f244"; } + +.fa.fa-object-group { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-object-ungroup { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-sticky-note-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-sticky-note-o:before { + content: "\f249"; } + +.fa.fa-cc-jcb { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-cc-diners-club { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-clone { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-hourglass-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-hourglass-o:before { + content: "\f254"; } + +.fa.fa-hourglass-1:before { + content: "\f251"; } + +.fa.fa-hourglass-2:before { + content: "\f252"; } + +.fa.fa-hourglass-3:before { + content: "\f253"; } + +.fa.fa-hand-rock-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-hand-rock-o:before { + content: "\f255"; } + +.fa.fa-hand-grab-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-hand-grab-o:before { + content: "\f255"; } + +.fa.fa-hand-paper-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-hand-paper-o:before { + content: "\f256"; } + +.fa.fa-hand-stop-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-hand-stop-o:before { + content: "\f256"; } + +.fa.fa-hand-scissors-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-hand-scissors-o:before { + content: "\f257"; } + +.fa.fa-hand-lizard-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-hand-lizard-o:before { + content: "\f258"; } + +.fa.fa-hand-spock-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-hand-spock-o:before { + content: "\f259"; } + +.fa.fa-hand-pointer-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-hand-pointer-o:before { + content: "\f25a"; } + +.fa.fa-hand-peace-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-hand-peace-o:before { + content: "\f25b"; } + +.fa.fa-registered { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-creative-commons { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-gg { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-gg-circle { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-tripadvisor { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-odnoklassniki { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-odnoklassniki-square { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-get-pocket { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-wikipedia-w { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-safari { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-chrome { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-firefox { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-opera { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-internet-explorer { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-television:before { + content: "\f26c"; } + +.fa.fa-contao { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-500px { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-amazon { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-calendar-plus-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-calendar-plus-o:before { + content: "\f271"; } + +.fa.fa-calendar-minus-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-calendar-minus-o:before { + content: "\f272"; } + +.fa.fa-calendar-times-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-calendar-times-o:before { + content: "\f273"; } + +.fa.fa-calendar-check-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-calendar-check-o:before { + content: "\f274"; } + +.fa.fa-map-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-map-o:before { + content: "\f279"; } + +.fa.fa-commenting:before { + content: "\f4ad"; } + +.fa.fa-commenting-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-commenting-o:before { + content: "\f4ad"; } + +.fa.fa-houzz { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-vimeo { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-vimeo:before { + content: "\f27d"; } + +.fa.fa-black-tie { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-fonticons { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-reddit-alien { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-edge { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-credit-card-alt:before { + content: "\f09d"; } + +.fa.fa-codiepie { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-modx { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-fort-awesome { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-usb { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-product-hunt { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-mixcloud { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-scribd { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-pause-circle-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-pause-circle-o:before { + content: "\f28b"; } + +.fa.fa-stop-circle-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-stop-circle-o:before { + content: "\f28d"; } + +.fa.fa-bluetooth { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-bluetooth-b { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-gitlab { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-wpbeginner { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-wpforms { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-envira { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-wheelchair-alt { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-wheelchair-alt:before { + content: "\f368"; } + +.fa.fa-question-circle-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-question-circle-o:before { + content: "\f059"; } + +.fa.fa-volume-control-phone:before { + content: "\f2a0"; } + +.fa.fa-asl-interpreting:before { + content: "\f2a3"; } + +.fa.fa-deafness:before { + content: "\f2a4"; } + +.fa.fa-hard-of-hearing:before { + content: "\f2a4"; } + +.fa.fa-glide { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-glide-g { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-signing:before { + content: "\f2a7"; } + +.fa.fa-viadeo { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-viadeo-square { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-snapchat { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-snapchat-ghost { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-snapchat-square { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-pied-piper { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-first-order { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-yoast { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-themeisle { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-google-plus-official { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-google-plus-official:before { + content: "\f2b3"; } + +.fa.fa-google-plus-circle { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-google-plus-circle:before { + content: "\f2b3"; } + +.fa.fa-font-awesome { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-fa { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-fa:before { + content: "\f2b4"; } + +.fa.fa-handshake-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-handshake-o:before { + content: "\f2b5"; } + +.fa.fa-envelope-open-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-envelope-open-o:before { + content: "\f2b6"; } + +.fa.fa-linode { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-address-book-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-address-book-o:before { + content: "\f2b9"; } + +.fa.fa-vcard:before { + content: "\f2bb"; } + +.fa.fa-address-card-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-address-card-o:before { + content: "\f2bb"; } + +.fa.fa-vcard-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-vcard-o:before { + content: "\f2bb"; } + +.fa.fa-user-circle-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-user-circle-o:before { + content: "\f2bd"; } + +.fa.fa-user-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-user-o:before { + content: "\f007"; } + +.fa.fa-id-badge { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-drivers-license:before { + content: "\f2c2"; } + +.fa.fa-id-card-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-id-card-o:before { + content: "\f2c2"; } + +.fa.fa-drivers-license-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-drivers-license-o:before { + content: "\f2c2"; } + +.fa.fa-quora { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-free-code-camp { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-telegram { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-thermometer-4:before { + content: "\f2c7"; } + +.fa.fa-thermometer:before { + content: "\f2c7"; } + +.fa.fa-thermometer-3:before { + content: "\f2c8"; } + +.fa.fa-thermometer-2:before { + content: "\f2c9"; } + +.fa.fa-thermometer-1:before { + content: "\f2ca"; } + +.fa.fa-thermometer-0:before { + content: "\f2cb"; } + +.fa.fa-bathtub:before { + content: "\f2cd"; } + +.fa.fa-s15:before { + content: "\f2cd"; } + +.fa.fa-window-maximize { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-window-restore { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-times-rectangle:before { + content: "\f410"; } + +.fa.fa-window-close-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-window-close-o:before { + content: "\f410"; } + +.fa.fa-times-rectangle-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-times-rectangle-o:before { + content: "\f410"; } + +.fa.fa-bandcamp { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-grav { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-etsy { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-imdb { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-ravelry { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-eercast { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-eercast:before { + content: "\f2da"; } + +.fa.fa-snowflake-o { + font-family: 'Font Awesome 5 Free'; + font-weight: 400; } + +.fa.fa-snowflake-o:before { + content: "\f2dc"; } + +.fa.fa-superpowers { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-wpexplorer { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + +.fa.fa-cab:before { + content: "\f1ba"; } diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-brands-400.eot b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-brands-400.eot new file mode 100644 index 0000000000000000000000000000000000000000..cdef69f09be0ba253b6a8fcf74a683b2849424fd GIT binary patch literal 136822 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 &=&^OXx>DnU;mPNd2~DZS<1txA+=Q&CwkkVL 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 b)_CDZ?P2@cUmg6udjF%sU(l=3dY|||3h!_* literal 0 HcmV?d00001 diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-brands-400.svg b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-brands-400.svg new file mode 100644 index 0000000000..54da424a7c --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-brands-400.svg @@ -0,0 +1,3717 @@ + + + + +Created by FontForge 20200314 at Wed Jan 13 11:57:55 2021 + By Robert Madole +Copyright (c) Font Awesome + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-brands-400.ttf b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-brands-400.ttf new file mode 100644 index 0000000000000000000000000000000000000000..8ecb67b04090d546a75fff5b110a75887a5dfd79 GIT binary patch literal 136516 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

P=Dl^Rj^C)5i_MLUN1jaQkTwY#yUE~OY%Uf% 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 literal 0 HcmV?d00001 diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-brands-400.woff b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-brands-400.woff new file mode 100644 index 0000000000000000000000000000000000000000..9bd812abc35c6ce879a42e0a38ad38412ea27bf2 GIT binary patch literal 92136 zcmZUZV{|1=*RbPEG)X45Z9AFRII(Tpm~dj7ckC0}#))m)Hr{!@zhAF)t?GUC-c?;c zx>r@N_E40N00RdD0|U1>0Ym!NLSTr2%ZBFvJNy3*2?gA{Gn`mf1-Z=Frx`*(O(3I?w22?mDr?>;eXv?Z;zJhM#<4Gm4f zf^=%W^k8Q_RCC8gtSG?rwP1_>P48cCi2uO+2gJV!5*+le{oni`{sH#CS|i^9?!ds5 zz`)tREHQzBeFQQAX7Q$$MuvvQhGyoy@DOvlD%iM$wcnn7o;%;*FapDDh$O#_B;xT4 zG4_>-i+g*2fcY`~l=aNMoY%2cRYQl_VH3@FnaXH_u^qy57m2>jT=_NRNi%57tRzMw z5)8j9UzeW`*iTtYCHb?asf}KOBrc8zEz+b;QMV*zKe~RT< zZ>N$nv(k57`0LU98Kt+E{K3b!tiT-^{h>wO5vF^}SQotOBZaL2xUY-=BSpfLQnRLo zQEe@znlW>$RJ*%a*U{rSvaY+B2hbn{J))P6)S*%nBet{LEjiWPI@# zM^S9qynpxhNz2>%=kv$UZG*feP8CD&(%ZzThfTKTCv*O<6 z{=zkjc&=SrW&3ZUp9xoUaGzaUHA!zu&D=VPc9YF!@Abi}rcW!c_o;3PE2P&r4tnkG zs`R;p_-GxVZ~+O7#>m{Fp z`c{Mb2e`3LXgz(`ckds8sON_yg50!Et^9OMW4L5bk+#XLwka(|^1LxC`qEN)sCewg z(mb?OG3gG2L9`n3${N^pHs9p#nlUd^+vxA^a#b_o0z#Ba|8bqWlRd4buhgP;aPZw5 z*PX0Vi^oaEiFXv{iSZTINM?~TBn(UWnd+Geo4Ow;qw|Lbr}x&>Vm}tMci?@&WSxFu?oWE6ZH03gg6qeqFcaM~hoCv~!w8GQ zOYBgq_Bw0A$nK(QLLAm&WA=$q2SeWwPyF>#f_K>!Oh73|F@!-MAYdl254KW* z3Ux#{7!dmrjA#F2In-uA4d|?Lh01mMb#Ud;~aqc!EG5a^QP(#E!$VVc(z(2(M{LD-DECi;ZzKA~@7;Gl?w41f z@G1079tgKYWE=ROR$q_cOB(VU@*SV*5>ed0M-%+ty9dHEJERjXom|q5F_VgvjqJJD zxzZ1`=3N71DDALl_wn|YU`v#kv&FS4nq`b3N68|O2PYvxi3<4*i5-k8ft__&H%8BC zh)145MGxXFD^ZEJ)iHB!m@Z5=}wb;PgcwFX^iw~nF|X5TVMx-wGHc`KJ8IrLBWA9K{Fsp}P`-Ip$hZUPXvIOW0&pBrdF4F#(z(rmSPKv4sq zU{Hz$2{0~?_hL$%^xA|Zc?ZvE|N9L(9_&WMpNqgci$sc)qTphCBTyoWqc#&-tt|Id z&}v{F0?n0#Ob$-eD9!OVH@z;yj|}}2(Bl#@?o;q!UZ7DA*5jdTn@m{nlBXhn^eQvq z)5x|V^cu@K)u(%n9Hc?44da8v=@{cf;R~=_*{Y&U->bKQ{u(*;#Dz;cvsyOaV)KQk zi*QqgDXntMrhdqpg)YTGuggetk?=LNnke|TAnmJPKqwIOhewI}R>c2i5G^1(XZxcU z)^uPo_#(mMs*91GjG_Ii{d~hg?PytY$mc59q9rz`{qt$P|$R-TH1b?_?Ia2}pvaFZ$HrlzP?6vT?-8EvjoEGg!5oAyD z1ODzOq)idZu2wat%S$%naLsiVaq~GO$lAOzf9{Gk;(kN;FrMA^&iw9AS#j%N`+EG6 zCCj&@^{W{T=bKJM)OoKo9~hm4 zI{6XaobY~lwKzvcNCrk2ZvsEsIK{_^s)X0DY+Ij=MD*>%?E_Di4Qdj6DTA=ii*_WI zD&f3VB3Zo(^pKzZR8>z#SXaXycj&4l+|LnSl3uyhP9$HuHE!C|lt#WeeSe;JlT5(L z_S^Mu27wW}c=5GJMs;F)>D%&`bTBjveG9+9Vv4vVZcs%TPRT+; zhBq~@7sZ?^4@qjVcj5`kDi@|VI{(E@MV?tCOxf|hdYg3bPl$6E*?9<V|BMqnr7SpdGuoPnJrDAs9m*hjCmrE5?Tnz^(+T2C z^2wkw7PwK}fl0oSSCWJ!G2|w2he0<_o+oPe<~+<0_;F{vcRK5HccE}dU7455yywFa z>kn@K-DjeMyl?NPzKvk75Btw)*p@F;kB`|vNTTgHp%$WaU;Dg|XfrC0Bf1-p75|_a zksNa9CRQ8@OTY6K@UUtz^Uqm+tC1Bk-Nf4Gqg@*vgRsT@Z?w8Z&{C zbMqdE9Ocyr;xbklEsh_y8oEJgq++!Vfo3Vr;E@rhIDtCINCOQ5;qO*0lk zEy~Owt(Z;{)fCI}PZ+Fi>q{VlB>7SzUl42kYoNma4r|=8j&Mc6==%F^h)uHn_KCND zRI(tQ~s3K_mM~TH9#ZhyX+P;=W!JgB4qe@UG0%RU(J7tH78Y=*`Xu1`7Kw zFa{$`s4pux#9vg(iij6&?EAy?8~j%wH3>gCxD+kv?>$m$3ivulq*>UqUr?TcQpsYc zujH^lSYAZLCd+2Cqs=TR_JpOZJg>~57(4N19_&NDh^{FU^8#A<=L54l7Aq?&oQwCA z`ZX6qd1SVWsnv*i0h#kENTJwDO6gS<^`nD5gG@W^<@%7e>1h$XQRfvCTkXmdQZ{)A z<*+Dp@wZ%j(166Di?az0-=2*n^q8Qk&w6XxNW{DAQETm^w1BPqNED|c##{rTi=Z{Q z!KlojoNW|R*f%WIpQPR2CMww;Z2z53PSyMuwJu_T#r6Kw72dju;$W1S3K+t^W5Gd{ zH}lSRGU>`)${7^XkLx@VEVT;VfaEN$&}3I#RN@1c2>x!MHLEY-RV{9uKcVFTOyD4t z7%-Y)40)7^eId}zsR~7F?1+F3YE6?)d8ZaeQ@Y;~4{3B3LYatz9`7tqo<4_IrVwr} z1jb@&dTxj134~I#dI*y(YDm^>+g=qf745ge|L#ELFu=M6G(%7cFT;d;Oc@_qQ1MGx zmZ$@JqUaocV&=W{!hT%{eeL(b_I&IFpSD>_>LYQ%A@rjHuM6TUtF$YLn$kV0H{rt-1V!*FpTBi7KS_#$T(aV8Mz&|H)^UR33`u7N>(IvruWkaz%Evh(6 zJWZ9b6#r?0#b?!mVc}se+%ozn-yzV2H`RTi&J0}l4v3(pz1&o#vg)XsRlCQCmcQ{2 zd4z4JHVcA7JH+E*0PR4;-UwrhDDsm}tZX;T6BCFMlijIV)iJSEmo;SoKa2e{t{>TS zKP2NYnz#x`WF@D<5)!Zn0%+PClN^9}sR zkz;VLM|ZH$cNFpL{&pjyGc^%WhyfO+6WI-wJ1rdco~v!W9&vGa!003_YZu8Hw*8>Y z%)twh;K^5eLB%-8|1K6c<<#VEX*r#Otjr~VVLy8lF4)!LF)G)+ko?LI6uV#M2`sp{ zRW#<~HF#*kQ?tAO=u+K%!Uo_At}6oEM?4k66DegiJD9{9KY@Z18_#p|2Jao!d0S3r z-Dm5m-A@C1Lha8EpQpo2uL_zTD@Ll{F{#RrgrAXG69+~0s65T(;qAavcrw){yOCew z=qxE`uI>7#HM(d@A-IMI`X175nnor0nk_-s)T_UK8N2C0t)YS+H~jd4yh0SIHX5lO>RzguggZWPSmAy0K%+o+?h8mWFNYb%eU^oLy0?v;x_NG zrg5^zZV=6G>09YffOOfDIaE0qwGXuc(#CO%7{UH!tl z>5j^+Xmw|z{rmlVC^ZEe#Y)x*WTcIsXn%rOd4@IRVwFV4(NGU99OD!E@fAWPe;6mB z?q;In*l-(F@0#iyIi&MW!mM=N(srZG@-#ot3iHRJr{?{Bfdf>GDd&6u{=8FT(7;ig za*_gcb=`%)gA-dSEj#V0q?GK_*ku?~z?>oqP;Qko@8##Y=r)o}woWoiEH)3ckaUEc(e>{(yW}rZdTbna28)S+qR(eG+ zLeiu0)FfmqJ7u7aotuN1d({bYyvj4}LVFby?+M5|7dBE(GcdM(LHxdUj2ep(flPf$Pp{7k2Lf7s==Er; zJ-V&%6f_bS(d^{H{}xXtx**AL`Vl$G;zzWC;OtsGZ7J8zaewzEa&vF7m}WoWjv`*WjiV6*mg&-Yi{ zhR3$70WV%!SN*)^>iQLwewLR$jmmG{?*u+xg@vn)1h~64&~wWE=1A7@x@}eqr0#-8 zF>0dp*P$kfbun>!C^l*I0Vf2k!k%)G0Df=Mv6m7iKjJ&8~x}wQb}Ksm#SFP{G%$SL2-OD zPkO=*`#1)ZxCOEHSBskBo05a>(z845kcbs+NAuJ0Lu`^ykIT1+O&a=CYSQO5zR+Lh zy7G0my~0hxFWWB94N&`Kcz;VCm99daK*DZmuBB6USrEhAr( zt*S|F_ecaHEXU{kIu-bry}-w%!?&zzM8Wt{&t_hAn(a2N-}{xW*1g^S)PjcZ)hZAZ zh-Qy*^-G_;Q_eHq=RDwu#%mxNK#@aL za4~m=DApXB*faHr#9Np4U}8FDjDTUR$LuN^V8S!o8)_K#ILfWbuSi^2Bev&lwtgYf zemB)18vFg9p9tiZ=SI(-^A&>f$9ZuK_i-E(Ew zkIp|4Vk96DGsi z{Ru0I5H1B$3S<>VJaMs{QOHY*jXK;dbj8uD-F*8)P9~QB%c1gTa~4#Z?N-b2fm!5P z*lL&s&P(Z{d|`bDy;)|3otSz_E`nSIw3_^rlCz&V0PxU2V)7qt+V;&LJu>pH#t;*H zoF)~%MFgob!-td~YB8i3w0vE7O&{FWz&X{)`JxE;Nm z49BIdro_&PMuym9tp$}P?sdJ*eyY&2@JVy8IR?-#DqhYoRDl&7K9E(%+>5N3XFa5~ znoz0lypy?^M#L0GkEA_20sQ)Kp83(KL>@-Jo|$&+uiaR>;>XD2|Asg7HEh+Dq{EVJ z<8jUFJ85ktUC0`N(kJ$qu_@coBwQXpiwj*;X)VB1AdYz(qxjnP+FuFec6;OZ^T&Qy zs+gd_Si3b_AMd14Mf_@QIyr!wIjVeYlM2nC;a5ef z&hC1gZD|+o%Z%NQ<@;1-UaWTViGBVM>@K8yKyA9^PU=A#_x^PTPLmtv#qwx*=fD(A zxdl4~Ei!Dzf+P{cha%qJDWi=x`sT%C(mD}kL{o@aQX$=}*(kZ%W(&A2#h}xlkY|!> zagK7+v8wSn8@8Q6GN14sp;Kt7-*omM3DCLls{7Wg+_iA4Apx>?1{EqV2(>4<@Qz*C zb7H078>skopdS{zrVZ(3D7WDqYX{P>1{|G9RL)u!b4th0JamcNwAN7JG@1Vy){owH zj~TJwIp;zy+o!+k^g0}!%JP`%^Q(+0q4|v3xBG+)`S6+F*Z{&&`eGldp+g8e+9WrT zL=<+%jPnA22O#Zn^5gd$3+%`Uu?kWnOYQ~v(rwrZkoC{&JR`xBEp4@1YgK~~LJf4Y zAMUS9@0h?aQy;V%VVXj|`<|D3p0fiq+pgWVmP+xt%N+dXhD35Z&noar%`F@R`T3(0 zMW*=?YQ!@#u-xyLY{D%0u*Z!B6ao?n71^c2?t9N}ndMN-;yjCr=}G0_ym!k+CTBXS z8}wUgOKn)9f3m(N#tdb*mFX7(jxu3p%E)I6DYuW+WV_++xO(RyKy2~trW-*q@XW07 z1Ui)SkTplDyXP4L16ocl)4B4dGLd(sKZC)0Q#5+}=-}8`p)Fod)ao0RiEr*rT^u*HpOttzK7-{>5SJC}D*Ozv{0WZO!<6XN!jBDQFb zXA%msJ1BCxVn0)MxHUWofB&0F5C57Atx2(QzKyWmqd4mh`nAd@Yv$Dw%lR;NUPkV4 za^YQek!QRXM*lfahot8HdYEXf`)NQlxQ(1NEBcP~NSdQ5|0yg~h=xXJ(yKF$@!Mw8 z!P)7kZj*X&os68<08hV0N>4c@*^3-8MLf49e|H)p>53RHvHlN?&pv6+i{B%*e0+Lr zY}8##0%ky@;2#|(zRH>iwp$Zp0|?CgnPxPuh*lN&05X_y8>X+`!;x6Rq3=Q+2O;;1 zlQhRrhud_VJ`cY|t?gfN7?_@NJzX%-X<@P-w@Rsn(zYnZkIyN22iqw=ZTDGMg-n&* zwl|AJ?#)|^UM4;j0tQ}guc9%9lPv-{e%|Le;zYZ9q&4PQ-I342mxBN-Z8eDtpEE=zs7RRw}dq&^2vW8e~ zpG`)G%O(9?2eS8jw{wu?K@{z3kM?$h52YF+l+xaNW0b-`x;~^x4_R&Hg9-G27Qx0D zSbMNu)tz}b{R!=p=dL;*JItY$EJdv@U&AegCs1yOThKJ?+UV0XuvQq_+pBJVzF+(5 z_4w^FgJQUC?_@hdKqlaeeee?Ov@EH*Qv){Q`?&@E6E^C z$O;dwpkNQkw#l4UO*N9LOV-rNrOtE4lU-x!x~HjiK2w$-vct-CJ%wxNvJ!NnLQU${ zde9k&XEl!PUCqd9{LLu~G(G=`^QnRUPKAE`weurs9pg^>a}FDMp7(iS@kz7~Yd;on zS9t9i=6e^nt8unX2+FQiSlV?f|Cx>%GCW8{qmarU66H#`ijCabvd3Nyzg@?PeB*RA z)6n9-v)XL&DVb);s;9fv<>Qqwj(ZB!BS~_5jcn2GZugs}tG9_K+nk7joR` zh1__q$bHp&LFE5CohwT4K)WlwE83s-JD6rAm=(VTRyWmmFr#WJcod*${x}4@2nAne zqj!sKG2@S{%5-ov@IGTyG@06$>r-zJstW5+1wmOIa-YY?G{B0|?mO5lFqypXcB3jH zR)A*9qA(eD=`olT32@3L-;63g<{n6@Qh5oQhFR0C1*cNuoh5W1W5PZboZ!i?F5|9_#o{?mNZf_7)(sr_gHn%(@6h+8XBStRq-N>nvH3tb`NB8?5O+W1NJsD!}t6yv+ z1pHYf!M1n%WD|~CLz7FKXo&-M|Imm7@iE~?X=5l&n$5!}Kx)avbnA(Op1e_}+N381 zWvgt0;%nB+&VWT#lrZc}0GnRYyLx<<02M0qx0%*(l&ZCjOu5Y%3_SJd4|b(|Y?A3P zF?%{2uS8S|oknpGv#ssg&sz>rm2ep|6)YN$)NuA?=K8L2W$>Crd|WIFY5T}TWt5E5 z@_KSJXUYaRK{HNBT8|5<=SnJD5_k-6Nh8>pa`D`xn1kWgQzbE^4Ea3D{aOEWhfA0q*M4Nc>IS=1G9?))`JQhB18qsDzKm8>| zGD@rO;KfHFZX|})ClP5iDn?q-^hn}I&8cKkK3J3(!fI@0s+b@y-JFt3=M$*R4$*dk zo$An`pKUg5oT_SlFCgEa6=Zfl!@B6=)kCaKyXgNTrs~)fk=fU z`GM3<-2AsxQ3uQ*=~kj8F2J*r6)@i#3z$*(^f}vinjK$2wTKJJIj$8=>VPE69gh0J z7p)Gb_ywPYdG913oZ)c)K&V^iY1lB-?@>&Nn48#jsHujm3zOF9a6Zj`7V(~TXfNNr z`!rlbab+2hWHlYoxBL43X70A!6yP(Xy{;29U9wagbTD=&I@$K%n9Y{@gw0T6GRe63 zU+ufwUyoFe37ZVLl$q~JD{PW)lH?{_P`=!2=?*CaH!F~Pt4%c%mu(7jdZ3h&PyA^tleweY zO;t5kYlTWFppki(-0TB8sQcjZaOp#WT+op|dB+(|Lf+#*cTp+^oBBVk^8ueP@;P8F2&&=WPz^$rj;M(8Q3+Hn80#0IFw6xcnHbd_Ym{t`Ss`I|oG zxE~)|)`e*&5PZB?5XZj~VXZ^7K1U$A-CsCGx0S7bXWlKCkW!=In-%IZ$4JuR(9-IY z7}Wv&!&@Ql@YPEdLNv}gY?d|J+cY2E`&P^lSy};ww%t0zP^$u{M)m|;xcqaiO99y` z%^i-n!TthByI1z*B78ZXywK6Tbc=|Z-QO=C^Ok*BbJC7|;cN=WLxYy#Id{vdFRG?xPJxiNmgT3EkYHX9 zP#=rPM73t9JhBYyHen9X({SN%S(dNx+PG7bM>k{XoSuZ@^P46Z>HAZ5L(+$?Eux`` z!6+`_FK~4*jLvW#?sAV=tw_(o<>i}~jVnYMH%BXO#&RcN$#$sD+8tZclr!8Hs3C}Z zuVzV6U1t1C(HOMX!O-Vx3Pf>u>rWNdiR*nmL^cIzSE0tUMp!a^AzZ-E@5S zNouFl&4?irWjXw@>uCN3B=e(mxFhn+;0!1@$Jx56RoFB?O`P)CNctdSRbrxxy1^M%AT0l>-9U{7VNC!Z#VL?wj0^V z1lCMaATLT>-ejhUxW3GuZJ~8styS8+9`5D8zKRarakvLu?kxCRi~xlK<^OzMAnzKz z$X_Xn=fq%#1;2rNY-{ls+F_vd-#or`E)Y76oLX`#O2QRT;l*zvsSoL!0&*XkWkfw! zt{A4Y)DMp+22KcRy(UAoIuhCG7#naB1el1#ae~=loQP#q8)cdgh8R@A6D`+PeJ_N) zyvOU)r6<+ty!tpu)$2Ruo1sffcGdlUM&*8cVjb)r7b^&{1n)AX*kMCc;`nAa_j?6D zb|lKhN+s&-0hq;3J<`CB69{i-j7vMyOI+xlc(=jPq?}$x7Cw}^>xvcOuDy+`M+C2N zzNJ6<`4#ypIgHzY3DhBu`+5sJr@GXJH_5ut`IU(m9E_^KMCM?{b`o7m{NuWeWOLx} zL1CdYAP_={ApL(y#9gD`~4J&3}ehU;938MWVw z>ymhm9ccQwYQL-h@+s9*Y?d+LPgICSh-%Sn#^bN1Q07@|HR2K5Cxe8>m^?iA_*4pS z+DCdGUiJ-wEYFGVO4X0gu67c8NOqiwD=H4!xjyyUS@>2^R~5QCKWK=<;JZRiUsLz4 zU2($%pCEnzq}{%7HouZIKPS=1pk>m#8Qym~5K=jzaaobU;DrGorjBmkuXz$L1X?>^ z@oKD6`F!5%RMdW6V-wDqFA&5mu?815RsYSSe#PM|ROP>lk<@x~I=h#V%=YxlEYZkI ztJr(g`uI#z+?eTpFCmC?JFh^)UVWpx=J%p{Xc2VZD|Ik>tU~3s?n0P-4v~(2sJwx+ zEj7kX;>XiS|0}HtK5N1+_VE@hndfo#aH_&}y{XdmWa#{Fi%ZMsw?{NIz5NMO6|~tw z=Y47D@cf8+w^S)=`*``JQF~oucus^C0^kjT4s~50__e52nIpEI(LL(+?-MUe2tNc) z>@MM%*v04u=ORzv0W+t(BJOjH&`)}VN-jB_`Nl?x>CHes`c3l=^1Vmgic8OWc_20h zCZ6Db5d4&pi3j>uq(H1mfxxMnv>2}SO!M_G6RW5%4+cpfvn%My4g~RPoj6~Q5lWLY zIK{!=xSVp~rx|(Do_&|@Xy;uw?CQ=58};mk*5-ybyC7dK85Z8$T zrG@XwGae@P0g!EB19usnJxn1RH0mQLNFFnEN;H#>N>a|gG#2sz*6zJGLf|)`Xs_p+ z?C<~kV?n?`1>Md2c*-hE)p00yhTKH2F_A1EpL%-~(;EMU@FrStW zJqj}=qfq@rnP3NRhc7Urv1WT$o2(KzCPZlfB&YCq#dj?T_KBSHD;nxSEzv5QhG);`H@a`gV&(%WSLE zb)Jq+p3REM=51Fp7DuRmW*u`X%$3G&uM0gI0A8@r4jCR<;O_4^tft8gbia;Ps#^*Q zt;&{Qee@3^tBz5~Ww1kwJR{ogemaWbb(AuZAA7PHToipOo|*`+u~IEtPZJHa1J^6D zBode?WU}G$x+K4K)CZ2UMHmLrO2SY%Rg-ES{yGJn+j4JN!oFOV_RYRHe$NhItbCso z{zWDN`VwHJj58tMKz<#5zeX(Q@V~YbDPoi=oEyNFKbVu4v zECeM}QDDbL*_T4)cez5R5e!hi!sFCzpXW4o#xN0nlv+iV=2a;V`bf`=aF`*@A(}!l zS@F8j8TG}Jh6(4gDw^Q5`D-x~1E#`{#y2@6)k6(5mNv_jfvsjt^ob8%-$ zuN87iqOr@+D+d8G>KE`O>HDMl#kUJ?;{Y;<0Pi4HHS-z8biwgC$b`gM*2w97Q}_;Y zb-7@x0tqCU-gE(R4Amrb#MIXwBXJN}TC_!z+OF5->yi>n>`GKE$@vwg7-nFUG zFxX@r!HZ}JM8JQ%VF6ch5Kt2$2Qz3DkPSJBGi(vYvA{PzfzcOBB?AP@U{u2+xefbaDNt&zB+6@J^`mO*(GfDR&x#QpXVxWi0A&?%0|d z4b>Y_z}CHP-^wy~xj1z@zv1Ls@y@Wx;MiYCKx>*@sRYJK+|OyT=+S}-59HSsY z!2j#m&&GXe?jh2>`e)1Gp0c6bw6^E1T|-y+kz~!YR+fgrB`pk`sIjXv8)j z^QauizwHJSL`i!zYH_=gOZn-d8S>cH_+j|`wJRy~vM1E(Y*fZ@%?*3>WCo0|6Q`=wu=SLsjJ&?EFmr{>ha$+YAi8R1jMA3Z=;xx#H|sixcYc)YJN zQd$f9_(;LEHM(q6R?_e(^fMc}xNv_x$>_f82VC#;f5eS6w!M-Wr33JiV}p?4ybKX- z^>|OPc{LN0X3ZR820omi4!?Np+zayux((e6)7YPMj9tf%rNneZMB=x&r2yy@n}Z5+y=x`6N!9}SQRqjJq-U_ z1n0KZSe?4t^P5|lJdqpSDO3ItD=(mO{g+>sm4Pgqcb+>3QDZBP#(@xo>l{X{XE-Y*>E3Z;ur*QLsx*#SKTHRv4IfCO?+0xNCeficgqQ#ma9@`^vG_yCvALMA;UFS)lU2kudM zfj&NWZO%nw|Dj!NOAWtudu?^CA8)eow|s}z(?@=Qf&m{YsciwWiCc_!(JDnuUJ%jX zdqzA|Y!a`DyOOEj7yw|wT?iy;B7UZU40Rkc2~5de7jI8?8dOci+3AIeNF_F^BF?svslOQ7}(WKl7!>A2x6?O?fIFEmB0ylDHyc z_XCCoqkgC%*oPKHOgc+E+%d^=#oVTsYmFX<^@U6R9d_X5?}J9i?M|NW!%mEWlzzZ| z-*(4dB%Qr1*MGElia2*Fk#`GE|05$}z{oS^QgpAvRq6L5eQF zJ;UP=Aj726K$LL^rKeS8c^CHesIo|T(@p{@nHDobzGL}B|D%w*kCe@8YJaX9#5 zLy6%3x@YjjbHGSw0spDRVOXc~SJuAT^ju6-g9SNA^6hb@w z^kfAu3VXa9j54dJmNNTlvffCOt4y7>sNP@QwtdJ>qY=KV4KEG)qqoACpprsfqY&#h z>htx2qW1#T;!GfEQ(2iz&)=TRB3i^gCRK3*Kz2rVWjQfxM&id+u{ek{o`&9jYU7^L zh}GQGwg&NnOvN(p`9~U@WQb14NL{@)OTETmx7`pSeaZmZ*BV3RB*lB@8Pk#YDQgwSLh4h;Y2xUcLCaeHIeN&yV ziX^S>whK#bbL-`8)+2QISW?N%CyB9!GzS`<$b<~-S@u%jd*|TDZ?=jh00w8m)Ni+A{ilxapOGEUYl^6f z!+Pa5Wz*REU4i7Q1l9&&M)rD%bOdv@x#=rjWRP`u%XvS0^MdrQaBS;Hl}UEq1mLmE zizWF{g;?L>mcPi><0GeNo@_&EJf2f}0eBsh-rz&1m!dVJxTbz4U~s^QDM%qU@h)1k zO@|t*Xm4RYRk3KCd%lZJsp};O_I3V4Xt!XqEF{6c`Y%T5ni^oq27`mwTn4hy!xFpt zvxN<0G-Dl4U#ACH>KqM#v*@l5v(@)E3(p&w3LaZF&d-9nTMZ(#470>h+iW2VHa;f* z;fB;2Cgt&(%`*>*hknzRieQYYr8`d7-bsk>l{m4R=6E0@?bV6LLJZ02H>v_GjO#NK zo+d~7Y02Phl1maxw>d)BE}d2L5v#zbYUcyEGLRX z)aFO?N}>F8gbw09ah70_`6{w{AMzGv!{|tNSOYflcaphYGBe6gt}3h~V5rQ&4){;q z*RS@zW59uf5$*hvmW(*4!HHe7ef#cGw^0>?Ebq2pog+21!W#8vgnUf*Hqxvk7iz-FP<_lw}GBK!r`jMC1HVZlQoQQo<*%)K(qY0&)dC$xCkdH{XeX8;ig3FJ~cT z^mmyWYCEUZkKg!RKKA+4via-PJ?E;p%Ri=k!4*h;x}gZcmsz&O*v2%lA2eUYq*VjZ zV`1AhslhgOyJVgU!78PVRq2fEieEapF1ije{@R*XZ}}}MyEIL)799PjZclWvHrRga zCmZU|P@&f8V|1U|rLl1pDSn2()!?dTa+;`Fw=lJsHUXE^Im*<3eBb;J9!YA?+ zOmYbp4%2Sufv#J;(B8^=-?TSXgmHxh7lAQ;W|t5Pf~;3Ef!V?c1%khpPjoTycEr2N7xO zu=c`=SqA=GM7V9kHgzZBZ}`k(&@r=%qJ4Ml527;mRRB`K5yzP zpF>P!g*W&qV{YoV`c<%BssF_TTisGX11)0v^`&)SDI_%lV!j~K5_A#aCAC}uwnb0B z9m@=4t|KQ3c6K+d`lIN-+y--P!xC-174B!j?yh0&953MPF4uJYWb|7nvi+QY^FF)( zBIOS;y90da8OgUMvNbyLuXS-K)Qg?-=bliBUG|xjYGxI>GUiH)7_;UkS@JJSpmR$4 z66UfmWGm#exnzmw9HUi`eu&yKF<9RfdrLRQ|C-z=e0kFQd3#3vZ~^6%XW?^3E9zBa z=V#Lzbe!e(sPHx^u8whUNZk%#;QNjqSv4AP)Gx~%Kd;JGP1BXO#-g~aq0pt1^*ZO( zWAtOD%2?xKtN6r`Zf>*ZaXFgs*kSP$TAKs4N`@bs-pzRIIX#bsOI~;p!dJG?C*FKa zSXoB|^7Fv)aZkIXy^bTimZ|3Q_+}LK!k@@E1ptjK8m)v>+9bf(Xa1|u$Z@7TZsl*g%Q23pJ0#19!|T)lygH)Hb~!(3AFvjDz4Z@A#VbYD zd+Ih~lz&jBgv+%A2W2_60#g9j{+vUwfl5*)BUM-9u9c)&Uxc9@8@8_F4^CFr01zO;c;#l4DAAV7vO5WH(TmKY%5eVn6ppkg# zHrQx4_bXv2$gUPW;Mht(KM>T5Bd%uvIQ!P@iIDX|=8|^|$-GBcFQ&RHuwhFDtQoT< zicCr3=?Hm0Z|+jS6rg@SUi*76U7tn5AzDvNXtza|7z@QI^E%mlKZl@g+W8vu;9e?03=n8~T?+g;2jFUh;49$~fiHgDF=2J`L6&TMGyQ?@`>c zi);W)C*x6H#(sCp+8c0D!C!`T+e1B$bs$F`%?oGbL*_Fdti{Uo_W0JZ=<`|2nN&YP z!>kb}9HRK{q>>~BC_!MN8t?xBJwU?0Sxw?#d!noaw+7f{`ItivbpjvFNI2@Z%ues$tJ5xwKyL($w5v)P|ay?$!y^)Iy<62K-^C7Dv9 z8Tfl{wTZ0J)n!RnMJiGRk(weAiF>jbLp`PI%r&SR>58qWsE|scA~pksQV&%sW5{w; zMV6|f!q-%(DXDmvi8S&QwSYSw;-ju#dBJIdVjevpMQ^~rOe z_7UNE!u`T82(RYsvpIInUp$qk#Dyg4a{@U}r}^0RvyEqnZLy5FBWfJ3O?yxrNJBp2p*L!V=^Rq{1VphV$yQQN@>p^{?U2yVdsLB4 z$yuH&6^o^pxUtg6ge%Q_zL~$lDSCPa8BeWh-)zX5IjdQQt0-0@&}HTMVPyDbbe#jA z>Ho{i;k2x7O{*%iMbZ9WX6~Km^QXrTBeSBute|B$Y=u_FI(jr&&hwk#(`9YL*NDtV zW@Kz@LDM`n)HF$w8C7&sa~&ocikWi^Pdj}0@TX5#?~2r)u)HFV5LKVS`rnQ9?+JNf zUP!S1cMAto@9Zhz6~e1v5e~r3a1T5HzW`6cd(lb?;4?l!<4!V9CetpmabO3Ply9Yt z!Dl?d=1Ex6PDAfOG-S#6q{)snJTI|vQR8}N=M~kChb(SmIWdb-x%0C6tlyT>5oN)4 zNPsK;FzOHSyUGLB!(N}y;D>~Y9|(HrbUvM%z zhJg4yb$-q?L7u|TB=y!b!HZ|WqA79VfpK2yV1zuch~lyn_>ECzqLi*dod+PI0EH$= zrw-)7Eo6B7#ai-soe!xA5jJtr-mV~CAMH`U+v}r%avw-PK%7AXe+9-BkWLIUt`Q`m z5!MFofW3z95Gsoqr(G!NdVqulJFsk$njdWJK`riOrW%dAb8DIw=An2CBOgQxYRO%p;-f5JwuTTTzZxHB<~dbR`ibCYzeCX!bIo zf&ft_gd906Yl!l@5b14&yiEq$P;Fn7-6~WS)3LI(Pw$*^V7ch^&B* zmkk|GU zPfnuebX1SB%0Q%{!RYm#ss)OP3NlrRMuui-pfOQw8R_)GpWtefq|=KKkY%or0q;l2 zNv0z?R20S(2dhR!)?rezlksVu@~SOMMALn%!}ISoJ+K)X5ls*64!#6fdv5?2`MhD< z_)JXnlZ}nV#l3@pZP#O?*x4)a*~}(-nCG|@g;~@B*9b2WUN8KL@DbrNX|^brI>hm9 zK8Xj)_JAh?`RU5fB);&mcnJJg_^h6T(K1PA2T0+@B$y?0vE~OOJ|$mzb~=zZ=<-D8 z^k6dHJw9(0mdWD9h4|Zrq^AaKd|A6Uanp=GZ)lFGI(PGIBwxXrsb(NlMEWNenEv&8 zM*;^#Pr^2mLcMZqXTtCqBYm4M@e2MVn)<-2yp9t>2)-qAaZank1vy5 zFX!5hmR>cBr#ZL=mpc4WzMz`6YStvpDiA$WAdj49x!+xs?hxfXp;=SW3Z9iQDB}Bd z@s{fm5YTo@6iXFSqVxs)JX$*MJbY|CuO`wv5t%OH4Q$Qea}Q72lcmw_b>S-E1R~E{ zgcoC*rZcj|gH>R?Nty!BUb@J@MuV}(DjH7ac;Kh<*&)-p9?;OTaVre@AWS@oW3m2l z#1pX+JQhu69O1i@VaS^~b<2!rlfR;n@vP7& z6f8H$_)%eRAr2f@q1oHf+*KOdu12Hrf}mLPZG%)B=En+I)3+2S??!lGp8U0ryig>n zt=b+NvM-)*P=AU{TV^V^5BDSDY4RH zwQ9Mps~=E0YG08`4b9D3LCI1}N-&9&3X4R5E3wxIi6w4lG?b=^U`F3l5>-0 zL}is%X{$ZYCi86eMr-g_AZPqIv%0al9yRlk-8#b*PD^-m-n8GUZk~Emb`PlBTeId-fe>(nPf6U zbFZwVLNl+Pn@DsG+GjI9%5qc|FUW%zFQ=%K4bh=qkS~yixLj(^P))|?6-7c?^A4zZ zf~HtjM(@mcaXwR#W!*1&*}TWNW<@ngsAdNjPjT{D4jla`729%&RZ|ZTi@oJ zkj>w)BW?8;5qEUqss-G5|z<$2?wxrn&u z&pZong=Z0WF9uTX$SMR&AuT(OMu^{WN z(M-^$XPhW+`q5Rj`hxC!ab7OfBS#^k%68e3-2L@@AZyOGHDpvT5s6I{&r`gdPCA5W zV&s(<1KD93lc+kc+K%q-ncF==WTKY-Ug@^3x%c{|B`Z`ivGiz3_blZD5|Dm#AzutC z-VO328AmKVAky3SNaTMoO>_?_qJ916i&rfx7Scbd^Z!xy9&nOe)wy`xTRG>d&N)m^ z?CGBFp4my8cW1O&o3+Yel_ex3Bq51K0a*eh5YZ&dWP?q#L5L(hg7N#=ARCNraKJX^ zJwN*yo97_gF#FEA)w2ow|Nq|ZbahpA<+}Hzd(QWf5Hz!7HUp)s%5>h!ZHm-T)j*wS z%e8WA>f?cE$kKV37L?^mVZHx_V>CLc^4&rFgR#RzKeqvIy8P7Tm)xErt!MtnxlxG^ zk8_d(+qFwSyZWS!}1Kj1@b=(cytswF5;_l-fhIjiU_h#;wxp#5D%6*vo z1os*4bKIA>ZzL6vHd&vrG32U*pQI5q*C(K98`CgNYC<}3w~wEMgF}v4y(GcxTR8%W z4}BbYIOMn;!x}`jg)gxu#{-*mn}eo|@tx)XmO*_qG2#<9tMLF%EQf<8D1J5=9}d{a zlZ>$lXntMfEa`*Fug3jlS{=;b@H`U3G!glmHVk7xj2R+eJ=;y9CEf_OrAlTDGBAuj zQD=#WzucJof-uUnl0w%$I6gi>#=E>QLuQ5UIGr3PcU-lx`b8r)_FcU1n0vppwQ|?R zSJ4f`5I#7kUEh84MS^h;NIXJXdlwdJwVT`nRdUJIgn#6Q6O9vB3da53oyRG0t5HN; z;V_x3hJ^nXH4Xl9o*MjdO5xmsD2gfwqhq{5VZC8eQ1zN{C67N!5<21n<*!gBURe91 zT}ro2$?}OAdK`<9ub}VR2_}nBUbrYluG{jV7mWD8(Ss-4+>RgIfAm^GAlDFnVe#I6 zUnDz%KG}cq*rDY+cQrcm-r;Xuew+~g^2+W)(motZ}*n{^>$kvjNb7^ECTJ`PPVAiTkub&~Y(iB$T; z>&VHMeW;uY%OAKsTl1X3%*e!+dnM`6L)BuY@{W_n6Pe73hsE0KuPp!C9e&~V50(A3 zzilsBL0W!b^TbWnM-B`6_3y4^Szm-62`}{&XK{7JsU>l>!9rp_OI7w6niE?A_wNtW zmt&o*uVq0qmeNcfw)NSmi4C(`isS9Y(bhlKDudoqtF_bvi17Bb7cR&lYA~ms6W~iJIxFi_@V?&n|&sNPw=M>GJyL|R-{-OMD$1%V7bW!=%%al+ljG28*H<4=r97^N$+xvFW8IxQyR`*d zH{wPd&hET=Tkx6NaLe0pn@7$}-Umm3DbD_-q-iiwRct4xzXI*%i@%UdV+{0Hmm7dK zUgoxdMn)`Oj2}G!8tpaQYq_VmH*s&{-pTz6_df1J;Lm)V`!x4i?u*c3H?5=))SMRl{e5#yNR6pmJ()n~D zs}dz|8-aVTPOj9~enlT8&;Qk*llQIN_rllK?n~*qeyT!v`1)e`+c15yyuWf+T$!pg zG)ogSQ_F%S8N&Q#%~I2*W-73}WN9Wjsa^1I?ZryvkKqt;MgL)MSFg8g1DNrmV%wf! zxsFA7*)|n$ z*cvhEE3saw=z4;&gZSz{g?^r4*%B98uF%MF*pH#I(hFgI{*qOOFX8k?*^r;J^`8xz zpuT>}rsR~Zul*)g){tGg4Zn|!==R#5HrbEtZ|EBcU@zX!9UIoTO-k4Zm>)C@wzHav zVb3i{ILOM3#l%cbJf~!XB)uMXK(RwlZSCayBdv0)*~^d4nbyMCmU$v$+(7b57msW_ z-r7D|UKk&*H0zV;9JmAZj9M1K-P+Pgjl{5((%4w&){Ij}sstr1qnr^YK$zSYVjYe`D#Z1Q{=RM>b}@8%6vTw2c;{W>{Co&%4Q z^Uu@;Hm!uIi4`=nyFdu-vn6&zpZ-i8+V8I1$zj(JoH|~g-KGK261#YhyTndC|btTu#&R;x}>C?Jh0`F z6LZsdmkJM^IB{avtz@qM_FM9Tzg-@CyGD4KPpg^M^hE5-io&bB3tHcx)Pk-kfGY<^ z?B!dIpLi%+ytBJ-;-R%0ZrQau+rN2NZ$jSc37OZ5R0X7-XdT*h&!(`%=Hk8TFv z?e*N-x%aZz)|a{8;r@{O0rz*@ON5dpnI$Xa5^^iKkGz^ZN!~?1On#GmnN?6m2%>@i zSvqB-kKPJ=W?&}nG1O$1aT#~wPQQyosx!R?%jJw>%1&Vn?Ai^cPR`-hlHlL_Dw z9vBN**ds|`jru(-`;w5|tJ6=MIov2p0FuN>p}D?e*u#EO?f2NgGhFcSG8vo_NQEWB zPZD_vp~NDFmc&dOa2avnrrBr3HVLH|tFKQipd@n^2LS_iMSZ#mc5OEJUk-sgXzKhXvfohG3{8jPh~fk zjfI)DKh_PA8jffN^}k7#M6K?o+r@v@EpTM0q{}w>q*)J4H5LRzmt$f}CWx@CEW|A& z%aKyxNyU;V%e*YRiYVwr;?+QL^@=5E$fHRRWgGsv-VR#;pAD=Og3)nmC`8QJz98zA z9dRAGji^RtS+puO-vvX3@>De_fw$x8y6eM(r4rEvQGll|@$$c^S*@&KqPt>(sA&p{ zAdJvrnRqobtHN=JsFWLu&`iNI9TDA19$A{wIr2VuJ*A0>QgPzr#7nu*Up%=)1zyZg zN)3%@HBlgarv#>~Frtu>BJRzaGou0`2$v;z{iaMo{YoGUos=o-ibg*s2xjC`sR0dM zm58%9n=U$WpCIlQ2y{L^AnS&v3MyhRD^7(F$;+n0fWni+@d84-X}2CVB);Uk0SUdBmkD$KN6=M5ED_$Fypt3RRTHQutMM4|;AK!) zZw+G>e?lK2A7c4cZOl(da;qxC>?*LI1dB(?KkT&9q|_`>@}W#4n{E6XPBLVFbAF_t zNS@J5WxF|}+X&*L`!`&KFk4i{>bjRqi|5n(B;$pSN^;tM>SCgZ$e>|UKXkcUeN zRsbCyZyoRPnNK|Mz$YGfIZ-_|U9V+SSDhQlOk{qn%P--WIZR#>5z|F{y$hRoVPRO& z|I1%`?6EIBM&9xO?yqE3H5-={r4-}b$XsUPM^9o+_>*vqH#{l`kBYreE2?Ty3#~9D zCQDmh`}AXYkn?hC9I#sExjo#~j8AYHEy)VPc1qP==jTRcszHR+w3TL9pq*~qSrTSI znv*294}PCT;H^eQG6RB|CH;|RQt(DT(J)OSS{5A{x&FMtle_0If5FnS1toNBLGZGk zAyM+F^q^a=^m}n?x>A`=Jk+-=#=0)r zIYiW#B*)0QbxEdbIg^EMD&Wb%Ud!-IT0KJW{W%FO*Xw^^d;c`u=6h^*5f} ze8<+c#XFB4y8FKU7vD3qzc_<(ScHD z*3;DofAHXgxRlwmM^6n4-hOn^o^&q*Kc{LB-v8i(XO@zhRTBRhBhl6WkfHUq2>x8m1EQJbejQDJ^VQqM=>)+I!Iy67mnw)ISE*zYky5YdJ*Is=6 z+Q`1SxqWm0v^X_0JJ+3Be8UJVZpeCck|@;q4OGw6FkuPKtG+7l!)7)sNF#yWZy z#W9$E#L6t|>m;e(-Fh%%D+<+*T|X%y{XZkJhAja}h*Uh^&H)a}*j9YN;2&EAB(Q#Ke!fx>Nyx22ki`N`WkuBNO4M+bP|tHEC-Ag)d=cl+sv8mngP=(vl_bES~-;}$B&;Q zr!IzFx3qs<5fo1qMEH^|1q=v-Oquy)SF3FZrf#2$$%ApmF&2F|gXMt%RlL5WDb?QZ<=rI$XOa(^#XY1y8kIhCyM=Sq%ddiH1~rKZTKl>6AF4?leAV{U5g zpW{-~(+$rkXFNY!gc;o(Da9(o{rV?*iaf>b!t7uPUWHt3qOIMSX0`0{0_k-_X7eLp zBSSeovjR)TNENo&K)Yxi!zv$E^ysOkD~&Zeo^?Q8_3Ze{SZjOl^-7X_qbcXhk~pvE z6Hhw6q!!e?FG_*yF0{l(FwbwK_lX6Ayxt%q=GDjVY`tJTStn%hz1gTuz<@JJU|Ii~ zGiMh~?J?W8Okx_rW`8iLnG*g?3$Ik45=h22!5VPSV7nlOa*iQWZs!hg$GMxi2f5dA zZ{|M8eTw@G_YLkvL_`{_qwhAh6ydk(vKLFhN{6 zvlm>>#b-BzFP~k3oSa`F)D~N!1a`Y1!{Hxwoc-tS`s6vcB>yRe%YvgQqK=19>~rqn zyrbOqiI;z32is-%NOn5Tutxi<;LLrF@pV;@>3qNn=Ar8~8y1aOG>)~EI`jMy)B+^` zfPrca9@$;JZm?y;#`5n)t!g$MH{$B_^!8~oUtZX^arO2zpZjL8dvy8uJtIH5d%Rt) zZ`O$(mgiwR*lPOzi$6YD7k;C5wER%Br95E0_QdKEi=WY9TmA^f3WroC%^7fz6EB?M zO(d>8n?z- zA9Qdr03$Gr!U*ieI6$P~801kqY)7E%rs0P+Yy!*h^E5K_h5>nL^PO8xJYf?hrR2?+ zcPHv6{Lw{~R}n|IXn?~bk#y~fESOSu^~yHV$4PmtKq}5evF`hn2qd2sscA@(rkFZC zo2+}@KmObmBK?-AZn<;wUB{?Ix6B1~X?$d^l9heystuvx2ZH%1m! zl3<-+q7%piR_l!Kpy5k6mNkPDu+qtf#Vbb5#^RCQSUeWG35Q5YTc z$BH|Od&#e?-t=JmqQbKH)HNsHxLjDf)8|9yst2!fLf&8f6V`^m1m5s}=gMHkbP$o3 zL~@zg^NcEHShR;BBBW%;I8q>51S`!NgKk3jGl=3LP!aj-hQ9XMspYNyy{T8MZZB1q zdc}-4x3{;=e|-Oyx38^u;KNs2@yfAp6{a$yi=W*xVOwcCOG;Z;YF#H)+PcSfUA|E* z?Ju3&9_>AJlQ@>1YyN$GuIy989Q{&uJk@_wX0=gpQr7x&LvB*6Rq8;kE;leqPp48xXbs{~scESd>j%LV(aAh0%sj)_hvc@~#umc+;TK{d8QOOtugto3t` z2c@T`MmJ%Xy59=?bkMFYW&b{~)*i8f#gm04UGa_XwyF78&&tLi-z_IN4#m?ikoS?# za;xB7zKnZ4j#t9DK?C;IQD0aA5!2zQR&z8Qc0~sERF#me5Isvo$nP#O{7#Eb5`Sii z5hWyGNf^ZPS*bRQVMSqq?>BMOoyns?KSI(;hEkls7n~F+xJjl(=0-*~?CmJ3lCPyk zXMM!}X&x`JG|z@D5y`T&pD4-?Nd4MF^Yyu%TNm11zCJ!N=?juZNmOrdsY>c!OMy83 z>e~*g#J08G%7FuK3OruGtT|6`1kV+9kp_aK@`5N{uc-nr6`afJgSnCEd7IDiY9W(v zkVsN(BO6WmDWlZ5rP*lMs>Tb-=e5G4BYtInZ**JJw5G`@s32Z6(!QW6Zs<~z_tu`1 z0%orC9ttq9rSLg}v&6?erjen^p#Q|4a3?MZEPfbZataDpMklbuWAI+W4i9#n3fj&# zZDDm~sW_QJEi>1U&B@M0K2z`3y@R>DtNoH(J2=(8tn2U~k5bW~v2kv-$xAiW5J1)F zf;4J^*41>ep-_-e1he1a`kG61WBS>CBY5v zxP^4yb=O3E?I77 z!9F%zTNMkTHWC&hb;d|}PKD+u4fA&S(ru)%>5f;d_|=J4+YPfy-Aidi-1Roc?$L=j z^m*xKo}L%O*OD=WdK3Dp9J5h^g^e4Z-MH}t#_nJF?BT=D9=nk5V4PcqH_!HCRC0rv zv;1`(hUt(DJIpL%1<}j^-Q^h8RAvxJx+=#B@WV1`vRrDJ4fwJViqA_j->nuhWiJN` zKYVyxAhY^burMw@>G1pHG_2bn3E%}eSs_y8Qc-3j3|&D}rD9|i(_x*zO(ryx7BEZW zWpzqZnkN4wjgTJX?FETSH%o;7A1N)D(^6%{brp7Rh^zS%@?MbObKDNbUetl}N8vgH z6`12J`+$K|^t%b*T%(6Y$$jyhF*L+h$7WnfkRiZEJclKXJew`3DgKp5=dPUP(`q3b zIdgl9RK3!O-8gog_-Jn5oU`^9DX^q8DRy*E|0BdH32y>-L6)=kW?@arapL%&8`Fkv zEgx%b8#Q&a-E>CyCsZ0maXF5i-~qmA-{8cOZYgf8d)MR6VTgbyxdWP~yD=Uk@mcxP zzs-F9EO@LZhGTC-c$S%Uqa3vs+%exSh;dSS$SUqS%!HZbhtv!8^)b|h1Y)p`nS)!B zzluuPY-u*7N_Kg2*VM&<|JbpWSN>SQ*6b*jwsLPFCyK49#nDW1cfXnX?m@EYHCHsA+EDoJ+J9{L9oW-5{XF>x@)hnFcP;2l zxEEI9!7!T`;be!6wqN+&?P2&akVCvz1{VnZw2H(ka`<2DQD?d1NpyE`&OG^B@w1iD z%4fx_SQ~!oy6S+}tV@w7x>U%5%F%73F64wd+hXlM;S2uWlzcrS{OJ{$d_Hr!hcF1B9Gv>e=VUhM`NH`pz~yS z6G^BUEr2nSa00Uz-HDdO0qCvHI=S7@55O)iBUW{h(1*lhh-4`KgOZ8Nta?m^zihf0 zWUOnYMmj$_nol<*(G?9r1x03sX)llkDeLNirP?Xm%}NC`%BZBTipRdD@jXNXsF@3u zEFMVBj`zpo!sv$4LX4KSV)XYo~S9Br;8yt|!s z+>Z#ut5~wtA=@K+`*!;q%rSJkwR<|-YyVP=R`bk>{kNUnmsVL#_b_L|=LX=-9~v^J zpUHA!LP1UhUz1@74Tb?xd5ChBbdDOsdulL)4Ag*h{v!EsSP5pEYkxkqc`)i8?Qgom z(tS(yZ7K*USCm#~>dST^(v(mS^Y}=qiPQy#Tqr0;q*k($ZWszGc;cTe`GY@_)5OJvX7WW!`_){ z*2!o!rOKh-_hT_IYNKNfkGR&%wn=a_p z0F&V-=}bbwBM+Kkb6w-s#|Rm{Ur!arCkvBX=JNT$)`{`W-OPLTKCqg-^wR7qeH97E z4zKHyYHFxr&qmO-ZC3D${?8-+@vG$jS^EcuAI%gq|77G$1 zAzR#wtIa$eeD$g~^M{K!-&{QW^h~Gog_Cdj`r*>eHv`W=4Y!&B|@buh&JW{j(Dn0sWFx30_o)l2#ZzHk|LTF_tmtJ&E{ z=HQil=;I%k*M4$z?R(Fv*RFluGVzIn<{JP_dWpV8-qoaQ^ zac!${^DQ6z;Df2zsbVIT$`q$&Q;mbG^VRD7>cNQ(Z-^bQl&*L;ZW!YJ{Kc94mjoFL zbLsjlAM%2TEAN7Y#m8E$fJ+8z$S_%LnN-EIvq(}$o=ymog;^J*8 z_|P{>YyY{jvU0G0H}Ssu)vw;Z@$M(CCU>3PG`;o+Y;#ekbCI<6Rk>P2+bB zzt{e?UOzt%B#oHKE{;Hw5Z-hJY<`3piyIR11*4UK`8#Ob3Wp!v*9*a3*q_-hW#e+G z-taTkl$F^UQ%#L(wzp%YK}=Jw_bnrz9wE=<#+MeiO}E7ZJ47D*p}-C&H_hG5Yl0%% zT9^=aY@Rr}DVV6`t^>nR6%<~ibYI4mR8^4N-6LKh zjj1Hd$Z@lF`pe{taQ`B-+3gsIZ!}qS9gB}81a4#AzBDXx!$>?2MsSjt4>#=>m0kmg978iO}DsHN&*z={nu2Q!Oy_j${?1LUX$2z+Qe(pH1nh($x#8JaLpv z0a|$6QUzzyxu72Cec7EEnRkMEmy8{%Rftq(X=x8}EJs-Kx$ zihWy^P2beTVjw8ljB_40(Dmowd-f6Ku$s6jL#R&~-dYpdY`ZdDu^7KOnt}|?0#V~+ zL>vhtHlN^RM*{|=%#yR9aSw4n-^(jz$}%xyj#5`3uBJ!|!ZgZCw&Y2Qn@!7#fP?KI z7x;jHz@=F2WZ1DOk?|ywDN|SW{9G7ieNS%@bb_o+SsI}K^r7C5+7lFo55DhV47^ZgHiyK8-}o{3Cs*U%wW18 zFd#!^0lDl{A*K6)H&Q8#dV#NHcw|bZPAW%K3+`E0krW6dzD4ppjX?l_h*FIDNXAe} zcB*A4ydZ+W(CrKr(*iFM$q#G3C=NW8D7v7Es*$IB!GIawPzaT5m8gW*ZO;Y)Lv&e` zd4U*?stFQJt@xRmEqe8=zmlSe3u;;b54-%4&M7)sx zuq2UuLzbl5Y%N!7bfebP%JmbnHh`88?@tB3o`dAFL6 zuV2~HvCYMUhwp>!vV*lJfBQ1;`jrC-zKsAn?F%5&IaYUYG5C5{V^u*XmJzn_><3zF z6A=v0ek#oY!X2LdAgUrFAD;chE;FK=au^TzI0O&8#$q{mgXXslO^8B2KjE64MNQfW zQhLiqNnh+3-bCJwBSDXJ+@LVwTHQrM#0|D?6ph8M=}i>;FygfzegFI4|L^SI7ryWX zLY}zlswb}c{v+pX<-uW8(^Q8ig5&7YrfuuTG5m=_5JrNj>bejI0Xx%@j%O;K=1!d= z+^Hw-y6f-mzMJg3<@>kZ`n~z9wr{)o>TTN-o$(!L@4pUK_9UW(BXLZUk<|^8p>ae8 zw^VqgJur+0XeKqg@xZP22VHljIfyQKPX2U$Y^-I}`>D~jE&fO_Crs&b)SE)p%5 z@s~P3`mRPlJ1sAgm;0^!H}fsOSO2|KD>d7>VdJ*ONEn)iRHR*TGDY<4j!o0=ethk_ zmPq1B*9%w;_4Aa2cdKzn;jP}qJ;FWBy@&e<_dDDlgS=noqpw!PKw>1^!{WIF11^c( zB?`OIj0P-SJgFFBS;Esy*|Uxr$c#ijS*Rti7bRmnGZ>Z$B-NHuLmpCrFevQaAQ`{G zr^c2Vzj%I_G{k~p>>T~%j}-|ez&Whspg`pQi<$#AjHr-?@49<31hl84swGt^sj8!z za;8|x*mfzX75kQ~dbQYnBLLU6gM5aV2_FuhOC)(X6*}J&R1;BDk;7kOcY8v zArzIFLCbIrUXlgXm=-k=W6H*~?!uSeF)&Tj*zHU$m$x663iXQW;`tR7&+jUwhS6D6pShAXX<8pLy` zVBw(h$X3OQUY?I*TXpo;r_1@x{VGVeh-#T{!F8!6QI?>2mn2n!1?&kWw)*_JuM{S; zH|$KOJ4=&?^RCVQIoUl=jV{+72PGN!tqWr$b@W=!|87!Yq27`w2y(EHBKMSwa zO{ix++1pI-+RnE!PA)ViN`;_YneMKvkW95&gMUL!{?}W3MAODnc{9v8rAfbBTDflJ zMnrS0UZ8Ile}TSXaLm=pa1g84ACg|i!;*iv-hO9Yne@q%L7@<=y&tD!QXwOzBGyy6 z3gyip=bMINBP1GW3Tr=n9jFV0qxDr692v{ezONV-A;JW>4X(w5 zFRp=%{S5TO&0saJa(lP~++prG^vILkZQPwKGe4-Jt2F$I@vGXHMz;^ERoQfkz_ini zaj4rSaR($Sf{G=;&p5m`;4!%@o+3VciUbaW#ientiJM2uM2;CCbc7=ZHX*-7G%}zR zoPaHq<|sJ`x44PggnHSK@Yx2*68@Ex9H$bk)F`PEnj&PLlI`SoueB~Q?hS5yZpGg> zx6#}_wn1CkvsXBDB3mF)ie4^kCP$@>qyxS#})-!qDZTZe`R`K@=oE6M9# z-$w__Aj@*Ombg!0D@>r;p}WS6QXL7|7%5v5bC|K{rXX2J96D$uG&Ji7pgyaWk&z{J zh9zJ0(1UKE`^8YwV^+7*XjX8b3150eo|#5=Guh(tfy8Wt7{d{5(6;?<#Dq179B4#U zOJtSGEc*s4!^ni9Xo{lCVA-mHm{0)}VTyBm9L>&@SqhcF;M>$zSqGMw^-$IWxOw8LTF%UsMTF*|mf^adr&vnQ&~6>g)vM`vIEIqcupMRoV*{)~ z1>D1#Nu}8n26A;$Niz8doh4<^m4diB2`wT?{s&i*oYJI^eob@{Yl`QQQGxP^Or9vDjC14{4blaeD-@uZ846){x6Jpr-)+NMBFF{Rd!uJ0U< zPMh(RR=6&=h1-wF^cU)7Ic8{yRk^{yb{O(u2T4(8ddL`Gt&CxD1EU< z2-X8&2rXuKGgyjzuKSnWRepL*miV!}5gH?+Hfduyk!A2C^$bCj;bMWPMsyc64}ly) zrgrIk$L?#FoH})Cq2-@Cbm+(tYt+>|5aZ^LMKp;5?Y zLQM@dNqCQ!vc;7Z+y5?NUpt|m&O|=6EMA3Us3`8CUpuC2I$oH`2B9EWrsu|CD$smM zu{0grU%VJWaqLjnGbPWXxh=9|mcD$M=bw$MAs?T^4cPcNzQS{xgU3YM^bC%QOL3CW z4J#^b^p+5+mqk${kbo7NG#Fz6=>~0<7mcKBnA|(v!CYf7;;zh$r)QgMYt7l&=I2Kv zP#hpY{LoXiz)VdA@Ki*QKZ2uL9_XRk{jwE-nYX_c)&=|tw)8_I*-#K|oswtLha^%Bg>+2#kTgxW`unU&8_2<-?uP-oIG=6 z>G1YzRngGJBa261PKtjxe^j8Ajm?E40>5V+!#42)W!66v%mI#D*Dvb@76~FB zCN&Df+6cv!&c__>GSZ|#L6^&@YZvOCjOH8iRPK8YxqipvE8FHkIO z9bU?nLLg}GG!(_qRe3q)DJUKCgw1Q74YGqw+nyi_jw^~^*DVDkkR_8_L{O6;vo*}m z9OE?|?D2z!t@5B16+Uo^>7u$l%NMqVVAnK+R9I~W*Nt`$3PtlWIzs3e5elXPk^nlp zCE2RtgMQU?RgqJHqtX`UG1DAqxIiMd3;jt_X`NC~bz%@&g5ra^aC}`D4~3BK19uP< zoQ3& z@ixe$z(DYC*mf%|8y6xcn`27U5q}@#G40)26`v=NY4wHI? zq$UoRJBgi*!%-LdjxKlwWpE2z@C(YFKDihqiCl=x5jWGsq*+TbOh4-zgs-O46%e$I zg>(GJ8x?8o{Wvy7PDly~1^zLCw;Y#@gAA|?Mq$YR2n zDq}Pk$%jo^%oDBUj5Y%$nl3i;&FbW?v94W`&8?3AIz!Yq+-Ug|qlH3f#nz7snPz_b zrhd6R;?UI8^Y8Xe&%ckBYD*K%c%f6xG)v0i^rUGPtwl@Uuat}}5(!>c7%jlg;o2#8 zB(}WfrbchHnVOwMGCThC>C-=^kCHcn7c|Y#w86ERW;9{&nxrI#-YtUvhn=<4Wf>*w zs0EEdA~E5Ps_=(-&(Hbp-J)-Pb+lFCC6eOn5`rYY{2nBq zA)D{z$(R845fRkzuYCdBF>q0+M0T;nYJpTLU`h#nXe!!jq|6ZXT9TSaj@d|vOnE=| zOWb>Y-ad+1u{bMQ8PXjU;C13-XfDu60eO+wkT8lRai%c}Edbgzj>90*f4Kuv-0#iE zqm)I}CJBqHW3Dv(@8ChZon909s@T{Bh|YGSGAZ_0Tpl5_BZ>T#XBghvyr&!PTP*O* z=j|}0{PdQb0%ipftFp*Td_ujUD;pQpNU>x`Qh0Shx&p6~uYaAWJg87XCFHe41smQ1 zpOOSpJep6NLRytdt%(3075I<3$15{xy{g73qvu#;?b{MB^AZRc=s4TJs&0^H;9~Cg zb=@Pcag8r%AdM7RZ$`y3?@6HGK@5TYYgIC~TC~!-tExh#C}y$}7__{cvi~<4_(?_^ z5y^4r9kRc}loi)iJDu{Rk5$0+{(G>WD@En(DBu4AWO-qa)v;XzohsIOzA!V}i!0O`7jo#t3SsT2QC^yZNuex!j zbeU;f^x*2ugtdLT8@+4UPIr}N@VlEBJF)R&6M?z*5 zH;F-s1vv6L5X|$dGc&6*ZwHCo;)QoPS*My>`%J1@O}&cnU_AODfF~5=pd=}j!Xwte z%a9yt^9`%3H>?tM2KR>dU!(jMf&K&Rp6pCkQ`JLuLKJ5!hA|;RQ=q)6C^FK|ifgNQ z0A?#YaF3sad+Z`lV#13kSCWJ>7B%F13v@|9bvtD1U&UfcDa;0{ye^~V?gS-}-HkQ6f2}@T&oJLu_ zOp+}Tr3oiC4_h_CL1cqr@CuhH1~fWLG=_Z#O?e7-fNj~Ij00c=nH>nu!j1(lJy>gS zCJTfpJ66&Rknuce5%MxcqJ(PVmkgTp6knxP_*D3f##AX)G)woGIdkp%zL4X?TBb~C zJ+GJuWGwK_y2x+hYtRJh@V}obsS$q>pVBr6Bg#jzs*BtfgxI!YX6K1v^Rlc7n1uXp z#eNfPQkqK@wQNJm3zAy!U}FVr59nphj4qbUxHu-}MTb^0bv!p(>WXfuElWr@q(8MK z8NCtrcEyw>MXvD6q=+Ocx(-(Q3n}Ffa=gdqX+Sf=%kHFi(|s48x`*E5)fyyUp`?^e zjZj2s7NsKPvsocWJ(}eMKD>+Gc9`bG96iC?)LEh~k-)7neL_6aPz91Byu5kAQ;o*R zZkPI?E3UhqE^nqS!weBnA5&!ozQj|*pktGC&jg(qt65E2Z_*M`LhSC!3`yfW?L?4U~F(bZj=TIFyNMv$%8QJJey?-4na8wiScVQYZw#U zhwz(dgEofDd(oK!!L#AbKH*fswM6mAvTe(s!^r>4=0FrJSJ>{0Sov~LgJb(FW|Ov5$qtSOEv%Kxjv)}`e!SXW`IiifSZu7=OC z{ZA(QzKT1aGd0C^hUlZ`XIl)Q!AeX4f=I*4P4EPplPt6+CrOcI6l!B|!%2B(0X)Ge za&ACiuWzSpxDV$k*|wJs!`(Ros0POpgkVz_1eHQkIGu6E;4am!1wV;GaKUKrGi6^% zDUKp6n%TF=@C^q;L@Bv?M>5)zTUBbYb2O#EN~JvHq2msNeBih;!=T>HUCG_bJ;A-1 z`zXf^7)=jmLdn&Heg?7Qkxwc~9$JSSW;_&fH!0;C8nVr5SRI`6K4F9Z^7kamD&YXl zBm7RXrq^8$GY`Rxk;om+lLW=XYO+$sB#GaZPAa!Yh^@dqGo^6~k4I zH^BI}olu7+ld?etH1{jWAOR-sh6a)07tMrU9Gf5hf<PV2|II)YyTZB6yPFtM)EmQ3N;e-L{C{jv`(jnu@B|M@&sMw%;5Y zx)++p-k)1(o01V#bv;$mDX(Y)p?4`&!50!HLGh(Pv{P_=1a<2$w*1d@6L||a z1-%d>c5$_dlYxYOaRZ;~fXUA&_TwZDE3?A10u8acu_=QYN~JKja@}M)U;d@IR*tT% zY$K!d*X7I8g)yV^rMLOc%7!~`y5r!H<9~KVe|LlYOE$arx^k`j+Q_?ghoKcLOM2Idg^d^F)J z73)25fVJgvHAz5=#dTzc=CCLM^ab=Tk)B$6e(ia(@xlJDZ3S~Ve@U;px#zF_b9G^% zI$4=1zS#;}kM7?6Xlt5GKm8u^rkDEP_(uO5r*?$10v+wdt=#nVbiRF?9xbn|EEmYu zO~FAHr$7ClU@wWRueTGgjJJ@ODj_EF2UBE;pGGoIguk+(drLCHsxtOO^0j zYu{L(kuJylJXxZaC)&PvQuVimp|Qc4X?c;GzLPxD%CG${;=7TVd~59k$}411lSI*T zK+Ji<%f$RO`N%9f?L~8=?%WDC`RSjXJ`H}ztKnTQaMyD0cGCN7gq-a68r6mrW7Hj)p&HXO-8SR=>Bs9|8%TtsGfhl( zhA)v>J~MFwPt}~1FomemPf~=iZUAi{Oqq-e5`)&V5?h~9#C1E8ky@c4=(buA0?`yykq>N7 z@4kKup~v34EK1VTA0ZFkse#^K0Xxy3X^3)^7G(M_nxj*Js?;>{BvZ^)sN@70UZcbp zMAHqjJb$gPE51l<&-5aqe?S1og6OY*Jy`AfQ%~t=nt#|J#CZI1(5Hr==qj&J*$`tH zd2cYoizpd4svz&0pvlZm)m2|15`pI-@#$jq`bKMcgP`ySNn5a-SS7LmmW-(G4tZWU zFE_A?qlv#@q!|rwxynMc-E}-31e~2D2#^3PBJvFS{A;IhN;ZycbT>+5<3?i6xv*fR zCgEv?@np&(&z#u`rfa9Gqa)3W{%5s0vNQH=(XoQSwv!r{^>L|X?f_z$ugCJhR~Rr3 zQkXz9Yj+B?GaZ5b*KJpt7}}ba;{xB686_!9&^+wR77ylk6)n?&C4fUnn=mhtmzeVA z*+m6K4 zj4b5?ACRFLOEQR1F$-d6MJn4OJq)ILR#4J@Bvv}^7|0$$u7~p7YCgn#$)94WJ!79D z)ICah(ZOsH-WA1%t=L5$N0wF1kU#W6+0TfC$OXOh_2-k6*C?MCRNs*tbZ{alyCv|FHhlse5jJ`M0Q2ZxYFrtn?6{XZ10%vRI06BwK_488)A<9 z{zSDhIa#UpTGdJiRt(3sPScl>hd|aH<*w)M;$F?Y0c6QgSkIGWARRSvH5toE$S^Ie zRYHot0%2>X2=uK!W1f%VNrY|y*`Xjt2}t_^`qZkL4&C_W)=yg?R6;G~YI zilJ|-<2`V_?6IPIYr1e1Do(W2A2PT7p=%FNxZJB;2YXtcIxRWuh&)A z)ZPIP!2rvYC`P&@i#cyZ;*GztUEUJ?Im6)v$7l<@9tuKLz|8p#G8P}b1B`1S?bN99 zCvL_NRjT;Bpz{W}wJ-~oYvxTWqM&cKk)TC))G3(Z1;5AhdV~RWu`CmX{!ov7Go@Rq zb-DhKF6nmN_rXTajHH7w)~m5K<5`|>nz|wtC0({EB7e2*KdMx{qEl8xenho5!q-)+ zp&nZ!iX}&u;h8#^!csvx7gJfl7`9vH5@~`cfXrNKapN3 z-!6Pm==b<(>FTS@+rZ0Od-==^S(xIdz`nK3#%ezQbcf}+e1m)(`g(@3qn=X>j2v~t zLhmI)jz*iRm-n#7yLWkYQ)Kq@qf1MpexvZ@fofw6jKQ%+^*~%)I=IA&b0jW0{dqb{ zzQRp%_i`U426-!a7g#in0mB52`w7&8%!u$2zXs3Mf&b{;*rxFNRVhMd5Y!M9BU z#0=}qOtXQbL4^fG+j1LI?x!X6(y+up7<8t)%#;|$)8RA>trycbFf%%CCrKR))d+sU z3zGXW)3ZtK{xn0|#$77aXb`ZtL8IA54Nz$!t`5czuu=pM*+lGN*d83kp+0YS;$i(m zgc&kX2!g93!xA%8oBcXsFyk%^G!8MAnvG;EXRw|>GBlTP&2$3DjAPkgWc9IY%J{VU z_`EeSj5*kvqY1UM7dJMICP8>@&H)%yjl@R7>D7k zCEKb2u3Ao|)Sy(;i@F2uR!KKO*L;V1Sz8BRkJi)KfY6LeDy>Y0rv}Lt!9FKW3rCE= zl9zZ>2GN7`>?UOdrdWv_e~*&!onzI4hb4b1ab+XWO}mBsPuaRg;<$tZJS8MRqtfq} zbXm1iWkOO}k+_*cTPA7(#_M=+5~T6AMTAdMz(paBBKSlS@Tv(_bY53gKLz%iY4hN_ z$OMeF*fGEsGL5y@N>1!*qU=f)363c{yeME|74Iq;U*d`687|xhqOtH^jL@_SC7KGZ zkZefQr=hL|CCLG+NCIPt@VY=s2AKQkgG#nz>uPKmepU=Cn&6iT367Jig5Mzfp`_eT z;EEJ-X~8pmlg*ROfUZjDT z$Y2U9jt_Sgm^fgkl}!!oNhPaG68(^_5zz}B{r|G|CSa0WSD9$sdn4|ReP43Vtjx;H z+AFiNGPAn7x~jT*k=(8BmRfsjYweP?Ses=VZ|xP!*g|+2zyr2qFksALFvD2jMPR|R z84Si?d+@VCn2&8>z%alwi>v3H8(FQE@Vw#8_o^}@B4f+QhrJTD~fL7mo4LM5Tf2A@(!KTM-5hE5O&pV1hCh5^y4^Pr>RjLIQ>i zMNHxheral}%!d17ThN}%u&)aCHr#S1EVw11ZgCRi_?sY1$yxAU5V3Esa#T4Db{A4x z$Q&kFE{jNx&qGpncQ?`(Zj|D&eL=>-Fj(z$Up&t6y46*8(TfXN>@Im*VKs`N-Rf^# zU3HdRC$_T$wr)k0NcRmlB8Q$IMu?nJr&HQFi&L`p%_QKu(J5wKL)ZMhZWKFCYv>Z3FW8`aX8g&>Ij6`|!L-pSom1p_V5+FH9`rfzu?tES{F6%*B|~3J%ai%KgIGrF z$F1>zcN1j&Tw+6+=Y>TAU^R`UA&|r?u)i#>&%iYOt$OBS87`$RW1O8djn$_0oIk6l2S9C^2^DSGVFum1*{%cu|X+SdvWi8mCn9OVB zC+hX*K0LO)*kC3#Td7@Gu7Amg1{eFLSq_S`(?@G*olVA9pauMj^h=tUD~0SO`1oWl z`LMqtT`E}s*#c<@@|X2n!@<=@-?p(qem5y@zjS?YX(g~0YvUW%&y22nbZhPMuikW1 z^XSp<-v4J?k6t%Avwp+4wrB;F%U0H3x?N1d%Xj|hrd^z%yvEp35~YpoIMcf*I#_$N z3t8O`I^FET()QKPGFf6^1Jy_!JP(hI#^49LG^x=6itc4_K>E@f<|11Gu}x+@OV~mc zU|~L-dLCFwGkf>DJ6})g^@LoL)L#;shM5Jfs$p6g5nemQXH?-v3c9-gVIejx}7Kff~^?CI50ayqTocfK`!EQ)kXV=4#lxJV;C zc3D|3oty^y)-qKO#2}-Q2sAS>W30)#AYaZzyxu5}c0mIhMZ5U5Se*8a>)-gs>%Z~V z)5BxOUV6;SP8G?MZ~o73c}~6V4LeW5nq$MM%CXp<_#~euPe`1H82W2#h%xke5`bfb z47o5LlE)wKo%!8QeliTa@TQv{B#n3c)a!ngD(nin^Ru_XIm~naa_$f5*%$b&i%MS^ zDtoXNrHvHM6EuNcwi^xAYgZOmfzqEsCUZo7}j)z5T@YX?T;X9ldyP z_QQ|fzgEsT`B)|KRIm%%S~S07!}ce(?d{*&_kH{Kf8V}+7q7$LZJ-*K$gOv8Po3^s zg}te3mZzB-?~{M9$NBi%bL1)T5^-$kC74w-oRVWCm~MkTw#ITElgY?QjY)E8E(Y+E z#?zB*L4ml8Sd`M0<`;SHiJgyLdokll7BjV17ZK5flLqtydZ(;uyz+PdKs6NSohm}NHeIkCLR%9?Y*md^Gh?`4(4PM<@<$R!w5Uug3(9{|eqH%} z<!Q<`CU`RZEaG+^L*jX2 z6h-1!9OK0}>x%R`#+{r)9gl`4K=zP=O}MF2!*?zIIW6W+2^4|t2cLEf17xE19~{$k z406I6#xJG1JGG^AMs<^^E;9KDX(1VOaq(h8%gpgeg{NSeRec@)h}ZCL3HDgL&@^TC z5v4Q(`+^hd*OO#=Q4p0{Hf07zDYVgCbA}P2QIcwyiR>CSmMZW34RO+{*A;r`h>HwW zr~|H{Z3b2_T)2y%M(^Y^Nh{Sg<6>?nI_LxmHIVh>pdkxo6!KXK1Zn*C& zSMCC%+vJfA){e&E8Y~~Pb)d7E)ONXR=)%%m*AzAqPuO4^6>q3kyizK_U=zL-3$<*c z$7;EP&KP?GFy!OfGp1a}5%vzOE za`-ofe3_S3q<_c690f=4uqv30q4-u5^vF^CeSjH8$Y3pep@z&}zi<;$5| zAXAClO3rSbedfo`o-UPeR@y48tdLK-;N?WJNkHN~_eBH0Z_q-G2 z@;c_Zj0aeHobb9Nqr>tf6kwBTJ+X_92=_83lkLl7JisI1`LJD}q``QQ4YG%B@QxF{ z?_*U%uXTpQx#h#AgYB3Q@0}IPoHFi*8HtgW<$o{k3wX=&7W}~THAyTgBx%My4(s97k3|e0<-kNNdI&Y@k%T88Q!B`Q z0XuNfhi!fM&=a^FbKPNW(&C~wNBJD>^VS^eH=!xZl+j+ZFXwZ#)te)oIjxVd-*W_J zu)fpn4doC=tG9}tjI7XrHN8F#F|5k}VYdlQd71P&NSNGR#fp~ZDlWt74lc;Hj#{<5 z+VA#o4NTTSV+`feYW@)p!*wsNg^}=xy;MRsr)&a@*ZQ~f)-bQ(#o^uNB;Om0eVbS* z^qmip^L%h*C?k9F3%{VMsj9w1PT#jg{$Kti91xZN`)<$Y6T}`mfqP~MtgO-;g8BR& z`984uw)G2unX%gPfBCnBS!39Vg* zNjIw(?BK@rnIv6UNRyd*{JZKZW2Mo^CwcJ77ZdcKwXBfN%g0+*vRS$0KbQm19Cu3M;t`GLoKmUv20a z?Uws=uhLIq@>;HyU-z-s?Y(v1>aqduj2j&HbaKWU*6#BRx7BXf`d23L51K}Q&$X|A z{k8jU-CNW+s}!bIJzdt?KT9tLS$wbZ3gu0^*rG#lq$QxLERR8h2Kr?(8BmZJ@^YQb z_FrNcgcz?3Bz=&}B!H1fB%-RUKb3fda7tK5F;+Mp@$=bZs}pEKw07wzeClD_e)y?S z11Bwb^DUM=yrO@258n6HjT0Nf5+U!G={+)2z-~Her@a20vH$#y?BDiY=QUKl%Qp(Ki&wol zx=W?6(T_fKu(t@t(T5#VfGHg}Rc>geg*7V3c!V4lsjOniDNWD>dNMrI&wp9=WZ zw~}8`ddenhbOeA)b27;xvP^(B!oeW0%vUEr7&Zn}U}XQ!FFaNhpaUZE*x>{H%OZ;f*_BIcTa#xbYcz7dUTL#Iq)myb zC}Ul6`Hz0^M|QqUMwjjU#?<9MblF=-dFM~E$H@;rzVo+_qy9(y#y^+i3I;sm2#)S* zZG+(R)G$uf9g}fJ4u6dlc7BGCopUMqv`gIe0|$0~^K0v0{`yltb51#@SOxM+g|C=1 zW^-$6=ks4*ml#2xC0k%u%qf@2+_W4M3EBYis>-oM39=?JR;h&P;owybWtWy{;VQ_2 z9)4T~H|haOIn}8}nd91lb}}g>wT1Z_QNwU*X6m=-L8dk|H#113LL@RbWluW;L4*i3jB9o=rJhz_3yX7EW24_27Qyq#7LxLw*^%ei2anK2ohPed;JXV|#&yHe zbiLe|^GqScrAnw!xL>b>_R>)nm6OU<%5BQufoKm%i}WOC<B)4+v+lSH_a;v6I2iN33-84rA^SiLXj?CdWEiqR0h_m6j_q znj=$6MuTyU=JmQckT@m+Apy@w3QKvL$E&0MXo!&)X`>*(Gj3>gC+5m%0RC$)mVkJe zbTPDR3`>Iy&C$Tc=i;l(v{f+^FBfKJvgITysHz1PRmw29;W(a85%(d`n3elj%rl9t zhZWl{XJ8#AI$=z0K@$$(%D~Ol)U0gVPG-XHri+H2ty_q(i0Bz;xA>mp2*hzqW|Dv+ z5{B#e8rUngV>lM#DykYnlaZajP&ME7IQYdZNOZ%owZ3ZTHX2wAb}5F0YFEsv@N51j2#5Yw~_yb(5-H-vys&Oxn3r4Cq!buDOI(Fn9gqVi5DauK_f!Oznf z6%(UV_dK42Gr}So+wW>*=!BdbcWh)D=h35)t!3XEI;O#o=tOhZ!9TLZ>^nHvn2zf@ zZXbTHYQjA>R2rJK>btR!vx8U%L)3@`p>-X}C{4-?P7%6TkEwK`%qKF-r|3}OMz8fmxYh^eF1^G;wEOA{9hmt5M! z5JnzW$JD-jNt&oAk0xaed9C(fWipUGj`_rplf|(j!IY@gu86@8$2j-O7hSDg3aSD3 z>UaNG_KTSZa)KZf2)Bjw;&3R9_y~C+Oh$8B9gP;j2^0)joa9&=`Xn01Kp|*WSPdN> zTEB30=0fkZg-#HTLJBo_ysDU=6^=#H`Ng>uI;CdVOp>cgcuM$JHKM7836CCn zkZ)LUerRu@3D5ucA9>^uSUJvqX!mT7dFTiwDN!qXikAu;=exA%5Yr*{+bn2~+!sjW zfdsKC^ikBXTn%X^u(kulfVPFHw7SkLs$oec$WZ9QhUQ6v42t`VINdD9@BJ?={$_46VO{RY$Uq& zfF_k$qN+hM9g%0kddzknXEWt;M{JryQqIeo#kq~?DefDlQM=;e6QnkC z)8f*puyf|9K3;5bwQf}p6#e7tcg_{}_UCLHQ&}f_g8GQFhIe>OKpQIte!;{w9 z@OfAO3Db=HnUgf+&IHPCxcYpkJ|@vd2X=}llM?6>RK66^Mccu8+`NohqBfo0oPGovfbg|*kt zRN<)EJul#r94d#={(rtEc(^K>7*$Dj*~xdEEjgAZOS#Xljq;?$-Mqv>g!Fuqq^uu& z=k2#We*3==gFM7k3CzoDx@GzjJx5%lg6@YEI_S70U7lZGpZ`0YylVB@!Qk4}OCNlY zJaGFvZ@>MW-=qGBNfHDedJ_sz-K;Upk>L*t;)5WFicM(9LQg?LsbqC>7MSeZwtCIo z*Q`GHfd{dTeCym-$s5QAWfT=HV(A@I8HL1W&pz5Kw;OSs)P>_(TgO0~q zMCjwAw_2oZ3y{g{iEe^O)r4|R$M#L4%kO==PLxc^pnd%Xc^3ToTa|~Er?rng42Fab}Jdthk<1o<- z^qM9M^fMWXl_}tu#mb26M1xU^d%_FZa*#M@lqM@9Sx(fIDc{*h=7C`*SzZu~`Vr|P zu<8iUhu|s#OnN>^o=as;xl0o)X+m!T2Y3+_B~8Gs!a{eKcH?I5;A2W%7bF@Ek)>kL z%Tw^>dBJVyj|cE+ybf2>g5%c7P#XQ<8pV^^r)N1lI$aJ#xY`K$t(*@ zQ_B#l1suA;h)LW6(GeZQ{_Kob`j~8pt_e(gy&;IHPlsSqOb~^6 z;!>GIFRQF7G+9F2HTWjDCJjgWHW)aGX~H{M-qa{w^`J&ZAV^G|@0^xWmtpz{GndK~ z3~)h;uB8h(I7(@Q8D?munpJJzSrdWhsu9Hm2OZ3@0L=oi^JkS+Lk&Ts5`??Ps3I5- z>>gK*=RjM7pteNQHv(_OYkr|bf}oWwjzqYiQ6U-*HGGp|m9Z|g%8~j(A90J2Rz49S zW-^sS%|*B}jrSyNdpfAPSI#*Vycv& zi>A6JcrKPfMH$>b)25!MCc$Eg1M+ANZF)vvff=YG4OFIiK`3Tk(@QMsn%s5?MPK4g zdNU!CRnhVos$VQQyU|~@<5cCELA@gmdv3ZItFGXsYFvmb!t1J~%^O!7*9PZN7U~%S zL<@-jskT`NONLR0iv>F?^`lw1@v6|^_q~mRy+nj>WsK=As9BIgAw&5L_8hSr8iGt~ zRF`>cU}6UQMC!(-=MaB6D1n{I5&~kEQ%U1x*ecN-A9_7nr)rcs&;W%r>omc6V)91H zRNW+q&?h*vI*mv*FeQPUwiApT>$7wj&QvyA94tAb?vk=5;p8;aFjmDS(;Hov+mlZLiE=aOTb}-^N z_DC*II^*!4iF>-N0)jyfx`?JfV)`Ocz9?&_xXmBvJJOlj#)Y-=P z=8p_MW(>#2erkE%)8fvN#aRZ{Z)64@52n6hnq=uGn{_R=JR31cR86zM@i6>N^6n9w z_ukK5y|%IQ1K6H)@N~g4wpA-ElF?gTfg^vOG(^qH0qUN1;mJH zXu1|A%|;J-N>!nQe^ZL*Uue@;cBAAksQ&-|e61Il{m=gUula>c3jf~A#~QnHp9Npx z<4QqUQVuEC%bJr%5iuRL8AcC4QLKRKn?w<$j_;*?P+>9JlUUq5>cZMA$NtBl(in4J zHb~me(`vdhO}&eW?PD2d60%k1?HY8X7)az=u$sqP>-`hUU1sQ{zwh9HOfyj}B;{H1 zT{TLU3!bHiMflB&o8Tet{NEN^^7Jkx30Q-4sRUa|P$UmUl}co3n|PuG&oWD$^fSWP zcd>ip%P$t|5xh{k22GGHfh_WV+g|(Deh9Wbg>-d{^jB>fBBA8(#hr?}mM&Bd?hD zS672p5rp_u?*$moD~h6B5FEiK!*ZCIT`=+eBv0;HmPz$EDnOpNAZO}p!u0eg(M;b6 z({*zSd~dx!gY3Q?d!aGeNwx{HWCa#4MgP$VY>}mNmsrHMYUbu%vuZjt+>$w0e@Na4 zc4}Qwq9jLB@^Yj(Xsmhi99*ePAbI!Y>5&vvz_IH*78N$a2WA@6-JqE@X32?*9&M;u zGz{-~I2^?pP2PUV+}v`Tl(Xq{PGU(2uq*!w{1(KEzFv7yd4=*C<&DZ)mG8m$QO*RRHvo@jIL3sM7;aZ@5U2gPir6~C-l*Rj4u-uA(wEyY%pMQo zey@$JR&dHqk_@~3P9IL#gZVn`50^=>NxL4=hOm7MACnwRdJLb*w}^U!`phJ>`zu(% zNNxsobOskL#mO0}!5Tt#UU}JNm+H->spac&^>Xv+m+!mu`YVXO_@<98HJ4{$>ou1( zm&qlB+^@3X-5PxvAuof2k4^&OWBHPQzqNGt?n+AK%3GF}m)*Ghxw!PZ*RM{teWe`l zd`>;sTpITK*OiW4|Mlz2(RJmkmX?;jf9blYjCD)9HI_xC4f67oa*OgxL{GqMjb&L2 zJ4xWE=ahG?3o<#xWVy4O;xS42$Z0&EpXX^G|0cdCvsZE4UQ~!oTmy~cGf z{vt*e=2TVA7`q5x>u@$gVR6qooIL-xaKqKlpQ!gkqZ21a{i8YqI}tPF)yhKHm9ksm zAp2epEptw}Sk`358D=;Q+emwm7rb{cTPi`!J>Jbzcrr|!M(`1gS`OuapR0Bd{$PN) z-zUoULZL|h)Uztfl~SqOEhe?~x%Qe~D(rmq_*|-cf<^D`qM>?0;+DN)gwruOQaAGEAIZJ(a|H2Dkk^6H{G<^AY12@Y31DY*Pm0`L^->2y>f2) zoH8C01!mzSZ)yw9hZ(io$|IO(st!OGNX|HxU`lrC5=_SyO>p&a%ww6%p+L`CP06h+ zCiAf*0vuyVPd1O70W3$t%7cA5X|pTiCy!zZg(^b@Fj2tfaKVU@MH7H}BZ#1?VjmIqw#J}tJ%QNxd;)@6I zOu6rS3x=hcT{9?@E6atsi{`G|DlAvZCC>zz>cW%wJ8~AshoaSGG8|;%K>`Xgcs?zR zwb=P2vF^oU@g4Ww^wutBSav?uRqyp)PxQeP1A~$kLyYvl{%gIhik)u?wXN$NReWvd zuSoo~ZEWcJhGFmK+JBbLgD!WKsxprV0U&{x`@?YNDsRr&+`AzR%cJ!sUJvDwqr|HhQcDZp&pT2ZP z*WuNZQ@KFOzxXy+eBYgSexGo6o}PW{K0n(2z>SsdC|Nd0ZPxBDJ~ZFCvNhLm$o&@{ zmoL1Sb9lmqDyyjBEhh7?eC028U*yTJeB~=4yrq8oTR844SZH8BLci_Eel3y-DgqXQ z;o2d2W?^A&p4Fyn#YTlKEReImSFSGr` z$A#zo7h=WR@Qq4)AhDLZgJCw-TIYxTT0_w#XYNf7oLbm^aO&Q>?%Mg*F$d1>9DC{m zThpW3f$`b9@4mDbA*QhqY)#~IZd)+T-kaZEEN*;!qflB{5F1zBdgUfxSon(3+AGwY2pr6w zXH`*3E0(2BLx0oc2rl_B*oCX$^YTtdJ(?J1{MlNqWInZcq#Xp)7cD+zHZ-1PoG)fX z96l__;mVyAviFJ(>0G%F7C$xP6L9P}xUh^5p&!~w01i6C6*?2IRyD`r;6YDtkDrA$ z^{dK0<)w;}V%jT?MM>1oJfjn{VWG>wn$h|G1AP%Tz{i~BLYh2dTq|`kqCu|=S3#og za*oJBPMI^4Yu5i38ylwXIg~9k_B3T5XZTu43R=dirKr%0qNm{%$4|epw{Q#3z>O`o z#^4?o!*VlTn7N8GR#1srtn|{^rOvw6Mr3&8%b+i%>X#Ty;l;kBlA7+gU*!CY<+@$5 zvM;69Jr=yuFJ;y}pRY|F($qMpBA7l%YqJnn>RXJdkykPe&I^(oLQ%Hp7HKFbQhd-+{$a#D0B_%BUzG3 z1uko?2XT$ag6?6yF(*gP)1*PyAUL8kyJe`=oFWuyUS&Gf^DyYrtxE(rJn#i= z+)wU?Sq1ya2Ehz$97yaYDIV6$;0>o;>0-f57w*qprE*ztj9igYHkFdq(xE=-9WE8; z3Zygq;nMJuQK?%lbxR~|WaaLtLp~UCh8Si#cxII_s&SGLBa1jQKxLVU&MU#JlM($l zOXLV*5^D$_scXE{DC44G9nzYdPtEc+=j}f)6*o)OkCot0ld1W{&oUpbqSQZhs1Fx0 z?37BKAx_JkPN`h-)6|EhTWlmJBZP^7lpMrnwrOOW`8wSv1;=j?i-ZpzIy59z+jVVH zH3c_F(e^x>6b-J=xu)rwr+m}&t-|T=zEN`Ycv9XyL7tYZ!zaLRxKX)7xgR{#*MZ;g zxbh#A_bWf9d=zx-UQ)wSUNy}?@N`!Z~|1P?xKXhXrBK6 zw0<}5WVCV(|JqcxyOH-2By=)lX-NOy9TjuP2AS-tgr1cE7*K16s*SFpSWFkNquFfc4tWKm68v-+Sg|vq$zMME75vyE^_{mhzVr{9wLkOqCCk*E)p4I3cbE5Ge6%-J zt4;ldRV)>~J8O0=;3a-l*|xKaX&SZS!i0b7Il2Zq*Hi||eTXQMvy&l;6P5(Zydnw4 zHblD7j*vl!3CrqAo{#`7o$jL>+F*Bf_5G%^gbu*VF{0_Opk;-At%!Kzhg07Z}}ykcqERk}q; z<(8x#Ao(BsmMpdGo#&j;(6Sn=+v)7(%P-McbR%Kmg8Rv#=Yg-|%&c42?OkmLmJskf zF0MO~okS`*WqCsNG7nQ+BHbW{rbfp?(|{9wHG-yRIF6=%H8gi^pWgs~?HA#Gxs$t< zV=|Cn5K!gbOD?$=-#g0bZ^P0L+;`v38^~YnOfc0$@M(Sqe40>cD#JYgSh!3g&`Dj( z@&w@=aFRxO+Q?{}mo#@rH9{U*KP8gxj9WO;xct>uU4FT{e`EQ+W0&5)yt(!I?ZxRm zB`qnpOXc=wR^vKW^F5;=w|J{JTxlC}4*&8`K( zW&;*>zH#mAPM?0=wZD|aMnf+Y^eKbTIC0=(RZkM5YLGZl?T|!p3d3FUd;U#iZA|9Y zU}d=JzKg*li-4J{6P>}e63rnv>|<%*^7F^2 zj?B^s%1Af?ll3cL4LfBjW9FzBoli2o8s)Go5gW_5V-j{uu1qCzVW@ z0oz|`yUe3Q31H$OeiV(Fe@pMh`-%kG%E0`1}k(I ziU;nwtgDkEUE(jHJ&%F0N!}9pqPuw_DB{V-JH z59?t&t#H@n(}i~cUqGP0-@}9zxr4Q|UQZu_tr}RX$d~!8&814oo$dIZ=XdT%8?)u! z&W;_}9Jc>NSP%Nu;%Ho~I7IwEkO;`sMGyqR<&-SpO_t z5}0StFYhO?jogf+J~_3|3h|A#xcWZRjjJD>%wZLIa(4&h{`s)slWOdm@2kfCWWENg zUc^Or<%L{y2-YejlF(p9Ae5~9n2+v_c0ckwCwtU6zhWYU@hHp%$>$Rg?jKQ&*MO(Z zT-8|j4Mufm=;*A5C0LXcRFid?MyrHbOgAbH;=Ht=Z|e0(P)3V_X-n5}T4%a?z)*w9 z=!pxrz77IO9AO9%#fFBujoD;jvRPFH50A|In##&T)ecjkcP`*6@Ido!L2HvdU)qcD z(el*Kmb4+!#jEEznjIuiA5CBypXXi#Z!eW7#d+;fX95?MFOjWhhR2Q#aqo%2n$S(tY_#f4-}UqviwubCUT>SGL)@3UZcpv~RJ`mna>jz?fQ zrkt%zlE;>bHkK|dGBBW++aRnnB*kB^d}5}gS(?9n=%MX*-EnwtM(REDYd1_6Tej); znu~uBzxCCfpWJiH$Pz)<2UlbJ;e&U)t95DHX_m`oHZ|Ms>8i7J`8_*t+Bkw^2ISn& z(oOO^VBaBD$Z_R1MVa2^^zC42esUgjPu7Q!R$jO^o^X##Bxs&Hc^6Kz36(E9kFk+r zbpZULO@xvqZY4H6=qaaR?i+6WE!Q@6{otnz-nfF?I68XboU+s$ zpKb*0mQi)r3P!oAW_&GSX*EvPE2KDI*UD3~dTTyea$j>%VZ1nB8KnD%mj(y7uO-c; z?t)fn)~abG+t&(P+hHN>SG-EYX+r1d7^$&rdCsi+Lww7;c#k{!vU*1UsdO=2iLSOj zRNXF3#*@E5z5sn+Q)1}*hZH3eLv$y?=38++Sx8|o@8&+TdS=FFJ@ zQs3SC8NR8+_x;6PGMrvAO76b|DurV)iJSxG=$#?;>nIQ+wCa`k`BHdF+

hI~?`i@&~Ju+UXUxI#Ej+uV$+}Fuxz{fp~`JU~RKOa~YdCd^s)-LMo z4e0yb$s&Qp4n`1D#7{>cjT%MV@fwmRWH?6(5%MX`br*fras86&-{>)`qamm};AgzFgy#RsRMLjuWn9Qh(7c8;-kFUo=DSUv8}5@bj?UTZWTpp0nIo zG9#C1uG0&NYYNXcsdqXcj)fd(-m+W)XIie~0a(-^mOag>mNoCR$C$IHak?&_je72D zY>ANh z&U7R^-vx`F6y~M~F}!Bh36Z4Rbg0C*{}lNIc@}y-X00NTm)PD-8yXN~jsaDJ5YQ{3hUIA75Ck6*?4H0K`>{9?|p zht*@wd6)AK!C@a1n(W)>WXwk>4P`~yxBycebehPCy_d-_8)cLFO)l9Yb~zinyZTy6 zg24)T$Mm4p8eDU5`99X4ax1CF_THRTFCyE^^I`F|`l;^}y? z-XJr0*!0Ho!IM)9W>|Eyd%7;YeR;b!{JYgQHT6!%*NH)!zrVQ$mMpzZa`KQKYHgSFb690C$U1X*0&WK^6|{?2 zN2^0J@W-PMuYMOITogX}biNZqxRr!c2-bZSH9_2S63 zB=|_N7^a6{Hz~q5pnzm_g{ug0F5vB0$gZSW4#T=QmFQt4iUzoOOy@)}WWz&$i%XWH zD*9$rGRqLe?xVZ)_v(DR8dp7{`-}uJ6<8Vqz8eC}O7=l?3%RW3=a}-J*XXO7ge3*r zDvF95Ltfbv8wE;h3$|bN9YUSFXkP<+Qy`0)#<0?!ed~lB8VI4SI)YGYfjNn_`kJhN z(Wp@>8V#ShHZi&}FHn8XL=FHm#~{ErvytXjhu<+x+#1757@=FS#*okxj>DAJ>3Ka} z6sG)j%+V3O1HE5HOqrL<7lNvR-_Bu=={eojs)3vOz6BS}Rfp@86sNce#}_RNE{+5T)a8mj5pkn2bSd*Fipmr~RB-?5ceDN9L=;dtcu=!Rn}iE7PNgN*Tss4JV_&m(`cfjmnSfF z5n)Bfdu5hJhM+h(`dTu?1CgosJFJq>Ef~6!VQ`79)*Q~k`_IC;DLj!Y1_X2@xjvY+aHC=xN-DaqQa&-sCu*<2$;?9`(Xn zA_hb4-8VA=C*52Gi0nC2NYqMp&#H}zHBWl^QVBIfE{eIJ%b$j$v%Nx}(w5N#w^X2`DuUsl_z34oHmonLMGm-NiLe+pW>_TGjTi}z`P@`C)i znSbjghqBVXiMVbT0@Sop@_rXA@trs0^gRz;#I+N5ozQL+hXlNCyz_4R z>b2D)M^i8T)A4gLAh1AM|l}WmAiv3 z5*b0$LX=5p!}%05MkeoU^4?w6M&kh&7*50hWOst|$U5CAF4$zPCO>u0?>YI3-t@uci1#rw*3^A3jLC4wr%^Ut{5Ky&Kj)E_EhR1kN7&mns3pGtk7AsPdQRu%q zVz~K~#VMtQ7)LpG9uK0h7BUJ)hQ7-{y!y=;zS2+;F^d{ZhaQ@b$LBSIhVokFEy_EU zA5=c1{2Z}J1uRr-WMDb;V~vZf`)}SY0k=(zzvFwj3f%&3eD)pRpl(*Ou}Htu8x#(j zIT_!Lq)zNLtd7m(7|W1%FIc{CeFkEkw^G^XJ9&XV{sxJd082|`ve<7)4!yII4q|&<|^v(GOP20u%F#y4`HsezEGueiWy| zO5r)AsU^}l@}i(p^quLZtuM~&Y%rkXHOlwy- znq|*hnsMz>-!}HG8GL;&r)z6uaP-c1-F4TyPG0-^Yp;F%YgDYrW#;T;9!=(-2Vrbz zAy@>4N;xrvh87be2G(>KDj^}|4BQyvGuz@6$wn=#bulT{yl$wLt=+>5jxcT8MxZtl z{)i{!fPXQLvnUSg<ofrk|^TmzlZH(}R6SIeLm zlZp$PiX%ogall+64l`{beD3H|w}+|NwsmO>iru*5x1`?Lhdyky!Sa+iiGwjIL_}t* z1am#Gu5XD9EcB7^mU_?_K83fDMG-{1D ztcRDKT9LE!%RagCO0YoVM<0!AF8N6!@#t;v_x>4V=>ROQ+m(lvv&v6TDq2O$MU*I) zH9@d4=+>C&7*C&C8lbqU~O~x ztdi+0GGxhluXfvXYxT-T!OSY6_L2oPSe)&7vtWyx!AzCt>Y@5pjg!DhgV27PL+dKE zjQNzzv{f*?=Wv*3nTx}#obSEFGAnMdnHC}+{bQmf0l3awAhrcoA2~riGBnflDZyt zY)d~W1k+9;gRiQYLDsrM@CMvqx;C|doL{RQ6-7BT`h5qTV;>9>O=|{GAt?qGuDKOc zSe`K5z%(dk&>BUIi`kCh2d1LDxc=b9_LGK{kE8Qi5o?LEU8-sv(k+TJ2hp5Ob9sPx_~LQfb*8Z_oy@2)j)`~s)M zV{dt*=&oLMO38V&l{55>&@2~}E0x!S9%^=$=@P{Tw^CygN^-PGH&n@iL1UNUwJ+1o zciil%t?o)%rzsY*s}hxx%Y!772JAMt+sjlnn;@(~zT=q4J%3H^XvR}0ltKKqHD7?7ZEFa%GG*c!VMik{&Um_b zfKW`KL%5S;j$rH<(Gd()Qy(CzsSDgA{9kT;GT#i_`FGs@!kk%O*;Y=0Po;zsphu4D zgX0H%Q4%ueypOpBCBZIaNLvPdk~r(tgp8|4FRpHqzSw!#>JQ)7ojEa{u4^j}i@&H+ zBB1?2gJnFb7ZaA>jU%KJI zeEU=yP2z5UDDTa(vR8Q{^au~fs&m%i)-sM?qkX?jhMSW5SP~NtKz8Tj*kG^7sADIu z;7a~I2WLonEcZ>sWMBz%cI0U{X_q`xrHNG)Mv{OLA?zsDMa_&ExOTBs(e*g8VYQV+ zLR4|}E4-55T%MXbvpiP2@yHFj-Nc!5(&@J6j^mCt8u4y2^t|?TX3yCfS1qOm1x}`y zHx}A^bw^N*1{#k+fY$Nb4839}tXgG>UDibyV@@G_n{Je?1W^VPc@eQ?Y{M64Q&Y=R zfji@XrR968*$l_8OIHG~)k)o1FYZpe{%YLit4o~nh^rxixufsx%x^5WL?O_at#ai; zu3#ZYoVS#t7i3a{{l<8-GR6VpG|F-suwAzwA*facV=1*VxY<(Q5!FrkOh8FKU zaBqc7&+q)LL+CI6szEOLo1>$!)@TKOf$S?T*1=#Rl>F_xZeoVP{sbmj`4aass zL|NrC^J(g;mDbLaMzr~=6*KNvV?v7c**9L@u%-=9<5R9@FW*$`5pwE1_g%Rd35^*m z7e%vvvr)ATP&Iw^K(G!bVmSc!Cv2X2<&5Ljw$2i>V$`VvR;TS)lUkK$lpXLpY{aV{ zBL}U-4hdSrK*mq^ksrKz>&&q$w@!_#ot0~vYanh0?4Wsc&PC7iugP@2zK2GuxVT5B_-6Rq=sFl~R;7|}8h~ao4 z5ht@|YY2TCy8a*=j0f?E7`5sS#&``ZQ_Phem-k0~&Z938!e} z6*W@`4U5rTzohG=lI{VsL({C5UyUl$+aEq2x8sjwQAed#A$DS`nB1Hdv(N#(7I8y6 zS|G9U_`?ssw-n_V^nXOR$Wzc;J;};;NV!ybsqz{eSH~f;3~ostk$rJtn1+}N*rt)o zN5U@PozAg5CMYrpl!VysgCQnzWHLts#3M2}S0{HAcEV(F48dpktXhebon)z6C>)P7 zZj106AnhAc+CK-yFQru5^M3(?;hzhcrmnI>Hj z?UTBQmH$m$#CIr*;Ny5w7Lmw-T@?De6%oVEZb8KOc@jR1!H%&820JS>B#`{Ddq)n@ zwxJK_-;l@2dHxlXuawo0X+G~nQv^1bVsA5GZmV&x?ctwHW)d{ z_QNOn@>E9KY$*Xx3Sa3LVMhuA3tk(Pw$*%3m|kWRg@-SO6=Ysu!uOg#jS-M(73!eG73M zQlNPCw17v1m@0_FAStCSqQWk;g-1;e4^;5n5K9IobC`+I!tL6T-R+|{BJU^SF>j%c;t8(9K-pP28&`zSm`&R5JqGh3`6iZ3^wy@88aATJYZ}v9O#bE4Xu68~n1Xsve6XWy zU`Fl6U{q788O!6r62gHEJB|-`L1&20!8pOyV*ND&Y?2Pha$P#k#@mH%inI)_g&}mQ zmxTrDCds<RG>0q?9anm1k7G-Ypz z`sG}{Let7ow+qggbb_!o@EzCpJn!A0y=bQwWx5vhDux%A^JJw5#k!u!Ufr+N`ZeNt zi&?e;LI&KBjX7z>HF!3ykyzFaJQHEwN}4XYjOoVGu5G0)csi{STh`H4$>}LgRO(FU zBA@6o{_nO|PBd!1IZbU)%IwNCiX#v|Q5>gH1fnO7l4HKfv@G#1O;e3Ij`<+M1hj~wvd4?c4vhy=1D`zX$y!?hm zN-q6S{L#Jb_(LXndar%`^>2CIFB=DZ|A5gd6**l?Qz-95X%TFu*Oh*u^lwYQh5MOV zQY=IZl^&vSCcz6(^ld8H%~-`o3pvBR<qE9=%KSg21mfvtB}0FR4}jJSBCKnjO0mR|q!@qhq!;s~zK;AF9RJ^??+^(tWCi+rI+%HT z=;+~kOPb8o!SuYGkuw!B`*d>AH(+6m(Mj3GY`(O}yoHeum?E$CuO*~xGN4lw$`WpGKliSjeq7;ntdW+8YNzQgU2IGZK4 zNCud%1LdSP$u~q79}i7ZrO;GvZ-UOyV29yG&8F~Zs{D84J6`+VBG{RjR$KG5=6tWF zk+NySP_pzYA}G9AWtxml%Wy5kgVY75+(sM5_e{)ZXn`4|gCMblsTnq*(lvE%FhAIC zI}k31>GA5(EV_C zWj=xNfjK)B|A$K403r)R5;BJOPEr=B}ve}yB9NdyLl$gr0k-^k;oOXk7->!IqYl?M> zbwPM(HIRS{?WT|RTU2$N$TtkB>GOUy03pnXvs12BbUxpl>*M}KyRsMu)8@Eat}ZR! zgo!q^0D0L&!i`(IRn`r9)jEvtd>Kiups7I|TNauUAiZ5bkeUf?k8PkkH<{dl=P(@2 z@TIpEn8xglC_C@$V(v|i_^rOC+0P$Bx9EOF4?Rc1kg&r6bf=UFgBe>v^iOymvxpci zQL-`Dq(z3=RMtpO=H%YnzWL3kHx7LBqaU3-{4jZZ?{V_@nKSLZZ<6*Gzo^#k{Bz$V zPm_|X=+3TK?bNY_EXR~KLZ`o*e%>Ztuf*SvmVVY#H8J6C!+eJy!;>0705m%a;j zepN*kdIY%?Sw8MTS0V?DqE^IRA%$AS1)^Qj6DlG_C|-R$5iQmnbF|H3!O_1%2X&}K za)!Xyje^+;A;fAIZK6KS(DEOoI21C>@C}_QH^BbH6EXWJz9M1dM6ogbS{9C(~3BP4zK4i9U{# z->ewIz`(4SaLW?ZsQYfrS+ZrPLJLzvNkvD3H%2{#s!?j2wk|b6d?GN&z~_Ml{wEi> zT}6dkODw(O2NW3|!9FDxBjCvyMbaE_TRf@w2H{Pe;JzOCwM;X?-P4ea8XaR9q|(}O zoe-Q{4IEXtsHeZz2h#fkdmn$-$GQ0!(((wmIKoDDdEcaP!9j*VKlm;HK%x zwqsYzrbTSMW;^9_qH+zx#NnVU>=4-uIaip$$Y~QV>4Ff3Vlbi11a~kDUN#Ln$Am>J zUlHi9BKsw?#wjRBMz_{Y+<^oa*_3)~^^mLE3!V#?aY5!YrrB`>Rv>OM3FPg!HzhJi zY9{UnBL}1>Ws4viC-HYGt(YQ|cAp~b0`Kquxd(BD4lP*n8D~159&ZeefQucwZk%=3yBV>( zENeLP*O}Q-DvUF_$m$J3uJI$VbRG-pS+|=t{I&+uPOH~-_JUy+ zzzhC@&^$62+&g^V@V$c{B}cB_yPA9gfB)|93XX`YLC!D2wZ<&2VYhTe=>w&oE`1C+ zB2vT;ihMfPJ^v6Yhv_uQn-sH~VQw;syN59U>1aH{&@!09ay-I?p@BN9&Rh+Hiu2hy zV7ny+7_pxh;piY4lxqnkuW=;_vT34xTQ&r@a*9(hMQScp=sUm}>h~8X5&7A25LEoF zttYn5fYr@(p}CI5Svy1<95t=cPSW%R_zt<*IlJh4qj#xOjgn@~vUn#66T{pJs;*S{ zhQVTbxX<>_{%&I}WHd~_m8N&YfDn!qlCyzrJC1EX`N9`|wDwz%30tMG0OPNPz7c6VRxuH1A0C9_q>Vj%IB4H!-anr4~Cu!>6X@{F$)L^x8%lD;dT|k~zW&G~U;p|oGd*AI1q2Fxw^KS*I#c?Q(o0K^A?KaKaHaz=c!i4m$|hOT zm#BrOi5zS3ezZ|OE;K&!mcFFO8>5vy>m%5@#|3~t7ZWlc53A~$vk?R+|1f=*ht&ae5={LWz8{6 z_a&9NUe))=N=|(Pp`or$^oLi-dcVJGnBez|a{RWX)L4}M{Xcnd&YZhb8ZryL6dKaA zq^T!CR@0ZPWkXhtjvdTZduwZv>v_ZF`Gp00VE&%vz7n*0rXMjnKlzhIepc(;XUU_` z_8n-q7(}poz*)2K3(fL@&c-Dh?FVna{;C^}PuqC>z%5rFx$MeKGVi8txp{Ems%zV? zUF-Q}uiQ8=f7MOZH_pxa_M7C_z^+R$Ut^>+=2W5e)dm@zis_)}3)Km~QePa#w(Os( z&7C=DI9tc&+*iJ(KJSF{4e2_iI&D^n}Z5Wih}0QvM-9&6a};xL%`M!z2losWDCE5CM%CB+Dd5321N*I_f-6y6U#9AbU%Rn#E9()aVHgpGFHB%aKh?(|? z3Hti^K%P0jGpbBOJhV}E2^NJb-lTM_86G}}zOQe|&1`24(e& zyMOcF&mUQ2d@8oNL~jFRNW4E$iUd`d=Cdnfk-!Pa;!uR#s*F*%;;@+}D$ZEVyMnYG zQ#Wm@v72C;x!E*IlR8Z{lJ4d{<^@^y)s>?|iaoU8t;YiLWwIfP666Lho?(ev|NLAp za5Lv=p$5YZnD3kCGrshv=Ych{xCb`EOqguO>2Uwd(W^-qClVZ%y62M*z*u9JVRIL{ z$@6v6y?AHytI+v#rb^tx!2<{T7#yS&jO{pwZ+wlC2IC^ZVa{#IeiY`zyoXkx1e=h$ z5*#XOQrDukCR{Ca4KQIG;Ne^gXmU;a!}xbSEMizh9p16v`det$-+Xd zddYy6F$c%wvUV>?1Xv9;&DyQ?IlS*0`1)qx$H+1R<21AoYYBF;N-(2SPZ09Ab1+41 z@Gq>uGpp314)b*rLwG1=dPcg?AG>Iib%jymOj$$72+mer<(7$bIk*?C9eBDMbQq}K zwkLG{{LqjB40HH`p3y{r;p9*coG6-tz2cfY*cQ@I)q@FY-SA6PE#qvHNN8n0DTh_` zAIxHoa3cOYp*1A$(713b!~uVklZ}dn%lqJ_cok$>Z*b*DFjM9KR0%{q+skmy5uHVK zCN#BI^f_{1X2W8%brgWhP7b_J{rmMh?jYLUYj6L?H_r0{e3pC&EZwx!_yN2CYDat= z4OLh=d0nN~EARapyjE(Tx&B2vM;^W9b9a*u^(uRx#&5_KmEO%yJn_gQdw>1<*FRiv zw4KKT?nnCmK>li^RhrIz$uAg=W9&VMuWwuU(pmgRKC=G_d5_`jedbGFT3EPF{lAFY zfP$nLAhujSYvvb8WMF2g6+=*f7&V5VzhdF>*YCQEXcr^7mUL0IuV^+Nu2%);&v^5< zlgVFPG;DtRU}JWQv*LT(#rd*gulUcvLt$FHCEd?f|Bq~u!T-DKv@T3i&YW0>(TtzbtTspf zPS=b%;-;0%W3ov+d%b-rhR^@wZyN6dh6}T+xwcYBR-w3L6b8iIC zqa2X#?=tqg%!zw%W`=xaC_o)pl)f1zEDZ4Lt;eIdXK`KgyD-=z*U`&vqm_9kUDcQ) znaL{F1G~5FMrRoNRAV_cJ~m$s>cRYQ{(AwIk8`1vfqnh}93d0=Zt1?#D@#wor!!Wy z`9TviW-Bvrhs((}S>sEjC%5R1CZ}k9z}V5cJvf$w$pABpFqg|-k${se@t*9>PeyCn z>>_^tBHk5n8Tq&W_{+cikH5V4A8vm4O*g&!7vFtTws`Q0Q=qt+uGzw4F2(c{xPEZ9 zb4A;A^%%6T9*HV5eth2Gq2U@Bj-l2?!24qJOp_|pAJ<^`nLL^Y+Y-LnFD=$Qup~rL zm=SSPIwBMqGsrEsz2dgpUh#s}leeE-T|K#$t<1F(`~8|B6~*Nhm=Hl)_kPs(C!vPi zIb`MkTva9$IQJm;jL55jXWjKQMOD3f{z6=Xw(n8baa>>^1qYdZ?n~rv$){lUBO^>n zQ-rY>;=TL%MA4FivYIB73k(co%VgaiA@{!h?O%R-Obwnc?RJmcamNude`>3`R$JVv znbd^u-hSV3joIBxH=1|6{tiNZervI|TH87`~&Y?a^id#?YAoY-5KQy=%-@kS4fUX~ydl&mD z#y-L?ekJ(AKk|%M@-9-3|5se^El^r(1@-uEqsCgVx3>4U8DkkceBqTpnsJWD#VdXS z+Teel`wV$f@sj1GL#1oMCw&wo%Da$xRT=)cP`H7RfL&a9V7O8M_Bq-~O*(a{qPW6^ zz#XRKN2Kf)L<1E$l~t~peIUX>W!{X7w6yC*u~U^M2TsP7Mdfb5x3kZnd`yf<(rfR# z1R5w_u*}8A{NkyT&fR{R7(`kd^QknGQ&}SH^s)AQK&63jT+ajBm~(mP-fDc*6e&jZ za;+1`l>}~E%ddFzV6a@RbSy5dCe;>yZ_U-&w=|lJCa!n+u{lb<-0Fimec$O(yzr!B z*k`Vq1IY!d*f5X0DKRt~tO>(*pjb;(ytJBTroT`hH2mq|sN2k%KNmLQ%yAe^+NMdk zZ3p@l1AFg#ybQy#gJ!LTJQ<&v!Re(ut>RL0<9phG9K5S%y znL2r|!K|^nS`iXqEU(AX?;bQO%TXb z1f8=CQ`v%BOCQg=v86LtYLz*s5%=qPv|^9Nvb$9o=G#3g`B*a+pL^uSdS}z8{Y%I9 zO_^Cs%UV4MyJ0q{l7HnjDnUTBBaRuz#uQ|YC(5$T1FdYhnB9+yyLFhT7OsC%>fLt> z^j|gD>~u$IbHTls&)6-+r8crd%_oXXvB>TQj^PM=@9uQAtbq$<*^Kf=?Ol_D^^*-# z+y^al-{qJ09(enE?z!(>Z+retFMI5U(H&cl?%j9x?0v%2v`c!u?g!uTBQJRBo%i4S z?$uXZfBNj;&Vx5Ty3d7F)WIq(Vm^)NqMOOty)@)+#MPN@K5ddI2B&u=rcc6snM`8J zC{Ufsz5ed35;s|APgmBvttjC14w07|i`{PJ5Hi(2|L|RME^c(|?OxqCHdbFF4jv?* zdiw(}ca(ad;grjQe<&L! z@Icj#oh$p;u$}GsuBknKn|+`boAvqCEA(2H@k_09e1Wwk!1;AH8GFGM4NOGt~^I z`HbhXKw{6Aww~EL(O{a-hRblApMREICi_nVqd&_LKtGhj{f>G5gO{B;eCY6Du~mPK zarR?VcKBZX(Hq-aOHJ$g+L489`N(dcd}C z9}QZqXl{6udG{mFsAsuU$4raSKR0Ce!)L$y{e#u`#3w#c-1nJ-^c~B~*DWnwG)`ry zhpZm^cy-K02VP%+SXHdM2^=X!w%#Il2kk6aY1p+YJ z#|BHCQGL+Kys!7bjF+S3@0V5O()JIj zt=wV5^Ndwc=V7Wy4Awv($f3-iRn_0(wYj?68`tdG_ENf>YddU|&RJm9YXcE(ZvLPe zf3&d_%G&aB+Bvx3t<9}1EQ1ZGla+mKdi3sMK(o2pDBn3yds8Zw)d%)CHMct z-7(B@e6!IXt54U7!ZH=KJ)`3CA_@}AdDe4Y52mq(D_n+YgQ2}OjF=CG1H1(Xoq{|P zP`o;T_r%mG*bAdoWL(4@5L1&X$1zer{(uGvGF<`X*S;OBfvb;0 zfj8e}+c)1p;4L|GiD6u=Cv{2n__NUCWm(Kt~r z39*^ajhibJZl)#FIJ_cQR?aUtiQRh~gRDK^xMwP*8NdE6*qoOtcI=a- z=YYRlB174m=Gcr`uRks-t@cjx7#v|_cu?E1G57|9VG+NAiYOmue8%cE9e4M`Ehh8G z?o;HK*r!y>x@hE=Ub8ZS31hM8JF ze_eTD&d@uQchco*{E*k&Xf`)OMo3v&dNrw)?Z8j<#m?MPzpp3NG^we!anF67d|c(3 zy{`1!(o?1PDIP(kp9`u$1(id>&_rya&jWUPfxJUv1H?fhg#p4m3by!xVlEKbq(Ern z772Xc_YmDS%nHr}v~g6FDK=nBMXeM&NXU1mJ}QpkRTe=-=wp-2GfmHW-JGX^GebOZ zPMo#s_7f{*aGIs*NK?zGh51K}q)wRUq;!FE-4~g|+{i1t!ZfDeWV~T3#9Bri`ZJuK z!YnzQMgdd!GDZWp%ZQK66Fq}-ey?V5xU1E$T+4DlJl@*K9ZF2Czv8-tMz##H&Q;s> ziqC};MvYFRJKe~@ts%{1F7)73JJsC^3hA_knLv5@4iu#JJj2xP8p@#m18T$WMgkDV zQU~u0&NFp_8YTpf7_C|S5lz=5+`otmbI*MP`s}AbPTY;`+yzoHM!x024xbJ)6`U%H zjd!|BCWEZWRi{_l2wFh8tSo1(RAFS7|D&&}nC*_~Di&Dweam zI|o8Tw;w(quS+k7u^W{JrOQiKDWpZ#%LV#7v;E~J(ZDSq54Q;JzhZjFw4lOJNxBE= z0Mjku@|ft!WH9ab=;gN@eeptP{(1L3`3q;Sed9HItCt`69V(+B@yxJNHH^??{MaLR z-}buytXG`KFgevU%kb<(C-uy+zH#c3hp#gD&W`=y71uvJy7g#&ssB|R8;!6$A6iN~ zv)=I|N3XeqfKIY>p{p#YkEbkpX5OA{(4h|$YpwGtbMC(FnI}+hkf=%t#4hh8gCPj1 z?wU3_L~wJoiL?T2n{0v-h!N_nWD;skwHAsT9kQF_mL*IrwSFrcH;aO_RiWDko$a&1 zc!a|y4?=1vUNPZiku_JpYzE87^859j@^VtqrlHVj7E-*TF57UK%hED%EG z$YVdi$soSNB5T-iQ^~7-eXjTKEaH3q!hIt$Sh;*Y&Kb8jGFx~JWR(9zvaXI?L7bFSUuxbMW8 zD@~Wbd`*NYW46(4*e{)?^H;1nt>xSzwJfQYO{Q%wYh3D^;mQNVwg_Juaq9e(&i%SW z+e_8?nch3^cX_3()G9sig6|d1wAlB*pBFOE&i{7vDW){K@H?7jAkHuP9bhc`#lNx4 z3s3FGzxdQsUwrDvKl$3%e)6?XJpHOyJ^d>3HsM}*$WNwoS*5NyRfpHA+1w=ccdm5B z$y1b`zUIOSH4Z0e^-4B3P5eVwI`W#+gq+%U>VEzyES>DW7K`8e53j=V^Zj#Oan0#j zVLQP;f45U7@dQ7e^wMf^w~~r4{2a;Eo|C0otrQ_IYa+8`o$S)gBjXlz8L!qC|oevXSX>m)($sSKBDrkPaP^aO^@D+$-fpn0_(GQp5}}?oD4luo}*<9ax(WS1)V3&cXDc!A_lG z1{^r<_kCb{pX%xrS>OA7SeF$Y55q2beMRqv^}RoZQda*uTs^RMK=lu~=1q8mhw)2U zQKv5Nm)r98%jNnrZZulOnqY-qj5RudmAe}6)eS?uHI8ZAOaB(gf)AIfAoH&TALEs! z*Oz{*^h?lBn1Be$jYb#3n7{x5`=r={?)7_ccL z6m>@i?GGXoWlLA(3&#Me@lKI*G~G{PGn+z_*?Wn=kRcQ}EEc5T8Z04!B5)@j(}PX^ z-Zotlp^!zv!AOjBt5rt&x>L7ZW>^VmdneFCn@HzcM26d;9ypdI6U$((U3c_8S+oyz z7W%uM8<|@RolV0o+oIA>7q-mE^>+IUokJOBZY@viQB;psQr}Pgw_!duqWe0jW@#-( zPFAP2B>c87mRgRhQImYQ=AFH+ng+VgRaOCA57O%RwnOI2J9)GS9#RZiS%!{n$j5)UU)r>o9R$3dNL37BFUob{UGHU^E?W1y`4`Vt#}bb9}7W&}?8z z!G=jAlau8ZW-o6o6K+Oyf8F>`$ZwLLD}m~thd#xOX}vXVonV5+HHv1ATO5;OaUPH1 zm9;>i7o?5hA(D)fIGVx?%KCYRy8!sx)P&q&qr3?o;@g;6GpQZ)R*o(4rOQ{lNIhni zbs1;SG$!XZ2@>6Cn2o;g*FrZj&A>8}T4sP+>y~$SEwCGG;6sKmGR0_yCP(Hyx230joWrMEGwRD zEIW2*do`~{oClZ9Z5YOMjjSO}Clh;rur`G=+x$jmEp1-6s`;C%)0pbD*5>fC9&=#K zRy2P!x)O9k?c8U{&w+*UO7b4^H2DJgPo+}UM-0bwo8+Uhifw|Q{S3s!0sn}4g;rR?=v!8VWE``b^rg$IlzACe-NHUC-R~t41MRAAN zH2A+uly}i2O6y}_Q6dt>YLM*1zlwmISrlqf6|BL|dD~%HL^G%-Oj^(|SyEi)QH0RM zo5jYwLjFosIubSE10~3!fS$Tbr~M*UyI@{NXpE|SK`k@NXWxy66S#p;A)p@FV9274 zCO%ksDj5tID+SF3e&Le-f5BZFg;|0brAYEM0#_?!hBRH9s&n82C`%JyDIx@(!%2bA6*?SwYY-uZcxt?f;-ZyOSB$O5 zDXU4afQco+7Nybwj zLHH{ANBs&LrUn!)Wltk&kWN~IrwO;0Ml`NJ|yMGU?Y*ZfFh22@bXOv&_?ro$`PzXq}) z8OSXNwy%ux9SXhN#;C9VmUhH!uz_TsNEIZf1 zKc$8Q`;QXj#>KDzs_EGAGQ-vswg8J7Gokq4ajO0|kXVR&gxd~BQe8#!D=}Fk?vEEd zzzpe_xWx#Iar0YqMZxw<3J{#?WJ4%!M(jOG99|3q)pSVnNL4CG6$gV62?V?xMG(xT zoq{uD9mPPi6KDe~5QdAydVbOuOzKgD)X1yE1qai~ z;A1s-q;K1L+&1{UhNDL?UxTyCP)Q*ST{HVJ> z*z{sCIs4fn!xS!={(v92+vbH^cYDZWHg(TqcC$io6_12aK=_{)2guupVB6WXJw?&C zkGVyXnAw%d49<7~2ApqzV8;iW{U2TQVCPeU$uQ}&lsoB-y5newsFyKGCv#t&**Egv-9pc89j5*&Cr{pqPM?o z+Mqfdgf5$I7%sG0A;ZXLwl8CZU0$xXFhi1s`GdHQsfG|zLM%`jmKQi0_5E?CF*1`( zR5J;)!{)MMf_-ZukEc#u+cWJX3S6D*QZBnnKq1X%Vu$6H1DYiWh=5^DOlH9ELZ=*p z6vedJiVTP_%W&dqzHT`n=d71S6(T8E;R+IDfi|!xt{p-heBYD?{9t_)#Ue;}GcbM~ z^Bg2CgPSPQxzH>Rbc0Z;hC7C^QRsqJ5V{xh`>0ZnsAoAUHPlF~(6)u*LY*fH*c7Jt z!Yn_+l~Af<8zMkTc95&kUf?-6T!NC(;Jpxttzu5l?n-HKKL~1;MnKOV_?8rre|~L8x`w@7k{#dSk{cN)yf5wA4Slp z!tfCc4~=2-dS%c{9YqgA_iZO^Xbc}R?UhR%SJ5D9C&a9YzIS%mAwrW*kS92x0t&88w>KEN&z%3#&13 zba*PT#?T{_apXCe3IO^OTHOS*1{;FeY8e?iLW9a$j=-LC1Cy0A$4UaDjuG2tGtx;~ z(TpH~>7e_TjdM^yF{b8u%R#c?x!ZnnAMoot)=smL7;2eUph3?xp zc9rc1!wDK+g_?uygX}$AvoY7T#wGGisu=^5!byZfioWoRT!K&~j2YL87)HuW7+wiX zB2vLojLbI-#;Fc&EqsG^GZi>BOo3VE;RL;~3&}-;ZZ`7J3)5$I_UxqMOa-_mysxbY z(=nZP)s(Kp%41xGkYJPG^v7-&y2jktlsfVe3*E2<+GeKo%isg^MpLt4*q6iD5-4zp zik5)cq0C4IW))0RH?pArE$K){;dQ?N=Y6_#KW0mfCfOwG7f3hog7#JYKJm+BT!8yi zmAi3Y&pm@(2kn!z2stQJ_Dn+*Y&5tiLNs;d-6w8eT3P5ES>tx2p3Tq6NhbsM*7h_l z$zq%;LDZ`yfv{}D=1c3FomCoS#Oa0}CgQ4YbXs7|;xrPZrBlBtw93NCgKwN}w^PQ3 z1UV~7NM3sh^ec?VA<;naLDvVXoo?HP!RpvHg-LH}7K~jm8FiDjvy9}_Z%{p(@3bnW zC9Kt@2{R<0tArKYmS6MSg}L?ZC?2hz=+*V^{Lac|Yjo!ZTIl98^3HWjONh-5vK-U7 zPbL1Ovd9P_a`hJ7I%M$vzV)HU?Ax5GbDRCxv4h7n4PM}bYPERJ*s+7ZcmMGd_nr92 z@zLn`h6ApTaY#b(8(SxB_|p@chyK!)edFTBQ~k z_Nn4LO)lIAEW2H@e{r!+{NB&M15b{_A(dud1E?m#OEa zHq9~`7>*>aOLY5R7_&op*7FjJq$#z({h2qs;WKX_M{ao67eBc0ve6B99eZ)|!7uIp z%G0mjgfb7mbj5gQ7I=xn%OHY(wOBv?#kb&HKigaX?JumIy8S@;y7Cvlc!v>&MqJiJ znVQ1!KtbE$gP48LW!$w-1%VM~nwG`?>J50qPHT8-@P*(0%Bf3FUAlMUt8Y2EJ&bmL z`wIse?OTo+L1ZOm!OJD9R6qAQ^5^7prJpE$p!8FvpDX?A(#K1`TKbLB=SyEI{l3Z= z1wY9e&qwe(L9kvXpsC?UeFO7uGL`+Q92MwnFgXdXNrJWAqPc95DJCDmBqR#Wg8}gS zClu=!O`7DXgsWnaV1ch~z z*&&>sz!~6HT9&3E?*M3XW_e9eMwOOqhFV>OMpQK_vI+)Hm0M|^1v#Zz7!%M!g6LNmK8G9W6UDscSu#)x)Zx#q(x7Pf0uS8k*mYxZXKbA3Qg| zV_Slh-#qKXzq6a5F68zd`Ev*LLmiz*U0-W>QJWwMi8&u@Mm4N6x2M$;C>!q3*P97j zSa4e9w%=r;k(52!l=cfPA%d0I=1d2n?s_{xZcy)PUbdXoi6y$EOjG@b3EgM+X}Mmu~L_r%nK*l>$%CddMdi>8<^ ziD9OsjX3G`r`_|Ry6Dtt2zbY|Pabk8sN71ut{hLY0{4Jh{%ms=hS49piaY^spt2r; z-?KSPuO?|bO?^gf2TZxZ9s?3O(Btw3=rrnGk9PX6lzs zPBy?Eq-B{k9oL9#BP+Z970X0_@o|!Qx@(Fz`zfBt+B>UrP>h{;U?49HBYF*^@Kq}f z=bFtd@h!$~cdLQL7vVed>V%gYj$`<)=9XjI%tsAM9=pN}O+QV*33-yWch}~OqCB1D z1Co(V%Dq&Wt}O5U&#aXuQl*kYa@qBcuMq7anE%$fKP8_aKV7nwRK^S@cb48! zdVlF@a8edarFrE(t7twLY<;AWFK`r1s*)^-B1kpwgVyeEF zDnB=ND=nCevUFa-S6m96)P>VfCG~eS%w4q!r@&WD7NhGYQ*D6kd6<1PFGw^L^QbJy ziZYR_n8Cq@3a~|Dq{)Saiz2QNvu*WYB%s(wc6)VWqE-X;9l$jr3%0nvfSER!=HnzD z?ojYfN1IT><`{z(!QY6>N;Sb)R&2uUD+b(O9I37E?LQ; zS~Aj+X^~hQTsiRTBJOd`tKqQ&2B8P$Bz2E3SZ3fRV2pz4rzOp7A+o8Fz-)LAkz&qSQ$=NIs!#`=rx-?8ONbd4KvQHt!}v)G#g>< zB{yt>LxyfRLg#9e&ao!9qUTV@wS?&gR`YgHVs8E)D@yrN?V2AZ`JJ%Hat@7DA=*l=hkd*EVv7h^Ituyu09VU)<6?&tL! z=lCNN{K+u$`~K^H>~=cc%Zn7BPafQ^R<{pUtDSDO+U->TTeo|p(;;?Y68z202XEQF zDvGY!zUAP}aeQf~bLs3=$x|2f_`{&bWhqp7=S!2>y~XH!sLxahK%^fEG9-XMPkH{A zneS)*^Zm?|wr=gt9a(QY@a`X3O|EOt9qOHY;WgL%IDF-08JuS6w)}j3{YdZ1`|rP! zT>Gs~Z|^I;LvxdpCm%YA*q;dO&|g$|tzM}#x1Xmk=@lf9<4lf`EWJsJo9EM%bn{8S zKl%9APQUC$*FE&m_UWY)Hy&TgJ8Q?kgrDb!zDCcUzW!0s-`!mhw;ozLu>}7Yk0sTE zrGl@s;2Uot*Di?vjb5QcaFX{h#1}De4E=<-z>5`YX4-g0yi4A5(#CYYdud9ZO9Gsojl*%&_CrbfVdeMosRER0>ZvwI_t|| z@t39UT7GDD9eIeT{MYBseFqA8Yblw<1eFl)q$p;)`4sJ3Jc1g}K2oifVx|mCY(G-q zD2aA@aT&NX#b?;Jxw`n%A8ef3YCPsGy6^WIi{1xi;(o`IAF7{f=w7V5_{o2L)*14z zic_RJJLQ27HnvW|Io|udg@*erkkezpx)M_MixacYlU`{;=8b!Em?+PHIABwVYdHsxlZbp zPOUas3WBA8e9AN*WTq|tC@~*0&4+ks{E-pz+wW`6&E4DM?FPB8+r7aLIwXqvQD>nu z9*4cTxf#b94v5#3*1&I3(Y0}ra1nDABZ;3J&ES<8Zoz}1*&*31z|#Zm(=T2XI)4Ts z94a4|{Ct1YY)HeC)uV?hl|x6XMq)b><;`%uxvCp;HOGvrnb6k`=w@Iw;GLDo1_}^GafWt29Sr3TLLu`a zfu$l!Q-pzJ8FVxvxsZqu{vZMjflj^gHbeeG>T}(y&CxoRr8ZKNQqZ6_xlb=03 z7g|d~E*pByG)|xH1=g|@E0(N+0^SB=JHW*jkkd#&(ThU*U80GgY#-XhO~uU}s~mt5 z`z{TmH#}6yvdTk`8}Cg6TxokBh00O%DAdNIpr>ESJ@b%h?qH^-SH4R4#;$4Z;v4eJ zT+fY*^RO$zTTC=ma07!iGT6_j{$}KUGKmGwn?+27#XHyCcijwK^j6Ix@O?fU<^t|u zip||!H9j-Y0sk-PfB9yY)U zD=-x<_y_}d9%wbN^FWrb6Pa8Hz)pgx3M2Ih*`P!_Dzq22^q~&_p8!uwW9+RH$+V}M z59&JkYhB;_{Wl7OzDeoof1s}=Zzy@CTB-Z&IC(PeNfm~lO+ig73O{-(s@0-@`Z~Un zxkEdLc6N3Sec|?E!9<~ zz>?O>6WI%pgm5|xNH85o!)cF1NDn9@f&^HsMFL4aeAk0FJ$K=uSKj=by`#tf(~YBR z_I`VG-L)s$WODktKYi=*0P-5ZdP?G4A@+xtpRKEIb8y!YX6jLBc_ z9V4IK`z>j-1jJr5j3jm)@;#N%*)(2rvXkU1dNJ2$pM77ld|> zlU{(~-GjECjFIj`s!SF`@WzXL39+0Dfw#D6cl4q!AL8AjH(dsXpw6E|3l1In6U?Dq|^dOSnh)+Sh{bF`ir{5 znvbk3XUIsp?MwP1vhv5(YWWv_Aq?*X=Qd7kqr;>w(OkSVg-S=p=G9p?WOl^tdKgmE zf=9H3miMT;pmNjV(rvp#Eyw2E-2(UE>hcLUv804SN^J8ATNC$y3&4GYYaFVNyAb!1 zi}(x1nBSOSyTZ&xsE}H?!ZD~8sfLKw>Y^`%DH9Z~^!&JGeFf+0b;&Cli{*PNX3Y65 z4?Q$|;R|p7xEWl(wzbOH+Q#b1>Q&E)+R@%u8jFjKjPzE!S50@1l8-Dl{!*Va;#J3K zMZ;m#3YyKzdatp*I@g`R`HKxQYAo)3BkZ(Kl)Q8Q1mpUjU|io*dQa)YWRARu{8#c< z@c>YqELh0Mccnf+#n>B4qY`jJX8Yq@x+!8KKbg8oatTCvj zvWSKo2*tuCSF8IHV>Nmh1UwW4t#z>kh%p)HyOaN-QNh5Gl&`zv_9K^)ST2wTqqboS z%SWgQ@mn39RTT(B*BaDb9Ww_!n7SyZtk>aza7@o2)OI5aW7Mby&uqLX)@}Gqlekyo z(ySd;WAxYwOmUdCwuz+6Qf55R7BJZ_Q*1JOe_>IFnAEaCo4Xb>aZeB2Mq67<*Q+iG zbQYp8tLQY7M54kpz>UVckhbOUi# zRD_cIZp2N^fk{VV#5FakNdgNzW()ji3JRGX*kWe0Hs@v=(g9cIfa7x!fnwIeuu;$Z znU`4}4XiM3Mk@s2FRwKm({|h%Df>a_E;=0ZHn`k&(bBMt^&o6d5(ciay;7D<&WuzO zR#D-oZ8%UJfg4rCw>%@I=82UmlxsGdf!`690iqNaK1gIFlw&@G<^FP=vB>)eX(0g1 z7P^5?+Y0O#B;6N&u$;O z6>gla_7rAK<2((GfD@zNaD|XI{7RXW)76^C9H~=K7%^@ao4DmEG$duhbsiH8{J z8)oTS9L+Lplbeo3m~LC9ug6xPn?ycpXsL%Qb9t@u78We*%EqNN@$`(&lc366gdZ2tdQNHUZPUUUND3nY8Qe4dXa8k0VTtIJl$B9Py}T%v-kS zZwxKnbSggQi7j#0Rr5^3q>D^zFeCRPp^?2`61ZIVuanJhx}G?0#f}R$x_~;`W;I|4m$OVoQ6;aURRu1PRhMN8^g7>he7EL`%GQIvIP}!2Na(#bR`42x;`ZlSMTggw8Z&613 z^a}d-&`DL+VXJHtY+!{5Q_In^x5md9lB9CDq1Favya6tJvav%pp>J?kS#i(g1^P(& zQ3zp@O9b;8ZIPJ<>-PFnMG&_UZ#JpwEhttg+d;CCVtO>Nf$M>5XoXc<}^O2Nvhz>gS7L`5HZNX&BEfJxVl)fyL`hJ1+Fv|u#<*&l+k zG46kWvh>ga7(~qavM`?WoR-dPhqT*7Cu=F8zfOf?8@fv|G!pLTia}mV%xH zTfxw|0FBKejVt8}%01Bx)KpwSoCpaRU6%V>B?_K{fNPFR^5AU1X%w?H5|wldtiiOP z>_e0Wy&wN}ur?ST4kvj9WX(q8xPpyoT_jmXXBwzCi$0&g zP_mfEI8vq?HW)^n-AILiDgTFv=KI_$p^;wwqo5_Xwu#eg*Kt|r&uWZ{M_7DdYJ;%W z{^GzCZgDL%k3k$0I=CjVGgU~fbJSMb-?A1dV#W%L6H6iFtArf80$TIvp})|2*wuOS z^m_@r^a>%aJaXk!wWutrcmi!Q9an@nD@(P8X2y60XZ(tntfd0Rp-j`_xy^b6g-}2wy`0JKA7sj||4u z@P&x7gol+>OC1yMfM0`cDD;+aUxFofbOezhgFZ4<)?@f=3yRTvS6Ow~qI~a*+Wp`* z=m;G{WMhlcmZlN2PswoW)0l|Os^E;MdSy_be2!^-0oF@Re9_b8y)cC(LB0%{`NAwE zV7uH(A1D1%x0IJ|D?MEL(bDTn?=SsX=`TwENHTcNZE_{Kh1^9RByT3~BOfDQ1%F>9 z7mBm~Gza@-m!vVchf{PBkxXHVPVXd^lN=;qo=!muimccpUW3x$(pVvUF-OFy zC;L70gvT2bTnEU&uu~=kU!pyz%n<%#)l@X}4pLxXfS%l9I~-ZK)+n5oB}nrCCn6n& z#O=9)2?y&x>32n%Cz<*lAv8n8f2+hjG?@%VG8MQc3R(rNiezJp?ocST3wmxSaldW< zT6pAfK4Ywz z@rXi`DHx%qrZv|JxU8n>x#d`ff+NDYMq1Sx~|vs_4U2K=ip)mn$FNe zMk%c31!5X47`NP2%7hklwFS~p?Gl4Wjgdi2p(Ht!3+^0@R~WUt3b$WE!H+xE3dV~& z0ejyv!I{uBL%Mcm=$54)aI;Hb$YXr7E_H?>K7uK>S1>8TDJS=CyVpy3!X3@KpY_X* z5O&2+8$vdc$n|=jccomCE2|jpv~)rzvQv>5k0NmE-tu}NTOy4q)ub@Jf1b;fu27jv z*`kZ=VK1OO^rR7?2crU9z*!ZF@lmJp_YqM5P2(eEP~nx4dI1TeLks49SivU+4;!R~ zP#ACxtXKsYMQVtBL61+4j|bBo8^`rPjq6CSQ{Y+kG9T8`O{!m`)2l_Nt=%J;ZYZ=O zH$gaJM2^LZ`g1C|=Af~S-GV%nRHCWPaVwl_g@vIo=1gfu1vP~}X9_$Usv!WzJ4m_* zF+;R1R1J-`*Dx&CFDKaQOjT@~6etLVD)$rPq@H-mwiPBxXeEtCa!non8IfT`M`XV* zZxja46f>^?=Mx+_xHQ*z7uR_tHpR8ZjdBHyALD9+=laqE#J4rg@eMuT*kO1x4q%G3gdLZU=}4DF_RY)JCn;W>Z{F2V3)D`+wKd>zT_IYXI52KWmfLhUES5)>Q--3w_5ws0xf_9LJ}Z^B#Z=&BoN4kW3dd2 z$F^+nE_*y<4+hR*Mi}e?+u|@j7-P?1;pGgB$H#*`17l-TJ@5U6%OkZ_KH!Xc=^Ot4O&bJz_>?ds)O6dzn8(na|7zWwcQ zlb?noM)5v4Aa^69BvVT^)NVHuDnrM&oCN@E1g`!#O-3_(8<_SOz68p~ z3x{-shv?#bJA4J6xCBi5Vm2Uo#c#8_0QWN^IZwzKckLlgajA&0Cx=iKDtGwR-gMUE zu$qfTrWgWPOaP8_QDaO@U8I}ft7CRA&MDxG4NvhkF4nq&KM8LJz(44sr#M9-7&Ur) z6C(_8Gxfmb9a6lVdeA?R#j}U=5t-ac=My~Y4l-b8G73@7ax5e+w1SXFj8r_yr4rK_ zBF1L-znG?BmYAJma5I_VUH~`pXA~`Jy1MsaB-NJaW>=MT|!Pik$2OtoP z=7_>nO=xb3;#Mq024n6ZmUA#5jsZHEd*EPbv=Cz<31zv9jh?V5c>xfT5R|z>%ZR8; zk*gZ=?PBOt2xlQxzR7G3umW6R_vGcBqetQYZUR(#=1N<-et`-&^*Wv2BqF%^A z$U!qo5@_pKlmanbTm?kI(1dbclcoxOBOOqemIpQwGTugtP%i;+h)v)jnxv{J zGG#Q4u0b1sZ(!=W4p<+)i-Wz*1mY4sogcDVPfKJ;PFZtH7G z6~1%9t{K}_P_|Xh!vaoq5F=|8wU_tp8;r2>F6gE*nc{rB_M!NRLYIkUk=PLi%m#_oP3U{=4)&)NvtKf?xeM@)zVE zp`+MzLJwl@piqRwa-PNB8qfV-Z~~Do3zK7V!7)+DJD>1zu33Oi;v`>>_a1wgqtOI= z`Vz?l6f8ix^%yyCmoM|EPn(BwMFbei^PO8SzM)Uj7tey5=ntIb#n&e3p2XU}aORxS zJzng6(3iYV9Fb4*;+)ALf?57(F_3c^Py>bw(DbH`jOJ=FkTKs>BzcNTXWWQ1TS!xe zA%zY~d$Lhp7Y@!nIM$e_N9IDH7t2gAVL?#;q6Hr05IKLPE5HrX)#Ugsf=Ai~_x5>nZAMn>Ki_)`szNLbje-2Ze8MTB45iwzuwRGiLWDaAj$Qb_zN>lL{g0=EayDo8EGmZyB8^$!z z-Z`!ZM*LRTE@FWN1Ae}UA4-+sn+s7L#ju}!VEv}`i61J+PSTESF zQyJBcED8m$-n?znU$c!+=1FliRg{%e6VnNH{~gZh;!wKQPs@suMCDQ(4Q{9wNHW`>{wFLm6tj?RzLf<446py%u<2d1Tjbw^bbmX3p=ypoNRUU~1vlRPZWPURcva zb0ugZLNQtES@PbCf5RE)*tE;XIWrt*#c?b{Rokj69OVGb!2t}5%cy)Dg#{+3;B##= z$I?w*jmz8MFIh6%me;CdS)S(%Ni!U}4~x(MjOw&}2#>qsOxu>#Hj8CS%4K{VWwA|e zRvV7thz+S`W|QSddb_{5IrPr=D<_XL{m@|(ZCp7~l%V7&vf`ZGk$E0pXU-ktZZF_agd|5TyJRJdLyXJLeOr%3|1 zp^6lSM(R?zRKwZIN}1^~w4&mNZhvFLiy}gjSYxFsn8>UQyH(*5Rg17!j0Nw(EoACA zQ$oh3IVRUGzmY@o6`~eI(;O0rOf=9dmlp!OYkKi{0C7Jf^7=jSh#G05+3R4=A@Y8= z02FR-@BU@oAz$>v)!mCX)ZByLy#K_Vl{?Dy6XejKz|pY#~HU6p_-}TYZL`q@io4w#G3}(DN{f;w452H+V3i=xl)GCzObpH?GI$d z^zXb?VRkEmyZ;S$8V;uT*-UvESL~yPOpW>hs&MU5xB;zmCpC+w4;f&rcgl)E?E~Ca zIEwRlFX5TY*#XN^OVlSJm-x|T#N&GD77_KBfj5K6ORbpqW-e*LdOX1j40x&4TTEu1 z84QbYtJjHp;Cw84GNv8R7Bv#L;Bk^JV)T1jGmcMqZ-S*6y%b|PlbAGXmp@S7Xf3uj zOfxVqY;9e*>GJv|TNe!D!tSTe)z5o3kxKn0_omt_H|l48v~l^D&(`2sy?*(yw(gO6adF17_Gk4c&cR#Qt-u{cm1{~EmQ{RXe8-}@2I9ogKo*$g8!?L#f z`TFH2;E1ohqJEQi{yePRRlj>!-}t~{alte%tkti8Q;Yn9i{HEWIjWM+Knop5pM9~T zIhPyhaj$O^(0PK5*#z&BX+6v$1TecG_!B z!-iAvZOysM!Qys15c`Zq`vBQZaG%0tb${H9eWKfUIc=sTr9rVkqC%-4Tk3rXT2(Xj zB1Vj;96Q=28abZtRE*L>365|doK3X~QNa9KmDu_b4ZauZgT9Ymkp5Qmfn3$9FAb%s zv?chbPv+GW6W+lf`UGwwoRvm7I(Vkwb)Jh&aId0+NjY?a$$SJ0>@Aq}DjxB@d;)e8 zfW+c&lkH^pkFR4_{pzu#^~%)=j1C4P$9GnCcF(Z$UsCw%<2S_~cQ$lDxa_&J%J<+6 zA5(5Rb?S`HuKM2o-jA>BPfAcHTSjAeHkyx7NppvcGP0@i%_QDL zjlF*+H<0VDKXQVSIys3nQFjV&@X||3?Z?Q~*O41v_TT~XR)8jiyowYG^n-+)JzGf0 z9h>Aw$e~AaJuIB>sf!jq1b5g~(#v5aNl}w^*2={#Fwp5>p2I>2n~SVe)UOu&W|Mpa z+%?K%K#;`|*Rtq7^pN z!15Yir)6koKDk;d#2z?vMfdWNS19yDa%sI*n`G;iX6+YN2K)A{H?!%uTAfU={gaCq zq5VG#?Qco}^f=7eUWGn4gHh)Q^tdz9)zZ79_edX*J}N!Etd{60vn5L>ij8s#snuCCZtQOJ2p~2oaq| z-DZa(`x~ZLBhw}Zc`<_X!%r4rN+)s-&S$XY@lQWS9(&m@r!_*JlotRN$im&dsA(Ez zCIc?WRHeoFOl3_)9Vv2KW&>I75qUuAR2|6+dCTp~Wcx5vPtxzZw(T~xe#!wy=!QZ1 zJ8Pb8dktA_q$ts6s*XCi;u2lcWlvMfSXu?hM$zYr(o&R71*aniOkR=4b52$Px4>b^ z(~p1Zv3l|=H*%URPbT|1&Ok>eGC?R_oS-U4crke0u!Wqx6S7Yw%T6$HlDj!%rot=97Y zS734cIQ)-Ed{KfYCvY8?`O5L7#@3$3AF}24pkE%5PW><~LE%C)`M>a}V7$A@MFE*3 zpul43mXUX*jYhir>$v=@EW1qnoz60Hlu^bFw)u%MGdQg8f9?QmeR^+SaxQIL^##ZI zf~$Sab-(5&VtwPCuKP~+f5AIcwz|qxJOFu**tn--vG;vS;0gc#-(%X{Bk51a(19^b zyO<9EE5qP1!I2(^AwCglMGF|#bDb_(9L`Hw z)6$O_^~f#-jWc>ZCC!1WZItw4j5IfztjIhdPwyRp-0K(a^KIKVJ=yvClxM_JXT@#+ z2xFyvMaE=Dd$j#BGfli={mwR%Bg2wQPSN!=X{k;4Ecv#m%ZV`~K61$+ipl91rv)^) z=yCGbs(K3G=QEYBs_L1a>;CeWFTecqFR7k-8X)O2)jxtY-1;zVMLa1P^ilFgz(H5x z@h~A!gupSdjs$6OqW0A8VwOKo@F@~5pe`6DXlL>S69X~#2`i|Dl=ZSul1%6uJnA^D zT7giWj`|xTk3=iI-bx&d`s<^Rc&qJ7MK+6-nr8&FS#dS0x=s>;`Jc@K6U_JSUsao( z5-D};EP6|@Z8@4ziF|J}3B6z)Zu;60a4qU&BlLrKNJ(>Bk=HjcEn&R5aUChviXOK3 zbsL*wa4}ZWQm0dLDwvDlT-=3r{0RAN>2B$M>0#-2r9UJ^Fm`KX4p8PYay@wkxd++< z`6bk)_ACPHB|{ptz#%dfiat0sw)~x^NQs8aF%r0qp+QnHhlZKxDHdan(Y)a<<8+Q8 z>iic^k&(DJ&%^O5-coQc$#_3uEFhB?7-Ob#<}1xsbGGR6E+({3k>^aT z;r~pO=w zh?{d!AJ4_-6oqFhQrC5p{0qPtd(-^v8Ci(xV4U0>&r>mVA!cm^=W5=w$o+0ChX9c} zPPtfVlXj(8u{+Elp&Yx+2^^QgFEM3<0mj!YHDs3NVn(w{z{R4bsV0V=aH3nf%!$TS z=4hr8V!i;3y@qTOafGA*_gW{l`osMlwK{046&V~0Z}s4@lI$lQj@A+QC=t9rVmdK3 z4bG~`7S*8_Q|_v|4=#&ARNIgh-C(kzQrV&Hu$dJKRnmTs65;TlR^;NbgR8FW>XbO( z?;A1$uNuYfZ&G_)jZS%wp9vgYbvGdkl~t5n-^tXC>} zEVru_Egp9aHL3eL)0t)HnB!xZngiyIYM8x-Dfot6tJyd;A&T(9A;WBUXi-ClGw6l| zZ?#)>nl>FqJH3~u!@gY@u92Ei%y=Vel}#6!vSg9S2H@VngaM7f6##3jtAuC~W`@XMhKZq} zATgf7r9|U|FoQBxE~?$Ov(otli#p(3o2%`+wKdOoxzY<$`$to|KPcG!zb@&zNrUmpB5+i$mm)86 zl^7vX@5oC96_mug?y6W;eJ{Dh(qcoeX{l98*5;=kQ5O9JuRqM0M5)wP_Z1DDC{{6Cy>WYcr8E%e&GSsI~0VFJidqlYgDVm2%~ zcE8Z;75cXKMeqxXDYrWvHegrv)8UwgC2hbuQAZvR)Bc`x!l9&uN3ov^ZQaquLLOIF z$}cakRL4&LLpC0ylw8`LlHo8~O&upvUPY#DEs33UHQq!&mcjk>F!@=ylX~E{9S5K7 zwct&IbLxnWJpt1?2jdJl8L;3$n>A*r<|%k0b`&u`fT`tiYk|x_I9Cn66L?`UbV46idHJ!`D(|Mzq!KJzwU#T@?ta6 zEz^k17ywe{e@$g>zwx%xN~M+rZdgpJ&9|$n(rZpy+NHN(l2suLQq-1rs*zuH2wV`O z;MXEQbEvPodXi)CvQ(!Xa;q2)g>S6Jq#jWB2dK z?;hK|k-SeKilGpdg;jFpJ5PQ|5Pl;)vk31CQg24JV5S(JT@Ba0?~=mH{1)cPB0J{K z?mqidl=9FEu@)t%yx?Et{r*bnM)26B4o1Q9+85WYcHWrxaaD5$2zoTkkmIF(^ zS=>CAP}fXqU>xcJ9z%7(Xj2s{4Ou0mn!(|YB$kHNb50>LqG3tnO+e>dXLm9`;y95E zfQGAr!iP}HkS%cA8RuTboHeLk&}^&*&`FBrQ99;tmU?Dn!WWJltLy<9@uUABMuXkY z7&Zw3G$za086DP3WpBeV0hwXWovqUtzGxU1nj@={II_=e1K^lq`3@txiPufO_&oWH z$i*9>YEoXaEBKyv1d^9qO=rn}FUp&`g4zoPs>LRz{4Du6a>ZqMg?*!=S*@&)==|5q zk&#`igB7<_Q`4b)0{Xa1cZP7(bwgiWjhZp7WS6{B*MjZQV&A^SXge_P3feW-DF)q@ z%Lbhd&xyiz`yq2&JpFT_m2fO^vQ$qde^TgdD{Qj0zPjx-2S+=nemV^4_}tFUxpDoE zI&B(OFTECX)|R<@zbze-PKYS>Pe?y6{hIV!7)k166pK?3wddT%7{FcZi9VwoH1;2) zxk~d&pPa@y5$*_<=A$VTngFn~x=8ZGK0eRuaD?d{(AIb_Ly$)zOG}MK|L-jiCI~o_ z@s2ve^679uIriu|c5aSY*CJ>zUUXCP**LS*;#+E+UI9~A%GLUmac|o40S@Thgk4`` zPG^fIp5u~&>4iz9Fofn9y_8Mrqdg6)6_L2m?u^()Y{CeYN~B=(mu(x zSdL>_bpX?={dV`a{>-ivV%|~urIV2?v&t}LaB-^|bG=%3d%SJ{s-@il7}NbFo6@Ab zqXft5+-Z;eHOsz>T9#I=_Fq$yWjBbdj}b2j!$A8?eYV=`1)2>mL*%BqlK8$?mgVS* zTc~>aifWBIb?77e_xFR|8K!yepera}g}#9i5=TucL=UnsRV+d$B>eGm&meXXr7viS ziCBpx6>~M^j!<)*Vb4d69ic<#(B|T$5tIgu+|%9+nau}spZNRbIcnO@N!tu{<;pAF zh|}?9mw6%6VL17N_1f-NYwPPZvQ}HacLaW%R|(%14$`vaYC4;}%MDd>rS2KWPFjv` zx|}`!;{NM@zt14v3R6Sd)c|M0_wsU0`frfmgwGvIebiv=2=UA=av0S}&T0gYJ(Se` zf48Tdy{Cd1i9GW=vL^oy=R?NX6R`ROJPtYh{E+RtA9`UkJ{-M`(%TqI2{}sXQ9@Go z4kq7D>FqKm5g!$s&&%?8Lh>cFcMM4Ne~=3z3XHL~z33D+x!;IUM|&c}rq&D>({3w; z{~25a@@!Bn1|R(3?uC9a=$AW(cW&q(T7UNS=WctFTqp*+Uk!?VvUd1zP~3gCQ~u!f zJL`vDd+zmp^6uM~HtTuvcJeX6{|`xzVr61$O$FG(TZ>o)b5&8ot|(i}gT8>+MmRgL zIZ!dJx4UG!oz55g8C+^XYd96zu7HZinJTCg9F72gA?o4AVENumQa!Y6j+H+!@ZSUW z`wFvJwN>!G_1Fl@Y8vXAZCZe6WG%9^+B^z%gMizbI-ag$SpWrhuo%~sBgEyt?r0h@ z7}#dh@qOPlnH;Q~l$l<`a+eiy0B68ohY4p2)3|L#yPvC!ND+?CHOnrCT3A4XsBpvK zRh|M0@sm4d;TNz zzf~A(-z+_WY*ffzNS49#nV>^kGUY6v;PyQ1E;#cOEL&M1K`B@30w|y+(^zdHIVs8H z3AAyth)~pEN1lQqQAM5!xRV0}(Y-k8HAgcJ_ua|*hhKArH>&w@R$Z++fL&7uR7Sc`Q6}{*383 z&Rg!tnCn-ITIe-{Rn1Fm%uwqTZM)b(`)$~PrL6`{FGOu$SvK_HszZtd{?rP}KT7V! zf4=xUy&(Kq7e=dN(w)%m@0b3q^ru845qJ`($!joDw`k4BSjCwWgUrVqAU0S!XnOEN zp*!~kIixzEV4AQ-RRrnObe>TKrDx_?=DInbAm_hOWXO-?l4yiTtI4BLG)j}vCOVC9 zlXfwbg&{C3#UWUii7{_Lx3k64_s=tQX1ys+cEON3+r*kARM5r`h!b3CZ*xAv6ACA3 zdCKXi8S`k8;2{M$<_vBtEXHo(_HDA1YT%pdNSz3}>ILkRijyvrg1UV6;^#rN+&Px; zE@qqQ5N_BeoO=WVAq?d6mMGfAH;tAbdozFf(vLkmKnG-;w*Ik13Qr;z1<}~wsjdsS z?mMqKY;@-}qqVxR($re}YkCDtW46^i*l7+m&v9(i&{^x!t>*Xt!FPy{92i8e2S~q; z`K)eSchDDQfFjkz<#tgfW}6rQ=gAf~9VEu^Y%C1XG_M2qcryuX4dthBlck%!V*q}H z^>f5h2L_N=o)pd>fmIhiX#%xIQ>0`9{nXctK7_mFhZ0@z^`6xql67{W@IT;qgg(@h%=@meV_j`r>M zvz>8$)S^t)bQ3_G(K>X@0=SF}>>T`W)v*AQBN2s0_(4&61Rp|2N>5$EoX;i?#?whB{sA6GE?syrGSLCNKkf20 zKu3IYAPeS$OcC;4Lf}f|-Q)b#9IyjAY&6aN0vyfZW!_ZNNKngBB%PTh;LgL=2%&Os zN10&7H<;0nZIBZ69B5Y%o{yegA5j+!5Yo6B$qbbihDFqPc!qAJ`Q z7W8dU46p3E^27H~Tr7n!kr=@eKyNR<%i3qB#$vw1&qXAiZ zR)`{C^i5>s?#)F89o7Oz0i6J>d=%`J>Rc>&cP?mk5oHQC{$`ha*WB4LYUMa1G$|Aq z$zocnYKJe%>%*MGES;aJ@{y;SUg`W zl|Dc%hsy0@vBl(~tPED_lkXnBFDq_TBNA81S}_^f)u=djH%|3#-Th}hTTKR6?{v;= zn`>F!+lYKUA(dZkI8MX1#c~ypt>%}(e)*PaB`c(pgD$tLRH%opV6*Uo9$ zEul!~b^v2x!2u0#(X?~dAW5yM#T#oC${t7v-Ms<;m&>mtXJA-z$h}^-M@*FHAe<*f zldPl-RXHW1;pR8E3C=e$PpV4eUcywaAh|D=HwHfjgP`j?_xrA+GkN!au62=%%qHc! zL@r(gtd6-4{pBpBfaFt@%T7=-8hyTbw>L}C?e6j({$m0g`J|?OPEYmEYuXcIMR(Do zuNamb49#H_R!d`^MUxf1pnU~)`kbbH9vIJ5PrSR>8UP3^Z*9YR{~N}%xpY)I z3w`J|>0aqUXxjfLA2ou2(BY1Pc&F}UcIq5Y8 zr&*UzM36}YaiMvTPYWAEOk{$0PyVzRK78x_k3W9@tq(`V@ZRh0dei8ZqrG;vQJ8MH zr%rp>dO8~fmC(5I)vsiXx2s{l(D2_^tb(m)KYsq|lV{#^*QK}5>8RaHH)?|^sg(+i!bUcn8et_E$(R4B z*6uXbvfn5iyP1_cu_i}_s{7uG)@o^$2~XQ)rX}slkC&BdtLv!8+FjdBQ`3$U=n)*o zuYH1JxGZ&~nREanmwPq?YaHoJP+nq)1g^i_;XSzSixmDAE$9N-9x);Bjd70n5E-NY zEa*!Y&wT6SAOF_JKX*gbuljK-M&zP&2JbvWy1H90bu_b`+!w!kc5{+e;AK_uZmDrz zD>?)4c66}VsS{h|>Bm0(*khmm3vz(P^&o0RfZJQ$-LHSL)48eDy6F?wJa?7WE5xmc z9DFD%?|TISv=MGf7`x`ut?=C%;OCcNd_Eu@hw)hoF{eu8VZmQ#oXIJ;`ryUQQlSry zDMJ~>cmNej;)3D47f&{!uR!nO^91Lwcq{gYYpWaffR#2X$~tK=yIzb)Sg9Ds=8$sF zG76^kx6BNMkoaIqdEme>asWjYHJQ;MiNQqHA9&!|GiT17dzP9(uT)+E^Y-lfscOV_ zRHC#()M~eEsn0Ui0T<8l1XzVF=q?j)@ zUTTUXd=t~*0*u6@x7z1^t1!G(SnglQT)-2S2C&2Y!02EyZC^>)dc!P~ypR5-FtcC# z@|V8}yJ(hJd~;{5G^l@hnVXT1c?VF3h6shTD9;~gAs0+*nJqb+3QC|C1U9i;Z!+G- zj+5tFqD2rvw&j$)s0!%zM7&MJ)kG#Ha_FE=C(Q_X7Tm|Oow;27f~L5cU3R#lpvR}- z1a)G{%1d84PQk$jm)hChUkVMR#kl;YR?}h)vwE7C{M-~q>TW2xfTpnJ1pjG0HjnJ`Pu^Ey`cXleRrU+Ck zwrD$5T*psAU%gt~e{commY}ws=G6N$xck6E5q{X7=H9YdmvnyfLu59Z4#`qB5M@N6 zD=)D8@gvVYRU90=eC5uk$h)z=3M{1jOcb0$E)B{s49!Y)i{o9!O0IG-*=Nl~o zkjudUmIeTSf(^s~c${NkWME)C@c#e<15?BQcmF>!wK4!jkOAWv0J+=f1n9 zp5m?Uk73U>rY9T^sa*@Z?d6-u`k?oOtOuxJ=0c1THy5AJIa`SvxrQpS5wCCI{R_E^ z{qKwTh8DSwRO6GPzFPIn{pf6*tL^<+r#pAWechW_H;R+KMX|iJn2cwjC3J=TDSQsH zc6tu}k(~RN5S6`nrFBf9uXH`a-bn8n`YvauB`!wUYrEWvE6au0P2z~%XFY`WMJ(^X z$@AzCiN*yUr4dM7hOX~t50@we5rZ zwhNzkjrMa_yt6H2-{B+mBwpG4EW{QJ;~)2hv5WWTv*Vd>W`FDdE2Q5yz{c)TF7@~l z&o7rXC&nK74pus{;gq( zSvcYBqQtp}UqdUNNB(DUtmH}O?lsps_a_wd-zxSWWk%$m1piWesoo*-UMoii#aky> zFO9>}U&?*uI-VC?;679$Hist~Jplh4D~A9800000000000J;G(0f+&@0q_De0<;41 z1C#^O1P}zY2IvPK2Q&w$2iOQM2z&^b2@VNl3Ni|e3iu073xW&K43rGq4G0a+4mJ*| z4)_l+4{8tI5CRY?5K0id5d0A|5rPq_5#ADV5~dQ!67~}^6Mz%K6W|mg75Wxn7S0zc z7j_q@7!Vk$7~UCF8H5?u8d4h08vGk38&Vt499kTx9PAxB9e5qs9`GM8Hx4&uH`F)&I6gRDI`}(6JHR|lJf1xMJt{q7 zJ<2{VKA1k*KS)4iK(0ZGLB>KRLUuzwL(W6uL?A>uM5sk1MXE*aMi54nM+!$WN3ci= zNJ>a-NS;XMNkU1EN*qd@O9)GZOcqS4O+-zGP9jcpPn=KUP&iQVQ9M!LQWR1yQ#Mnm zR3uciRX$aCRlZi}S5#NPSUOo8Sx8yBS{_?UTfST_T@GDnU9?^VUlw0rU-DpVV8UTk zVZ>r8VrXKtV&-G2WPW6-WY%XQXQXHlXijL>X#Qy+X?|(&YG!JPYt(EAY%FYyY`|?Q zZw_x#a0YNXaH??(aVl|Eal&+jb<}nUcDi=>cT{)Gcqn@0dv1Had>(w%eIR{Qeg=M= ze*k|df69OafOLS6fV_bAfg*vrf=YsbgKmUmgxrO6g_4EhhEj*Nh!luuh~SAPiJpoc zie!rPizJJji~@`(j82TujV6tXjp&aOk7AHYkaUo+kkFBMk{Xk+lpd87m1LF`mJrDmm^r#h(C zsO+g6sZOb!skW+Os~)RdtKO`@tt72xt;nu4u86L>uMV$bue`7lu&%L8v81v3vWT-{ zv*xr=wA!_Hwh*>Fw&1tixPZG7zjVMHz-+-d!gRwp#N5Rk#bCvl#puRf#?Hq=$Lh!) z$cD(W$mq!~$^6Px&Fapk(ni$0)fCm1)+pJ|+3?)R-0IyP-Gts6-iF@*-#*{K;N0O3 z;dbHb;u7MHI~{=>cr~+>!|Ev?k?_p?=tVi@ILT_ z@aFN7@&NL3^0@O>^U44Kc${NkWME)C!|cPL&Hw^TK+Fh)3=9rnJ_7(F6ak3qROc@s_d3v&YvPcUzx=Cw#&cq=s9 zvz=5d5aA88gE~GjyLgFj%pM{UFfZYi_`tl3Jx4IF;+->KUW4!aU|z>l_Yw03>Tb-u ziO7A=+@PHA%v-2?+c<Qv>CoVn@T*qIjy=Zti3Gr}dqnTzhVi(@)PRfko%6SVAq$f&HgJ_>u@ zeixF|e{36&6i;l%OjHsp8WWsTjv-e#9w%~|oV2vels2+ZMI|WHSmjbDMp7HnC^b1x z4P{qH*^rc`pVOmp#y*F0K7A{nQMxgOj(WW_ayFbf^JA6$%XZ(sy^A=v_Z_5#_52HR zhywutc${@t1(fT^mHqG8mbtq>%uIe@Cd^7E1IdJ$nHfq_S*o_A(yuDnR)?9HnVFdx zcQ;E}-YhdSQ}&i@cRKt3_UWSnO9ij)yZ6>HKGy#I=!eHnA3Mh%ecwNhF)?+hOFasx zPXij#h{iObDecfM?a^^MK_}@Hok!=>1#~4kO;@I?&{gSbbRk_tSEp;xHR)P(ZMqI! zm##=|*&83h5?vQ@WULMwif~bQxVvH$V0Rx&>W9x1?Lqt?4#&Te=^gen&eSkhlAEFP_N9d#UG5R=tf<8%~qEFLj=(F@W z`aFGszDQr9FVk1(tMoPcI(>t_N#CMx(|72*^ga41`f2(Z`abx|3d#t|3?2#|3Uvr|3&{z|3g1w4*=#4ce%#__j$lW9`Tqb zJmnqU+<#Z`g{Yv zA>W8^%pu=|Z^{?*&G-_&lrQ7U`R05JzJhPbx8hs#ZTPl)JH9>Nf$zw7;yd$Q_^y06 zzB}K8@5%S#dmp=q@5A@y`|k7!Vl$#@x%EM{78NjKbjxIkLAblGgiFMbI!Tok~LR+h7DVGT=RmLyyAur_=)@^elkCWpUO|;r}H!Tnfxq% zHa~}-%g^KI^9%Te{33oazl2}PFXNZW_>KG~elx#?-^y>} zxAQyro%}9-H@}D9%kSg&^9T5Y{2~4@e}q5EALEbnC-{^6DgHEnhCj=n24{ z{xW}szsg_Zuk$zfoBS>QHh+h|%ir6bDI;fk6-Guctu#HANRbZ<6&oGpIz3(~nS_<9 zqzUbrS{T`@OXZqzB2?ZK+9_S`snR-;8c}RtDbz}uzRh%{W=)Vtc_7VLCaDZ_nTog> zrCO)C3@g!eO>JG^)ZFR$pe}8d3!9DNT-V7g$5{QeR(T?mZl)G;pvqEPJ#&M0%3LQq zI(E9MZJ5X^*G(Vmj2b70bs1;EIGLPW3KwUED8oWy;o7J&?Jjjv@3^IM?r>YXGZD*3 z>-nZV$W=L)i7Kb5a#3BO; zsLIi1Hj%ra5UV&TdzmZp%e%3)mv$l-_ZwZiI+EQLHZt~)?aC6Pt4ObQ5SVx#>V-73 zTrY=*hZD?l70*paB;_ztE~?|XMC9ut%FT3LY=>H^G65X=qQsyo>0yEOYLFNeMNuw$ zcHUHSG}Ek_KiBw_?X*Y|LE1XW5%E>|%Qg2aX zbNn`3YLiq5pAB>+OHAH~OzU7BF$|a_%1zhBHo&%By{s!;hOshnF2_f@h6(15m9A|! zQE56og6OK+InwemPfT5jJlNN|$VESrSY|ADHs#?$ofO5SeQqOWE2P4#86|R|MCky% zk=1pXv_S4Iu=jqffl*lw_U%k13BqV(B=bNP6;jZj`(~^Ts^biyz>-S2v{NTBcj>}5 zq(NWOF2|&DsM1D&wr%$h-=00NBD7VoQ4+j8>v- z?6KnC5QSU~QLabuHR}vQ6CfwuteCEg?Ut2ZW!k!-Kgc{+){UaNv8al~?!>w*W$X|R znd@qhAgN=Zb}-Wh2P0)am!hodDDWTHW@0mCoK`5Gt2E+xyVDZiVXe6~(gX;n6S{Z##TQqrKosIY zgBNstaL`|8&|(<*J%dV&20Whc}Am1%?vYOy9@as}qETL1| zXi^yvW9-7LF5Lhm-l8|KF%mz)47GGxyKH<|3nNc|xrj!~Dv~MK89-WA7`L#2EEmd% zUg}ZWZ=Ycr;J^~8r|V)%wYC%$2*K@aD`D!9wR_myg!0F^I!3^N1W*MetI@#a&}Fia z%Hn{Ikn6+;W4pxw6oee?ovF1EJ2NBw0b^CMD5`;zkS4I?AOh+6o-SI8u5`BPsv?Q{ zXvy3(0}t336OL_-g;aV8*kJpIM^#Aa>T2)k#GYApMI3|F6i6xbr!zpiZlw%Z!Vn_g z5wn@fm2k4%N?+uuMia;Fd#6Y<(`=DB1o)Ahm~eVn3zfD#w4@mc+Z2TaQ0IM7Cw|Vp z@Vq2f9kH}v|3XLmNY6fWz~@gFWix6a6iH*6zL)+~n&GAlqrIpGP&Ek4=MRK+ zf&i}7+QuT^Rtt#Oq^oBAW~```n1RETLFQ6%900Rh|ucsX-EU(>kwC91(-9fdE}%-Y^5<19O>n`@-}Q z46j3hay7Jeye`60JK5itPlFL`PfGhYxhG1Fou~-f~s*DMgSd#KHi?9yumPV6VRCiKUkeZqtlUTiQ02c-&Z}2 z**MG9YHWd=I0GnDIe|}JC}gwuGJUJONUlb$dkHfL9n63fb5V`(LbLXETeHv+VLuXMgcDHJ|wJ*!8i0$5?&k9?)g`tFb3>xI3T%B4M;aZ5=Si%nozcz0U zCf+M-8=YC+bp2^|v{mplB6br|!<0kO{57C!A&9+2E%&{j1fGQnJQ+FNlW+p&_)jn; zJb&sn1@l7Sz<&X@Di$JGJCVV<2yM?bmA-VemO{UbY3pCMt%2uIBkLlVYlFFm2x#FU zYj!sNc@vBwOfg(D%n&XZmF-knH9S)zQ({qhw<(fBcK5M>qec<&Jo$e;LKrn?_m%Pa z=jaP%ea`Ov>Kr2^XZKaf1?TAVEOhp;Mj{2z9>R*#=ja0rkOUY0zrVDSdiETx1wHSq zZru5FS4N`ggJB|J<-j{no%l=)LGNCGU{ThIl|uH0K1bTz**zlfYj&;k7{>827_zJc&fbe#t3tHN6{A&V#u~p#%t&nd1Uhc1sCOKgd*82bkZd9tH_L zku}n((;@~|ZA+UL$qISILJ);y8hbK@B8NtUPc{-8MzYam(t#^KHS@O=+aTdon!#{^ zKJ5e^xokq52O@E5sSc19Hq^7wPa1odHFg>JEc9n&$8D}l_ySx8p%oj_9kzDeBIqY$ zQG$^C)mwP7faRYB-Zp4Ef{xDMB5|?lBw0SdTh=eV=fl4W@N63@EyO^reMW%_OgCoe z?!#9i?4YPzHWPzSTi1f@^!Gz#XJA_v_g63z!v{&(wKWVw9f33JPF>k0@g0wyS@P~G^SNlf8m1V8o{|q3#E@i3aW`z01HzU~W9=L$3+_sadW;KHScYK8RCeGwdl(fLV7pY% PTwI$BE<67V$F61&bYTzk literal 0 HcmV?d00001 diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-brands-400.woff2 b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-brands-400.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..2acd92d78fcbf7794e5c03f3b580f60b9305c8dc GIT binary patch literal 78472 zcmV(`K-0f>Pew8T0RR910WydH4FCWD0u@960WvNDONF5T00000000000000000000 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

GeiDTd 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 literal 0 HcmV?d00001 diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-regular-400.eot b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-regular-400.eot new file mode 100644 index 0000000000000000000000000000000000000000..21808cc74b4894d5a43e3062729225097d9582ed GIT binary patch literal 34350 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℘?hW)Ts# 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 + + + +Created by FontForge 20200314 at Wed Jan 13 11:57:54 2021 + By Robert Madole +Copyright (c) Font Awesome + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-regular-400.ttf b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-regular-400.ttf new file mode 100644 index 0000000000000000000000000000000000000000..2775fa1e16f5acde9c37852ed01f009bf1ca2792 GIT binary patch literal 34052 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 S`M)Di_+IM|C>n~+>HiDY3xA9N literal 0 HcmV?d00001 diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-regular-400.woff b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-regular-400.woff new file mode 100644 index 0000000000000000000000000000000000000000..e4acf9193fc37803cd524cb2e6a57bcea8caca11 GIT binary patch literal 16776 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 aueZU3d1dPmCNApWs_bP53vP>X4%m{}NRD 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 + + + +Created by FontForge 20200314 at Wed Jan 13 11:57:55 2021 + By Robert Madole +Copyright (c) Font Awesome + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-solid-900.ttf b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-solid-900.ttf new file mode 100644 index 0000000000000000000000000000000000000000..bc640928c36e0d678aa1d199dd128602f4c7f97c GIT binary patch literal 204528 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 N@t^#^6n6Z>e*u;g-iH7H literal 0 HcmV?d00001 diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-solid-900.woff b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-solid-900.woff new file mode 100644 index 0000000000000000000000000000000000000000..7a14a11eb7d8746f60f949ee2b159c2460d1c0f2 GIT binary patch literal 104280 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 z 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 literal 0 HcmV?d00001 diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-solid-900.woff2 b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-solid-900.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..9a4633d9c4eccaa7c60974214eac25a62f6d2289 GIT binary patch literal 80252 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�tM34^MY1QD(;HrI9KuqY&HVUS@jw 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', { + rel: 'stylesheet', + type: 'text/css', + href: appendTimeToUrl(url) + }).appendTo('head'); + }); + }; + + return { + loadScript: _loadScript, + loadStyle: _loadStyle + } + })(); + +})(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/abp/luxon/abp.luxon.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/abp/luxon/abp.luxon.js new file mode 100644 index 0000000000..b04de7cadf --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/abp/luxon/abp.luxon.js @@ -0,0 +1,46 @@ +var abp = abp || {}; +(function () { + + if (!luxon) { + throw "abp/luxon library requires the luxon library included to the page!"; + } + + /* TIMING *************************************************/ + + abp.timing = abp.timing || {}; + + var setObjectValue = function (obj, property, value) { + if (typeof property === "string") { + property = property.split('.'); + } + + if (property.length > 1) { + var p = property.shift(); + setObjectValue(obj[p], property, value); + } else { + obj[property[0]] = value; + } + } + + var getObjectValue = function (obj, property) { + return property.split('.').reduce((a, v) => a[v], obj) + } + + abp.timing.convertFieldsToIsoDate = function (form, fields) { + for (var field of fields) { + var dateTime = luxon.DateTime + .fromFormat( + getObjectValue(form, field), + abp.localization.currentCulture.dateTimeFormat.shortDatePattern, + {locale: abp.localization.currentCulture.cultureName} + ); + + if (!dateTime.invalid) { + setObjectValue(form, field, dateTime.toFormat("yyyy-MM-dd HH:mm:ss")) + } + } + + return form; + } + +})(jQuery); diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/abp/utils/abp-utils.umd.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/abp/utils/abp-utils.umd.js new file mode 100644 index 0000000000..28ebcc3765 --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/abp/utils/abp-utils.umd.js @@ -0,0 +1,694 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('just-compare')) : + typeof define === 'function' && define.amd ? define('@abp/utils', ['exports', 'just-compare'], factory) : + (global = global || self, factory((global.abp = global.abp || {}, global.abp.utils = global.abp.utils || {}, global.abp.utils.common = {}), global.compare)); +}(this, (function (exports, compare) { 'use strict'; + + compare = compare && Object.prototype.hasOwnProperty.call(compare, 'default') ? compare['default'] : compare; + + /*! ***************************************************************************** + Copyright (c) Microsoft Corporation. + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH + REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, + INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + PERFORMANCE OF THIS SOFTWARE. + ***************************************************************************** */ + /* global Reflect, Promise */ + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) + if (b.hasOwnProperty(p)) + d[p] = b[p]; }; + return extendStatics(d, b); + }; + function __extends(d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + } + var __assign = function () { + __assign = Object.assign || function __assign(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) + if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); + }; + function __rest(s, e) { + var t = {}; + for (var p in s) + if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) + t[p] = s[p]; + if (s != null && typeof Object.getOwnPropertySymbols === "function") + for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { + if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) + t[p[i]] = s[p[i]]; + } + return t; + } + function __decorate(decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") + r = Reflect.decorate(decorators, target, key, desc); + else + for (var i = decorators.length - 1; i >= 0; i--) + if (d = decorators[i]) + r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; + } + function __param(paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); }; + } + function __metadata(metadataKey, metadataValue) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") + return Reflect.metadata(metadataKey, metadataValue); + } + function __awaiter(thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { + step(generator.next(value)); + } + catch (e) { + reject(e); + } } + function rejected(value) { try { + step(generator["throw"](value)); + } + catch (e) { + reject(e); + } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); + } + function __generator(thisArg, body) { + var _ = { label: 0, sent: function () { if (t[0] & 1) + throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function () { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) + throw new TypeError("Generator is already executing."); + while (_) + try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) + return t; + if (y = 0, t) + op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: + case 1: + t = op; + break; + case 4: + _.label++; + return { value: op[1], done: false }; + case 5: + _.label++; + y = op[1]; + op = [0]; + continue; + case 7: + op = _.ops.pop(); + _.trys.pop(); + continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { + _ = 0; + continue; + } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { + _.label = op[1]; + break; + } + if (op[0] === 6 && _.label < t[1]) { + _.label = t[1]; + t = op; + break; + } + if (t && _.label < t[2]) { + _.label = t[2]; + _.ops.push(op); + break; + } + if (t[2]) + _.ops.pop(); + _.trys.pop(); + continue; + } + op = body.call(thisArg, _); + } + catch (e) { + op = [6, e]; + y = 0; + } + finally { + f = t = 0; + } + if (op[0] & 5) + throw op[1]; + return { value: op[0] ? op[1] : void 0, done: true }; + } + } + var __createBinding = Object.create ? (function (o, m, k, k2) { + if (k2 === undefined) + k2 = k; + Object.defineProperty(o, k2, { enumerable: true, get: function () { return m[k]; } }); + }) : (function (o, m, k, k2) { + if (k2 === undefined) + k2 = k; + o[k2] = m[k]; + }); + function __exportStar(m, exports) { + for (var p in m) + if (p !== "default" && !exports.hasOwnProperty(p)) + __createBinding(exports, m, p); + } + function __values(o) { + var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; + if (m) + return m.call(o); + if (o && typeof o.length === "number") + return { + next: function () { + if (o && i >= o.length) + o = void 0; + return { value: o && o[i++], done: !o }; + } + }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); + } + function __read(o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) + return o; + var i = m.call(o), r, ar = [], e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) + ar.push(r.value); + } + catch (error) { + e = { error: error }; + } + finally { + try { + if (r && !r.done && (m = i["return"])) + m.call(i); + } + finally { + if (e) + throw e.error; + } + } + return ar; + } + function __spread() { + for (var ar = [], i = 0; i < arguments.length; i++) + ar = ar.concat(__read(arguments[i])); + return ar; + } + function __spreadArrays() { + for (var s = 0, i = 0, il = arguments.length; i < il; i++) + s += arguments[i].length; + for (var r = Array(s), k = 0, i = 0; i < il; i++) + for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) + r[k] = a[j]; + return r; + } + ; + function __await(v) { + return this instanceof __await ? (this.v = v, this) : new __await(v); + } + function __asyncGenerator(thisArg, _arguments, generator) { + if (!Symbol.asyncIterator) + throw new TypeError("Symbol.asyncIterator is not defined."); + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) + i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { + step(g[n](v)); + } + catch (e) { + settle(q[0][3], e); + } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function fulfill(value) { resume("next", value); } + function reject(value) { resume("throw", value); } + function settle(f, v) { if (f(v), q.shift(), q.length) + resume(q[0][0], q[0][1]); } + } + function __asyncDelegator(o) { + var i, p; + return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i; + function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; } + } + function __asyncValues(o) { + if (!Symbol.asyncIterator) + throw new TypeError("Symbol.asyncIterator is not defined."); + var m = o[Symbol.asyncIterator], i; + return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); + function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } + function settle(resolve, reject, d, v) { Promise.resolve(v).then(function (v) { resolve({ value: v, done: d }); }, reject); } + } + function __makeTemplateObject(cooked, raw) { + if (Object.defineProperty) { + Object.defineProperty(cooked, "raw", { value: raw }); + } + else { + cooked.raw = raw; + } + return cooked; + } + ; + var __setModuleDefault = Object.create ? (function (o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); + }) : function (o, v) { + o["default"] = v; + }; + function __importStar(mod) { + if (mod && mod.__esModule) + return mod; + var result = {}; + if (mod != null) + for (var k in mod) + if (Object.hasOwnProperty.call(mod, k)) + __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; + } + function __importDefault(mod) { + return (mod && mod.__esModule) ? mod : { default: mod }; + } + function __classPrivateFieldGet(receiver, privateMap) { + if (!privateMap.has(receiver)) { + throw new TypeError("attempted to get private field on non-instance"); + } + return privateMap.get(receiver); + } + function __classPrivateFieldSet(receiver, privateMap, value) { + if (!privateMap.has(receiver)) { + throw new TypeError("attempted to set private field on non-instance"); + } + privateMap.set(receiver, value); + return value; + } + + var ListNode = /** @class */ (function () { + function ListNode(value) { + this.value = value; + } + return ListNode; + }()); + var LinkedList = /** @class */ (function () { + function LinkedList() { + this.size = 0; + } + Object.defineProperty(LinkedList.prototype, "head", { + get: function () { + return this.first; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(LinkedList.prototype, "tail", { + get: function () { + return this.last; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(LinkedList.prototype, "length", { + get: function () { + return this.size; + }, + enumerable: false, + configurable: true + }); + LinkedList.prototype.attach = function (value, previousNode, nextNode) { + if (!previousNode) + return this.addHead(value); + if (!nextNode) + return this.addTail(value); + var node = new ListNode(value); + node.previous = previousNode; + previousNode.next = node; + node.next = nextNode; + nextNode.previous = node; + this.size++; + return node; + }; + LinkedList.prototype.attachMany = function (values, previousNode, nextNode) { + if (!values.length) + return []; + if (!previousNode) + return this.addManyHead(values); + if (!nextNode) + return this.addManyTail(values); + var list = new LinkedList(); + list.addManyTail(values); + list.first.previous = previousNode; + previousNode.next = list.first; + list.last.next = nextNode; + nextNode.previous = list.last; + this.size += values.length; + return list.toNodeArray(); + }; + LinkedList.prototype.detach = function (node) { + if (!node.previous) + return this.dropHead(); + if (!node.next) + return this.dropTail(); + node.previous.next = node.next; + node.next.previous = node.previous; + this.size--; + return node; + }; + LinkedList.prototype.add = function (value) { + var _this = this; + return { + after: function () { + var _a; + var params = []; + for (var _i = 0; _i < arguments.length; _i++) { + params[_i] = arguments[_i]; + } + return (_a = _this.addAfter).call.apply(_a, __spread([_this, value], params)); + }, + before: function () { + var _a; + var params = []; + for (var _i = 0; _i < arguments.length; _i++) { + params[_i] = arguments[_i]; + } + return (_a = _this.addBefore).call.apply(_a, __spread([_this, value], params)); + }, + byIndex: function (position) { return _this.addByIndex(value, position); }, + head: function () { return _this.addHead(value); }, + tail: function () { return _this.addTail(value); }, + }; + }; + LinkedList.prototype.addMany = function (values) { + var _this = this; + return { + after: function () { + var _a; + var params = []; + for (var _i = 0; _i < arguments.length; _i++) { + params[_i] = arguments[_i]; + } + return (_a = _this.addManyAfter).call.apply(_a, __spread([_this, values], params)); + }, + before: function () { + var _a; + var params = []; + for (var _i = 0; _i < arguments.length; _i++) { + params[_i] = arguments[_i]; + } + return (_a = _this.addManyBefore).call.apply(_a, __spread([_this, values], params)); + }, + byIndex: function (position) { return _this.addManyByIndex(values, position); }, + head: function () { return _this.addManyHead(values); }, + tail: function () { return _this.addManyTail(values); }, + }; + }; + LinkedList.prototype.addAfter = function (value, previousValue, compareFn) { + if (compareFn === void 0) { compareFn = compare; } + var previous = this.find(function (node) { return compareFn(node.value, previousValue); }); + return previous ? this.attach(value, previous, previous.next) : this.addTail(value); + }; + LinkedList.prototype.addBefore = function (value, nextValue, compareFn) { + if (compareFn === void 0) { compareFn = compare; } + var next = this.find(function (node) { return compareFn(node.value, nextValue); }); + return next ? this.attach(value, next.previous, next) : this.addHead(value); + }; + LinkedList.prototype.addByIndex = function (value, position) { + if (position < 0) + position += this.size; + else if (position >= this.size) + return this.addTail(value); + if (position <= 0) + return this.addHead(value); + var next = this.get(position); + return this.attach(value, next.previous, next); + }; + LinkedList.prototype.addHead = function (value) { + var node = new ListNode(value); + node.next = this.first; + if (this.first) + this.first.previous = node; + else + this.last = node; + this.first = node; + this.size++; + return node; + }; + LinkedList.prototype.addTail = function (value) { + var node = new ListNode(value); + if (this.first) { + node.previous = this.last; + this.last.next = node; + this.last = node; + } + else { + this.first = node; + this.last = node; + } + this.size++; + return node; + }; + LinkedList.prototype.addManyAfter = function (values, previousValue, compareFn) { + if (compareFn === void 0) { compareFn = compare; } + var previous = this.find(function (node) { return compareFn(node.value, previousValue); }); + return previous ? this.attachMany(values, previous, previous.next) : this.addManyTail(values); + }; + LinkedList.prototype.addManyBefore = function (values, nextValue, compareFn) { + if (compareFn === void 0) { compareFn = compare; } + var next = this.find(function (node) { return compareFn(node.value, nextValue); }); + return next ? this.attachMany(values, next.previous, next) : this.addManyHead(values); + }; + LinkedList.prototype.addManyByIndex = function (values, position) { + if (position < 0) + position += this.size; + if (position <= 0) + return this.addManyHead(values); + if (position >= this.size) + return this.addManyTail(values); + var next = this.get(position); + return this.attachMany(values, next.previous, next); + }; + LinkedList.prototype.addManyHead = function (values) { + var _this = this; + return values.reduceRight(function (nodes, value) { + nodes.unshift(_this.addHead(value)); + return nodes; + }, []); + }; + LinkedList.prototype.addManyTail = function (values) { + var _this = this; + return values.map(function (value) { return _this.addTail(value); }); + }; + LinkedList.prototype.drop = function () { + var _this = this; + return { + byIndex: function (position) { return _this.dropByIndex(position); }, + byValue: function () { + var params = []; + for (var _i = 0; _i < arguments.length; _i++) { + params[_i] = arguments[_i]; + } + return _this.dropByValue.apply(_this, params); + }, + byValueAll: function () { + var params = []; + for (var _i = 0; _i < arguments.length; _i++) { + params[_i] = arguments[_i]; + } + return _this.dropByValueAll.apply(_this, params); + }, + head: function () { return _this.dropHead(); }, + tail: function () { return _this.dropTail(); }, + }; + }; + LinkedList.prototype.dropMany = function (count) { + var _this = this; + return { + byIndex: function (position) { return _this.dropManyByIndex(count, position); }, + head: function () { return _this.dropManyHead(count); }, + tail: function () { return _this.dropManyTail(count); }, + }; + }; + LinkedList.prototype.dropByIndex = function (position) { + if (position < 0) + position += this.size; + var current = this.get(position); + return current ? this.detach(current) : undefined; + }; + LinkedList.prototype.dropByValue = function (value, compareFn) { + if (compareFn === void 0) { compareFn = compare; } + var position = this.findIndex(function (node) { return compareFn(node.value, value); }); + return position < 0 ? undefined : this.dropByIndex(position); + }; + LinkedList.prototype.dropByValueAll = function (value, compareFn) { + if (compareFn === void 0) { compareFn = compare; } + var dropped = []; + for (var current = this.first, position = 0; current; position++, current = current.next) { + if (compareFn(current.value, value)) { + dropped.push(this.dropByIndex(position - dropped.length)); + } + } + return dropped; + }; + LinkedList.prototype.dropHead = function () { + var head = this.first; + if (head) { + this.first = head.next; + if (this.first) + this.first.previous = undefined; + else + this.last = undefined; + this.size--; + return head; + } + return undefined; + }; + LinkedList.prototype.dropTail = function () { + var tail = this.last; + if (tail) { + this.last = tail.previous; + if (this.last) + this.last.next = undefined; + else + this.first = undefined; + this.size--; + return tail; + } + return undefined; + }; + LinkedList.prototype.dropManyByIndex = function (count, position) { + if (count <= 0) + return []; + if (position < 0) + position = Math.max(position + this.size, 0); + else if (position >= this.size) + return []; + count = Math.min(count, this.size - position); + var dropped = []; + while (count--) { + var current = this.get(position); + dropped.push(this.detach(current)); + } + return dropped; + }; + LinkedList.prototype.dropManyHead = function (count) { + if (count <= 0) + return []; + count = Math.min(count, this.size); + var dropped = []; + while (count--) + dropped.unshift(this.dropHead()); + return dropped; + }; + LinkedList.prototype.dropManyTail = function (count) { + if (count <= 0) + return []; + count = Math.min(count, this.size); + var dropped = []; + while (count--) + dropped.push(this.dropTail()); + return dropped; + }; + LinkedList.prototype.find = function (predicate) { + for (var current = this.first, position = 0; current; position++, current = current.next) { + if (predicate(current, position, this)) + return current; + } + return undefined; + }; + LinkedList.prototype.findIndex = function (predicate) { + for (var current = this.first, position = 0; current; position++, current = current.next) { + if (predicate(current, position, this)) + return position; + } + return -1; + }; + LinkedList.prototype.forEach = function (iteratorFn) { + for (var node = this.first, position = 0; node; position++, node = node.next) { + iteratorFn(node, position, this); + } + }; + LinkedList.prototype.get = function (position) { + return this.find(function (_, index) { return position === index; }); + }; + LinkedList.prototype.indexOf = function (value, compareFn) { + if (compareFn === void 0) { compareFn = compare; } + return this.findIndex(function (node) { return compareFn(node.value, value); }); + }; + LinkedList.prototype.toArray = function () { + var array = new Array(this.size); + this.forEach(function (node, index) { return (array[index] = node.value); }); + return array; + }; + LinkedList.prototype.toNodeArray = function () { + var array = new Array(this.size); + this.forEach(function (node, index) { return (array[index] = node); }); + return array; + }; + LinkedList.prototype.toString = function (mapperFn) { + if (mapperFn === void 0) { mapperFn = JSON.stringify; } + return this.toArray() + .map(function (value) { return mapperFn(value); }) + .join(' <-> '); + }; + // Cannot use Generator type because of ng-packagr + LinkedList.prototype[Symbol.iterator] = function () { + var node, position; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + node = this.first, position = 0; + _a.label = 1; + case 1: + if (!node) return [3 /*break*/, 4]; + return [4 /*yield*/, node.value]; + case 2: + _a.sent(); + _a.label = 3; + case 3: + position++, node = node.next; + return [3 /*break*/, 1]; + case 4: return [2 /*return*/]; + } + }); + }; + return LinkedList; + }()); + + /* + * Public API Surface of utils + */ + + /** + * Generated bundle index. Do not edit. + */ + + exports.LinkedList = LinkedList; + exports.ListNode = ListNode; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}))); +//# sourceMappingURL=abp-utils.umd.js.map diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/abp/utils/abp-utils.umd.js.map b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/abp/utils/abp-utils.umd.js.map new file mode 100644 index 0000000000..2c5d45ddcb --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/abp/utils/abp-utils.umd.js.map @@ -0,0 +1 @@ +{"version":3,"file":"abp-utils.umd.js","sources":["../../node_modules/tslib/tslib.es6.js","../../projects/utils/src/lib/linked-list.ts","../../projects/utils/src/public-api.ts","../../projects/utils/src/abp-utils.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","/* tslint:disable:no-non-null-assertion */\n\nimport compare from 'just-compare';\n\nexport class ListNode {\n next: ListNode | undefined;\n previous: ListNode | undefined;\n constructor(public readonly value: T) {}\n}\n\nexport class LinkedList {\n private first: ListNode | undefined;\n private last: ListNode | undefined;\n private size = 0;\n\n get head(): ListNode | undefined {\n return this.first;\n }\n get tail(): ListNode | undefined {\n return this.last;\n }\n get length(): number {\n return this.size;\n }\n\n private attach(\n value: T,\n previousNode: ListNode | undefined,\n nextNode: ListNode | undefined,\n ): ListNode {\n if (!previousNode) return this.addHead(value);\n\n if (!nextNode) return this.addTail(value);\n\n const node = new ListNode(value);\n node.previous = previousNode;\n previousNode.next = node;\n node.next = nextNode;\n nextNode.previous = node;\n\n this.size++;\n\n return node;\n }\n\n private attachMany(\n values: T[],\n previousNode: ListNode | undefined,\n nextNode: ListNode | undefined,\n ): ListNode[] {\n if (!values.length) return [];\n\n if (!previousNode) return this.addManyHead(values);\n\n if (!nextNode) return this.addManyTail(values);\n\n const list = new LinkedList();\n list.addManyTail(values);\n list.first!.previous = previousNode;\n previousNode.next = list.first;\n list.last!.next = nextNode;\n nextNode.previous = list.last;\n\n this.size += values.length;\n\n return list.toNodeArray();\n }\n\n private detach(node: ListNode) {\n if (!node.previous) return this.dropHead();\n\n if (!node.next) return this.dropTail();\n\n node.previous.next = node.next;\n node.next.previous = node.previous;\n\n this.size--;\n\n return node;\n }\n\n add(value: T) {\n return {\n after: (...params: [T] | [any, ListComparisonFn]) =>\n this.addAfter.call(this, value, ...params),\n before: (...params: [T] | [any, ListComparisonFn]) =>\n this.addBefore.call(this, value, ...params),\n byIndex: (position: number) => this.addByIndex(value, position),\n head: () => this.addHead(value),\n tail: () => this.addTail(value),\n };\n }\n\n addMany(values: T[]) {\n return {\n after: (...params: [T] | [any, ListComparisonFn]) =>\n this.addManyAfter.call(this, values, ...params),\n before: (...params: [T] | [any, ListComparisonFn]) =>\n this.addManyBefore.call(this, values, ...params),\n byIndex: (position: number) => this.addManyByIndex(values, position),\n head: () => this.addManyHead(values),\n tail: () => this.addManyTail(values),\n };\n }\n\n addAfter(value: T, previousValue: T): ListNode;\n addAfter(value: T, previousValue: any, compareFn: ListComparisonFn): ListNode;\n addAfter(value: T, previousValue: any, compareFn: ListComparisonFn = compare): ListNode {\n const previous = this.find(node => compareFn(node.value, previousValue));\n\n return previous ? this.attach(value, previous, previous.next) : this.addTail(value);\n }\n\n addBefore(value: T, nextValue: T): ListNode;\n addBefore(value: T, nextValue: any, compareFn: ListComparisonFn): ListNode;\n addBefore(value: T, nextValue: any, compareFn: ListComparisonFn = compare): ListNode {\n const next = this.find(node => compareFn(node.value, nextValue));\n\n return next ? this.attach(value, next.previous, next) : this.addHead(value);\n }\n\n addByIndex(value: T, position: number): ListNode {\n if (position < 0) position += this.size;\n else if (position >= this.size) return this.addTail(value);\n\n if (position <= 0) return this.addHead(value);\n\n const next = this.get(position)!;\n\n return this.attach(value, next.previous, next);\n }\n\n addHead(value: T): ListNode {\n const node = new ListNode(value);\n\n node.next = this.first;\n\n if (this.first) this.first.previous = node;\n else this.last = node;\n\n this.first = node;\n this.size++;\n\n return node;\n }\n\n addTail(value: T): ListNode {\n const node = new ListNode(value);\n\n if (this.first) {\n node.previous = this.last;\n this.last!.next = node;\n this.last = node;\n } else {\n this.first = node;\n this.last = node;\n }\n\n this.size++;\n\n return node;\n }\n\n addManyAfter(values: T[], previousValue: T): ListNode[];\n addManyAfter(values: T[], previousValue: any, compareFn: ListComparisonFn): ListNode[];\n addManyAfter(\n values: T[],\n previousValue: any,\n compareFn: ListComparisonFn = compare,\n ): ListNode[] {\n const previous = this.find(node => compareFn(node.value, previousValue));\n\n return previous ? this.attachMany(values, previous, previous.next) : this.addManyTail(values);\n }\n\n addManyBefore(values: T[], nextValue: T): ListNode[];\n addManyBefore(values: T[], nextValue: any, compareFn: ListComparisonFn): ListNode[];\n addManyBefore(\n values: T[],\n nextValue: any,\n compareFn: ListComparisonFn = compare,\n ): ListNode[] {\n const next = this.find(node => compareFn(node.value, nextValue));\n\n return next ? this.attachMany(values, next.previous, next) : this.addManyHead(values);\n }\n\n addManyByIndex(values: T[], position: number): ListNode[] {\n if (position < 0) position += this.size;\n\n if (position <= 0) return this.addManyHead(values);\n\n if (position >= this.size) return this.addManyTail(values);\n\n const next = this.get(position)!;\n\n return this.attachMany(values, next.previous, next);\n }\n\n addManyHead(values: T[]): ListNode[] {\n return values.reduceRight[]>((nodes, value) => {\n nodes.unshift(this.addHead(value));\n return nodes;\n }, []);\n }\n\n addManyTail(values: T[]): ListNode[] {\n return values.map(value => this.addTail(value));\n }\n\n drop() {\n return {\n byIndex: (position: number) => this.dropByIndex(position),\n byValue: (...params: [T] | [any, ListComparisonFn]) =>\n this.dropByValue.apply(this, params),\n byValueAll: (...params: [T] | [any, ListComparisonFn]) =>\n this.dropByValueAll.apply(this, params),\n head: () => this.dropHead(),\n tail: () => this.dropTail(),\n };\n }\n\n dropMany(count: number) {\n return {\n byIndex: (position: number) => this.dropManyByIndex(count, position),\n head: () => this.dropManyHead(count),\n tail: () => this.dropManyTail(count),\n };\n }\n\n dropByIndex(position: number): ListNode | undefined {\n if (position < 0) position += this.size;\n\n const current = this.get(position);\n\n return current ? this.detach(current) : undefined;\n }\n\n dropByValue(value: T): ListNode | undefined;\n dropByValue(value: any, compareFn: ListComparisonFn): ListNode | undefined;\n dropByValue(value: any, compareFn: ListComparisonFn = compare): ListNode | undefined {\n const position = this.findIndex(node => compareFn(node.value, value));\n\n return position < 0 ? undefined : this.dropByIndex(position);\n }\n\n dropByValueAll(value: T): ListNode[];\n dropByValueAll(value: any, compareFn: ListComparisonFn): ListNode[];\n dropByValueAll(value: any, compareFn: ListComparisonFn = compare): ListNode[] {\n const dropped: ListNode[] = [];\n\n for (let current = this.first, position = 0; current; position++, current = current.next) {\n if (compareFn(current.value, value)) {\n dropped.push(this.dropByIndex(position - dropped.length)!);\n }\n }\n\n return dropped;\n }\n\n dropHead(): ListNode | undefined {\n const head = this.first;\n\n if (head) {\n this.first = head.next;\n\n if (this.first) this.first.previous = undefined;\n else this.last = undefined;\n\n this.size--;\n\n return head;\n }\n\n return undefined;\n }\n\n dropTail(): ListNode | undefined {\n const tail = this.last;\n\n if (tail) {\n this.last = tail.previous;\n\n if (this.last) this.last.next = undefined;\n else this.first = undefined;\n\n this.size--;\n\n return tail;\n }\n\n return undefined;\n }\n\n dropManyByIndex(count: number, position: number): ListNode[] {\n if (count <= 0) return [];\n\n if (position < 0) position = Math.max(position + this.size, 0);\n else if (position >= this.size) return [];\n\n count = Math.min(count, this.size - position);\n\n const dropped: ListNode[] = [];\n\n while (count--) {\n const current = this.get(position);\n dropped.push(this.detach(current!)!);\n }\n\n return dropped;\n }\n\n dropManyHead(count: Exclude): ListNode[] {\n if (count <= 0) return [];\n\n count = Math.min(count, this.size);\n\n const dropped: ListNode[] = [];\n\n while (count--) dropped.unshift(this.dropHead()!);\n\n return dropped;\n }\n\n dropManyTail(count: Exclude): ListNode[] {\n if (count <= 0) return [];\n\n count = Math.min(count, this.size);\n\n const dropped: ListNode[] = [];\n\n while (count--) dropped.push(this.dropTail()!);\n\n return dropped;\n }\n\n find(predicate: ListIteratorFn): ListNode | undefined {\n for (let current = this.first, position = 0; current; position++, current = current.next) {\n if (predicate(current, position, this)) return current;\n }\n\n return undefined;\n }\n\n findIndex(predicate: ListIteratorFn): number {\n for (let current = this.first, position = 0; current; position++, current = current.next) {\n if (predicate(current, position, this)) return position;\n }\n\n return -1;\n }\n\n forEach(iteratorFn: ListIteratorFn) {\n for (let node = this.first, position = 0; node; position++, node = node.next) {\n iteratorFn(node, position, this);\n }\n }\n\n get(position: number): ListNode | undefined {\n return this.find((_, index) => position === index);\n }\n\n indexOf(value: T): number;\n indexOf(value: any, compareFn: ListComparisonFn): number;\n indexOf(value: any, compareFn: ListComparisonFn = compare): number {\n return this.findIndex(node => compareFn(node.value, value));\n }\n\n toArray(): T[] {\n const array = new Array(this.size);\n\n this.forEach((node, index) => (array[index!] = node.value));\n\n return array;\n }\n\n toNodeArray(): ListNode[] {\n const array = new Array(this.size);\n\n this.forEach((node, index) => (array[index!] = node));\n\n return array;\n }\n\n toString(mapperFn: ListMapperFn = JSON.stringify): string {\n return this.toArray()\n .map(value => mapperFn(value))\n .join(' <-> ');\n }\n\n // Cannot use Generator type because of ng-packagr\n *[Symbol.iterator](): any {\n for (let node = this.first, position = 0; node; position++, node = node.next) {\n yield node.value;\n }\n }\n}\n\nexport type ListMapperFn = (value: T) => any;\n\nexport type ListComparisonFn = (value1: T, value2: any) => boolean;\n\nexport type ListIteratorFn = (\n node: ListNode,\n index?: number,\n list?: LinkedList,\n) => R;\n","/*\n * Public API Surface of utils\n */\n\nexport * from './lib/linked-list';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/abp/utils/abp-utils.umd.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/abp/utils/abp-utils.umd.min.js new file mode 100644 index 0000000000..57b22e5188 --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/abp/utils/abp-utils.umd.min.js @@ -0,0 +1,2 @@ +!function(t,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports,require("just-compare")):"function"==typeof define&&define.amd?define("@abp/utils",["exports","just-compare"],r):r(((t=t||self).abp=t.abp||{},t.abp.utils=t.abp.utils||{},t.abp.utils.common={}),t.compare)}(this,(function(t,r){"use strict";r=r&&Object.prototype.hasOwnProperty.call(r,"default")?r.default:r;function e(t,r){var e,n,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function u(o){return function(u){return function(o){if(e)throw new TypeError("Generator is already executing.");for(;a;)try{if(e=1,n&&(i=2&o[0]?n.return:o[0]?n.throw||((i=n.return)&&i.call(n),0):n.next)&&!(i=i.call(n,o[1])).done)return i;switch(n=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,n=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]0)&&!(n=o.next()).done;)a.push(n.value)}catch(t){i={error:t}}finally{try{n&&!n.done&&(e=o.return)&&e.call(o)}finally{if(i)throw i.error}}return a}function i(){for(var t=[],r=0;r=this.size)return this.addTail(t);if(r<=0)return this.addHead(t);var e=this.get(r);return this.attach(t,e.previous,e)},t.prototype.addHead=function(t){var r=new o(t);return r.next=this.first,this.first?this.first.previous=r:this.last=r,this.first=r,this.size++,r},t.prototype.addTail=function(t){var r=new o(t);return this.first?(r.previous=this.last,this.last.next=r,this.last=r):(this.first=r,this.last=r),this.size++,r},t.prototype.addManyAfter=function(t,e,n){void 0===n&&(n=r);var i=this.find((function(t){return n(t.value,e)}));return i?this.attachMany(t,i,i.next):this.addManyTail(t)},t.prototype.addManyBefore=function(t,e,n){void 0===n&&(n=r);var i=this.find((function(t){return n(t.value,e)}));return i?this.attachMany(t,i.previous,i):this.addManyHead(t)},t.prototype.addManyByIndex=function(t,r){if(r<0&&(r+=this.size),r<=0)return this.addManyHead(t);if(r>=this.size)return this.addManyTail(t);var e=this.get(r);return this.attachMany(t,e.previous,e)},t.prototype.addManyHead=function(t){var r=this;return t.reduceRight((function(t,e){return t.unshift(r.addHead(e)),t}),[])},t.prototype.addManyTail=function(t){var r=this;return t.map((function(t){return r.addTail(t)}))},t.prototype.drop=function(){var t=this;return{byIndex:function(r){return t.dropByIndex(r)},byValue:function(){for(var r=[],e=0;e=this.size)return[];t=Math.min(t,this.size-r);for(var e=[];t--;){var n=this.get(r);e.push(this.detach(n))}return e},t.prototype.dropManyHead=function(t){if(t<=0)return[];t=Math.min(t,this.size);for(var r=[];t--;)r.unshift(this.dropHead());return r},t.prototype.dropManyTail=function(t){if(t<=0)return[];t=Math.min(t,this.size);for(var r=[];t--;)r.push(this.dropTail());return r},t.prototype.find=function(t){for(var r=this.first,e=0;r;e++,r=r.next)if(t(r,e,this))return r},t.prototype.findIndex=function(t){for(var r=this.first,e=0;r;e++,r=r.next)if(t(r,e,this))return e;return-1},t.prototype.forEach=function(t){for(var r=this.first,e=0;r;e++,r=r.next)t(r,e,this)},t.prototype.get=function(t){return this.find((function(r,e){return t===e}))},t.prototype.indexOf=function(t,e){return void 0===e&&(e=r),this.findIndex((function(r){return e(r.value,t)}))},t.prototype.toArray=function(){var t=new Array(this.size);return this.forEach((function(r,e){return t[e]=r.value})),t},t.prototype.toNodeArray=function(){var t=new Array(this.size);return this.forEach((function(r,e){return t[e]=r})),t},t.prototype.toString=function(t){return void 0===t&&(t=JSON.stringify),this.toArray().map((function(r){return t(r)})).join(" <-> ")},t.prototype[Symbol.iterator]=function(){var t;return e(this,(function(r){switch(r.label){case 0:t=this.first,0,r.label=1;case 1:return t?[4,t.value]:[3,4];case 2:r.sent(),r.label=3;case 3:return t=t.next,[3,1];case 4:return[2]}}))},t}();t.LinkedList=a,t.ListNode=o,Object.defineProperty(t,"__esModule",{value:!0})})); +//# sourceMappingURL=abp-utils.umd.min.js.map \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/abp/utils/abp-utils.umd.min.js.map b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/abp/utils/abp-utils.umd.min.js.map new file mode 100644 index 0000000000..b4e4d3e0a1 --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/abp/utils/abp-utils.umd.min.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../node_modules/tslib/tslib.es6.js","../../projects/utils/src/lib/linked-list.ts"],"names":["__generator","thisArg","body","f","y","t","g","_","label","sent","trys","ops","next","verb","throw","return","Symbol","iterator","this","n","v","op","TypeError","call","done","value","pop","length","push","e","step","Object","create","__read","o","m","r","i","ar","error","__spread","arguments","concat","LinkedList","size","defineProperty","prototype","first","last","attach","previousNode","nextNode","addHead","addTail","node","ListNode","previous","attachMany","values","addManyHead","addManyTail","list","toNodeArray","detach","dropTail","dropHead","add","_this","after","params","_i","_a","addAfter","apply","before","addBefore","byIndex","position","addByIndex","head","tail","addMany","addManyAfter","addManyBefore","addManyByIndex","previousValue","compareFn","compare","find","nextValue","get","reduceRight","nodes","unshift","map","drop","dropByIndex","byValue","dropByValue","byValueAll","dropByValueAll","dropMany","count","dropManyByIndex","dropManyHead","dropManyTail","current","undefined","findIndex","dropped","Math","max","min","predicate","forEach","iteratorFn","index","indexOf","toArray","array","Array","toString","mapperFn","JSON","stringify","join"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","/* tslint:disable:no-non-null-assertion */\n\nimport compare from 'just-compare';\n\nexport class ListNode {\n next: ListNode | undefined;\n previous: ListNode | undefined;\n constructor(public readonly value: T) {}\n}\n\nexport class LinkedList {\n private first: ListNode | undefined;\n private last: ListNode | undefined;\n private size = 0;\n\n get head(): ListNode | undefined {\n return this.first;\n }\n get tail(): ListNode | undefined {\n return this.last;\n }\n get length(): number {\n return this.size;\n }\n\n private attach(\n value: T,\n previousNode: ListNode | undefined,\n nextNode: ListNode | undefined,\n ): ListNode {\n if (!previousNode) return this.addHead(value);\n\n if (!nextNode) return this.addTail(value);\n\n const node = new ListNode(value);\n node.previous = previousNode;\n previousNode.next = node;\n node.next = nextNode;\n nextNode.previous = node;\n\n this.size++;\n\n return node;\n }\n\n private attachMany(\n values: T[],\n previousNode: ListNode | undefined,\n nextNode: ListNode | undefined,\n ): ListNode[] {\n if (!values.length) return [];\n\n if (!previousNode) return this.addManyHead(values);\n\n if (!nextNode) return this.addManyTail(values);\n\n const list = new LinkedList();\n list.addManyTail(values);\n list.first!.previous = previousNode;\n previousNode.next = list.first;\n list.last!.next = nextNode;\n nextNode.previous = list.last;\n\n this.size += values.length;\n\n return list.toNodeArray();\n }\n\n private detach(node: ListNode) {\n if (!node.previous) return this.dropHead();\n\n if (!node.next) return this.dropTail();\n\n node.previous.next = node.next;\n node.next.previous = node.previous;\n\n this.size--;\n\n return node;\n }\n\n add(value: T) {\n return {\n after: (...params: [T] | [any, ListComparisonFn]) =>\n this.addAfter.call(this, value, ...params),\n before: (...params: [T] | [any, ListComparisonFn]) =>\n this.addBefore.call(this, value, ...params),\n byIndex: (position: number) => this.addByIndex(value, position),\n head: () => this.addHead(value),\n tail: () => this.addTail(value),\n };\n }\n\n addMany(values: T[]) {\n return {\n after: (...params: [T] | [any, ListComparisonFn]) =>\n this.addManyAfter.call(this, values, ...params),\n before: (...params: [T] | [any, ListComparisonFn]) =>\n this.addManyBefore.call(this, values, ...params),\n byIndex: (position: number) => this.addManyByIndex(values, position),\n head: () => this.addManyHead(values),\n tail: () => this.addManyTail(values),\n };\n }\n\n addAfter(value: T, previousValue: T): ListNode;\n addAfter(value: T, previousValue: any, compareFn: ListComparisonFn): ListNode;\n addAfter(value: T, previousValue: any, compareFn: ListComparisonFn = compare): ListNode {\n const previous = this.find(node => compareFn(node.value, previousValue));\n\n return previous ? this.attach(value, previous, previous.next) : this.addTail(value);\n }\n\n addBefore(value: T, nextValue: T): ListNode;\n addBefore(value: T, nextValue: any, compareFn: ListComparisonFn): ListNode;\n addBefore(value: T, nextValue: any, compareFn: ListComparisonFn = compare): ListNode {\n const next = this.find(node => compareFn(node.value, nextValue));\n\n return next ? this.attach(value, next.previous, next) : this.addHead(value);\n }\n\n addByIndex(value: T, position: number): ListNode {\n if (position < 0) position += this.size;\n else if (position >= this.size) return this.addTail(value);\n\n if (position <= 0) return this.addHead(value);\n\n const next = this.get(position)!;\n\n return this.attach(value, next.previous, next);\n }\n\n addHead(value: T): ListNode {\n const node = new ListNode(value);\n\n node.next = this.first;\n\n if (this.first) this.first.previous = node;\n else this.last = node;\n\n this.first = node;\n this.size++;\n\n return node;\n }\n\n addTail(value: T): ListNode {\n const node = new ListNode(value);\n\n if (this.first) {\n node.previous = this.last;\n this.last!.next = node;\n this.last = node;\n } else {\n this.first = node;\n this.last = node;\n }\n\n this.size++;\n\n return node;\n }\n\n addManyAfter(values: T[], previousValue: T): ListNode[];\n addManyAfter(values: T[], previousValue: any, compareFn: ListComparisonFn): ListNode[];\n addManyAfter(\n values: T[],\n previousValue: any,\n compareFn: ListComparisonFn = compare,\n ): ListNode[] {\n const previous = this.find(node => compareFn(node.value, previousValue));\n\n return previous ? this.attachMany(values, previous, previous.next) : this.addManyTail(values);\n }\n\n addManyBefore(values: T[], nextValue: T): ListNode[];\n addManyBefore(values: T[], nextValue: any, compareFn: ListComparisonFn): ListNode[];\n addManyBefore(\n values: T[],\n nextValue: any,\n compareFn: ListComparisonFn = compare,\n ): ListNode[] {\n const next = this.find(node => compareFn(node.value, nextValue));\n\n return next ? this.attachMany(values, next.previous, next) : this.addManyHead(values);\n }\n\n addManyByIndex(values: T[], position: number): ListNode[] {\n if (position < 0) position += this.size;\n\n if (position <= 0) return this.addManyHead(values);\n\n if (position >= this.size) return this.addManyTail(values);\n\n const next = this.get(position)!;\n\n return this.attachMany(values, next.previous, next);\n }\n\n addManyHead(values: T[]): ListNode[] {\n return values.reduceRight[]>((nodes, value) => {\n nodes.unshift(this.addHead(value));\n return nodes;\n }, []);\n }\n\n addManyTail(values: T[]): ListNode[] {\n return values.map(value => this.addTail(value));\n }\n\n drop() {\n return {\n byIndex: (position: number) => this.dropByIndex(position),\n byValue: (...params: [T] | [any, ListComparisonFn]) =>\n this.dropByValue.apply(this, params),\n byValueAll: (...params: [T] | [any, ListComparisonFn]) =>\n this.dropByValueAll.apply(this, params),\n head: () => this.dropHead(),\n tail: () => this.dropTail(),\n };\n }\n\n dropMany(count: number) {\n return {\n byIndex: (position: number) => this.dropManyByIndex(count, position),\n head: () => this.dropManyHead(count),\n tail: () => this.dropManyTail(count),\n };\n }\n\n dropByIndex(position: number): ListNode | undefined {\n if (position < 0) position += this.size;\n\n const current = this.get(position);\n\n return current ? this.detach(current) : undefined;\n }\n\n dropByValue(value: T): ListNode | undefined;\n dropByValue(value: any, compareFn: ListComparisonFn): ListNode | undefined;\n dropByValue(value: any, compareFn: ListComparisonFn = compare): ListNode | undefined {\n const position = this.findIndex(node => compareFn(node.value, value));\n\n return position < 0 ? undefined : this.dropByIndex(position);\n }\n\n dropByValueAll(value: T): ListNode[];\n dropByValueAll(value: any, compareFn: ListComparisonFn): ListNode[];\n dropByValueAll(value: any, compareFn: ListComparisonFn = compare): ListNode[] {\n const dropped: ListNode[] = [];\n\n for (let current = this.first, position = 0; current; position++, current = current.next) {\n if (compareFn(current.value, value)) {\n dropped.push(this.dropByIndex(position - dropped.length)!);\n }\n }\n\n return dropped;\n }\n\n dropHead(): ListNode | undefined {\n const head = this.first;\n\n if (head) {\n this.first = head.next;\n\n if (this.first) this.first.previous = undefined;\n else this.last = undefined;\n\n this.size--;\n\n return head;\n }\n\n return undefined;\n }\n\n dropTail(): ListNode | undefined {\n const tail = this.last;\n\n if (tail) {\n this.last = tail.previous;\n\n if (this.last) this.last.next = undefined;\n else this.first = undefined;\n\n this.size--;\n\n return tail;\n }\n\n return undefined;\n }\n\n dropManyByIndex(count: number, position: number): ListNode[] {\n if (count <= 0) return [];\n\n if (position < 0) position = Math.max(position + this.size, 0);\n else if (position >= this.size) return [];\n\n count = Math.min(count, this.size - position);\n\n const dropped: ListNode[] = [];\n\n while (count--) {\n const current = this.get(position);\n dropped.push(this.detach(current!)!);\n }\n\n return dropped;\n }\n\n dropManyHead(count: Exclude): ListNode[] {\n if (count <= 0) return [];\n\n count = Math.min(count, this.size);\n\n const dropped: ListNode[] = [];\n\n while (count--) dropped.unshift(this.dropHead()!);\n\n return dropped;\n }\n\n dropManyTail(count: Exclude): ListNode[] {\n if (count <= 0) return [];\n\n count = Math.min(count, this.size);\n\n const dropped: ListNode[] = [];\n\n while (count--) dropped.push(this.dropTail()!);\n\n return dropped;\n }\n\n find(predicate: ListIteratorFn): ListNode | undefined {\n for (let current = this.first, position = 0; current; position++, current = current.next) {\n if (predicate(current, position, this)) return current;\n }\n\n return undefined;\n }\n\n findIndex(predicate: ListIteratorFn): number {\n for (let current = this.first, position = 0; current; position++, current = current.next) {\n if (predicate(current, position, this)) return position;\n }\n\n return -1;\n }\n\n forEach(iteratorFn: ListIteratorFn) {\n for (let node = this.first, position = 0; node; position++, node = node.next) {\n iteratorFn(node, position, this);\n }\n }\n\n get(position: number): ListNode | undefined {\n return this.find((_, index) => position === index);\n }\n\n indexOf(value: T): number;\n indexOf(value: any, compareFn: ListComparisonFn): number;\n indexOf(value: any, compareFn: ListComparisonFn = compare): number {\n return this.findIndex(node => compareFn(node.value, value));\n }\n\n toArray(): T[] {\n const array = new Array(this.size);\n\n this.forEach((node, index) => (array[index!] = node.value));\n\n return array;\n }\n\n toNodeArray(): ListNode[] {\n const array = new Array(this.size);\n\n this.forEach((node, index) => (array[index!] = node));\n\n return array;\n }\n\n toString(mapperFn: ListMapperFn = JSON.stringify): string {\n return this.toArray()\n .map(value => mapperFn(value))\n .join(' <-> ');\n }\n\n // Cannot use Generator type because of ng-packagr\n *[Symbol.iterator](): any {\n for (let node = this.first, position = 0; node; position++, node = node.next) {\n yield node.value;\n }\n }\n}\n\nexport type ListMapperFn = (value: T) => any;\n\nexport type ListComparisonFn = (value1: T, value2: any) => boolean;\n\nexport type ListIteratorFn = (\n node: ListNode,\n index?: number,\n list?: LinkedList,\n) => R;\n"]} \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/bootstrap-datepicker.css.map b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/bootstrap-datepicker.css.map new file mode 100644 index 0000000000..7e08a21044 --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/bootstrap-datepicker.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["less/datepicker.less","build/build.less"],"names":[],"mappings":"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","sourcesContent":[".datepicker {\n\tpadding: 4px;\n\t.border-radius(@baseBorderRadius);\n\t&-inline {\n\t\twidth: 220px;\n\t}\n\tdirection: ltr;\n\t&-rtl {\n\t\tdirection: rtl;\n\t\t&.dropdown-menu { left: auto; }\n\t\ttable tr td span {\n\t\t\tfloat: right;\n\t\t}\n\t}\n\t&-dropdown {\n\t\ttop: 0;\n\t\tleft: 0;\n\t\t&:before {\n\t\t\tcontent: '';\n\t\t\tdisplay: inline-block;\n\t\t\tborder-left: 7px solid transparent;\n\t\t\tborder-right: 7px solid transparent;\n\t\t\tborder-bottom: 7px solid @grayLight;\n\t\t\tborder-top: 0;\n\t\t\tborder-bottom-color: rgba(0,0,0,.2);\n\t\t\tposition: absolute;\n\t\t}\n\t\t&:after {\n\t\t\tcontent: '';\n\t\t\tdisplay: inline-block;\n\t\t\tborder-left: 6px solid transparent;\n\t\t\tborder-right: 6px solid transparent;\n\t\t\tborder-bottom: 6px solid @white;\n\t\t\tborder-top: 0;\n\t\t\tposition: absolute;\n\t\t}\n\t\t&.datepicker-orient-left:before { left: 6px; }\n\t\t&.datepicker-orient-left:after { left: 7px; }\n\t\t&.datepicker-orient-right:before { right: 6px; }\n\t\t&.datepicker-orient-right:after { right: 7px; }\n\t\t&.datepicker-orient-bottom:before { top: -7px; }\n\t\t&.datepicker-orient-bottom:after { top: -6px; }\n\t\t&.datepicker-orient-top:before {\n\t\t\tbottom: -7px;\n\t\t\tborder-bottom: 0;\n\t\t\tborder-top: 7px solid @grayLight;\n\t\t}\n\t\t&.datepicker-orient-top:after {\n\t\t\tbottom: -6px;\n\t\t\tborder-bottom: 0;\n\t\t\tborder-top: 6px solid @white;\n\t\t}\n\t}\n\ttable {\n\t\tmargin: 0;\n\t\t-webkit-touch-callout: none;\n\t\t-webkit-user-select: none;\n\t\t-khtml-user-select: none;\n\t\t-moz-user-select: none;\n\t\t-ms-user-select: none;\n\t\tuser-select: none;\n\t}\n\ttd, th {\n\t\ttext-align: center;\n\t\twidth: 20px;\n\t\theight: 20px;\n\t\t.border-radius(4px);\n\n\t\tborder: none;\n\t}\n\t// Inline display inside a table presents some problems with\n\t// border and background colors.\n\t.table-striped & table tr {\n\t\ttd, th {\n\t\t\tbackground-color: transparent;\n\t\t}\n\t}\n\ttable tr td {\n\t\t&.day:hover,\n\t\t&.day.focused {\n\t\t\tbackground: @grayLighter;\n\t\t\tcursor: pointer;\n\t\t}\n\t\t&.old,\n\t\t&.new {\n\t\t\tcolor: @grayLight;\n\t\t}\n\t\t&.disabled,\n\t\t&.disabled:hover {\n\t\t\tbackground: none;\n\t\t\tcolor: @grayLight;\n\t\t\tcursor: default;\n\t\t}\n\t\t&.highlighted {\n\t\t\tbackground: @infoBackground;\n\t\t\tborder-radius: 0;\n\t\t}\n\t\t&.today,\n\t\t&.today:hover,\n\t\t&.today.disabled,\n\t\t&.today.disabled:hover {\n\t\t\t@todayBackground: lighten(@orange, 30%);\n\t\t\t.buttonBackground(@todayBackground, spin(@todayBackground, 20));\n\t\t\tcolor: #000;\n\t\t}\n\t\t&.today:hover:hover { // Thank bootstrap 2.0 for this selector...\n\t\t\t// TODO: Bump min BS to 2.1, use @textColor in buttonBackground above\n\t\t\tcolor: #000;\n\t\t}\n\t\t&.today.active:hover {\n\t\t\tcolor: #fff;\n\t\t}\n\t\t&.range,\n\t\t&.range:hover,\n\t\t&.range.disabled,\n\t\t&.range.disabled:hover {\n\t\t\tbackground: @grayLighter;\n\t\t\t.border-radius(0);\n\t\t}\n\t\t&.range.today,\n\t\t&.range.today:hover,\n\t\t&.range.today.disabled,\n\t\t&.range.today.disabled:hover {\n\t\t\t@todayBackground: mix(@orange, @grayLighter, 50%);\n\t\t\t.buttonBackground(@todayBackground, spin(@todayBackground, 20));\n\t\t\t.border-radius(0);\n\t\t}\n\t\t&.selected,\n\t\t&.selected:hover,\n\t\t&.selected.disabled,\n\t\t&.selected.disabled:hover {\n\t\t\t.buttonBackground(lighten(@grayLight, 10), darken(@grayLight, 10));\n\t\t\tcolor: #fff;\n\t\t\ttext-shadow: 0 -1px 0 rgba(0,0,0,.25);\n\t\t}\n\t\t&.active,\n\t\t&.active:hover,\n\t\t&.active.disabled,\n\t\t&.active.disabled:hover {\n\t\t\t.buttonBackground(@btnPrimaryBackground, spin(@btnPrimaryBackground, 20));\n\t\t\tcolor: #fff;\n\t\t\ttext-shadow: 0 -1px 0 rgba(0,0,0,.25);\n\t\t}\n\t\tspan {\n\t\t\tdisplay: block;\n\t\t\twidth: 23%;\n\t\t\theight: 54px;\n\t\t\tline-height: 54px;\n\t\t\tfloat: left;\n\t\t\tmargin: 1%;\n\t\t\tcursor: pointer;\n\t\t\t.border-radius(4px);\n\t\t\t&:hover,\n\t\t\t&.focused {\n\t\t\t\tbackground: @grayLighter;\n\t\t\t}\n\t\t\t&.disabled,\n\t\t\t&.disabled:hover {\n\t\t\t\tbackground: none;\n\t\t\t\tcolor: @grayLight;\n\t\t\t\tcursor: default;\n\t\t\t}\n\t\t\t&.active,\n\t\t\t&.active:hover,\n\t\t\t&.active.disabled,\n\t\t\t&.active.disabled:hover {\n\t\t\t\t.buttonBackground(@btnPrimaryBackground, spin(@btnPrimaryBackground, 20));\n\t\t\t\tcolor: #fff;\n\t\t\t\ttext-shadow: 0 -1px 0 rgba(0,0,0,.25);\n\t\t\t}\n\t\t\t&.old,\n\t\t\t&.new {\n\t\t\t\tcolor: @grayLight;\n\t\t\t}\n\t\t}\n\t}\n\n\t.datepicker-switch {\n\t\twidth: 145px;\n\t}\n\n\t.datepicker-switch,\n\t.prev,\n\t.next,\n\ttfoot tr th {\n\t\tcursor: pointer;\n\t\t&:hover {\n\t\t\tbackground: @grayLighter;\n\t\t}\n\t}\n\n\t.prev, .next {\n\t\t&.disabled {\n\t\t\tvisibility: hidden;\n\t\t}\n\t}\n\n\t// Basic styling for calendar-week cells\n\t.cw {\n\t\tfont-size: 10px;\n\t\twidth: 12px;\n\t\tpadding: 0 2px 0 5px;\n\t\tvertical-align: middle;\n\t}\n}\n.input-append,\n.input-prepend {\n\t&.date .add-on {\n\t\tcursor: pointer;\n\n\t\ti {\n\t\t\tmargin-top: 3px;\n\t\t}\n\t}\n}\n.input-daterange {\n\tinput {\n\t\ttext-align:center;\n\t}\n\tinput:first-child {\n\t\t.border-radius(3px 0 0 3px);\n\t}\n\tinput:last-child {\n\t\t.border-radius(0 3px 3px 0);\n\t}\n\t.add-on {\n\t\tdisplay: inline-block;\n\t\twidth: auto;\n\t\tmin-width: 16px;\n\t\theight: @baseLineHeight;\n\t\tpadding: 4px 5px;\n\t\tfont-weight: normal;\n\t\tline-height: @baseLineHeight;\n\t\ttext-align: center;\n\t\ttext-shadow: 0 1px 0 @white;\n\t\tvertical-align: middle;\n\t\tbackground-color: @grayLighter;\n\t\tborder: 1px solid #ccc;\n\t\tmargin-left: -5px;\n\t\tmargin-right: -5px;\n\t}\n}\n","// Datepicker .less buildfile. Includes select mixins/variables from bootstrap\n// and imports the included datepicker.less to output a minimal datepicker.css\n//\n// Usage:\n// lessc build.less datepicker.css\n//\n// Variables and mixins copied from bootstrap 2.0.2\n\n// Variables\n@grayLight: #999;\n@grayLighter: #eee;\n@white: #fff;\n@linkColor: #08c;\n@btnPrimaryBackground: @linkColor;\n@orange: #f89406;\n@infoBackground: #d9edf7;\n@baseLineHeight: 18px;\n@baseBorderRadius: 4px;\n\n// Mixins\n\n// Border Radius\n.border-radius(@radius: 5px) {\n -webkit-border-radius: @radius;\n -moz-border-radius: @radius;\n border-radius: @radius;\n}\n\n// Button backgrounds\n.buttonBackground(@startColor, @endColor) {\n .gradientBar(@startColor, @endColor);\n .reset-filter();\n &:hover, &:active, &.active, &.disabled, &[disabled] {\n background-color: @endColor;\n }\n &:active,\n &.active {\n background-color: darken(@endColor, 10%) e(\"\\9\");\n }\n}\n\n// Reset filters for IE\n.reset-filter() {\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n}\n\n// Gradient Bar Colors for buttons and alerts\n.gradientBar(@primaryColor, @secondaryColor) {\n #gradient > .vertical(@primaryColor, @secondaryColor);\n border-color: @secondaryColor @secondaryColor darken(@secondaryColor, 15%);\n border-color: rgba(0,0,0,.1) rgba(0,0,0,.1) fadein(rgba(0,0,0,.1), 15%);\n}\n\n// Gradients\n#gradient {\n .vertical(@startColor: #555, @endColor: #333) {\n background-color: mix(@startColor, @endColor, 60%);\n background-image: -moz-linear-gradient(to bottom, @startColor, @endColor); // FF 3.6+\n background-image: -ms-linear-gradient(to bottom, @startColor, @endColor); // IE10\n background-image: -webkit-gradient(linear, 0 0, 0 100%, from(@startColor), to(@endColor)); // Safari 4+, Chrome 2+\n background-image: -webkit-linear-gradient(to bottom, @startColor, @endColor); // Safari 5.1+, Chrome 10+\n background-image: -o-linear-gradient(to bottom, @startColor, @endColor); // Opera 11.10\n background-image: linear-gradient(to bottom, @startColor, @endColor); // The standard\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",@startColor,@endColor)); // IE9 and down\n }\n}\n\n@import \"../less/datepicker.less\";\n"]} \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/bootstrap-datepicker.min.css b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/bootstrap-datepicker.min.css new file mode 100644 index 0000000000..eb681513fb --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/bootstrap-datepicker.min.css @@ -0,0 +1,7 @@ +/*! + * Datepicker for Bootstrap v1.9.0 (https://github.com/uxsolutions/bootstrap-datepicker) + * + * Licensed under the Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0) + */ + +.datepicker{padding:4px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;direction:ltr}.datepicker-inline{width:220px}.datepicker-rtl{direction:rtl}.datepicker-rtl.dropdown-menu{left:auto}.datepicker-rtl table tr td span{float:right}.datepicker-dropdown{top:0;left:0}.datepicker-dropdown:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #999;border-top:0;border-bottom-color:rgba(0,0,0,.2);position:absolute}.datepicker-dropdown:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #fff;border-top:0;position:absolute}.datepicker-dropdown.datepicker-orient-left:before{left:6px}.datepicker-dropdown.datepicker-orient-left:after{left:7px}.datepicker-dropdown.datepicker-orient-right:before{right:6px}.datepicker-dropdown.datepicker-orient-right:after{right:7px}.datepicker-dropdown.datepicker-orient-bottom:before{top:-7px}.datepicker-dropdown.datepicker-orient-bottom:after{top:-6px}.datepicker-dropdown.datepicker-orient-top:before{bottom:-7px;border-bottom:0;border-top:7px solid #999}.datepicker-dropdown.datepicker-orient-top:after{bottom:-6px;border-bottom:0;border-top:6px solid #fff}.datepicker table{margin:0;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.datepicker td,.datepicker th{text-align:center;width:20px;height:20px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;border:none}.table-striped .datepicker table tr td,.table-striped .datepicker table tr th{background-color:transparent}.datepicker table tr td.day.focused,.datepicker table tr td.day:hover{background:#eee;cursor:pointer}.datepicker table tr td.new,.datepicker table tr td.old{color:#999}.datepicker table tr td.disabled,.datepicker table tr td.disabled:hover{background:0 0;color:#999;cursor:default}.datepicker table tr td.highlighted{background:#d9edf7;border-radius:0}.datepicker table tr td.today,.datepicker table tr td.today.disabled,.datepicker table tr td.today.disabled:hover,.datepicker table tr td.today:hover{background-color:#fde19a;background-image:-moz-linear-gradient(to bottom,#fdd49a,#fdf59a);background-image:-ms-linear-gradient(to bottom,#fdd49a,#fdf59a);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fdd49a),to(#fdf59a));background-image:-webkit-linear-gradient(to bottom,#fdd49a,#fdf59a);background-image:-o-linear-gradient(to bottom,#fdd49a,#fdf59a);background-image:linear-gradient(to bottom,#fdd49a,#fdf59a);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fdd49a', endColorstr='#fdf59a', GradientType=0);border-color:#fdf59a #fdf59a #fbed50;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);color:#000}.datepicker table tr td.today.active,.datepicker table tr td.today.disabled,.datepicker table tr td.today.disabled.active,.datepicker table tr td.today.disabled.disabled,.datepicker table tr td.today.disabled:active,.datepicker table tr td.today.disabled:hover,.datepicker table tr td.today.disabled:hover.active,.datepicker table tr td.today.disabled:hover.disabled,.datepicker table tr td.today.disabled:hover:active,.datepicker table tr td.today.disabled:hover:hover,.datepicker table tr td.today.disabled:hover[disabled],.datepicker table tr td.today.disabled[disabled],.datepicker table tr td.today:active,.datepicker table tr td.today:hover,.datepicker table tr td.today:hover.active,.datepicker table tr td.today:hover.disabled,.datepicker table tr td.today:hover:active,.datepicker table tr td.today:hover:hover,.datepicker table tr td.today:hover[disabled],.datepicker table tr td.today[disabled]{background-color:#fdf59a}.datepicker table tr td.today.active,.datepicker table tr td.today.disabled.active,.datepicker table tr td.today.disabled:active,.datepicker table tr td.today.disabled:hover.active,.datepicker table tr td.today.disabled:hover:active,.datepicker table tr td.today:active,.datepicker table tr td.today:hover.active,.datepicker table tr td.today:hover:active{background-color:#fbf069\9}.datepicker table tr td.today:hover:hover{color:#000}.datepicker table tr td.today.active:hover{color:#fff}.datepicker table tr td.range,.datepicker table tr td.range.disabled,.datepicker table tr td.range.disabled:hover,.datepicker table tr td.range:hover{background:#eee;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.datepicker table tr td.range.today,.datepicker table tr td.range.today.disabled,.datepicker table tr td.range.today.disabled:hover,.datepicker table tr td.range.today:hover{background-color:#f3d17a;background-image:-moz-linear-gradient(to bottom,#f3c17a,#f3e97a);background-image:-ms-linear-gradient(to bottom,#f3c17a,#f3e97a);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f3c17a),to(#f3e97a));background-image:-webkit-linear-gradient(to bottom,#f3c17a,#f3e97a);background-image:-o-linear-gradient(to bottom,#f3c17a,#f3e97a);background-image:linear-gradient(to bottom,#f3c17a,#f3e97a);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f3c17a', endColorstr='#f3e97a', GradientType=0);border-color:#f3e97a #f3e97a #edde34;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.datepicker table tr td.range.today.active,.datepicker table tr td.range.today.disabled,.datepicker table tr td.range.today.disabled.active,.datepicker table tr td.range.today.disabled.disabled,.datepicker table tr td.range.today.disabled:active,.datepicker table tr td.range.today.disabled:hover,.datepicker table tr td.range.today.disabled:hover.active,.datepicker table tr td.range.today.disabled:hover.disabled,.datepicker table tr td.range.today.disabled:hover:active,.datepicker table tr td.range.today.disabled:hover:hover,.datepicker table tr td.range.today.disabled:hover[disabled],.datepicker table tr td.range.today.disabled[disabled],.datepicker table tr td.range.today:active,.datepicker table tr td.range.today:hover,.datepicker table tr td.range.today:hover.active,.datepicker table tr td.range.today:hover.disabled,.datepicker table tr td.range.today:hover:active,.datepicker table tr td.range.today:hover:hover,.datepicker table tr td.range.today:hover[disabled],.datepicker table tr td.range.today[disabled]{background-color:#f3e97a}.datepicker table tr td.range.today.active,.datepicker table tr td.range.today.disabled.active,.datepicker table tr td.range.today.disabled:active,.datepicker table tr td.range.today.disabled:hover.active,.datepicker table tr td.range.today.disabled:hover:active,.datepicker table tr td.range.today:active,.datepicker table tr td.range.today:hover.active,.datepicker table tr td.range.today:hover:active{background-color:#efe24b\9}.datepicker table tr td.selected,.datepicker table tr td.selected.disabled,.datepicker table tr td.selected.disabled:hover,.datepicker table tr td.selected:hover{background-color:#9e9e9e;background-image:-moz-linear-gradient(to bottom,#b3b3b3,grey);background-image:-ms-linear-gradient(to bottom,#b3b3b3,grey);background-image:-webkit-gradient(linear,0 0,0 100%,from(#b3b3b3),to(grey));background-image:-webkit-linear-gradient(to bottom,#b3b3b3,grey);background-image:-o-linear-gradient(to bottom,#b3b3b3,grey);background-image:linear-gradient(to bottom,#b3b3b3,grey);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#b3b3b3', endColorstr='#808080', GradientType=0);border-color:grey grey #595959;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.datepicker table tr td.selected.active,.datepicker table tr td.selected.disabled,.datepicker table tr td.selected.disabled.active,.datepicker table tr td.selected.disabled.disabled,.datepicker table tr td.selected.disabled:active,.datepicker table tr td.selected.disabled:hover,.datepicker table tr td.selected.disabled:hover.active,.datepicker table tr td.selected.disabled:hover.disabled,.datepicker table tr td.selected.disabled:hover:active,.datepicker table tr td.selected.disabled:hover:hover,.datepicker table tr td.selected.disabled:hover[disabled],.datepicker table tr td.selected.disabled[disabled],.datepicker table tr td.selected:active,.datepicker table tr td.selected:hover,.datepicker table tr td.selected:hover.active,.datepicker table tr td.selected:hover.disabled,.datepicker table tr td.selected:hover:active,.datepicker table tr td.selected:hover:hover,.datepicker table tr td.selected:hover[disabled],.datepicker table tr td.selected[disabled]{background-color:grey}.datepicker table tr td.selected.active,.datepicker table tr td.selected.disabled.active,.datepicker table tr td.selected.disabled:active,.datepicker table tr td.selected.disabled:hover.active,.datepicker table tr td.selected.disabled:hover:active,.datepicker table tr td.selected:active,.datepicker table tr td.selected:hover.active,.datepicker table tr td.selected:hover:active{background-color:#666\9}.datepicker table tr td.active,.datepicker table tr td.active.disabled,.datepicker table tr td.active.disabled:hover,.datepicker table tr td.active:hover{background-color:#006dcc;background-image:-moz-linear-gradient(to bottom,#08c,#04c);background-image:-ms-linear-gradient(to bottom,#08c,#04c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#04c));background-image:-webkit-linear-gradient(to bottom,#08c,#04c);background-image:-o-linear-gradient(to bottom,#08c,#04c);background-image:linear-gradient(to bottom,#08c,#04c);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#08c', endColorstr='#0044cc', GradientType=0);border-color:#04c #04c #002a80;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.datepicker table tr td.active.active,.datepicker table tr td.active.disabled,.datepicker table tr td.active.disabled.active,.datepicker table tr td.active.disabled.disabled,.datepicker table tr td.active.disabled:active,.datepicker table tr td.active.disabled:hover,.datepicker table tr td.active.disabled:hover.active,.datepicker table tr td.active.disabled:hover.disabled,.datepicker table tr td.active.disabled:hover:active,.datepicker table tr td.active.disabled:hover:hover,.datepicker table tr td.active.disabled:hover[disabled],.datepicker table tr td.active.disabled[disabled],.datepicker table tr td.active:active,.datepicker table tr td.active:hover,.datepicker table tr td.active:hover.active,.datepicker table tr td.active:hover.disabled,.datepicker table tr td.active:hover:active,.datepicker table tr td.active:hover:hover,.datepicker table tr td.active:hover[disabled],.datepicker table tr td.active[disabled]{background-color:#04c}.datepicker table tr td.active.active,.datepicker table tr td.active.disabled.active,.datepicker table tr td.active.disabled:active,.datepicker table tr td.active.disabled:hover.active,.datepicker table tr td.active.disabled:hover:active,.datepicker table tr td.active:active,.datepicker table tr td.active:hover.active,.datepicker table tr td.active:hover:active{background-color:#039\9}.datepicker table tr td span{display:block;width:23%;height:54px;line-height:54px;float:left;margin:1%;cursor:pointer;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.datepicker table tr td span.focused,.datepicker table tr td span:hover{background:#eee}.datepicker table tr td span.disabled,.datepicker table tr td span.disabled:hover{background:0 0;color:#999;cursor:default}.datepicker table tr td span.active,.datepicker table tr td span.active.disabled,.datepicker table tr td span.active.disabled:hover,.datepicker table tr td span.active:hover{background-color:#006dcc;background-image:-moz-linear-gradient(to bottom,#08c,#04c);background-image:-ms-linear-gradient(to bottom,#08c,#04c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#04c));background-image:-webkit-linear-gradient(to bottom,#08c,#04c);background-image:-o-linear-gradient(to bottom,#08c,#04c);background-image:linear-gradient(to bottom,#08c,#04c);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#08c', endColorstr='#0044cc', GradientType=0);border-color:#04c #04c #002a80;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.datepicker table tr td span.active.active,.datepicker table tr td span.active.disabled,.datepicker table tr td span.active.disabled.active,.datepicker table tr td span.active.disabled.disabled,.datepicker table tr td span.active.disabled:active,.datepicker table tr td span.active.disabled:hover,.datepicker table tr td span.active.disabled:hover.active,.datepicker table tr td span.active.disabled:hover.disabled,.datepicker table tr td span.active.disabled:hover:active,.datepicker table tr td span.active.disabled:hover:hover,.datepicker table tr td span.active.disabled:hover[disabled],.datepicker table tr td span.active.disabled[disabled],.datepicker table tr td span.active:active,.datepicker table tr td span.active:hover,.datepicker table tr td span.active:hover.active,.datepicker table tr td span.active:hover.disabled,.datepicker table tr td span.active:hover:active,.datepicker table tr td span.active:hover:hover,.datepicker table tr td span.active:hover[disabled],.datepicker table tr td span.active[disabled]{background-color:#04c}.datepicker table tr td span.active.active,.datepicker table tr td span.active.disabled.active,.datepicker table tr td span.active.disabled:active,.datepicker table tr td span.active.disabled:hover.active,.datepicker table tr td span.active.disabled:hover:active,.datepicker table tr td span.active:active,.datepicker table tr td span.active:hover.active,.datepicker table tr td span.active:hover:active{background-color:#039\9}.datepicker table tr td span.new,.datepicker table tr td span.old{color:#999}.datepicker .datepicker-switch{width:145px}.datepicker .datepicker-switch,.datepicker .next,.datepicker .prev,.datepicker tfoot tr th{cursor:pointer}.datepicker .datepicker-switch:hover,.datepicker .next:hover,.datepicker .prev:hover,.datepicker tfoot tr th:hover{background:#eee}.datepicker .next.disabled,.datepicker .prev.disabled{visibility:hidden}.datepicker .cw{font-size:10px;width:12px;padding:0 2px 0 5px;vertical-align:middle}.input-append.date .add-on,.input-prepend.date .add-on{cursor:pointer}.input-append.date .add-on i,.input-prepend.date .add-on i{margin-top:3px}.input-daterange input{text-align:center}.input-daterange input:first-child{-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.input-daterange input:last-child{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.input-daterange .add-on{display:inline-block;width:auto;min-width:16px;height:18px;padding:4px 5px;font-weight:400;line-height:18px;text-align:center;text-shadow:0 1px 0 #fff;vertical-align:middle;background-color:#eee;border:1px solid #ccc;margin-left:-5px;margin-right:-5px} \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/bootstrap-datepicker.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/bootstrap-datepicker.min.js new file mode 100644 index 0000000000..8800106e8f --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/bootstrap-datepicker.min.js @@ -0,0 +1,8 @@ +/*! + * Datepicker for Bootstrap v1.9.0 (https://github.com/uxsolutions/bootstrap-datepicker) + * + * Licensed under the Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0) + */ + +!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):a("object"==typeof exports?require("jquery"):jQuery)}(function(a,b){function c(){return new Date(Date.UTC.apply(Date,arguments))}function d(){var a=new Date;return c(a.getFullYear(),a.getMonth(),a.getDate())}function e(a,b){return a.getUTCFullYear()===b.getUTCFullYear()&&a.getUTCMonth()===b.getUTCMonth()&&a.getUTCDate()===b.getUTCDate()}function f(c,d){return function(){return d!==b&&a.fn.datepicker.deprecated(d),this[c].apply(this,arguments)}}function g(a){return a&&!isNaN(a.getTime())}function h(b,c){function d(a,b){return b.toLowerCase()}var e,f=a(b).data(),g={},h=new RegExp("^"+c.toLowerCase()+"([A-Z])");c=new RegExp("^"+c.toLowerCase());for(var i in f)c.test(i)&&(e=i.replace(h,d),g[e]=f[i]);return g}function i(b){var c={};if(q[b]||(b=b.split("-")[0],q[b])){var d=q[b];return a.each(p,function(a,b){b in d&&(c[b]=d[b])}),c}}var j=function(){var b={get:function(a){return this.slice(a)[0]},contains:function(a){for(var b=a&&a.valueOf(),c=0,d=this.length;c]/g)||[]).length<=0)return!0;return a(c).length>0}catch(a){return!1}},_process_options:function(b){this._o=a.extend({},this._o,b);var e=this.o=a.extend({},this._o),f=e.language;q[f]||(f=f.split("-")[0],q[f]||(f=o.language)),e.language=f,e.startView=this._resolveViewName(e.startView),e.minViewMode=this._resolveViewName(e.minViewMode),e.maxViewMode=this._resolveViewName(e.maxViewMode),e.startView=Math.max(this.o.minViewMode,Math.min(this.o.maxViewMode,e.startView)),!0!==e.multidate&&(e.multidate=Number(e.multidate)||!1,!1!==e.multidate&&(e.multidate=Math.max(0,e.multidate))),e.multidateSeparator=String(e.multidateSeparator),e.weekStart%=7,e.weekEnd=(e.weekStart+6)%7;var g=r.parseFormat(e.format);e.startDate!==-1/0&&(e.startDate?e.startDate instanceof Date?e.startDate=this._local_to_utc(this._zero_time(e.startDate)):e.startDate=r.parseDate(e.startDate,g,e.language,e.assumeNearbyYear):e.startDate=-1/0),e.endDate!==1/0&&(e.endDate?e.endDate instanceof Date?e.endDate=this._local_to_utc(this._zero_time(e.endDate)):e.endDate=r.parseDate(e.endDate,g,e.language,e.assumeNearbyYear):e.endDate=1/0),e.daysOfWeekDisabled=this._resolveDaysOfWeek(e.daysOfWeekDisabled||[]),e.daysOfWeekHighlighted=this._resolveDaysOfWeek(e.daysOfWeekHighlighted||[]),e.datesDisabled=e.datesDisabled||[],a.isArray(e.datesDisabled)||(e.datesDisabled=e.datesDisabled.split(",")),e.datesDisabled=a.map(e.datesDisabled,function(a){return r.parseDate(a,g,e.language,e.assumeNearbyYear)});var h=String(e.orientation).toLowerCase().split(/\s+/g),i=e.orientation.toLowerCase();if(h=a.grep(h,function(a){return/^auto|left|right|top|bottom$/.test(a)}),e.orientation={x:"auto",y:"auto"},i&&"auto"!==i)if(1===h.length)switch(h[0]){case"top":case"bottom":e.orientation.y=h[0];break;case"left":case"right":e.orientation.x=h[0]}else i=a.grep(h,function(a){return/^left|right$/.test(a)}),e.orientation.x=i[0]||"auto",i=a.grep(h,function(a){return/^top|bottom$/.test(a)}),e.orientation.y=i[0]||"auto";else;if(e.defaultViewDate instanceof Date||"string"==typeof e.defaultViewDate)e.defaultViewDate=r.parseDate(e.defaultViewDate,g,e.language,e.assumeNearbyYear);else if(e.defaultViewDate){var j=e.defaultViewDate.year||(new Date).getFullYear(),k=e.defaultViewDate.month||0,l=e.defaultViewDate.day||1;e.defaultViewDate=c(j,k,l)}else e.defaultViewDate=d()},_applyEvents:function(a){for(var c,d,e,f=0;fe?(this.picker.addClass("datepicker-orient-right"),m+=l-b):this.o.rtl?this.picker.addClass("datepicker-orient-right"):this.picker.addClass("datepicker-orient-left");var o,p=this.o.orientation.y;if("auto"===p&&(o=-f+n-c,p=o<0?"bottom":"top"),this.picker.addClass("datepicker-orient-"+p),"top"===p?n-=c+parseInt(this.picker.css("padding-top")):n+=k,this.o.rtl){var q=e-(m+l);this.picker.css({top:n,right:q,zIndex:i})}else this.picker.css({top:n,left:m,zIndex:i});return this},_allow_update:!0,update:function(){if(!this._allow_update)return this;var b=this.dates.copy(),c=[],d=!1;return arguments.length?(a.each(arguments,a.proxy(function(a,b){b instanceof Date&&(b=this._local_to_utc(b)),c.push(b)},this)),d=!0):(c=this.isInput?this.element.val():this.element.data("date")||this.inputField.val(),c=c&&this.o.multidate?c.split(this.o.multidateSeparator):[c],delete this.element.data().date),c=a.map(c,a.proxy(function(a){return r.parseDate(a,this.o.format,this.o.language,this.o.assumeNearbyYear)},this)),c=a.grep(c,a.proxy(function(a){return!this.dateWithinRange(a)||!a},this),!0),this.dates.replace(c),this.o.updateViewDate&&(this.dates.length?this.viewDate=new Date(this.dates.get(-1)):this.viewDatethis.o.endDate?this.viewDate=new Date(this.o.endDate):this.viewDate=this.o.defaultViewDate),d?(this.setValue(),this.element.change()):this.dates.length&&String(b)!==String(this.dates)&&d&&(this._trigger("changeDate"),this.element.change()),!this.dates.length&&b.length&&(this._trigger("clearDate"),this.element.change()),this.fill(),this},fillDow:function(){if(this.o.showWeekDays){var b=this.o.weekStart,c="";for(this.o.calendarWeeks&&(c+=' ');b";c+="",this.picker.find(".datepicker-days thead").append(c)}},fillMonths:function(){for(var a,b=this._utc_to_local(this.viewDate),c="",d=0;d<12;d++)a=b&&b.getMonth()===d?" focused":"",c+=''+q[this.o.language].monthsShort[d]+"";this.picker.find(".datepicker-months td").html(c)},setRange:function(b){b&&b.length?this.range=a.map(b,function(a){return a.valueOf()}):delete this.range,this.fill()},getClassNames:function(b){var c=[],f=this.viewDate.getUTCFullYear(),g=this.viewDate.getUTCMonth(),h=d();return b.getUTCFullYear()f||b.getUTCFullYear()===f&&b.getUTCMonth()>g)&&c.push("new"),this.focusDate&&b.valueOf()===this.focusDate.valueOf()&&c.push("focused"),this.o.todayHighlight&&e(b,h)&&c.push("today"),-1!==this.dates.contains(b)&&c.push("active"),this.dateWithinRange(b)||c.push("disabled"),this.dateIsDisabled(b)&&c.push("disabled","disabled-date"),-1!==a.inArray(b.getUTCDay(),this.o.daysOfWeekHighlighted)&&c.push("highlighted"),this.range&&(b>this.range[0]&&bh)&&j.push("disabled"),t===r&&j.push("focused"),i!==a.noop&&(l=i(new Date(t,0,1)),l===b?l={}:"boolean"==typeof l?l={enabled:l}:"string"==typeof l&&(l={classes:l}),!1===l.enabled&&j.push("disabled"),l.classes&&(j=j.concat(l.classes.split(/\s+/))),l.tooltip&&(k=l.tooltip)),m+='"+t+"";o.find(".datepicker-switch").text(p+"-"+q),o.find("td").html(m)},fill:function(){var e,f,g=new Date(this.viewDate),h=g.getUTCFullYear(),i=g.getUTCMonth(),j=this.o.startDate!==-1/0?this.o.startDate.getUTCFullYear():-1/0,k=this.o.startDate!==-1/0?this.o.startDate.getUTCMonth():-1/0,l=this.o.endDate!==1/0?this.o.endDate.getUTCFullYear():1/0,m=this.o.endDate!==1/0?this.o.endDate.getUTCMonth():1/0,n=q[this.o.language].today||q.en.today||"",o=q[this.o.language].clear||q.en.clear||"",p=q[this.o.language].titleFormat||q.en.titleFormat,s=d(),t=(!0===this.o.todayBtn||"linked"===this.o.todayBtn)&&s>=this.o.startDate&&s<=this.o.endDate&&!this.weekOfDateIsDisabled(s);if(!isNaN(h)&&!isNaN(i)){this.picker.find(".datepicker-days .datepicker-switch").text(r.formatDate(g,p,this.o.language)),this.picker.find("tfoot .today").text(n).css("display",t?"table-cell":"none"),this.picker.find("tfoot .clear").text(o).css("display",!0===this.o.clearBtn?"table-cell":"none"),this.picker.find("thead .datepicker-title").text(this.o.title).css("display","string"==typeof this.o.title&&""!==this.o.title?"table-cell":"none"),this.updateNavArrows(),this.fillMonths();var u=c(h,i,0),v=u.getUTCDate();u.setUTCDate(v-(u.getUTCDay()-this.o.weekStart+7)%7);var w=new Date(u);u.getUTCFullYear()<100&&w.setUTCFullYear(u.getUTCFullYear()),w.setUTCDate(w.getUTCDate()+42),w=w.valueOf();for(var x,y,z=[];u.valueOf()"),this.o.calendarWeeks)){var A=new Date(+u+(this.o.weekStart-x-7)%7*864e5),B=new Date(Number(A)+(11-A.getUTCDay())%7*864e5),C=new Date(Number(C=c(B.getUTCFullYear(),0,1))+(11-C.getUTCDay())%7*864e5),D=(B-C)/864e5/7+1;z.push(''+D+"")}y=this.getClassNames(u),y.push("day");var E=u.getUTCDate();this.o.beforeShowDay!==a.noop&&(f=this.o.beforeShowDay(this._utc_to_local(u)),f===b?f={}:"boolean"==typeof f?f={enabled:f}:"string"==typeof f&&(f={classes:f}),!1===f.enabled&&y.push("disabled"),f.classes&&(y=y.concat(f.classes.split(/\s+/))),f.tooltip&&(e=f.tooltip),f.content&&(E=f.content)),y=a.isFunction(a.uniqueSort)?a.uniqueSort(y):a.unique(y),z.push(''+E+""),e=null,x===this.o.weekEnd&&z.push(""),u.setUTCDate(u.getUTCDate()+1)}this.picker.find(".datepicker-days tbody").html(z.join(""));var F=q[this.o.language].monthsTitle||q.en.monthsTitle||"Months",G=this.picker.find(".datepicker-months").find(".datepicker-switch").text(this.o.maxViewMode<2?F:h).end().find("tbody span").removeClass("active");if(a.each(this.dates,function(a,b){b.getUTCFullYear()===h&&G.eq(b.getUTCMonth()).addClass("active")}),(hl)&&G.addClass("disabled"),h===j&&G.slice(0,k).addClass("disabled"),h===l&&G.slice(m+1).addClass("disabled"),this.o.beforeShowMonth!==a.noop){var H=this;a.each(G,function(c,d){var e=new Date(h,c,1),f=H.o.beforeShowMonth(e);f===b?f={}:"boolean"==typeof f?f={enabled:f}:"string"==typeof f&&(f={classes:f}),!1!==f.enabled||a(d).hasClass("disabled")||a(d).addClass("disabled"),f.classes&&a(d).addClass(f.classes),f.tooltip&&a(d).prop("title",f.tooltip)})}this._fill_yearsView(".datepicker-years","year",10,h,j,l,this.o.beforeShowYear),this._fill_yearsView(".datepicker-decades","decade",100,h,j,l,this.o.beforeShowDecade),this._fill_yearsView(".datepicker-centuries","century",1e3,h,j,l,this.o.beforeShowCentury)}},updateNavArrows:function(){if(this._allow_update){var a,b,c=new Date(this.viewDate),d=c.getUTCFullYear(),e=c.getUTCMonth(),f=this.o.startDate!==-1/0?this.o.startDate.getUTCFullYear():-1/0,g=this.o.startDate!==-1/0?this.o.startDate.getUTCMonth():-1/0,h=this.o.endDate!==1/0?this.o.endDate.getUTCFullYear():1/0,i=this.o.endDate!==1/0?this.o.endDate.getUTCMonth():1/0,j=1;switch(this.viewMode){case 4:j*=10;case 3:j*=10;case 2:j*=10;case 1:a=Math.floor(d/j)*j<=f,b=Math.floor(d/j)*j+j>h;break;case 0:a=d<=f&&e<=g,b=d>=h&&e>=i}this.picker.find(".prev").toggleClass("disabled",a),this.picker.find(".next").toggleClass("disabled",b)}},click:function(b){b.preventDefault(),b.stopPropagation();var e,f,g,h;e=a(b.target),e.hasClass("datepicker-switch")&&this.viewMode!==this.o.maxViewMode&&this.setViewMode(this.viewMode+1),e.hasClass("today")&&!e.hasClass("day")&&(this.setViewMode(0),this._setDate(d(),"linked"===this.o.todayBtn?null:"view")),e.hasClass("clear")&&this.clearDates(),e.hasClass("disabled")||(e.hasClass("month")||e.hasClass("year")||e.hasClass("decade")||e.hasClass("century"))&&(this.viewDate.setUTCDate(1),f=1,1===this.viewMode?(h=e.parent().find("span").index(e),g=this.viewDate.getUTCFullYear(),this.viewDate.setUTCMonth(h)):(h=0,g=Number(e.text()),this.viewDate.setUTCFullYear(g)),this._trigger(r.viewModes[this.viewMode-1].e,this.viewDate),this.viewMode===this.o.minViewMode?this._setDate(c(g,h,f)):(this.setViewMode(this.viewMode-1),this.fill())),this.picker.is(":visible")&&this._focused_from&&this._focused_from.focus(),delete this._focused_from},dayCellClick:function(b){var c=a(b.currentTarget),d=c.data("date"),e=new Date(d);this.o.updateViewDate&&(e.getUTCFullYear()!==this.viewDate.getUTCFullYear()&&this._trigger("changeYear",this.viewDate),e.getUTCMonth()!==this.viewDate.getUTCMonth()&&this._trigger("changeMonth",this.viewDate)),this._setDate(e)},navArrowsClick:function(b){var c=a(b.currentTarget),d=c.hasClass("prev")?-1:1;0!==this.viewMode&&(d*=12*r.viewModes[this.viewMode].navStep),this.viewDate=this.moveMonth(this.viewDate,d),this._trigger(r.viewModes[this.viewMode].e,this.viewDate),this.fill()},_toggle_multidate:function(a){var b=this.dates.contains(a);if(a||this.dates.clear(),-1!==b?(!0===this.o.multidate||this.o.multidate>1||this.o.toggleActive)&&this.dates.remove(b):!1===this.o.multidate?(this.dates.clear(),this.dates.push(a)):this.dates.push(a),"number"==typeof this.o.multidate)for(;this.dates.length>this.o.multidate;)this.dates.remove(0)},_setDate:function(a,b){b&&"date"!==b||this._toggle_multidate(a&&new Date(a)),(!b&&this.o.updateViewDate||"view"===b)&&(this.viewDate=a&&new Date(a)),this.fill(),this.setValue(),b&&"view"===b||this._trigger("changeDate"),this.inputField.trigger("change"),!this.o.autoclose||b&&"date"!==b||this.hide()},moveDay:function(a,b){var c=new Date(a);return c.setUTCDate(a.getUTCDate()+b),c},moveWeek:function(a,b){return this.moveDay(a,7*b)},moveMonth:function(a,b){if(!g(a))return this.o.defaultViewDate;if(!b)return a;var c,d,e=new Date(a.valueOf()),f=e.getUTCDate(),h=e.getUTCMonth(),i=Math.abs(b);if(b=b>0?1:-1,1===i)d=-1===b?function(){return e.getUTCMonth()===h}:function(){return e.getUTCMonth()!==c},c=h+b,e.setUTCMonth(c),c=(c+12)%12;else{for(var j=0;j0},dateWithinRange:function(a){return a>=this.o.startDate&&a<=this.o.endDate},keydown:function(a){if(!this.picker.is(":visible"))return void(40!==a.keyCode&&27!==a.keyCode||(this.show(),a.stopPropagation()));var b,c,d=!1,e=this.focusDate||this.viewDate;switch(a.keyCode){case 27:this.focusDate?(this.focusDate=null,this.viewDate=this.dates.get(-1)||this.viewDate,this.fill()):this.hide(),a.preventDefault(),a.stopPropagation();break;case 37:case 38:case 39:case 40:if(!this.o.keyboardNavigation||7===this.o.daysOfWeekDisabled.length)break;b=37===a.keyCode||38===a.keyCode?-1:1,0===this.viewMode?a.ctrlKey?(c=this.moveAvailableDate(e,b,"moveYear"))&&this._trigger("changeYear",this.viewDate):a.shiftKey?(c=this.moveAvailableDate(e,b,"moveMonth"))&&this._trigger("changeMonth",this.viewDate):37===a.keyCode||39===a.keyCode?c=this.moveAvailableDate(e,b,"moveDay"):this.weekOfDateIsDisabled(e)||(c=this.moveAvailableDate(e,b,"moveWeek")):1===this.viewMode?(38!==a.keyCode&&40!==a.keyCode||(b*=4),c=this.moveAvailableDate(e,b,"moveMonth")):2===this.viewMode&&(38!==a.keyCode&&40!==a.keyCode||(b*=4),c=this.moveAvailableDate(e,b,"moveYear")),c&&(this.focusDate=this.viewDate=c,this.setValue(),this.fill(),a.preventDefault());break;case 13:if(!this.o.forceParse)break;e=this.focusDate||this.dates.get(-1)||this.viewDate,this.o.keyboardNavigation&&(this._toggle_multidate(e),d=!0),this.focusDate=null,this.viewDate=this.dates.get(-1)||this.viewDate,this.setValue(),this.fill(),this.picker.is(":visible")&&(a.preventDefault(),a.stopPropagation(),this.o.autoclose&&this.hide());break;case 9:this.focusDate=null,this.viewDate=this.dates.get(-1)||this.viewDate,this.fill(),this.hide()}d&&(this.dates.length?this._trigger("changeDate"):this._trigger("clearDate"),this.inputField.trigger("change"))},setViewMode:function(a){this.viewMode=a,this.picker.children("div").hide().filter(".datepicker-"+r.viewModes[this.viewMode].clsName).show(),this.updateNavArrows(),this._trigger("changeViewMode",new Date(this.viewDate))}};var l=function(b,c){a.data(b,"datepicker",this),this.element=a(b),this.inputs=a.map(c.inputs,function(a){return a.jquery?a[0]:a}),delete c.inputs,this.keepEmptyValues=c.keepEmptyValues,delete c.keepEmptyValues,n.call(a(this.inputs),c).on("changeDate",a.proxy(this.dateUpdated,this)),this.pickers=a.map(this.inputs,function(b){return a.data(b,"datepicker")}),this.updateDates()};l.prototype={updateDates:function(){this.dates=a.map(this.pickers,function(a){return a.getUTCDate()}),this.updateRanges()},updateRanges:function(){var b=a.map(this.dates,function(a){return a.valueOf()});a.each(this.pickers,function(a,c){c.setRange(b)})},clearDates:function(){a.each(this.pickers,function(a,b){b.clearDates()})},dateUpdated:function(c){if(!this.updating){this.updating=!0;var d=a.data(c.target,"datepicker");if(d!==b){var e=d.getUTCDate(),f=this.keepEmptyValues,g=a.inArray(c.target,this.inputs),h=g-1,i=g+1,j=this.inputs.length;if(-1!==g){if(a.each(this.pickers,function(a,b){b.getUTCDate()||b!==d&&f||b.setUTCDate(e)}),e=0&&ethis.dates[i])for(;ithis.dates[i];)this.pickers[i++].setUTCDate(e);this.updateDates(),delete this.updating}}}},destroy:function(){a.map(this.pickers,function(a){a.destroy()}),a(this.inputs).off("changeDate",this.dateUpdated),delete this.element.data().datepicker},remove:f("destroy","Method `remove` is deprecated and will be removed in version 2.0. Use `destroy` instead")};var m=a.fn.datepicker,n=function(c){var d=Array.apply(null,arguments);d.shift();var e;if(this.each(function(){var b=a(this),f=b.data("datepicker"),g="object"==typeof c&&c;if(!f){var j=h(this,"date"),m=a.extend({},o,j,g),n=i(m.language),p=a.extend({},o,n,j,g);b.hasClass("input-daterange")||p.inputs?(a.extend(p,{inputs:p.inputs||b.find("input").toArray()}),f=new l(this,p)):f=new k(this,p),b.data("datepicker",f)}"string"==typeof c&&"function"==typeof f[c]&&(e=f[c].apply(f,d))}),e===b||e instanceof k||e instanceof l)return this;if(this.length>1)throw new Error("Using only allowed for the collection of a single element ("+c+" function)");return e};a.fn.datepicker=n;var o=a.fn.datepicker.defaults={assumeNearbyYear:!1,autoclose:!1,beforeShowDay:a.noop,beforeShowMonth:a.noop,beforeShowYear:a.noop,beforeShowDecade:a.noop,beforeShowCentury:a.noop,calendarWeeks:!1,clearBtn:!1,toggleActive:!1,daysOfWeekDisabled:[],daysOfWeekHighlighted:[],datesDisabled:[],endDate:1/0,forceParse:!0,format:"mm/dd/yyyy",keepEmptyValues:!1,keyboardNavigation:!0,language:"en",minViewMode:0,maxViewMode:4,multidate:!1,multidateSeparator:",",orientation:"auto",rtl:!1,startDate:-1/0,startView:0,todayBtn:!1,todayHighlight:!1,updateViewDate:!0,weekStart:0,disableTouchKeyboard:!1,enableOnReadonly:!0,showOnFocus:!0,zIndexOffset:10,container:"body",immediateUpdates:!1,title:"",templates:{leftArrow:"«",rightArrow:"»"},showWeekDays:!0},p=a.fn.datepicker.locale_opts=["format","rtl","weekStart"];a.fn.datepicker.Constructor=k;var q=a.fn.datepicker.dates={en:{days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],daysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],daysMin:["Su","Mo","Tu","We","Th","Fr","Sa"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],monthsShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],today:"Today",clear:"Clear",titleFormat:"MM yyyy"}},r={viewModes:[{names:["days","month"],clsName:"days",e:"changeMonth"},{names:["months","year"],clsName:"months",e:"changeYear",navStep:1},{names:["years","decade"],clsName:"years",e:"changeDecade",navStep:10},{names:["decades","century"],clsName:"decades",e:"changeCentury",navStep:100},{names:["centuries","millennium"],clsName:"centuries",e:"changeMillennium",navStep:1e3}],validParts:/dd?|DD?|mm?|MM?|yy(?:yy)?/g,nonpunctuation:/[^ -\/:-@\u5e74\u6708\u65e5\[-`{-~\t\n\r]+/g,parseFormat:function(a){if("function"==typeof a.toValue&&"function"==typeof a.toDisplay)return a;var b=a.replace(this.validParts,"\0").split("\0"),c=a.match(this.validParts);if(!b||!b.length||!c||0===c.length)throw new Error("Invalid date format.");return{separators:b,parts:c}},parseDate:function(c,e,f,g){function h(a,b){return!0===b&&(b=10),a<100&&(a+=2e3)>(new Date).getFullYear()+b&&(a-=100),a}function i(){var a=this.slice(0,j[n].length),b=j[n].slice(0,a.length);return a.toLowerCase()===b.toLowerCase()}if(!c)return b;if(c instanceof Date)return c;if("string"==typeof e&&(e=r.parseFormat(e)),e.toValue)return e.toValue(c,e,f);var j,l,m,n,o,p={d:"moveDay",m:"moveMonth",w:"moveWeek",y:"moveYear"},s={yesterday:"-1d",today:"+0d",tomorrow:"+1d"};if(c in s&&(c=s[c]),/^[\-+]\d+[dmwy]([\s,]+[\-+]\d+[dmwy])*$/i.test(c)){for(j=c.match(/([\-+]\d+)([dmwy])/gi),c=new Date,n=0;n'+o.templates.leftArrow+''+o.templates.rightArrow+"",contTemplate:'',footTemplate:''};r.template='

",a.fn.datepicker.DPGlobal=r,a.fn.datepicker.noConflict=function(){return a.fn.datepicker=m,this},a.fn.datepicker.version="1.9.0",a.fn.datepicker.deprecated=function(a){var b=window.console;b&&b.warn&&b.warn("DEPRECATED: "+a)},a(document).on("focus.datepicker.data-api click.datepicker.data-api",'[data-provide="datepicker"]',function(b){var c=a(this);c.data("datepicker")||(b.preventDefault(),n.call(c,"show"))}),a(function(){n.call(a('[data-provide="datepicker-inline"]'))})}); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker-en-CA.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker-en-CA.min.js new file mode 100644 index 0000000000..0aab38f3a4 --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker-en-CA.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates["en-CA"]={days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],daysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],daysMin:["Su","Mo","Tu","We","Th","Fr","Sa"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],monthsShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],today:"Today",monthsTitle:"Months",clear:"Clear",weekStart:0,format:"yyyy-mm-dd"},a.fn.datepicker.deprecated("This filename doesn't follow the convention, use bootstrap-datepicker.en-CA.js instead.")}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ar-tn.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ar-tn.min.js new file mode 100644 index 0000000000..9d70dc2fa3 --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ar-tn.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates["ar-tn"]={days:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت","الأحد"],daysShort:["أحد","اثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت","أحد"],daysMin:["ح","ن","ث","ع","خ","ج","س","ح"],months:["جانفي","فيفري","مارس","أفريل","ماي","جوان","جويليه","أوت","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],monthsShort:["جانفي","فيفري","مارس","أفريل","ماي","جوان","جويليه","أوت","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],today:"هذا اليوم",rtl:!0}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ar.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ar.min.js new file mode 100644 index 0000000000..ece41af725 --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ar.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates.ar={days:["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت","الأحد"],daysShort:["أحد","اثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت","أحد"],daysMin:["ح","ن","ث","ع","خ","ج","س","ح"],months:["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],monthsShort:["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],today:"هذا اليوم",rtl:!0}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.az.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.az.min.js new file mode 100644 index 0000000000..aa1edbf4f8 --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.az.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates.az={days:["Bazar","Bazar ertəsi","Çərşənbə axşamı","Çərşənbə","Cümə axşamı","Cümə","Şənbə"],daysShort:["B.","B.e","Ç.a","Ç.","C.a","C.","Ş."],daysMin:["B.","B.e","Ç.a","Ç.","C.a","C.","Ş."],months:["Yanvar","Fevral","Mart","Aprel","May","İyun","İyul","Avqust","Sentyabr","Oktyabr","Noyabr","Dekabr"],monthsShort:["Yan","Fev","Mar","Apr","May","İyun","İyul","Avq","Sen","Okt","Noy","Dek"],today:"Bu gün",weekStart:1,clear:"Təmizlə",monthsTitle:"Aylar"}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.bg.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.bg.min.js new file mode 100644 index 0000000000..28e8b22dcf --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.bg.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates.bg={days:["Неделя","Понеделник","Вторник","Сряда","Четвъртък","Петък","Събота"],daysShort:["Нед","Пон","Вто","Сря","Чет","Пет","Съб"],daysMin:["Н","П","В","С","Ч","П","С"],months:["Януари","Февруари","Март","Април","Май","Юни","Юли","Август","Септември","Октомври","Ноември","Декември"],monthsShort:["Ян","Фев","Мар","Апр","Май","Юни","Юли","Авг","Сеп","Окт","Ное","Дек"],today:"днес"}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.bm.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.bm.min.js new file mode 100644 index 0000000000..e0796a3ba7 --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.bm.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates.bm={days:["Kari","Ntɛnɛn","Tarata","Araba","Alamisa","Juma","Sibiri"],daysShort:["Kar","Ntɛ","Tar","Ara","Ala","Jum","Sib"],daysMin:["Ka","Nt","Ta","Ar","Al","Ju","Si"],months:["Zanwuyekalo","Fewuruyekalo","Marisikalo","Awirilikalo","Mɛkalo","Zuwɛnkalo","Zuluyekalo","Utikalo","Sɛtanburukalo","ɔkutɔburukalo","Nowanburukalo","Desanburukalo"],monthsShort:["Zan","Few","Mar","Awi","Mɛ","Zuw","Zul","Uti","Sɛt","ɔku","Now","Des"],today:"Bi",monthsTitle:"Kalo",clear:"Ka jɔsi",weekStart:1,format:"dd/mm/yyyy"}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.bn.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.bn.min.js new file mode 100644 index 0000000000..f67b5e26e7 --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.bn.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates.bn={days:["রবিবার","সোমবার","মঙ্গলবার","বুধবার","বৃহস্পতিবার","শুক্রবার","শনিবার"],daysShort:["রবিবার","সোমবার","মঙ্গলবার","বুধবার","বৃহস্পতিবার","শুক্রবার","শনিবার"],daysMin:["রবি","সোম","মঙ্গল","বুধ","বৃহস্পতি","শুক্র","শনি"],months:["জানুয়ারী","ফেব্রুয়ারি","মার্চ","এপ্রিল","মে","জুন","জুলাই","অগাস্ট","সেপ্টেম্বর","অক্টোবর","নভেম্বর","ডিসেম্বর"],monthsShort:["জানুয়ারী","ফেব্রুয়ারি","মার্চ","এপ্রিল","মে","জুন","জুলাই","অগাস্ট","সেপ্টেম্বর","অক্টোবর","নভেম্বর","ডিসেম্বর"],today:"আজ",monthsTitle:"মাস",clear:"পরিষ্কার",weekStart:0,format:"mm/dd/yyyy"}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.br.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.br.min.js new file mode 100644 index 0000000000..af3e3bd0af --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.br.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates.br={days:["Sul","Lun","Meurzh","Merc'her","Yaou","Gwener","Sadorn"],daysShort:["Sul","Lun","Meu.","Mer.","Yao.","Gwe.","Sad."],daysMin:["Su","L","Meu","Mer","Y","G","Sa"],months:["Genver","C'hwevrer","Meurzh","Ebrel","Mae","Mezheven","Gouere","Eost","Gwengolo","Here","Du","Kerzu"],monthsShort:["Genv.","C'hw.","Meur.","Ebre.","Mae","Mezh.","Goue.","Eost","Gwen.","Here","Du","Kerz."],today:"Hiziv",monthsTitle:"Miz",clear:"Dilemel",weekStart:1,format:"dd/mm/yyyy"}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.bs.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.bs.min.js new file mode 100644 index 0000000000..cfb06fde79 --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.bs.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates.bs={days:["Nedjelja","Ponedjeljak","Utorak","Srijeda","Četvrtak","Petak","Subota"],daysShort:["Ned","Pon","Uto","Sri","Čet","Pet","Sub"],daysMin:["N","Po","U","Sr","Č","Pe","Su"],months:["Januar","Februar","Mart","April","Maj","Juni","Juli","August","Septembar","Oktobar","Novembar","Decembar"],monthsShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],today:"Danas",weekStart:1,format:"dd.mm.yyyy"}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ca.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ca.min.js new file mode 100644 index 0000000000..ac107894c4 --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ca.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates.ca={days:["Diumenge","Dilluns","Dimarts","Dimecres","Dijous","Divendres","Dissabte"],daysShort:["Diu","Dil","Dmt","Dmc","Dij","Div","Dis"],daysMin:["dg","dl","dt","dc","dj","dv","ds"],months:["Gener","Febrer","Març","Abril","Maig","Juny","Juliol","Agost","Setembre","Octubre","Novembre","Desembre"],monthsShort:["Gen","Feb","Mar","Abr","Mai","Jun","Jul","Ago","Set","Oct","Nov","Des"],today:"Avui",monthsTitle:"Mesos",clear:"Esborrar",weekStart:1,format:"dd/mm/yyyy"}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.cs.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.cs.min.js new file mode 100644 index 0000000000..42dfd1a29d --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.cs.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates.cs={days:["Neděle","Pondělí","Úterý","Středa","Čtvrtek","Pátek","Sobota"],daysShort:["Ned","Pon","Úte","Stř","Čtv","Pát","Sob"],daysMin:["Ne","Po","Út","St","Čt","Pá","So"],months:["Leden","Únor","Březen","Duben","Květen","Červen","Červenec","Srpen","Září","Říjen","Listopad","Prosinec"],monthsShort:["Led","Úno","Bře","Dub","Kvě","Čer","Čnc","Srp","Zář","Říj","Lis","Pro"],today:"Dnes",clear:"Vymazat",monthsTitle:"Měsíc",weekStart:1,format:"dd.mm.yyyy"}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.cy.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.cy.min.js new file mode 100644 index 0000000000..f85ea031dd --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.cy.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates.cy={days:["Sul","Llun","Mawrth","Mercher","Iau","Gwener","Sadwrn"],daysShort:["Sul","Llu","Maw","Mer","Iau","Gwe","Sad"],daysMin:["Su","Ll","Ma","Me","Ia","Gwe","Sa"],months:["Ionawr","Chewfror","Mawrth","Ebrill","Mai","Mehefin","Gorfennaf","Awst","Medi","Hydref","Tachwedd","Rhagfyr"],monthsShort:["Ion","Chw","Maw","Ebr","Mai","Meh","Gor","Aws","Med","Hyd","Tach","Rha"],today:"Heddiw"}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.da.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.da.min.js new file mode 100644 index 0000000000..53c8180528 --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.da.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates.da={days:["Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag"],daysShort:["Søn","Man","Tir","Ons","Tor","Fre","Lør"],daysMin:["Sø","Ma","Ti","On","To","Fr","Lø"],months:["Januar","Februar","Marts","April","Maj","Juni","Juli","August","September","Oktober","November","December"],monthsShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],today:"I Dag",weekStart:1,clear:"Nulstil",format:"dd/mm/yyyy",monthsTitle:"Måneder"}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.de.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.de.min.js new file mode 100644 index 0000000000..1b5d6a2474 --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.de.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates.de={days:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],daysShort:["Son","Mon","Die","Mit","Don","Fre","Sam"],daysMin:["So","Mo","Di","Mi","Do","Fr","Sa"],months:["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],monthsShort:["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],today:"Heute",monthsTitle:"Monate",clear:"Löschen",weekStart:1,format:"dd.mm.yyyy"}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.el.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.el.min.js new file mode 100644 index 0000000000..046e9eb5ef --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.el.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates.el={days:["Κυριακή","Δευτέρα","Τρίτη","Τετάρτη","Πέμπτη","Παρασκευή","Σάββατο"],daysShort:["Κυρ","Δευ","Τρι","Τετ","Πεμ","Παρ","Σαβ"],daysMin:["Κυ","Δε","Τρ","Τε","Πε","Πα","Σα"],months:["Ιανουάριος","Φεβρουάριος","Μάρτιος","Απρίλιος","Μάιος","Ιούνιος","Ιούλιος","Αύγουστος","Σεπτέμβριος","Οκτώβριος","Νοέμβριος","Δεκέμβριος"],monthsShort:["Ιαν","Φεβ","Μαρ","Απρ","Μάι","Ιουν","Ιουλ","Αυγ","Σεπ","Οκτ","Νοε","Δεκ"],today:"Σήμερα",clear:"Καθαρισμός",weekStart:1,format:"d/m/yyyy"}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.en-AU.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.en-AU.min.js new file mode 100644 index 0000000000..b8d5f41cfa --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.en-AU.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates["en-AU"]={days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],daysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],daysMin:["Su","Mo","Tu","We","Th","Fr","Sa"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],monthsShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],today:"Today",monthsTitle:"Months",clear:"Clear",weekStart:1,format:"d/mm/yyyy"}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.en-CA.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.en-CA.min.js new file mode 100644 index 0000000000..7b1070f74d --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.en-CA.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates["en-CA"]={days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],daysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],daysMin:["Su","Mo","Tu","We","Th","Fr","Sa"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],monthsShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],today:"Today",monthsTitle:"Months",clear:"Clear",weekStart:0,format:"yyyy-mm-dd"}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.en-GB.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.en-GB.min.js new file mode 100644 index 0000000000..2966f5414e --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.en-GB.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates["en-GB"]={days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],daysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],daysMin:["Su","Mo","Tu","We","Th","Fr","Sa"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],monthsShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],today:"Today",monthsTitle:"Months",clear:"Clear",weekStart:1,format:"dd/mm/yyyy"}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.en-IE.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.en-IE.min.js new file mode 100644 index 0000000000..dc8f71c026 --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.en-IE.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates["en-IE"]={days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],daysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],daysMin:["Su","Mo","Tu","We","Th","Fr","Sa"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],monthsShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],today:"Today",monthsTitle:"Months",clear:"Clear",weekStart:1,format:"dd/mm/yyyy"}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.en-NZ.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.en-NZ.min.js new file mode 100644 index 0000000000..c374a8d40c --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.en-NZ.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates["en-NZ"]={days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],daysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],daysMin:["Su","Mo","Tu","We","Th","Fr","Sa"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],monthsShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],today:"Today",monthsTitle:"Months",clear:"Clear",weekStart:1,format:"d/mm/yyyy"}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.en-ZA.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.en-ZA.min.js new file mode 100644 index 0000000000..885a928cba --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.en-ZA.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates["en-ZA"]={days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],daysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],daysMin:["Su","Mo","Tu","We","Th","Fr","Sa"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],monthsShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],today:"Today",monthsTitle:"Months",clear:"Clear",weekStart:1,format:"yyyy/mm/d"}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.eo.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.eo.min.js new file mode 100644 index 0000000000..736db021ae --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.eo.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates.eo={days:["dimanĉo","lundo","mardo","merkredo","ĵaŭdo","vendredo","sabato"],daysShort:["dim.","lun.","mar.","mer.","ĵaŭ.","ven.","sam."],daysMin:["d","l","ma","me","ĵ","v","s"],months:["januaro","februaro","marto","aprilo","majo","junio","julio","aŭgusto","septembro","oktobro","novembro","decembro"],monthsShort:["jan.","feb.","mar.","apr.","majo","jun.","jul.","aŭg.","sep.","okt.","nov.","dec."],today:"Hodiaŭ",clear:"Nuligi",weekStart:1,format:"yyyy-mm-dd"}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.es.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.es.min.js new file mode 100644 index 0000000000..f3cef5d2b9 --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.es.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates.es={days:["Domingo","Lunes","Martes","Miércoles","Jueves","Viernes","Sábado"],daysShort:["Dom","Lun","Mar","Mié","Jue","Vie","Sáb"],daysMin:["Do","Lu","Ma","Mi","Ju","Vi","Sa"],months:["Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"],monthsShort:["Ene","Feb","Mar","Abr","May","Jun","Jul","Ago","Sep","Oct","Nov","Dic"],today:"Hoy",monthsTitle:"Meses",clear:"Borrar",weekStart:1,format:"dd/mm/yyyy"}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.et.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.et.min.js new file mode 100644 index 0000000000..34cd9c60e9 --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.et.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates.et={days:["Pühapäev","Esmaspäev","Teisipäev","Kolmapäev","Neljapäev","Reede","Laupäev"],daysShort:["Pühap","Esmasp","Teisip","Kolmap","Neljap","Reede","Laup"],daysMin:["P","E","T","K","N","R","L"],months:["Jaanuar","Veebruar","Märts","Aprill","Mai","Juuni","Juuli","August","September","Oktoober","November","Detsember"],monthsShort:["Jaan","Veebr","Märts","Apr","Mai","Juuni","Juuli","Aug","Sept","Okt","Nov","Dets"],today:"Täna",clear:"Tühjenda",weekStart:1,format:"dd.mm.yyyy"}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.eu.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.eu.min.js new file mode 100644 index 0000000000..c5aa359e48 --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.eu.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates.eu={days:["Igandea","Astelehena","Asteartea","Asteazkena","Osteguna","Ostirala","Larunbata"],daysShort:["Ig","Al","Ar","Az","Og","Ol","Lr"],daysMin:["Ig","Al","Ar","Az","Og","Ol","Lr"],months:["Urtarrila","Otsaila","Martxoa","Apirila","Maiatza","Ekaina","Uztaila","Abuztua","Iraila","Urria","Azaroa","Abendua"],monthsShort:["Urt","Ots","Mar","Api","Mai","Eka","Uzt","Abu","Ira","Urr","Aza","Abe"],today:"Gaur",monthsTitle:"Hilabeteak",clear:"Ezabatu",weekStart:1,format:"yyyy/mm/dd"}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.fa.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.fa.min.js new file mode 100644 index 0000000000..8575237a07 --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.fa.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates.fa={days:["یک‌شنبه","دوشنبه","سه‌شنبه","چهارشنبه","پنج‌شنبه","جمعه","شنبه","یک‌شنبه"],daysShort:["یک","دو","سه","چهار","پنج","جمعه","شنبه","یک"],daysMin:["ی","د","س","چ","پ","ج","ش","ی"],months:["ژانویه","فوریه","مارس","آوریل","مه","ژوئن","ژوئیه","اوت","سپتامبر","اکتبر","نوامبر","دسامبر"],monthsShort:["ژان","فور","مار","آور","مه","ژون","ژوی","اوت","سپت","اکت","نوا","دسا"],today:"امروز",clear:"پاک کن",weekStart:1,format:"yyyy/mm/dd"}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.fi.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.fi.min.js new file mode 100644 index 0000000000..239dfb796c --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.fi.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates.fi={days:["sunnuntai","maanantai","tiistai","keskiviikko","torstai","perjantai","lauantai"],daysShort:["sun","maa","tii","kes","tor","per","lau"],daysMin:["su","ma","ti","ke","to","pe","la"],months:["tammikuu","helmikuu","maaliskuu","huhtikuu","toukokuu","kesäkuu","heinäkuu","elokuu","syyskuu","lokakuu","marraskuu","joulukuu"],monthsShort:["tam","hel","maa","huh","tou","kes","hei","elo","syy","lok","mar","jou"],today:"tänään",clear:"Tyhjennä",weekStart:1,format:"d.m.yyyy"}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.fo.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.fo.min.js new file mode 100644 index 0000000000..fa24e3a127 --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.fo.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates.fo={days:["Sunnudagur","Mánadagur","Týsdagur","Mikudagur","Hósdagur","Fríggjadagur","Leygardagur"],daysShort:["Sun","Mán","Týs","Mik","Hós","Frí","Ley"],daysMin:["Su","Má","Tý","Mi","Hó","Fr","Le"],months:["Januar","Februar","Marts","Apríl","Mei","Juni","Juli","August","Septembur","Oktobur","Novembur","Desembur"],monthsShort:["Jan","Feb","Mar","Apr","Mei","Jun","Jul","Aug","Sep","Okt","Nov","Des"],today:"Í Dag",clear:"Reinsa"}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.fr-CH.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.fr-CH.min.js new file mode 100644 index 0000000000..1c6bcdcbfc --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.fr-CH.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates.fr={days:["Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi"],daysShort:["Dim","Lun","Mar","Mer","Jeu","Ven","Sam"],daysMin:["D","L","Ma","Me","J","V","S"],months:["Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Août","Septembre","Octobre","Novembre","Décembre"],monthsShort:["Jan","Fév","Mar","Avr","Mai","Jui","Jul","Aou","Sep","Oct","Nov","Déc"],today:"Aujourd'hui",monthsTitle:"Mois",clear:"Effacer",weekStart:1,format:"dd.mm.yyyy"}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.fr.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.fr.min.js new file mode 100644 index 0000000000..244cfba800 --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.fr.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates.fr={days:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],daysShort:["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],daysMin:["d","l","ma","me","j","v","s"],months:["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],monthsShort:["janv.","févr.","mars","avril","mai","juin","juil.","août","sept.","oct.","nov.","déc."],today:"Aujourd'hui",monthsTitle:"Mois",clear:"Effacer",weekStart:1,format:"dd/mm/yyyy"}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.gl.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.gl.min.js new file mode 100644 index 0000000000..3d92606b3b --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.gl.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates.gl={days:["Domingo","Luns","Martes","Mércores","Xoves","Venres","Sábado"],daysShort:["Dom","Lun","Mar","Mér","Xov","Ven","Sáb"],daysMin:["Do","Lu","Ma","Me","Xo","Ve","Sa"],months:["Xaneiro","Febreiro","Marzo","Abril","Maio","Xuño","Xullo","Agosto","Setembro","Outubro","Novembro","Decembro"],monthsShort:["Xan","Feb","Mar","Abr","Mai","Xun","Xul","Ago","Sep","Out","Nov","Dec"],today:"Hoxe",clear:"Limpar",weekStart:1,format:"dd/mm/yyyy"}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.he.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.he.min.js new file mode 100644 index 0000000000..191cb453a0 --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.he.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates.he={days:["ראשון","שני","שלישי","רביעי","חמישי","שישי","שבת","ראשון"],daysShort:["א","ב","ג","ד","ה","ו","ש","א"],daysMin:["א","ב","ג","ד","ה","ו","ש","א"],months:["ינואר","פברואר","מרץ","אפריל","מאי","יוני","יולי","אוגוסט","ספטמבר","אוקטובר","נובמבר","דצמבר"],monthsShort:["ינו","פבר","מרץ","אפר","מאי","יונ","יול","אוג","ספט","אוק","נוב","דצמ"],today:"היום",rtl:!0}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.hi.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.hi.min.js new file mode 100644 index 0000000000..635baffa8b --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.hi.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates.hi={days:["रविवार","सोमवार","मंगलवार","बुधवार","गुरुवार","शुक्रवार","शनिवार"],daysShort:["सूर्य","सोम","मंगल","बुध","गुरु","शुक्र","शनि"],daysMin:["र","सो","मं","बु","गु","शु","श"],months:["जनवरी","फ़रवरी","मार्च","अप्रैल","मई","जून","जुलाई","अगस्त","सितम्बर","अक्टूबर","नवंबर","दिसम्बर"],monthsShort:["जन","फ़रवरी","मार्च","अप्रैल","मई","जून","जुलाई","अगस्त","सितं","अक्टूबर","नवं","दिसम्बर"],today:"आज",monthsTitle:"महीने",clear:"साफ",weekStart:1,format:"dd / mm / yyyy"}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.hr.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.hr.min.js new file mode 100644 index 0000000000..8b34bce0fd --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.hr.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates.hr={days:["Nedjelja","Ponedjeljak","Utorak","Srijeda","Četvrtak","Petak","Subota"],daysShort:["Ned","Pon","Uto","Sri","Čet","Pet","Sub"],daysMin:["Ne","Po","Ut","Sr","Če","Pe","Su"],months:["Siječanj","Veljača","Ožujak","Travanj","Svibanj","Lipanj","Srpanj","Kolovoz","Rujan","Listopad","Studeni","Prosinac"],monthsShort:["Sij","Velj","Ožu","Tra","Svi","Lip","Srp","Kol","Ruj","Lis","Stu","Pro"],today:"Danas"}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.hu.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.hu.min.js new file mode 100644 index 0000000000..f9decf9a2c --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.hu.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates.hu={days:["vasárnap","hétfő","kedd","szerda","csütörtök","péntek","szombat"],daysShort:["vas","hét","ked","sze","csü","pén","szo"],daysMin:["V","H","K","Sze","Cs","P","Szo"],months:["január","február","március","április","május","június","július","augusztus","szeptember","október","november","december"],monthsShort:["jan","feb","már","ápr","máj","jún","júl","aug","sze","okt","nov","dec"],today:"ma",weekStart:1,clear:"töröl",titleFormat:"yyyy. MM",format:"yyyy.mm.dd"}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.hy.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.hy.min.js new file mode 100644 index 0000000000..a1cf653d38 --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.hy.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates.hy={days:["Կիրակի","Երկուշաբթի","Երեքշաբթի","Չորեքշաբթի","Հինգշաբթի","Ուրբաթ","Շաբաթ"],daysShort:["Կիր","Երկ","Երե","Չոր","Հին","Ուրբ","Շաբ"],daysMin:["Կի","Եկ","Եք","Չո","Հի","Ու","Շա"],months:["Հունվար","Փետրվար","Մարտ","Ապրիլ","Մայիս","Հունիս","Հուլիս","Օգոստոս","Սեպտեմբեր","Հոկտեմբեր","Նոյեմբեր","Դեկտեմբեր"],monthsShort:["Հնվ","Փետ","Մար","Ապր","Մայ","Հուն","Հուլ","Օգս","Սեպ","Հոկ","Նոյ","Դեկ"],today:"Այսօր",clear:"Ջնջել",format:"dd.mm.yyyy",weekStart:1,monthsTitle:"Ամիսնէր"}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.id.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.id.min.js new file mode 100644 index 0000000000..7c3220a643 --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.id.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates.id={days:["Minggu","Senin","Selasa","Rabu","Kamis","Jumat","Sabtu"],daysShort:["Mgu","Sen","Sel","Rab","Kam","Jum","Sab"],daysMin:["Mg","Sn","Sl","Ra","Ka","Ju","Sa"],months:["Januari","Februari","Maret","April","Mei","Juni","Juli","Agustus","September","Oktober","November","Desember"],monthsShort:["Jan","Feb","Mar","Apr","Mei","Jun","Jul","Ags","Sep","Okt","Nov","Des"],today:"Hari Ini",clear:"Kosongkan"}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.is.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.is.min.js new file mode 100644 index 0000000000..f49bd18cc2 --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.is.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates.is={days:["Sunnudagur","Mánudagur","Þriðjudagur","Miðvikudagur","Fimmtudagur","Föstudagur","Laugardagur"],daysShort:["Sun","Mán","Þri","Mið","Fim","Fös","Lau"],daysMin:["Su","Má","Þr","Mi","Fi","Fö","La"],months:["Janúar","Febrúar","Mars","Apríl","Maí","Júní","Júlí","Ágúst","September","Október","Nóvember","Desember"],monthsShort:["Jan","Feb","Mar","Apr","Maí","Jún","Júl","Ágú","Sep","Okt","Nóv","Des"],today:"Í Dag"}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.it-CH.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.it-CH.min.js new file mode 100644 index 0000000000..7e1adbb95d --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.it-CH.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates.it={days:["Domenica","Lunedì","Martedì","Mercoledì","Giovedì","Venerdì","Sabato"],daysShort:["Dom","Lun","Mar","Mer","Gio","Ven","Sab"],daysMin:["Do","Lu","Ma","Me","Gi","Ve","Sa"],months:["Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre"],monthsShort:["Gen","Feb","Mar","Apr","Mag","Giu","Lug","Ago","Set","Ott","Nov","Dic"],today:"Oggi",clear:"Cancella",weekStart:1,format:"dd.mm.yyyy"}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.it.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.it.min.js new file mode 100644 index 0000000000..cc30766ffa --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.it.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates.it={days:["Domenica","Lunedì","Martedì","Mercoledì","Giovedì","Venerdì","Sabato"],daysShort:["Dom","Lun","Mar","Mer","Gio","Ven","Sab"],daysMin:["Do","Lu","Ma","Me","Gi","Ve","Sa"],months:["Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre"],monthsShort:["Gen","Feb","Mar","Apr","Mag","Giu","Lug","Ago","Set","Ott","Nov","Dic"],today:"Oggi",monthsTitle:"Mesi",clear:"Cancella",weekStart:1,format:"dd/mm/yyyy"}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ja.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ja.min.js new file mode 100644 index 0000000000..e321f04ffe --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ja.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates.ja={days:["日曜","月曜","火曜","水曜","木曜","金曜","土曜"],daysShort:["日","月","火","水","木","金","土"],daysMin:["日","月","火","水","木","金","土"],months:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],monthsShort:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],today:"今日",format:"yyyy/mm/dd",titleFormat:"yyyy年mm月",clear:"クリア"}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ka.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ka.min.js new file mode 100644 index 0000000000..84f14c0e90 --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ka.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates.ka={days:["კვირა","ორშაბათი","სამშაბათი","ოთხშაბათი","ხუთშაბათი","პარასკევი","შაბათი"],daysShort:["კვი","ორშ","სამ","ოთხ","ხუთ","პარ","შაბ"],daysMin:["კვ","ორ","სა","ოთ","ხუ","პა","შა"],months:["იანვარი","თებერვალი","მარტი","აპრილი","მაისი","ივნისი","ივლისი","აგვისტო","სექტემბერი","ოქტომბერი","ნოემბერი","დეკემბერი"],monthsShort:["იან","თებ","მარ","აპრ","მაი","ივნ","ივლ","აგვ","სექ","ოქტ","ნოე","დეკ"],today:"დღეს",clear:"გასუფთავება",weekStart:1,format:"dd.mm.yyyy"}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.kh.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.kh.min.js new file mode 100644 index 0000000000..bf2abc5d82 --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.kh.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates.kh={days:["អាទិត្យ","ចន្ទ","អង្គារ","ពុធ","ព្រហស្បតិ៍","សុក្រ","សៅរ៍"],daysShort:["អា.ទិ","ចន្ទ","អង្គារ","ពុធ","ព្រ.ហ","សុក្រ","សៅរ៍"],daysMin:["អា.ទិ","ចន្ទ","អង្គារ","ពុធ","ព្រ.ហ","សុក្រ","សៅរ៍"],months:["មករា","កុម្ភះ","មិនា","មេសា","ឧសភា","មិថុនា","កក្កដា","សីហា","កញ្ញា","តុលា","វិច្ឆិកា","ធ្នូ"],monthsShort:["មករា","កុម្ភះ","មិនា","មេសា","ឧសភា","មិថុនា","កក្កដា","សីហា","កញ្ញា","តុលា","វិច្ឆិកា","ធ្នូ"],today:"ថ្ងៃនេះ",clear:"សំអាត"},a.fn.datepicker.deprecated('The language code "kh" is deprecated and will be removed in 2.0. For Khmer support use "km" instead.')}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.kk.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.kk.min.js new file mode 100644 index 0000000000..f4e2f3f1a2 --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.kk.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates.kk={days:["Жексенбі","Дүйсенбі","Сейсенбі","Сәрсенбі","Бейсенбі","Жұма","Сенбі"],daysShort:["Жек","Дүй","Сей","Сәр","Бей","Жұм","Сен"],daysMin:["Жк","Дс","Сс","Ср","Бс","Жм","Сн"],months:["Қаңтар","Ақпан","Наурыз","Сәуір","Мамыр","Маусым","Шілде","Тамыз","Қыркүйек","Қазан","Қараша","Желтоқсан"],monthsShort:["Қаң","Ақп","Нау","Сәу","Мам","Мау","Шіл","Там","Қыр","Қаз","Қар","Жел"],today:"Бүгін",weekStart:1}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.km.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.km.min.js new file mode 100644 index 0000000000..648d83f84f --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.km.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates.km={days:["អាទិត្យ","ចន្ទ","អង្គារ","ពុធ","ព្រហស្បតិ៍","សុក្រ","សៅរ៍"],daysShort:["អា.ទិ","ចន្ទ","អង្គារ","ពុធ","ព្រ.ហ","សុក្រ","សៅរ៍"],daysMin:["អា.ទិ","ចន្ទ","អង្គារ","ពុធ","ព្រ.ហ","សុក្រ","សៅរ៍"],months:["មករា","កុម្ភះ","មិនា","មេសា","ឧសភា","មិថុនា","កក្កដា","សីហា","កញ្ញា","តុលា","វិច្ឆិកា","ធ្នូ"],monthsShort:["មករា","កុម្ភះ","មិនា","មេសា","ឧសភា","មិថុនា","កក្កដា","សីហា","កញ្ញា","តុលា","វិច្ឆិកា","ធ្នូ"],today:"ថ្ងៃនេះ",clear:"សំអាត"}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ko.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ko.min.js new file mode 100644 index 0000000000..9751ee5c22 --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ko.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates.ko={days:["일요일","월요일","화요일","수요일","목요일","금요일","토요일"],daysShort:["일","월","화","수","목","금","토"],daysMin:["일","월","화","수","목","금","토"],months:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],monthsShort:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],today:"오늘",clear:"삭제",format:"yyyy-mm-dd",titleFormat:"yyyy년mm월",weekStart:0}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.kr.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.kr.min.js new file mode 100644 index 0000000000..43393409e0 --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.kr.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates.kr={days:["일요일","월요일","화요일","수요일","목요일","금요일","토요일"],daysShort:["일","월","화","수","목","금","토"],daysMin:["일","월","화","수","목","금","토"],months:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"],monthsShort:["1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"]},a.fn.datepicker.deprecated('The language code "kr" is deprecated and will be removed in 2.0. For korean support use "ko" instead.')}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.lt.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.lt.min.js new file mode 100644 index 0000000000..da78ea85f3 --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.lt.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates.lt={days:["Sekmadienis","Pirmadienis","Antradienis","Trečiadienis","Ketvirtadienis","Penktadienis","Šeštadienis"],daysShort:["S","Pr","A","T","K","Pn","Š"],daysMin:["Sk","Pr","An","Tr","Ke","Pn","Št"],months:["Sausis","Vasaris","Kovas","Balandis","Gegužė","Birželis","Liepa","Rugpjūtis","Rugsėjis","Spalis","Lapkritis","Gruodis"],monthsShort:["Sau","Vas","Kov","Bal","Geg","Bir","Lie","Rugp","Rugs","Spa","Lap","Gru"],today:"Šiandien",monthsTitle:"Mėnesiai",clear:"Išvalyti",weekStart:1,format:"yyyy-mm-dd"}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.lv.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.lv.min.js new file mode 100644 index 0000000000..89cea00f8b --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.lv.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates.lv={days:["Svētdiena","Pirmdiena","Otrdiena","Trešdiena","Ceturtdiena","Piektdiena","Sestdiena"],daysShort:["Sv","P","O","T","C","Pk","S"],daysMin:["Sv","Pr","Ot","Tr","Ce","Pk","Se"],months:["Janvāris","Februāris","Marts","Aprīlis","Maijs","Jūnijs","Jūlijs","Augusts","Septembris","Oktobris","Novembris","Decembris"],monthsShort:["Jan","Feb","Mar","Apr","Mai","Jūn","Jūl","Aug","Sep","Okt","Nov","Dec"],monthsTitle:"Mēneši",today:"Šodien",clear:"Nodzēst",weekStart:1}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.me.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.me.min.js new file mode 100644 index 0000000000..c65a891646 --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.me.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates.me={days:["Nedjelja","Ponedjeljak","Utorak","Srijeda","Četvrtak","Petak","Subota"],daysShort:["Ned","Pon","Uto","Sri","Čet","Pet","Sub"],daysMin:["Ne","Po","Ut","Sr","Če","Pe","Su"],months:["Januar","Februar","Mart","April","Maj","Jun","Jul","Avgust","Septembar","Oktobar","Novembar","Decembar"],monthsShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Avg","Sep","Okt","Nov","Dec"],today:"Danas",weekStart:1,clear:"Izbriši",format:"dd.mm.yyyy"}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.mk.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.mk.min.js new file mode 100644 index 0000000000..46423f7581 --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.mk.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates.mk={days:["Недела","Понеделник","Вторник","Среда","Четврток","Петок","Сабота"],daysShort:["Нед","Пон","Вто","Сре","Чет","Пет","Саб"],daysMin:["Не","По","Вт","Ср","Че","Пе","Са"],months:["Јануари","Февруари","Март","Април","Мај","Јуни","Јули","Август","Септември","Октомври","Ноември","Декември"],monthsShort:["Јан","Фев","Мар","Апр","Мај","Јун","Јул","Авг","Сеп","Окт","Ное","Дек"],today:"Денес",format:"dd.mm.yyyy"}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.mn.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.mn.min.js new file mode 100644 index 0000000000..6ebaec9d86 --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.mn.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates.mn={days:["Ням","Даваа","Мягмар","Лхагва","Пүрэв","Баасан","Бямба"],daysShort:["Ням","Дав","Мяг","Лха","Пүр","Баа","Бям"],daysMin:["Ня","Да","Мя","Лх","Пү","Ба","Бя"],months:["Хулгана","Үхэр","Бар","Туулай","Луу","Могой","Морь","Хонь","Бич","Тахиа","Нохой","Гахай"],monthsShort:["Хул","Үхэ","Бар","Туу","Луу","Мог","Мор","Хон","Бич","Тах","Нох","Гах"],today:"Өнөөдөр",clear:"Тодорхой",format:"yyyy.mm.dd",weekStart:1}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ms.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ms.min.js new file mode 100644 index 0000000000..47efafdc2f --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ms.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates.ms={days:["Ahad","Isnin","Selasa","Rabu","Khamis","Jumaat","Sabtu"],daysShort:["Aha","Isn","Sel","Rab","Kha","Jum","Sab"],daysMin:["Ah","Is","Se","Ra","Kh","Ju","Sa"],months:["Januari","Februari","Mac","April","Mei","Jun","Julai","Ogos","September","Oktober","November","Disember"],monthsShort:["Jan","Feb","Mar","Apr","Mei","Jun","Jul","Ogo","Sep","Okt","Nov","Dis"],today:"Hari Ini",clear:"Bersihkan"}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.nl-BE.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.nl-BE.min.js new file mode 100644 index 0000000000..85d3146df1 --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.nl-BE.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates["nl-BE"]={days:["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"],daysShort:["zo","ma","di","wo","do","vr","za"],daysMin:["zo","ma","di","wo","do","vr","za"],months:["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],monthsShort:["jan","feb","mrt","apr","mei","jun","jul","aug","sep","okt","nov","dec"],today:"Vandaag",monthsTitle:"Maanden",clear:"Leegmaken",weekStart:1,format:"dd/mm/yyyy"}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.nl.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.nl.min.js new file mode 100644 index 0000000000..af977b71ea --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.nl.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates.nl={days:["zondag","maandag","dinsdag","woensdag","donderdag","vrijdag","zaterdag"],daysShort:["zo","ma","di","wo","do","vr","za"],daysMin:["zo","ma","di","wo","do","vr","za"],months:["januari","februari","maart","april","mei","juni","juli","augustus","september","oktober","november","december"],monthsShort:["jan","feb","mrt","apr","mei","jun","jul","aug","sep","okt","nov","dec"],today:"Vandaag",monthsTitle:"Maanden",clear:"Wissen",weekStart:1,format:"dd-mm-yyyy"}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.no.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.no.min.js new file mode 100644 index 0000000000..0c5136e441 --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.no.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates.no={days:["søndag","mandag","tirsdag","onsdag","torsdag","fredag","lørdag"],daysShort:["søn","man","tir","ons","tor","fre","lør"],daysMin:["sø","ma","ti","on","to","fr","lø"],months:["januar","februar","mars","april","mai","juni","juli","august","september","oktober","november","desember"],monthsShort:["jan","feb","mar","apr","mai","jun","jul","aug","sep","okt","nov","des"],today:"i dag",monthsTitle:"Måneder",clear:"Nullstill",weekStart:1,format:"dd.mm.yyyy"}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.oc.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.oc.min.js new file mode 100644 index 0000000000..630fa16b96 --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.oc.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates.oc={days:["Dimenge","Diluns","Dimars","Dimècres","Dijòus","Divendres","Dissabte"],daysShort:["Dim","Dil","Dmr","Dmc","Dij","Div","Dis"],daysMin:["dg","dl","dr","dc","dj","dv","ds"],months:["Genièr","Febrièr","Març","Abrial","Mai","Junh","Julhet","Agost","Setembre","Octobre","Novembre","Decembre"],monthsShort:["Gen","Feb","Mar","Abr","Mai","Jun","Jul","Ago","Set","Oct","Nov","Dec"],today:"Uèi",monthsTitle:"Meses",clear:"Escafar",weekStart:1,format:"dd/mm/yyyy"}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.pl.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.pl.min.js new file mode 100644 index 0000000000..ffb30ec8b1 --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.pl.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates.pl={days:["Niedziela","Poniedziałek","Wtorek","Środa","Czwartek","Piątek","Sobota"],daysShort:["Niedz.","Pon.","Wt.","Śr.","Czw.","Piąt.","Sob."],daysMin:["Ndz.","Pn.","Wt.","Śr.","Czw.","Pt.","Sob."],months:["Styczeń","Luty","Marzec","Kwiecień","Maj","Czerwiec","Lipiec","Sierpień","Wrzesień","Październik","Listopad","Grudzień"],monthsShort:["Sty.","Lut.","Mar.","Kwi.","Maj","Cze.","Lip.","Sie.","Wrz.","Paź.","Lis.","Gru."],today:"Dzisiaj",weekStart:1,clear:"Wyczyść",format:"dd.mm.yyyy"}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.pt-BR.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.pt-BR.min.js new file mode 100644 index 0000000000..2d3f8afdac --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.pt-BR.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates["pt-BR"]={days:["Domingo","Segunda","Terça","Quarta","Quinta","Sexta","Sábado"],daysShort:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],daysMin:["Do","Se","Te","Qu","Qu","Se","Sa"],months:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],monthsShort:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],today:"Hoje",monthsTitle:"Meses",clear:"Limpar",format:"dd/mm/yyyy"}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.pt.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.pt.min.js new file mode 100644 index 0000000000..e2b4e64d77 --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.pt.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates.pt={days:["Domingo","Segunda","Terça","Quarta","Quinta","Sexta","Sábado"],daysShort:["Dom","Seg","Ter","Qua","Qui","Sex","Sáb"],daysMin:["Do","Se","Te","Qu","Qu","Se","Sa"],months:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],monthsShort:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],today:"Hoje",monthsTitle:"Meses",clear:"Limpar",format:"dd/mm/yyyy"}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ro.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ro.min.js new file mode 100644 index 0000000000..5fff2986df --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ro.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates.ro={days:["Duminică","Luni","Marţi","Miercuri","Joi","Vineri","Sâmbătă"],daysShort:["Dum","Lun","Mar","Mie","Joi","Vin","Sâm"],daysMin:["Du","Lu","Ma","Mi","Jo","Vi","Sâ"],months:["Ianuarie","Februarie","Martie","Aprilie","Mai","Iunie","Iulie","August","Septembrie","Octombrie","Noiembrie","Decembrie"],monthsShort:["Ian","Feb","Mar","Apr","Mai","Iun","Iul","Aug","Sep","Oct","Nov","Dec"],today:"Astăzi",clear:"Șterge",weekStart:1,format:"dd/mm/yyyy"}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.rs-latin.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.rs-latin.min.js new file mode 100644 index 0000000000..e520c95733 --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.rs-latin.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates["rs-latin"]={days:["Nedelja","Ponedeljak","Utorak","Sreda","Četvrtak","Petak","Subota"],daysShort:["Ned","Pon","Uto","Sre","Čet","Pet","Sub"],daysMin:["N","Po","U","Sr","Č","Pe","Su"],months:["Januar","Februar","Mart","April","Maj","Jun","Jul","Avgust","Septembar","Oktobar","Novembar","Decembar"],monthsShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Avg","Sep","Okt","Nov","Dec"],today:"Danas",weekStart:1,format:"dd.mm.yyyy"},a.fn.datepicker.deprecated('This language code "rs-latin" is deprecated (invalid serbian language code) and will be removed in 2.0. For Serbian latin support use "sr-latin" instead.')}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.rs.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.rs.min.js new file mode 100644 index 0000000000..ba95ae298f --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.rs.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates.rs={days:["Недеља","Понедељак","Уторак","Среда","Четвртак","Петак","Субота"],daysShort:["Нед","Пон","Уто","Сре","Чет","Пет","Суб"],daysMin:["Н","По","У","Ср","Ч","Пе","Су"],months:["Јануар","Фебруар","Март","Април","Мај","Јун","Јул","Август","Септембар","Октобар","Новембар","Децембар"],monthsShort:["Јан","Феб","Мар","Апр","Мај","Јун","Јул","Авг","Сеп","Окт","Нов","Дец"],today:"Данас",weekStart:1,format:"dd.mm.yyyy"},a.fn.datepicker.deprecated('This language code "rs" is deprecated (invalid serbian language code) and will be removed in 2.0. For Serbian support use "sr" instead.')}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ru.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ru.min.js new file mode 100644 index 0000000000..52bc010b97 --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ru.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates.ru={days:["Воскресенье","Понедельник","Вторник","Среда","Четверг","Пятница","Суббота"],daysShort:["Вск","Пнд","Втр","Срд","Чтв","Птн","Суб"],daysMin:["Вс","Пн","Вт","Ср","Чт","Пт","Сб"],months:["Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"],monthsShort:["Янв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"],today:"Сегодня",clear:"Очистить",format:"dd.mm.yyyy",weekStart:1,monthsTitle:"Месяцы"}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.si.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.si.min.js new file mode 100644 index 0000000000..b9746b8fc1 --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.si.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates.si={days:["ඉරිදා","සඳුදා","අඟහරුවාදා","බදාදා","බ්‍රහස්පතින්දා","සිකුරාදා","සෙනසුරාදා"],daysShort:["ඉරි","සඳු","අඟ","බදා","බ්‍රහ","සිකු","සෙන"],daysMin:["ඉ","ස","අ","බ","බ්‍ර","සි","සෙ"],months:["ජනවාරි","පෙබරවාරි","මාර්තු","අප්‍රේල්","මැයි","ජුනි","ජූලි","අගෝස්තු","සැප්තැම්බර්","ඔක්තෝබර්","නොවැම්බර්","දෙසැම්බර්"],monthsShort:["ජන","පෙබ","මාර්","අප්‍රේ","මැයි","ජුනි","ජූලි","අගෝ","සැප්","ඔක්","නොවැ","දෙසැ"],today:"අද",monthsTitle:"මාස",clear:"මකන්න",weekStart:0,format:"yyyy-mm-dd"}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.sk.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.sk.min.js new file mode 100644 index 0000000000..79a9267fd5 --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.sk.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates.sk={days:["Nedeľa","Pondelok","Utorok","Streda","Štvrtok","Piatok","Sobota"],daysShort:["Ned","Pon","Uto","Str","Štv","Pia","Sob"],daysMin:["Ne","Po","Ut","St","Št","Pia","So"],months:["Január","Február","Marec","Apríl","Máj","Jún","Júl","August","September","Október","November","December"],monthsShort:["Jan","Feb","Mar","Apr","Máj","Jún","Júl","Aug","Sep","Okt","Nov","Dec"],today:"Dnes",clear:"Vymazať",weekStart:1,format:"d.m.yyyy"}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.sl.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.sl.min.js new file mode 100644 index 0000000000..831cf73903 --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.sl.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates.sl={days:["Nedelja","Ponedeljek","Torek","Sreda","Četrtek","Petek","Sobota"],daysShort:["Ned","Pon","Tor","Sre","Čet","Pet","Sob"],daysMin:["Ne","Po","To","Sr","Če","Pe","So"],months:["Januar","Februar","Marec","April","Maj","Junij","Julij","Avgust","September","Oktober","November","December"],monthsShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Avg","Sep","Okt","Nov","Dec"],today:"Danes",weekStart:1}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.sq.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.sq.min.js new file mode 100644 index 0000000000..8c586055a0 --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.sq.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates.sq={days:["E Diel","E Hënë","E Martē","E Mërkurë","E Enjte","E Premte","E Shtunë"],daysShort:["Die","Hën","Mar","Mër","Enj","Pre","Shtu"],daysMin:["Di","Hë","Ma","Më","En","Pr","Sht"],months:["Janar","Shkurt","Mars","Prill","Maj","Qershor","Korrik","Gusht","Shtator","Tetor","Nëntor","Dhjetor"],monthsShort:["Jan","Shk","Mar","Pri","Maj","Qer","Korr","Gu","Sht","Tet","Nën","Dhjet"],monthsTitle:"Muaj",today:"Sot",weekStart:1,format:"dd/mm/yyyy",clear:"Pastro"}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.sr-latin.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.sr-latin.min.js new file mode 100644 index 0000000000..c6b7001ace --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.sr-latin.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates["sr-latin"]={days:["Nedelja","Ponedeljak","Utorak","Sreda","Četvrtak","Petak","Subota"],daysShort:["Ned","Pon","Uto","Sre","Čet","Pet","Sub"],daysMin:["N","Po","U","Sr","Č","Pe","Su"],months:["Januar","Februar","Mart","April","Maj","Jun","Jul","Avgust","Septembar","Oktobar","Novembar","Decembar"],monthsShort:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Avg","Sep","Okt","Nov","Dec"],today:"Danas",weekStart:1,format:"dd.mm.yyyy"}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.sr.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.sr.min.js new file mode 100644 index 0000000000..4e46dbf64b --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.sr.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates.sr={days:["Недеља","Понедељак","Уторак","Среда","Четвртак","Петак","Субота"],daysShort:["Нед","Пон","Уто","Сре","Чет","Пет","Суб"],daysMin:["Н","По","У","Ср","Ч","Пе","Су"],months:["Јануар","Фебруар","Март","Април","Мај","Јун","Јул","Август","Септембар","Октобар","Новембар","Децембар"],monthsShort:["Јан","Феб","Мар","Апр","Мај","Јун","Јул","Авг","Сеп","Окт","Нов","Дец"],today:"Данас",weekStart:1,format:"dd.mm.yyyy"}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.sv.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.sv.min.js new file mode 100644 index 0000000000..7ab6becb92 --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.sv.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates.sv={days:["söndag","måndag","tisdag","onsdag","torsdag","fredag","lördag"],daysShort:["sön","mån","tis","ons","tor","fre","lör"],daysMin:["sö","må","ti","on","to","fr","lö"],months:["januari","februari","mars","april","maj","juni","juli","augusti","september","oktober","november","december"],monthsShort:["jan","feb","mar","apr","maj","jun","jul","aug","sep","okt","nov","dec"],today:"Idag",format:"yyyy-mm-dd",weekStart:1,clear:"Rensa"}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.sw.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.sw.min.js new file mode 100644 index 0000000000..454d3053cb --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.sw.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates.sw={days:["Jumapili","Jumatatu","Jumanne","Jumatano","Alhamisi","Ijumaa","Jumamosi"],daysShort:["J2","J3","J4","J5","Alh","Ij","J1"],daysMin:["2","3","4","5","A","I","1"],months:["Januari","Februari","Machi","Aprili","Mei","Juni","Julai","Agosti","Septemba","Oktoba","Novemba","Desemba"],monthsShort:["Jan","Feb","Mac","Apr","Mei","Jun","Jul","Ago","Sep","Okt","Nov","Des"],today:"Leo"}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ta.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ta.min.js new file mode 100644 index 0000000000..e7909494aa --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ta.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates.ta={days:["ஞாயிறு","திங்கள்","செவ்வாய்","புதன்","வியாழன்","வெள்ளி","சனி"],daysShort:["ஞாயி","திங்","செவ்","புத","வியா","வெள்","சனி"],daysMin:["ஞா","தி","செ","பு","வி","வெ","ச"],months:["ஜனவரி","பிப்ரவரி","மார்ச்","ஏப்ரல்","மே","ஜூன்","ஜூலை","ஆகஸ்டு","செப்டம்பர்","அக்டோபர்","நவம்பர்","டிசம்பர்"],monthsShort:["ஜன","பிப்","மார்","ஏப்","மே","ஜூன்","ஜூலை","ஆக","செப்","அக்","நவ","டிச"],today:"இன்று",monthsTitle:"மாதங்கள்",clear:"நீக்கு",weekStart:1,format:"dd/mm/yyyy"}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.tg.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.tg.min.js new file mode 100644 index 0000000000..104b6dd95b --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.tg.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates.tg={days:["Якшанбе","Душанбе","Сешанбе","Чоршанбе","Панҷшанбе","Ҷумъа","Шанбе"],daysShort:["Яшб","Дшб","Сшб","Чшб","Пшб","Ҷум","Шнб"],daysMin:["Яш","Дш","Сш","Чш","Пш","Ҷм","Шб"],months:["Январ","Феврал","Март","Апрел","Май","Июн","Июл","Август","Сентябр","Октябр","Ноябр","Декабр"],monthsShort:["Янв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"],today:"Имрӯз",monthsTitle:"Моҳҳо",clear:"Тоза намудан",weekStart:1,format:"dd.mm.yyyy"}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.th.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.th.min.js new file mode 100644 index 0000000000..1e398ba8bc --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.th.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates.th={days:["อาทิตย์","จันทร์","อังคาร","พุธ","พฤหัส","ศุกร์","เสาร์","อาทิตย์"],daysShort:["อา","จ","อ","พ","พฤ","ศ","ส","อา"],daysMin:["อา","จ","อ","พ","พฤ","ศ","ส","อา"],months:["มกราคม","กุมภาพันธ์","มีนาคม","เมษายน","พฤษภาคม","มิถุนายน","กรกฎาคม","สิงหาคม","กันยายน","ตุลาคม","พฤศจิกายน","ธันวาคม"],monthsShort:["ม.ค.","ก.พ.","มี.ค.","เม.ย.","พ.ค.","มิ.ย.","ก.ค.","ส.ค.","ก.ย.","ต.ค.","พ.ย.","ธ.ค."],today:"วันนี้"}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.tk.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.tk.min.js new file mode 100644 index 0000000000..716edef2ee --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.tk.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates.tk={days:["Ýekşenbe","Duşenbe","Sişenbe","Çarşenbe","Penşenbe","Anna","Şenbe"],daysShort:["Ýek","Duş","Siş","Çar","Pen","Ann","Şen"],daysMin:["Ýe","Du","Si","Ça","Pe","An","Şe"],months:["Ýanwar","Fewral","Mart","Aprel","Maý","Iýun","Iýul","Awgust","Sentýabr","Oktýabr","Noýabr","Dekabr"],monthsShort:["Ýan","Few","Mar","Apr","Maý","Iýn","Iýl","Awg","Sen","Okt","Noý","Dek"],today:"Bu gün",monthsTitle:"Aýlar",clear:"Aýyr",weekStart:1,format:"dd.mm.yyyy"}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.tr.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.tr.min.js new file mode 100644 index 0000000000..7889b1135d --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.tr.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates.tr={days:["Pazar","Pazartesi","Salı","Çarşamba","Perşembe","Cuma","Cumartesi"],daysShort:["Pz","Pzt","Sal","Çrş","Prş","Cu","Cts"],daysMin:["Pz","Pzt","Sa","Çr","Pr","Cu","Ct"],months:["Ocak","Şubat","Mart","Nisan","Mayıs","Haziran","Temmuz","Ağustos","Eylül","Ekim","Kasım","Aralık"],monthsShort:["Oca","Şub","Mar","Nis","May","Haz","Tem","Ağu","Eyl","Eki","Kas","Ara"],today:"Bugün",clear:"Temizle",weekStart:1,format:"dd.mm.yyyy"}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.uk.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.uk.min.js new file mode 100644 index 0000000000..41b02e6b28 --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.uk.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates.uk={days:["Неділя","Понеділок","Вівторок","Середа","Четвер","П'ятниця","Субота"],daysShort:["Нед","Пнд","Втр","Срд","Чтв","Птн","Суб"],daysMin:["Нд","Пн","Вт","Ср","Чт","Пт","Сб"],months:["Cічень","Лютий","Березень","Квітень","Травень","Червень","Липень","Серпень","Вересень","Жовтень","Листопад","Грудень"],monthsShort:["Січ","Лют","Бер","Кві","Тра","Чер","Лип","Сер","Вер","Жов","Лис","Гру"],today:"Сьогодні",clear:"Очистити",format:"dd.mm.yyyy",weekStart:1}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.uz-cyrl.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.uz-cyrl.min.js new file mode 100644 index 0000000000..a0a8f213ce --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.uz-cyrl.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates["uz-cyrl"]={days:["Якшанба","Душанба","Сешанба","Чоршанба","Пайшанба","Жума","Шанба"],daysShort:["Якш","Ду","Се","Чор","Пай","Жу","Ша"],daysMin:["Як","Ду","Се","Чо","Па","Жу","Ша"],months:["Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"],monthsShort:["Янв","Фев","Мар","Апр","Май","Июн","Июл","Авг","Сен","Окт","Ноя","Дек"],today:"Бугун",clear:"Ўчириш",format:"dd.mm.yyyy",weekStart:1,monthsTitle:"Ойлар"}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.uz-latn.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.uz-latn.min.js new file mode 100644 index 0000000000..2f58e343ef --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.uz-latn.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates["uz-latn"]={days:["Yakshanba","Dushanba","Seshanba","Chorshanba","Payshanba","Juma","Shanba"],daysShort:["Yak","Du","Se","Chor","Pay","Ju","Sha"],daysMin:["Ya","Du","Se","Cho","Pa","Ju","Sha"],months:["Yanvar","Fevral","Mart","Aprel","May","Iyun","Iyul","Avgust","Sentabr","Oktabr","Noyabr","Dekabr"],monthsShort:["Yan","Fev","Mar","Apr","May","Iyn","Iyl","Avg","Sen","Okt","Noy","Dek"],today:"Bugun",clear:"O'chirish",format:"dd.mm.yyyy",weekStart:1,monthsTitle:"Oylar"}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.vi.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.vi.min.js new file mode 100644 index 0000000000..3311d23f86 --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.vi.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates.vi={days:["Chủ nhật","Thứ hai","Thứ ba","Thứ tư","Thứ năm","Thứ sáu","Thứ bảy"],daysShort:["CN","Thứ 2","Thứ 3","Thứ 4","Thứ 5","Thứ 6","Thứ 7"],daysMin:["CN","T2","T3","T4","T5","T6","T7"],months:["Tháng 1","Tháng 2","Tháng 3","Tháng 4","Tháng 5","Tháng 6","Tháng 7","Tháng 8","Tháng 9","Tháng 10","Tháng 11","Tháng 12"],monthsShort:["Th1","Th2","Th3","Th4","Th5","Th6","Th7","Th8","Th9","Th10","Th11","Th12"],today:"Hôm nay",clear:"Xóa",format:"dd/mm/yyyy"}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.zh-CN.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.zh-CN.min.js new file mode 100644 index 0000000000..8e6920b0c8 --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.zh-CN.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates["zh-CN"]={days:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],daysShort:["周日","周一","周二","周三","周四","周五","周六"],daysMin:["日","一","二","三","四","五","六"],months:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthsShort:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],today:"今天",monthsTitle:"选择月份",clear:"清除",format:"yyyy-mm-dd",titleFormat:"yyyy年mm月",weekStart:1}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.zh-TW.min.js b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.zh-TW.min.js new file mode 100644 index 0000000000..e309c1d7d6 --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.zh-TW.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates["zh-TW"]={days:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],daysShort:["週日","週一","週二","週三","週四","週五","週六"],daysMin:["日","一","二","三","四","五","六"],months:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthsShort:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],today:"今天",format:"yyyy年mm月dd日",weekStart:1,clear:"清除"}}(jQuery); \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap/css/bootstrap-rtl.css b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap/css/bootstrap-rtl.css new file mode 100644 index 0000000000..35ddb6a220 --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap/css/bootstrap-rtl.css @@ -0,0 +1,11392 @@ +/*! + * Bootstrap v4.4.1 (https://getbootstrap.com/) + * Copyright 2011-2019 The Bootstrap Authors + * Copyright 2011-2019 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ +:root { + --blue: #007bff; + --indigo: #6610f2; + --purple: #6f42c1; + --pink: #e83e8c; + --red: #dc3545; + --orange: #fd7e14; + --yellow: #ffc107; + --green: #28a745; + --teal: #20c997; + --cyan: #17a2b8; + --white: #fff; + --gray: #6c757d; + --gray-dark: #343a40; + --primary: #007bff; + --secondary: #6c757d; + --success: #28a745; + --info: #17a2b8; + --warning: #ffc107; + --danger: #dc3545; + --light: #f8f9fa; + --dark: #343a40; + --breakpoint-xs: 0; + --breakpoint-sm: 576px; + --breakpoint-md: 768px; + --breakpoint-lg: 992px; + --breakpoint-xl: 1200px; + --font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; +} + +*, +*::before, +*::after { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + line-height: 1.15; + -webkit-text-size-adjust: 100%; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} + +article, aside, figcaption, figure, footer, header, hgroup, main, nav, section { + display: block; +} + +body { + margin: 0; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #212529; + text-align: left; + background-color: #fff; +} + +[tabindex="-1"]:focus:not(:focus-visible) { + outline: 0 !important; +} + +hr { + box-sizing: content-box; + height: 0; + overflow: visible; +} + +h1, h2, h3, h4, h5, h6 { + margin-top: 0; + margin-bottom: 0.5rem; +} + +p { + margin-top: 0; + margin-bottom: 1rem; +} + +abbr[title], +abbr[data-original-title] { + text-decoration: underline; + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; + cursor: help; + border-bottom: 0; + -webkit-text-decoration-skip-ink: none; + text-decoration-skip-ink: none; +} + +address { + margin-bottom: 1rem; + font-style: normal; + line-height: inherit; +} + +ol, +ul, +dl { + margin-top: 0; + margin-bottom: 1rem; +} + +ol ol, +ul ul, +ol ul, +ul ol { + margin-bottom: 0; +} + +dt { + font-weight: 700; +} + +dd { + margin-bottom: .5rem; + margin-left: 0; +} + +blockquote { + margin: 0 0 1rem; +} + +b, +strong { + font-weight: bolder; +} + +small { + font-size: 80%; +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sub { + bottom: -.25em; +} + +sup { + top: -.5em; +} + +a { + color: #007bff; + text-decoration: none; + background-color: transparent; +} + +a:hover { + color: #0056b3; + text-decoration: underline; +} + +a:not([href]) { + color: inherit; + text-decoration: none; +} + +a:not([href]):hover { + color: inherit; + text-decoration: none; +} + +pre, +code, +kbd, +samp { + font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + font-size: 1em; +} + +pre { + margin-top: 0; + margin-bottom: 1rem; + overflow: auto; +} + +figure { + margin: 0 0 1rem; +} + +img { + vertical-align: middle; + border-style: none; +} + +svg { + overflow: hidden; + vertical-align: middle; +} + +table { + border-collapse: collapse; +} + +caption { + padding-top: 0.75rem; + padding-bottom: 0.75rem; + color: #6c757d; + text-align: left; + caption-side: bottom; +} + +th { + text-align: inherit; +} + +label { + display: inline-block; + margin-bottom: 0.5rem; +} + +button { + border-radius: 0; +} + +button:focus { + outline: 1px dotted; + outline: 5px auto -webkit-focus-ring-color; +} + +input, +button, +select, +optgroup, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; +} + +button, +input { + overflow: visible; +} + +button, +select { + text-transform: none; +} + +select { + word-wrap: normal; +} + +button, +[type="button"], +[type="reset"], +[type="submit"] { + -webkit-appearance: button; +} + +button:not(:disabled), +[type="button"]:not(:disabled), +[type="reset"]:not(:disabled), +[type="submit"]:not(:disabled) { + cursor: pointer; +} + +button::-moz-focus-inner, +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner { + padding: 0; + border-style: none; +} + +input[type="radio"], +input[type="checkbox"] { + box-sizing: border-box; + padding: 0; +} + +input[type="date"], +input[type="time"], +input[type="datetime-local"], +input[type="month"] { + -webkit-appearance: listbox; +} + +textarea { + overflow: auto; + resize: vertical; +} + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + max-width: 100%; + padding: 0; + margin-bottom: .5rem; + font-size: 1.5rem; + line-height: inherit; + color: inherit; + white-space: normal; +} + +progress { + vertical-align: baseline; +} + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +[type="search"] { + outline-offset: -2px; + -webkit-appearance: none; +} + +[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +::-webkit-file-upload-button { + font: inherit; + -webkit-appearance: button; +} + +output { + display: inline-block; +} + +summary { + display: list-item; + cursor: pointer; +} + +template { + display: none; +} + +[hidden] { + display: none !important; +} + +h1, h2, h3, h4, h5, h6, +.h1, .h2, .h3, .h4, .h5, .h6 { + margin-bottom: 0.5rem; + font-weight: 500; + line-height: 1.2; +} + +h1, .h1 { + font-size: 2.5rem; +} + +h2, .h2 { + font-size: 2rem; +} + +h3, .h3 { + font-size: 1.75rem; +} + +h4, .h4 { + font-size: 1.5rem; +} + +h5, .h5 { + font-size: 1.25rem; +} + +h6, .h6 { + font-size: 1rem; +} + +.lead { + font-size: 1.25rem; + font-weight: 300; +} + +.display-1 { + font-size: 6rem; + font-weight: 300; + line-height: 1.2; +} + +.display-2 { + font-size: 5.5rem; + font-weight: 300; + line-height: 1.2; +} + +.display-3 { + font-size: 4.5rem; + font-weight: 300; + line-height: 1.2; +} + +.display-4 { + font-size: 3.5rem; + font-weight: 300; + line-height: 1.2; +} + +hr { + margin-top: 1rem; + margin-bottom: 1rem; + border: 0; + border-top: 1px solid rgba(0, 0, 0, 0.1); +} + +small, +.small { + font-size: 80%; + font-weight: 400; +} + +mark, +.mark { + padding: 0.2em; + background-color: #fcf8e3; +} + +.list-unstyled { + padding-left: 0; + list-style: none; +} + +.list-inline { + padding-left: 0; + list-style: none; +} + +.list-inline-item { + display: inline-block; +} + +.list-inline-item:not(:last-child) { + margin-right: 0.5rem; +} + +.initialism { + font-size: 90%; + text-transform: uppercase; +} + +.blockquote { + margin-bottom: 1rem; + font-size: 1.25rem; +} + +.blockquote-footer { + display: block; + font-size: 80%; + color: #6c757d; +} + +.blockquote-footer::before { + content: "\2014\00A0"; +} + +.img-fluid { + max-width: 100%; + height: auto; +} + +.img-thumbnail { + padding: 0.25rem; + background-color: #fff; + border: 1px solid #dee2e6; + border-radius: 0.25rem; + max-width: 100%; + height: auto; +} + +.figure { + display: inline-block; +} + +.figure-img { + margin-bottom: 0.5rem; + line-height: 1; +} + +.figure-caption { + font-size: 90%; + color: #6c757d; +} + +code { + font-size: 87.5%; + color: #e83e8c; + word-wrap: break-word; +} + +a > code { + color: inherit; +} + +kbd { + padding: 0.2rem 0.4rem; + font-size: 87.5%; + color: #fff; + background-color: #212529; + border-radius: 0.2rem; +} + +kbd kbd { + padding: 0; + font-size: 100%; + font-weight: 700; +} + +pre { + display: block; + font-size: 87.5%; + color: #212529; +} + +pre code { + font-size: inherit; + color: inherit; + word-break: normal; +} + +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} + +.container { + width: 100%; + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} + +@media (min-width: 576px) { + .container { + max-width: 540px; + } +} + +@media (min-width: 768px) { + .container { + max-width: 720px; + } +} + +@media (min-width: 992px) { + .container { + max-width: 960px; + } +} + +@media (min-width: 1200px) { + .container { + max-width: 1140px; + } +} + +.container-fluid, .container-sm, .container-md, .container-lg, .container-xl { + width: 100%; + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} + +@media (min-width: 576px) { + .container, .container-sm { + max-width: 540px; + } +} + +@media (min-width: 768px) { + .container, .container-sm, .container-md { + max-width: 720px; + } +} + +@media (min-width: 992px) { + .container, .container-sm, .container-md, .container-lg { + max-width: 960px; + } +} + +@media (min-width: 1200px) { + .container, .container-sm, .container-md, .container-lg, .container-xl { + max-width: 1140px; + } +} + +.row { + display: flex; + flex-wrap: wrap; + margin-right: -15px; + margin-left: -15px; +} + +.no-gutters { + margin-right: 0; + margin-left: 0; +} + +.no-gutters > .col, +.no-gutters > [class*="col-"] { + padding-right: 0; + padding-left: 0; +} + +.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col, +.col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm, +.col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md, +.col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg, +.col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl, +.col-xl-auto { + position: relative; + width: 100%; + padding-right: 15px; + padding-left: 15px; +} + +.col { + flex-basis: 0; + flex-grow: 1; + max-width: 100%; +} + +.row-cols-1 > * { + flex: 0 0 100%; + max-width: 100%; +} + +.row-cols-2 > * { + flex: 0 0 50%; + max-width: 50%; +} + +.row-cols-3 > * { + flex: 0 0 33.333333%; + max-width: 33.333333%; +} + +.row-cols-4 > * { + flex: 0 0 25%; + max-width: 25%; +} + +.row-cols-5 > * { + flex: 0 0 20%; + max-width: 20%; +} + +.row-cols-6 > * { + flex: 0 0 16.666667%; + max-width: 16.666667%; +} + +.col-auto { + flex: 0 0 auto; + width: auto; + max-width: 100%; +} + +.col-1 { + flex: 0 0 8.333333%; + max-width: 8.333333%; +} + +.col-2 { + flex: 0 0 16.666667%; + max-width: 16.666667%; +} + +.col-3 { + flex: 0 0 25%; + max-width: 25%; +} + +.col-4 { + flex: 0 0 33.333333%; + max-width: 33.333333%; +} + +.col-5 { + flex: 0 0 41.666667%; + max-width: 41.666667%; +} + +.col-6 { + flex: 0 0 50%; + max-width: 50%; +} + +.col-7 { + flex: 0 0 58.333333%; + max-width: 58.333333%; +} + +.col-8 { + flex: 0 0 66.666667%; + max-width: 66.666667%; +} + +.col-9 { + flex: 0 0 75%; + max-width: 75%; +} + +.col-10 { + flex: 0 0 83.333333%; + max-width: 83.333333%; +} + +.col-11 { + flex: 0 0 91.666667%; + max-width: 91.666667%; +} + +.col-12 { + flex: 0 0 100%; + max-width: 100%; +} + +.order-first { + order: -1; +} + +.order-last { + order: 13; +} + +.order-0 { + order: 0; +} + +.order-1 { + order: 1; +} + +.order-2 { + order: 2; +} + +.order-3 { + order: 3; +} + +.order-4 { + order: 4; +} + +.order-5 { + order: 5; +} + +.order-6 { + order: 6; +} + +.order-7 { + order: 7; +} + +.order-8 { + order: 8; +} + +.order-9 { + order: 9; +} + +.order-10 { + order: 10; +} + +.order-11 { + order: 11; +} + +.order-12 { + order: 12; +} + +.offset-1 { + margin-right: 8.333333%; +} + +.offset-2 { + margin-right: 16.666667%; +} + +.offset-3 { + margin-right: 25%; +} + +.offset-4 { + margin-right: 33.333333%; +} + +.offset-5 { + margin-right: 41.666667%; +} + +.offset-6 { + margin-right: 50%; +} + +.offset-7 { + margin-right: 58.333333%; +} + +.offset-8 { + margin-right: 66.666667%; +} + +.offset-9 { + margin-right: 75%; +} + +.offset-10 { + margin-right: 83.333333%; +} + +.offset-11 { + margin-right: 91.666667%; +} + +@media (min-width: 576px) { + .col-sm { + flex-basis: 0; + flex-grow: 1; + max-width: 100%; + } + .row-cols-sm-1 > * { + flex: 0 0 100%; + max-width: 100%; + } + .row-cols-sm-2 > * { + flex: 0 0 50%; + max-width: 50%; + } + .row-cols-sm-3 > * { + flex: 0 0 33.333333%; + max-width: 33.333333%; + } + .row-cols-sm-4 > * { + flex: 0 0 25%; + max-width: 25%; + } + .row-cols-sm-5 > * { + flex: 0 0 20%; + max-width: 20%; + } + .row-cols-sm-6 > * { + flex: 0 0 16.666667%; + max-width: 16.666667%; + } + .col-sm-auto { + flex: 0 0 auto; + width: auto; + max-width: 100%; + } + .col-sm-1 { + flex: 0 0 8.333333%; + max-width: 8.333333%; + } + .col-sm-2 { + flex: 0 0 16.666667%; + max-width: 16.666667%; + } + .col-sm-3 { + flex: 0 0 25%; + max-width: 25%; + } + .col-sm-4 { + flex: 0 0 33.333333%; + max-width: 33.333333%; + } + .col-sm-5 { + flex: 0 0 41.666667%; + max-width: 41.666667%; + } + .col-sm-6 { + flex: 0 0 50%; + max-width: 50%; + } + .col-sm-7 { + flex: 0 0 58.333333%; + max-width: 58.333333%; + } + .col-sm-8 { + flex: 0 0 66.666667%; + max-width: 66.666667%; + } + .col-sm-9 { + flex: 0 0 75%; + max-width: 75%; + } + .col-sm-10 { + flex: 0 0 83.333333%; + max-width: 83.333333%; + } + .col-sm-11 { + flex: 0 0 91.666667%; + max-width: 91.666667%; + } + .col-sm-12 { + flex: 0 0 100%; + max-width: 100%; + } + .order-sm-first { + order: -1; + } + .order-sm-last { + order: 13; + } + .order-sm-0 { + order: 0; + } + .order-sm-1 { + order: 1; + } + .order-sm-2 { + order: 2; + } + .order-sm-3 { + order: 3; + } + .order-sm-4 { + order: 4; + } + .order-sm-5 { + order: 5; + } + .order-sm-6 { + order: 6; + } + .order-sm-7 { + order: 7; + } + .order-sm-8 { + order: 8; + } + .order-sm-9 { + order: 9; + } + .order-sm-10 { + order: 10; + } + .order-sm-11 { + order: 11; + } + .order-sm-12 { + order: 12; + } + .offset-sm-0 { + margin-right: 0; + } + .offset-sm-1 { + margin-right: 8.333333%; + } + .offset-sm-2 { + margin-right: 16.666667%; + } + .offset-sm-3 { + margin-right: 25%; + } + .offset-sm-4 { + margin-right: 33.333333%; + } + .offset-sm-5 { + margin-right: 41.666667%; + } + .offset-sm-6 { + margin-right: 50%; + } + .offset-sm-7 { + margin-right: 58.333333%; + } + .offset-sm-8 { + margin-right: 66.666667%; + } + .offset-sm-9 { + margin-right: 75%; + } + .offset-sm-10 { + margin-right: 83.333333%; + } + .offset-sm-11 { + margin-right: 91.666667%; + } +} + +@media (min-width: 768px) { + .col-md { + flex-basis: 0; + flex-grow: 1; + max-width: 100%; + } + .row-cols-md-1 > * { + flex: 0 0 100%; + max-width: 100%; + } + .row-cols-md-2 > * { + flex: 0 0 50%; + max-width: 50%; + } + .row-cols-md-3 > * { + flex: 0 0 33.333333%; + max-width: 33.333333%; + } + .row-cols-md-4 > * { + flex: 0 0 25%; + max-width: 25%; + } + .row-cols-md-5 > * { + flex: 0 0 20%; + max-width: 20%; + } + .row-cols-md-6 > * { + flex: 0 0 16.666667%; + max-width: 16.666667%; + } + .col-md-auto { + flex: 0 0 auto; + width: auto; + max-width: 100%; + } + .col-md-1 { + flex: 0 0 8.333333%; + max-width: 8.333333%; + } + .col-md-2 { + flex: 0 0 16.666667%; + max-width: 16.666667%; + } + .col-md-3 { + flex: 0 0 25%; + max-width: 25%; + } + .col-md-4 { + flex: 0 0 33.333333%; + max-width: 33.333333%; + } + .col-md-5 { + flex: 0 0 41.666667%; + max-width: 41.666667%; + } + .col-md-6 { + flex: 0 0 50%; + max-width: 50%; + } + .col-md-7 { + flex: 0 0 58.333333%; + max-width: 58.333333%; + } + .col-md-8 { + flex: 0 0 66.666667%; + max-width: 66.666667%; + } + .col-md-9 { + flex: 0 0 75%; + max-width: 75%; + } + .col-md-10 { + flex: 0 0 83.333333%; + max-width: 83.333333%; + } + .col-md-11 { + flex: 0 0 91.666667%; + max-width: 91.666667%; + } + .col-md-12 { + flex: 0 0 100%; + max-width: 100%; + } + .order-md-first { + order: -1; + } + .order-md-last { + order: 13; + } + .order-md-0 { + order: 0; + } + .order-md-1 { + order: 1; + } + .order-md-2 { + order: 2; + } + .order-md-3 { + order: 3; + } + .order-md-4 { + order: 4; + } + .order-md-5 { + order: 5; + } + .order-md-6 { + order: 6; + } + .order-md-7 { + order: 7; + } + .order-md-8 { + order: 8; + } + .order-md-9 { + order: 9; + } + .order-md-10 { + order: 10; + } + .order-md-11 { + order: 11; + } + .order-md-12 { + order: 12; + } + .offset-md-0 { + margin-right: 0; + } + .offset-md-1 { + margin-right: 8.333333%; + } + .offset-md-2 { + margin-right: 16.666667%; + } + .offset-md-3 { + margin-right: 25%; + } + .offset-md-4 { + margin-right: 33.333333%; + } + .offset-md-5 { + margin-right: 41.666667%; + } + .offset-md-6 { + margin-right: 50%; + } + .offset-md-7 { + margin-right: 58.333333%; + } + .offset-md-8 { + margin-right: 66.666667%; + } + .offset-md-9 { + margin-right: 75%; + } + .offset-md-10 { + margin-right: 83.333333%; + } + .offset-md-11 { + margin-right: 91.666667%; + } +} + +@media (min-width: 992px) { + .col-lg { + flex-basis: 0; + flex-grow: 1; + max-width: 100%; + } + .row-cols-lg-1 > * { + flex: 0 0 100%; + max-width: 100%; + } + .row-cols-lg-2 > * { + flex: 0 0 50%; + max-width: 50%; + } + .row-cols-lg-3 > * { + flex: 0 0 33.333333%; + max-width: 33.333333%; + } + .row-cols-lg-4 > * { + flex: 0 0 25%; + max-width: 25%; + } + .row-cols-lg-5 > * { + flex: 0 0 20%; + max-width: 20%; + } + .row-cols-lg-6 > * { + flex: 0 0 16.666667%; + max-width: 16.666667%; + } + .col-lg-auto { + flex: 0 0 auto; + width: auto; + max-width: 100%; + } + .col-lg-1 { + flex: 0 0 8.333333%; + max-width: 8.333333%; + } + .col-lg-2 { + flex: 0 0 16.666667%; + max-width: 16.666667%; + } + .col-lg-3 { + flex: 0 0 25%; + max-width: 25%; + } + .col-lg-4 { + flex: 0 0 33.333333%; + max-width: 33.333333%; + } + .col-lg-5 { + flex: 0 0 41.666667%; + max-width: 41.666667%; + } + .col-lg-6 { + flex: 0 0 50%; + max-width: 50%; + } + .col-lg-7 { + flex: 0 0 58.333333%; + max-width: 58.333333%; + } + .col-lg-8 { + flex: 0 0 66.666667%; + max-width: 66.666667%; + } + .col-lg-9 { + flex: 0 0 75%; + max-width: 75%; + } + .col-lg-10 { + flex: 0 0 83.333333%; + max-width: 83.333333%; + } + .col-lg-11 { + flex: 0 0 91.666667%; + max-width: 91.666667%; + } + .col-lg-12 { + flex: 0 0 100%; + max-width: 100%; + } + .order-lg-first { + order: -1; + } + .order-lg-last { + order: 13; + } + .order-lg-0 { + order: 0; + } + .order-lg-1 { + order: 1; + } + .order-lg-2 { + order: 2; + } + .order-lg-3 { + order: 3; + } + .order-lg-4 { + order: 4; + } + .order-lg-5 { + order: 5; + } + .order-lg-6 { + order: 6; + } + .order-lg-7 { + order: 7; + } + .order-lg-8 { + order: 8; + } + .order-lg-9 { + order: 9; + } + .order-lg-10 { + order: 10; + } + .order-lg-11 { + order: 11; + } + .order-lg-12 { + order: 12; + } + .offset-lg-0 { + margin-right: 0; + } + .offset-lg-1 { + margin-right: 8.333333%; + } + .offset-lg-2 { + margin-right: 16.666667%; + } + .offset-lg-3 { + margin-right: 25%; + } + .offset-lg-4 { + margin-right: 33.333333%; + } + .offset-lg-5 { + margin-right: 41.666667%; + } + .offset-lg-6 { + margin-right: 50%; + } + .offset-lg-7 { + margin-right: 58.333333%; + } + .offset-lg-8 { + margin-right: 66.666667%; + } + .offset-lg-9 { + margin-right: 75%; + } + .offset-lg-10 { + margin-right: 83.333333%; + } + .offset-lg-11 { + margin-right: 91.666667%; + } +} + +@media (min-width: 1200px) { + .col-xl { + flex-basis: 0; + flex-grow: 1; + max-width: 100%; + } + .row-cols-xl-1 > * { + flex: 0 0 100%; + max-width: 100%; + } + .row-cols-xl-2 > * { + flex: 0 0 50%; + max-width: 50%; + } + .row-cols-xl-3 > * { + flex: 0 0 33.333333%; + max-width: 33.333333%; + } + .row-cols-xl-4 > * { + flex: 0 0 25%; + max-width: 25%; + } + .row-cols-xl-5 > * { + flex: 0 0 20%; + max-width: 20%; + } + .row-cols-xl-6 > * { + flex: 0 0 16.666667%; + max-width: 16.666667%; + } + .col-xl-auto { + flex: 0 0 auto; + width: auto; + max-width: 100%; + } + .col-xl-1 { + flex: 0 0 8.333333%; + max-width: 8.333333%; + } + .col-xl-2 { + flex: 0 0 16.666667%; + max-width: 16.666667%; + } + .col-xl-3 { + flex: 0 0 25%; + max-width: 25%; + } + .col-xl-4 { + flex: 0 0 33.333333%; + max-width: 33.333333%; + } + .col-xl-5 { + flex: 0 0 41.666667%; + max-width: 41.666667%; + } + .col-xl-6 { + flex: 0 0 50%; + max-width: 50%; + } + .col-xl-7 { + flex: 0 0 58.333333%; + max-width: 58.333333%; + } + .col-xl-8 { + flex: 0 0 66.666667%; + max-width: 66.666667%; + } + .col-xl-9 { + flex: 0 0 75%; + max-width: 75%; + } + .col-xl-10 { + flex: 0 0 83.333333%; + max-width: 83.333333%; + } + .col-xl-11 { + flex: 0 0 91.666667%; + max-width: 91.666667%; + } + .col-xl-12 { + flex: 0 0 100%; + max-width: 100%; + } + .order-xl-first { + order: -1; + } + .order-xl-last { + order: 13; + } + .order-xl-0 { + order: 0; + } + .order-xl-1 { + order: 1; + } + .order-xl-2 { + order: 2; + } + .order-xl-3 { + order: 3; + } + .order-xl-4 { + order: 4; + } + .order-xl-5 { + order: 5; + } + .order-xl-6 { + order: 6; + } + .order-xl-7 { + order: 7; + } + .order-xl-8 { + order: 8; + } + .order-xl-9 { + order: 9; + } + .order-xl-10 { + order: 10; + } + .order-xl-11 { + order: 11; + } + .order-xl-12 { + order: 12; + } + .offset-xl-0 { + margin-right: 0; + } + .offset-xl-1 { + margin-right: 8.333333%; + } + .offset-xl-2 { + margin-right: 16.666667%; + } + .offset-xl-3 { + margin-right: 25%; + } + .offset-xl-4 { + margin-right: 33.333333%; + } + .offset-xl-5 { + margin-right: 41.666667%; + } + .offset-xl-6 { + margin-right: 50%; + } + .offset-xl-7 { + margin-right: 58.333333%; + } + .offset-xl-8 { + margin-right: 66.666667%; + } + .offset-xl-9 { + margin-right: 75%; + } + .offset-xl-10 { + margin-right: 83.333333%; + } + .offset-xl-11 { + margin-right: 91.666667%; + } +} + +.table { + width: 100%; + margin-bottom: 1rem; + color: #212529; +} + +.table th, +.table td { + padding: 0.75rem; + vertical-align: top; + border-top: 1px solid #dee2e6; +} + +.table thead th { + vertical-align: bottom; + border-bottom: 2px solid #dee2e6; +} + +.table tbody + tbody { + border-top: 2px solid #dee2e6; +} + +.table-sm th, +.table-sm td { + padding: 0.3rem; +} + +.table-bordered { + border: 1px solid #dee2e6; +} + +.table-bordered th, +.table-bordered td { + border: 1px solid #dee2e6; +} + +.table-bordered thead th, +.table-bordered thead td { + border-bottom-width: 2px; +} + +.table-borderless th, +.table-borderless td, +.table-borderless thead th, +.table-borderless tbody + tbody { + border: 0; +} + +.table-striped tbody tr:nth-of-type(odd) { + background-color: rgba(0, 0, 0, 0.05); +} + +.table-hover tbody tr:hover { + color: #212529; + background-color: rgba(0, 0, 0, 0.075); +} + +.table-primary, +.table-primary > th, +.table-primary > td { + background-color: #b8daff; +} + +.table-primary th, +.table-primary td, +.table-primary thead th, +.table-primary tbody + tbody { + border-color: #7abaff; +} + +.table-hover .table-primary:hover { + background-color: #9fcdff; +} + +.table-hover .table-primary:hover > td, +.table-hover .table-primary:hover > th { + background-color: #9fcdff; +} + +.table-secondary, +.table-secondary > th, +.table-secondary > td { + background-color: #d6d8db; +} + +.table-secondary th, +.table-secondary td, +.table-secondary thead th, +.table-secondary tbody + tbody { + border-color: #b3b7bb; +} + +.table-hover .table-secondary:hover { + background-color: #c8cbcf; +} + +.table-hover .table-secondary:hover > td, +.table-hover .table-secondary:hover > th { + background-color: #c8cbcf; +} + +.table-success, +.table-success > th, +.table-success > td { + background-color: #c3e6cb; +} + +.table-success th, +.table-success td, +.table-success thead th, +.table-success tbody + tbody { + border-color: #8fd19e; +} + +.table-hover .table-success:hover { + background-color: #b1dfbb; +} + +.table-hover .table-success:hover > td, +.table-hover .table-success:hover > th { + background-color: #b1dfbb; +} + +.table-info, +.table-info > th, +.table-info > td { + background-color: #bee5eb; +} + +.table-info th, +.table-info td, +.table-info thead th, +.table-info tbody + tbody { + border-color: #86cfda; +} + +.table-hover .table-info:hover { + background-color: #abdde5; +} + +.table-hover .table-info:hover > td, +.table-hover .table-info:hover > th { + background-color: #abdde5; +} + +.table-warning, +.table-warning > th, +.table-warning > td { + background-color: #ffeeba; +} + +.table-warning th, +.table-warning td, +.table-warning thead th, +.table-warning tbody + tbody { + border-color: #ffdf7e; +} + +.table-hover .table-warning:hover { + background-color: #ffe8a1; +} + +.table-hover .table-warning:hover > td, +.table-hover .table-warning:hover > th { + background-color: #ffe8a1; +} + +.table-danger, +.table-danger > th, +.table-danger > td { + background-color: #f5c6cb; +} + +.table-danger th, +.table-danger td, +.table-danger thead th, +.table-danger tbody + tbody { + border-color: #ed969e; +} + +.table-hover .table-danger:hover { + background-color: #f1b0b7; +} + +.table-hover .table-danger:hover > td, +.table-hover .table-danger:hover > th { + background-color: #f1b0b7; +} + +.table-light, +.table-light > th, +.table-light > td { + background-color: #fdfdfe; +} + +.table-light th, +.table-light td, +.table-light thead th, +.table-light tbody + tbody { + border-color: #fbfcfc; +} + +.table-hover .table-light:hover { + background-color: #ececf6; +} + +.table-hover .table-light:hover > td, +.table-hover .table-light:hover > th { + background-color: #ececf6; +} + +.table-dark, +.table-dark > th, +.table-dark > td { + background-color: #c6c8ca; +} + +.table-dark th, +.table-dark td, +.table-dark thead th, +.table-dark tbody + tbody { + border-color: #95999c; +} + +.table-hover .table-dark:hover { + background-color: #b9bbbe; +} + +.table-hover .table-dark:hover > td, +.table-hover .table-dark:hover > th { + background-color: #b9bbbe; +} + +.table-active, +.table-active > th, +.table-active > td { + background-color: rgba(0, 0, 0, 0.075); +} + +.table-hover .table-active:hover { + background-color: rgba(0, 0, 0, 0.075); +} + +.table-hover .table-active:hover > td, +.table-hover .table-active:hover > th { + background-color: rgba(0, 0, 0, 0.075); +} + +.table .thead-dark th { + color: #fff; + background-color: #343a40; + border-color: #454d55; +} + +.table .thead-light th { + color: #495057; + background-color: #e9ecef; + border-color: #dee2e6; +} + +.table-dark { + color: #fff; + background-color: #343a40; +} + +.table-dark th, +.table-dark td, +.table-dark thead th { + border-color: #454d55; +} + +.table-dark.table-bordered { + border: 0; +} + +.table-dark.table-striped tbody tr:nth-of-type(odd) { + background-color: rgba(255, 255, 255, 0.05); +} + +.table-dark.table-hover tbody tr:hover { + color: #fff; + background-color: rgba(255, 255, 255, 0.075); +} + +@media (max-width: 575.98px) { + .table-responsive-sm { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } + .table-responsive-sm > .table-bordered { + border: 0; + } +} + +@media (max-width: 767.98px) { + .table-responsive-md { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } + .table-responsive-md > .table-bordered { + border: 0; + } +} + +@media (max-width: 991.98px) { + .table-responsive-lg { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } + .table-responsive-lg > .table-bordered { + border: 0; + } +} + +@media (max-width: 1199.98px) { + .table-responsive-xl { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } + .table-responsive-xl > .table-bordered { + border: 0; + } +} + +.table-responsive { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; +} + +.table-responsive > .table-bordered { + border: 0; +} + +.form-control { + display: block; + width: 100%; + height: calc(1.5em + 0.75rem + 2px); + padding: 0.375rem 0.75rem; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #495057; + background-color: #fff; + background-clip: padding-box; + border: 1px solid #ced4da; + border-radius: 0.25rem; + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} + +@media (prefers-reduced-motion: reduce) { + .form-control { + transition: none; + } +} + +.form-control::-ms-expand { + background-color: transparent; + border: 0; +} + +.form-control:-moz-focusring { + color: transparent; + text-shadow: 0 0 0 #495057; +} + +.form-control:focus { + color: #495057; + background-color: #fff; + border-color: #80bdff; + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); +} + +.form-control::-webkit-input-placeholder { + color: #6c757d; + opacity: 1; +} + +.form-control::-moz-placeholder { + color: #6c757d; + opacity: 1; +} + +.form-control:-ms-input-placeholder { + color: #6c757d; + opacity: 1; +} + +.form-control::-ms-input-placeholder { + color: #6c757d; + opacity: 1; +} + +.form-control::placeholder { + color: #6c757d; + opacity: 1; +} + +.form-control:disabled, .form-control[readonly] { + background-color: #e9ecef; + opacity: 1; +} + +select.form-control:focus::-ms-value { + color: #495057; + background-color: #fff; +} + +.form-control-file, +.form-control-range { + display: block; + width: 100%; +} + +.col-form-label { + padding-top: calc(0.375rem + 1px); + padding-bottom: calc(0.375rem + 1px); + margin-bottom: 0; + font-size: inherit; + line-height: 1.5; +} + +.col-form-label-lg { + padding-top: calc(0.5rem + 1px); + padding-bottom: calc(0.5rem + 1px); + font-size: 1.25rem; + line-height: 1.5; +} + +.col-form-label-sm { + padding-top: calc(0.25rem + 1px); + padding-bottom: calc(0.25rem + 1px); + font-size: 0.875rem; + line-height: 1.5; +} + +.form-control-plaintext { + display: block; + width: 100%; + padding: 0.375rem 0; + margin-bottom: 0; + font-size: 1rem; + line-height: 1.5; + color: #212529; + background-color: transparent; + border: solid transparent; + border-width: 1px 0; +} + +.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg { + padding-right: 0; + padding-left: 0; +} + +.form-control-sm { + height: calc(1.5em + 0.5rem + 2px); + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + line-height: 1.5; + border-radius: 0.2rem; +} + +.form-control-lg { + height: calc(1.5em + 1rem + 2px); + padding: 0.5rem 1rem; + font-size: 1.25rem; + line-height: 1.5; + border-radius: 0.3rem; +} + +select.form-control[size], select.form-control[multiple] { + height: auto; +} + +textarea.form-control { + height: auto; +} + +.form-group { + margin-bottom: 1rem; +} + +.form-text { + display: block; + margin-top: 0.25rem; +} + +.form-row { + display: flex; + flex-wrap: wrap; + margin-right: -5px; + margin-left: -5px; +} + +.form-row > .col, +.form-row > [class*="col-"] { + padding-right: 5px; + padding-left: 5px; +} + +.form-check { + position: relative; + display: block; + padding-left: 1.25rem; +} + +.form-check-input { + position: absolute; + margin-top: 0.3rem; + margin-left: -1.25rem; +} + +.form-check-input[disabled] ~ .form-check-label, +.form-check-input:disabled ~ .form-check-label { + color: #6c757d; +} + +.form-check-label { + margin-bottom: 0; +} + +.form-check-inline { + display: inline-flex; + align-items: center; + padding-left: 0; + margin-right: 0.75rem; +} + +.form-check-inline .form-check-input { + position: static; + margin-top: 0; + margin-right: 0.3125rem; + margin-left: 0; +} + +.valid-feedback { + display: none; + width: 100%; + margin-top: 0.25rem; + font-size: 80%; + color: #28a745; +} + +.valid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + max-width: 100%; + padding: 0.25rem 0.5rem; + margin-top: .1rem; + font-size: 0.875rem; + line-height: 1.5; + color: #fff; + background-color: rgba(40, 167, 69, 0.9); + border-radius: 0.25rem; +} + +.was-validated :valid ~ .valid-feedback, +.was-validated :valid ~ .valid-tooltip, +.is-valid ~ .valid-feedback, +.is-valid ~ .valid-tooltip { + display: block; +} + +.was-validated .form-control:valid, .form-control.is-valid { + border-color: #28a745; + padding-right: calc(1.5em + 0.75rem); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-position: right calc(0.375em + 0.1875rem) center; + background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); +} + +.was-validated .form-control:valid:focus, .form-control.is-valid:focus { + border-color: #28a745; + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); +} + +.was-validated textarea.form-control:valid, textarea.form-control.is-valid { + padding-right: calc(1.5em + 0.75rem); + background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); +} + +.was-validated .custom-select:valid, .custom-select.is-valid { + border-color: #28a745; + padding-right: calc(0.75em + 2.3125rem); + background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px, url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); +} + +.was-validated .custom-select:valid:focus, .custom-select.is-valid:focus { + border-color: #28a745; + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); +} + +.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label { + color: #28a745; +} + +.was-validated .form-check-input:valid ~ .valid-feedback, +.was-validated .form-check-input:valid ~ .valid-tooltip, .form-check-input.is-valid ~ .valid-feedback, +.form-check-input.is-valid ~ .valid-tooltip { + display: block; +} + +.was-validated .custom-control-input:valid ~ .custom-control-label, .custom-control-input.is-valid ~ .custom-control-label { + color: #28a745; +} + +.was-validated .custom-control-input:valid ~ .custom-control-label::before, .custom-control-input.is-valid ~ .custom-control-label::before { + border-color: #28a745; +} + +.was-validated .custom-control-input:valid:checked ~ .custom-control-label::before, .custom-control-input.is-valid:checked ~ .custom-control-label::before { + border-color: #34ce57; + background-color: #34ce57; +} + +.was-validated .custom-control-input:valid:focus ~ .custom-control-label::before, .custom-control-input.is-valid:focus ~ .custom-control-label::before { + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); +} + +.was-validated .custom-control-input:valid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-valid:focus:not(:checked) ~ .custom-control-label::before { + border-color: #28a745; +} + +.was-validated .custom-file-input:valid ~ .custom-file-label, .custom-file-input.is-valid ~ .custom-file-label { + border-color: #28a745; +} + +.was-validated .custom-file-input:valid:focus ~ .custom-file-label, .custom-file-input.is-valid:focus ~ .custom-file-label { + border-color: #28a745; + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); +} + +.invalid-feedback { + display: none; + width: 100%; + margin-top: 0.25rem; + font-size: 80%; + color: #dc3545; +} + +.invalid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + max-width: 100%; + padding: 0.25rem 0.5rem; + margin-top: .1rem; + font-size: 0.875rem; + line-height: 1.5; + color: #fff; + background-color: rgba(220, 53, 69, 0.9); + border-radius: 0.25rem; +} + +.was-validated :invalid ~ .invalid-feedback, +.was-validated :invalid ~ .invalid-tooltip, +.is-invalid ~ .invalid-feedback, +.is-invalid ~ .invalid-tooltip { + display: block; +} + +.was-validated .form-control:invalid, .form-control.is-invalid { + border-color: #dc3545; + padding-right: calc(1.5em + 0.75rem); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-position: right calc(0.375em + 0.1875rem) center; + background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); +} + +.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus { + border-color: #dc3545; + box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); +} + +.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid { + padding-right: calc(1.5em + 0.75rem); + background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); +} + +.was-validated .custom-select:invalid, .custom-select.is-invalid { + border-color: #dc3545; + padding-right: calc(0.75em + 2.3125rem); + background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px, url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); +} + +.was-validated .custom-select:invalid:focus, .custom-select.is-invalid:focus { + border-color: #dc3545; + box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); +} + +.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label { + color: #dc3545; +} + +.was-validated .form-check-input:invalid ~ .invalid-feedback, +.was-validated .form-check-input:invalid ~ .invalid-tooltip, .form-check-input.is-invalid ~ .invalid-feedback, +.form-check-input.is-invalid ~ .invalid-tooltip { + display: block; +} + +.was-validated .custom-control-input:invalid ~ .custom-control-label, .custom-control-input.is-invalid ~ .custom-control-label { + color: #dc3545; +} + +.was-validated .custom-control-input:invalid ~ .custom-control-label::before, .custom-control-input.is-invalid ~ .custom-control-label::before { + border-color: #dc3545; +} + +.was-validated .custom-control-input:invalid:checked ~ .custom-control-label::before, .custom-control-input.is-invalid:checked ~ .custom-control-label::before { + border-color: #e4606d; + background-color: #e4606d; +} + +.was-validated .custom-control-input:invalid:focus ~ .custom-control-label::before, .custom-control-input.is-invalid:focus ~ .custom-control-label::before { + box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); +} + +.was-validated .custom-control-input:invalid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-invalid:focus:not(:checked) ~ .custom-control-label::before { + border-color: #dc3545; +} + +.was-validated .custom-file-input:invalid ~ .custom-file-label, .custom-file-input.is-invalid ~ .custom-file-label { + border-color: #dc3545; +} + +.was-validated .custom-file-input:invalid:focus ~ .custom-file-label, .custom-file-input.is-invalid:focus ~ .custom-file-label { + border-color: #dc3545; + box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); +} + +.form-inline { + display: flex; + flex-flow: row wrap; + align-items: center; +} + +.form-inline .form-check { + width: 100%; +} + +@media (min-width: 576px) { + .form-inline label { + display: flex; + align-items: center; + justify-content: center; + margin-bottom: 0; + } + .form-inline .form-group { + display: flex; + flex: 0 0 auto; + flex-flow: row wrap; + align-items: center; + margin-bottom: 0; + } + .form-inline .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .form-inline .form-control-plaintext { + display: inline-block; + } + .form-inline .input-group, + .form-inline .custom-select { + width: auto; + } + .form-inline .form-check { + display: flex; + align-items: center; + justify-content: center; + width: auto; + padding-left: 0; + } + .form-inline .form-check-input { + position: relative; + flex-shrink: 0; + margin-top: 0; + margin-right: 0.25rem; + margin-left: 0; + } + .form-inline .custom-control { + align-items: center; + justify-content: center; + } + .form-inline .custom-control-label { + margin-bottom: 0; + } +} + +.btn { + display: inline-block; + font-weight: 400; + color: #212529; + text-align: center; + vertical-align: middle; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background-color: transparent; + border: 1px solid transparent; + padding: 0.375rem 0.75rem; + font-size: 1rem; + line-height: 1.5; + border-radius: 0.25rem; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} + +@media (prefers-reduced-motion: reduce) { + .btn { + transition: none; + } +} + +.btn:hover { + color: #212529; + text-decoration: none; +} + +.btn:focus, .btn.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); +} + +.btn.disabled, .btn:disabled { + opacity: 0.65; +} + +a.btn.disabled, +fieldset:disabled a.btn { + pointer-events: none; +} + +.btn-primary { + color: #fff; + background-color: #007bff; + border-color: #007bff; +} + +.btn-primary:hover { + color: #fff; + background-color: #0069d9; + border-color: #0062cc; +} + +.btn-primary:focus, .btn-primary.focus { + color: #fff; + background-color: #0069d9; + border-color: #0062cc; + box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); +} + +.btn-primary.disabled, .btn-primary:disabled { + color: #fff; + background-color: #007bff; + border-color: #007bff; +} + +.btn-primary:not(:disabled):not(.disabled):active, .btn-primary:not(:disabled):not(.disabled).active, +.show > .btn-primary.dropdown-toggle { + color: #fff; + background-color: #0062cc; + border-color: #005cbf; +} + +.btn-primary:not(:disabled):not(.disabled):active:focus, .btn-primary:not(:disabled):not(.disabled).active:focus, +.show > .btn-primary.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5); +} + +.btn-secondary { + color: #fff; + background-color: #6c757d; + border-color: #6c757d; +} + +.btn-secondary:hover { + color: #fff; + background-color: #5a6268; + border-color: #545b62; +} + +.btn-secondary:focus, .btn-secondary.focus { + color: #fff; + background-color: #5a6268; + border-color: #545b62; + box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5); +} + +.btn-secondary.disabled, .btn-secondary:disabled { + color: #fff; + background-color: #6c757d; + border-color: #6c757d; +} + +.btn-secondary:not(:disabled):not(.disabled):active, .btn-secondary:not(:disabled):not(.disabled).active, +.show > .btn-secondary.dropdown-toggle { + color: #fff; + background-color: #545b62; + border-color: #4e555b; +} + +.btn-secondary:not(:disabled):not(.disabled):active:focus, .btn-secondary:not(:disabled):not(.disabled).active:focus, +.show > .btn-secondary.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5); +} + +.btn-success { + color: #fff; + background-color: #28a745; + border-color: #28a745; +} + +.btn-success:hover { + color: #fff; + background-color: #218838; + border-color: #1e7e34; +} + +.btn-success:focus, .btn-success.focus { + color: #fff; + background-color: #218838; + border-color: #1e7e34; + box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5); +} + +.btn-success.disabled, .btn-success:disabled { + color: #fff; + background-color: #28a745; + border-color: #28a745; +} + +.btn-success:not(:disabled):not(.disabled):active, .btn-success:not(:disabled):not(.disabled).active, +.show > .btn-success.dropdown-toggle { + color: #fff; + background-color: #1e7e34; + border-color: #1c7430; +} + +.btn-success:not(:disabled):not(.disabled):active:focus, .btn-success:not(:disabled):not(.disabled).active:focus, +.show > .btn-success.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5); +} + +.btn-info { + color: #fff; + background-color: #17a2b8; + border-color: #17a2b8; +} + +.btn-info:hover { + color: #fff; + background-color: #138496; + border-color: #117a8b; +} + +.btn-info:focus, .btn-info.focus { + color: #fff; + background-color: #138496; + border-color: #117a8b; + box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5); +} + +.btn-info.disabled, .btn-info:disabled { + color: #fff; + background-color: #17a2b8; + border-color: #17a2b8; +} + +.btn-info:not(:disabled):not(.disabled):active, .btn-info:not(:disabled):not(.disabled).active, +.show > .btn-info.dropdown-toggle { + color: #fff; + background-color: #117a8b; + border-color: #10707f; +} + +.btn-info:not(:disabled):not(.disabled):active:focus, .btn-info:not(:disabled):not(.disabled).active:focus, +.show > .btn-info.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5); +} + +.btn-warning { + color: #212529; + background-color: #ffc107; + border-color: #ffc107; +} + +.btn-warning:hover { + color: #212529; + background-color: #e0a800; + border-color: #d39e00; +} + +.btn-warning:focus, .btn-warning.focus { + color: #212529; + background-color: #e0a800; + border-color: #d39e00; + box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5); +} + +.btn-warning.disabled, .btn-warning:disabled { + color: #212529; + background-color: #ffc107; + border-color: #ffc107; +} + +.btn-warning:not(:disabled):not(.disabled):active, .btn-warning:not(:disabled):not(.disabled).active, +.show > .btn-warning.dropdown-toggle { + color: #212529; + background-color: #d39e00; + border-color: #c69500; +} + +.btn-warning:not(:disabled):not(.disabled):active:focus, .btn-warning:not(:disabled):not(.disabled).active:focus, +.show > .btn-warning.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5); +} + +.btn-danger { + color: #fff; + background-color: #dc3545; + border-color: #dc3545; +} + +.btn-danger:hover { + color: #fff; + background-color: #c82333; + border-color: #bd2130; +} + +.btn-danger:focus, .btn-danger.focus { + color: #fff; + background-color: #c82333; + border-color: #bd2130; + box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5); +} + +.btn-danger.disabled, .btn-danger:disabled { + color: #fff; + background-color: #dc3545; + border-color: #dc3545; +} + +.btn-danger:not(:disabled):not(.disabled):active, .btn-danger:not(:disabled):not(.disabled).active, +.show > .btn-danger.dropdown-toggle { + color: #fff; + background-color: #bd2130; + border-color: #b21f2d; +} + +.btn-danger:not(:disabled):not(.disabled):active:focus, .btn-danger:not(:disabled):not(.disabled).active:focus, +.show > .btn-danger.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5); +} + +.btn-light { + color: #212529; + background-color: #f8f9fa; + border-color: #f8f9fa; +} + +.btn-light:hover { + color: #212529; + background-color: #e2e6ea; + border-color: #dae0e5; +} + +.btn-light:focus, .btn-light.focus { + color: #212529; + background-color: #e2e6ea; + border-color: #dae0e5; + box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5); +} + +.btn-light.disabled, .btn-light:disabled { + color: #212529; + background-color: #f8f9fa; + border-color: #f8f9fa; +} + +.btn-light:not(:disabled):not(.disabled):active, .btn-light:not(:disabled):not(.disabled).active, +.show > .btn-light.dropdown-toggle { + color: #212529; + background-color: #dae0e5; + border-color: #d3d9df; +} + +.btn-light:not(:disabled):not(.disabled):active:focus, .btn-light:not(:disabled):not(.disabled).active:focus, +.show > .btn-light.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5); +} + +.btn-dark { + color: #fff; + background-color: #343a40; + border-color: #343a40; +} + +.btn-dark:hover { + color: #fff; + background-color: #23272b; + border-color: #1d2124; +} + +.btn-dark:focus, .btn-dark.focus { + color: #fff; + background-color: #23272b; + border-color: #1d2124; + box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5); +} + +.btn-dark.disabled, .btn-dark:disabled { + color: #fff; + background-color: #343a40; + border-color: #343a40; +} + +.btn-dark:not(:disabled):not(.disabled):active, .btn-dark:not(:disabled):not(.disabled).active, +.show > .btn-dark.dropdown-toggle { + color: #fff; + background-color: #1d2124; + border-color: #171a1d; +} + +.btn-dark:not(:disabled):not(.disabled):active:focus, .btn-dark:not(:disabled):not(.disabled).active:focus, +.show > .btn-dark.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5); +} + +.btn-outline-primary { + color: #007bff; + border-color: #007bff; +} + +.btn-outline-primary:hover { + color: #fff; + background-color: #007bff; + border-color: #007bff; +} + +.btn-outline-primary:focus, .btn-outline-primary.focus { + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5); +} + +.btn-outline-primary.disabled, .btn-outline-primary:disabled { + color: #007bff; + background-color: transparent; +} + +.btn-outline-primary:not(:disabled):not(.disabled):active, .btn-outline-primary:not(:disabled):not(.disabled).active, +.show > .btn-outline-primary.dropdown-toggle { + color: #fff; + background-color: #007bff; + border-color: #007bff; +} + +.btn-outline-primary:not(:disabled):not(.disabled):active:focus, .btn-outline-primary:not(:disabled):not(.disabled).active:focus, +.show > .btn-outline-primary.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5); +} + +.btn-outline-secondary { + color: #6c757d; + border-color: #6c757d; +} + +.btn-outline-secondary:hover { + color: #fff; + background-color: #6c757d; + border-color: #6c757d; +} + +.btn-outline-secondary:focus, .btn-outline-secondary.focus { + box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5); +} + +.btn-outline-secondary.disabled, .btn-outline-secondary:disabled { + color: #6c757d; + background-color: transparent; +} + +.btn-outline-secondary:not(:disabled):not(.disabled):active, .btn-outline-secondary:not(:disabled):not(.disabled).active, +.show > .btn-outline-secondary.dropdown-toggle { + color: #fff; + background-color: #6c757d; + border-color: #6c757d; +} + +.btn-outline-secondary:not(:disabled):not(.disabled):active:focus, .btn-outline-secondary:not(:disabled):not(.disabled).active:focus, +.show > .btn-outline-secondary.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5); +} + +.btn-outline-success { + color: #28a745; + border-color: #28a745; +} + +.btn-outline-success:hover { + color: #fff; + background-color: #28a745; + border-color: #28a745; +} + +.btn-outline-success:focus, .btn-outline-success.focus { + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5); +} + +.btn-outline-success.disabled, .btn-outline-success:disabled { + color: #28a745; + background-color: transparent; +} + +.btn-outline-success:not(:disabled):not(.disabled):active, .btn-outline-success:not(:disabled):not(.disabled).active, +.show > .btn-outline-success.dropdown-toggle { + color: #fff; + background-color: #28a745; + border-color: #28a745; +} + +.btn-outline-success:not(:disabled):not(.disabled):active:focus, .btn-outline-success:not(:disabled):not(.disabled).active:focus, +.show > .btn-outline-success.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5); +} + +.btn-outline-info { + color: #17a2b8; + border-color: #17a2b8; +} + +.btn-outline-info:hover { + color: #fff; + background-color: #17a2b8; + border-color: #17a2b8; +} + +.btn-outline-info:focus, .btn-outline-info.focus { + box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5); +} + +.btn-outline-info.disabled, .btn-outline-info:disabled { + color: #17a2b8; + background-color: transparent; +} + +.btn-outline-info:not(:disabled):not(.disabled):active, .btn-outline-info:not(:disabled):not(.disabled).active, +.show > .btn-outline-info.dropdown-toggle { + color: #fff; + background-color: #17a2b8; + border-color: #17a2b8; +} + +.btn-outline-info:not(:disabled):not(.disabled):active:focus, .btn-outline-info:not(:disabled):not(.disabled).active:focus, +.show > .btn-outline-info.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5); +} + +.btn-outline-warning { + color: #ffc107; + border-color: #ffc107; +} + +.btn-outline-warning:hover { + color: #212529; + background-color: #ffc107; + border-color: #ffc107; +} + +.btn-outline-warning:focus, .btn-outline-warning.focus { + box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5); +} + +.btn-outline-warning.disabled, .btn-outline-warning:disabled { + color: #ffc107; + background-color: transparent; +} + +.btn-outline-warning:not(:disabled):not(.disabled):active, .btn-outline-warning:not(:disabled):not(.disabled).active, +.show > .btn-outline-warning.dropdown-toggle { + color: #212529; + background-color: #ffc107; + border-color: #ffc107; +} + +.btn-outline-warning:not(:disabled):not(.disabled):active:focus, .btn-outline-warning:not(:disabled):not(.disabled).active:focus, +.show > .btn-outline-warning.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5); +} + +.btn-outline-danger { + color: #dc3545; + border-color: #dc3545; +} + +.btn-outline-danger:hover { + color: #fff; + background-color: #dc3545; + border-color: #dc3545; +} + +.btn-outline-danger:focus, .btn-outline-danger.focus { + box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5); +} + +.btn-outline-danger.disabled, .btn-outline-danger:disabled { + color: #dc3545; + background-color: transparent; +} + +.btn-outline-danger:not(:disabled):not(.disabled):active, .btn-outline-danger:not(:disabled):not(.disabled).active, +.show > .btn-outline-danger.dropdown-toggle { + color: #fff; + background-color: #dc3545; + border-color: #dc3545; +} + +.btn-outline-danger:not(:disabled):not(.disabled):active:focus, .btn-outline-danger:not(:disabled):not(.disabled).active:focus, +.show > .btn-outline-danger.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5); +} + +.btn-outline-light { + color: #f8f9fa; + border-color: #f8f9fa; +} + +.btn-outline-light:hover { + color: #212529; + background-color: #f8f9fa; + border-color: #f8f9fa; +} + +.btn-outline-light:focus, .btn-outline-light.focus { + box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); +} + +.btn-outline-light.disabled, .btn-outline-light:disabled { + color: #f8f9fa; + background-color: transparent; +} + +.btn-outline-light:not(:disabled):not(.disabled):active, .btn-outline-light:not(:disabled):not(.disabled).active, +.show > .btn-outline-light.dropdown-toggle { + color: #212529; + background-color: #f8f9fa; + border-color: #f8f9fa; +} + +.btn-outline-light:not(:disabled):not(.disabled):active:focus, .btn-outline-light:not(:disabled):not(.disabled).active:focus, +.show > .btn-outline-light.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); +} + +.btn-outline-dark { + color: #343a40; + border-color: #343a40; +} + +.btn-outline-dark:hover { + color: #fff; + background-color: #343a40; + border-color: #343a40; +} + +.btn-outline-dark:focus, .btn-outline-dark.focus { + box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); +} + +.btn-outline-dark.disabled, .btn-outline-dark:disabled { + color: #343a40; + background-color: transparent; +} + +.btn-outline-dark:not(:disabled):not(.disabled):active, .btn-outline-dark:not(:disabled):not(.disabled).active, +.show > .btn-outline-dark.dropdown-toggle { + color: #fff; + background-color: #343a40; + border-color: #343a40; +} + +.btn-outline-dark:not(:disabled):not(.disabled):active:focus, .btn-outline-dark:not(:disabled):not(.disabled).active:focus, +.show > .btn-outline-dark.dropdown-toggle:focus { + box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); +} + +.btn-link { + font-weight: 400; + color: #007bff; + text-decoration: none; +} + +.btn-link:hover { + color: #0056b3; + text-decoration: underline; +} + +.btn-link:focus, .btn-link.focus { + text-decoration: underline; + box-shadow: none; +} + +.btn-link:disabled, .btn-link.disabled { + color: #6c757d; + pointer-events: none; +} + +.btn-lg, .btn-group-lg > .btn { + padding: 0.5rem 1rem; + font-size: 1.25rem; + line-height: 1.5; + border-radius: 0.3rem; +} + +.btn-sm, .btn-group-sm > .btn { + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + line-height: 1.5; + border-radius: 0.2rem; +} + +.btn-block { + display: block; + width: 100%; +} + +.btn-block + .btn-block { + margin-top: 0.5rem; +} + +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; +} + +.fade { + transition: opacity 0.15s linear; +} + +@media (prefers-reduced-motion: reduce) { + .fade { + transition: none; + } +} + +.fade:not(.show) { + opacity: 0; +} + +.collapse:not(.show) { + display: none; +} + +.collapsing { + position: relative; + height: 0; + overflow: hidden; + transition: height 0.35s ease; +} + +@media (prefers-reduced-motion: reduce) { + .collapsing { + transition: none; + } +} + +.dropup, +.dropright, +.dropdown, +.dropleft { + position: relative; +} + +.dropdown-toggle { + white-space: nowrap; +} + +.dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid; + border-right: 0.3em solid transparent; + border-bottom: 0; + border-left: 0.3em solid transparent; +} + +.dropdown-toggle:empty::after { + margin-left: 0; +} + +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 10rem; + padding: 0.5rem 0; + margin: 0.125rem 0 0; + font-size: 1rem; + color: #212529; + text-align: left; + list-style: none; + background-color: #fff; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.15); + border-radius: 0.25rem; +} + +.dropdown-menu-left { + right: auto; + left: 0; +} + +.dropdown-menu-right { + right: 0; + left: auto; +} + +@media (min-width: 576px) { + .dropdown-menu-sm-left { + right: auto; + left: 0; + } + .dropdown-menu-sm-right { + right: 0; + left: auto; + } +} + +@media (min-width: 768px) { + .dropdown-menu-md-left { + right: auto; + left: 0; + } + .dropdown-menu-md-right { + right: 0; + left: auto; + } +} + +@media (min-width: 992px) { + .dropdown-menu-lg-left { + right: auto; + left: 0; + } + .dropdown-menu-lg-right { + right: 0; + left: auto; + } +} + +@media (min-width: 1200px) { + .dropdown-menu-xl-left { + right: auto; + left: 0; + } + .dropdown-menu-xl-right { + right: 0; + left: auto; + } +} + +.dropup .dropdown-menu { + top: auto; + bottom: 100%; + margin-top: 0; + margin-bottom: 0.125rem; +} + +.dropup .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0; + border-right: 0.3em solid transparent; + border-bottom: 0.3em solid; + border-left: 0.3em solid transparent; +} + +.dropup .dropdown-toggle:empty::after { + margin-left: 0; +} + +.dropright .dropdown-menu { + top: 0; + right: auto; + left: 100%; + margin-top: 0; + margin-left: 0.125rem; +} + +.dropright .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid transparent; + border-right: 0; + border-bottom: 0.3em solid transparent; + border-left: 0.3em solid; +} + +.dropright .dropdown-toggle:empty::after { + margin-left: 0; +} + +.dropright .dropdown-toggle::after { + vertical-align: 0; +} + +.dropleft .dropdown-menu { + top: 0; + right: 100%; + left: auto; + margin-top: 0; + margin-right: 0.125rem; +} + +.dropleft .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; +} + +.dropleft .dropdown-toggle::after { + display: none; +} + +.dropleft .dropdown-toggle::before { + display: inline-block; + margin-right: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid transparent; + border-right: 0.3em solid; + border-bottom: 0.3em solid transparent; +} + +.dropleft .dropdown-toggle:empty::after { + margin-left: 0; +} + +.dropleft .dropdown-toggle::before { + vertical-align: 0; +} + +.dropdown-menu[x-placement^="top"], .dropdown-menu[x-placement^="right"], .dropdown-menu[x-placement^="bottom"], .dropdown-menu[x-placement^="left"] { + right: auto; + bottom: auto; +} + +.dropdown-divider { + height: 0; + margin: 0.5rem 0; + overflow: hidden; + border-top: 1px solid #e9ecef; +} + +.dropdown-item { + display: block; + width: 100%; + padding: 0.25rem 1.5rem; + clear: both; + font-weight: 400; + color: #212529; + text-align: inherit; + white-space: nowrap; + background-color: transparent; + border: 0; +} + +.dropdown-item:hover, .dropdown-item:focus { + color: #16181b; + text-decoration: none; + background-color: #f8f9fa; +} + +.dropdown-item.active, .dropdown-item:active { + color: #fff; + text-decoration: none; + background-color: #007bff; +} + +.dropdown-item.disabled, .dropdown-item:disabled { + color: #6c757d; + pointer-events: none; + background-color: transparent; +} + +.dropdown-menu.show { + display: block; +} + +.dropdown-header { + display: block; + padding: 0.5rem 1.5rem; + margin-bottom: 0; + font-size: 0.875rem; + color: #6c757d; + white-space: nowrap; +} + +.dropdown-item-text { + display: block; + padding: 0.25rem 1.5rem; + color: #212529; +} + +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-flex; + vertical-align: middle; +} + +.btn-group > .btn, +.btn-group-vertical > .btn { + position: relative; + flex: 1 1 auto; +} + +.btn-group > .btn:hover, +.btn-group-vertical > .btn:hover { + z-index: 1; +} + +.btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active, +.btn-group-vertical > .btn:focus, +.btn-group-vertical > .btn:active, +.btn-group-vertical > .btn.active { + z-index: 1; +} + +.btn-toolbar { + display: flex; + flex-wrap: wrap; + justify-content: flex-start; +} + +.btn-toolbar .input-group { + width: auto; +} + +.btn-group > .btn:not(:first-child), +.btn-group > .btn-group:not(:first-child) { + margin-left: -1px; +} + +.btn-group > .btn:not(:last-child):not(.dropdown-toggle), +.btn-group > .btn-group:not(:last-child) > .btn { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.btn-group > .btn:not(:first-child), +.btn-group > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.dropdown-toggle-split { + padding-right: 0.5625rem; + padding-left: 0.5625rem; +} + +.dropdown-toggle-split::after, +.dropup .dropdown-toggle-split::after, +.dropright .dropdown-toggle-split::after { + margin-left: 0; +} + +.dropleft .dropdown-toggle-split::before { + margin-right: 0; +} + +.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split { + padding-right: 0.375rem; + padding-left: 0.375rem; +} + +.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split { + padding-right: 0.75rem; + padding-left: 0.75rem; +} + +.btn-group-vertical { + flex-direction: column; + align-items: flex-start; + justify-content: center; +} + +.btn-group-vertical > .btn, +.btn-group-vertical > .btn-group { + width: 100%; +} + +.btn-group-vertical > .btn:not(:first-child), +.btn-group-vertical > .btn-group:not(:first-child) { + margin-top: -1px; +} + +.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle), +.btn-group-vertical > .btn-group:not(:last-child) > .btn { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.btn-group-vertical > .btn:not(:first-child), +.btn-group-vertical > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.btn-group-toggle > .btn, +.btn-group-toggle > .btn-group > .btn { + margin-bottom: 0; +} + +.btn-group-toggle > .btn input[type="radio"], +.btn-group-toggle > .btn input[type="checkbox"], +.btn-group-toggle > .btn-group > .btn input[type="radio"], +.btn-group-toggle > .btn-group > .btn input[type="checkbox"] { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none; +} + +.input-group { + position: relative; + display: flex; + flex-wrap: wrap; + align-items: stretch; + width: 100%; +} + +.input-group > .form-control, +.input-group > .form-control-plaintext, +.input-group > .custom-select, +.input-group > .custom-file { + position: relative; + flex: 1 1 0%; + min-width: 0; + margin-bottom: 0; +} + +.input-group > .form-control + .form-control, +.input-group > .form-control + .custom-select, +.input-group > .form-control + .custom-file, +.input-group > .form-control-plaintext + .form-control, +.input-group > .form-control-plaintext + .custom-select, +.input-group > .form-control-plaintext + .custom-file, +.input-group > .custom-select + .form-control, +.input-group > .custom-select + .custom-select, +.input-group > .custom-select + .custom-file, +.input-group > .custom-file + .form-control, +.input-group > .custom-file + .custom-select, +.input-group > .custom-file + .custom-file { + margin-left: -1px; +} + +.input-group > .form-control:focus, +.input-group > .custom-select:focus, +.input-group > .custom-file .custom-file-input:focus ~ .custom-file-label { + z-index: 3; +} + +.input-group > .custom-file .custom-file-input:focus { + z-index: 4; +} + +.input-group > .form-control:not(:last-child), +.input-group > .custom-select:not(:last-child) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.input-group > .form-control:not(:first-child), +.input-group > .custom-select:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.input-group > .custom-file { + display: flex; + align-items: center; +} + +.input-group > .custom-file:not(:last-child) .custom-file-label, +.input-group > .custom-file:not(:last-child) .custom-file-label::after { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.input-group > .custom-file:not(:first-child) .custom-file-label { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.input-group-prepend, +.input-group-append { + display: flex; +} + +.input-group-prepend .btn, +.input-group-append .btn { + position: relative; + z-index: 2; +} + +.input-group-prepend .btn:focus, +.input-group-append .btn:focus { + z-index: 3; +} + +.input-group-prepend .btn + .btn, +.input-group-prepend .btn + .input-group-text, +.input-group-prepend .input-group-text + .input-group-text, +.input-group-prepend .input-group-text + .btn, +.input-group-append .btn + .btn, +.input-group-append .btn + .input-group-text, +.input-group-append .input-group-text + .input-group-text, +.input-group-append .input-group-text + .btn { + margin-left: -1px; +} + +.input-group-prepend { + margin-right: -1px; +} + +.input-group-append { + margin-left: -1px; +} + +.input-group-text { + display: flex; + align-items: center; + padding: 0.375rem 0.75rem; + margin-bottom: 0; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #495057; + text-align: center; + white-space: nowrap; + background-color: #e9ecef; + border: 1px solid #ced4da; + border-radius: 0.25rem; +} + +.input-group-text input[type="radio"], +.input-group-text input[type="checkbox"] { + margin-top: 0; +} + +.input-group-lg > .form-control:not(textarea), +.input-group-lg > .custom-select { + height: calc(1.5em + 1rem + 2px); +} + +.input-group-lg > .form-control, +.input-group-lg > .custom-select, +.input-group-lg > .input-group-prepend > .input-group-text, +.input-group-lg > .input-group-append > .input-group-text, +.input-group-lg > .input-group-prepend > .btn, +.input-group-lg > .input-group-append > .btn { + padding: 0.5rem 1rem; + font-size: 1.25rem; + line-height: 1.5; + border-radius: 0.3rem; +} + +.input-group-sm > .form-control:not(textarea), +.input-group-sm > .custom-select { + height: calc(1.5em + 0.5rem + 2px); +} + +.input-group-sm > .form-control, +.input-group-sm > .custom-select, +.input-group-sm > .input-group-prepend > .input-group-text, +.input-group-sm > .input-group-append > .input-group-text, +.input-group-sm > .input-group-prepend > .btn, +.input-group-sm > .input-group-append > .btn { + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + line-height: 1.5; + border-radius: 0.2rem; +} + +.input-group-lg > .custom-select, +.input-group-sm > .custom-select { + padding-right: 1.75rem; +} + +.input-group > .input-group-prepend > .btn, +.input-group > .input-group-prepend > .input-group-text, +.input-group > .input-group-append:not(:last-child) > .btn, +.input-group > .input-group-append:not(:last-child) > .input-group-text, +.input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle), +.input-group > .input-group-append:last-child > .input-group-text:not(:last-child) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.input-group > .input-group-append > .btn, +.input-group > .input-group-append > .input-group-text, +.input-group > .input-group-prepend:not(:first-child) > .btn, +.input-group > .input-group-prepend:not(:first-child) > .input-group-text, +.input-group > .input-group-prepend:first-child > .btn:not(:first-child), +.input-group > .input-group-prepend:first-child > .input-group-text:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.custom-control { + position: relative; + display: block; + min-height: 1.5rem; + padding-left: 1.5rem; +} + +.custom-control-inline { + display: inline-flex; + margin-right: 1rem; +} + +.custom-control-input { + position: absolute; + left: 0; + z-index: -1; + width: 1rem; + height: 1.25rem; + opacity: 0; +} + +.custom-control-input:checked ~ .custom-control-label::before { + color: #fff; + border-color: #007bff; + background-color: #007bff; +} + +.custom-control-input:focus ~ .custom-control-label::before { + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); +} + +.custom-control-input:focus:not(:checked) ~ .custom-control-label::before { + border-color: #80bdff; +} + +.custom-control-input:not(:disabled):active ~ .custom-control-label::before { + color: #fff; + background-color: #b3d7ff; + border-color: #b3d7ff; +} + +.custom-control-input[disabled] ~ .custom-control-label, .custom-control-input:disabled ~ .custom-control-label { + color: #6c757d; +} + +.custom-control-input[disabled] ~ .custom-control-label::before, .custom-control-input:disabled ~ .custom-control-label::before { + background-color: #e9ecef; +} + +.custom-control-label { + position: relative; + margin-bottom: 0; + vertical-align: top; +} + +.custom-control-label::before { + position: absolute; + top: 0.25rem; + left: -1.5rem; + display: block; + width: 1rem; + height: 1rem; + pointer-events: none; + content: ""; + background-color: #fff; + border: #adb5bd solid 1px; +} + +.custom-control-label::after { + position: absolute; + top: 0.25rem; + left: -1.5rem; + display: block; + width: 1rem; + height: 1rem; + content: ""; + background: no-repeat 50% / 50% 50%; +} + +.custom-checkbox .custom-control-label::before { + border-radius: 0.25rem; +} + +.custom-checkbox .custom-control-input:checked ~ .custom-control-label::after { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e"); +} + +.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before { + border-color: #007bff; + background-color: #007bff; +} + +.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::after { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e"); +} + +.custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label::before { + background-color: rgba(0, 123, 255, 0.5); +} + +.custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label::before { + background-color: rgba(0, 123, 255, 0.5); +} + +.custom-radio .custom-control-label::before { + border-radius: 50%; +} + +.custom-radio .custom-control-input:checked ~ .custom-control-label::after { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e"); +} + +.custom-radio .custom-control-input:disabled:checked ~ .custom-control-label::before { + background-color: rgba(0, 123, 255, 0.5); +} + +.custom-switch { + padding-left: 2.25rem; +} + +.custom-switch .custom-control-label::before { + left: -2.25rem; + width: 1.75rem; + pointer-events: all; + border-radius: 0.5rem; +} + +.custom-switch .custom-control-label::after { + top: calc(0.25rem + 2px); + left: calc(-2.25rem + 2px); + width: calc(1rem - 4px); + height: calc(1rem - 4px); + background-color: #adb5bd; + border-radius: 0.5rem; + transition: transform 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} + +@media (prefers-reduced-motion: reduce) { + .custom-switch .custom-control-label::after { + transition: none; + } +} + +.custom-switch .custom-control-input:checked ~ .custom-control-label::after { + background-color: #fff; + transform: translateX(0.75rem); +} + +.custom-switch .custom-control-input:disabled:checked ~ .custom-control-label::before { + background-color: rgba(0, 123, 255, 0.5); +} + +.custom-select { + display: inline-block; + width: 100%; + height: calc(1.5em + 0.75rem + 2px); + padding: 0.375rem 1.75rem 0.375rem 0.75rem; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #495057; + vertical-align: middle; + background: #fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px; + border: 1px solid #ced4da; + border-radius: 0.25rem; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} + +.custom-select:focus { + border-color: #80bdff; + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); +} + +.custom-select:focus::-ms-value { + color: #495057; + background-color: #fff; +} + +.custom-select[multiple], .custom-select[size]:not([size="1"]) { + height: auto; + padding-right: 0.75rem; + background-image: none; +} + +.custom-select:disabled { + color: #6c757d; + background-color: #e9ecef; +} + +.custom-select::-ms-expand { + display: none; +} + +.custom-select:-moz-focusring { + color: transparent; + text-shadow: 0 0 0 #495057; +} + +.custom-select-sm { + height: calc(1.5em + 0.5rem + 2px); + padding-top: 0.25rem; + padding-bottom: 0.25rem; + padding-left: 0.5rem; + font-size: 0.875rem; +} + +.custom-select-lg { + height: calc(1.5em + 1rem + 2px); + padding-top: 0.5rem; + padding-bottom: 0.5rem; + padding-left: 1rem; + font-size: 1.25rem; +} + +.custom-file { + position: relative; + display: inline-block; + width: 100%; + height: calc(1.5em + 0.75rem + 2px); + margin-bottom: 0; +} + +.custom-file-input { + position: relative; + z-index: 2; + width: 100%; + height: calc(1.5em + 0.75rem + 2px); + margin: 0; + opacity: 0; +} + +.custom-file-input:focus ~ .custom-file-label { + border-color: #80bdff; + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); +} + +.custom-file-input[disabled] ~ .custom-file-label, +.custom-file-input:disabled ~ .custom-file-label { + background-color: #e9ecef; +} + +.custom-file-input:lang(en) ~ .custom-file-label::after { + content: "Browse"; +} + +.custom-file-input ~ .custom-file-label[data-browse]::after { + content: attr(data-browse); +} + +.custom-file-label { + position: absolute; + top: 0; + right: 0; + left: 0; + z-index: 1; + height: calc(1.5em + 0.75rem + 2px); + padding: 0.375rem 0.75rem; + font-weight: 400; + line-height: 1.5; + color: #495057; + background-color: #fff; + border: 1px solid #ced4da; + border-radius: 0.25rem; +} + +.custom-file-label::after { + position: absolute; + top: 0; + right: 0; + bottom: 0; + z-index: 3; + display: block; + height: calc(1.5em + 0.75rem); + padding: 0.375rem 0.75rem; + line-height: 1.5; + color: #495057; + content: "Browse"; + background-color: #e9ecef; + border-left: inherit; + border-radius: 0 0.25rem 0.25rem 0; +} + +.custom-range { + width: 100%; + height: 1.4rem; + padding: 0; + background-color: transparent; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} + +.custom-range:focus { + outline: none; +} + +.custom-range:focus::-webkit-slider-thumb { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25); +} + +.custom-range:focus::-moz-range-thumb { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25); +} + +.custom-range:focus::-ms-thumb { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25); +} + +.custom-range::-moz-focus-outer { + border: 0; +} + +.custom-range::-webkit-slider-thumb { + width: 1rem; + height: 1rem; + margin-top: -0.25rem; + background-color: #007bff; + border: 0; + border-radius: 1rem; + -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + -webkit-appearance: none; + appearance: none; +} + +@media (prefers-reduced-motion: reduce) { + .custom-range::-webkit-slider-thumb { + -webkit-transition: none; + transition: none; + } +} + +.custom-range::-webkit-slider-thumb:active { + background-color: #b3d7ff; +} + +.custom-range::-webkit-slider-runnable-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: #dee2e6; + border-color: transparent; + border-radius: 1rem; +} + +.custom-range::-moz-range-thumb { + width: 1rem; + height: 1rem; + background-color: #007bff; + border: 0; + border-radius: 1rem; + -moz-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + -moz-appearance: none; + appearance: none; +} + +@media (prefers-reduced-motion: reduce) { + .custom-range::-moz-range-thumb { + -moz-transition: none; + transition: none; + } +} + +.custom-range::-moz-range-thumb:active { + background-color: #b3d7ff; +} + +.custom-range::-moz-range-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: #dee2e6; + border-color: transparent; + border-radius: 1rem; +} + +.custom-range::-ms-thumb { + width: 1rem; + height: 1rem; + margin-top: 0; + margin-right: 0.2rem; + margin-left: 0.2rem; + background-color: #007bff; + border: 0; + border-radius: 1rem; + -ms-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + appearance: none; +} + +@media (prefers-reduced-motion: reduce) { + .custom-range::-ms-thumb { + -ms-transition: none; + transition: none; + } +} + +.custom-range::-ms-thumb:active { + background-color: #b3d7ff; +} + +.custom-range::-ms-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: transparent; + border-color: transparent; + border-width: 0.5rem; +} + +.custom-range::-ms-fill-lower { + background-color: #dee2e6; + border-radius: 1rem; +} + +.custom-range::-ms-fill-upper { + margin-right: 15px; + background-color: #dee2e6; + border-radius: 1rem; +} + +.custom-range:disabled::-webkit-slider-thumb { + background-color: #adb5bd; +} + +.custom-range:disabled::-webkit-slider-runnable-track { + cursor: default; +} + +.custom-range:disabled::-moz-range-thumb { + background-color: #adb5bd; +} + +.custom-range:disabled::-moz-range-track { + cursor: default; +} + +.custom-range:disabled::-ms-thumb { + background-color: #adb5bd; +} + +.custom-control-label::before, +.custom-file-label, +.custom-select { + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} + +@media (prefers-reduced-motion: reduce) { + .custom-control-label::before, + .custom-file-label, + .custom-select { + transition: none; + } +} + +.nav { + display: flex; + flex-wrap: wrap; + padding-left: 0; + margin-bottom: 0; + list-style: none; +} + +.nav-link { + display: block; + padding: 0.5rem 1rem; +} + +.nav-link:hover, .nav-link:focus { + text-decoration: none; +} + +.nav-link.disabled { + color: #6c757d; + pointer-events: none; + cursor: default; +} + +.nav-tabs { + border-bottom: 1px solid #dee2e6; +} + +.nav-tabs .nav-item { + margin-bottom: -1px; +} + +.nav-tabs .nav-link { + border: 1px solid transparent; + border-top-left-radius: 0.25rem; + border-top-right-radius: 0.25rem; +} + +.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus { + border-color: #e9ecef #e9ecef #dee2e6; +} + +.nav-tabs .nav-link.disabled { + color: #6c757d; + background-color: transparent; + border-color: transparent; +} + +.nav-tabs .nav-link.active, +.nav-tabs .nav-item.show .nav-link { + color: #495057; + background-color: #fff; + border-color: #dee2e6 #dee2e6 #fff; +} + +.nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.nav-pills .nav-link { + border-radius: 0.25rem; +} + +.nav-pills .nav-link.active, +.nav-pills .show > .nav-link { + color: #fff; + background-color: #007bff; +} + +.nav-fill .nav-item { + flex: 1 1 auto; + text-align: center; +} + +.nav-justified .nav-item { + flex-basis: 0; + flex-grow: 1; + text-align: center; +} + +.tab-content > .tab-pane { + display: none; +} + +.tab-content > .active { + display: block; +} + +.navbar { + position: relative; + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: space-between; + padding: 0.5rem 1rem; +} + +.navbar .container, +.navbar .container-fluid, .navbar .container-sm, .navbar .container-md, .navbar .container-lg, .navbar .container-xl { + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: space-between; +} + +.navbar-brand { + display: inline-block; + padding-top: 0.3125rem; + padding-bottom: 0.3125rem; + margin-right: 1rem; + font-size: 1.25rem; + line-height: inherit; + white-space: nowrap; +} + +.navbar-brand:hover, .navbar-brand:focus { + text-decoration: none; +} + +.navbar-nav { + display: flex; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; + list-style: none; +} + +.navbar-nav .nav-link { + padding-right: 0; + padding-left: 0; +} + +.navbar-nav .dropdown-menu { + position: static; + float: none; +} + +.navbar-text { + display: inline-block; + padding-top: 0.5rem; + padding-bottom: 0.5rem; +} + +.navbar-collapse { + flex-basis: 100%; + flex-grow: 1; + align-items: center; +} + +.navbar-toggler { + padding: 0.25rem 0.75rem; + font-size: 1.25rem; + line-height: 1; + background-color: transparent; + border: 1px solid transparent; + border-radius: 0.25rem; +} + +.navbar-toggler:hover, .navbar-toggler:focus { + text-decoration: none; +} + +.navbar-toggler-icon { + display: inline-block; + width: 1.5em; + height: 1.5em; + vertical-align: middle; + content: ""; + background: no-repeat center center; + background-size: 100% 100%; +} + +@media (max-width: 575.98px) { + .navbar-expand-sm > .container, + .navbar-expand-sm > .container-fluid, .navbar-expand-sm > .container-sm, .navbar-expand-sm > .container-md, .navbar-expand-sm > .container-lg, .navbar-expand-sm > .container-xl { + padding-right: 0; + padding-left: 0; + } +} + +@media (min-width: 576px) { + .navbar-expand-sm { + flex-flow: row nowrap; + justify-content: flex-start; + } + .navbar-expand-sm .navbar-nav { + flex-direction: row; + } + .navbar-expand-sm .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-sm .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; + } + .navbar-expand-sm > .container, + .navbar-expand-sm > .container-fluid, .navbar-expand-sm > .container-sm, .navbar-expand-sm > .container-md, .navbar-expand-sm > .container-lg, .navbar-expand-sm > .container-xl { + flex-wrap: nowrap; + } + .navbar-expand-sm .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + .navbar-expand-sm .navbar-toggler { + display: none; + } +} + +@media (max-width: 767.98px) { + .navbar-expand-md > .container, + .navbar-expand-md > .container-fluid, .navbar-expand-md > .container-sm, .navbar-expand-md > .container-md, .navbar-expand-md > .container-lg, .navbar-expand-md > .container-xl { + padding-right: 0; + padding-left: 0; + } +} + +@media (min-width: 768px) { + .navbar-expand-md { + flex-flow: row nowrap; + justify-content: flex-start; + } + .navbar-expand-md .navbar-nav { + flex-direction: row; + } + .navbar-expand-md .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-md .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; + } + .navbar-expand-md > .container, + .navbar-expand-md > .container-fluid, .navbar-expand-md > .container-sm, .navbar-expand-md > .container-md, .navbar-expand-md > .container-lg, .navbar-expand-md > .container-xl { + flex-wrap: nowrap; + } + .navbar-expand-md .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + .navbar-expand-md .navbar-toggler { + display: none; + } +} + +@media (max-width: 991.98px) { + .navbar-expand-lg > .container, + .navbar-expand-lg > .container-fluid, .navbar-expand-lg > .container-sm, .navbar-expand-lg > .container-md, .navbar-expand-lg > .container-lg, .navbar-expand-lg > .container-xl { + padding-right: 0; + padding-left: 0; + } +} + +@media (min-width: 992px) { + .navbar-expand-lg { + flex-flow: row nowrap; + justify-content: flex-start; + } + .navbar-expand-lg .navbar-nav { + flex-direction: row; + } + .navbar-expand-lg .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-lg .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; + } + .navbar-expand-lg > .container, + .navbar-expand-lg > .container-fluid, .navbar-expand-lg > .container-sm, .navbar-expand-lg > .container-md, .navbar-expand-lg > .container-lg, .navbar-expand-lg > .container-xl { + flex-wrap: nowrap; + } + .navbar-expand-lg .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + .navbar-expand-lg .navbar-toggler { + display: none; + } +} + +@media (max-width: 1199.98px) { + .navbar-expand-xl > .container, + .navbar-expand-xl > .container-fluid, .navbar-expand-xl > .container-sm, .navbar-expand-xl > .container-md, .navbar-expand-xl > .container-lg, .navbar-expand-xl > .container-xl { + padding-right: 0; + padding-left: 0; + } +} + +@media (min-width: 1200px) { + .navbar-expand-xl { + flex-flow: row nowrap; + justify-content: flex-start; + } + .navbar-expand-xl .navbar-nav { + flex-direction: row; + } + .navbar-expand-xl .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-xl .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; + } + .navbar-expand-xl > .container, + .navbar-expand-xl > .container-fluid, .navbar-expand-xl > .container-sm, .navbar-expand-xl > .container-md, .navbar-expand-xl > .container-lg, .navbar-expand-xl > .container-xl { + flex-wrap: nowrap; + } + .navbar-expand-xl .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + .navbar-expand-xl .navbar-toggler { + display: none; + } +} + +.navbar-expand { + flex-flow: row nowrap; + justify-content: flex-start; +} + +.navbar-expand > .container, +.navbar-expand > .container-fluid, .navbar-expand > .container-sm, .navbar-expand > .container-md, .navbar-expand > .container-lg, .navbar-expand > .container-xl { + padding-right: 0; + padding-left: 0; +} + +.navbar-expand .navbar-nav { + flex-direction: row; +} + +.navbar-expand .navbar-nav .dropdown-menu { + position: absolute; +} + +.navbar-expand .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; +} + +.navbar-expand > .container, +.navbar-expand > .container-fluid, .navbar-expand > .container-sm, .navbar-expand > .container-md, .navbar-expand > .container-lg, .navbar-expand > .container-xl { + flex-wrap: nowrap; +} + +.navbar-expand .navbar-collapse { + display: flex !important; + flex-basis: auto; +} + +.navbar-expand .navbar-toggler { + display: none; +} + +.navbar-light .navbar-brand { + color: rgba(0, 0, 0, 0.9); +} + +.navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus { + color: rgba(0, 0, 0, 0.9); +} + +.navbar-light .navbar-nav .nav-link { + color: rgba(0, 0, 0, 0.5); +} + +.navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus { + color: rgba(0, 0, 0, 0.7); +} + +.navbar-light .navbar-nav .nav-link.disabled { + color: rgba(0, 0, 0, 0.3); +} + +.navbar-light .navbar-nav .show > .nav-link, +.navbar-light .navbar-nav .active > .nav-link, +.navbar-light .navbar-nav .nav-link.show, +.navbar-light .navbar-nav .nav-link.active { + color: rgba(0, 0, 0, 0.9); +} + +.navbar-light .navbar-toggler { + color: rgba(0, 0, 0, 0.5); + border-color: rgba(0, 0, 0, 0.1); +} + +.navbar-light .navbar-toggler-icon { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba(0, 0, 0, 0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); +} + +.navbar-light .navbar-text { + color: rgba(0, 0, 0, 0.5); +} + +.navbar-light .navbar-text a { + color: rgba(0, 0, 0, 0.9); +} + +.navbar-light .navbar-text a:hover, .navbar-light .navbar-text a:focus { + color: rgba(0, 0, 0, 0.9); +} + +.navbar-dark .navbar-brand { + color: #fff; +} + +.navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus { + color: #fff; +} + +.navbar-dark .navbar-nav .nav-link { + color: rgba(255, 255, 255, 0.5); +} + +.navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus { + color: rgba(255, 255, 255, 0.75); +} + +.navbar-dark .navbar-nav .nav-link.disabled { + color: rgba(255, 255, 255, 0.25); +} + +.navbar-dark .navbar-nav .show > .nav-link, +.navbar-dark .navbar-nav .active > .nav-link, +.navbar-dark .navbar-nav .nav-link.show, +.navbar-dark .navbar-nav .nav-link.active { + color: #fff; +} + +.navbar-dark .navbar-toggler { + color: rgba(255, 255, 255, 0.5); + border-color: rgba(255, 255, 255, 0.1); +} + +.navbar-dark .navbar-toggler-icon { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba(255, 255, 255, 0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); +} + +.navbar-dark .navbar-text { + color: rgba(255, 255, 255, 0.5); +} + +.navbar-dark .navbar-text a { + color: #fff; +} + +.navbar-dark .navbar-text a:hover, .navbar-dark .navbar-text a:focus { + color: #fff; +} + +.card { + position: relative; + display: flex; + flex-direction: column; + min-width: 0; + word-wrap: break-word; + background-color: #fff; + background-clip: border-box; + border: 1px solid rgba(0, 0, 0, 0.125); + border-radius: 0.25rem; +} + +.card > hr { + margin-right: 0; + margin-left: 0; +} + +.card > .list-group:first-child .list-group-item:first-child { + border-top-left-radius: 0.25rem; + border-top-right-radius: 0.25rem; +} + +.card > .list-group:last-child .list-group-item:last-child { + border-bottom-right-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; +} + +.card-body { + flex: 1 1 auto; + min-height: 1px; + padding: 1.25rem; +} + +.card-title { + margin-bottom: 0.75rem; +} + +.card-subtitle { + margin-top: -0.375rem; + margin-bottom: 0; +} + +.card-text:last-child { + margin-bottom: 0; +} + +.card-link:hover { + text-decoration: none; +} + +.card-link + .card-link { + margin-left: 1.25rem; +} + +.card-header { + padding: 0.75rem 1.25rem; + margin-bottom: 0; + background-color: rgba(0, 0, 0, 0.03); + border-bottom: 1px solid rgba(0, 0, 0, 0.125); +} + +.card-header:first-child { + border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0; +} + +.card-header + .list-group .list-group-item:first-child { + border-top: 0; +} + +.card-footer { + padding: 0.75rem 1.25rem; + background-color: rgba(0, 0, 0, 0.03); + border-top: 1px solid rgba(0, 0, 0, 0.125); +} + +.card-footer:last-child { + border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px); +} + +.card-header-tabs { + margin-right: -0.625rem; + margin-bottom: -0.75rem; + margin-left: -0.625rem; + border-bottom: 0; +} + +.card-header-pills { + margin-right: -0.625rem; + margin-left: -0.625rem; +} + +.card-img-overlay { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + padding: 1.25rem; +} + +.card-img, +.card-img-top, +.card-img-bottom { + flex-shrink: 0; + width: 100%; +} + +.card-img, +.card-img-top { + border-top-left-radius: calc(0.25rem - 1px); + border-top-right-radius: calc(0.25rem - 1px); +} + +.card-img, +.card-img-bottom { + border-bottom-right-radius: calc(0.25rem - 1px); + border-bottom-left-radius: calc(0.25rem - 1px); +} + +.card-deck .card { + margin-bottom: 15px; +} + +@media (min-width: 576px) { + .card-deck { + display: flex; + flex-flow: row wrap; + margin-right: -15px; + margin-left: -15px; + } + .card-deck .card { + flex: 1 0 0%; + margin-right: 15px; + margin-bottom: 0; + margin-left: 15px; + } +} + +.card-group > .card { + margin-bottom: 15px; +} + +@media (min-width: 576px) { + .card-group { + display: flex; + flex-flow: row wrap; + } + .card-group > .card { + flex: 1 0 0%; + margin-bottom: 0; + } + .card-group > .card + .card { + margin-left: 0; + border-left: 0; + } + .card-group > .card:not(:last-child) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + } + .card-group > .card:not(:last-child) .card-img-top, + .card-group > .card:not(:last-child) .card-header { + border-top-right-radius: 0; + } + .card-group > .card:not(:last-child) .card-img-bottom, + .card-group > .card:not(:last-child) .card-footer { + border-bottom-right-radius: 0; + } + .card-group > .card:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + } + .card-group > .card:not(:first-child) .card-img-top, + .card-group > .card:not(:first-child) .card-header { + border-top-left-radius: 0; + } + .card-group > .card:not(:first-child) .card-img-bottom, + .card-group > .card:not(:first-child) .card-footer { + border-bottom-left-radius: 0; + } +} + +.card-columns .card { + margin-bottom: 0.75rem; +} + +@media (min-width: 576px) { + .card-columns { + -moz-column-count: 3; + column-count: 3; + -moz-column-gap: 1.25rem; + column-gap: 1.25rem; + orphans: 1; + widows: 1; + } + .card-columns .card { + display: inline-block; + width: 100%; + } +} + +.accordion > .card { + overflow: hidden; +} + +.accordion > .card:not(:last-of-type) { + border-bottom: 0; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.accordion > .card:not(:first-of-type) { + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.accordion > .card > .card-header { + border-radius: 0; + margin-bottom: -1px; +} + +.breadcrumb { + display: flex; + flex-wrap: wrap; + padding: 0.75rem 1rem; + margin-bottom: 1rem; + list-style: none; + background-color: #e9ecef; + border-radius: 0.25rem; +} + +.breadcrumb-item + .breadcrumb-item { + padding-left: 0.5rem; +} + +.breadcrumb-item + .breadcrumb-item::before { + display: inline-block; + padding-right: 0.5rem; + color: #6c757d; + content: "/"; +} + +.breadcrumb-item + .breadcrumb-item:hover::before { + text-decoration: underline; +} + +.breadcrumb-item + .breadcrumb-item:hover::before { + text-decoration: none; +} + +.breadcrumb-item.active { + color: #6c757d; +} + +.pagination { + display: flex; + padding-left: 0; + list-style: none; + border-radius: 0.25rem; +} + +.page-link { + position: relative; + display: block; + padding: 0.5rem 0.75rem; + margin-left: -1px; + line-height: 1.25; + color: #007bff; + background-color: #fff; + border: 1px solid #dee2e6; +} + +.page-link:hover { + z-index: 2; + color: #0056b3; + text-decoration: none; + background-color: #e9ecef; + border-color: #dee2e6; +} + +.page-link:focus { + z-index: 3; + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); +} + +.page-item:first-child .page-link { + margin-left: 0; + border-top-left-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; +} + +.page-item:last-child .page-link { + border-top-right-radius: 0.25rem; + border-bottom-right-radius: 0.25rem; +} + +.page-item.active .page-link { + z-index: 3; + color: #fff; + background-color: #007bff; + border-color: #007bff; +} + +.page-item.disabled .page-link { + color: #6c757d; + pointer-events: none; + cursor: auto; + background-color: #fff; + border-color: #dee2e6; +} + +.pagination-lg .page-link { + padding: 0.75rem 1.5rem; + font-size: 1.25rem; + line-height: 1.5; +} + +.pagination-lg .page-item:first-child .page-link { + border-top-left-radius: 0.3rem; + border-bottom-left-radius: 0.3rem; +} + +.pagination-lg .page-item:last-child .page-link { + border-top-right-radius: 0.3rem; + border-bottom-right-radius: 0.3rem; +} + +.pagination-sm .page-link { + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + line-height: 1.5; +} + +.pagination-sm .page-item:first-child .page-link { + border-top-left-radius: 0.2rem; + border-bottom-left-radius: 0.2rem; +} + +.pagination-sm .page-item:last-child .page-link { + border-top-right-radius: 0.2rem; + border-bottom-right-radius: 0.2rem; +} + +.badge { + display: inline-block; + padding: 0.25em 0.4em; + font-size: 75%; + font-weight: 700; + line-height: 1; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: 0.25rem; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} + +@media (prefers-reduced-motion: reduce) { + .badge { + transition: none; + } +} + +a.badge:hover, a.badge:focus { + text-decoration: none; +} + +.badge:empty { + display: none; +} + +.btn .badge { + position: relative; + top: -1px; +} + +.badge-pill { + padding-right: 0.6em; + padding-left: 0.6em; + border-radius: 10rem; +} + +.badge-primary { + color: #fff; + background-color: #007bff; +} + +a.badge-primary:hover, a.badge-primary:focus { + color: #fff; + background-color: #0062cc; +} + +a.badge-primary:focus, a.badge-primary.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5); +} + +.badge-secondary { + color: #fff; + background-color: #6c757d; +} + +a.badge-secondary:hover, a.badge-secondary:focus { + color: #fff; + background-color: #545b62; +} + +a.badge-secondary:focus, a.badge-secondary.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5); +} + +.badge-success { + color: #fff; + background-color: #28a745; +} + +a.badge-success:hover, a.badge-success:focus { + color: #fff; + background-color: #1e7e34; +} + +a.badge-success:focus, a.badge-success.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5); +} + +.badge-info { + color: #fff; + background-color: #17a2b8; +} + +a.badge-info:hover, a.badge-info:focus { + color: #fff; + background-color: #117a8b; +} + +a.badge-info:focus, a.badge-info.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5); +} + +.badge-warning { + color: #212529; + background-color: #ffc107; +} + +a.badge-warning:hover, a.badge-warning:focus { + color: #212529; + background-color: #d39e00; +} + +a.badge-warning:focus, a.badge-warning.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5); +} + +.badge-danger { + color: #fff; + background-color: #dc3545; +} + +a.badge-danger:hover, a.badge-danger:focus { + color: #fff; + background-color: #bd2130; +} + +a.badge-danger:focus, a.badge-danger.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5); +} + +.badge-light { + color: #212529; + background-color: #f8f9fa; +} + +a.badge-light:hover, a.badge-light:focus { + color: #212529; + background-color: #dae0e5; +} + +a.badge-light:focus, a.badge-light.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); +} + +.badge-dark { + color: #fff; + background-color: #343a40; +} + +a.badge-dark:hover, a.badge-dark:focus { + color: #fff; + background-color: #1d2124; +} + +a.badge-dark:focus, a.badge-dark.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); +} + +.jumbotron { + padding: 2rem 1rem; + margin-bottom: 2rem; + background-color: #e9ecef; + border-radius: 0.3rem; +} + +@media (min-width: 576px) { + .jumbotron { + padding: 4rem 2rem; + } +} + +.jumbotron-fluid { + padding-right: 0; + padding-left: 0; + border-radius: 0; +} + +.alert { + position: relative; + padding: 0.75rem 1.25rem; + margin-bottom: 1rem; + border: 1px solid transparent; + border-radius: 0.25rem; +} + +.alert-heading { + color: inherit; +} + +.alert-link { + font-weight: 700; +} + +.alert-dismissible { + padding-right: 4rem; +} + +.alert-dismissible .close { + position: absolute; + top: 0; + right: 0; + padding: 0.75rem 1.25rem; + color: inherit; +} + +.alert-primary { + color: #004085; + background-color: #cce5ff; + border-color: #b8daff; +} + +.alert-primary hr { + border-top-color: #9fcdff; +} + +.alert-primary .alert-link { + color: #002752; +} + +.alert-secondary { + color: #383d41; + background-color: #e2e3e5; + border-color: #d6d8db; +} + +.alert-secondary hr { + border-top-color: #c8cbcf; +} + +.alert-secondary .alert-link { + color: #202326; +} + +.alert-success { + color: #155724; + background-color: #d4edda; + border-color: #c3e6cb; +} + +.alert-success hr { + border-top-color: #b1dfbb; +} + +.alert-success .alert-link { + color: #0b2e13; +} + +.alert-info { + color: #0c5460; + background-color: #d1ecf1; + border-color: #bee5eb; +} + +.alert-info hr { + border-top-color: #abdde5; +} + +.alert-info .alert-link { + color: #062c33; +} + +.alert-warning { + color: #856404; + background-color: #fff3cd; + border-color: #ffeeba; +} + +.alert-warning hr { + border-top-color: #ffe8a1; +} + +.alert-warning .alert-link { + color: #533f03; +} + +.alert-danger { + color: #721c24; + background-color: #f8d7da; + border-color: #f5c6cb; +} + +.alert-danger hr { + border-top-color: #f1b0b7; +} + +.alert-danger .alert-link { + color: #491217; +} + +.alert-light { + color: #818182; + background-color: #fefefe; + border-color: #fdfdfe; +} + +.alert-light hr { + border-top-color: #ececf6; +} + +.alert-light .alert-link { + color: #686868; +} + +.alert-dark { + color: #1b1e21; + background-color: #d6d8d9; + border-color: #c6c8ca; +} + +.alert-dark hr { + border-top-color: #b9bbbe; +} + +.alert-dark .alert-link { + color: #040505; +} + +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 1rem 0; + } + to { + background-position: 0 0; + } +} + +@keyframes progress-bar-stripes { + from { + background-position: 1rem 0; + } + to { + background-position: 0 0; + } +} + +.progress { + display: flex; + height: 1rem; + overflow: hidden; + font-size: 0.75rem; + background-color: #e9ecef; + border-radius: 0.25rem; +} + +.progress-bar { + display: flex; + flex-direction: column; + justify-content: center; + overflow: hidden; + color: #fff; + text-align: center; + white-space: nowrap; + background-color: #007bff; + transition: width 0.6s ease; +} + +@media (prefers-reduced-motion: reduce) { + .progress-bar { + transition: none; + } +} + +.progress-bar-striped { + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-size: 1rem 1rem; +} + +.progress-bar-animated { + -webkit-animation: progress-bar-stripes 1s linear infinite; + animation: progress-bar-stripes 1s linear infinite; +} + +@media (prefers-reduced-motion: reduce) { + .progress-bar-animated { + -webkit-animation: none; + animation: none; + } +} + +.media { + display: flex; + align-items: flex-start; +} + +.media-body { + flex: 1; +} + +.list-group { + display: flex; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; +} + +.list-group-item-action { + width: 100%; + color: #495057; + text-align: inherit; +} + +.list-group-item-action:hover, .list-group-item-action:focus { + z-index: 1; + color: #495057; + text-decoration: none; + background-color: #f8f9fa; +} + +.list-group-item-action:active { + color: #212529; + background-color: #e9ecef; +} + +.list-group-item { + position: relative; + display: block; + padding: 0.75rem 1.25rem; + background-color: #fff; + border: 1px solid rgba(0, 0, 0, 0.125); +} + +.list-group-item:first-child { + border-top-left-radius: 0.25rem; + border-top-right-radius: 0.25rem; +} + +.list-group-item:last-child { + border-bottom-right-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; +} + +.list-group-item.disabled, .list-group-item:disabled { + color: #6c757d; + pointer-events: none; + background-color: #fff; +} + +.list-group-item.active { + z-index: 2; + color: #fff; + background-color: #007bff; + border-color: #007bff; +} + +.list-group-item + .list-group-item { + border-top-width: 0; +} + +.list-group-item + .list-group-item.active { + margin-top: -1px; + border-top-width: 1px; +} + +.list-group-horizontal { + flex-direction: row; +} + +.list-group-horizontal .list-group-item:first-child { + border-bottom-left-radius: 0.25rem; + border-top-right-radius: 0; +} + +.list-group-horizontal .list-group-item:last-child { + border-top-right-radius: 0.25rem; + border-bottom-left-radius: 0; +} + +.list-group-horizontal .list-group-item.active { + margin-top: 0; +} + +.list-group-horizontal .list-group-item + .list-group-item { + border-top-width: 1px; + border-left-width: 0; +} + +.list-group-horizontal .list-group-item + .list-group-item.active { + margin-left: -1px; + border-left-width: 1px; +} + +@media (min-width: 576px) { + .list-group-horizontal-sm { + flex-direction: row; + } + .list-group-horizontal-sm .list-group-item:first-child { + border-bottom-left-radius: 0.25rem; + border-top-right-radius: 0; + } + .list-group-horizontal-sm .list-group-item:last-child { + border-top-right-radius: 0.25rem; + border-bottom-left-radius: 0; + } + .list-group-horizontal-sm .list-group-item.active { + margin-top: 0; + } + .list-group-horizontal-sm .list-group-item + .list-group-item { + border-top-width: 1px; + border-left-width: 0; + } + .list-group-horizontal-sm .list-group-item + .list-group-item.active { + margin-left: -1px; + border-left-width: 1px; + } +} + +@media (min-width: 768px) { + .list-group-horizontal-md { + flex-direction: row; + } + .list-group-horizontal-md .list-group-item:first-child { + border-bottom-left-radius: 0.25rem; + border-top-right-radius: 0; + } + .list-group-horizontal-md .list-group-item:last-child { + border-top-right-radius: 0.25rem; + border-bottom-left-radius: 0; + } + .list-group-horizontal-md .list-group-item.active { + margin-top: 0; + } + .list-group-horizontal-md .list-group-item + .list-group-item { + border-top-width: 1px; + border-left-width: 0; + } + .list-group-horizontal-md .list-group-item + .list-group-item.active { + margin-left: -1px; + border-left-width: 1px; + } +} + +@media (min-width: 992px) { + .list-group-horizontal-lg { + flex-direction: row; + } + .list-group-horizontal-lg .list-group-item:first-child { + border-bottom-left-radius: 0.25rem; + border-top-right-radius: 0; + } + .list-group-horizontal-lg .list-group-item:last-child { + border-top-right-radius: 0.25rem; + border-bottom-left-radius: 0; + } + .list-group-horizontal-lg .list-group-item.active { + margin-top: 0; + } + .list-group-horizontal-lg .list-group-item + .list-group-item { + border-top-width: 1px; + border-left-width: 0; + } + .list-group-horizontal-lg .list-group-item + .list-group-item.active { + margin-left: -1px; + border-left-width: 1px; + } +} + +@media (min-width: 1200px) { + .list-group-horizontal-xl { + flex-direction: row; + } + .list-group-horizontal-xl .list-group-item:first-child { + border-bottom-left-radius: 0.25rem; + border-top-right-radius: 0; + } + .list-group-horizontal-xl .list-group-item:last-child { + border-top-right-radius: 0.25rem; + border-bottom-left-radius: 0; + } + .list-group-horizontal-xl .list-group-item.active { + margin-top: 0; + } + .list-group-horizontal-xl .list-group-item + .list-group-item { + border-top-width: 1px; + border-left-width: 0; + } + .list-group-horizontal-xl .list-group-item + .list-group-item.active { + margin-left: -1px; + border-left-width: 1px; + } +} + +.list-group-flush .list-group-item { + border-right-width: 0; + border-left-width: 0; + border-radius: 0; +} + +.list-group-flush .list-group-item:first-child { + border-top-width: 0; +} + +.list-group-flush:last-child .list-group-item:last-child { + border-bottom-width: 0; +} + +.list-group-item-primary { + color: #004085; + background-color: #b8daff; +} + +.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus { + color: #004085; + background-color: #9fcdff; +} + +.list-group-item-primary.list-group-item-action.active { + color: #fff; + background-color: #004085; + border-color: #004085; +} + +.list-group-item-secondary { + color: #383d41; + background-color: #d6d8db; +} + +.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus { + color: #383d41; + background-color: #c8cbcf; +} + +.list-group-item-secondary.list-group-item-action.active { + color: #fff; + background-color: #383d41; + border-color: #383d41; +} + +.list-group-item-success { + color: #155724; + background-color: #c3e6cb; +} + +.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus { + color: #155724; + background-color: #b1dfbb; +} + +.list-group-item-success.list-group-item-action.active { + color: #fff; + background-color: #155724; + border-color: #155724; +} + +.list-group-item-info { + color: #0c5460; + background-color: #bee5eb; +} + +.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus { + color: #0c5460; + background-color: #abdde5; +} + +.list-group-item-info.list-group-item-action.active { + color: #fff; + background-color: #0c5460; + border-color: #0c5460; +} + +.list-group-item-warning { + color: #856404; + background-color: #ffeeba; +} + +.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus { + color: #856404; + background-color: #ffe8a1; +} + +.list-group-item-warning.list-group-item-action.active { + color: #fff; + background-color: #856404; + border-color: #856404; +} + +.list-group-item-danger { + color: #721c24; + background-color: #f5c6cb; +} + +.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus { + color: #721c24; + background-color: #f1b0b7; +} + +.list-group-item-danger.list-group-item-action.active { + color: #fff; + background-color: #721c24; + border-color: #721c24; +} + +.list-group-item-light { + color: #818182; + background-color: #fdfdfe; +} + +.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus { + color: #818182; + background-color: #ececf6; +} + +.list-group-item-light.list-group-item-action.active { + color: #fff; + background-color: #818182; + border-color: #818182; +} + +.list-group-item-dark { + color: #1b1e21; + background-color: #c6c8ca; +} + +.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus { + color: #1b1e21; + background-color: #b9bbbe; +} + +.list-group-item-dark.list-group-item-action.active { + color: #fff; + background-color: #1b1e21; + border-color: #1b1e21; +} + +.close { + float: right; + font-size: 1.5rem; + font-weight: 700; + line-height: 1; + color: #000; + text-shadow: 0 1px 0 #fff; + opacity: .5; +} + +.close:hover { + color: #000; + text-decoration: none; +} + +.close:not(:disabled):not(.disabled):hover, .close:not(:disabled):not(.disabled):focus { + opacity: .75; +} + +button.close { + padding: 0; + background-color: transparent; + border: 0; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} + +a.close.disabled { + pointer-events: none; +} + +.toast { + max-width: 350px; + overflow: hidden; + font-size: 0.875rem; + background-color: rgba(255, 255, 255, 0.85); + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.1); + box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.1); + -webkit-backdrop-filter: blur(10px); + backdrop-filter: blur(10px); + opacity: 0; + border-radius: 0.25rem; +} + +.toast:not(:last-child) { + margin-bottom: 0.75rem; +} + +.toast.showing { + opacity: 1; +} + +.toast.show { + display: block; + opacity: 1; +} + +.toast.hide { + display: none; +} + +.toast-header { + display: flex; + align-items: center; + padding: 0.25rem 0.75rem; + color: #6c757d; + background-color: rgba(255, 255, 255, 0.85); + background-clip: padding-box; + border-bottom: 1px solid rgba(0, 0, 0, 0.05); +} + +.toast-body { + padding: 0.75rem; +} + +.modal-open { + overflow: hidden; +} + +.modal-open .modal { + overflow-x: hidden; + overflow-y: auto; +} + +.modal { + position: fixed; + top: 0; + left: 0; + z-index: 1050; + display: none; + width: 100%; + height: 100%; + overflow: hidden; + outline: 0; +} + +.modal-dialog { + position: relative; + width: auto; + margin: 0.5rem; + pointer-events: none; +} + +.modal.fade .modal-dialog { + transition: transform 0.3s ease-out; + transform: translate(0, -50px); +} + +@media (prefers-reduced-motion: reduce) { + .modal.fade .modal-dialog { + transition: none; + } +} + +.modal.show .modal-dialog { + transform: none; +} + +.modal.modal-static .modal-dialog { + transform: scale(1.02); +} + +.modal-dialog-scrollable { + display: flex; + max-height: calc(100% - 1rem); +} + +.modal-dialog-scrollable .modal-content { + max-height: calc(100vh - 1rem); + overflow: hidden; +} + +.modal-dialog-scrollable .modal-header, +.modal-dialog-scrollable .modal-footer { + flex-shrink: 0; +} + +.modal-dialog-scrollable .modal-body { + overflow-y: auto; +} + +.modal-dialog-centered { + display: flex; + align-items: center; + min-height: calc(100% - 1rem); +} + +.modal-dialog-centered::before { + display: block; + height: calc(100vh - 1rem); + content: ""; +} + +.modal-dialog-centered.modal-dialog-scrollable { + flex-direction: column; + justify-content: center; + height: 100%; +} + +.modal-dialog-centered.modal-dialog-scrollable .modal-content { + max-height: none; +} + +.modal-dialog-centered.modal-dialog-scrollable::before { + content: none; +} + +.modal-content { + position: relative; + display: flex; + flex-direction: column; + width: 100%; + pointer-events: auto; + background-color: #fff; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 0.3rem; + outline: 0; +} + +.modal-backdrop { + position: fixed; + top: 0; + left: 0; + z-index: 1040; + width: 100vw; + height: 100vh; + background-color: #000; +} + +.modal-backdrop.fade { + opacity: 0; +} + +.modal-backdrop.show { + opacity: 0.5; +} + +.modal-header { + display: flex; + align-items: flex-start; + justify-content: space-between; + padding: 1rem 1rem; + border-bottom: 1px solid #dee2e6; + border-top-left-radius: calc(0.3rem - 1px); + border-top-right-radius: calc(0.3rem - 1px); +} + +.modal-header .close { + padding: 1rem 1rem; + margin: -1rem -1rem -1rem auto; +} + +.modal-title { + margin-bottom: 0; + line-height: 1.5; +} + +.modal-body { + position: relative; + flex: 1 1 auto; + padding: 1rem; +} + +.modal-footer { + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: flex-end; + padding: 0.75rem; + border-top: 1px solid #dee2e6; + border-bottom-right-radius: calc(0.3rem - 1px); + border-bottom-left-radius: calc(0.3rem - 1px); +} + +.modal-footer > * { + margin: 0.25rem; +} + +.modal-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll; +} + +@media (min-width: 576px) { + .modal-dialog { + max-width: 500px; + margin: 1.75rem auto; + } + .modal-dialog-scrollable { + max-height: calc(100% - 3.5rem); + } + .modal-dialog-scrollable .modal-content { + max-height: calc(100vh - 3.5rem); + } + .modal-dialog-centered { + min-height: calc(100% - 3.5rem); + } + .modal-dialog-centered::before { + height: calc(100vh - 3.5rem); + } + .modal-sm { + max-width: 300px; + } +} + +@media (min-width: 992px) { + .modal-lg, + .modal-xl { + max-width: 800px; + } +} + +@media (min-width: 1200px) { + .modal-xl { + max-width: 1140px; + } +} + +.tooltip { + position: absolute; + z-index: 1070; + display: block; + margin: 0; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + font-style: normal; + font-weight: 400; + line-height: 1.5; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + white-space: normal; + line-break: auto; + font-size: 0.875rem; + word-wrap: break-word; + opacity: 0; +} + +.tooltip.show { + opacity: 0.9; +} + +.tooltip .arrow { + position: absolute; + display: block; + width: 0.8rem; + height: 0.4rem; +} + +.tooltip .arrow::before { + position: absolute; + content: ""; + border-color: transparent; + border-style: solid; +} + +.bs-tooltip-top, .bs-tooltip-auto[x-placement^="top"] { + padding: 0.4rem 0; +} + +.bs-tooltip-top .arrow, .bs-tooltip-auto[x-placement^="top"] .arrow { + bottom: 0; +} + +.bs-tooltip-top .arrow::before, .bs-tooltip-auto[x-placement^="top"] .arrow::before { + top: 0; + border-width: 0.4rem 0.4rem 0; + border-top-color: #000; +} + +.bs-tooltip-right, .bs-tooltip-auto[x-placement^="right"] { + padding: 0 0.4rem; +} + +.bs-tooltip-right .arrow, .bs-tooltip-auto[x-placement^="right"] .arrow { + left: 0; + width: 0.4rem; + height: 0.8rem; +} + +.bs-tooltip-right .arrow::before, .bs-tooltip-auto[x-placement^="right"] .arrow::before { + right: 0; + border-width: 0.4rem 0.4rem 0.4rem 0; + border-right-color: #000; +} + +.bs-tooltip-bottom, .bs-tooltip-auto[x-placement^="bottom"] { + padding: 0.4rem 0; +} + +.bs-tooltip-bottom .arrow, .bs-tooltip-auto[x-placement^="bottom"] .arrow { + top: 0; +} + +.bs-tooltip-bottom .arrow::before, .bs-tooltip-auto[x-placement^="bottom"] .arrow::before { + bottom: 0; + border-width: 0 0.4rem 0.4rem; + border-bottom-color: #000; +} + +.bs-tooltip-left, .bs-tooltip-auto[x-placement^="left"] { + padding: 0 0.4rem; +} + +.bs-tooltip-left .arrow, .bs-tooltip-auto[x-placement^="left"] .arrow { + right: 0; + width: 0.4rem; + height: 0.8rem; +} + +.bs-tooltip-left .arrow::before, .bs-tooltip-auto[x-placement^="left"] .arrow::before { + left: 0; + border-width: 0.4rem 0 0.4rem 0.4rem; + border-left-color: #000; +} + +.tooltip-inner { + max-width: 200px; + padding: 0.25rem 0.5rem; + color: #fff; + text-align: center; + background-color: #000; + border-radius: 0.25rem; +} + +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1060; + display: block; + max-width: 276px; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + font-style: normal; + font-weight: 400; + line-height: 1.5; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + white-space: normal; + line-break: auto; + font-size: 0.875rem; + word-wrap: break-word; + background-color: #fff; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 0.3rem; +} + +.popover .arrow { + position: absolute; + display: block; + width: 1rem; + height: 0.5rem; + margin: 0 0.3rem; +} + +.popover .arrow::before, .popover .arrow::after { + position: absolute; + display: block; + content: ""; + border-color: transparent; + border-style: solid; +} + +.bs-popover-top, .bs-popover-auto[x-placement^="top"] { + margin-bottom: 0.5rem; +} + +.bs-popover-top > .arrow, .bs-popover-auto[x-placement^="top"] > .arrow { + bottom: calc(-0.5rem - 1px); +} + +.bs-popover-top > .arrow::before, .bs-popover-auto[x-placement^="top"] > .arrow::before { + bottom: 0; + border-width: 0.5rem 0.5rem 0; + border-top-color: rgba(0, 0, 0, 0.25); +} + +.bs-popover-top > .arrow::after, .bs-popover-auto[x-placement^="top"] > .arrow::after { + bottom: 1px; + border-width: 0.5rem 0.5rem 0; + border-top-color: #fff; +} + +.bs-popover-right, .bs-popover-auto[x-placement^="right"] { + margin-left: 0.5rem; +} + +.bs-popover-right > .arrow, .bs-popover-auto[x-placement^="right"] > .arrow { + left: calc(-0.5rem - 1px); + width: 0.5rem; + height: 1rem; + margin: 0.3rem 0; +} + +.bs-popover-right > .arrow::before, .bs-popover-auto[x-placement^="right"] > .arrow::before { + left: 0; + border-width: 0.5rem 0.5rem 0.5rem 0; + border-right-color: rgba(0, 0, 0, 0.25); +} + +.bs-popover-right > .arrow::after, .bs-popover-auto[x-placement^="right"] > .arrow::after { + left: 1px; + border-width: 0.5rem 0.5rem 0.5rem 0; + border-right-color: #fff; +} + +.bs-popover-bottom, .bs-popover-auto[x-placement^="bottom"] { + margin-top: 0.5rem; +} + +.bs-popover-bottom > .arrow, .bs-popover-auto[x-placement^="bottom"] > .arrow { + top: calc(-0.5rem - 1px); +} + +.bs-popover-bottom > .arrow::before, .bs-popover-auto[x-placement^="bottom"] > .arrow::before { + top: 0; + border-width: 0 0.5rem 0.5rem 0.5rem; + border-bottom-color: rgba(0, 0, 0, 0.25); +} + +.bs-popover-bottom > .arrow::after, .bs-popover-auto[x-placement^="bottom"] > .arrow::after { + top: 1px; + border-width: 0 0.5rem 0.5rem 0.5rem; + border-bottom-color: #fff; +} + +.bs-popover-bottom .popover-header::before, .bs-popover-auto[x-placement^="bottom"] .popover-header::before { + position: absolute; + top: 0; + left: 50%; + display: block; + width: 1rem; + margin-left: -0.5rem; + content: ""; + border-bottom: 1px solid #f7f7f7; +} + +.bs-popover-left, .bs-popover-auto[x-placement^="left"] { + margin-right: 0.5rem; +} + +.bs-popover-left > .arrow, .bs-popover-auto[x-placement^="left"] > .arrow { + right: calc(-0.5rem - 1px); + width: 0.5rem; + height: 1rem; + margin: 0.3rem 0; +} + +.bs-popover-left > .arrow::before, .bs-popover-auto[x-placement^="left"] > .arrow::before { + right: 0; + border-width: 0.5rem 0 0.5rem 0.5rem; + border-left-color: rgba(0, 0, 0, 0.25); +} + +.bs-popover-left > .arrow::after, .bs-popover-auto[x-placement^="left"] > .arrow::after { + right: 1px; + border-width: 0.5rem 0 0.5rem 0.5rem; + border-left-color: #fff; +} + +.popover-header { + padding: 0.5rem 0.75rem; + margin-bottom: 0; + font-size: 1rem; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + border-top-left-radius: calc(0.3rem - 1px); + border-top-right-radius: calc(0.3rem - 1px); +} + +.popover-header:empty { + display: none; +} + +.popover-body { + padding: 0.5rem 0.75rem; + color: #212529; +} + +.carousel { + position: relative; +} + +.carousel.pointer-event { + touch-action: pan-y; +} + +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; +} + +.carousel-inner::after { + display: block; + clear: both; + content: ""; +} + +.carousel-item { + position: relative; + display: none; + float: left; + width: 100%; + margin-right: -100%; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + transition: transform 0.6s ease-in-out; +} + +@media (prefers-reduced-motion: reduce) { + .carousel-item { + transition: none; + } +} + +.carousel-item.active, +.carousel-item-next, +.carousel-item-prev { + display: block; +} + +.carousel-item-next:not(.carousel-item-left), +.active.carousel-item-right { + transform: translateX(100%); +} + +.carousel-item-prev:not(.carousel-item-right), +.active.carousel-item-left { + transform: translateX(-100%); +} + +.carousel-fade .carousel-item { + opacity: 0; + transition-property: opacity; + transform: none; +} + +.carousel-fade .carousel-item.active, +.carousel-fade .carousel-item-next.carousel-item-left, +.carousel-fade .carousel-item-prev.carousel-item-right { + z-index: 1; + opacity: 1; +} + +.carousel-fade .active.carousel-item-left, +.carousel-fade .active.carousel-item-right { + z-index: 0; + opacity: 0; + transition: opacity 0s 0.6s; +} + +@media (prefers-reduced-motion: reduce) { + .carousel-fade .active.carousel-item-left, + .carousel-fade .active.carousel-item-right { + transition: none; + } +} + +.carousel-control-prev, +.carousel-control-next { + position: absolute; + top: 0; + bottom: 0; + z-index: 1; + display: flex; + align-items: center; + justify-content: center; + width: 15%; + color: #fff; + text-align: center; + opacity: 0.5; + transition: opacity 0.15s ease; +} + +@media (prefers-reduced-motion: reduce) { + .carousel-control-prev, + .carousel-control-next { + transition: none; + } +} + +.carousel-control-prev:hover, .carousel-control-prev:focus, +.carousel-control-next:hover, +.carousel-control-next:focus { + color: #fff; + text-decoration: none; + outline: 0; + opacity: 0.9; +} + +.carousel-control-prev { + left: 0; +} + +.carousel-control-next { + right: 0; +} + +.carousel-control-prev-icon, +.carousel-control-next-icon { + display: inline-block; + width: 20px; + height: 20px; + background: no-repeat 50% / 100% 100%; +} + +.carousel-control-prev-icon { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e"); +} + +.carousel-control-next-icon { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e"); +} + +.carousel-indicators { + position: absolute; + right: 0; + bottom: 0; + left: 0; + z-index: 15; + display: flex; + justify-content: center; + padding-left: 0; + margin-right: 15%; + margin-left: 15%; + list-style: none; +} + +.carousel-indicators li { + box-sizing: content-box; + flex: 0 1 auto; + width: 30px; + height: 3px; + margin-right: 3px; + margin-left: 3px; + text-indent: -999px; + cursor: pointer; + background-color: #fff; + background-clip: padding-box; + border-top: 10px solid transparent; + border-bottom: 10px solid transparent; + opacity: .5; + transition: opacity 0.6s ease; +} + +@media (prefers-reduced-motion: reduce) { + .carousel-indicators li { + transition: none; + } +} + +.carousel-indicators .active { + opacity: 1; +} + +.carousel-caption { + position: absolute; + right: 15%; + bottom: 20px; + left: 15%; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: #fff; + text-align: center; +} + +@-webkit-keyframes spinner-border { + to { + transform: rotate(360deg); + } +} + +@keyframes spinner-border { + to { + transform: rotate(360deg); + } +} + +.spinner-border { + display: inline-block; + width: 2rem; + height: 2rem; + vertical-align: text-bottom; + border: 0.25em solid currentColor; + border-right-color: transparent; + border-radius: 50%; + -webkit-animation: spinner-border .75s linear infinite; + animation: spinner-border .75s linear infinite; +} + +.spinner-border-sm { + width: 1rem; + height: 1rem; + border-width: 0.2em; +} + +@-webkit-keyframes spinner-grow { + 0% { + transform: scale(0); + } + 50% { + opacity: 1; + } +} + +@keyframes spinner-grow { + 0% { + transform: scale(0); + } + 50% { + opacity: 1; + } +} + +.spinner-grow { + display: inline-block; + width: 2rem; + height: 2rem; + vertical-align: text-bottom; + background-color: currentColor; + border-radius: 50%; + opacity: 0; + -webkit-animation: spinner-grow .75s linear infinite; + animation: spinner-grow .75s linear infinite; +} + +.spinner-grow-sm { + width: 1rem; + height: 1rem; +} + +.align-baseline { + vertical-align: baseline !important; +} + +.align-top { + vertical-align: top !important; +} + +.align-middle { + vertical-align: middle !important; +} + +.align-bottom { + vertical-align: bottom !important; +} + +.align-text-bottom { + vertical-align: text-bottom !important; +} + +.align-text-top { + vertical-align: text-top !important; +} + +.bg-primary { + background-color: #007bff !important; +} + +a.bg-primary:hover, a.bg-primary:focus, +button.bg-primary:hover, +button.bg-primary:focus { + background-color: #0062cc !important; +} + +.bg-secondary { + background-color: #6c757d !important; +} + +a.bg-secondary:hover, a.bg-secondary:focus, +button.bg-secondary:hover, +button.bg-secondary:focus { + background-color: #545b62 !important; +} + +.bg-success { + background-color: #28a745 !important; +} + +a.bg-success:hover, a.bg-success:focus, +button.bg-success:hover, +button.bg-success:focus { + background-color: #1e7e34 !important; +} + +.bg-info { + background-color: #17a2b8 !important; +} + +a.bg-info:hover, a.bg-info:focus, +button.bg-info:hover, +button.bg-info:focus { + background-color: #117a8b !important; +} + +.bg-warning { + background-color: #ffc107 !important; +} + +a.bg-warning:hover, a.bg-warning:focus, +button.bg-warning:hover, +button.bg-warning:focus { + background-color: #d39e00 !important; +} + +.bg-danger { + background-color: #dc3545 !important; +} + +a.bg-danger:hover, a.bg-danger:focus, +button.bg-danger:hover, +button.bg-danger:focus { + background-color: #bd2130 !important; +} + +.bg-light { + background-color: #f8f9fa !important; +} + +a.bg-light:hover, a.bg-light:focus, +button.bg-light:hover, +button.bg-light:focus { + background-color: #dae0e5 !important; +} + +.bg-dark { + background-color: #343a40 !important; +} + +a.bg-dark:hover, a.bg-dark:focus, +button.bg-dark:hover, +button.bg-dark:focus { + background-color: #1d2124 !important; +} + +.bg-white { + background-color: #fff !important; +} + +.bg-transparent { + background-color: transparent !important; +} + +.border { + border: 1px solid #dee2e6 !important; +} + +.border-top { + border-top: 1px solid #dee2e6 !important; +} + +.border-right { + border-right: 1px solid #dee2e6 !important; +} + +.border-bottom { + border-bottom: 1px solid #dee2e6 !important; +} + +.border-left { + border-left: 1px solid #dee2e6 !important; +} + +.border-0 { + border: 0 !important; +} + +.border-top-0 { + border-top: 0 !important; +} + +.border-right-0 { + border-right: 0 !important; +} + +.border-bottom-0 { + border-bottom: 0 !important; +} + +.border-left-0 { + border-left: 0 !important; +} + +.border-primary { + border-color: #007bff !important; +} + +.border-secondary { + border-color: #6c757d !important; +} + +.border-success { + border-color: #28a745 !important; +} + +.border-info { + border-color: #17a2b8 !important; +} + +.border-warning { + border-color: #ffc107 !important; +} + +.border-danger { + border-color: #dc3545 !important; +} + +.border-light { + border-color: #f8f9fa !important; +} + +.border-dark { + border-color: #343a40 !important; +} + +.border-white { + border-color: #fff !important; +} + +.rounded-sm { + border-radius: 0.2rem !important; +} + +.rounded { + border-radius: 0.25rem !important; +} + +.rounded-top { + border-top-left-radius: 0.25rem !important; + border-top-right-radius: 0.25rem !important; +} + +.rounded-right { + border-top-right-radius: 0.25rem !important; + border-bottom-right-radius: 0.25rem !important; +} + +.rounded-bottom { + border-bottom-right-radius: 0.25rem !important; + border-bottom-left-radius: 0.25rem !important; +} + +.rounded-left { + border-top-left-radius: 0.25rem !important; + border-bottom-left-radius: 0.25rem !important; +} + +.rounded-lg { + border-radius: 0.3rem !important; +} + +.rounded-circle { + border-radius: 50% !important; +} + +.rounded-pill { + border-radius: 50rem !important; +} + +.rounded-0 { + border-radius: 0 !important; +} + +.clearfix::after { + display: block; + clear: both; + content: ""; +} + +.d-none { + display: none !important; +} + +.d-inline { + display: inline !important; +} + +.d-inline-block { + display: inline-block !important; +} + +.d-block { + display: block !important; +} + +.d-table { + display: table !important; +} + +.d-table-row { + display: table-row !important; +} + +.d-table-cell { + display: table-cell !important; +} + +.d-flex { + display: flex !important; +} + +.d-inline-flex { + display: inline-flex !important; +} + +@media (min-width: 576px) { + .d-sm-none { + display: none !important; + } + .d-sm-inline { + display: inline !important; + } + .d-sm-inline-block { + display: inline-block !important; + } + .d-sm-block { + display: block !important; + } + .d-sm-table { + display: table !important; + } + .d-sm-table-row { + display: table-row !important; + } + .d-sm-table-cell { + display: table-cell !important; + } + .d-sm-flex { + display: flex !important; + } + .d-sm-inline-flex { + display: inline-flex !important; + } +} + +@media (min-width: 768px) { + .d-md-none { + display: none !important; + } + .d-md-inline { + display: inline !important; + } + .d-md-inline-block { + display: inline-block !important; + } + .d-md-block { + display: block !important; + } + .d-md-table { + display: table !important; + } + .d-md-table-row { + display: table-row !important; + } + .d-md-table-cell { + display: table-cell !important; + } + .d-md-flex { + display: flex !important; + } + .d-md-inline-flex { + display: inline-flex !important; + } +} + +@media (min-width: 992px) { + .d-lg-none { + display: none !important; + } + .d-lg-inline { + display: inline !important; + } + .d-lg-inline-block { + display: inline-block !important; + } + .d-lg-block { + display: block !important; + } + .d-lg-table { + display: table !important; + } + .d-lg-table-row { + display: table-row !important; + } + .d-lg-table-cell { + display: table-cell !important; + } + .d-lg-flex { + display: flex !important; + } + .d-lg-inline-flex { + display: inline-flex !important; + } +} + +@media (min-width: 1200px) { + .d-xl-none { + display: none !important; + } + .d-xl-inline { + display: inline !important; + } + .d-xl-inline-block { + display: inline-block !important; + } + .d-xl-block { + display: block !important; + } + .d-xl-table { + display: table !important; + } + .d-xl-table-row { + display: table-row !important; + } + .d-xl-table-cell { + display: table-cell !important; + } + .d-xl-flex { + display: flex !important; + } + .d-xl-inline-flex { + display: inline-flex !important; + } +} + +@media print { + .d-print-none { + display: none !important; + } + .d-print-inline { + display: inline !important; + } + .d-print-inline-block { + display: inline-block !important; + } + .d-print-block { + display: block !important; + } + .d-print-table { + display: table !important; + } + .d-print-table-row { + display: table-row !important; + } + .d-print-table-cell { + display: table-cell !important; + } + .d-print-flex { + display: flex !important; + } + .d-print-inline-flex { + display: inline-flex !important; + } +} + +.embed-responsive { + position: relative; + display: block; + width: 100%; + padding: 0; + overflow: hidden; +} + +.embed-responsive::before { + display: block; + content: ""; +} + +.embed-responsive .embed-responsive-item, +.embed-responsive iframe, +.embed-responsive embed, +.embed-responsive object, +.embed-responsive video { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 100%; + height: 100%; + border: 0; +} + +.embed-responsive-21by9::before { + padding-top: 42.857143%; +} + +.embed-responsive-16by9::before { + padding-top: 56.25%; +} + +.embed-responsive-4by3::before { + padding-top: 75%; +} + +.embed-responsive-1by1::before { + padding-top: 100%; +} + +.flex-row { + flex-direction: row !important; +} + +.flex-column { + flex-direction: column !important; +} + +.flex-row-reverse { + flex-direction: row-reverse !important; +} + +.flex-column-reverse { + flex-direction: column-reverse !important; +} + +.flex-wrap { + flex-wrap: wrap !important; +} + +.flex-nowrap { + flex-wrap: nowrap !important; +} + +.flex-wrap-reverse { + flex-wrap: wrap-reverse !important; +} + +.flex-fill { + flex: 1 1 auto !important; +} + +.flex-grow-0 { + flex-grow: 0 !important; +} + +.flex-grow-1 { + flex-grow: 1 !important; +} + +.flex-shrink-0 { + flex-shrink: 0 !important; +} + +.flex-shrink-1 { + flex-shrink: 1 !important; +} + +.justify-content-start { + justify-content: flex-start !important; +} + +.justify-content-end { + justify-content: flex-end !important; +} + +.justify-content-center { + justify-content: center !important; +} + +.justify-content-between { + justify-content: space-between !important; +} + +.justify-content-around { + justify-content: space-around !important; +} + +.align-items-start { + align-items: flex-start !important; +} + +.align-items-end { + align-items: flex-end !important; +} + +.align-items-center { + align-items: center !important; +} + +.align-items-baseline { + align-items: baseline !important; +} + +.align-items-stretch { + align-items: stretch !important; +} + +.align-content-start { + align-content: flex-start !important; +} + +.align-content-end { + align-content: flex-end !important; +} + +.align-content-center { + align-content: center !important; +} + +.align-content-between { + align-content: space-between !important; +} + +.align-content-around { + align-content: space-around !important; +} + +.align-content-stretch { + align-content: stretch !important; +} + +.align-self-auto { + align-self: auto !important; +} + +.align-self-start { + align-self: flex-start !important; +} + +.align-self-end { + align-self: flex-end !important; +} + +.align-self-center { + align-self: center !important; +} + +.align-self-baseline { + align-self: baseline !important; +} + +.align-self-stretch { + align-self: stretch !important; +} + +@media (min-width: 576px) { + .flex-sm-row { + flex-direction: row !important; + } + .flex-sm-column { + flex-direction: column !important; + } + .flex-sm-row-reverse { + flex-direction: row-reverse !important; + } + .flex-sm-column-reverse { + flex-direction: column-reverse !important; + } + .flex-sm-wrap { + flex-wrap: wrap !important; + } + .flex-sm-nowrap { + flex-wrap: nowrap !important; + } + .flex-sm-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + .flex-sm-fill { + flex: 1 1 auto !important; + } + .flex-sm-grow-0 { + flex-grow: 0 !important; + } + .flex-sm-grow-1 { + flex-grow: 1 !important; + } + .flex-sm-shrink-0 { + flex-shrink: 0 !important; + } + .flex-sm-shrink-1 { + flex-shrink: 1 !important; + } + .justify-content-sm-start { + justify-content: flex-start !important; + } + .justify-content-sm-end { + justify-content: flex-end !important; + } + .justify-content-sm-center { + justify-content: center !important; + } + .justify-content-sm-between { + justify-content: space-between !important; + } + .justify-content-sm-around { + justify-content: space-around !important; + } + .align-items-sm-start { + align-items: flex-start !important; + } + .align-items-sm-end { + align-items: flex-end !important; + } + .align-items-sm-center { + align-items: center !important; + } + .align-items-sm-baseline { + align-items: baseline !important; + } + .align-items-sm-stretch { + align-items: stretch !important; + } + .align-content-sm-start { + align-content: flex-start !important; + } + .align-content-sm-end { + align-content: flex-end !important; + } + .align-content-sm-center { + align-content: center !important; + } + .align-content-sm-between { + align-content: space-between !important; + } + .align-content-sm-around { + align-content: space-around !important; + } + .align-content-sm-stretch { + align-content: stretch !important; + } + .align-self-sm-auto { + align-self: auto !important; + } + .align-self-sm-start { + align-self: flex-start !important; + } + .align-self-sm-end { + align-self: flex-end !important; + } + .align-self-sm-center { + align-self: center !important; + } + .align-self-sm-baseline { + align-self: baseline !important; + } + .align-self-sm-stretch { + align-self: stretch !important; + } +} + +@media (min-width: 768px) { + .flex-md-row { + flex-direction: row !important; + } + .flex-md-column { + flex-direction: column !important; + } + .flex-md-row-reverse { + flex-direction: row-reverse !important; + } + .flex-md-column-reverse { + flex-direction: column-reverse !important; + } + .flex-md-wrap { + flex-wrap: wrap !important; + } + .flex-md-nowrap { + flex-wrap: nowrap !important; + } + .flex-md-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + .flex-md-fill { + flex: 1 1 auto !important; + } + .flex-md-grow-0 { + flex-grow: 0 !important; + } + .flex-md-grow-1 { + flex-grow: 1 !important; + } + .flex-md-shrink-0 { + flex-shrink: 0 !important; + } + .flex-md-shrink-1 { + flex-shrink: 1 !important; + } + .justify-content-md-start { + justify-content: flex-start !important; + } + .justify-content-md-end { + justify-content: flex-end !important; + } + .justify-content-md-center { + justify-content: center !important; + } + .justify-content-md-between { + justify-content: space-between !important; + } + .justify-content-md-around { + justify-content: space-around !important; + } + .align-items-md-start { + align-items: flex-start !important; + } + .align-items-md-end { + align-items: flex-end !important; + } + .align-items-md-center { + align-items: center !important; + } + .align-items-md-baseline { + align-items: baseline !important; + } + .align-items-md-stretch { + align-items: stretch !important; + } + .align-content-md-start { + align-content: flex-start !important; + } + .align-content-md-end { + align-content: flex-end !important; + } + .align-content-md-center { + align-content: center !important; + } + .align-content-md-between { + align-content: space-between !important; + } + .align-content-md-around { + align-content: space-around !important; + } + .align-content-md-stretch { + align-content: stretch !important; + } + .align-self-md-auto { + align-self: auto !important; + } + .align-self-md-start { + align-self: flex-start !important; + } + .align-self-md-end { + align-self: flex-end !important; + } + .align-self-md-center { + align-self: center !important; + } + .align-self-md-baseline { + align-self: baseline !important; + } + .align-self-md-stretch { + align-self: stretch !important; + } +} + +@media (min-width: 992px) { + .flex-lg-row { + flex-direction: row !important; + } + .flex-lg-column { + flex-direction: column !important; + } + .flex-lg-row-reverse { + flex-direction: row-reverse !important; + } + .flex-lg-column-reverse { + flex-direction: column-reverse !important; + } + .flex-lg-wrap { + flex-wrap: wrap !important; + } + .flex-lg-nowrap { + flex-wrap: nowrap !important; + } + .flex-lg-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + .flex-lg-fill { + flex: 1 1 auto !important; + } + .flex-lg-grow-0 { + flex-grow: 0 !important; + } + .flex-lg-grow-1 { + flex-grow: 1 !important; + } + .flex-lg-shrink-0 { + flex-shrink: 0 !important; + } + .flex-lg-shrink-1 { + flex-shrink: 1 !important; + } + .justify-content-lg-start { + justify-content: flex-start !important; + } + .justify-content-lg-end { + justify-content: flex-end !important; + } + .justify-content-lg-center { + justify-content: center !important; + } + .justify-content-lg-between { + justify-content: space-between !important; + } + .justify-content-lg-around { + justify-content: space-around !important; + } + .align-items-lg-start { + align-items: flex-start !important; + } + .align-items-lg-end { + align-items: flex-end !important; + } + .align-items-lg-center { + align-items: center !important; + } + .align-items-lg-baseline { + align-items: baseline !important; + } + .align-items-lg-stretch { + align-items: stretch !important; + } + .align-content-lg-start { + align-content: flex-start !important; + } + .align-content-lg-end { + align-content: flex-end !important; + } + .align-content-lg-center { + align-content: center !important; + } + .align-content-lg-between { + align-content: space-between !important; + } + .align-content-lg-around { + align-content: space-around !important; + } + .align-content-lg-stretch { + align-content: stretch !important; + } + .align-self-lg-auto { + align-self: auto !important; + } + .align-self-lg-start { + align-self: flex-start !important; + } + .align-self-lg-end { + align-self: flex-end !important; + } + .align-self-lg-center { + align-self: center !important; + } + .align-self-lg-baseline { + align-self: baseline !important; + } + .align-self-lg-stretch { + align-self: stretch !important; + } +} + +@media (min-width: 1200px) { + .flex-xl-row { + flex-direction: row !important; + } + .flex-xl-column { + flex-direction: column !important; + } + .flex-xl-row-reverse { + flex-direction: row-reverse !important; + } + .flex-xl-column-reverse { + flex-direction: column-reverse !important; + } + .flex-xl-wrap { + flex-wrap: wrap !important; + } + .flex-xl-nowrap { + flex-wrap: nowrap !important; + } + .flex-xl-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + .flex-xl-fill { + flex: 1 1 auto !important; + } + .flex-xl-grow-0 { + flex-grow: 0 !important; + } + .flex-xl-grow-1 { + flex-grow: 1 !important; + } + .flex-xl-shrink-0 { + flex-shrink: 0 !important; + } + .flex-xl-shrink-1 { + flex-shrink: 1 !important; + } + .justify-content-xl-start { + justify-content: flex-start !important; + } + .justify-content-xl-end { + justify-content: flex-end !important; + } + .justify-content-xl-center { + justify-content: center !important; + } + .justify-content-xl-between { + justify-content: space-between !important; + } + .justify-content-xl-around { + justify-content: space-around !important; + } + .align-items-xl-start { + align-items: flex-start !important; + } + .align-items-xl-end { + align-items: flex-end !important; + } + .align-items-xl-center { + align-items: center !important; + } + .align-items-xl-baseline { + align-items: baseline !important; + } + .align-items-xl-stretch { + align-items: stretch !important; + } + .align-content-xl-start { + align-content: flex-start !important; + } + .align-content-xl-end { + align-content: flex-end !important; + } + .align-content-xl-center { + align-content: center !important; + } + .align-content-xl-between { + align-content: space-between !important; + } + .align-content-xl-around { + align-content: space-around !important; + } + .align-content-xl-stretch { + align-content: stretch !important; + } + .align-self-xl-auto { + align-self: auto !important; + } + .align-self-xl-start { + align-self: flex-start !important; + } + .align-self-xl-end { + align-self: flex-end !important; + } + .align-self-xl-center { + align-self: center !important; + } + .align-self-xl-baseline { + align-self: baseline !important; + } + .align-self-xl-stretch { + align-self: stretch !important; + } +} + +.float-left { + float: left !important; +} + +.float-right { + float: right !important; +} + +.float-none { + float: none !important; +} + +@media (min-width: 576px) { + .float-sm-left { + float: left !important; + } + .float-sm-right { + float: right !important; + } + .float-sm-none { + float: none !important; + } +} + +@media (min-width: 768px) { + .float-md-left { + float: left !important; + } + .float-md-right { + float: right !important; + } + .float-md-none { + float: none !important; + } +} + +@media (min-width: 992px) { + .float-lg-left { + float: left !important; + } + .float-lg-right { + float: right !important; + } + .float-lg-none { + float: none !important; + } +} + +@media (min-width: 1200px) { + .float-xl-left { + float: left !important; + } + .float-xl-right { + float: right !important; + } + .float-xl-none { + float: none !important; + } +} + +.overflow-auto { + overflow: auto !important; +} + +.overflow-hidden { + overflow: hidden !important; +} + +.position-static { + position: static !important; +} + +.position-relative { + position: relative !important; +} + +.position-absolute { + position: absolute !important; +} + +.position-fixed { + position: fixed !important; +} + +.position-sticky { + position: -webkit-sticky !important; + position: sticky !important; +} + +.fixed-top { + position: fixed; + top: 0; + right: 0; + left: 0; + z-index: 1030; +} + +.fixed-bottom { + position: fixed; + right: 0; + bottom: 0; + left: 0; + z-index: 1030; +} + +@supports ((position: -webkit-sticky) or (position: sticky)) { + .sticky-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; + } +} + +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border: 0; +} + +.sr-only-focusable:active, .sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + overflow: visible; + clip: auto; + white-space: normal; +} + +.shadow-sm { + box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important; +} + +.shadow { + box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important; +} + +.shadow-lg { + box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important; +} + +.shadow-none { + box-shadow: none !important; +} + +.w-25 { + width: 25% !important; +} + +.w-50 { + width: 50% !important; +} + +.w-75 { + width: 75% !important; +} + +.w-100 { + width: 100% !important; +} + +.w-auto { + width: auto !important; +} + +.h-25 { + height: 25% !important; +} + +.h-50 { + height: 50% !important; +} + +.h-75 { + height: 75% !important; +} + +.h-100 { + height: 100% !important; +} + +.h-auto { + height: auto !important; +} + +.mw-100 { + max-width: 100% !important; +} + +.mh-100 { + max-height: 100% !important; +} + +.min-vw-100 { + min-width: 100vw !important; +} + +.min-vh-100 { + min-height: 100vh !important; +} + +.vw-100 { + width: 100vw !important; +} + +.vh-100 { + height: 100vh !important; +} + +.stretched-link::after { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1; + pointer-events: auto; + content: ""; + background-color: rgba(0, 0, 0, 0); +} + +.m-0 { + margin: 0 !important; +} + +.mt-0, +.my-0 { + margin-top: 0 !important; +} + +.mr-0, +.mx-0 { + margin-right: 0 !important; +} + +.mb-0, +.my-0 { + margin-bottom: 0 !important; +} + +.ml-0, +.mx-0 { + margin-left: 0 !important; +} + +.m-1 { + margin: 0.25rem !important; +} + +.mt-1, +.my-1 { + margin-top: 0.25rem !important; +} + +.mr-1, +.mx-1 { + margin-right: 0.25rem !important; +} + +.mb-1, +.my-1 { + margin-bottom: 0.25rem !important; +} + +.ml-1, +.mx-1 { + margin-left: 0.25rem !important; +} + +.m-2 { + margin: 0.5rem !important; +} + +.mt-2, +.my-2 { + margin-top: 0.5rem !important; +} + +.mr-2, +.mx-2 { + margin-right: 0.5rem !important; +} + +.mb-2, +.my-2 { + margin-bottom: 0.5rem !important; +} + +.ml-2, +.mx-2 { + margin-left: 0.5rem !important; +} + +.m-3 { + margin: 1rem !important; +} + +.mt-3, +.my-3 { + margin-top: 1rem !important; +} + +.mr-3, +.mx-3 { + margin-right: 1rem !important; +} + +.mb-3, +.my-3 { + margin-bottom: 1rem !important; +} + +.ml-3, +.mx-3 { + margin-left: 1rem !important; +} + +.m-4 { + margin: 1.5rem !important; +} + +.mt-4, +.my-4 { + margin-top: 1.5rem !important; +} + +.mr-4, +.mx-4 { + margin-right: 1.5rem !important; +} + +.mb-4, +.my-4 { + margin-bottom: 1.5rem !important; +} + +.ml-4, +.mx-4 { + margin-left: 1.5rem !important; +} + +.m-5 { + margin: 3rem !important; +} + +.mt-5, +.my-5 { + margin-top: 3rem !important; +} + +.mr-5, +.mx-5 { + margin-right: 3rem !important; +} + +.mb-5, +.my-5 { + margin-bottom: 3rem !important; +} + +.ml-5, +.mx-5 { + margin-left: 3rem !important; +} + +.p-0 { + padding: 0 !important; +} + +.pt-0, +.py-0 { + padding-top: 0 !important; +} + +.pr-0, +.px-0 { + padding-right: 0 !important; +} + +.pb-0, +.py-0 { + padding-bottom: 0 !important; +} + +.pl-0, +.px-0 { + padding-left: 0 !important; +} + +.p-1 { + padding: 0.25rem !important; +} + +.pt-1, +.py-1 { + padding-top: 0.25rem !important; +} + +.pr-1, +.px-1 { + padding-right: 0.25rem !important; +} + +.pb-1, +.py-1 { + padding-bottom: 0.25rem !important; +} + +.pl-1, +.px-1 { + padding-left: 0.25rem !important; +} + +.p-2 { + padding: 0.5rem !important; +} + +.pt-2, +.py-2 { + padding-top: 0.5rem !important; +} + +.pr-2, +.px-2 { + padding-right: 0.5rem !important; +} + +.pb-2, +.py-2 { + padding-bottom: 0.5rem !important; +} + +.pl-2, +.px-2 { + padding-left: 0.5rem !important; +} + +.p-3 { + padding: 1rem !important; +} + +.pt-3, +.py-3 { + padding-top: 1rem !important; +} + +.pr-3, +.px-3 { + padding-right: 1rem !important; +} + +.pb-3, +.py-3 { + padding-bottom: 1rem !important; +} + +.pl-3, +.px-3 { + padding-left: 1rem !important; +} + +.p-4 { + padding: 1.5rem !important; +} + +.pt-4, +.py-4 { + padding-top: 1.5rem !important; +} + +.pr-4, +.px-4 { + padding-right: 1.5rem !important; +} + +.pb-4, +.py-4 { + padding-bottom: 1.5rem !important; +} + +.pl-4, +.px-4 { + padding-left: 1.5rem !important; +} + +.p-5 { + padding: 3rem !important; +} + +.pt-5, +.py-5 { + padding-top: 3rem !important; +} + +.pr-5, +.px-5 { + padding-right: 3rem !important; +} + +.pb-5, +.py-5 { + padding-bottom: 3rem !important; +} + +.pl-5, +.px-5 { + padding-left: 3rem !important; +} + +.m-n1 { + margin: -0.25rem !important; +} + +.mt-n1, +.my-n1 { + margin-top: -0.25rem !important; +} + +.mr-n1, +.mx-n1 { + margin-right: -0.25rem !important; +} + +.mb-n1, +.my-n1 { + margin-bottom: -0.25rem !important; +} + +.ml-n1, +.mx-n1 { + margin-left: -0.25rem !important; +} + +.m-n2 { + margin: -0.5rem !important; +} + +.mt-n2, +.my-n2 { + margin-top: -0.5rem !important; +} + +.mr-n2, +.mx-n2 { + margin-right: -0.5rem !important; +} + +.mb-n2, +.my-n2 { + margin-bottom: -0.5rem !important; +} + +.ml-n2, +.mx-n2 { + margin-left: -0.5rem !important; +} + +.m-n3 { + margin: -1rem !important; +} + +.mt-n3, +.my-n3 { + margin-top: -1rem !important; +} + +.mr-n3, +.mx-n3 { + margin-right: -1rem !important; +} + +.mb-n3, +.my-n3 { + margin-bottom: -1rem !important; +} + +.ml-n3, +.mx-n3 { + margin-left: -1rem !important; +} + +.m-n4 { + margin: -1.5rem !important; +} + +.mt-n4, +.my-n4 { + margin-top: -1.5rem !important; +} + +.mr-n4, +.mx-n4 { + margin-right: -1.5rem !important; +} + +.mb-n4, +.my-n4 { + margin-bottom: -1.5rem !important; +} + +.ml-n4, +.mx-n4 { + margin-left: -1.5rem !important; +} + +.m-n5 { + margin: -3rem !important; +} + +.mt-n5, +.my-n5 { + margin-top: -3rem !important; +} + +.mr-n5, +.mx-n5 { + margin-right: -3rem !important; +} + +.mb-n5, +.my-n5 { + margin-bottom: -3rem !important; +} + +.ml-n5, +.mx-n5 { + margin-left: -3rem !important; +} + +.m-auto { + margin: auto !important; +} + +.mt-auto, +.my-auto { + margin-top: auto !important; +} + +.mr-auto, +.mx-auto { + margin-right: auto !important; +} + +.mb-auto, +.my-auto { + margin-bottom: auto !important; +} + +.ml-auto, +.mx-auto { + margin-left: auto !important; +} + +@media (min-width: 576px) { + .m-sm-0 { + margin: 0 !important; + } + .mt-sm-0, + .my-sm-0 { + margin-top: 0 !important; + } + .mr-sm-0, + .mx-sm-0 { + margin-right: 0 !important; + } + .mb-sm-0, + .my-sm-0 { + margin-bottom: 0 !important; + } + .ml-sm-0, + .mx-sm-0 { + margin-left: 0 !important; + } + .m-sm-1 { + margin: 0.25rem !important; + } + .mt-sm-1, + .my-sm-1 { + margin-top: 0.25rem !important; + } + .mr-sm-1, + .mx-sm-1 { + margin-right: 0.25rem !important; + } + .mb-sm-1, + .my-sm-1 { + margin-bottom: 0.25rem !important; + } + .ml-sm-1, + .mx-sm-1 { + margin-left: 0.25rem !important; + } + .m-sm-2 { + margin: 0.5rem !important; + } + .mt-sm-2, + .my-sm-2 { + margin-top: 0.5rem !important; + } + .mr-sm-2, + .mx-sm-2 { + margin-right: 0.5rem !important; + } + .mb-sm-2, + .my-sm-2 { + margin-bottom: 0.5rem !important; + } + .ml-sm-2, + .mx-sm-2 { + margin-left: 0.5rem !important; + } + .m-sm-3 { + margin: 1rem !important; + } + .mt-sm-3, + .my-sm-3 { + margin-top: 1rem !important; + } + .mr-sm-3, + .mx-sm-3 { + margin-right: 1rem !important; + } + .mb-sm-3, + .my-sm-3 { + margin-bottom: 1rem !important; + } + .ml-sm-3, + .mx-sm-3 { + margin-left: 1rem !important; + } + .m-sm-4 { + margin: 1.5rem !important; + } + .mt-sm-4, + .my-sm-4 { + margin-top: 1.5rem !important; + } + .mr-sm-4, + .mx-sm-4 { + margin-right: 1.5rem !important; + } + .mb-sm-4, + .my-sm-4 { + margin-bottom: 1.5rem !important; + } + .ml-sm-4, + .mx-sm-4 { + margin-left: 1.5rem !important; + } + .m-sm-5 { + margin: 3rem !important; + } + .mt-sm-5, + .my-sm-5 { + margin-top: 3rem !important; + } + .mr-sm-5, + .mx-sm-5 { + margin-right: 3rem !important; + } + .mb-sm-5, + .my-sm-5 { + margin-bottom: 3rem !important; + } + .ml-sm-5, + .mx-sm-5 { + margin-left: 3rem !important; + } + .p-sm-0 { + padding: 0 !important; + } + .pt-sm-0, + .py-sm-0 { + padding-top: 0 !important; + } + .pr-sm-0, + .px-sm-0 { + padding-right: 0 !important; + } + .pb-sm-0, + .py-sm-0 { + padding-bottom: 0 !important; + } + .pl-sm-0, + .px-sm-0 { + padding-left: 0 !important; + } + .p-sm-1 { + padding: 0.25rem !important; + } + .pt-sm-1, + .py-sm-1 { + padding-top: 0.25rem !important; + } + .pr-sm-1, + .px-sm-1 { + padding-right: 0.25rem !important; + } + .pb-sm-1, + .py-sm-1 { + padding-bottom: 0.25rem !important; + } + .pl-sm-1, + .px-sm-1 { + padding-left: 0.25rem !important; + } + .p-sm-2 { + padding: 0.5rem !important; + } + .pt-sm-2, + .py-sm-2 { + padding-top: 0.5rem !important; + } + .pr-sm-2, + .px-sm-2 { + padding-right: 0.5rem !important; + } + .pb-sm-2, + .py-sm-2 { + padding-bottom: 0.5rem !important; + } + .pl-sm-2, + .px-sm-2 { + padding-left: 0.5rem !important; + } + .p-sm-3 { + padding: 1rem !important; + } + .pt-sm-3, + .py-sm-3 { + padding-top: 1rem !important; + } + .pr-sm-3, + .px-sm-3 { + padding-right: 1rem !important; + } + .pb-sm-3, + .py-sm-3 { + padding-bottom: 1rem !important; + } + .pl-sm-3, + .px-sm-3 { + padding-left: 1rem !important; + } + .p-sm-4 { + padding: 1.5rem !important; + } + .pt-sm-4, + .py-sm-4 { + padding-top: 1.5rem !important; + } + .pr-sm-4, + .px-sm-4 { + padding-right: 1.5rem !important; + } + .pb-sm-4, + .py-sm-4 { + padding-bottom: 1.5rem !important; + } + .pl-sm-4, + .px-sm-4 { + padding-left: 1.5rem !important; + } + .p-sm-5 { + padding: 3rem !important; + } + .pt-sm-5, + .py-sm-5 { + padding-top: 3rem !important; + } + .pr-sm-5, + .px-sm-5 { + padding-right: 3rem !important; + } + .pb-sm-5, + .py-sm-5 { + padding-bottom: 3rem !important; + } + .pl-sm-5, + .px-sm-5 { + padding-left: 3rem !important; + } + .m-sm-n1 { + margin: -0.25rem !important; + } + .mt-sm-n1, + .my-sm-n1 { + margin-top: -0.25rem !important; + } + .mr-sm-n1, + .mx-sm-n1 { + margin-right: -0.25rem !important; + } + .mb-sm-n1, + .my-sm-n1 { + margin-bottom: -0.25rem !important; + } + .ml-sm-n1, + .mx-sm-n1 { + margin-left: -0.25rem !important; + } + .m-sm-n2 { + margin: -0.5rem !important; + } + .mt-sm-n2, + .my-sm-n2 { + margin-top: -0.5rem !important; + } + .mr-sm-n2, + .mx-sm-n2 { + margin-right: -0.5rem !important; + } + .mb-sm-n2, + .my-sm-n2 { + margin-bottom: -0.5rem !important; + } + .ml-sm-n2, + .mx-sm-n2 { + margin-left: -0.5rem !important; + } + .m-sm-n3 { + margin: -1rem !important; + } + .mt-sm-n3, + .my-sm-n3 { + margin-top: -1rem !important; + } + .mr-sm-n3, + .mx-sm-n3 { + margin-right: -1rem !important; + } + .mb-sm-n3, + .my-sm-n3 { + margin-bottom: -1rem !important; + } + .ml-sm-n3, + .mx-sm-n3 { + margin-left: -1rem !important; + } + .m-sm-n4 { + margin: -1.5rem !important; + } + .mt-sm-n4, + .my-sm-n4 { + margin-top: -1.5rem !important; + } + .mr-sm-n4, + .mx-sm-n4 { + margin-right: -1.5rem !important; + } + .mb-sm-n4, + .my-sm-n4 { + margin-bottom: -1.5rem !important; + } + .ml-sm-n4, + .mx-sm-n4 { + margin-left: -1.5rem !important; + } + .m-sm-n5 { + margin: -3rem !important; + } + .mt-sm-n5, + .my-sm-n5 { + margin-top: -3rem !important; + } + .mr-sm-n5, + .mx-sm-n5 { + margin-right: -3rem !important; + } + .mb-sm-n5, + .my-sm-n5 { + margin-bottom: -3rem !important; + } + .ml-sm-n5, + .mx-sm-n5 { + margin-left: -3rem !important; + } + .m-sm-auto { + margin: auto !important; + } + .mt-sm-auto, + .my-sm-auto { + margin-top: auto !important; + } + .mr-sm-auto, + .mx-sm-auto { + margin-right: auto !important; + } + .mb-sm-auto, + .my-sm-auto { + margin-bottom: auto !important; + } + .ml-sm-auto, + .mx-sm-auto { + margin-left: auto !important; + } +} + +@media (min-width: 768px) { + .m-md-0 { + margin: 0 !important; + } + .mt-md-0, + .my-md-0 { + margin-top: 0 !important; + } + .mr-md-0, + .mx-md-0 { + margin-right: 0 !important; + } + .mb-md-0, + .my-md-0 { + margin-bottom: 0 !important; + } + .ml-md-0, + .mx-md-0 { + margin-left: 0 !important; + } + .m-md-1 { + margin: 0.25rem !important; + } + .mt-md-1, + .my-md-1 { + margin-top: 0.25rem !important; + } + .mr-md-1, + .mx-md-1 { + margin-right: 0.25rem !important; + } + .mb-md-1, + .my-md-1 { + margin-bottom: 0.25rem !important; + } + .ml-md-1, + .mx-md-1 { + margin-left: 0.25rem !important; + } + .m-md-2 { + margin: 0.5rem !important; + } + .mt-md-2, + .my-md-2 { + margin-top: 0.5rem !important; + } + .mr-md-2, + .mx-md-2 { + margin-right: 0.5rem !important; + } + .mb-md-2, + .my-md-2 { + margin-bottom: 0.5rem !important; + } + .ml-md-2, + .mx-md-2 { + margin-left: 0.5rem !important; + } + .m-md-3 { + margin: 1rem !important; + } + .mt-md-3, + .my-md-3 { + margin-top: 1rem !important; + } + .mr-md-3, + .mx-md-3 { + margin-right: 1rem !important; + } + .mb-md-3, + .my-md-3 { + margin-bottom: 1rem !important; + } + .ml-md-3, + .mx-md-3 { + margin-left: 1rem !important; + } + .m-md-4 { + margin: 1.5rem !important; + } + .mt-md-4, + .my-md-4 { + margin-top: 1.5rem !important; + } + .mr-md-4, + .mx-md-4 { + margin-right: 1.5rem !important; + } + .mb-md-4, + .my-md-4 { + margin-bottom: 1.5rem !important; + } + .ml-md-4, + .mx-md-4 { + margin-left: 1.5rem !important; + } + .m-md-5 { + margin: 3rem !important; + } + .mt-md-5, + .my-md-5 { + margin-top: 3rem !important; + } + .mr-md-5, + .mx-md-5 { + margin-right: 3rem !important; + } + .mb-md-5, + .my-md-5 { + margin-bottom: 3rem !important; + } + .ml-md-5, + .mx-md-5 { + margin-left: 3rem !important; + } + .p-md-0 { + padding: 0 !important; + } + .pt-md-0, + .py-md-0 { + padding-top: 0 !important; + } + .pr-md-0, + .px-md-0 { + padding-right: 0 !important; + } + .pb-md-0, + .py-md-0 { + padding-bottom: 0 !important; + } + .pl-md-0, + .px-md-0 { + padding-left: 0 !important; + } + .p-md-1 { + padding: 0.25rem !important; + } + .pt-md-1, + .py-md-1 { + padding-top: 0.25rem !important; + } + .pr-md-1, + .px-md-1 { + padding-right: 0.25rem !important; + } + .pb-md-1, + .py-md-1 { + padding-bottom: 0.25rem !important; + } + .pl-md-1, + .px-md-1 { + padding-left: 0.25rem !important; + } + .p-md-2 { + padding: 0.5rem !important; + } + .pt-md-2, + .py-md-2 { + padding-top: 0.5rem !important; + } + .pr-md-2, + .px-md-2 { + padding-right: 0.5rem !important; + } + .pb-md-2, + .py-md-2 { + padding-bottom: 0.5rem !important; + } + .pl-md-2, + .px-md-2 { + padding-left: 0.5rem !important; + } + .p-md-3 { + padding: 1rem !important; + } + .pt-md-3, + .py-md-3 { + padding-top: 1rem !important; + } + .pr-md-3, + .px-md-3 { + padding-right: 1rem !important; + } + .pb-md-3, + .py-md-3 { + padding-bottom: 1rem !important; + } + .pl-md-3, + .px-md-3 { + padding-left: 1rem !important; + } + .p-md-4 { + padding: 1.5rem !important; + } + .pt-md-4, + .py-md-4 { + padding-top: 1.5rem !important; + } + .pr-md-4, + .px-md-4 { + padding-right: 1.5rem !important; + } + .pb-md-4, + .py-md-4 { + padding-bottom: 1.5rem !important; + } + .pl-md-4, + .px-md-4 { + padding-left: 1.5rem !important; + } + .p-md-5 { + padding: 3rem !important; + } + .pt-md-5, + .py-md-5 { + padding-top: 3rem !important; + } + .pr-md-5, + .px-md-5 { + padding-right: 3rem !important; + } + .pb-md-5, + .py-md-5 { + padding-bottom: 3rem !important; + } + .pl-md-5, + .px-md-5 { + padding-left: 3rem !important; + } + .m-md-n1 { + margin: -0.25rem !important; + } + .mt-md-n1, + .my-md-n1 { + margin-top: -0.25rem !important; + } + .mr-md-n1, + .mx-md-n1 { + margin-right: -0.25rem !important; + } + .mb-md-n1, + .my-md-n1 { + margin-bottom: -0.25rem !important; + } + .ml-md-n1, + .mx-md-n1 { + margin-left: -0.25rem !important; + } + .m-md-n2 { + margin: -0.5rem !important; + } + .mt-md-n2, + .my-md-n2 { + margin-top: -0.5rem !important; + } + .mr-md-n2, + .mx-md-n2 { + margin-right: -0.5rem !important; + } + .mb-md-n2, + .my-md-n2 { + margin-bottom: -0.5rem !important; + } + .ml-md-n2, + .mx-md-n2 { + margin-left: -0.5rem !important; + } + .m-md-n3 { + margin: -1rem !important; + } + .mt-md-n3, + .my-md-n3 { + margin-top: -1rem !important; + } + .mr-md-n3, + .mx-md-n3 { + margin-right: -1rem !important; + } + .mb-md-n3, + .my-md-n3 { + margin-bottom: -1rem !important; + } + .ml-md-n3, + .mx-md-n3 { + margin-left: -1rem !important; + } + .m-md-n4 { + margin: -1.5rem !important; + } + .mt-md-n4, + .my-md-n4 { + margin-top: -1.5rem !important; + } + .mr-md-n4, + .mx-md-n4 { + margin-right: -1.5rem !important; + } + .mb-md-n4, + .my-md-n4 { + margin-bottom: -1.5rem !important; + } + .ml-md-n4, + .mx-md-n4 { + margin-left: -1.5rem !important; + } + .m-md-n5 { + margin: -3rem !important; + } + .mt-md-n5, + .my-md-n5 { + margin-top: -3rem !important; + } + .mr-md-n5, + .mx-md-n5 { + margin-right: -3rem !important; + } + .mb-md-n5, + .my-md-n5 { + margin-bottom: -3rem !important; + } + .ml-md-n5, + .mx-md-n5 { + margin-left: -3rem !important; + } + .m-md-auto { + margin: auto !important; + } + .mt-md-auto, + .my-md-auto { + margin-top: auto !important; + } + .mr-md-auto, + .mx-md-auto { + margin-right: auto !important; + } + .mb-md-auto, + .my-md-auto { + margin-bottom: auto !important; + } + .ml-md-auto, + .mx-md-auto { + margin-left: auto !important; + } +} + +@media (min-width: 992px) { + .m-lg-0 { + margin: 0 !important; + } + .mt-lg-0, + .my-lg-0 { + margin-top: 0 !important; + } + .mr-lg-0, + .mx-lg-0 { + margin-right: 0 !important; + } + .mb-lg-0, + .my-lg-0 { + margin-bottom: 0 !important; + } + .ml-lg-0, + .mx-lg-0 { + margin-left: 0 !important; + } + .m-lg-1 { + margin: 0.25rem !important; + } + .mt-lg-1, + .my-lg-1 { + margin-top: 0.25rem !important; + } + .mr-lg-1, + .mx-lg-1 { + margin-right: 0.25rem !important; + } + .mb-lg-1, + .my-lg-1 { + margin-bottom: 0.25rem !important; + } + .ml-lg-1, + .mx-lg-1 { + margin-left: 0.25rem !important; + } + .m-lg-2 { + margin: 0.5rem !important; + } + .mt-lg-2, + .my-lg-2 { + margin-top: 0.5rem !important; + } + .mr-lg-2, + .mx-lg-2 { + margin-right: 0.5rem !important; + } + .mb-lg-2, + .my-lg-2 { + margin-bottom: 0.5rem !important; + } + .ml-lg-2, + .mx-lg-2 { + margin-left: 0.5rem !important; + } + .m-lg-3 { + margin: 1rem !important; + } + .mt-lg-3, + .my-lg-3 { + margin-top: 1rem !important; + } + .mr-lg-3, + .mx-lg-3 { + margin-right: 1rem !important; + } + .mb-lg-3, + .my-lg-3 { + margin-bottom: 1rem !important; + } + .ml-lg-3, + .mx-lg-3 { + margin-left: 1rem !important; + } + .m-lg-4 { + margin: 1.5rem !important; + } + .mt-lg-4, + .my-lg-4 { + margin-top: 1.5rem !important; + } + .mr-lg-4, + .mx-lg-4 { + margin-right: 1.5rem !important; + } + .mb-lg-4, + .my-lg-4 { + margin-bottom: 1.5rem !important; + } + .ml-lg-4, + .mx-lg-4 { + margin-left: 1.5rem !important; + } + .m-lg-5 { + margin: 3rem !important; + } + .mt-lg-5, + .my-lg-5 { + margin-top: 3rem !important; + } + .mr-lg-5, + .mx-lg-5 { + margin-right: 3rem !important; + } + .mb-lg-5, + .my-lg-5 { + margin-bottom: 3rem !important; + } + .ml-lg-5, + .mx-lg-5 { + margin-left: 3rem !important; + } + .p-lg-0 { + padding: 0 !important; + } + .pt-lg-0, + .py-lg-0 { + padding-top: 0 !important; + } + .pr-lg-0, + .px-lg-0 { + padding-right: 0 !important; + } + .pb-lg-0, + .py-lg-0 { + padding-bottom: 0 !important; + } + .pl-lg-0, + .px-lg-0 { + padding-left: 0 !important; + } + .p-lg-1 { + padding: 0.25rem !important; + } + .pt-lg-1, + .py-lg-1 { + padding-top: 0.25rem !important; + } + .pr-lg-1, + .px-lg-1 { + padding-right: 0.25rem !important; + } + .pb-lg-1, + .py-lg-1 { + padding-bottom: 0.25rem !important; + } + .pl-lg-1, + .px-lg-1 { + padding-left: 0.25rem !important; + } + .p-lg-2 { + padding: 0.5rem !important; + } + .pt-lg-2, + .py-lg-2 { + padding-top: 0.5rem !important; + } + .pr-lg-2, + .px-lg-2 { + padding-right: 0.5rem !important; + } + .pb-lg-2, + .py-lg-2 { + padding-bottom: 0.5rem !important; + } + .pl-lg-2, + .px-lg-2 { + padding-left: 0.5rem !important; + } + .p-lg-3 { + padding: 1rem !important; + } + .pt-lg-3, + .py-lg-3 { + padding-top: 1rem !important; + } + .pr-lg-3, + .px-lg-3 { + padding-right: 1rem !important; + } + .pb-lg-3, + .py-lg-3 { + padding-bottom: 1rem !important; + } + .pl-lg-3, + .px-lg-3 { + padding-left: 1rem !important; + } + .p-lg-4 { + padding: 1.5rem !important; + } + .pt-lg-4, + .py-lg-4 { + padding-top: 1.5rem !important; + } + .pr-lg-4, + .px-lg-4 { + padding-right: 1.5rem !important; + } + .pb-lg-4, + .py-lg-4 { + padding-bottom: 1.5rem !important; + } + .pl-lg-4, + .px-lg-4 { + padding-left: 1.5rem !important; + } + .p-lg-5 { + padding: 3rem !important; + } + .pt-lg-5, + .py-lg-5 { + padding-top: 3rem !important; + } + .pr-lg-5, + .px-lg-5 { + padding-right: 3rem !important; + } + .pb-lg-5, + .py-lg-5 { + padding-bottom: 3rem !important; + } + .pl-lg-5, + .px-lg-5 { + padding-left: 3rem !important; + } + .m-lg-n1 { + margin: -0.25rem !important; + } + .mt-lg-n1, + .my-lg-n1 { + margin-top: -0.25rem !important; + } + .mr-lg-n1, + .mx-lg-n1 { + margin-right: -0.25rem !important; + } + .mb-lg-n1, + .my-lg-n1 { + margin-bottom: -0.25rem !important; + } + .ml-lg-n1, + .mx-lg-n1 { + margin-left: -0.25rem !important; + } + .m-lg-n2 { + margin: -0.5rem !important; + } + .mt-lg-n2, + .my-lg-n2 { + margin-top: -0.5rem !important; + } + .mr-lg-n2, + .mx-lg-n2 { + margin-right: -0.5rem !important; + } + .mb-lg-n2, + .my-lg-n2 { + margin-bottom: -0.5rem !important; + } + .ml-lg-n2, + .mx-lg-n2 { + margin-left: -0.5rem !important; + } + .m-lg-n3 { + margin: -1rem !important; + } + .mt-lg-n3, + .my-lg-n3 { + margin-top: -1rem !important; + } + .mr-lg-n3, + .mx-lg-n3 { + margin-right: -1rem !important; + } + .mb-lg-n3, + .my-lg-n3 { + margin-bottom: -1rem !important; + } + .ml-lg-n3, + .mx-lg-n3 { + margin-left: -1rem !important; + } + .m-lg-n4 { + margin: -1.5rem !important; + } + .mt-lg-n4, + .my-lg-n4 { + margin-top: -1.5rem !important; + } + .mr-lg-n4, + .mx-lg-n4 { + margin-right: -1.5rem !important; + } + .mb-lg-n4, + .my-lg-n4 { + margin-bottom: -1.5rem !important; + } + .ml-lg-n4, + .mx-lg-n4 { + margin-left: -1.5rem !important; + } + .m-lg-n5 { + margin: -3rem !important; + } + .mt-lg-n5, + .my-lg-n5 { + margin-top: -3rem !important; + } + .mr-lg-n5, + .mx-lg-n5 { + margin-right: -3rem !important; + } + .mb-lg-n5, + .my-lg-n5 { + margin-bottom: -3rem !important; + } + .ml-lg-n5, + .mx-lg-n5 { + margin-left: -3rem !important; + } + .m-lg-auto { + margin: auto !important; + } + .mt-lg-auto, + .my-lg-auto { + margin-top: auto !important; + } + .mr-lg-auto, + .mx-lg-auto { + margin-right: auto !important; + } + .mb-lg-auto, + .my-lg-auto { + margin-bottom: auto !important; + } + .ml-lg-auto, + .mx-lg-auto { + margin-left: auto !important; + } +} + +@media (min-width: 1200px) { + .m-xl-0 { + margin: 0 !important; + } + .mt-xl-0, + .my-xl-0 { + margin-top: 0 !important; + } + .mr-xl-0, + .mx-xl-0 { + margin-right: 0 !important; + } + .mb-xl-0, + .my-xl-0 { + margin-bottom: 0 !important; + } + .ml-xl-0, + .mx-xl-0 { + margin-left: 0 !important; + } + .m-xl-1 { + margin: 0.25rem !important; + } + .mt-xl-1, + .my-xl-1 { + margin-top: 0.25rem !important; + } + .mr-xl-1, + .mx-xl-1 { + margin-right: 0.25rem !important; + } + .mb-xl-1, + .my-xl-1 { + margin-bottom: 0.25rem !important; + } + .ml-xl-1, + .mx-xl-1 { + margin-left: 0.25rem !important; + } + .m-xl-2 { + margin: 0.5rem !important; + } + .mt-xl-2, + .my-xl-2 { + margin-top: 0.5rem !important; + } + .mr-xl-2, + .mx-xl-2 { + margin-right: 0.5rem !important; + } + .mb-xl-2, + .my-xl-2 { + margin-bottom: 0.5rem !important; + } + .ml-xl-2, + .mx-xl-2 { + margin-left: 0.5rem !important; + } + .m-xl-3 { + margin: 1rem !important; + } + .mt-xl-3, + .my-xl-3 { + margin-top: 1rem !important; + } + .mr-xl-3, + .mx-xl-3 { + margin-right: 1rem !important; + } + .mb-xl-3, + .my-xl-3 { + margin-bottom: 1rem !important; + } + .ml-xl-3, + .mx-xl-3 { + margin-left: 1rem !important; + } + .m-xl-4 { + margin: 1.5rem !important; + } + .mt-xl-4, + .my-xl-4 { + margin-top: 1.5rem !important; + } + .mr-xl-4, + .mx-xl-4 { + margin-right: 1.5rem !important; + } + .mb-xl-4, + .my-xl-4 { + margin-bottom: 1.5rem !important; + } + .ml-xl-4, + .mx-xl-4 { + margin-left: 1.5rem !important; + } + .m-xl-5 { + margin: 3rem !important; + } + .mt-xl-5, + .my-xl-5 { + margin-top: 3rem !important; + } + .mr-xl-5, + .mx-xl-5 { + margin-right: 3rem !important; + } + .mb-xl-5, + .my-xl-5 { + margin-bottom: 3rem !important; + } + .ml-xl-5, + .mx-xl-5 { + margin-left: 3rem !important; + } + .p-xl-0 { + padding: 0 !important; + } + .pt-xl-0, + .py-xl-0 { + padding-top: 0 !important; + } + .pr-xl-0, + .px-xl-0 { + padding-right: 0 !important; + } + .pb-xl-0, + .py-xl-0 { + padding-bottom: 0 !important; + } + .pl-xl-0, + .px-xl-0 { + padding-left: 0 !important; + } + .p-xl-1 { + padding: 0.25rem !important; + } + .pt-xl-1, + .py-xl-1 { + padding-top: 0.25rem !important; + } + .pr-xl-1, + .px-xl-1 { + padding-right: 0.25rem !important; + } + .pb-xl-1, + .py-xl-1 { + padding-bottom: 0.25rem !important; + } + .pl-xl-1, + .px-xl-1 { + padding-left: 0.25rem !important; + } + .p-xl-2 { + padding: 0.5rem !important; + } + .pt-xl-2, + .py-xl-2 { + padding-top: 0.5rem !important; + } + .pr-xl-2, + .px-xl-2 { + padding-right: 0.5rem !important; + } + .pb-xl-2, + .py-xl-2 { + padding-bottom: 0.5rem !important; + } + .pl-xl-2, + .px-xl-2 { + padding-left: 0.5rem !important; + } + .p-xl-3 { + padding: 1rem !important; + } + .pt-xl-3, + .py-xl-3 { + padding-top: 1rem !important; + } + .pr-xl-3, + .px-xl-3 { + padding-right: 1rem !important; + } + .pb-xl-3, + .py-xl-3 { + padding-bottom: 1rem !important; + } + .pl-xl-3, + .px-xl-3 { + padding-left: 1rem !important; + } + .p-xl-4 { + padding: 1.5rem !important; + } + .pt-xl-4, + .py-xl-4 { + padding-top: 1.5rem !important; + } + .pr-xl-4, + .px-xl-4 { + padding-right: 1.5rem !important; + } + .pb-xl-4, + .py-xl-4 { + padding-bottom: 1.5rem !important; + } + .pl-xl-4, + .px-xl-4 { + padding-left: 1.5rem !important; + } + .p-xl-5 { + padding: 3rem !important; + } + .pt-xl-5, + .py-xl-5 { + padding-top: 3rem !important; + } + .pr-xl-5, + .px-xl-5 { + padding-right: 3rem !important; + } + .pb-xl-5, + .py-xl-5 { + padding-bottom: 3rem !important; + } + .pl-xl-5, + .px-xl-5 { + padding-left: 3rem !important; + } + .m-xl-n1 { + margin: -0.25rem !important; + } + .mt-xl-n1, + .my-xl-n1 { + margin-top: -0.25rem !important; + } + .mr-xl-n1, + .mx-xl-n1 { + margin-right: -0.25rem !important; + } + .mb-xl-n1, + .my-xl-n1 { + margin-bottom: -0.25rem !important; + } + .ml-xl-n1, + .mx-xl-n1 { + margin-left: -0.25rem !important; + } + .m-xl-n2 { + margin: -0.5rem !important; + } + .mt-xl-n2, + .my-xl-n2 { + margin-top: -0.5rem !important; + } + .mr-xl-n2, + .mx-xl-n2 { + margin-right: -0.5rem !important; + } + .mb-xl-n2, + .my-xl-n2 { + margin-bottom: -0.5rem !important; + } + .ml-xl-n2, + .mx-xl-n2 { + margin-left: -0.5rem !important; + } + .m-xl-n3 { + margin: -1rem !important; + } + .mt-xl-n3, + .my-xl-n3 { + margin-top: -1rem !important; + } + .mr-xl-n3, + .mx-xl-n3 { + margin-right: -1rem !important; + } + .mb-xl-n3, + .my-xl-n3 { + margin-bottom: -1rem !important; + } + .ml-xl-n3, + .mx-xl-n3 { + margin-left: -1rem !important; + } + .m-xl-n4 { + margin: -1.5rem !important; + } + .mt-xl-n4, + .my-xl-n4 { + margin-top: -1.5rem !important; + } + .mr-xl-n4, + .mx-xl-n4 { + margin-right: -1.5rem !important; + } + .mb-xl-n4, + .my-xl-n4 { + margin-bottom: -1.5rem !important; + } + .ml-xl-n4, + .mx-xl-n4 { + margin-left: -1.5rem !important; + } + .m-xl-n5 { + margin: -3rem !important; + } + .mt-xl-n5, + .my-xl-n5 { + margin-top: -3rem !important; + } + .mr-xl-n5, + .mx-xl-n5 { + margin-right: -3rem !important; + } + .mb-xl-n5, + .my-xl-n5 { + margin-bottom: -3rem !important; + } + .ml-xl-n5, + .mx-xl-n5 { + margin-left: -3rem !important; + } + .m-xl-auto { + margin: auto !important; + } + .mt-xl-auto, + .my-xl-auto { + margin-top: auto !important; + } + .mr-xl-auto, + .mx-xl-auto { + margin-right: auto !important; + } + .mb-xl-auto, + .my-xl-auto { + margin-bottom: auto !important; + } + .ml-xl-auto, + .mx-xl-auto { + margin-left: auto !important; + } +} + +.text-monospace { + font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace !important; +} + +.text-justify { + text-align: justify !important; +} + +.text-wrap { + white-space: normal !important; +} + +.text-nowrap { + white-space: nowrap !important; +} + +.text-truncate { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.text-left { + text-align: left !important; +} + +.text-right { + text-align: right !important; +} + +.text-center { + text-align: center !important; +} + +@media (min-width: 576px) { + .text-sm-left { + text-align: left !important; + } + .text-sm-right { + text-align: right !important; + } + .text-sm-center { + text-align: center !important; + } +} + +@media (min-width: 768px) { + .text-md-left { + text-align: left !important; + } + .text-md-right { + text-align: right !important; + } + .text-md-center { + text-align: center !important; + } +} + +@media (min-width: 992px) { + .text-lg-left { + text-align: left !important; + } + .text-lg-right { + text-align: right !important; + } + .text-lg-center { + text-align: center !important; + } +} + +@media (min-width: 1200px) { + .text-xl-left { + text-align: left !important; + } + .text-xl-right { + text-align: right !important; + } + .text-xl-center { + text-align: center !important; + } +} + +.text-lowercase { + text-transform: lowercase !important; +} + +.text-uppercase { + text-transform: uppercase !important; +} + +.text-capitalize { + text-transform: capitalize !important; +} + +.font-weight-light { + font-weight: 300 !important; +} + +.font-weight-lighter { + font-weight: lighter !important; +} + +.font-weight-normal { + font-weight: 400 !important; +} + +.font-weight-bold { + font-weight: 700 !important; +} + +.font-weight-bolder { + font-weight: bolder !important; +} + +.font-italic { + font-style: italic !important; +} + +.text-white { + color: #fff !important; +} + +.text-primary { + color: #007bff !important; +} + +a.text-primary:hover, a.text-primary:focus { + color: #0056b3 !important; +} + +.text-secondary { + color: #6c757d !important; +} + +a.text-secondary:hover, a.text-secondary:focus { + color: #494f54 !important; +} + +.text-success { + color: #28a745 !important; +} + +a.text-success:hover, a.text-success:focus { + color: #19692c !important; +} + +.text-info { + color: #17a2b8 !important; +} + +a.text-info:hover, a.text-info:focus { + color: #0f6674 !important; +} + +.text-warning { + color: #ffc107 !important; +} + +a.text-warning:hover, a.text-warning:focus { + color: #ba8b00 !important; +} + +.text-danger { + color: #dc3545 !important; +} + +a.text-danger:hover, a.text-danger:focus { + color: #a71d2a !important; +} + +.text-light { + color: #f8f9fa !important; +} + +a.text-light:hover, a.text-light:focus { + color: #cbd3da !important; +} + +.text-dark { + color: #343a40 !important; +} + +a.text-dark:hover, a.text-dark:focus { + color: #121416 !important; +} + +.text-body { + color: #212529 !important; +} + +.text-muted { + color: #6c757d !important; +} + +.text-black-50 { + color: rgba(0, 0, 0, 0.5) !important; +} + +.text-white-50 { + color: rgba(255, 255, 255, 0.5) !important; +} + +.text-hide { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +.text-decoration-none { + text-decoration: none !important; +} + +.text-break { + word-break: break-word !important; + overflow-wrap: break-word !important; +} + +.text-reset { + color: inherit !important; +} + +.visible { + visibility: visible !important; +} + +.invisible { + visibility: hidden !important; +} + +@media print { + *, + *::before, + *::after { + text-shadow: none !important; + box-shadow: none !important; + } + a:not(.btn) { + text-decoration: underline; + } + abbr[title]::after { + content: " (" attr(title) ")"; + } + pre { + white-space: pre-wrap !important; + } + pre, + blockquote { + border: 1px solid #adb5bd; + page-break-inside: avoid; + } + thead { + display: table-header-group; + } + tr, + img { + page-break-inside: avoid; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } + @page { + size: a3; + } + body { + min-width: 992px !important; + } + .container { + min-width: 992px !important; + } + .navbar { + display: none; + } + .badge { + border: 1px solid #000; + } + .table { + border-collapse: collapse !important; + } + .table td, + .table th { + background-color: #fff !important; + } + .table-bordered th, + .table-bordered td { + border: 1px solid #dee2e6 !important; + } + .table-dark { + color: inherit; + } + .table-dark th, + .table-dark td, + .table-dark thead th, + .table-dark tbody + tbody { + border-color: #dee2e6; + } + .table .thead-dark th { + color: inherit; + border-color: #dee2e6; + } +} + +.rtl, +[dir="rtl"] { + text-align: right; + direction: rtl; +} + +.rtl .nav, +[dir="rtl"] .nav { + padding-right: 0; +} + +.rtl .navbar-nav .nav-item, +[dir="rtl"] .navbar-nav .nav-item { + float: right; +} + +.rtl .navbar-nav .nav-item + .nav-item, +[dir="rtl"] .navbar-nav .nav-item + .nav-item { + margin-right: inherit; + margin-left: 1rem; +} + +.rtl th, +[dir="rtl"] th { + text-align: right; +} + +.rtl .alert-dismissible, +[dir="rtl"] .alert-dismissible { + padding-right: 1.25rem; + padding-left: 4rem; +} + +.rtl .dropdown-menu, +[dir="rtl"] .dropdown-menu { + right: 0; + left: inherit; + text-align: right; +} + +.rtl .checkbox label, +[dir="rtl"] .checkbox label { + padding-right: 1.25rem; + padding-left: inherit; +} + +.rtl .btn-group > .btn:not(:first-child), +.rtl .btn-group > .btn-group:not(:first-child), +[dir="rtl"] .btn-group > .btn:not(:first-child), +[dir="rtl"] .btn-group > .btn-group:not(:first-child) { + margin-left: initial; + margin-right: -1px; +} + +.rtl .btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle), +[dir="rtl"] .btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { + border-radius: 0 0.25rem 0.25rem 0; +} + +.rtl .btn-group > .btn:last-child:not(:first-child), +.rtl .btn-group > .dropdown-toggle:not(:first-child), +[dir="rtl"] .btn-group > .btn:last-child:not(:first-child), +[dir="rtl"] .btn-group > .dropdown-toggle:not(:first-child) { + border-radius: 0.25rem 0 0 0.25rem; +} + +.rtl .btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child, +[dir="rtl"] .btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-radius: 0.25rem 0 0 0.25rem; +} + +.rtl .custom-control, +[dir="rtl"] .custom-control { + padding-right: 1.5rem; + padding-left: inherit; + margin-right: inherit; + margin-left: 1rem; +} + +.rtl .custom-control-indicator, +[dir="rtl"] .custom-control-indicator { + right: 0; + left: inherit; +} + +.rtl .custom-file-label::after, +[dir="rtl"] .custom-file-label::after { + right: initial; + left: -1px; + border-radius: .25rem 0 0 .25rem; +} + +.rtl .custom-control-label::after, +.rtl .custom-control-label::before, +[dir="rtl"] .custom-control-label::after, +[dir="rtl"] .custom-control-label::before { + right: -1.5rem; + left: inherit; +} + +.rtl .custom-select, +[dir="rtl"] .custom-select { + padding: 0.375rem 0.75rem 0.375rem 1.75rem; + background: #fff url("data:image/svg+xml,") no-repeat left 0.75rem center; + background-size: 8px 10px; +} + +.rtl .custom-switch, +[dir="rtl"] .custom-switch { + padding-right: 2.25rem; + padding-left: inherit; +} + +.rtl .custom-switch .custom-control-label::before, +[dir="rtl"] .custom-switch .custom-control-label::before { + right: -2.25rem; +} + +.rtl .custom-switch .custom-control-label::after, +[dir="rtl"] .custom-switch .custom-control-label::after { + right: calc(-2.25rem + 2px); +} + +.rtl .custom-switch .custom-control-input:checked ~ .custom-control-label::after, +[dir="rtl"] .custom-switch .custom-control-input:checked ~ .custom-control-label::after { + transform: translateX(-0.75rem); +} + +.rtl .input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle), +.rtl .input-group > .input-group-append:last-child > .input-group-text:not(:last-child), +.rtl .input-group > .input-group-append:not(:last-child) > .btn, +.rtl .input-group > .input-group-append:not(:last-child) > .input-group-text, +.rtl .input-group > .input-group-prepend > .btn, +.rtl .input-group > .input-group-prepend > .input-group-text, +[dir="rtl"] .input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle), +[dir="rtl"] .input-group > .input-group-append:last-child > .input-group-text:not(:last-child), +[dir="rtl"] .input-group > .input-group-append:not(:last-child) > .btn, +[dir="rtl"] .input-group > .input-group-append:not(:last-child) > .input-group-text, +[dir="rtl"] .input-group > .input-group-prepend > .btn, +[dir="rtl"] .input-group > .input-group-prepend > .input-group-text { + border-radius: 0 0.25rem 0.25rem 0; +} + +.rtl .input-group > .input-group-append > .btn, +.rtl .input-group > .input-group-append > .input-group-text, +.rtl .input-group > .input-group-prepend:first-child > .btn:not(:first-child), +.rtl .input-group > .input-group-prepend:first-child > .input-group-text:not(:first-child), +.rtl .input-group > .input-group-prepend:not(:first-child) > .btn, +.rtl .input-group > .input-group-prepend:not(:first-child) > .input-group-text, +[dir="rtl"] .input-group > .input-group-append > .btn, +[dir="rtl"] .input-group > .input-group-append > .input-group-text, +[dir="rtl"] .input-group > .input-group-prepend:first-child > .btn:not(:first-child), +[dir="rtl"] .input-group > .input-group-prepend:first-child > .input-group-text:not(:first-child), +[dir="rtl"] .input-group > .input-group-prepend:not(:first-child) > .btn, +[dir="rtl"] .input-group > .input-group-prepend:not(:first-child) > .input-group-text { + border-radius: 0.25rem 0 0 0.25rem; +} + +.rtl .input-group > .custom-select:not(:first-child), +.rtl .input-group > .form-control:not(:first-child), +[dir="rtl"] .input-group > .custom-select:not(:first-child), +[dir="rtl"] .input-group > .form-control:not(:first-child) { + border-radius: 0.25rem 0 0 0.25rem; +} + +.rtl .input-group > .custom-select:not(:last-child), +.rtl .input-group > .form-control:not(:last-child), +[dir="rtl"] .input-group > .custom-select:not(:last-child), +[dir="rtl"] .input-group > .form-control:not(:last-child) { + border-radius: 0 0.25rem 0.25rem 0; +} + +.rtl .input-group > .custom-select:not(:last-child):not(:first-child), +.rtl .input-group > .form-control:not(:last-child):not(:first-child), +[dir="rtl"] .input-group > .custom-select:not(:last-child):not(:first-child), +[dir="rtl"] .input-group > .form-control:not(:last-child):not(:first-child) { + border-radius: 0; +} + +.rtl .radio input, +.rtl .radio-inline, +.rtl .checkbox input, +.rtl .checkbox-inline input, +[dir="rtl"] .radio input, +[dir="rtl"] .radio-inline, +[dir="rtl"] .checkbox input, +[dir="rtl"] .checkbox-inline input { + margin-right: -1.25rem; + margin-left: inherit; +} + +.rtl .breadcrumb-item + .breadcrumb-item, +[dir="rtl"] .breadcrumb-item + .breadcrumb-item { + padding-right: 0.5rem; + padding-left: 0; + color: #6c757d; + content: "/"; +} + +.rtl .breadcrumb-item + .breadcrumb-item::before, +[dir="rtl"] .breadcrumb-item + .breadcrumb-item::before { + padding-right: 0; + padding-left: 0.5rem; +} + +.rtl .list-group, +[dir="rtl"] .list-group { + padding-right: 0; + padding-left: 40px; +} + +.rtl .close, +[dir="rtl"] .close { + float: left; +} + +.rtl .modal-header .close, +[dir="rtl"] .modal-header .close { + margin: -15px auto -15px -15px; +} + +.rtl .modal-footer > :not(:first-child), +[dir="rtl"] .modal-footer > :not(:first-child) { + margin-right: .25rem; +} + +.rtl .modal-footer > :not(:last-child), +[dir="rtl"] .modal-footer > :not(:last-child) { + margin-left: .25rem; +} + +.rtl .modal-footer > :first-child, +[dir="rtl"] .modal-footer > :first-child { + margin-right: 0; +} + +.rtl .modal-footer > :last-child, +[dir="rtl"] .modal-footer > :last-child { + margin-left: 0; +} + +.rtl .alert-dismissible .close, +[dir="rtl"] .alert-dismissible .close { + right: inherit; + left: 0; +} + +.rtl .dropdown-toggle::after, +[dir="rtl"] .dropdown-toggle::after { + margin-right: .255em; + margin-left: 0; +} + +.rtl .form-check-input, +[dir="rtl"] .form-check-input { + margin-right: -1.25rem; + margin-left: inherit; +} + +.rtl .form-check-label, +[dir="rtl"] .form-check-label { + padding-right: 1.25rem; + padding-left: inherit; +} + +.rtl .pagination, +.rtl .list-unstyled, +.rtl .list-inline, +[dir="rtl"] .pagination, +[dir="rtl"] .list-unstyled, +[dir="rtl"] .list-inline { + padding-right: 0; + padding-left: inherit; +} + +.rtl .pagination .page-item:first-child .page-link, +[dir="rtl"] .pagination .page-item:first-child .page-link { + border-top-right-radius: 0.25rem; + border-bottom-right-radius: 0.25rem; + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.rtl .pagination .page-item:last-child .page-link, +[dir="rtl"] .pagination .page-item:last-child .page-link { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-top-left-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; +} + +.rtl .offset-1, +[dir="rtl"] .offset-1 { + margin-right: 8.333333%; + margin-left: 0; +} + +.rtl .offset-2, +[dir="rtl"] .offset-2 { + margin-right: 16.666667%; + margin-left: 0; +} + +.rtl .offset-3, +[dir="rtl"] .offset-3 { + margin-right: 25%; + margin-left: 0; +} + +.rtl .offset-4, +[dir="rtl"] .offset-4 { + margin-right: 33.333333%; + margin-left: 0; +} + +.rtl .offset-5, +[dir="rtl"] .offset-5 { + margin-right: 41.666667%; + margin-left: 0; +} + +.rtl .offset-6, +[dir="rtl"] .offset-6 { + margin-right: 50%; + margin-left: 0; +} + +.rtl .offset-7, +[dir="rtl"] .offset-7 { + margin-right: 58.333333%; + margin-left: 0; +} + +.rtl .offset-8, +[dir="rtl"] .offset-8 { + margin-right: 66.666667%; + margin-left: 0; +} + +.rtl .offset-9, +[dir="rtl"] .offset-9 { + margin-right: 75%; + margin-left: 0; +} + +.rtl .offset-10, +[dir="rtl"] .offset-10 { + margin-right: 83.333333%; + margin-left: 0; +} + +.rtl .offset-11, +[dir="rtl"] .offset-11 { + margin-right: 91.666667%; + margin-left: 0; +} + +@media (min-width: 576px) { + .rtl .offset-sm-0, + [dir="rtl"] .offset-sm-0 { + margin-right: 0; + margin-left: 0; + } + .rtl .offset-sm-1, + [dir="rtl"] .offset-sm-1 { + margin-right: 8.333333%; + margin-left: 0; + } + .rtl .offset-sm-2, + [dir="rtl"] .offset-sm-2 { + margin-right: 16.666667%; + margin-left: 0; + } + .rtl .offset-sm-3, + [dir="rtl"] .offset-sm-3 { + margin-right: 25%; + margin-left: 0; + } + .rtl .offset-sm-4, + [dir="rtl"] .offset-sm-4 { + margin-right: 33.333333%; + margin-left: 0; + } + .rtl .offset-sm-5, + [dir="rtl"] .offset-sm-5 { + margin-right: 41.666667%; + margin-left: 0; + } + .rtl .offset-sm-6, + [dir="rtl"] .offset-sm-6 { + margin-right: 50%; + margin-left: 0; + } + .rtl .offset-sm-7, + [dir="rtl"] .offset-sm-7 { + margin-right: 58.333333%; + margin-left: 0; + } + .rtl .offset-sm-8, + [dir="rtl"] .offset-sm-8 { + margin-right: 66.666667%; + margin-left: 0; + } + .rtl .offset-sm-9, + [dir="rtl"] .offset-sm-9 { + margin-right: 75%; + margin-left: 0; + } + .rtl .offset-sm-10, + [dir="rtl"] .offset-sm-10 { + margin-right: 83.333333%; + margin-left: 0; + } + .rtl .offset-sm-11, + [dir="rtl"] .offset-sm-11 { + margin-right: 91.666667%; + margin-left: 0; + } +} + +@media (min-width: 768px) { + .rtl .offset-md-0, + [dir="rtl"] .offset-md-0 { + margin-right: 0; + margin-left: 0; + } + .rtl .offset-md-1, + [dir="rtl"] .offset-md-1 { + margin-right: 8.333333%; + margin-left: 0; + } + .rtl .offset-md-2, + [dir="rtl"] .offset-md-2 { + margin-right: 16.666667%; + margin-left: 0; + } + .rtl .offset-md-3, + [dir="rtl"] .offset-md-3 { + margin-right: 25%; + margin-left: 0; + } + .rtl .offset-md-4, + [dir="rtl"] .offset-md-4 { + margin-right: 33.333333%; + margin-left: 0; + } + .rtl .offset-md-5, + [dir="rtl"] .offset-md-5 { + margin-right: 41.666667%; + margin-left: 0; + } + .rtl .offset-md-6, + [dir="rtl"] .offset-md-6 { + margin-right: 50%; + margin-left: 0; + } + .rtl .offset-md-7, + [dir="rtl"] .offset-md-7 { + margin-right: 58.333333%; + margin-left: 0; + } + .rtl .offset-md-8, + [dir="rtl"] .offset-md-8 { + margin-right: 66.666667%; + margin-left: 0; + } + .rtl .offset-md-9, + [dir="rtl"] .offset-md-9 { + margin-right: 75%; + margin-left: 0; + } + .rtl .offset-md-10, + [dir="rtl"] .offset-md-10 { + margin-right: 83.333333%; + margin-left: 0; + } + .rtl .offset-md-11, + [dir="rtl"] .offset-md-11 { + margin-right: 91.666667%; + margin-left: 0; + } +} + +@media (min-width: 992px) { + .rtl .offset-lg-0, + [dir="rtl"] .offset-lg-0 { + margin-right: 0; + margin-left: 0; + } + .rtl .offset-lg-1, + [dir="rtl"] .offset-lg-1 { + margin-right: 8.333333%; + margin-left: 0; + } + .rtl .offset-lg-2, + [dir="rtl"] .offset-lg-2 { + margin-right: 16.666667%; + margin-left: 0; + } + .rtl .offset-lg-3, + [dir="rtl"] .offset-lg-3 { + margin-right: 25%; + margin-left: 0; + } + .rtl .offset-lg-4, + [dir="rtl"] .offset-lg-4 { + margin-right: 33.333333%; + margin-left: 0; + } + .rtl .offset-lg-5, + [dir="rtl"] .offset-lg-5 { + margin-right: 41.666667%; + margin-left: 0; + } + .rtl .offset-lg-6, + [dir="rtl"] .offset-lg-6 { + margin-right: 50%; + margin-left: 0; + } + .rtl .offset-lg-7, + [dir="rtl"] .offset-lg-7 { + margin-right: 58.333333%; + margin-left: 0; + } + .rtl .offset-lg-8, + [dir="rtl"] .offset-lg-8 { + margin-right: 66.666667%; + margin-left: 0; + } + .rtl .offset-lg-9, + [dir="rtl"] .offset-lg-9 { + margin-right: 75%; + margin-left: 0; + } + .rtl .offset-lg-10, + [dir="rtl"] .offset-lg-10 { + margin-right: 83.333333%; + margin-left: 0; + } + .rtl .offset-lg-11, + [dir="rtl"] .offset-lg-11 { + margin-right: 91.666667%; + margin-left: 0; + } +} + +@media (min-width: 1200px) { + .rtl .offset-xl-0, + [dir="rtl"] .offset-xl-0 { + margin-right: 0; + margin-left: 0; + } + .rtl .offset-xl-1, + [dir="rtl"] .offset-xl-1 { + margin-right: 8.333333%; + margin-left: 0; + } + .rtl .offset-xl-2, + [dir="rtl"] .offset-xl-2 { + margin-right: 16.666667%; + margin-left: 0; + } + .rtl .offset-xl-3, + [dir="rtl"] .offset-xl-3 { + margin-right: 25%; + margin-left: 0; + } + .rtl .offset-xl-4, + [dir="rtl"] .offset-xl-4 { + margin-right: 33.333333%; + margin-left: 0; + } + .rtl .offset-xl-5, + [dir="rtl"] .offset-xl-5 { + margin-right: 41.666667%; + margin-left: 0; + } + .rtl .offset-xl-6, + [dir="rtl"] .offset-xl-6 { + margin-right: 50%; + margin-left: 0; + } + .rtl .offset-xl-7, + [dir="rtl"] .offset-xl-7 { + margin-right: 58.333333%; + margin-left: 0; + } + .rtl .offset-xl-8, + [dir="rtl"] .offset-xl-8 { + margin-right: 66.666667%; + margin-left: 0; + } + .rtl .offset-xl-9, + [dir="rtl"] .offset-xl-9 { + margin-right: 75%; + margin-left: 0; + } + .rtl .offset-xl-10, + [dir="rtl"] .offset-xl-10 { + margin-right: 83.333333%; + margin-left: 0; + } + .rtl .offset-xl-11, + [dir="rtl"] .offset-xl-11 { + margin-right: 91.666667%; + margin-left: 0; + } +} + +.rtl .mr-0, +[dir="rtl"] .mr-0 { + margin-right: 0 !important; + margin-left: 0 !important; +} + +.rtl .ml-0, +[dir="rtl"] .ml-0 { + margin-left: 0 !important; + margin-right: 0 !important; +} + +.rtl mx-0, +[dir="rtl"] mx-0 { + margin-left: 0 !important; + margin-right: 0 !important; +} + +.rtl .mr-1, +[dir="rtl"] .mr-1 { + margin-right: 0 !important; + margin-left: 0.25rem !important; +} + +.rtl .ml-1, +[dir="rtl"] .ml-1 { + margin-left: 0 !important; + margin-right: 0.25rem !important; +} + +.rtl mx-1, +[dir="rtl"] mx-1 { + margin-left: 0.25rem !important; + margin-right: 0.25rem !important; +} + +.rtl .mr-2, +[dir="rtl"] .mr-2 { + margin-right: 0 !important; + margin-left: 0.5rem !important; +} + +.rtl .ml-2, +[dir="rtl"] .ml-2 { + margin-left: 0 !important; + margin-right: 0.5rem !important; +} + +.rtl mx-2, +[dir="rtl"] mx-2 { + margin-left: 0.5rem !important; + margin-right: 0.5rem !important; +} + +.rtl .mr-3, +[dir="rtl"] .mr-3 { + margin-right: 0 !important; + margin-left: 1rem !important; +} + +.rtl .ml-3, +[dir="rtl"] .ml-3 { + margin-left: 0 !important; + margin-right: 1rem !important; +} + +.rtl mx-3, +[dir="rtl"] mx-3 { + margin-left: 1rem !important; + margin-right: 1rem !important; +} + +.rtl .mr-4, +[dir="rtl"] .mr-4 { + margin-right: 0 !important; + margin-left: 1.5rem !important; +} + +.rtl .ml-4, +[dir="rtl"] .ml-4 { + margin-left: 0 !important; + margin-right: 1.5rem !important; +} + +.rtl mx-4, +[dir="rtl"] mx-4 { + margin-left: 1.5rem !important; + margin-right: 1.5rem !important; +} + +.rtl .mr-5, +[dir="rtl"] .mr-5 { + margin-right: 0 !important; + margin-left: 3rem !important; +} + +.rtl .ml-5, +[dir="rtl"] .ml-5 { + margin-left: 0 !important; + margin-right: 3rem !important; +} + +.rtl mx-5, +[dir="rtl"] mx-5 { + margin-left: 3rem !important; + margin-right: 3rem !important; +} + +.rtl .pr-0, +[dir="rtl"] .pr-0 { + padding-right: 0 !important; + padding-left: 0 !important; +} + +.rtl .pl-0, +[dir="rtl"] .pl-0 { + padding-left: 0 !important; + padding-right: 0 !important; +} + +.rtl px-0, +[dir="rtl"] px-0 { + padding-left: 0 !important; + padding-right: 0 !important; +} + +.rtl .pr-1, +[dir="rtl"] .pr-1 { + padding-right: 0 !important; + padding-left: 0.25rem !important; +} + +.rtl .pl-1, +[dir="rtl"] .pl-1 { + padding-left: 0 !important; + padding-right: 0.25rem !important; +} + +.rtl px-1, +[dir="rtl"] px-1 { + padding-left: 0.25rem !important; + padding-right: 0.25rem !important; +} + +.rtl .pr-2, +[dir="rtl"] .pr-2 { + padding-right: 0 !important; + padding-left: 0.5rem !important; +} + +.rtl .pl-2, +[dir="rtl"] .pl-2 { + padding-left: 0 !important; + padding-right: 0.5rem !important; +} + +.rtl px-2, +[dir="rtl"] px-2 { + padding-left: 0.5rem !important; + padding-right: 0.5rem !important; +} + +.rtl .pr-3, +[dir="rtl"] .pr-3 { + padding-right: 0 !important; + padding-left: 1rem !important; +} + +.rtl .pl-3, +[dir="rtl"] .pl-3 { + padding-left: 0 !important; + padding-right: 1rem !important; +} + +.rtl px-3, +[dir="rtl"] px-3 { + padding-left: 1rem !important; + padding-right: 1rem !important; +} + +.rtl .pr-4, +[dir="rtl"] .pr-4 { + padding-right: 0 !important; + padding-left: 1.5rem !important; +} + +.rtl .pl-4, +[dir="rtl"] .pl-4 { + padding-left: 0 !important; + padding-right: 1.5rem !important; +} + +.rtl px-4, +[dir="rtl"] px-4 { + padding-left: 1.5rem !important; + padding-right: 1.5rem !important; +} + +.rtl .pr-5, +[dir="rtl"] .pr-5 { + padding-right: 0 !important; + padding-left: 3rem !important; +} + +.rtl .pl-5, +[dir="rtl"] .pl-5 { + padding-left: 0 !important; + padding-right: 3rem !important; +} + +.rtl px-5, +[dir="rtl"] px-5 { + padding-left: 3rem !important; + padding-right: 3rem !important; +} + +.rtl .mr-auto, +[dir="rtl"] .mr-auto { + margin-right: 0 !important; + margin-left: auto !important; +} + +.rtl .ml-auto, +[dir="rtl"] .ml-auto { + margin-right: auto !important; + margin-left: 0 !important; +} + +.rtl .mx-auto, +[dir="rtl"] .mx-auto { + margin-right: auto !important; + margin-left: auto !important; +} + +@media (min-width: 576px) { + .rtl .mr-sm-0, + [dir="rtl"] .mr-sm-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + .rtl .ml-sm-0, + [dir="rtl"] .ml-sm-0 { + margin-left: 0 !important; + margin-right: 0 !important; + } + .rtl mx-sm-0, + [dir="rtl"] mx-sm-0 { + margin-left: 0 !important; + margin-right: 0 !important; + } + .rtl .mr-sm-1, + [dir="rtl"] .mr-sm-1 { + margin-right: 0 !important; + margin-left: 0.25rem !important; + } + .rtl .ml-sm-1, + [dir="rtl"] .ml-sm-1 { + margin-left: 0 !important; + margin-right: 0.25rem !important; + } + .rtl mx-sm-1, + [dir="rtl"] mx-sm-1 { + margin-left: 0.25rem !important; + margin-right: 0.25rem !important; + } + .rtl .mr-sm-2, + [dir="rtl"] .mr-sm-2 { + margin-right: 0 !important; + margin-left: 0.5rem !important; + } + .rtl .ml-sm-2, + [dir="rtl"] .ml-sm-2 { + margin-left: 0 !important; + margin-right: 0.5rem !important; + } + .rtl mx-sm-2, + [dir="rtl"] mx-sm-2 { + margin-left: 0.5rem !important; + margin-right: 0.5rem !important; + } + .rtl .mr-sm-3, + [dir="rtl"] .mr-sm-3 { + margin-right: 0 !important; + margin-left: 1rem !important; + } + .rtl .ml-sm-3, + [dir="rtl"] .ml-sm-3 { + margin-left: 0 !important; + margin-right: 1rem !important; + } + .rtl mx-sm-3, + [dir="rtl"] mx-sm-3 { + margin-left: 1rem !important; + margin-right: 1rem !important; + } + .rtl .mr-sm-4, + [dir="rtl"] .mr-sm-4 { + margin-right: 0 !important; + margin-left: 1.5rem !important; + } + .rtl .ml-sm-4, + [dir="rtl"] .ml-sm-4 { + margin-left: 0 !important; + margin-right: 1.5rem !important; + } + .rtl mx-sm-4, + [dir="rtl"] mx-sm-4 { + margin-left: 1.5rem !important; + margin-right: 1.5rem !important; + } + .rtl .mr-sm-5, + [dir="rtl"] .mr-sm-5 { + margin-right: 0 !important; + margin-left: 3rem !important; + } + .rtl .ml-sm-5, + [dir="rtl"] .ml-sm-5 { + margin-left: 0 !important; + margin-right: 3rem !important; + } + .rtl mx-sm-5, + [dir="rtl"] mx-sm-5 { + margin-left: 3rem !important; + margin-right: 3rem !important; + } + .rtl .pr-sm-0, + [dir="rtl"] .pr-sm-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + .rtl .pl-sm-0, + [dir="rtl"] .pl-sm-0 { + padding-left: 0 !important; + padding-right: 0 !important; + } + .rtl px-sm-0, + [dir="rtl"] px-sm-0 { + padding-left: 0 !important; + padding-right: 0 !important; + } + .rtl .pr-sm-1, + [dir="rtl"] .pr-sm-1 { + padding-right: 0 !important; + padding-left: 0.25rem !important; + } + .rtl .pl-sm-1, + [dir="rtl"] .pl-sm-1 { + padding-left: 0 !important; + padding-right: 0.25rem !important; + } + .rtl px-sm-1, + [dir="rtl"] px-sm-1 { + padding-left: 0.25rem !important; + padding-right: 0.25rem !important; + } + .rtl .pr-sm-2, + [dir="rtl"] .pr-sm-2 { + padding-right: 0 !important; + padding-left: 0.5rem !important; + } + .rtl .pl-sm-2, + [dir="rtl"] .pl-sm-2 { + padding-left: 0 !important; + padding-right: 0.5rem !important; + } + .rtl px-sm-2, + [dir="rtl"] px-sm-2 { + padding-left: 0.5rem !important; + padding-right: 0.5rem !important; + } + .rtl .pr-sm-3, + [dir="rtl"] .pr-sm-3 { + padding-right: 0 !important; + padding-left: 1rem !important; + } + .rtl .pl-sm-3, + [dir="rtl"] .pl-sm-3 { + padding-left: 0 !important; + padding-right: 1rem !important; + } + .rtl px-sm-3, + [dir="rtl"] px-sm-3 { + padding-left: 1rem !important; + padding-right: 1rem !important; + } + .rtl .pr-sm-4, + [dir="rtl"] .pr-sm-4 { + padding-right: 0 !important; + padding-left: 1.5rem !important; + } + .rtl .pl-sm-4, + [dir="rtl"] .pl-sm-4 { + padding-left: 0 !important; + padding-right: 1.5rem !important; + } + .rtl px-sm-4, + [dir="rtl"] px-sm-4 { + padding-left: 1.5rem !important; + padding-right: 1.5rem !important; + } + .rtl .pr-sm-5, + [dir="rtl"] .pr-sm-5 { + padding-right: 0 !important; + padding-left: 3rem !important; + } + .rtl .pl-sm-5, + [dir="rtl"] .pl-sm-5 { + padding-left: 0 !important; + padding-right: 3rem !important; + } + .rtl px-sm-5, + [dir="rtl"] px-sm-5 { + padding-left: 3rem !important; + padding-right: 3rem !important; + } + .rtl .mr-sm-auto, + [dir="rtl"] .mr-sm-auto { + margin-right: 0 !important; + margin-left: auto !important; + } + .rtl .ml-sm-auto, + [dir="rtl"] .ml-sm-auto { + margin-right: auto !important; + margin-left: 0 !important; + } + .rtl .mx-sm-auto, + [dir="rtl"] .mx-sm-auto { + margin-right: auto !important; + margin-left: auto !important; + } +} + +@media (min-width: 768px) { + .rtl .mr-md-0, + [dir="rtl"] .mr-md-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + .rtl .ml-md-0, + [dir="rtl"] .ml-md-0 { + margin-left: 0 !important; + margin-right: 0 !important; + } + .rtl mx-md-0, + [dir="rtl"] mx-md-0 { + margin-left: 0 !important; + margin-right: 0 !important; + } + .rtl .mr-md-1, + [dir="rtl"] .mr-md-1 { + margin-right: 0 !important; + margin-left: 0.25rem !important; + } + .rtl .ml-md-1, + [dir="rtl"] .ml-md-1 { + margin-left: 0 !important; + margin-right: 0.25rem !important; + } + .rtl mx-md-1, + [dir="rtl"] mx-md-1 { + margin-left: 0.25rem !important; + margin-right: 0.25rem !important; + } + .rtl .mr-md-2, + [dir="rtl"] .mr-md-2 { + margin-right: 0 !important; + margin-left: 0.5rem !important; + } + .rtl .ml-md-2, + [dir="rtl"] .ml-md-2 { + margin-left: 0 !important; + margin-right: 0.5rem !important; + } + .rtl mx-md-2, + [dir="rtl"] mx-md-2 { + margin-left: 0.5rem !important; + margin-right: 0.5rem !important; + } + .rtl .mr-md-3, + [dir="rtl"] .mr-md-3 { + margin-right: 0 !important; + margin-left: 1rem !important; + } + .rtl .ml-md-3, + [dir="rtl"] .ml-md-3 { + margin-left: 0 !important; + margin-right: 1rem !important; + } + .rtl mx-md-3, + [dir="rtl"] mx-md-3 { + margin-left: 1rem !important; + margin-right: 1rem !important; + } + .rtl .mr-md-4, + [dir="rtl"] .mr-md-4 { + margin-right: 0 !important; + margin-left: 1.5rem !important; + } + .rtl .ml-md-4, + [dir="rtl"] .ml-md-4 { + margin-left: 0 !important; + margin-right: 1.5rem !important; + } + .rtl mx-md-4, + [dir="rtl"] mx-md-4 { + margin-left: 1.5rem !important; + margin-right: 1.5rem !important; + } + .rtl .mr-md-5, + [dir="rtl"] .mr-md-5 { + margin-right: 0 !important; + margin-left: 3rem !important; + } + .rtl .ml-md-5, + [dir="rtl"] .ml-md-5 { + margin-left: 0 !important; + margin-right: 3rem !important; + } + .rtl mx-md-5, + [dir="rtl"] mx-md-5 { + margin-left: 3rem !important; + margin-right: 3rem !important; + } + .rtl .pr-md-0, + [dir="rtl"] .pr-md-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + .rtl .pl-md-0, + [dir="rtl"] .pl-md-0 { + padding-left: 0 !important; + padding-right: 0 !important; + } + .rtl px-md-0, + [dir="rtl"] px-md-0 { + padding-left: 0 !important; + padding-right: 0 !important; + } + .rtl .pr-md-1, + [dir="rtl"] .pr-md-1 { + padding-right: 0 !important; + padding-left: 0.25rem !important; + } + .rtl .pl-md-1, + [dir="rtl"] .pl-md-1 { + padding-left: 0 !important; + padding-right: 0.25rem !important; + } + .rtl px-md-1, + [dir="rtl"] px-md-1 { + padding-left: 0.25rem !important; + padding-right: 0.25rem !important; + } + .rtl .pr-md-2, + [dir="rtl"] .pr-md-2 { + padding-right: 0 !important; + padding-left: 0.5rem !important; + } + .rtl .pl-md-2, + [dir="rtl"] .pl-md-2 { + padding-left: 0 !important; + padding-right: 0.5rem !important; + } + .rtl px-md-2, + [dir="rtl"] px-md-2 { + padding-left: 0.5rem !important; + padding-right: 0.5rem !important; + } + .rtl .pr-md-3, + [dir="rtl"] .pr-md-3 { + padding-right: 0 !important; + padding-left: 1rem !important; + } + .rtl .pl-md-3, + [dir="rtl"] .pl-md-3 { + padding-left: 0 !important; + padding-right: 1rem !important; + } + .rtl px-md-3, + [dir="rtl"] px-md-3 { + padding-left: 1rem !important; + padding-right: 1rem !important; + } + .rtl .pr-md-4, + [dir="rtl"] .pr-md-4 { + padding-right: 0 !important; + padding-left: 1.5rem !important; + } + .rtl .pl-md-4, + [dir="rtl"] .pl-md-4 { + padding-left: 0 !important; + padding-right: 1.5rem !important; + } + .rtl px-md-4, + [dir="rtl"] px-md-4 { + padding-left: 1.5rem !important; + padding-right: 1.5rem !important; + } + .rtl .pr-md-5, + [dir="rtl"] .pr-md-5 { + padding-right: 0 !important; + padding-left: 3rem !important; + } + .rtl .pl-md-5, + [dir="rtl"] .pl-md-5 { + padding-left: 0 !important; + padding-right: 3rem !important; + } + .rtl px-md-5, + [dir="rtl"] px-md-5 { + padding-left: 3rem !important; + padding-right: 3rem !important; + } + .rtl .mr-md-auto, + [dir="rtl"] .mr-md-auto { + margin-right: 0 !important; + margin-left: auto !important; + } + .rtl .ml-md-auto, + [dir="rtl"] .ml-md-auto { + margin-right: auto !important; + margin-left: 0 !important; + } + .rtl .mx-md-auto, + [dir="rtl"] .mx-md-auto { + margin-right: auto !important; + margin-left: auto !important; + } +} + +@media (min-width: 992px) { + .rtl .mr-lg-0, + [dir="rtl"] .mr-lg-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + .rtl .ml-lg-0, + [dir="rtl"] .ml-lg-0 { + margin-left: 0 !important; + margin-right: 0 !important; + } + .rtl mx-lg-0, + [dir="rtl"] mx-lg-0 { + margin-left: 0 !important; + margin-right: 0 !important; + } + .rtl .mr-lg-1, + [dir="rtl"] .mr-lg-1 { + margin-right: 0 !important; + margin-left: 0.25rem !important; + } + .rtl .ml-lg-1, + [dir="rtl"] .ml-lg-1 { + margin-left: 0 !important; + margin-right: 0.25rem !important; + } + .rtl mx-lg-1, + [dir="rtl"] mx-lg-1 { + margin-left: 0.25rem !important; + margin-right: 0.25rem !important; + } + .rtl .mr-lg-2, + [dir="rtl"] .mr-lg-2 { + margin-right: 0 !important; + margin-left: 0.5rem !important; + } + .rtl .ml-lg-2, + [dir="rtl"] .ml-lg-2 { + margin-left: 0 !important; + margin-right: 0.5rem !important; + } + .rtl mx-lg-2, + [dir="rtl"] mx-lg-2 { + margin-left: 0.5rem !important; + margin-right: 0.5rem !important; + } + .rtl .mr-lg-3, + [dir="rtl"] .mr-lg-3 { + margin-right: 0 !important; + margin-left: 1rem !important; + } + .rtl .ml-lg-3, + [dir="rtl"] .ml-lg-3 { + margin-left: 0 !important; + margin-right: 1rem !important; + } + .rtl mx-lg-3, + [dir="rtl"] mx-lg-3 { + margin-left: 1rem !important; + margin-right: 1rem !important; + } + .rtl .mr-lg-4, + [dir="rtl"] .mr-lg-4 { + margin-right: 0 !important; + margin-left: 1.5rem !important; + } + .rtl .ml-lg-4, + [dir="rtl"] .ml-lg-4 { + margin-left: 0 !important; + margin-right: 1.5rem !important; + } + .rtl mx-lg-4, + [dir="rtl"] mx-lg-4 { + margin-left: 1.5rem !important; + margin-right: 1.5rem !important; + } + .rtl .mr-lg-5, + [dir="rtl"] .mr-lg-5 { + margin-right: 0 !important; + margin-left: 3rem !important; + } + .rtl .ml-lg-5, + [dir="rtl"] .ml-lg-5 { + margin-left: 0 !important; + margin-right: 3rem !important; + } + .rtl mx-lg-5, + [dir="rtl"] mx-lg-5 { + margin-left: 3rem !important; + margin-right: 3rem !important; + } + .rtl .pr-lg-0, + [dir="rtl"] .pr-lg-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + .rtl .pl-lg-0, + [dir="rtl"] .pl-lg-0 { + padding-left: 0 !important; + padding-right: 0 !important; + } + .rtl px-lg-0, + [dir="rtl"] px-lg-0 { + padding-left: 0 !important; + padding-right: 0 !important; + } + .rtl .pr-lg-1, + [dir="rtl"] .pr-lg-1 { + padding-right: 0 !important; + padding-left: 0.25rem !important; + } + .rtl .pl-lg-1, + [dir="rtl"] .pl-lg-1 { + padding-left: 0 !important; + padding-right: 0.25rem !important; + } + .rtl px-lg-1, + [dir="rtl"] px-lg-1 { + padding-left: 0.25rem !important; + padding-right: 0.25rem !important; + } + .rtl .pr-lg-2, + [dir="rtl"] .pr-lg-2 { + padding-right: 0 !important; + padding-left: 0.5rem !important; + } + .rtl .pl-lg-2, + [dir="rtl"] .pl-lg-2 { + padding-left: 0 !important; + padding-right: 0.5rem !important; + } + .rtl px-lg-2, + [dir="rtl"] px-lg-2 { + padding-left: 0.5rem !important; + padding-right: 0.5rem !important; + } + .rtl .pr-lg-3, + [dir="rtl"] .pr-lg-3 { + padding-right: 0 !important; + padding-left: 1rem !important; + } + .rtl .pl-lg-3, + [dir="rtl"] .pl-lg-3 { + padding-left: 0 !important; + padding-right: 1rem !important; + } + .rtl px-lg-3, + [dir="rtl"] px-lg-3 { + padding-left: 1rem !important; + padding-right: 1rem !important; + } + .rtl .pr-lg-4, + [dir="rtl"] .pr-lg-4 { + padding-right: 0 !important; + padding-left: 1.5rem !important; + } + .rtl .pl-lg-4, + [dir="rtl"] .pl-lg-4 { + padding-left: 0 !important; + padding-right: 1.5rem !important; + } + .rtl px-lg-4, + [dir="rtl"] px-lg-4 { + padding-left: 1.5rem !important; + padding-right: 1.5rem !important; + } + .rtl .pr-lg-5, + [dir="rtl"] .pr-lg-5 { + padding-right: 0 !important; + padding-left: 3rem !important; + } + .rtl .pl-lg-5, + [dir="rtl"] .pl-lg-5 { + padding-left: 0 !important; + padding-right: 3rem !important; + } + .rtl px-lg-5, + [dir="rtl"] px-lg-5 { + padding-left: 3rem !important; + padding-right: 3rem !important; + } + .rtl .mr-lg-auto, + [dir="rtl"] .mr-lg-auto { + margin-right: 0 !important; + margin-left: auto !important; + } + .rtl .ml-lg-auto, + [dir="rtl"] .ml-lg-auto { + margin-right: auto !important; + margin-left: 0 !important; + } + .rtl .mx-lg-auto, + [dir="rtl"] .mx-lg-auto { + margin-right: auto !important; + margin-left: auto !important; + } +} + +@media (min-width: 1200px) { + .rtl .mr-xl-0, + [dir="rtl"] .mr-xl-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + .rtl .ml-xl-0, + [dir="rtl"] .ml-xl-0 { + margin-left: 0 !important; + margin-right: 0 !important; + } + .rtl mx-xl-0, + [dir="rtl"] mx-xl-0 { + margin-left: 0 !important; + margin-right: 0 !important; + } + .rtl .mr-xl-1, + [dir="rtl"] .mr-xl-1 { + margin-right: 0 !important; + margin-left: 0.25rem !important; + } + .rtl .ml-xl-1, + [dir="rtl"] .ml-xl-1 { + margin-left: 0 !important; + margin-right: 0.25rem !important; + } + .rtl mx-xl-1, + [dir="rtl"] mx-xl-1 { + margin-left: 0.25rem !important; + margin-right: 0.25rem !important; + } + .rtl .mr-xl-2, + [dir="rtl"] .mr-xl-2 { + margin-right: 0 !important; + margin-left: 0.5rem !important; + } + .rtl .ml-xl-2, + [dir="rtl"] .ml-xl-2 { + margin-left: 0 !important; + margin-right: 0.5rem !important; + } + .rtl mx-xl-2, + [dir="rtl"] mx-xl-2 { + margin-left: 0.5rem !important; + margin-right: 0.5rem !important; + } + .rtl .mr-xl-3, + [dir="rtl"] .mr-xl-3 { + margin-right: 0 !important; + margin-left: 1rem !important; + } + .rtl .ml-xl-3, + [dir="rtl"] .ml-xl-3 { + margin-left: 0 !important; + margin-right: 1rem !important; + } + .rtl mx-xl-3, + [dir="rtl"] mx-xl-3 { + margin-left: 1rem !important; + margin-right: 1rem !important; + } + .rtl .mr-xl-4, + [dir="rtl"] .mr-xl-4 { + margin-right: 0 !important; + margin-left: 1.5rem !important; + } + .rtl .ml-xl-4, + [dir="rtl"] .ml-xl-4 { + margin-left: 0 !important; + margin-right: 1.5rem !important; + } + .rtl mx-xl-4, + [dir="rtl"] mx-xl-4 { + margin-left: 1.5rem !important; + margin-right: 1.5rem !important; + } + .rtl .mr-xl-5, + [dir="rtl"] .mr-xl-5 { + margin-right: 0 !important; + margin-left: 3rem !important; + } + .rtl .ml-xl-5, + [dir="rtl"] .ml-xl-5 { + margin-left: 0 !important; + margin-right: 3rem !important; + } + .rtl mx-xl-5, + [dir="rtl"] mx-xl-5 { + margin-left: 3rem !important; + margin-right: 3rem !important; + } + .rtl .pr-xl-0, + [dir="rtl"] .pr-xl-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + .rtl .pl-xl-0, + [dir="rtl"] .pl-xl-0 { + padding-left: 0 !important; + padding-right: 0 !important; + } + .rtl px-xl-0, + [dir="rtl"] px-xl-0 { + padding-left: 0 !important; + padding-right: 0 !important; + } + .rtl .pr-xl-1, + [dir="rtl"] .pr-xl-1 { + padding-right: 0 !important; + padding-left: 0.25rem !important; + } + .rtl .pl-xl-1, + [dir="rtl"] .pl-xl-1 { + padding-left: 0 !important; + padding-right: 0.25rem !important; + } + .rtl px-xl-1, + [dir="rtl"] px-xl-1 { + padding-left: 0.25rem !important; + padding-right: 0.25rem !important; + } + .rtl .pr-xl-2, + [dir="rtl"] .pr-xl-2 { + padding-right: 0 !important; + padding-left: 0.5rem !important; + } + .rtl .pl-xl-2, + [dir="rtl"] .pl-xl-2 { + padding-left: 0 !important; + padding-right: 0.5rem !important; + } + .rtl px-xl-2, + [dir="rtl"] px-xl-2 { + padding-left: 0.5rem !important; + padding-right: 0.5rem !important; + } + .rtl .pr-xl-3, + [dir="rtl"] .pr-xl-3 { + padding-right: 0 !important; + padding-left: 1rem !important; + } + .rtl .pl-xl-3, + [dir="rtl"] .pl-xl-3 { + padding-left: 0 !important; + padding-right: 1rem !important; + } + .rtl px-xl-3, + [dir="rtl"] px-xl-3 { + padding-left: 1rem !important; + padding-right: 1rem !important; + } + .rtl .pr-xl-4, + [dir="rtl"] .pr-xl-4 { + padding-right: 0 !important; + padding-left: 1.5rem !important; + } + .rtl .pl-xl-4, + [dir="rtl"] .pl-xl-4 { + padding-left: 0 !important; + padding-right: 1.5rem !important; + } + .rtl px-xl-4, + [dir="rtl"] px-xl-4 { + padding-left: 1.5rem !important; + padding-right: 1.5rem !important; + } + .rtl .pr-xl-5, + [dir="rtl"] .pr-xl-5 { + padding-right: 0 !important; + padding-left: 3rem !important; + } + .rtl .pl-xl-5, + [dir="rtl"] .pl-xl-5 { + padding-left: 0 !important; + padding-right: 3rem !important; + } + .rtl px-xl-5, + [dir="rtl"] px-xl-5 { + padding-left: 3rem !important; + padding-right: 3rem !important; + } + .rtl .mr-xl-auto, + [dir="rtl"] .mr-xl-auto { + margin-right: 0 !important; + margin-left: auto !important; + } + .rtl .ml-xl-auto, + [dir="rtl"] .ml-xl-auto { + margin-right: auto !important; + margin-left: 0 !important; + } + .rtl .mx-xl-auto, + [dir="rtl"] .mx-xl-auto { + margin-right: auto !important; + margin-left: auto !important; + } +} + +.rtl .text-right, +[dir="rtl"] .text-right { + text-align: left !important; +} + +.rtl .text-left, +[dir="rtl"] .text-left { + text-align: right !important; +} + +@media (min-width: 576px) { + .rtl .text-sm-right, + [dir="rtl"] .text-sm-right { + text-align: left !important; + } + .rtl .text-sm-left, + [dir="rtl"] .text-sm-left { + text-align: right !important; + } +} + +@media (min-width: 768px) { + .rtl .text-md-right, + [dir="rtl"] .text-md-right { + text-align: left !important; + } + .rtl .text-md-left, + [dir="rtl"] .text-md-left { + text-align: right !important; + } +} + +@media (min-width: 992px) { + .rtl .text-lg-right, + [dir="rtl"] .text-lg-right { + text-align: left !important; + } + .rtl .text-lg-left, + [dir="rtl"] .text-lg-left { + text-align: right !important; + } +} + +@media (min-width: 1200px) { + .rtl .text-xl-right, + [dir="rtl"] .text-xl-right { + text-align: left !important; + } + .rtl .text-xl-left, + [dir="rtl"] .text-xl-left { + text-align: right !important; + } +} +/*# sourceMappingURL=bootstrap-rtl.css.map */ \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap/css/bootstrap-rtl.css.map b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap/css/bootstrap-rtl.css.map new file mode 100644 index 0000000000..a1927ae7b4 --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap/css/bootstrap-rtl.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../scss/bootstrap-rtl.scss","bootstrap-rtl.css","../../scss/_root.scss","../../scss/_reboot.scss","../../scss/_variables.scss","../../scss/vendor/_rfs.scss","../../scss/mixins/_hover.scss","../../scss/_type.scss","../../scss/mixins/_lists.scss","../../scss/_images.scss","../../scss/mixins/_image.scss","../../scss/mixins/_border-radius.scss","../../scss/_code.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_breakpoints.scss","../../scss/mixins/_grid-framework.scss","../../scss/_tables.scss","../../scss/mixins/_table-row.scss","../../scss/_functions.scss","../../scss/_forms.scss","../../scss/mixins/_transition.scss","../../scss/mixins/_forms.scss","../../scss/mixins/_gradients.scss","../../scss/_buttons.scss","../../scss/mixins/_buttons.scss","../../scss/_transitions.scss","../../scss/_dropdown.scss","../../scss/mixins/_caret.scss","../../scss/mixins/_nav-divider.scss","../../scss/_button-group.scss","../../scss/_input-group.scss","../../scss/_custom-forms.scss","../../scss/_nav.scss","../../scss/_navbar.scss","../../scss/_card.scss","../../scss/_breadcrumb.scss","../../scss/_pagination.scss","../../scss/mixins/_pagination.scss","../../scss/_badge.scss","../../scss/mixins/_badge.scss","../../scss/_jumbotron.scss","../../scss/_alert.scss","../../scss/mixins/_alert.scss","../../scss/_progress.scss","../../scss/_media.scss","../../scss/_list-group.scss","../../scss/mixins/_list-group.scss","../../scss/_close.scss","../../scss/_toasts.scss","../../scss/_modal.scss","../../scss/_tooltip.scss","../../scss/mixins/_reset-text.scss","../../scss/_popover.scss","../../scss/_carousel.scss","../../scss/mixins/_clearfix.scss","../../scss/_spinners.scss","../../scss/utilities/_align.scss","../../scss/mixins/_background-variant.scss","../../scss/utilities/_background.scss","../../scss/utilities/_borders.scss","../../scss/utilities/_display.scss","../../scss/utilities/_embed.scss","../../scss/utilities/_flex.scss","../../scss/utilities/_float.scss","../../scss/utilities/_overflow.scss","../../scss/utilities/_position.scss","../../scss/utilities/_screenreaders.scss","../../scss/mixins/_screen-reader.scss","../../scss/utilities/_shadows.scss","../../scss/utilities/_sizing.scss","../../scss/utilities/_stretched-link.scss","../../scss/utilities/_spacing.scss","../../scss/utilities/_text.scss","../../scss/mixins/_text-truncate.scss","../../scss/mixins/_text-emphasis.scss","../../scss/mixins/_text-hide.scss","../../scss/utilities/_visibility.scss","../../scss/_print.scss","../../scss/_rtl.scss"],"names":[],"mappings":"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AAwB;AFpH1B;;AE4HA;EACE,aAAa;EACb,0BAA0B;AFzH5B;;AEgIA;EACE,qBAAqB;AF7HvB;;AEgIA;EACE,kBAAkB;EAClB,eAAe;AF7HjB;;AEgIA;EACE,aAAa;AF7Hf;;AAEA;EEiIE,wBAAwB;AF/H1B;;AM3VA;;EAEE,qBHySuC;EGvSvC,gBHyS+B;EGxS/B,gBHyS+B;AHoDjC;;AMzVA;EFgHM,iBAtCY;AJmRlB;;AM5VA;EF+GM,eAtCY;AJuRlB;;AM/VA;EF8GM,kBAtCY;AJ2RlB;;AMlWA;EF6GM,iBAtCY;AJ+RlB;;AMrWA;EF4GM,kBAtCY;AJmSlB;;AMxWA;EF2GM,eAtCY;AJuSlB;;AM1WA;EFyGM,kBAtCY;EEjEhB,gBH2S+B;AHkEjC;;AMzWA;EFmGM,eAtCY;EE3DhB,gBH8R+B;EG7R/B,gBHqR+B;AHuFjC;;AM1WA;EF8FM,iBAtCY;EEtDhB,gBH0R+B;EGzR/B,gBHgR+B;AH6FjC;;AM3WA;EFyFM,iBAtCY;EEjDhB,gBHsR+B;EGrR/B,gBH2Q+B;AHmGjC;;AM5WA;EFoFM,iBAtCY;EE5ChB,gBHkR+B;EGjR/B,gBHsQ+B;AHyGjC;;AElVA;EIpBE,gBHiFW;EGhFX,mBHgFW;EG/EX,SAAS;EACT,wCHzCa;AHmZf;;AMlWA;;EFMI,cAAW;EEHb,gBH8N+B;AHuIjC;;AMlWA;;EAEE,cHsQgC;EGrQhC,yBH8QmC;AHuFrC;;AM7VA;EC/EE,eAAe;EACf,gBAAgB;APgblB;;AM7VA;ECpFE,eAAe;EACf,gBAAgB;APqblB;;AM/VA;EACE,qBAAqB;ANkWvB;;AMnWA;EAII,oBHwP+B;AH2GnC;;AMzVA;EFjCI,cAAW;EEmCb,yBAAyB;AN4V3B;;AMxVA;EACE,mBHwBW;ECTP,kBAtCY;AJmXlB;;AMxVA;EACE,cAAc;EF7CZ,cAAW;EE+Cb,cH1GgB;AHqclB;;AM9VA;EAMI,qBAAqB;AN4VzB;;AQ/cA;ECIE,eAAe;EAGf,YAAY;AT6cd;;AQ9cA;EACE,gBLigCwC;EKhgCxC,sBLRa;EKSb,yBLNgB;EOLd,sBP6OgC;EMvOlC,eAAe;EAGf,YAAY;ATsdd;;AQxcA;EAEE,qBAAqB;AR0cvB;;AQvcA;EACE,qBAA0B;EAC1B,cAAc;AR0chB;;AQvcA;EJkCI,cAAW;EIhCb,cL3BgB;AHqelB;;AWjfA;EPuEI,gBAAW;EOrEb,cRoCe;EQnCf,qBAAqB;AXofvB;;AWjfE;EACE,cAAc;AXoflB;;AW/eA;EACE,sBRqlCuC;EC3hCrC,gBAAW;EOxDb,WRTa;EQUb,yBRDgB;EOXd,qBP+O+B;AHgRnC;;AWvfA;EASI,UAAU;EPkDV,eAAW;EOhDX,gBR4Q6B;AHsOjC;;AE1SA;ESjME,cAAc;EPyCZ,gBAAW;EOvCb,cRjBgB;AHggBlB;;AWlfA;EP0CI,kBAAW;EOlCX,cAAc;EACd,kBAAkB;AX+etB;;AW1eA;EACE,iBR4jCuC;EQ3jCvC,kBAAkB;AX6epB;;AYrhBE;ECDA,WAAW;EACX,mBAA0B;EAC1B,kBAAyB;EACzB,kBAAkB;EAClB,iBAAiB;Ab0hBnB;;AcveI;EFtDF;ICaI,gBVmMK;EHkVT;AACF;;Ac7eI;EFtDF;ICaI,gBVoMK;EHuVT;AACF;;AcnfI;EFtDF;ICaI,gBVqMK;EH4VT;AACF;;AczfI;EFtDF;ICaI,iBVsMM;EHiWV;AACF;;AY/iBE;ECPA,WAAW;EACX,mBAA0B;EAC1B,kBAAyB;EACzB,kBAAkB;EAClB,iBAAiB;Ab0jBnB;;AcvgBI;EFrCE;IACE,gBT8LG;EHkXT;AACF;;Ac7gBI;EFrCE;IACE,gBT+LG;EHuXT;AACF;;AcnhBI;EFrCE;IACE,gBTgMG;EH4XT;AACF;;AczhBI;EFrCE;IACE,iBTiMI;EHiYV;AACF;;AY/iBE;ECnBA,aAAa;EACb,eAAe;EACf,mBAA0B;EAC1B,kBAAyB;AbskB3B;;AYhjBE;EACE,eAAe;EACf,cAAc;AZmjBlB;;AYrjBE;;EAMI,gBAAgB;EAChB,eAAe;AZojBrB;;AetmBE;;;;;;EACE,kBAAkB;EAClB,WAAW;EACX,mBAA0B;EAC1B,kBAAyB;Af8mB7B;;Ae3lBM;EACE,aAAa;EACb,YAAY;EACZ,eAAe;Af8lBvB;;Ae1lBQ;EF8BJ,cAAuB;EACvB,eAAwB;AbgkB5B;;Ae/lBQ;EF8BJ,aAAuB;EACvB,cAAwB;AbqkB5B;;AepmBQ;EF8BJ,oBAAuB;EACvB,qBAAwB;Ab0kB5B;;AezmBQ;EF8BJ,aAAuB;EACvB,cAAwB;Ab+kB5B;;Ae9mBQ;EF8BJ,aAAuB;EACvB,cAAwB;AbolB5B;;AennBQ;EF8BJ,oBAAuB;EACvB,qBAAwB;AbylB5B;;AennBM;EFQJ,cAAc;EACd,WAAW;EACX,eAAe;Ab+mBjB;;AepnBQ;EFLN,mBAAsC;EAItC,oBAAuC;Ab0nBzC;;AeznBQ;EFLN,oBAAsC;EAItC,qBAAuC;Ab+nBzC;;Ae9nBQ;EFLN,aAAsC;EAItC,cAAuC;AbooBzC;;AenoBQ;EFLN,oBAAsC;EAItC,qBAAuC;AbyoBzC;;AexoBQ;EFLN,oBAAsC;EAItC,qBAAuC;Ab8oBzC;;Ae7oBQ;EFLN,aAAsC;EAItC,cAAuC;AbmpBzC;;AelpBQ;EFLN,oBAAsC;EAItC,qBAAuC;AbwpBzC;;AevpBQ;EFLN,oBAAsC;EAItC,qBAAuC;Ab6pBzC;;Ae5pBQ;EFLN,aAAsC;EAItC,cAAuC;AbkqBzC;;AejqBQ;EFLN,oBAAsC;EAItC,qBAAuC;AbuqBzC;;AetqBQ;EFLN,oBAAsC;EAItC,qBAAuC;Ab4qBzC;;Ae3qBQ;EFLN,cAAsC;EAItC,eAAuC;AbirBzC;;Ae3qBM;EAAwB,SAAS;Af+qBvC;;Ae7qBM;EAAuB,SZ6KG;AHogBhC;;Ae9qBQ;EAAwB,QADZ;AfmrBpB;;AelrBQ;EAAwB,QADZ;AfurBpB;;AetrBQ;EAAwB,QADZ;Af2rBpB;;Ae1rBQ;EAAwB,QADZ;Af+rBpB;;Ae9rBQ;EAAwB,QADZ;AfmsBpB;;AelsBQ;EAAwB,QADZ;AfusBpB;;AetsBQ;EAAwB,QADZ;Af2sBpB;;Ae1sBQ;EAAwB,QADZ;Af+sBpB;;Ae9sBQ;EAAwB,QADZ;AfmtBpB;;AeltBQ;EAAwB,QADZ;AfutBpB;;AettBQ;EAAwB,SADZ;Af2tBpB;;Ae1tBQ;EAAwB,SADZ;Af+tBpB;;Ae9tBQ;EAAwB,SADZ;AfmuBpB;;Ae5tBU;EFNR,uBAA+C;AbsuBjD;;AehuBU;EFNR,wBAA+C;Ab0uBjD;;AepuBU;EFNR,iBAA+C;Ab8uBjD;;AexuBU;EFNR,wBAA+C;AbkvBjD;;Ae5uBU;EFNR,wBAA+C;AbsvBjD;;AehvBU;EFNR,iBAA+C;Ab0vBjD;;AepvBU;EFNR,wBAA+C;Ab8vBjD;;AexvBU;EFNR,wBAA+C;AbkwBjD;;Ae5vBU;EFNR,iBAA+C;AbswBjD;;AehwBU;EFNR,wBAA+C;Ab0wBjD;;AepwBU;EFNR,wBAA+C;Ab8wBjD;;Ac3wBI;EC9BE;IACE,aAAa;IACb,YAAY;IACZ,eAAe;Ef6yBrB;EezyBM;IF8BJ,cAAuB;IACvB,eAAwB;Eb8wB1B;Ee7yBM;IF8BJ,aAAuB;IACvB,cAAwB;EbkxB1B;EejzBM;IF8BJ,oBAAuB;IACvB,qBAAwB;EbsxB1B;EerzBM;IF8BJ,aAAuB;IACvB,cAAwB;Eb0xB1B;EezzBM;IF8BJ,aAAuB;IACvB,cAAwB;Eb8xB1B;Ee7zBM;IF8BJ,oBAAuB;IACvB,qBAAwB;EbkyB1B;Ee5zBI;IFQJ,cAAc;IACd,WAAW;IACX,eAAe;EbuzBf;Ee5zBM;IFLN,mBAAsC;IAItC,oBAAuC;Ebi0BvC;Eeh0BM;IFLN,oBAAsC;IAItC,qBAAuC;Ebq0BvC;Eep0BM;IFLN,aAAsC;IAItC,cAAuC;Eby0BvC;Eex0BM;IFLN,oBAAsC;IAItC,qBAAuC;Eb60BvC;Ee50BM;IFLN,oBAAsC;IAItC,qBAAuC;Ebi1BvC;Eeh1BM;IFLN,aAAsC;IAItC,cAAuC;Ebq1BvC;Eep1BM;IFLN,oBAAsC;IAItC,qBAAuC;Eby1BvC;Eex1BM;IFLN,oBAAsC;IAItC,qBAAuC;Eb61BvC;Ee51BM;IFLN,aAAsC;IAItC,cAAuC;Ebi2BvC;Eeh2BM;IFLN,oBAAsC;IAItC,qBAAuC;Ebq2BvC;Eep2BM;IFLN,oBAAsC;IAItC,qBAAuC;Eby2BvC;Eex2BM;IFLN,cAAsC;IAItC,eAAuC;Eb62BvC;Eev2BI;IAAwB,SAAS;Ef02BrC;Eex2BI;IAAuB,SZ6KG;EH8rB9B;Eex2BM;IAAwB,QADZ;Ef42BlB;Ee32BM;IAAwB,QADZ;Ef+2BlB;Ee92BM;IAAwB,QADZ;Efk3BlB;Eej3BM;IAAwB,QADZ;Efq3BlB;Eep3BM;IAAwB,QADZ;Efw3BlB;Eev3BM;IAAwB,QADZ;Ef23BlB;Ee13BM;IAAwB,QADZ;Ef83BlB;Ee73BM;IAAwB,QADZ;Efi4BlB;Eeh4BM;IAAwB,QADZ;Efo4BlB;Een4BM;IAAwB,QADZ;Efu4BlB;Eet4BM;IAAwB,SADZ;Ef04BlB;Eez4BM;IAAwB,SADZ;Ef64BlB;Ee54BM;IAAwB,SADZ;Efg5BlB;Eez4BQ;IFNR,eAA6B;Ebk5B7B;Ee54BQ;IFNR,uBAA+C;Ebq5B/C;Ee/4BQ;IFNR,wBAA+C;Ebw5B/C;Eel5BQ;IFNR,iBAA+C;Eb25B/C;Eer5BQ;IFNR,wBAA+C;Eb85B/C;Eex5BQ;IFNR,wBAA+C;Ebi6B/C;Ee35BQ;IFNR,iBAA+C;Ebo6B/C;Ee95BQ;IFNR,wBAA+C;Ebu6B/C;Eej6BQ;IFNR,wBAA+C;Eb06B/C;Eep6BQ;IFNR,iBAA+C;Eb66B/C;Eev6BQ;IFNR,wBAA+C;Ebg7B/C;Ee16BQ;IFNR,wBAA+C;Ebm7B/C;AACF;;Acj7BI;EC9BE;IACE,aAAa;IACb,YAAY;IACZ,eAAe;Efm9BrB;Ee/8BM;IF8BJ,cAAuB;IACvB,eAAwB;Ebo7B1B;Een9BM;IF8BJ,aAAuB;IACvB,cAAwB;Ebw7B1B;Eev9BM;IF8BJ,oBAAuB;IACvB,qBAAwB;Eb47B1B;Ee39BM;IF8BJ,aAAuB;IACvB,cAAwB;Ebg8B1B;Ee/9BM;IF8BJ,aAAuB;IACvB,cAAwB;Ebo8B1B;Een+BM;IF8BJ,oBAAuB;IACvB,qBAAwB;Ebw8B1B;Eel+BI;IFQJ,cAAc;IACd,WAAW;IACX,eAAe;Eb69Bf;Eel+BM;IFLN,mBAAsC;IAItC,oBAAuC;Ebu+BvC;Eet+BM;IFLN,oBAAsC;IAItC,qBAAuC;Eb2+BvC;Ee1+BM;IFLN,aAAsC;IAItC,cAAuC;Eb++BvC;Ee9+BM;IFLN,oBAAsC;IAItC,qBAAuC;Ebm/BvC;Eel/BM;IFLN,oBAAsC;IAItC,qBAAuC;Ebu/BvC;Eet/BM;IFLN,aAAsC;IAItC,cAAuC;Eb2/BvC;Ee1/BM;IFLN,oBAAsC;IAItC,qBAAuC;Eb+/BvC;Ee9/BM;IFLN,oBAAsC;IAItC,qBAAuC;EbmgCvC;EelgCM;IFLN,aAAsC;IAItC,cAAuC;EbugCvC;EetgCM;IFLN,oBAAsC;IAItC,qBAAuC;Eb2gCvC;Ee1gCM;IFLN,oBAAsC;IAItC,qBAAuC;Eb+gCvC;Ee9gCM;IFLN,cAAsC;IAItC,eAAuC;EbmhCvC;Ee7gCI;IAAwB,SAAS;EfghCrC;Ee9gCI;IAAuB,SZ6KG;EHo2B9B;Ee9gCM;IAAwB,QADZ;EfkhClB;EejhCM;IAAwB,QADZ;EfqhClB;EephCM;IAAwB,QADZ;EfwhClB;EevhCM;IAAwB,QADZ;Ef2hClB;Ee1hCM;IAAwB,QADZ;Ef8hClB;Ee7hCM;IAAwB,QADZ;EfiiClB;EehiCM;IAAwB,QADZ;EfoiClB;EeniCM;IAAwB,QADZ;EfuiClB;EetiCM;IAAwB,QADZ;Ef0iClB;EeziCM;IAAwB,QADZ;Ef6iClB;Ee5iCM;IAAwB,SADZ;EfgjClB;Ee/iCM;IAAwB,SADZ;EfmjClB;EeljCM;IAAwB,SADZ;EfsjClB;Ee/iCQ;IFNR,eAA6B;EbwjC7B;EeljCQ;IFNR,uBAA+C;Eb2jC/C;EerjCQ;IFNR,wBAA+C;Eb8jC/C;EexjCQ;IFNR,iBAA+C;EbikC/C;Ee3jCQ;IFNR,wBAA+C;EbokC/C;Ee9jCQ;IFNR,wBAA+C;EbukC/C;EejkCQ;IFNR,iBAA+C;Eb0kC/C;EepkCQ;IFNR,wBAA+C;Eb6kC/C;EevkCQ;IFNR,wBAA+C;EbglC/C;Ee1kCQ;IFNR,iBAA+C;EbmlC/C;Ee7kCQ;IFNR,wBAA+C;EbslC/C;EehlCQ;IFNR,wBAA+C;EbylC/C;AACF;;AcvlCI;EC9BE;IACE,aAAa;IACb,YAAY;IACZ,eAAe;EfynCrB;EernCM;IF8BJ,cAAuB;IACvB,eAAwB;Eb0lC1B;EeznCM;IF8BJ,aAAuB;IACvB,cAAwB;Eb8lC1B;Ee7nCM;IF8BJ,oBAAuB;IACvB,qBAAwB;EbkmC1B;EejoCM;IF8BJ,aAAuB;IACvB,cAAwB;EbsmC1B;EeroCM;IF8BJ,aAAuB;IACvB,cAAwB;Eb0mC1B;EezoCM;IF8BJ,oBAAuB;IACvB,qBAAwB;Eb8mC1B;EexoCI;IFQJ,cAAc;IACd,WAAW;IACX,eAAe;EbmoCf;EexoCM;IFLN,mBAAsC;IAItC,oBAAuC;Eb6oCvC;Ee5oCM;IFLN,oBAAsC;IAItC,qBAAuC;EbipCvC;EehpCM;IFLN,aAAsC;IAItC,cAAuC;EbqpCvC;EeppCM;IFLN,oBAAsC;IAItC,qBAAuC;EbypCvC;EexpCM;IFLN,oBAAsC;IAItC,qBAAuC;Eb6pCvC;Ee5pCM;IFLN,aAAsC;IAItC,cAAuC;EbiqCvC;EehqCM;IFLN,oBAAsC;IAItC,qBAAuC;EbqqCvC;EepqCM;IFLN,oBAAsC;IAItC,qBAAuC;EbyqCvC;EexqCM;IFLN,aAAsC;IAItC,cAAuC;Eb6qCvC;Ee5qCM;IFLN,oBAAsC;IAItC,qBAAuC;EbirCvC;EehrCM;IFLN,oBAAsC;IAItC,qBAAuC;EbqrCvC;EeprCM;IFLN,cAAsC;IAItC,eAAuC;EbyrCvC;EenrCI;IAAwB,SAAS;EfsrCrC;EeprCI;IAAuB,SZ6KG;EH0gC9B;EeprCM;IAAwB,QADZ;EfwrClB;EevrCM;IAAwB,QADZ;Ef2rClB;Ee1rCM;IAAwB,QADZ;Ef8rClB;Ee7rCM;IAAwB,QADZ;EfisClB;EehsCM;IAAwB,QADZ;EfosClB;EensCM;IAAwB,QADZ;EfusClB;EetsCM;IAAwB,QADZ;Ef0sClB;EezsCM;IAAwB,QADZ;Ef6sClB;Ee5sCM;IAAwB,QADZ;EfgtClB;Ee/sCM;IAAwB,QADZ;EfmtClB;EeltCM;IAAwB,SADZ;EfstClB;EertCM;IAAwB,SADZ;EfytClB;EextCM;IAAwB,SADZ;Ef4tClB;EertCQ;IFNR,eAA6B;Eb8tC7B;EextCQ;IFNR,uBAA+C;EbiuC/C;Ee3tCQ;IFNR,wBAA+C;EbouC/C;Ee9tCQ;IFNR,iBAA+C;EbuuC/C;EejuCQ;IFNR,wBAA+C;Eb0uC/C;EepuCQ;IFNR,wBAA+C;Eb6uC/C;EevuCQ;IFNR,iBAA+C;EbgvC/C;Ee1uCQ;IFNR,wBAA+C;EbmvC/C;Ee7uCQ;IFNR,wBAA+C;EbsvC/C;EehvCQ;IFNR,iBAA+C;EbyvC/C;EenvCQ;IFNR,wBAA+C;Eb4vC/C;EetvCQ;IFNR,wBAA+C;Eb+vC/C;AACF;;Ac7vCI;EC9BE;IACE,aAAa;IACb,YAAY;IACZ,eAAe;Ef+xCrB;Ee3xCM;IF8BJ,cAAuB;IACvB,eAAwB;EbgwC1B;Ee/xCM;IF8BJ,aAAuB;IACvB,cAAwB;EbowC1B;EenyCM;IF8BJ,oBAAuB;IACvB,qBAAwB;EbwwC1B;EevyCM;IF8BJ,aAAuB;IACvB,cAAwB;Eb4wC1B;Ee3yCM;IF8BJ,aAAuB;IACvB,cAAwB;EbgxC1B;Ee/yCM;IF8BJ,oBAAuB;IACvB,qBAAwB;EboxC1B;Ee9yCI;IFQJ,cAAc;IACd,WAAW;IACX,eAAe;EbyyCf;Ee9yCM;IFLN,mBAAsC;IAItC,oBAAuC;EbmzCvC;EelzCM;IFLN,oBAAsC;IAItC,qBAAuC;EbuzCvC;EetzCM;IFLN,aAAsC;IAItC,cAAuC;Eb2zCvC;Ee1zCM;IFLN,oBAAsC;IAItC,qBAAuC;Eb+zCvC;Ee9zCM;IFLN,oBAAsC;IAItC,qBAAuC;Ebm0CvC;Eel0CM;IFLN,aAAsC;IAItC,cAAuC;Ebu0CvC;Eet0CM;IFLN,oBAAsC;IAItC,qBAAuC;Eb20CvC;Ee10CM;IFLN,oBAAsC;IAItC,qBAAuC;Eb+0CvC;Ee90CM;IFLN,aAAsC;IAItC,cAAuC;Ebm1CvC;Eel1CM;IFLN,oBAAsC;IAItC,qBAAuC;Ebu1CvC;Eet1CM;IFLN,oBAAsC;IAItC,qBAAuC;Eb21CvC;Ee11CM;IFLN,cAAsC;IAItC,eAAuC;Eb+1CvC;Eez1CI;IAAwB,SAAS;Ef41CrC;Ee11CI;IAAuB,SZ6KG;EHgrC9B;Ee11CM;IAAwB,QADZ;Ef81ClB;Ee71CM;IAAwB,QADZ;Efi2ClB;Eeh2CM;IAAwB,QADZ;Efo2ClB;Een2CM;IAAwB,QADZ;Efu2ClB;Eet2CM;IAAwB,QADZ;Ef02ClB;Eez2CM;IAAwB,QADZ;Ef62ClB;Ee52CM;IAAwB,QADZ;Efg3ClB;Ee/2CM;IAAwB,QADZ;Efm3ClB;Eel3CM;IAAwB,QADZ;Efs3ClB;Eer3CM;IAAwB,QADZ;Efy3ClB;Eex3CM;IAAwB,SADZ;Ef43ClB;Ee33CM;IAAwB,SADZ;Ef+3ClB;Ee93CM;IAAwB,SADZ;Efk4ClB;Ee33CQ;IFNR,eAA6B;Ebo4C7B;Ee93CQ;IFNR,uBAA+C;Ebu4C/C;Eej4CQ;IFNR,wBAA+C;Eb04C/C;Eep4CQ;IFNR,iBAA+C;Eb64C/C;Eev4CQ;IFNR,wBAA+C;Ebg5C/C;Ee14CQ;IFNR,wBAA+C;Ebm5C/C;Ee74CQ;IFNR,iBAA+C;Ebs5C/C;Eeh5CQ;IFNR,wBAA+C;Eby5C/C;Een5CQ;IFNR,wBAA+C;Eb45C/C;Eet5CQ;IFNR,iBAA+C;Eb+5C/C;Eez5CQ;IFNR,wBAA+C;Ebk6C/C;Ee55CQ;IFNR,wBAA+C;Ebq6C/C;AACF;;AgB39CA;EACE,WAAW;EACX,mBbkIW;EajIX,cbSgB;AHq9ClB;;AgBj+CA;;EAQI,gBbsVgC;EarVhC,mBAAmB;EACnB,6BbJc;AHk+ClB;;AgBx+CA;EAcI,sBAAsB;EACtB,gCbTc;AHu+ClB;;AgB7+CA;EAmBI,6Bbbc;AH2+ClB;;AgBr9CA;;EAGI,ebgU+B;AHupCnC;;AgB98CA;EACE,yBbnCgB;AHo/ClB;;AgBl9CA;;EAKI,yBbvCc;AHy/ClB;;AgBv9CA;;EAWM,wBAA4C;AhBi9ClD;;AgB58CA;;;;EAKI,SAAS;AhB88Cb;;AgBt8CA;EAEI,qCb1DW;AHkgDf;;AKvgDE;EW2EI,cbvEY;EawEZ,sCbvES;AHugDf;;AiBnhDE;;;EAII,yBCsF4D;AlB+7ClE;;AiBzhDE;;;;EAYM,qBC8E0D;AlBs8ClE;;AKzhDE;EYiBM,yBAJsC;AjBghD9C;;AiBjhDE;;EASQ,yBARoC;AjBqhD9C;;AiBziDE;;;EAII,yBCsF4D;AlBq9ClE;;AiB/iDE;;;;EAYM,qBC8E0D;AlB49ClE;;AK/iDE;EYiBM,yBAJsC;AjBsiD9C;;AiBviDE;;EASQ,yBARoC;AjB2iD9C;;AiB/jDE;;;EAII,yBCsF4D;AlB2+ClE;;AiBrkDE;;;;EAYM,qBC8E0D;AlBk/ClE;;AKrkDE;EYiBM,yBAJsC;AjB4jD9C;;AiB7jDE;;EASQ,yBARoC;AjBikD9C;;AiBrlDE;;;EAII,yBCsF4D;AlBigDlE;;AiB3lDE;;;;EAYM,qBC8E0D;AlBwgDlE;;AK3lDE;EYiBM,yBAJsC;AjBklD9C;;AiBnlDE;;EASQ,yBARoC;AjBulD9C;;AiB3mDE;;;EAII,yBCsF4D;AlBuhDlE;;AiBjnDE;;;;EAYM,qBC8E0D;AlB8hDlE;;AKjnDE;EYiBM,yBAJsC;AjBwmD9C;;AiBzmDE;;EASQ,yBARoC;AjB6mD9C;;AiBjoDE;;;EAII,yBCsF4D;AlB6iDlE;;AiBvoDE;;;;EAYM,qBC8E0D;AlBojDlE;;AKvoDE;EYiBM,yBAJsC;AjB8nD9C;;AiB/nDE;;EASQ,yBARoC;AjBmoD9C;;AiBvpDE;;;EAII,yBCsF4D;AlBmkDlE;;AiB7pDE;;;;EAYM,qBC8E0D;AlB0kDlE;;AK7pDE;EYiBM,yBAJsC;AjBopD9C;;AiBrpDE;;EASQ,yBARoC;AjBypD9C;;AiB7qDE;;;EAII,yBCsF4D;AlBylDlE;;AiBnrDE;;;;EAYM,qBC8E0D;AlBgmDlE;;AKnrDE;EYiBM,yBAJsC;AjB0qD9C;;AiB3qDE;;EASQ,yBARoC;AjB+qD9C;;AiBnsDE;;;EAII,sCdQS;AH6rDf;;AKlsDE;EYiBM,sCAJsC;AjByrD9C;;AiB1rDE;;EASQ,sCARoC;AjB8rD9C;;AgBxmDA;EAGM,Wb3GS;Ea4GT,yBbpGY;EaqGZ,qBbmQqD;AHs2C3D;;AgB9mDA;EAWM,cb5GY;Ea6GZ,yBblHY;EamHZ,qBblHY;AHytDlB;;AgBlmDA;EACE,Wb3Ha;Ea4Hb,yBbpHgB;AHytDlB;;AgBvmDA;;;EAOI,qBb+OuD;AHu3C3D;;AgB7mDA;EAWI,SAAS;AhBsmDb;;AgBjnDA;EAgBM,2Cb1IS;AH+uDf;;AK1uDE;EW4IM,WbjJO;EakJP,4CblJO;AHovDf;;AclrDI;EEiGA;IAEI,cAAc;IACd,WAAW;IACX,gBAAgB;IAChB,iCAAiC;EhBolDvC;EgBzlDG;IASK,SAAS;EhBmlDjB;AACF;;Ac9rDI;EEiGA;IAEI,cAAc;IACd,WAAW;IACX,gBAAgB;IAChB,iCAAiC;EhBgmDvC;EgBrmDG;IASK,SAAS;EhB+lDjB;AACF;;Ac1sDI;EEiGA;IAEI,cAAc;IACd,WAAW;IACX,gBAAgB;IAChB,iCAAiC;EhB4mDvC;EgBjnDG;IASK,SAAS;EhB2mDjB;AACF;;ActtDI;EEiGA;IAEI,cAAc;IACd,WAAW;IACX,gBAAgB;IAChB,iCAAiC;EhBwnDvC;EgB7nDG;IASK,SAAS;EhBunDjB;AACF;;AgBtoDA;EAOQ,cAAc;EACd,WAAW;EACX,gBAAgB;EAChB,iCAAiC;AhBmoDzC;;AgB7oDA;EAcU,SAAS;AhBmoDnB;;AmBhzDA;EACE,cAAc;EACd,WAAW;EACX,mCDuG8D;ECtG9D,yBhB4XkC;ECvQ9B,eAtCY;Ee5EhB,gBhBsR+B;EgBrR/B,gBhB0R+B;EgBzR/B,chBDgB;EgBEhB,sBhBTa;EgBUb,4BAA4B;EAC5B,yBhBPgB;EONd,sBP6OgC;EiB5O9B,wEjBof4F;AH40ClG;;AoB3zDI;EDLJ;ICMM,gBAAgB;EpB+zDpB;AACF;;AmBt0DA;EAsBI,6BAA6B;EAC7B,SAAS;AnBozDb;;AmB30DA;EA4BI,kBAAkB;EAClB,0BhBrBc;AHw0DlB;;AqBz0DE;EACE,clBAc;EkBCd,sBlBRW;EkBSX,qBlBwdsE;EkBvdtE,UAAU;EAKR,gDlBcW;AH0zDjB;;AmBx1DA;EAqCI,chB9Bc;EgBgCd,UAAU;AnBszDd;;AmB71DA;EAqCI,chB9Bc;EgBgCd,UAAU;AnBszDd;;AmB71DA;EAqCI,chB9Bc;EgBgCd,UAAU;AnBszDd;;AmB71DA;EAqCI,chB9Bc;EgBgCd,UAAU;AnBszDd;;AmB71DA;EAqCI,chB9Bc;EgBgCd,UAAU;AnBszDd;;AmB71DA;EAiDI,yBhB9Cc;EgBgDd,UAAU;AnB+yDd;;AmB3yDA;EAOI,chBtDc;EgBuDd,sBhB9DW;AHs2Df;;AmBnyDA;;EAEE,cAAc;EACd,WAAW;AnBsyDb;;AmB5xDA;EACE,iCDwB8D;ECvB9D,oCDuB8D;ECtB9D,gBAAgB;EflBd,kBAAW;EeoBb,gBhB4M+B;AHmlDjC;;AmB5xDA;EACE,+BDgB8D;ECf9D,kCDe8D;Ede1D,kBAtCY;EeUhB,gBhByI+B;AHspDjC;;AmB5xDA;EACE,gCDS8D;ECR9D,mCDQ8D;Ede1D,mBAtCY;EeiBhB,gBhBmI+B;AH4pDjC;;AmBtxDA;EACE,cAAc;EACd,WAAW;EACX,mBAA2B;EAC3B,gBAAgB;EfQZ,eAtCY;EegChB,gBhB+K+B;EgB9K/B,chB1GgB;EgB2GhB,6BAA6B;EAC7B,yBAAyB;EACzB,mBAAmC;AnByxDrC;;AmBnyDA;EAcI,gBAAgB;EAChB,eAAe;AnByxDnB;;AmB7wDA;EACE,kCD/B8D;ECgC9D,uBhBgQiC;ECjR7B,mBAtCY;EeyDhB,gBhB2F+B;EOxO7B,qBP+O+B;AH+qDnC;;AmB7wDA;EACE,gCDvC8D;ECwC9D,oBhB6PgC;ECtR5B,kBAtCY;EeiEhB,gBhBkF+B;EOvO7B,qBP8O+B;AHwrDnC;;AmB5wDA;EAGI,YAAY;AnB6wDhB;;AmBzwDA;EACE,YAAY;AnB4wDd;;AmBpwDA;EACE,mBhBsV0C;AHi7C5C;;AmBpwDA;EACE,cAAc;EACd,mBhBuU4C;AHg8C9C;;AmB/vDA;EACE,aAAa;EACb,eAAe;EACf,kBAA0C;EAC1C,iBAAyC;AnBkwD3C;;AmBtwDA;;EAQI,kBAA0C;EAC1C,iBAAyC;AnBmwD7C;;AmB1vDA;EACE,kBAAkB;EAClB,cAAc;EACd,qBhB4S6C;AHi9C/C;;AmB1vDA;EACE,kBAAkB;EAClB,kBhBwS2C;EgBvS3C,qBhBsS6C;AHu9C/C;;AmBhwDA;;EAQI,chBhNc;AH68DlB;;AmBzvDA;EACE,gBAAgB;AnB4vDlB;;AmBzvDA;EACE,oBAAoB;EACpB,mBAAmB;EACnB,eAAe;EACf,qBhByR4C;AHm+C9C;;AmBhwDA;EAQI,gBAAgB;EAChB,aAAa;EACb,uBhBoR4C;EgBnR5C,cAAc;AnB4vDlB;;AqBh8DE;EACE,aAAa;EACb,WAAW;EACX,mBlB6c0C;ECpb1C,cAAW;EiBvBX,clBNa;AHy8DjB;;AqBh8DE;EACE,kBAAkB;EAClB,SAAS;EACT,UAAU;EACV,aAAa;EACb,eAAe;EACf,uBlBmyBqC;EkBlyBrC,iBAAiB;EjBoEf,mBAtCY;EiB5Bd,gBlB2O6B;EkB1O7B,WlBvDW;EkBwDX,wClBpBa;EOtCb,sBP6OgC;AHixDpC;;AqBn+DI;;;;EAsCE,cAAc;ArBo8DpB;;AqB1+DI;EA4CE,qBlBjCW;EkBoCT,oCHiCwD;EGhCxD,iRHpCmI;EGqCnI,4BAA4B;EAC5B,2DAA6D;EAC7D,gEH6BwD;AlBm6DhE;;AqBn/DI;EAuDI,qBlB5CS;EkB6CT,gDlB7CS;AH6+DjB;;AqBx/DI;EAiEI,oCHewD;EGdxD,kFHcwD;AlB66DhE;;AqB7/DI;EAyEE,qBlB9DW;EkBiET,uCHIwD;EGHxD,ujBAA8J;ArBs7DtK;;AqBngEI;EAiFI,qBlBtES;EkBuET,gDlBvES;AH6/DjB;;AqBxgEI;EA0FI,clB/ES;AHigEjB;;AqB5gEI;;;EA+FI,cAAc;ArBm7DtB;;AqBlhEI;EAuGI,clB5FS;AH2gEjB;;AqBthEI;EA0GM,qBlB/FO;AH+gEjB;;AqB1hEI;EAgHM,qBAAkC;EC1IxC,yBD2I+C;ArB86DnD;;AqB/hEI;EAuHM,gDlB5GO;AHwhEjB;;AqBniEI;EA2HM,qBlBhHO;AH4hEjB;;AqBviEI;EAqII,qBlB1HS;AHgiEjB;;AqB3iEI;EA0IM,qBlB/HO;EkBgIP,gDlBhIO;AHqiEjB;;AqBpiEE;EACE,aAAa;EACb,WAAW;EACX,mBlB6c0C;ECpb1C,cAAW;EiBvBX,clBTa;AHgjEjB;;AqBpiEE;EACE,kBAAkB;EAClB,SAAS;EACT,UAAU;EACV,aAAa;EACb,eAAe;EACf,uBlBmyBqC;EkBlyBrC,iBAAiB;EjBoEf,mBAtCY;EiB5Bd,gBlB2O6B;EkB1O7B,WlBvDW;EkBwDX,wClBvBa;EOnCb,sBP6OgC;AHq3DpC;;AqBvkEI;;;;EAsCE,cAAc;ArBwiEpB;;AqB9kEI;EA4CE,qBlBpCW;EkBuCT,oCHiCwD;EGhCxD,4UHpCmI;EGqCnI,4BAA4B;EAC5B,2DAA6D;EAC7D,gEH6BwD;AlBugEhE;;AqBvlEI;EAuDI,qBlB/CS;EkBgDT,gDlBhDS;AHolEjB;;AqB5lEI;EAiEI,oCHewD;EGdxD,kFHcwD;AlBihEhE;;AqBjmEI;EAyEE,qBlBjEW;EkBoET,uCHIwD;EGHxD,knBAA8J;ArB0hEtK;;AqBvmEI;EAiFI,qBlBzES;EkB0ET,gDlB1ES;AHomEjB;;AqB5mEI;EA0FI,clBlFS;AHwmEjB;;AqBhnEI;;;EA+FI,cAAc;ArBuhEtB;;AqBtnEI;EAuGI,clB/FS;AHknEjB;;AqB1nEI;EA0GM,qBlBlGO;AHsnEjB;;AqB9nEI;EAgHM,qBAAkC;EC1IxC,yBD2I+C;ArBkhEnD;;AqBnoEI;EAuHM,gDlB/GO;AH+nEjB;;AqBvoEI;EA2HM,qBlBnHO;AHmoEjB;;AqB3oEI;EAqII,qBlB7HS;AHuoEjB;;AqB/oEI;EA0IM,qBlBlIO;EkBmIP,gDlBnIO;AH4oEjB;;AmB36DA;EACE,aAAa;EACb,mBAAmB;EACnB,mBAAmB;AnB86DrB;;AmBj7DA;EASI,WAAW;AnB46Df;;AcloEI;EK6MJ;IAeM,aAAa;IACb,mBAAmB;IACnB,uBAAuB;IACvB,gBAAgB;EnB26DpB;EmB77DF;IAuBM,aAAa;IACb,cAAc;IACd,mBAAmB;IACnB,mBAAmB;IACnB,gBAAgB;EnBy6DpB;EmBp8DF;IAgCM,qBAAqB;IACrB,WAAW;IACX,sBAAsB;EnBu6D1B;EmBz8DF;IAuCM,qBAAqB;EnBq6DzB;EmB58DF;;IA4CM,WAAW;EnBo6Df;EmBh9DF;IAkDM,aAAa;IACb,mBAAmB;IACnB,uBAAuB;IACvB,WAAW;IACX,eAAe;EnBi6DnB;EmBv9DF;IAyDM,kBAAkB;IAClB,cAAc;IACd,aAAa;IACb,qBhB2LwC;IgB1LxC,cAAc;EnBi6DlB;EmB99DF;IAiEM,mBAAmB;IACnB,uBAAuB;EnBg6D3B;EmBl+DF;IAqEM,gBAAgB;EnBg6DpB;AACF;;AuBzuEA;EACE,qBAAqB;EAErB,gBpB0R+B;EoBzR/B,cpBMgB;EoBLhB,kBAAkB;EAElB,sBAAsB;EACtB,eAAsD;EACtD,yBAAiB;EAAjB,sBAAiB;EAAjB,qBAAiB;EAAjB,iBAAiB;EACjB,6BAA6B;EAC7B,6BAA2C;ECuF3C,yBrB8RkC;ECvQ9B,eAtCY;EoBiBhB,gBrB8L+B;EOnS7B,sBP6OgC;EiB5O9B,qIjB6b6I;AH6zDnJ;;AoBrvEI;EGLJ;IHMM,gBAAgB;EpByvEpB;AACF;;AK1vEE;EkBUE,cpBNc;EoBOd,qBAAqB;AvBovEzB;;AuBrwEA;EAsBI,UAAU;EACV,gDpBOa;AH4uEjB;;AuB1wEA;EA6BI,apBoZ6B;AH61DjC;;AuBluEA;;EAEE,oBAAoB;AvBquEtB;;AuB5tEE;ECvDA,WrBCa;EmBDX,yBnB8Ba;EqB5Bf,qBrB4Be;AH2vEjB;;AKnxEE;EmBAE,WrBLW;EmBDX,yBEDoF;EASpF,qBATyH;AxBgyE7H;;AwBpxEE;EAEE,WrBZW;EmBDX,yBEDoF;EAgBpF,qBAhByH;EAqBvH,gDAAiF;AxBkxEvF;;AwB7wEE;EAEE,WrB1BW;EqB2BX,yBrBEa;EqBDb,qBrBCa;AH8wEjB;;AwBxwEE;;EAGE,WrBtCW;EqBuCX,yBAzCuK;EA6CvK,qBA7C+M;AxBozEnN;;AwBrwEI;;EAKI,gDAAiF;AxBqwEzF;;AuBjwEE;ECvDA,WrBCa;EmBDX,yBnBOc;EqBLhB,qBrBKgB;AHuzElB;;AKxzEE;EmBAE,WrBLW;EmBDX,yBEDoF;EASpF,qBATyH;AxBq0E7H;;AwBzzEE;EAEE,WrBZW;EmBDX,yBEDoF;EAgBpF,qBAhByH;EAqBvH,iDAAiF;AxBuzEvF;;AwBlzEE;EAEE,WrB1BW;EqB2BX,yBrBrBc;EqBsBd,qBrBtBc;AH00ElB;;AwB7yEE;;EAGE,WrBtCW;EqBuCX,yBAzCuK;EA6CvK,qBA7C+M;AxBy1EnN;;AwB1yEI;;EAKI,iDAAiF;AxB0yEzF;;AuBtyEE;ECvDA,WrBCa;EmBDX,yBnBqCa;EqBnCf,qBrBmCe;AH8zEjB;;AK71EE;EmBAE,WrBLW;EmBDX,yBEDoF;EASpF,qBATyH;AxB02E7H;;AwB91EE;EAEE,WrBZW;EmBDX,yBEDoF;EAgBpF,qBAhByH;EAqBvH,+CAAiF;AxB41EvF;;AwBv1EE;EAEE,WrB1BW;EqB2BX,yBrBSa;EqBRb,qBrBQa;AHi1EjB;;AwBl1EE;;EAGE,WrBtCW;EqBuCX,yBAzCuK;EA6CvK,qBA7C+M;AxB83EnN;;AwB/0EI;;EAKI,+CAAiF;AxB+0EzF;;AuB30EE;ECvDA,WrBCa;EmBDX,yBnBuCa;EqBrCf,qBrBqCe;AHi2EjB;;AKl4EE;EmBAE,WrBLW;EmBDX,yBEDoF;EASpF,qBATyH;AxB+4E7H;;AwBn4EE;EAEE,WrBZW;EmBDX,yBEDoF;EAgBpF,qBAhByH;EAqBvH,gDAAiF;AxBi4EvF;;AwB53EE;EAEE,WrB1BW;EqB2BX,yBrBWa;EqBVb,qBrBUa;AHo3EjB;;AwBv3EE;;EAGE,WrBtCW;EqBuCX,yBAzCuK;EA6CvK,qBA7C+M;AxBm6EnN;;AwBp3EI;;EAKI,gDAAiF;AxBo3EzF;;AuBh3EE;ECvDA,crBUgB;EmBVd,yBnBoCa;EqBlCf,qBrBkCe;AHy4EjB;;AKv6EE;EmBAE,crBIc;EmBVd,yBEDoF;EASpF,qBATyH;AxBo7E7H;;AwBx6EE;EAEE,crBHc;EmBVd,yBEDoF;EAgBpF,qBAhByH;EAqBvH,gDAAiF;AxBs6EvF;;AwBj6EE;EAEE,crBjBc;EqBkBd,yBrBQa;EqBPb,qBrBOa;AH45EjB;;AwB55EE;;EAGE,crB7Bc;EqB8Bd,yBAzCuK;EA6CvK,qBA7C+M;AxBw8EnN;;AwBz5EI;;EAKI,gDAAiF;AxBy5EzF;;AuBr5EE;ECvDA,WrBCa;EmBDX,yBnBkCa;EqBhCf,qBrBgCe;AHg7EjB;;AK58EE;EmBAE,WrBLW;EmBDX,yBEDoF;EASpF,qBATyH;AxBy9E7H;;AwB78EE;EAEE,WrBZW;EmBDX,yBEDoF;EAgBpF,qBAhByH;EAqBvH,+CAAiF;AxB28EvF;;AwBt8EE;EAEE,WrB1BW;EqB2BX,yBrBMa;EqBLb,qBrBKa;AHm8EjB;;AwBj8EE;;EAGE,WrBtCW;EqBuCX,yBAzCuK;EA6CvK,qBA7C+M;AxB6+EnN;;AwB97EI;;EAKI,+CAAiF;AxB87EzF;;AuB17EE;ECvDA,crBUgB;EmBVd,yBnBEc;EqBAhB,qBrBAgB;AHq/ElB;;AKj/EE;EmBAE,crBIc;EmBVd,yBEDoF;EASpF,qBATyH;AxB8/E7H;;AwBl/EE;EAEE,crBHc;EmBVd,yBEDoF;EAgBpF,qBAhByH;EAqBvH,iDAAiF;AxBg/EvF;;AwB3+EE;EAEE,crBjBc;EqBkBd,yBrB1Bc;EqB2Bd,qBrB3Bc;AHwgFlB;;AwBt+EE;;EAGE,crB7Bc;EqB8Bd,yBAzCuK;EA6CvK,qBA7C+M;AxBkhFnN;;AwBn+EI;;EAKI,iDAAiF;AxBm+EzF;;AuB/9EE;ECvDA,WrBCa;EmBDX,yBnBSc;EqBPhB,qBrBOgB;AHmhFlB;;AKthFE;EmBAE,WrBLW;EmBDX,yBEDoF;EASpF,qBATyH;AxBmiF7H;;AwBvhFE;EAEE,WrBZW;EmBDX,yBEDoF;EAgBpF,qBAhByH;EAqBvH,8CAAiF;AxBqhFvF;;AwBhhFE;EAEE,WrB1BW;EqB2BX,yBrBnBc;EqBoBd,qBrBpBc;AHsiFlB;;AwB3gFE;;EAGE,WrBtCW;EqBuCX,yBAzCuK;EA6CvK,qBA7C+M;AxBujFnN;;AwBxgFI;;EAKI,8CAAiF;AxBwgFzF;;AuB9/EE;ECHA,crB5Be;EqB6Bf,qBrB7Be;AHkiFjB;;AK1jFE;EmBwDE,WrB7DW;EqB8DX,yBrBjCa;EqBkCb,qBrBlCa;AHwiFjB;;AwBngFE;EAEE,+CrBvCa;AH4iFjB;;AwBlgFE;EAEE,crB5Ca;EqB6Cb,6BAA6B;AxBogFjC;;AwBjgFE;;EAGE,WrBhFW;EqBiFX,yBrBpDa;EqBqDb,qBrBrDa;AHwjFjB;;AwBjgFI;;EAKI,+CrB5DS;AH6jFjB;;AuB9hFE;ECHA,crBnDgB;EqBoDhB,qBrBpDgB;AHylFlB;;AK1lFE;EmBwDE,WrB7DW;EqB8DX,yBrBxDc;EqByDd,qBrBzDc;AH+lFlB;;AwBniFE;EAEE,iDrB9Dc;AHmmFlB;;AwBliFE;EAEE,crBnEc;EqBoEd,6BAA6B;AxBoiFjC;;AwBjiFE;;EAGE,WrBhFW;EqBiFX,yBrB3Ec;EqB4Ed,qBrB5Ec;AH+mFlB;;AwBjiFI;;EAKI,iDrBnFU;AHonFlB;;AuB9jFE;ECHA,crBrBe;EqBsBf,qBrBtBe;AH2lFjB;;AK1nFE;EmBwDE,WrB7DW;EqB8DX,yBrB1Ba;EqB2Bb,qBrB3Ba;AHimFjB;;AwBnkFE;EAEE,+CrBhCa;AHqmFjB;;AwBlkFE;EAEE,crBrCa;EqBsCb,6BAA6B;AxBokFjC;;AwBjkFE;;EAGE,WrBhFW;EqBiFX,yBrB7Ca;EqB8Cb,qBrB9Ca;AHinFjB;;AwBjkFI;;EAKI,+CrBrDS;AHsnFjB;;AuB9lFE;ECHA,crBnBe;EqBoBf,qBrBpBe;AHynFjB;;AK1pFE;EmBwDE,WrB7DW;EqB8DX,yBrBxBa;EqByBb,qBrBzBa;AH+nFjB;;AwBnmFE;EAEE,gDrB9Ba;AHmoFjB;;AwBlmFE;EAEE,crBnCa;EqBoCb,6BAA6B;AxBomFjC;;AwBjmFE;;EAGE,WrBhFW;EqBiFX,yBrB3Ca;EqB4Cb,qBrB5Ca;AH+oFjB;;AwBjmFI;;EAKI,gDrBnDS;AHopFjB;;AuB9nFE;ECHA,crBtBe;EqBuBf,qBrBvBe;AH4pFjB;;AK1rFE;EmBwDE,crBpDc;EqBqDd,yBrB3Ba;EqB4Bb,qBrB5Ba;AHkqFjB;;AwBnoFE;EAEE,+CrBjCa;AHsqFjB;;AwBloFE;EAEE,crBtCa;EqBuCb,6BAA6B;AxBooFjC;;AwBjoFE;;EAGE,crBvEc;EqBwEd,yBrB9Ca;EqB+Cb,qBrB/Ca;AHkrFjB;;AwBjoFI;;EAKI,+CrBtDS;AHurFjB;;AuB9pFE;ECHA,crBxBe;EqByBf,qBrBzBe;AH8rFjB;;AK1tFE;EmBwDE,WrB7DW;EqB8DX,yBrB7Ba;EqB8Bb,qBrB9Ba;AHosFjB;;AwBnqFE;EAEE,+CrBnCa;AHwsFjB;;AwBlqFE;EAEE,crBxCa;EqByCb,6BAA6B;AxBoqFjC;;AwBjqFE;;EAGE,WrBhFW;EqBiFX,yBrBhDa;EqBiDb,qBrBjDa;AHotFjB;;AwBjqFI;;EAKI,+CrBxDS;AHytFjB;;AuB9rFE;ECHA,crBxDgB;EqByDhB,qBrBzDgB;AH8vFlB;;AK1vFE;EmBwDE,crBpDc;EqBqDd,yBrB7Dc;EqB8Dd,qBrB9Dc;AHowFlB;;AwBnsFE;EAEE,iDrBnEc;AHwwFlB;;AwBlsFE;EAEE,crBxEc;EqByEd,6BAA6B;AxBosFjC;;AwBjsFE;;EAGE,crBvEc;EqBwEd,yBrBhFc;EqBiFd,qBrBjFc;AHoxFlB;;AwBjsFI;;EAKI,iDrBxFU;AHyxFlB;;AuB9tFE;ECHA,crBjDgB;EqBkDhB,qBrBlDgB;AHuxFlB;;AK1xFE;EmBwDE,WrB7DW;EqB8DX,yBrBtDc;EqBuDd,qBrBvDc;AH6xFlB;;AwBnuFE;EAEE,8CrB5Dc;AHiyFlB;;AwBluFE;EAEE,crBjEc;EqBkEd,6BAA6B;AxBouFjC;;AwBjuFE;;EAGE,WrBhFW;EqBiFX,yBrBzEc;EqB0Ed,qBrB1Ec;AH6yFlB;;AwBjuFI;;EAKI,8CrBjFU;AHkzFlB;;AuBnvFA;EACE,gBpBoN+B;EoBnN/B,cpB5Ce;EoB6Cf,qBpBkG4C;AHopF9C;;AK3zFE;EkBwEE,cpBgG8D;EoB/F9D,0BpBgG+C;AHupFnD;;AuB9vFA;EAYI,0BpB2F+C;EoB1F/C,gBAAgB;AvBsvFpB;;AuBnwFA;EAkBI,cpBnFc;EoBoFd,oBAAoB;AvBqvFxB;;AuB1uFA;ECJE,oBrB6SgC;ECtR5B,kBAtCY;EoBiBhB,gBrBkI+B;EOvO7B,qBP8O+B;AH0mFnC;;AuB7uFA;ECRE,uBrBwSiC;ECjR7B,mBAtCY;EoBiBhB,gBrBmI+B;EOxO7B,qBP+O+B;AHgnFnC;;AuB3uFA;EACE,cAAc;EACd,WAAW;AvB8uFb;;AuBhvFA;EAMI,kBpB6T+B;AHi7EnC;;AuBzuFA;;;EAII,WAAW;AvB2uFf;;AyBn3FA;ELMM,gCjB8P2C;AHmnFjD;;AoB52FI;EKXJ;ILYM,gBAAgB;EpBg3FpB;AACF;;AyB73FA;EAII,UAAU;AzB63Fd;;AyBz3FA;EAEI,aAAa;AzB23FjB;;AyBv3FA;EACE,kBAAkB;EAClB,SAAS;EACT,gBAAgB;ELXZ,6BjB+PwC;AHuoF9C;;AoBj4FI;EKGJ;ILFM,gBAAgB;EpBq4FpB;AACF;;A0Bj5FA;;;;EAIE,kBAAkB;A1Bo5FpB;;A0Bj5FA;EACE,mBAAmB;A1Bo5FrB;;A2Bh4FI;EACE,qBAAqB;EACrB,oBxBkO0C;EwBjO1C,uBxBgO0C;EwB/N1C,WAAW;EAhCf,uBAA8B;EAC9B,qCAA4C;EAC5C,gBAAgB;EAChB,oCAA2C;A3Bo6F7C;;A2B/2FI;EACE,cAAc;A3Bk3FpB;;A0B55FA;EACE,kBAAkB;EAClB,SAAS;EACT,OAAO;EACP,avB4pBsC;EuB3pBtC,aAAa;EACb,WAAW;EACX,gBvBkuBuC;EuBjuBvC,iBAA8B;EAC9B,oBAA4B;EtBsGxB,eAtCY;EsB9DhB,cvBXgB;EuBYhB,gBAAgB;EAChB,gBAAgB;EAChB,sBvBvBa;EuBwBb,4BAA4B;EAC5B,qCvBfa;EOZX,sBP6OgC;AH8sFpC;;A0Bv5FI;EACE,WAAW;EACX,OAAO;A1B05Fb;;A0Bv5FI;EACE,QAAQ;EACR,UAAU;A1B05FhB;;Ac94FI;EYnBA;IACE,WAAW;IACX,OAAO;E1Bq6FX;E0Bl6FE;IACE,QAAQ;IACR,UAAU;E1Bo6Fd;AACF;;Acz5FI;EYnBA;IACE,WAAW;IACX,OAAO;E1Bg7FX;E0B76FE;IACE,QAAQ;IACR,UAAU;E1B+6Fd;AACF;;Acp6FI;EYnBA;IACE,WAAW;IACX,OAAO;E1B27FX;E0Bx7FE;IACE,QAAQ;IACR,UAAU;E1B07Fd;AACF;;Ac/6FI;EYnBA;IACE,WAAW;IACX,OAAO;E1Bs8FX;E0Bn8FE;IACE,QAAQ;IACR,UAAU;E1Bq8Fd;AACF;;A0B/7FA;EAEI,SAAS;EACT,YAAY;EACZ,aAAa;EACb,uBvB+rBuC;AHkwE3C;;A2Bh+FI;EACE,qBAAqB;EACrB,oBxBkO0C;EwBjO1C,uBxBgO0C;EwB/N1C,WAAW;EAzBf,aAAa;EACb,qCAA4C;EAC5C,0BAAiC;EACjC,oCAA2C;A3B6/F7C;;A2B/8FI;EACE,cAAc;A3Bk9FpB;;A0Bx8FA;EAEI,MAAM;EACN,WAAW;EACX,UAAU;EACV,aAAa;EACb,qBvBirBuC;AHyxE3C;;A2Bv/FI;EACE,qBAAqB;EACrB,oBxBkO0C;EwBjO1C,uBxBgO0C;EwB/N1C,WAAW;EAlBf,mCAA0C;EAC1C,eAAe;EACf,sCAA6C;EAC7C,wBAA+B;A3B6gGjC;;A2Bt+FI;EACE,cAAc;A3By+FpB;;A2BtgGI;EDmDE,iBAAiB;A1Bu9FvB;;A0Bl9FA;EAEI,MAAM;EACN,WAAW;EACX,UAAU;EACV,aAAa;EACb,sBvBgqBuC;AHozE3C;;A2BlhGI;EACE,qBAAqB;EACrB,oBxBkO0C;EwBjO1C,uBxBgO0C;EwB/N1C,WAAW;A3BqhGjB;;A2BzhGI;EAgBI,aAAa;A3B6gGrB;;A2B1gGM;EACE,qBAAqB;EACrB,qBxB+MwC;EwB9MxC,uBxB6MwC;EwB5MxC,WAAW;EA9BjB,mCAA0C;EAC1C,yBAAgC;EAChC,sCAA6C;A3B4iG/C;;A2B3gGI;EACE,cAAc;A3B8gGpB;;A2BxhGM;EDiDA,iBAAiB;A1B2+FvB;;A0Bp+FA;EAKI,WAAW;EACX,YAAY;A1Bm+FhB;;A0B99FA;EE9GE,SAAS;EACT,gBAAmB;EACnB,gBAAgB;EAChB,6BzBCgB;AH+kGlB;;A0B99FA;EACE,cAAc;EACd,WAAW;EACX,uBvBopBwC;EuBnpBxC,WAAW;EACX,gBvBoK+B;EuBnK/B,cvBhHgB;EuBiHhB,mBAAmB;EACnB,mBAAmB;EACnB,6BAA6B;EAC7B,SAAS;A1Bi+FX;;AKrlGE;EqBmIE,cvBqnBqD;EuBpnBrD,qBAAqB;EJ9IrB,yBnBEc;AHmmGlB;;A0Bj/FA;EAgCI,WvBnJW;EuBoJX,qBAAqB;EJrJrB,yBnB8Ba;AH6kGjB;;A0Bv/FA;EAuCI,cvBpJc;EuBqJd,oBAAoB;EACpB,6BAA6B;A1Bo9FjC;;A0B58FA;EACE,cAAc;A1B+8FhB;;A0B38FA;EACE,cAAc;EACd,sBvB+lBwC;EuB9lBxC,gBAAgB;EtBpDZ,mBAtCY;EsB4FhB,cvBxKgB;EuByKhB,mBAAmB;A1B88FrB;;A0B18FA;EACE,cAAc;EACd,uBvBqlBwC;EuBplBxC,cvB7KgB;AH0nGlB;;A6BvoGA;;EAEE,kBAAkB;EAClB,oBAAoB;EACpB,sBAAsB;A7B0oGxB;;A6B9oGA;;EAOI,kBAAkB;EAClB,cAAc;A7B4oGlB;;AK3oGE;;EwBII,UAAU;A7B4oGhB;;A6BzpGA;;;;EAkBM,UAAU;A7B8oGhB;;A6BxoGA;EACE,aAAa;EACb,eAAe;EACf,2BAA2B;A7B2oG7B;;A6B9oGA;EAMI,WAAW;A7B4oGf;;A6BxoGA;;EAII,iB1BsM6B;AHm8FjC;;A6B7oGA;;EnBhBI,0BmB0B8B;EnBzB9B,6BmByB8B;A7ByoGlC;;A6BnpGA;;EnBFI,yBmBiB6B;EnBhB7B,4BmBgB6B;A7B0oGjC;;A6B1nGA;EACE,wBAAmC;EACnC,uBAAkC;A7B6nGpC;;A6B/nGA;;;EAOI,cAAc;A7B8nGlB;;A6B3nGE;EACE,eAAe;A7B8nGnB;;A6B1nGA;EACE,uBAAsC;EACtC,sBAAqC;A7B6nGvC;;A6B1nGA;EACE,sBAAsC;EACtC,qBAAqC;A7B6nGvC;;A6BzmGA;EACE,sBAAsB;EACtB,uBAAuB;EACvB,uBAAuB;A7B4mGzB;;A6B/mGA;;EAOI,WAAW;A7B6mGf;;A6BpnGA;;EAYI,gB1BqH6B;AHw/FjC;;A6BznGA;;EnBlFI,6BmBoG+B;EnBnG/B,4BmBmG+B;A7B6mGnC;;A6B/nGA;;EnBhGI,yBmBuH4B;EnBtH5B,0BmBsH4B;A7B8mGhC;;A6B7lGA;;EAGI,gBAAgB;A7B+lGpB;;A6BlmGA;;;;EAOM,kBAAkB;EAClB,sBAAsB;EACtB,oBAAoB;A7BkmG1B;;A8B3vGA;EACE,kBAAkB;EAClB,aAAa;EACb,eAAe;EACf,oBAAoB;EACpB,WAAW;A9B8vGb;;A8BnwGA;;;;EAWI,kBAAkB;EAClB,YAAY;EACZ,YAAY;EACZ,gBAAgB;A9B+vGpB;;A8B7wGA;;;;;;;;;;;;EAmBM,iB3BsN2B;AHmjGjC;;A8B5xGA;;;EA2BI,UAAU;A9BuwGd;;A8BlyGA;EAgCI,UAAU;A9BswGd;;A8BtyGA;;EpBeI,0BoBsBmD;EpBrBnD,6BoBqBmD;A9BuwGvD;;A8B5yGA;;EpB6BI,yBoBSmD;EpBRnD,4BoBQmD;A9B4wGvD;;A8BlzGA;EA4CI,aAAa;EACb,mBAAmB;A9B0wGvB;;A8BvzGA;;EpBeI,0BoBiC6E;EpBhC7E,6BoBgC6E;A9B6wGjF;;A8B7zGA;EpB6BI,yBoBoBsE;EpBnBtE,4BoBmBsE;A9BixG1E;;A8BtwGA;;EAEE,aAAa;A9BywGf;;A8B3wGA;;EAQI,kBAAkB;EAClB,UAAU;A9BwwGd;;A8BjxGA;;EAYM,UAAU;A9B0wGhB;;A8BtxGA;;;;;;;;EAoBI,iB3ByJ6B;AHonGjC;;A8BzwGA;EAAuB,kB3BqJU;AHwnGjC;;A8B5wGA;EAAsB,iB3BoJW;AH4nGjC;;A8BxwGA;EACE,aAAa;EACb,mBAAmB;EACnB,yB3BgSkC;E2B/RlC,gBAAgB;E1BwBZ,eAtCY;E0BgBhB,gB3B0L+B;E2BzL/B,gB3B8L+B;E2B7L/B,c3B7FgB;E2B8FhB,kBAAkB;EAClB,mBAAmB;EACnB,yB3BrGgB;E2BsGhB,yB3BpGgB;EONd,sBP6OgC;AHyoGpC;;A8BxxGA;;EAkBI,aAAa;A9B2wGjB;;A8BjwGA;;EAEE,gCZjB8D;AlBqxGhE;;A8BjwGA;;;;;;EAME,oB3B2QgC;ECtR5B,kBAtCY;E0BmDhB,gB3BgG+B;EOvO7B,qBP8O+B;AH8pGnC;;A8BjwGA;;EAEE,kCZlC8D;AlBsyGhE;;A8BjwGA;;;;;;EAME,uB3BqPiC;ECjR7B,mBAtCY;E0BoEhB,gB3BgF+B;EOxO7B,qBP+O+B;AH8qGnC;;A8BjwGA;;EAEE,sBAA0E;A9BowG5E;;A8BzvGA;;;;;;EpBzJI,0BoB+J4B;EpB9J5B,6BoB8J4B;A9B6vGhC;;A8B1vGA;;;;;;EpBpJI,yBoB0J2B;EpBzJ3B,4BoByJ2B;A9B8vG/B;;A+Bl7GA;EACE,kBAAkB;EAClB,cAAc;EACd,kBAA+C;EAC/C,oBAAqE;A/Bq7GvE;;A+Bl7GA;EACE,oBAAoB;EACpB,kB5B6f0C;AHw7F5C;;A+Bl7GA;EACE,kBAAkB;EAClB,OAAO;EACP,WAAW;EACX,W5Byf0C;E4Bxf1C,eAAkF;EAClF,UAAU;A/Bq7GZ;;A+B37GA;EASI,W5BvBW;E4BwBX,qB5BKa;EmB9Bb,yBnB8Ba;AHk7GjB;;A+Bj8GA;EAoBM,gD5BLW;AHs7GjB;;A+Br8GA;EAyBI,qB5B0bsE;AHs/F1E;;A+Bz8GA;EA6BI,W5B3CW;E4B4CX,yB5Bsf8E;E4Brf9E,qB5Bqf8E;AH27FlF;;A+B/8GA;EAuCM,c5B/CY;AH29GlB;;A+Bn9GA;EA0CQ,yB5BtDU;AHm+GlB;;A+Bn6GA;EACE,kBAAkB;EAClB,gBAAgB;EAEhB,mBAAmB;A/Bq6GrB;;A+Bz6GA;EASI,kBAAkB;EAClB,YAA+E;EAC/E,aAA+D;EAC/D,cAAc;EACd,W5B4bwC;E4B3bxC,Y5B2bwC;E4B1bxC,oBAAoB;EACpB,WAAW;EACX,sB5BnFW;E4BoFX,yB5BoJ6B;AHgxGjC;;A+Bt7GA;EAwBI,kBAAkB;EAClB,YAA+E;EAC/E,aAA+D;EAC/D,cAAc;EACd,W5B6awC;E4B5axC,Y5B4awC;E4B3axC,WAAW;EACX,mCAAgE;A/Bk6GpE;;A+Bz5GA;ErB5GI,sBP6OgC;AH4xGpC;;A+B75GA;EAOM,kOb5EqI;AlBs+G3I;;A+Bj6GA;EAaM,qB5B1FW;EmB9Bb,yBnB8Ba;AHm/GjB;;A+Bt6GA;EAkBM,+KbvFqI;AlB++G3I;;A+B16GA;EAwBM,wC5BrGW;AH2/GjB;;A+B96GA;EA2BM,wC5BxGW;AH+/GjB;;A+B94GA;EAGI,kB5B8Z+C;AHi/FnD;;A+Bl5GA;EAQM,8KbjHqI;AlB+/G3I;;A+Bt5GA;EAcM,wC5B/HW;AH2gHjB;;A+Bl4GA;EACE,qBAA2D;A/Bq4G7D;;A+Bt4GA;EAKM,cAAqD;EACrD,c5BsY+E;E4BrY/E,mBAAmB;EAEnB,qB5BoY4E;AHggGlF;;A+B74GA;EAaM,wBb1E0D;Ea2E1D,0Bb3E0D;Ea4E1D,uBbxD0D;EayD1D,wBbzD0D;Ea0D1D,yB5BlLY;E4BoLZ,qB5B0X4E;EiBpjB5E,yIjBsgB+H;AHwjGrI;;AoBzjHI;EWkKJ;IXjKM,gBAAgB;EpB6jHpB;AACF;;A+B75GA;EA0BM,sB5BhMS;E4BiMT,8BAA4E;A/Bu4GlF;;A+Bl6GA;EAiCM,wC5B1KW;AH+iHjB;;A+Bz3GA;EACE,qBAAqB;EACrB,WAAW;EACX,mCb7G8D;Ea8G9D,0C5BwKkC;ECvQ9B,eAtCY;E2BwIhB,gB5BkE+B;E4BjE/B,gB5BsE+B;E4BrE/B,c5BrNgB;E4BsNhB,sBAAsB;EACtB,uO5BuW+I;E4BtW/I,yB5B3NgB;EONd,sBP6OgC;E4BTlC,wBAAgB;EAAhB,qBAAgB;EAAhB,gBAAgB;A/B03GlB;;A+Bz4GA;EAkBI,qB5B4PsE;E4B3PtE,UAAU;EAIR,gD5B7MW;AHqkHjB;;A+B/4GA;EAgCM,c5B5OY;E4B6OZ,sB5BpPS;AHumHf;;A+Bp5GA;EAuCI,YAAY;EACZ,sB5BoIgC;E4BnIhC,sBAAsB;A/Bi3G1B;;A+B15GA;EA6CI,c5B1Pc;E4B2Pd,yB5B/Pc;AHgnHlB;;A+B/5GA;EAmDI,aAAa;A/Bg3GjB;;A+Bn6GA;EAwDI,kBAAkB;EAClB,0B5BrQc;AHonHlB;;A+B32GA;EACE,kCbxK8D;EayK9D,oB5BsHkC;E4BrHlC,uB5BqHkC;E4BpHlC,oB5BqHiC;ECjR7B,mBAtCY;AJijHlB;;A+B32GA;EACE,gCbhL8D;EaiL9D,mB5BmHiC;E4BlHjC,sB5BkHiC;E4BjHjC,kB5BkHgC;ECtR5B,kBAtCY;AJyjHlB;;A+Bt2GA;EACE,kBAAkB;EAClB,qBAAqB;EACrB,WAAW;EACX,mCbhM8D;EaiM9D,gBAAgB;A/By2GlB;;A+Bt2GA;EACE,kBAAkB;EAClB,UAAU;EACV,WAAW;EACX,mCbxM8D;EayM9D,SAAS;EACT,UAAU;A/By2GZ;;A+B/2GA;EASI,qB5B2KsE;E4B1KtE,gD5B1Ra;AHooHjB;;A+Bp3GA;;EAgBI,yB5B3Tc;AHoqHlB;;A+Bz3GA;EAqBM,iB5BkUQ;AHsiGd;;A+B73GA;EA0BI,0BAA0B;A/Bu2G9B;;A+Bn2GA;EACE,kBAAkB;EAClB,MAAM;EACN,QAAQ;EACR,OAAO;EACP,UAAU;EACV,mCbxO8D;EayO9D,yB5B6CkC;E4B3ClC,gB5BxD+B;E4ByD/B,gB5BpD+B;E4BqD/B,c5B/UgB;E4BgVhB,sB5BvVa;E4BwVb,yB5BpVgB;EONd,sBP6OgC;AHm9GpC;;A+Bn3GA;EAkBI,kBAAkB;EAClB,MAAM;EACN,QAAQ;EACR,SAAS;EACT,UAAU;EACV,cAAc;EACd,6Bb1P4D;Ea2P5D,yB5B2BgC;E4B1BhC,gB5BpE6B;E4BqE7B,c5B/Vc;E4BgWd,iBAAiB;ETxWjB,yBnBGc;E4BuWd,oBAAoB;ErB3WpB,kCqB4WgF;A/Bq2GpF;;A+B31GA;EACE,WAAW;EACX,cbhR2B;EaiR3B,UAAU;EACV,6BAA6B;EAC7B,wBAAgB;EAAhB,qBAAgB;EAAhB,gBAAgB;A/B81GlB;;A+Bn2GA;EAQI,aAAa;A/B+1GjB;;A+Bv2GA;EAY8B,gE5BnWb;AHksHjB;;A+B32GA;EAa8B,gE5BpWb;AHssHjB;;A+B/2GA;EAc8B,gE5BrWb;AH0sHjB;;A+Bn3GA;EAkBI,SAAS;A/Bq2Gb;;A+Bv3GA;EAsBI,W5B2N6C;E4B1N7C,Y5B0N6C;E4BzN7C,oBAAyE;ET7YzE,yBnB8Ba;E4BiXb,S5B0N0C;EO1mB1C,mBP2mB6C;EiB1mB3C,oHjBsgB+H;EiBtgB/H,4GjBsgB+H;E4BnHjI,wBAAgB;EAAhB,gBAAgB;A/Bo2GpB;;AoBlvHI;EWgXJ;IX/WM,wBAAgB;IAAhB,gBAAgB;EpBsvHpB;AACF;;A+Bx4GA;ETrXI,yBnB8mB2E;AHmpG/E;;A+B54GA;EAsCI,W5BoMoC;E4BnMpC,c5BoMqC;E4BnMrC,kBAAkB;EAClB,e5BmMuC;E4BlMvC,yB5B3Zc;E4B4Zd,yBAAyB;ErBjazB,mBPomBoC;AHwqGxC;;A+Bt5GA;EAiDI,W5BgM6C;E4B/L7C,Y5B+L6C;EmBtmB7C,yBnB8Ba;E4B2Yb,S5BgM0C;EO1mB1C,mBP2mB6C;EiB1mB3C,iHjBsgB+H;EiBtgB/H,4GjBsgB+H;E4BzFjI,qBAAgB;EAAhB,gBAAgB;A/Bw2GpB;;AoBhxHI;EWgXJ;IX/WM,qBAAgB;IAAhB,gBAAgB;EpBoxHpB;AACF;;A+Bt6GA;ETrXI,yBnB8mB2E;AHirG/E;;A+B16GA;EAgEI,W5B0KoC;E4BzKpC,c5B0KqC;E4BzKrC,kBAAkB;EAClB,e5ByKuC;E4BxKvC,yB5Brbc;E4Bsbd,yBAAyB;ErB3bzB,mBPomBoC;AHssGxC;;A+Bp7GA;EA2EI,W5BsK6C;E4BrK7C,Y5BqK6C;E4BpK7C,aAAa;EACb,oB5B9D+B;E4B+D/B,mB5B/D+B;EmBrY/B,yBnB8Ba;E4Bwab,S5BmK0C;EO1mB1C,mBP2mB6C;EiB1mB3C,gHjBsgB+H;EiBtgB/H,4GjBsgB+H;E4B5DjI,gBAAgB;A/B42GpB;;AoBjzHI;EWgXJ;IX/WM,oBAAgB;IAAhB,gBAAgB;EpBqzHpB;AACF;;A+Bv8GA;ETrXI,yBnB8mB2E;AHktG/E;;A+B38GA;EA6FI,W5B6IoC;E4B5IpC,c5B6IqC;E4B5IrC,kBAAkB;EAClB,e5B4IuC;E4B3IvC,6BAA6B;EAC7B,yBAAyB;EACzB,oBAA4C;A/Bk3GhD;;A+Br9GA;EAwGI,yB5Bzdc;EOLd,mBPomBoC;AH4uGxC;;A+B19GA;EA6GI,kBAAkB;EAClB,yB5B/dc;EOLd,mBPomBoC;AHkvGxC;;A+Bh+GA;EAoHM,yB5BneY;AHm1HlB;;A+Bp+GA;EAwHM,eAAe;A/Bg3GrB;;A+Bx+GA;EA4HM,yB5B3eY;AH21HlB;;A+B5+GA;EAgIM,eAAe;A/Bg3GrB;;A+Bh/GA;EAoIM,yB5BnfY;AHm2HlB;;A+B32GA;;;EX9fM,4GjBsgB+H;AHy2GrI;;AoB12HI;EWyfJ;;;IXxfM,gBAAgB;EpBg3HpB;AACF;;AgCx3HA;EACE,aAAa;EACb,eAAe;EACf,eAAe;EACf,gBAAgB;EAChB,gBAAgB;AhC23HlB;;AgCx3HA;EACE,cAAc;EACd,oB7B6qBsC;AH8sGxC;;AK13HE;E2BEE,qBAAqB;AhC43HzB;;AgCj4HA;EAUI,c7BVc;E6BWd,oBAAoB;EACpB,eAAe;AhC23HnB;;AgCn3HA;EACE,gC7BxBgB;AH84HlB;;AgCv3HA;EAII,mB7B0M6B;AH6qHjC;;AgC33HA;EAQI,6BAAgD;EtB3BhD,+BPoOgC;EOnOhC,gCPmOgC;AHgrHpC;;AKl5HE;E2B6BI,qC7BnCY;AH45HlB;;AgCr4HA;EAgBM,c7BpCY;E6BqCZ,6BAA6B;EAC7B,yBAAyB;AhCy3H/B;;AgC34HA;;EAwBI,c7B3Cc;E6B4Cd,sB7BnDW;E6BoDX,kC7BpDW;AH46Hf;;AgCl5HA;EA+BI,gB7B+K6B;EOjO7B,yBsBoD4B;EtBnD5B,0BsBmD4B;AhCu3HhC;;AgC92HA;EtBtEI,sBP6OgC;AH2sHpC;;AgCl3HA;;EAOI,W7B3EW;E6B4EX,yB7B/Ca;AH+5HjB;;AgCv2HA;EAEI,cAAc;EACd,kBAAkB;AhCy2HtB;;AgCr2HA;EAEI,aAAa;EACb,YAAY;EACZ,kBAAkB;AhCu2HtB;;AgC91HA;EAEI,aAAa;AhCg2HjB;;AgCl2HA;EAKI,cAAc;AhCi2HlB;;AiCr8HA;EACE,kBAAkB;EAClB,aAAa;EACb,eAAe;EACf,mBAAmB;EACnB,8BAA8B;EAC9B,oB9BiHW;AHu1Hb;;AiC98HA;;EAWI,aAAa;EACb,eAAe;EACf,mBAAmB;EACnB,8BAA8B;AjCw8HlC;;AiCp7HA;EACE,qBAAqB;EACrB,sB9BqqB+E;E8BpqB/E,yB9BoqB+E;E8BnqB/E,kB9BiFW;ECTP,kBAtCY;E6BhChB,oBAAoB;EACpB,mBAAmB;AjCu7HrB;;AKj+HE;E4B6CE,qBAAqB;AjCw7HzB;;AiC/6HA;EACE,aAAa;EACb,sBAAsB;EACtB,eAAe;EACf,gBAAgB;EAChB,gBAAgB;AjCk7HlB;;AiCv7HA;EAQI,gBAAgB;EAChB,eAAe;AjCm7HnB;;AiC57HA;EAaI,gBAAgB;EAChB,WAAW;AjCm7Hf;;AiC16HA;EACE,qBAAqB;EACrB,mB9B4lBuC;E8B3lBvC,sB9B2lBuC;AHk1GzC;;AiCj6HA;EACE,gBAAgB;EAChB,YAAY;EAGZ,mBAAmB;AjCk6HrB;;AiC95HA;EACE,wB9BumBwC;EC9lBpC,kBAtCY;E6B+BhB,cAAc;EACd,6BAA6B;EAC7B,6BAAuC;EvBrHrC,sBP6OgC;AH0yHpC;;AK5gIE;E4B8GE,qBAAqB;AjCk6HzB;;AiC55HA;EACE,qBAAqB;EACrB,YAAY;EACZ,aAAa;EACb,sBAAsB;EACtB,WAAW;EACX,mCAAmC;EACnC,0BAA0B;AjC+5H5B;;Acj+HI;EmB4EC;;IAGK,gBAAgB;IAChB,eAAe;EjCw5HvB;AACF;;Act/HI;EmByFA;IAoBI,qBAAqB;IACrB,2BAA2B;EjC84HjC;EiCn6HG;IAwBK,mBAAmB;EjC84H3B;EiCt6HG;IA2BO,kBAAkB;EjC84H5B;EiCz6HG;IA+BO,qB9BgiB6B;I8B/hB7B,oB9B+hB6B;EH82GvC;EiC76HG;;IAsCK,iBAAiB;EjC24HzB;EiCj7HG;IAqDK,wBAAwB;IAGxB,gBAAgB;EjC63HxB;EiCr7HG;IA4DK,aAAa;EjC43HrB;AACF;;AcrgII;EmB4EC;;IAGK,gBAAgB;IAChB,eAAe;EjC47HvB;AACF;;Ac1hII;EmByFA;IAoBI,qBAAqB;IACrB,2BAA2B;EjCk7HjC;EiCv8HG;IAwBK,mBAAmB;EjCk7H3B;EiC18HG;IA2BO,kBAAkB;EjCk7H5B;EiC78HG;IA+BO,qB9BgiB6B;I8B/hB7B,oB9B+hB6B;EHk5GvC;EiCj9HG;;IAsCK,iBAAiB;EjC+6HzB;EiCr9HG;IAqDK,wBAAwB;IAGxB,gBAAgB;EjCi6HxB;EiCz9HG;IA4DK,aAAa;EjCg6HrB;AACF;;AcziII;EmB4EC;;IAGK,gBAAgB;IAChB,eAAe;EjCg+HvB;AACF;;Ac9jII;EmByFA;IAoBI,qBAAqB;IACrB,2BAA2B;EjCs9HjC;EiC3+HG;IAwBK,mBAAmB;EjCs9H3B;EiC9+HG;IA2BO,kBAAkB;EjCs9H5B;EiCj/HG;IA+BO,qB9BgiB6B;I8B/hB7B,oB9B+hB6B;EHs7GvC;EiCr/HG;;IAsCK,iBAAiB;EjCm9HzB;EiCz/HG;IAqDK,wBAAwB;IAGxB,gBAAgB;EjCq8HxB;EiC7/HG;IA4DK,aAAa;EjCo8HrB;AACF;;Ac7kII;EmB4EC;;IAGK,gBAAgB;IAChB,eAAe;EjCogIvB;AACF;;AclmII;EmByFA;IAoBI,qBAAqB;IACrB,2BAA2B;EjC0/HjC;EiC/gIG;IAwBK,mBAAmB;EjC0/H3B;EiClhIG;IA2BO,kBAAkB;EjC0/H5B;EiCrhIG;IA+BO,qB9BgiB6B;I8B/hB7B,oB9B+hB6B;EH09GvC;EiCzhIG;;IAsCK,iBAAiB;EjCu/HzB;EiC7hIG;IAqDK,wBAAwB;IAGxB,gBAAgB;EjCy+HxB;EiCjiIG;IA4DK,aAAa;EjCw+HrB;AACF;;AiC1iIA;EAyBQ,qBAAqB;EACrB,2BAA2B;AjCqhInC;;AiC/iIA;;EAQU,gBAAgB;EAChB,eAAe;AjC4iIzB;;AiCrjIA;EA6BU,mBAAmB;AjC4hI7B;;AiCzjIA;EAgCY,kBAAkB;AjC6hI9B;;AiC7jIA;EAoCY,qB9BgiB6B;E8B/hB7B,oB9B+hB6B;AH8/GzC;;AiClkIA;;EA2CU,iBAAiB;AjC4hI3B;;AiCvkIA;EA0DU,wBAAwB;EAGxB,gBAAgB;AjC+gI1B;;AiC5kIA;EAiEU,aAAa;AjC+gIvB;;AiClgIA;EAEI,yB9B/MW;AHmtIf;;AKptIE;E4BmNI,yB9BlNS;AHutIf;;AiC1gIA;EAWM,yB9BxNS;AH2tIf;;AK5tIE;E4B4NM,yB9B3NO;AH+tIf;;AiClhIA;EAkBQ,yB9B/NO;AHmuIf;;AiCthIA;;;;EA0BM,yB9BvOS;AH0uIf;;AiC7hIA;EA+BI,yB9B5OW;E8B6OX,gC9B7OW;AH+uIf;;AiCliIA;EAoCI,+QftNuI;AlBwtI3I;;AiCtiIA;EAwCI,yB9BrPW;AHuvIf;;AiC1iIA;EA0CM,yB9BvPS;AH2vIf;;AK5vIE;E4B2PM,yB9B1PO;AH+vIf;;AiC9/HA;EAEI,W9B7QW;AH6wIf;;AKpwIE;E4BuQI,W9BhRS;AHixIf;;AiCtgIA;EAWM,+B9BtRS;AHqxIf;;AK5wIE;E4BgRM,gC9BzRO;AHyxIf;;AiC9gIA;EAkBQ,gC9B7RO;AH6xIf;;AiClhIA;;;;EA0BM,W9BrSS;AHoyIf;;AiCzhIA;EA+BI,+B9B1SW;E8B2SX,sC9B3SW;AHyyIf;;AiC9hIA;EAoCI,qRf1QuI;AlBwwI3I;;AiCliIA;EAwCI,+B9BnTW;AHizIf;;AiCtiIA;EA0CM,W9BrTS;AHqzIf;;AK5yIE;E4B+SM,W9BxTO;AHyzIf;;AkC5zIA;EACE,kBAAkB;EAClB,aAAa;EACb,sBAAsB;EACtB,YAAY;EAEZ,qBAAqB;EACrB,sB/BJa;E+BKb,2BAA2B;EAC3B,sC/BIa;EOZX,sBP6OgC;AH0lIpC;;AkCx0IA;EAaI,eAAe;EACf,cAAc;AlC+zIlB;;AkC70IA;ExBUI,+BPoOgC;EOnOhC,gCPmOgC;AHomIpC;;AkCl1IA;ExBwBI,mCPsNgC;EOrNhC,kCPqNgC;AHymIpC;;AkCzzIA;EAGE,cAAc;EAGd,eAAe;EACf,gB/BsxByC;AHkiH3C;;AkCpzIA;EACE,sB/BgxBwC;AHuiH1C;;AkCpzIA;EACE,qBAA+B;EAC/B,gBAAgB;AlCuzIlB;;AkCpzIA;EACE,gBAAgB;AlCuzIlB;;AKl2IE;E6BgDE,qBAAqB;AlCszIzB;;AkCxzIA;EAMI,oB/B+vBuC;AHujH3C;;AkC9yIA;EACE,wB/BsvByC;E+BrvBzC,gBAAgB;EAEhB,qC/B3Da;E+B4Db,6C/B5Da;AH42If;;AkCrzIA;ExBnEI,0DwB2E8E;AlCizIlF;;AkCzzIA;EAaM,aAAa;AlCgzInB;;AkC3yIA;EACE,wB/BouByC;E+BnuBzC,qC/B3Ea;E+B4Eb,0C/B5Ea;AH03If;;AkCjzIA;ExBrFI,0DQ+H4D;AlB2wIhE;;AkCtyIA;EACE,uBAAiC;EACjC,uB/BmtBwC;E+BltBxC,sBAAgC;EAChC,gBAAgB;AlCyyIlB;;AkCtyIA;EACE,uBAAiC;EACjC,sBAAgC;AlCyyIlC;;AkCryIA;EACE,kBAAkB;EAClB,MAAM;EACN,QAAQ;EACR,SAAS;EACT,OAAO;EACP,gB/B8sByC;AH0lH3C;;AkCryIA;;;EAGE,cAAc;EACd,WAAW;AlCwyIb;;AkCryIA;;ExBxHI,2CQsH4D;ERrH5D,4CQqH4D;AlB6yIhE;;AkCtyIA;;ExB/GI,+CQwG4D;ERvG5D,8CQuG4D;AlBmzIhE;;AkCpyIA;EAEI,mB/BurBsD;AH+mH1D;;Ac/3II;EoBuFJ;IAMI,aAAa;IACb,mBAAmB;IACnB,mB/BirBsD;I+BhrBtD,kB/BgrBsD;EHunHxD;EkChzIF;IAaM,YAAY;IACZ,kB/B2qBoD;I+B1qBpD,gBAAgB;IAChB,iB/ByqBoD;EH6nHxD;AACF;;AkC7xIA;EAII,mB/B2pBsD;AHkoH1D;;Acl5II;EoBiHJ;IAQI,aAAa;IACb,mBAAmB;ElC8xIrB;EkCvyIF;IAcM,YAAY;IACZ,gBAAgB;ElC4xIpB;EkC3yIF;IAkBQ,cAAc;IACd,cAAc;ElC4xIpB;EkC/yIF;IxBxJI,0BwBiLoC;IxBhLpC,6BwBgLoC;ElC0xItC;EkCnzIF;;IA8BY,0BAA0B;ElCyxIpC;EkCvzIF;;IAmCY,6BAA6B;ElCwxIvC;EkC3zIF;IxB1II,yBwBkLmC;IxBjLnC,4BwBiLmC;ElCuxIrC;EkC/zIF;;IA6CY,yBAAyB;ElCsxInC;EkCn0IF;;IAkDY,4BAA4B;ElCqxItC;AACF;;AkCzwIA;EAEI,sB/BglBsC;AH2rH1C;;Ac77II;EoBgLJ;IAMI,oB/B6lBiC;I+B7lBjC,e/B6lBiC;I+B5lBjC,wB/B6lBuC;I+B7lBvC,mB/B6lBuC;I+B5lBvC,UAAU;IACV,SAAS;ElC4wIX;EkCrxIF;IAYM,qBAAqB;IACrB,WAAW;ElC4wIf;AACF;;AkCnwIA;EAEI,gBAAgB;AlCqwIpB;;AkCvwIA;EAKM,gBAAgB;ExB5OlB,6BwB6OiC;ExB5OjC,4BwB4OiC;AlCuwIrC;;AkC7wIA;ExBrPI,yBwB+P8B;ExB9P9B,0BwB8P8B;AlCwwIlC;;AkClxIA;ExB9PI,gBwB4Q0B;EACxB,mB/BnC2B;AH2yIjC;;AmC1hJA;EACE,aAAa;EACb,eAAe;EACf,qBhC+hCsC;EgC9hCtC,mBhCiiCsC;EgC/hCtC,gBAAgB;EAChB,yBhCEgB;EOJd,sBP6OgC;AHkzIpC;;AmCzhJA;EAGI,oBhCqhCqC;AHqgHzC;;AmC7hJA;EAMM,qBAAqB;EACrB,qBhCihCmC;EgChhCnC,chCNY;EgCOZ,YhCshCuC;AHqgH7C;;AmCpiJA;EAoBI,0BAA0B;AnCohJ9B;;AmCxiJA;EAwBI,qBAAqB;AnCohJzB;;AmC5iJA;EA4BI,chC1Bc;AH8iJlB;;AoC3jJA;EACE,aAAa;E7BGb,eAAe;EACf,gBAAgB;EGAd,sBP6OgC;AHg1IpC;;AoC5jJA;EACE,kBAAkB;EAClB,cAAc;EACd,uBjCgxBwC;EiC/wBxC,iBjCqO+B;EiCpO/B,iBjCmxBsC;EiClxBtC,cjCwBe;EiCvBf,sBjCNa;EiCOb,yBjCJgB;AHmkJlB;;AoCvkJA;EAWI,UAAU;EACV,cjCkK8D;EiCjK9D,qBAAqB;EACrB,yBjCXc;EiCYd,qBjCXc;AH2kJlB;;AoC/kJA;EAmBI,UAAU;EACV,UjC4wBiC;EiC3wBjC,gDjCSa;AHujJjB;;AoC5jJA;EAGM,cAAc;E1BChB,+BP+MgC;EO9MhC,kCP8MgC;AH+2IpC;;AoClkJA;E1BVI,gCP6NgC;EO5NhC,mCP4NgC;AHo3IpC;;AoCvkJA;EAcI,UAAU;EACV,WjCvCW;EiCwCX,yBjCXa;EiCYb,qBjCZa;AHykJjB;;AoC9kJA;EAqBI,cjCvCc;EiCwCd,oBAAoB;EAEpB,YAAY;EACZ,sBjCjDW;EiCkDX,qBjC/Cc;AH2mJlB;;AqClnJE;EACE,uBlCyxBsC;EC9pBpC,kBAtCY;EiCnFd,gBlCsO6B;AH+4IjC;;AqChnJM;E3BwBF,8BPgN+B;EO/M/B,iCP+M+B;AH64InC;;AqChnJM;E3BKF,+BP8N+B;EO7N/B,kCP6N+B;AHk5InC;;AqCloJE;EACE,uBlCuxBqC;EC5pBnC,mBAtCY;EiCnFd,gBlCuO6B;AH85IjC;;AqChoJM;E3BwBF,8BPiN+B;EOhN/B,iCPgN+B;AH45InC;;AqChoJM;E3BKF,+BP+N+B;EO9N/B,kCP8N+B;AHi6InC;;AsChpJA;EACE,qBAAqB;EACrB,qBnCw5BsC;ECv1BpC,cAAW;EkC/Db,gBnC2R+B;EmC1R/B,cAAc;EACd,kBAAkB;EAClB,mBAAmB;EACnB,wBAAwB;E5BRtB,sBP6OgC;EiB5O9B,qIjB6b6I;AH+tInJ;;AoBvpJI;EkBNJ;IlBOM,gBAAgB;EpB2pJpB;AACF;;AKxpJE;EiCGI,qBAAqB;AtCypJ3B;;AsCvqJA;EAoBI,aAAa;AtCupJjB;;AsClpJA;EACE,kBAAkB;EAClB,SAAS;AtCqpJX;;AsC9oJA;EACE,oBnC63BsC;EmC53BtC,mBnC43BsC;EOh6BpC,oBPm6BqC;AHmxHzC;;AsCzoJE;ECjDA,WpCMa;EoCLb,yBpCkCe;AH4pJjB;;AKhrJE;EkCVI,WpCCS;EoCAT,yBAAkC;AvC8rJxC;;AuCjsJU;EAQJ,UAAU;EACV,+CpCuBW;AHsqJjB;;AsCxpJE;ECjDA,WpCMa;EoCLb,yBpCWgB;AHksJlB;;AK/rJE;EkCVI,WpCCS;EoCAT,yBAAkC;AvC6sJxC;;AuChtJU;EAQJ,UAAU;EACV,iDpCAY;AH4sJlB;;AsCvqJE;ECjDA,WpCMa;EoCLb,yBpCyCe;AHmrJjB;;AK9sJE;EkCVI,WpCCS;EoCAT,yBAAkC;AvC4tJxC;;AuC/tJU;EAQJ,UAAU;EACV,+CpC8BW;AH6rJjB;;AsCtrJE;ECjDA,WpCMa;EoCLb,yBpC2Ce;AHgsJjB;;AK7tJE;EkCVI,WpCCS;EoCAT,yBAAkC;AvC2uJxC;;AuC9uJU;EAQJ,UAAU;EACV,gDpCgCW;AH0sJjB;;AsCrsJE;ECjDA,cpCegB;EoCdhB,yBpCwCe;AHktJjB;;AK5uJE;EkCVI,cpCUY;EoCTZ,yBAAkC;AvC0vJxC;;AuC7vJU;EAQJ,UAAU;EACV,+CpC6BW;AH4tJjB;;AsCptJE;ECjDA,WpCMa;EoCLb,yBpCsCe;AHmuJjB;;AK3vJE;EkCVI,WpCCS;EoCAT,yBAAkC;AvCywJxC;;AuC5wJU;EAQJ,UAAU;EACV,+CpC2BW;AH6uJjB;;AsCnuJE;ECjDA,cpCegB;EoCdhB,yBpCMgB;AHkxJlB;;AK1wJE;EkCVI,cpCUY;EoCTZ,yBAAkC;AvCwxJxC;;AuC3xJU;EAQJ,UAAU;EACV,iDpCLY;AH4xJlB;;AsClvJE;ECjDA,WpCMa;EoCLb,yBpCagB;AH0xJlB;;AKzxJE;EkCVI,WpCCS;EoCAT,yBAAkC;AvCuyJxC;;AuC1yJU;EAQJ,UAAU;EACV,8CpCEY;AHoyJlB;;AwCnzJA;EACE,kBAAoD;EACpD,mBrCqzBsC;EqCnzBtC,yBrCKgB;EOJd,qBP8O+B;AHukJnC;;Ac9vJI;E0B5DJ;IAQI,kBrC+yBoC;EHwgItC;AACF;;AwCpzJA;EACE,gBAAgB;EAChB,eAAe;E9BTb,gB8BUsB;AxCuzJ1B;;AyCl0JA;EACE,kBAAkB;EAClB,wBtCq9ByC;EsCp9BzC,mBtCq9BsC;EsCp9BtC,6BAA6C;E/BH3C,sBP6OgC;AH4lJpC;;AyCj0JA;EAEE,cAAc;AzCm0JhB;;AyC/zJA;EACE,gBtCgR+B;AHkjJjC;;AyC1zJA;EACE,mBAAsD;AzC6zJxD;;AyC9zJA;EAKI,kBAAkB;EAClB,MAAM;EACN,QAAQ;EACR,wBtCu7BuC;EsCt7BvC,cAAc;AzC6zJlB;;AyCnzJE;EC9CA,cxB8FgE;EIzF9D,yBJyF8D;EwB5FhE,qBxB4FgE;AlBywJlE;;A0Cn2JE;EACE,yBAAqC;A1Cs2JzC;;A0Cn2JE;EACE,cAA0B;A1Cs2J9B;;AyCj0JE;EC9CA,cxB8FgE;EIzF9D,yBJyF8D;EwB5FhE,qBxB4FgE;AlBuxJlE;;A0Cj3JE;EACE,yBAAqC;A1Co3JzC;;A0Cj3JE;EACE,cAA0B;A1Co3J9B;;AyC/0JE;EC9CA,cxB8FgE;EIzF9D,yBJyF8D;EwB5FhE,qBxB4FgE;AlBqyJlE;;A0C/3JE;EACE,yBAAqC;A1Ck4JzC;;A0C/3JE;EACE,cAA0B;A1Ck4J9B;;AyC71JE;EC9CA,cxB8FgE;EIzF9D,yBJyF8D;EwB5FhE,qBxB4FgE;AlBmzJlE;;A0C74JE;EACE,yBAAqC;A1Cg5JzC;;A0C74JE;EACE,cAA0B;A1Cg5J9B;;AyC32JE;EC9CA,cxB8FgE;EIzF9D,yBJyF8D;EwB5FhE,qBxB4FgE;AlBi0JlE;;A0C35JE;EACE,yBAAqC;A1C85JzC;;A0C35JE;EACE,cAA0B;A1C85J9B;;AyCz3JE;EC9CA,cxB8FgE;EIzF9D,yBJyF8D;EwB5FhE,qBxB4FgE;AlB+0JlE;;A0Cz6JE;EACE,yBAAqC;A1C46JzC;;A0Cz6JE;EACE,cAA0B;A1C46J9B;;AyCv4JE;EC9CA,cxB8FgE;EIzF9D,yBJyF8D;EwB5FhE,qBxB4FgE;AlB61JlE;;A0Cv7JE;EACE,yBAAqC;A1C07JzC;;A0Cv7JE;EACE,cAA0B;A1C07J9B;;AyCr5JE;EC9CA,cxB8FgE;EIzF9D,yBJyF8D;EwB5FhE,qBxB4FgE;AlB22JlE;;A0Cr8JE;EACE,yBAAqC;A1Cw8JzC;;A0Cr8JE;EACE,cAA0B;A1Cw8J9B;;A2Ch9JE;EACE;IAAO,2BAAuC;E3Co9JhD;E2Cn9JE;IAAK,wBAAwB;E3Cs9J/B;AACF;;A2Cz9JE;EACE;IAAO,2BAAuC;E3Co9JhD;E2Cn9JE;IAAK,wBAAwB;E3Cs9J/B;AACF;;A2Cn9JA;EACE,aAAa;EACb,YxC89BsC;EwC79BtC,gBAAgB;EvCoHZ,kBAtCY;EuC5EhB,yBxCJgB;EOJd,sBP6OgC;AHkvJpC;;A2Cl9JA;EACE,aAAa;EACb,sBAAsB;EACtB,uBAAuB;EACvB,gBAAgB;EAChB,WxChBa;EwCiBb,kBAAkB;EAClB,mBAAmB;EACnB,yBxCUe;EiB9BX,2BjB0+B4C;AHggIlD;;AoBr+JI;EuBOJ;IvBNM,gBAAgB;EpBy+JpB;AACF;;A2Cx9JA;ErBaE,qMAA6I;EqBX7I,0BxCw8BsC;AHmhIxC;;A2Cv9JE;EACE,0DxC08BkD;EwC18BlD,kDxC08BkD;AHghItD;;A2Cv9JM;EAJJ;IAKM,uBAAe;IAAf,eAAe;E3C29JrB;AACF;;A4CrgKA;EACE,aAAa;EACb,uBAAuB;A5CwgKzB;;A4CrgKA;EACE,OAAO;A5CwgKT;;A6C1gKA;EACE,aAAa;EACb,sBAAsB;EAGtB,eAAe;EACf,gBAAgB;A7C2gKlB;;A6ClgKA;EACE,WAAW;EACX,c1CPgB;E0CQhB,mBAAmB;A7CqgKrB;;AK3gKE;EwCUE,UAAU;EACV,c1Cbc;E0Ccd,qBAAqB;EACrB,yB1CrBc;AH0hKlB;;A6C/gKA;EAcI,c1CjBc;E0CkBd,yB1CzBc;AH8hKlB;;A6C5/JA;EACE,kBAAkB;EAClB,cAAc;EACd,wB1C88ByC;E0C58BzC,sB1CzCa;E0C0Cb,sC1ChCa;AH8hKf;;A6CpgKA;EnC7BI,+BPoOgC;EOnOhC,gCPmOgC;AHk0JpC;;A6CzgKA;EnCfI,mCPsNgC;EOrNhC,kCPqNgC;AHu0JpC;;A6C9gKA;EAkBI,c1ChDc;E0CiDd,oBAAoB;EACpB,sB1CxDW;AHwjKf;;A6CphKA;EAyBI,UAAU;EACV,W1C9DW;E0C+DX,yB1ClCa;E0CmCb,qB1CnCa;AHkiKjB;;A6C3hKA;EAgCI,mBAAmB;A7C+/JvB;;A6C/hKA;EAmCM,gB1CiK2B;E0ChK3B,qB1CgK2B;AHg2JjC;;A6Cl/JI;EACE,mBAAmB;A7Cq/JzB;;A6Ct/JI;EnCjCA,kCPsLgC;EOlMhC,0BmCmDwC;A7Cq/J5C;;A6C3/JI;EnC7CA,gCPkMgC;EOtLhC,4BmC4C0C;A7Cq/J9C;;A6ChgKI;EAeM,aAAa;A7Cq/JvB;;A6CpgKI;EAmBM,qB1C+HuB;E0C9HvB,oBAAoB;A7Cq/J9B;;A6CzgKI;EAuBQ,iB1C2HqB;E0C1HrB,sB1C0HqB;AH43JjC;;Ac/iKI;E+BiCA;IACE,mBAAmB;E7CkhKvB;E6CnhKE;InCjCA,kCPsLgC;IOlMhC,0BmCmDwC;E7CihK1C;E6CvhKE;InC7CA,gCPkMgC;IOtLhC,4BmC4C0C;E7CghK5C;E6C3hKE;IAeM,aAAa;E7C+gKrB;E6C9hKE;IAmBM,qB1C+HuB;I0C9HvB,oBAAoB;E7C8gK5B;E6CliKE;IAuBQ,iB1C2HqB;I0C1HrB,sB1C0HqB;EHo5J/B;AACF;;AcxkKI;E+BiCA;IACE,mBAAmB;E7C2iKvB;E6C5iKE;InCjCA,kCPsLgC;IOlMhC,0BmCmDwC;E7C0iK1C;E6ChjKE;InC7CA,gCPkMgC;IOtLhC,4BmC4C0C;E7CyiK5C;E6CpjKE;IAeM,aAAa;E7CwiKrB;E6CvjKE;IAmBM,qB1C+HuB;I0C9HvB,oBAAoB;E7CuiK5B;E6C3jKE;IAuBQ,iB1C2HqB;I0C1HrB,sB1C0HqB;EH66J/B;AACF;;AcjmKI;E+BiCA;IACE,mBAAmB;E7CokKvB;E6CrkKE;InCjCA,kCPsLgC;IOlMhC,0BmCmDwC;E7CmkK1C;E6CzkKE;InC7CA,gCPkMgC;IOtLhC,4BmC4C0C;E7CkkK5C;E6C7kKE;IAeM,aAAa;E7CikKrB;E6ChlKE;IAmBM,qB1C+HuB;I0C9HvB,oBAAoB;E7CgkK5B;E6CplKE;IAuBQ,iB1C2HqB;I0C1HrB,sB1C0HqB;EHs8J/B;AACF;;Ac1nKI;E+BiCA;IACE,mBAAmB;E7C6lKvB;E6C9lKE;InCjCA,kCPsLgC;IOlMhC,0BmCmDwC;E7C4lK1C;E6ClmKE;InC7CA,gCPkMgC;IOtLhC,4BmC4C0C;E7C2lK5C;E6CtmKE;IAeM,aAAa;E7C0lKrB;E6CzmKE;IAmBM,qB1C+HuB;I0C9HvB,oBAAoB;E7CylK5B;E6C7mKE;IAuBQ,iB1C2HqB;I0C1HrB,sB1C0HqB;EH+9J/B;AACF;;A6C5kKA;EAEI,qBAAqB;EACrB,oBAAoB;EnCjIpB,gBmCkIwB;A7C8kK5B;;A6CllKA;EAOM,mBAAmB;A7C+kKzB;;A6CtlKA;EAaM,sBAAsB;A7C6kK5B;;A8C1tKE;EACE,c5B2F8D;E4B1F9D,yB5B0F8D;AlBmoKlE;;AKltKE;EyCPM,c5BsF0D;E4BrF1D,yBAAyC;A9C6tKjD;;A8CpuKE;EAWM,W3CPO;E2CQP,yB5BgF0D;E4B/E1D,qB5B+E0D;AlB8oKlE;;A8C1uKE;EACE,c5B2F8D;E4B1F9D,yB5B0F8D;AlBmpKlE;;AKluKE;EyCPM,c5BsF0D;E4BrF1D,yBAAyC;A9C6uKjD;;A8CpvKE;EAWM,W3CPO;E2CQP,yB5BgF0D;E4B/E1D,qB5B+E0D;AlB8pKlE;;A8C1vKE;EACE,c5B2F8D;E4B1F9D,yB5B0F8D;AlBmqKlE;;AKlvKE;EyCPM,c5BsF0D;E4BrF1D,yBAAyC;A9C6vKjD;;A8CpwKE;EAWM,W3CPO;E2CQP,yB5BgF0D;E4B/E1D,qB5B+E0D;AlB8qKlE;;A8C1wKE;EACE,c5B2F8D;E4B1F9D,yB5B0F8D;AlBmrKlE;;AKlwKE;EyCPM,c5BsF0D;E4BrF1D,yBAAyC;A9C6wKjD;;A8CpxKE;EAWM,W3CPO;E2CQP,yB5BgF0D;E4B/E1D,qB5B+E0D;AlB8rKlE;;A8C1xKE;EACE,c5B2F8D;E4B1F9D,yB5B0F8D;AlBmsKlE;;AKlxKE;EyCPM,c5BsF0D;E4BrF1D,yBAAyC;A9C6xKjD;;A8CpyKE;EAWM,W3CPO;E2CQP,yB5BgF0D;E4B/E1D,qB5B+E0D;AlB8sKlE;;A8C1yKE;EACE,c5B2F8D;E4B1F9D,yB5B0F8D;AlBmtKlE;;AKlyKE;EyCPM,c5BsF0D;E4BrF1D,yBAAyC;A9C6yKjD;;A8CpzKE;EAWM,W3CPO;E2CQP,yB5BgF0D;E4B/E1D,qB5B+E0D;AlB8tKlE;;A8C1zKE;EACE,c5B2F8D;E4B1F9D,yB5B0F8D;AlBmuKlE;;AKlzKE;EyCPM,c5BsF0D;E4BrF1D,yBAAyC;A9C6zKjD;;A8Cp0KE;EAWM,W3CPO;E2CQP,yB5BgF0D;E4B/E1D,qB5B+E0D;AlB8uKlE;;A8C10KE;EACE,c5B2F8D;E4B1F9D,yB5B0F8D;AlBmvKlE;;AKl0KE;EyCPM,c5BsF0D;E4BrF1D,yBAAyC;A9C60KjD;;A8Cp1KE;EAWM,W3CPO;E2CQP,yB5BgF0D;E4B/E1D,qB5B+E0D;AlB8vKlE;;A+C71KA;EACE,YAAY;E3C8HR,iBAtCY;E2CtFhB,gB5CiS+B;E4ChS/B,cAAc;EACd,W5CYa;E4CXb,yB5CCa;E4CAb,WAAW;A/Cg2Kb;;AK31KE;E0CDE,W5CMW;E4CLX,qBAAqB;A/Cg2KzB;;AK51KE;E0CCI,YAAY;A/C+1KlB;;A+Cp1KA;EACE,UAAU;EACV,6BAA6B;EAC7B,SAAS;EACT,wBAAgB;EAAhB,qBAAgB;EAAhB,gBAAgB;A/Cu1KlB;;A+Cj1KA;EACE,oBAAoB;A/Co1KtB;;AgD33KA;EACE,gB7Cy4BuC;E6Cx4BvC,gBAAgB;E5C6HZ,mBAtCY;E4CpFhB,2C7CEa;E6CDb,4BAA4B;EAC5B,oC7C04BmD;E6Cz4BnD,gD7CSa;E6CRb,mCAA2B;EAA3B,2BAA2B;EAC3B,UAAU;EtCLR,sB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Na;EiDOb,4BAA4B;EAC5B,oCjDEa;EOZX,qBP8O+B;AH+gLnC;;AoDlwLA;EAoBI,kBAAkB;EAClB,cAAc;EACd,WjD22BoC;EiD12BpC,cjD22BqC;EiD12BrC,gBjD2N+B;AHuhLnC;;AoD1wLA;EA4BM,kBAAkB;EAClB,cAAc;EACd,WAAW;EACX,yBAAyB;EACzB,mBAAmB;ApDkvLzB;;AoD7uLA;EACE,qBjD41BuC;AHo5JzC;;AoDjvLA;EAII,2BlC2F4D;AlBspLhE;;AoDrvLA;EAOM,SAAS;EACT,6BAAgE;EAChE,qCjDu1BiE;AH25JvE;;AoD3vLA;EAaM,WjD6L2B;EiD5L3B,6BAAgE;EAChE,sBjD7CS;AH+xLf;;AoD7uLA;EACE,mBjDw0BuC;AHw6JzC;;AoDjvLA;EAII,yBlCuE4D;EkCtE5D,ajDo0BqC;EiDn0BrC,YjDk0BoC;EiDj0BpC,gBAAgC;ApDivLpC;;AoDxvLA;EAUM,OAAO;EACP,oCAA2F;EAC3F,uCjDg0BiE;AHk7JvE;;AoD9vLA;EAgBM,SjDsK2B;EiDrK3B,oCAA2F;EAC3F,wBjDpES;AHszLf;;AoD7uLA;EACE,kBjDizBuC;AH+7JzC;;AoDjvLA;EAII,wBlCgD4D;AlBisLhE;;AoDrvLA;EAOM,MAAM;EACN,oCAA2F;EAC3F,wCjD4yBiE;AHs8JvE;;AoD3vLA;EAaM,QjDkJ2B;EiDjJ3B,oCAA2F;EAC3F,yBjDxFS;AH00Lf;;AoDjwLA;EAqBI,kBAAkB;EAClB,MAAM;EACN,SAAS;EACT,cAAc;EACd,WjDwxBoC;EiDvxBpC,oBAAsC;EACtC,WAAW;EACX,gCjD4wBuD;AHo+J3D;;AoD5uLA;EACE,oBjDixBuC;AH89JzC;;AoDhvLA;EAII,0BlCgB4D;EkCf5D,ajD6wBqC;EiD5wBrC,YjD2wBoC;EiD1wBpC,gBAAgC;ApDgvLpC;;AoDvvLA;EAUM,QAAQ;EACR,oCjDuwBmC;EiDtwBnC,sCjDywBiE;AHw+JvE;;AoD7vLA;EAgBM,UjD+G2B;EiD9G3B,oCjDiwBmC;EiDhwBnC,uBjD3HS;AH42Lf;;AoD3tLA;EACE,uBjDkuBwC;EiDjuBxC,gBAAgB;Eh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ACE,WpD4hC4B;EoD3hC5B,YpD2hC4B;AHkiK9B;;AwDhnMA;EAAqB,mCAAmC;AxDonMxD;;AwDnnMA;EAAqB,8BAA8B;AxDunMnD;;AwDtnMA;EAAqB,iCAAiC;AxD0nMtD;;AwDznMA;EAAqB,iCAAiC;AxD6nMtD;;AwD5nMA;EAAqB,sCAAsC;AxDgoM3D;;AwD/nMA;EAAqB,mCAAmC;AxDmoMxD;;AyDroME;EACE,oCAAmC;AzDwoMvC;;AK9nME;;;EoDLI,oCAAgD;AzDyoMtD;;AyD/oME;EACE,oCAAmC;AzDkpMvC;;AKxoME;;;EoDLI,oCAAgD;AzDmpMtD;;AyDzpME;EACE,oCAAmC;AzD4pMvC;;AKlpME;;;EoDLI,oCAAgD;AzD6pMtD;;AyDnqME;EACE,oCAAmC;AzDsqMvC;;AK5pME;;;EoDLI,oCAAgD;AzDuqMtD;;AyD7qME;EACE,oCAAmC;AzDgrMvC;;AKtqME;;;EoDLI,oCAAgD;AzDirMtD;;AyDvrME;EACE,oCAAmC;AzD0rMvC;;AKhrME;;;EoDLI,oCAAgD;AzD2rMtD;;AyDjsME;EACE,oCAAmC;AzDosMvC;;AK1rME;;;EoDLI,oCAAgD;AzDqsMtD;;AyD3sME;EACE,oCAAmC;AzD8sMvC;;AKpsME;;;EoDLI,oCAAgD;AzD+sMtD;;A0D9sMA;EACE,iCAAmC;A1DitMrC;;A0D9sMA;EACE,wCAAwC;A1DitM1C;;A2D5tMA;EAAkB,oCAAoD;A3DguMtE;;A2D/tMA;EAAkB,wCAAwD;A3DmuM1E;;A2DluMA;EAAkB,0CAA0D;A3DsuM5E;;A2DruMA;EAAkB,2CAA2D;A3DyuM7E;;A2DxuMA;EAAkB,yCAAyD;A3D4uM3E;;A2D1uMA;EAAmB,oBAAoB;A3D8uMvC;;A2D7uMA;EAAmB,wBAAwB;A3DivM3C;;A2DhvMA;EAAmB,0BAA0B;A3DovM7C;;A2DnvMA;EAAmB,2BAA2B;A3DuvM9C;;A2DtvMA;EAAmB,yBAAyB;A3D0vM5C;;A2DvvME;EACE,gCAA+B;A3D0vMnC;;A2D3vME;EACE,gCAA+B;A3D8vMnC;;A2D/vME;EACE,gCAA+B;A3DkwMnC;;A2DnwME;EACE,gCAA+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zpNI;EAAgC,8BAA8B;A9D6pNlE;;AcjpNI;EgDlDA;IAAgC,8BAA8B;E9DwsNhE;E8DvsNE;IAAgC,iCAAiC;E9D0sNnE;E8DzsNE;IAAgC,sCAAsC;E9D4sNxE;E8D3sNE;IAAgC,yCAAyC;E9D8sN3E;E8D5sNE;IAA8B,0BAA0B;E9D+sN1D;E8D9sNE;IAA8B,4BAA4B;E9DitN5D;E8DhtNE;IAA8B,kCAAkC;E9DmtNlE;E8DltNE;IAA8B,yBAAyB;E9DqtNzD;E8DptNE;IAA8B,uBAAuB;E9DutNvD;E8DttNE;IAA8B,uBAAuB;E9DytNvD;E8DxtNE;IAA8B,yBAAyB;E9D2tNzD;E8D1tNE;IAA8B,yBAAyB;E9D6tNzD;E8D3tNE;IAAoC,sCAAsC;E9D8tN5E;E8D7tNE;IAAoC,oCAAoC;E9DguN1E;E8D/tNE;IAAoC,kCAAkC;E9DkuNxE;E8DjuNE;IAAoC,yCAAyC;E9DouN/E;E8DnuNE;IAAoC,wCAAwC;E9DsuN9E;E8DpuNE;IAAiC,kCAAkC;E9DuuNrE;E8DtuNE;IAAiC,gCAAgC;E9DyuNnE;E8DxuNE;IAAiC,8BAA8B;E9D2uNjE;E8D1uNE;IAAiC,gCAAgC;E9D6uNnE;E8D5uNE;IAAiC,+BAA+B;E9D+uNlE;E8D7uNE;IAAkC,oCAAoC;E9DgvNxE;E8D/uNE;IAAkC,kCAAkC;E9DkvNtE;E8DjvNE;IAAkC,gCAAgC;E9DovNpE;E8DnvNE;IAAkC,uCAAuC;E9DsvN3E;E8DrvNE;IAAkC,sCAAsC;E9DwvN1E;E8DvvNE;IAAkC,iCAAiC;E9D0vNrE;E8DxvNE;IAAgC,2BAA2B;E9D2vN7D;E8D1vNE;IAAgC,iCAAiC;E9D6vNnE;E8D5vNE;IAAgC,+BAA+B;E9D+vNjE;E8D9vNE;IAAgC,6BAA6B;E9DiwN/D;E8DhwNE;IAAgC,+BAA+B;E9DmwNjE;E8DlwNE;IAAgC,8BAA8B;E9DqwNhE;AACF;;Ac1vNI;EgDlDA;IAAgC,8BAA8B;E9DizNhE;E8DhzNE;IAAgC,iCAAiC;E9DmzNnE;E8DlzNE;IAAgC,sCAAsC;E9DqzNxE;E8DpzNE;IAAgC,yCAAyC;E9DuzN3E;E8DrzNE;IAA8B,0BAA0B;E9DwzN1D;E8DvzNE;IAA8B,4BAA4B;E9D0zN5D;E8DzzNE;IAA8B,kCAAkC;E9D4zNlE;E8D3zNE;IAA8B,yBAAyB;E9D8zNzD;E8D7zNE;IAA8B,uBAAuB;E9Dg0NvD;E8D/zNE;IAA8B,uBAAuB;E9Dk0NvD;E8Dj0NE;IAA8B,yBAAyB;E9Do0NzD;E8Dn0NE;IAA8B,yBAAyB;E9Ds0NzD;E8Dp0NE;IAAoC,sCAAsC;E9Du0N5E;E8Dt0NE;IAAoC,oCAAoC;E9Dy0N1E;E8Dx0NE;IAAoC,kCAAkC;E9D20NxE;E8D10NE;IAAoC,yCAAyC;E9D60N/E;E8D50NE;IAAoC,wCAAwC;E9D+0N9E;E8D70NE;IAAiC,kCAAkC;E9Dg1NrE;E8D/0NE;IAAiC,gCAAgC;E9Dk1NnE;E8Dj1NE;IAAiC,8BAA8B;E9Do1NjE;E8Dn1NE;IAAiC,gCAAgC;E9Ds1NnE;E8Dr1NE;IAAiC,+BAA+B;E9Dw1NlE;E8Dt1NE;IAAkC,oCAAoC;E9Dy1NxE;E8Dx1NE;IAAkC,kCAAkC;E9D21NtE;E8D11NE;IAAkC,gCAAgC;E9D61NpE;E8D51NE;IAAkC,uCAAuC;E9D+1N3E;E8D91NE;IAAkC,sCAAsC;E9Di2N1E;E8Dh2NE;IAAkC,iCAAiC;E9Dm2NrE;E8Dj2NE;IAAgC,2BAA2B;E9Do2N7D;E8Dn2NE;IAAgC,iCAAiC;E9Ds2NnE;E8Dr2NE;IAAgC,+BAA+B;E9Dw2NjE;E8Dv2NE;IAAgC,6BAA6B;E9D02N/D;E8Dz2NE;IAAgC,+BAA+B;E9D42NjE;E8D32NE;IAAgC,8BAA8B;E9D82NhE;AACF;;Acn2NI;EgDlDA;IAAgC,8BAA8B;E9D05NhE;E8Dz5NE;IAAgC,iCAAiC;E9D45NnE;E8D35NE;IAAgC,sCAAsC;E9D85NxE;E8D75NE;IAAgC,yCAAyC;E9Dg6N3E;E8D95NE;IAA8B,0BAA0B;E9Di6N1D;E8Dh6NE;IAA8B,4BAA4B;E9Dm6N5D;E8Dl6NE;IAA8B,kCAAkC;E9Dq6NlE;E8Dp6NE;IAA8B,yBAAyB;E9Du6NzD;E8Dt6NE;IAA8B,uBAAuB;E9Dy6NvD;E8Dx6NE;IAA8B,uBAAuB;E9D26NvD;E8D16NE;IAA8B,yBAAyB;E9D66NzD;E8D56NE;IAA8B,yBAAyB;E9D+6NzD;E8D76NE;IAAoC,sCAAsC;E9Dg7N5E;E8D/6NE;IAAoC,oCAAoC;E9Dk7N1E;E8Dj7NE;IAAoC,kCAAkC;E9Do7NxE;E8Dn7NE;IAAoC,yCAAyC;E9Ds7N/E;E8Dr7NE;IAAoC,wCAAwC;E9Dw7N9E;E8Dt7NE;IAAiC,kCAAkC;E9Dy7NrE;E8Dx7NE;IAAiC,gCAAgC;E9D27NnE;E8D17NE;IAAiC,8BAA8B;E9D67NjE;E8D57NE;IAAiC,gCAAgC;E9D+7NnE;E8D97NE;IAAiC,+BAA+B;E9Di8NlE;E8D/7NE;IAAkC,oCAAoC;E9Dk8NxE;E8Dj8NE;IAAkC,kCAAkC;E9Do8NtE;E8Dn8NE;IAAkC,gCAAgC;E9Ds8NpE;E8Dr8NE;IAAkC,uCAAuC;E9Dw8N3E;E8Dv8NE;IAAkC,sCAAsC;E9D08N1E;E8Dz8NE;IAAkC,iCAAiC;E9D48NrE;E8D18NE;IAAgC,2BAA2B;E9D68N7D;E8D58NE;IAAgC,iCAAiC;E9D+8NnE;E8D98NE;IAAgC,+BAA+B;E9Di9NjE;E8Dh9NE;IAAgC,6BAA6B;E9Dm9N/D;E8Dl9NE;IAAgC,+BAA+B;E9Dq9NjE;E8Dp9NE;IAAgC,8BAA8B;E9Du9NhE;AACF;;Ac58NI;EgDlDA;IAAgC,8BAA8B;E9DmgOhE;E8DlgOE;IAAgC,iCAAiC;E9DqgOnE;E8DpgOE;IAAgC,sCAAsC;E9DugOxE;E8DtgOE;IAAgC,yCAAyC;E9DygO3E;E8DvgOE;IAA8B,0BAA0B;E9D0gO1D;E8DzgOE;IAA8B,4BAA4B;E9D4gO5D;E8D3gOE;IAA8B,kCAAkC;E9D8gOlE;E8D7gOE;IAA8B,yBAAyB;E9DghOzD;E8D/gOE;IAA8B,uBAAuB;E9DkhOvD;E8DjhOE;IAA8B,uBAAuB;E9DohOvD;E8DnhOE;IAA8B,yBAAyB;E9DshOzD;E8DrhOE;IAA8B,yBAAyB;E9DwhOzD;E8DthOE;IAAoC,sCAAsC;E9DyhO5E;E8DxhOE;IAAoC,oCAAoC;E9D2hO1E;E8D1hOE;IAAoC,kCAAkC;E9D6hOxE;E8D5hOE;IAAoC,yCAAyC;E9D+hO/E;E8D9hOE;IAAoC,wCAAwC;E9DiiO9E;E8D/hOE;IAAiC,kCAAkC;E9DkiOrE;E8DjiOE;IAAiC,gCAAgC;E9DoiOnE;E8DniOE;IAAiC,8BAA8B;E9DsiOjE;E8DriOE;IAAiC,gCAAgC;E9DwiOnE;E8DviOE;IAAiC,+BAA+B;E9D0iOlE;E8DxiOE;IAAkC,oCAAoC;E9D2iOxE;E8D1iOE;IAAkC,kCAAkC;E9D6iOtE;E8D5iOE;IAAkC,gCAAgC;E9D+iOpE;E8D9iOE;IAAkC,uCAAuC;E9DijO3E;E8DhjOE;IAAkC,sCAAsC;E9DmjO1E;E8DljOE;IAAkC,iCAAiC;E9DqjOrE;E8DnjOE;IAAgC,2BAA2B;E9DsjO7D;E8DrjOE;IAAgC,iCAAiC;E9DwjOnE;E8DvjOE;IAAgC,+BAA+B;E9D0jOjE;E8DzjOE;IAAgC,6BAA6B;E9D4jO/D;E8D3jOE;IAAgC,+BAA+B;E9D8jOjE;E8D7jOE;IAAgC,8BAA8B;E9DgkOhE;AACF;;A+D3mOI;EAAwB,sBAAsB;A/D+mOlD;;A+D9mOI;EAAwB,uBAAuB;A/DknOnD;;A+DjnOI;EAAwB,sBAAsB;A/DqnOlD;;AcjkOI;EiDtDA;IAAwB,sBAAsB;E/D4nOhD;E+D3nOE;IAAwB,uBAAuB;E/D8nOjD;E+D7nOE;IAAwB,sBAAsB;E/DgoOhD;AACF;;Ac7kOI;EiDtDA;IAAwB,sBAAsB;E/DwoOhD;E+DvoOE;IAAwB,uBAAuB;E/D0oOjD;E+DzoOE;IAAwB,sBAAsB;E/D4oOhD;AACF;;AczlOI;EiDtDA;IAAwB,sBAAsB;E/DopOhD;E+DnpOE;IAAwB,uBAAuB;E/DspOjD;E+DrpOE;IAAwB,sBAAsB;E/DwpOhD;AACF;;AcrmOI;EiDtDA;IAAwB,sBAAsB;E/DgqOhD;E+D/pOE;IAAwB,uBAAuB;E/DkqOjD;E+DjqOE;IAAwB,sBAAsB;E/DoqOhD;AACF;;AgE1qOE;EAAsB,yBAA2B;AhE8qOnD;;AgE9qOE;EAAsB,2BAA2B;AhEkrOnD;;AiEjrOE;EAAyB,2BAA8B;AjEqrOzD;;AiErrOE;EAAyB,6BAA8B;AjEyrOzD;;AiEzrOE;EAAyB,6BAA8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iCAAwC;AvEu/OlD;;AuEr/OQ;;EAEE,kCAA0C;AvEw/OpD;;AuEt/OQ;;EAEE,gCAAsC;AvEy/OhD;;AuExgPQ;EAAgC,0BAA4B;AvE4gPpE;;AuE3gPQ;;EAEE,8BAAoC;AvE8gP9C;;AuE5gPQ;;EAEE,gCAAwC;AvE+gPlD;;AuE7gPQ;;EAEE,iCAA0C;AvEghPpD;;AuE9gPQ;;EAEE,+BAAsC;AvEihPhD;;AuEhiPQ;EAAgC,wBAA4B;AvEoiPpE;;AuEniPQ;;EAEE,4BAAoC;AvEsiP9C;;AuEpiPQ;;EAEE,8BAAwC;AvEuiPlD;;AuEriPQ;;EAEE,+BAA0C;AvEwiPpD;;AuEtiPQ;;EAEE,6BAAsC;AvEyiPhD;;AuExjPQ;EAAgC,0BAA4B;AvE4jPpE;;AuE3jPQ;;EAEE,8BAAoC;AvE8jP9C;;AuE5jPQ;;EAEE,gCAAwC;AvE+jPlD;;AuE7jPQ;;EAEE,iCAA0C;AvEgkPpD;;AuE9jPQ;;EAEE,+BAAsC;AvEikPhD;;AuEhlPQ;EAAgC,wBAA4B;AvEolPpE;;AuEnlPQ;;EAEE,4BAAoC;AvEslP9C;;AuEplPQ;;EAEE,8BAAwC;AvEulPlD;;AuErlPQ;;EAEE,+BAA0C;AvEwlPpD;;AuEtlPQ;;EAEE,6BAAsC;AvEylPhD;;AuEjlPQ;EAAwB,2BAA2B;AvEqlP3D;;AuEplPQ;;EAEE,+BAA+B;AvEulPzC;;AuErlPQ;;EAEE,iCAAiC;AvEwlP3C;;AuEtlPQ;;EAEE,kCAAkC;AvEylP5C;;AuEvlPQ;;EAEE,gCAAgC;AvE0lP1C;;AuEzmPQ;EAAwB,0BAA2B;AvE6mP3D;;AuE5mPQ;;EAEE,8BAA+B;AvE+mPzC;;AuE7mPQ;;EAEE,gCAAiC;AvEgnP3C;;AuE9mPQ;;EAEE,iCAAkC;AvEinP5C;;AuE/mPQ;;EAEE,+BAAgC;AvEknP1C;;AuEjoPQ;EAAwB,wBAA2B;AvEqoP3D;;AuEpoPQ;;EAEE,4BAA+B;AvEuoPzC;;AuEroPQ;;EAEE,8BAAiC;AvEwoP3C;;AuEtoPQ;;EAEE,+BAAkC;AvEyoP5C;;AuEvoPQ;;EAEE,6BAAgC;AvE0oP1C;;AuEzpPQ;EAAwB,0BAA2B;AvE6pP3D;;AuE5pPQ;;EAEE,8BAA+B;AvE+pPzC;;AuE7pPQ;;EAEE,gCAAiC;AvEgqP3C;;AuE9pPQ;;EAEE,iCAAkC;AvEiqP5C;;AuE/pPQ;;EAEE,+BAAgC;AvEkqP1C;;AuEjrPQ;EAAwB,wBAA2B;AvEqrP3D;;AuEprPQ;;EAEE,4BAA+B;AvEurPzC;;AuErrPQ;;EAEE,8BAAiC;AvEwrP3C;;AuEtrPQ;;EAEE,+BAAkC;AvEyrP5C;;AuEvrPQ;;EAEE,6BAAgC;AvE0rP1C;;AuEprPI;EAAmB,uBAAuB;AvEwrP9C;;AuEvrPI;;EAEE,2BAA2B;AvE0rPjC;;AuExrPI;;EAEE,6BAA6B;AvE2rPnC;;AuEzrPI;;EAEE,8BAA8B;AvE4rPpC;;AuE1rPI;;EAEE,4BAA4B;AvE6rPlC;;ActsPI;EyDlDI;IAAgC,oBAA4B;EvE6vPlE;EuE5vPM;;IAEE,wBAAoC;EvE8vP5C;EuE5vPM;;IAEE,0BAAwC;EvE8vPhD;EuE5vPM;;IAEE,2BAA0C;EvE8vPlD;EuE5vPM;;IAEE,yBAAsC;EvE8vP9C;EuE7wPM;IAAgC,0BAA4B;EvEgxPlE;EuE/wPM;;IAEE,8BAAoC;EvEixP5C;EuE/wPM;;IAEE,gCAAwC;EvEixPhD;EuE/wPM;;IAEE,iCAA0C;EvEixPlD;EuE/wPM;;IAEE,+BAAsC;EvEixP9C;EuEhyPM;IAAgC,yBAA4B;EvEmyPlE;EuElyPM;;IAEE,6BAAoC;EvEoyP5C;EuElyPM;;IAEE,+BAAwC;EvEoyPhD;EuElyPM;;IAEE,gCAA0C;EvEoyPlD;EuElyPM;;IAEE,8BAAsC;EvEoyP9C;EuEnzPM;IAAgC,uBAA4B;EvEszPlE;EuErzPM;;IAEE,2BAAoC;EvEuzP5C;EuErzPM;;IAEE,6BAAwC;EvEuzPhD;EuErzPM;;IAEE,8BAA0C;EvEuzPlD;EuErzPM;;IAEE,4BAAsC;EvEuzP9C;EuEt0PM;IAAgC,yBAA4B;EvEy0PlE;EuEx0PM;;IAEE,6BAAoC;EvE00P5C;EuEx0PM;;IAEE,+BAAwC;EvE00PhD;EuEx0PM;;IAEE,gCAA0C;EvE00PlD;EuEx0PM;;IAEE,8BAAsC;EvE00P9C;EuEz1PM;IAAgC,uBAA4B;EvE41PlE;EuE31PM;;IAEE,2BAAoC;EvE61P5C;EuE31PM;;IAEE,6BAAwC;EvE61PhD;EuE31PM;;IAEE,8BAA0C;EvE61PlD;EuE31PM;;IAEE,4BAAsC;EvE61P9C;EuE52PM;IAAgC,qBAA4B;EvE+2PlE;EuE92PM;;IAEE,yBAAoC;EvEg3P5C;EuE92PM;;IAEE,2BAAwC;EvEg3PhD;EuE92PM;;IAEE,4BAA0C;EvEg3PlD;EuE92PM;;IAEE,0BAAsC;EvEg3P9C;EuE/3PM;IAAgC,2BAA4B;EvEk4PlE;EuEj4PM;;IAEE,+BAAoC;EvEm4P5C;EuEj4PM;;IAEE,iCAAwC;EvEm4PhD;EuEj4PM;;IAEE,kCAA0C;EvEm4PlD;EuEj4PM;;IAEE,gCAAsC;EvEm4P9C;EuEl5PM;IAAgC,0BAA4B;EvEq5PlE;EuEp5PM;;IAEE,8BAAoC;EvEs5P5C;EuEp5PM;;IAEE,gCAAwC;EvEs5PhD;EuEp5PM;;IAEE,iCAA0C;EvEs5PlD;EuEp5PM;;IAEE,+BAAsC;EvEs5P9C;EuEr6PM;IAAgC,wBAA4B;EvEw6PlE;EuEv6PM;;IAEE,4BAAoC;EvEy6P5C;EuEv6PM;;IAEE,8BAAwC;EvEy6PhD;EuEv6PM;;IAEE,+BAA0C;EvEy6PlD;EuEv6PM;;IAEE,6BAAsC;EvEy6P9C;EuEx7PM;IAAgC,0BAA4B;EvE27PlE;EuE17PM;;IAEE,8BAAoC;EvE47P5C;EuE17PM;;IAEE,gCAAwC;EvE47PhD;EuE17PM;;IAEE,iCAA0C;EvE47PlD;EuE17PM;;IAEE,+BAAsC;EvE47P9C;EuE38PM;IAAgC,wBAA4B;EvE88PlE;EuE78PM;;IAEE,4BAAoC;EvE+8P5C;EuE78PM;;IAEE,8BAAwC;EvE+8PhD;EuE78PM;;IAEE,+BAA0C;EvE+8PlD;EuE78PM;;IAEE,6BAAsC;EvE+8P9C;EuEv8PM;IAAwB,2BAA2B;EvE08PzD;EuEz8PM;;IAEE,+BAA+B;EvE28PvC;EuEz8PM;;IAEE,iCAAiC;EvE28PzC;EuEz8PM;;IAEE,kCAAkC;EvE28P1C;EuEz8PM;;IAEE,gCAAgC;EvE28PxC;EuE19PM;IAAwB,0BAA2B;EvE69PzD;EuE59PM;;IAEE,8BAA+B;EvE89PvC;EuE59PM;;IAEE,gCAAiC;EvE89PzC;EuE59PM;;IAEE,iCAAkC;EvE89P1C;EuE59PM;;IAEE,+BAAgC;EvE89PxC;EuE7+PM;IAAwB,wBAA2B;EvEg/PzD;EuE/+PM;;IAEE,4BAA+B;EvEi/PvC;EuE/+PM;;IAEE,8BAAiC;EvEi/PzC;EuE/+PM;;IAEE,+BAAkC;EvEi/P1C;EuE/+PM;;IAEE,6BAAgC;EvEi/PxC;EuEhgQM;IAAwB,0BAA2B;EvEmgQzD;EuElgQM;;IAEE,8BAA+B;EvEogQvC;EuElgQM;;IAEE,gCAAiC;EvEogQzC;EuElgQM;;IAEE,iCAAkC;EvEogQ1C;EuElgQM;;IAEE,+BAAgC;EvEogQxC;EuEnhQM;IAAwB,wBAA2B;EvEshQzD;EuErhQM;;IAEE,4BAA+B;EvEuhQvC;EuErhQM;;IAEE,8BAAiC;EvEuhQzC;EuErhQM;;IAEE,+BAAkC;EvEuhQ1C;EuErhQM;;IAEE,6BAAgC;EvEuhQxC;EuEjhQE;IAAmB,uBAAuB;EvEohQ5C;EuEnhQE;;IAEE,2BAA2B;EvEqhQ/B;EuEnhQE;;IAEE,6BAA6B;EvEqhQjC;EuEnhQE;;IAEE,8BAA8B;EvEqhQlC;EuEnhQE;;IAEE,4BAA4B;EvEqhQhC;AACF;;Ac/hQI;EyDlDI;IAAgC,oBAA4B;EvEslQlE;EuErlQM;;IAEE,wBAAoC;EvEulQ5C;EuErlQM;;IAEE,0BAAwC;EvEulQhD;EuErlQM;;IAEE,2BAA0C;EvEulQlD;EuErlQM;;IAEE,yBAAsC;EvEulQ9C;EuEtmQM;IAAgC,0BAA4B;EvEymQlE;EuExmQM;;IAEE,8BAAoC;EvE0mQ5C;EuExmQM;;IAEE,gCAAwC;EvE0mQhD;EuExmQM;;IAEE,iCAA0C;EvE0mQlD;EuExmQM;;IAEE,+BAAsC;EvE0mQ9C;EuEznQM;IAAgC,yBAA4B;EvE4nQlE;EuE3nQM;;IAEE,6BAAoC;EvE6nQ5C;EuE3nQM;;IAEE,+BAAwC;EvE6nQhD;EuE3nQM;;IAEE,gCAA0C;EvE6nQlD;EuE3nQM;;IAEE,8BAAsC;EvE6nQ9C;EuE5oQM;IAAgC,uBAA4B;EvE+oQlE;EuE9oQM;;IAEE,2BAAoC;EvEgpQ5C;EuE9oQM;;IAEE,6BAAwC;EvEgpQhD;EuE9oQM;;IAEE,8BAA0C;EvEgpQlD;EuE9oQM;;IAEE,4BAAsC;EvEgpQ9C;EuE/pQM;IAAgC,yBAA4B;EvEkqQlE;EuEjqQM;;IAEE,6BAAoC;EvEmqQ5C;EuEjqQM;;IAEE,+BAAwC;EvEmqQhD;EuEjqQM;;IAEE,gCAA0C;EvEmqQlD;EuEjqQM;;IAEE,8BAAsC;EvEmqQ9C;EuElrQM;IAAgC,uBAA4B;EvEqrQlE;EuEprQM;;IAEE,2BAAoC;EvEsrQ5C;EuEprQM;;IAEE,6BAAwC;EvEsrQhD;EuEprQM;;IAEE,8BAA0C;EvEsrQlD;EuEprQM;;IAEE,4BAAsC;EvEsrQ9C;EuErsQM;IAAgC,qBAA4B;EvEwsQlE;EuEvsQM;;IAEE,yBAAoC;EvEysQ5C;EuEvsQM;;IAEE,2BAAwC;EvEysQhD;EuEvsQM;;IAEE,4BAA0C;EvEysQlD;EuEvsQM;;IAEE,0BAAsC;EvEysQ9C;EuExtQM;IAAgC,2BAA4B;EvE2tQlE;EuE1tQM;;IAEE,+BAAoC;EvE4tQ5C;EuE1tQM;;IAEE,iCAAwC;EvE4tQhD;EuE1tQM;;IAEE,kCAA0C;EvE4tQlD;EuE1tQM;;IAEE,gCAAsC;EvE4tQ9C;EuE3uQM;IAAgC,0BAA4B;EvE8uQlE;EuE7uQM;;IAEE,8BAAoC;EvE+uQ5C;EuE7uQM;;IAEE,gCAAwC;EvE+uQhD;EuE7uQM;;IAEE,iCAA0C;EvE+uQlD;EuE7uQM;;IAEE,+BAAsC;EvE+uQ9C;EuE9vQM;IAAgC,wBAA4B;EvEiwQlE;EuEhwQM;;IAEE,4BAAoC;EvEkwQ5C;EuEhwQM;;IAEE,8BAAwC;EvEkwQhD;EuEhwQM;;IAEE,+BAA0C;EvEkwQlD;EuEhwQM;;IAEE,6BAAsC;EvEkwQ9C;EuEjxQM;IAAgC,0BAA4B;EvEoxQlE;EuEnxQM;;IAEE,8BAAoC;EvEqxQ5C;EuEnxQM;;IAEE,gCAAwC;EvEqxQhD;EuEnxQM;;IAEE,iCAA0C;EvEqxQlD;EuEnxQM;;IAEE,+BAAsC;EvEqxQ9C;EuEpyQM;IAAgC,wBAA4B;EvEuyQlE;EuEtyQM;;IAEE,4BAAoC;EvEwyQ5C;EuEtyQM;;IAEE,8BAAwC;EvEwyQhD;EuEtyQM;;IAEE,+BAA0C;EvEwyQlD;EuEtyQM;;IAEE,6BAAsC;EvEwyQ9C;EuEhyQM;IAAwB,2BAA2B;EvEmyQzD;EuElyQM;;IAEE,+BAA+B;EvEoyQvC;EuElyQM;;IAEE,iCAAiC;EvEoyQzC;EuElyQM;;IAEE,kCAAkC;EvEoyQ1C;EuElyQM;;IAEE,gCAAgC;EvEoyQxC;EuEnzQM;IAAwB,0BAA2B;EvEszQzD;EuErzQM;;IAEE,8BAA+B;EvEuzQvC;EuErzQM;;IAEE,gCAAiC;EvEuzQzC;EuErzQM;;IAEE,iCAAkC;EvEuzQ1C;EuErzQM;;IAEE,+BAAgC;EvEuzQxC;EuEt0QM;IAAwB,wBAA2B;EvEy0QzD;EuEx0QM;;IAEE,4BAA+B;EvE00QvC;EuEx0QM;;IAEE,8BAAiC;EvE00QzC;EuEx0QM;;IAEE,+BAAkC;EvE00Q1C;EuEx0QM;;IAEE,6BAAgC;EvE00QxC;EuEz1QM;IAAwB,0BAA2B;EvE41QzD;EuE31QM;;IAEE,8BAA+B;EvE61QvC;EuE31QM;;IAEE,gCAAiC;EvE61QzC;EuE31QM;;IAEE,iCAAkC;EvE61Q1C;EuE31QM;;IAEE,+BAAgC;EvE61QxC;EuE52QM;IAAwB,wBAA2B;EvE+2QzD;EuE92QM;;IAEE,4BAA+B;EvEg3QvC;EuE92QM;;IAEE,8BAAiC;EvEg3QzC;EuE92QM;;IAEE,+BAAkC;EvEg3Q1C;EuE92QM;;IAEE,6BAAgC;EvEg3QxC;EuE12QE;IAAmB,uBAAuB;EvE62Q5C;EuE52QE;;IAEE,2BAA2B;EvE82Q/B;EuE52QE;;IAEE,6BAA6B;EvE82QjC;EuE52QE;;IAEE,8BAA8B;EvE82QlC;EuE52QE;;IAEE,4BAA4B;EvE82QhC;AACF;;Acx3QI;EyDlDI;IAAgC,oBAA4B;EvE+6QlE;EuE96QM;;IAEE,wBAAoC;EvEg7Q5C;EuE96QM;;IAEE,0BAAwC;EvEg7QhD;EuE96QM;;IAEE,2BAA0C;EvEg7QlD;EuE96QM;;IAEE,yBAAsC;EvEg7Q9C;EuE/7QM;IAAgC,0BAA4B;EvEk8QlE;EuEj8QM;;IAEE,8BAAoC;EvEm8Q5C;EuEj8QM;;IAEE,gCAAwC;EvEm8QhD;EuEj8QM;;IAEE,iCAA0C;EvEm8QlD;EuEj8QM;;IAEE,+BAAsC;EvEm8Q9C;EuEl9QM;IAAgC,yBAA4B;EvEq9QlE;EuEp9QM;;IAEE,6BAAoC;EvEs9Q5C;EuEp9QM;;IAEE,+BAAwC;EvEs9QhD;EuEp9QM;;IAEE,gCAA0C;EvEs9QlD;EuEp9QM;;IAEE,8BAAsC;EvEs9Q9C;EuEr+QM;IAAgC,uBAA4B;EvEw+QlE;EuEv+QM;;IAEE,2BAAoC;EvEy+Q5C;EuEv+QM;;IAEE,6BAAwC;EvEy+QhD;EuEv+QM;;IAEE,8BAA0C;EvEy+QlD;EuEv+QM;;IAEE,4BAAsC;EvEy+Q9C;EuEx/QM;IAAgC,yBAA4B;EvE2/QlE;EuE1/QM;;IAEE,6BAAoC;EvE4/Q5C;EuE1/QM;;IAEE,+BAAwC;EvE4/QhD;EuE1/QM;;IAEE,gCAA0C;EvE4/QlD;EuE1/QM;;IAEE,8BAAsC;EvE4/Q9C;EuE3gRM;IAAgC,uBAA4B;EvE8gRlE;EuE7gRM;;IAEE,2BAAoC;EvE+gR5C;EuE7gRM;;IAEE,6BAAwC;EvE+gRhD;EuE7gRM;;IAEE,8BAA0C;EvE+gRlD;EuE7gRM;;IAEE,4BAAsC;EvE+gR9C;EuE9hRM;IAAgC,qBAA4B;EvEiiRlE;EuEhiRM;;IAEE,yBAAoC;EvEkiR5C;EuEhiRM;;IAEE,2BAAwC;EvEkiRhD;EuEhiRM;;IAEE,4BAA0C;EvEkiRlD;EuEhiRM;;IAEE,0BAAsC;EvEkiR9C;EuEjjRM;IAAgC,2BAA4B;EvEojRlE;EuEnjRM;;IAEE,+BAAoC;EvEqjR5C;EuEnjRM;;IAEE,iCAAwC;EvEqjRhD;EuEnjRM;;IAEE,kCAA0C;EvEqjRlD;EuEnjRM;;IAEE,gCAAsC;EvEqjR9C;EuEpkRM;IAAgC,0BAA4B;EvEukRlE;EuEtkRM;;IAEE,8BAAoC;EvEwkR5C;EuEtkRM;;IAEE,gCAAwC;EvEwkRhD;EuEtkRM;;IAEE,iCAA0C;EvEwkRlD;EuEtkRM;;IAEE,+BAAsC;EvEwkR9C;EuEvlRM;IAAgC,wBAA4B;EvE0lRlE;EuEzlRM;;IAEE,4BAAoC;EvE2lR5C;EuEzlRM;;IAEE,8BAAwC;EvE2lRhD;EuEzlRM;;IAEE,+BAA0C;EvE2lRlD;EuEzlRM;;IAEE,6BAAsC;EvE2lR9C;EuE1mRM;IAAgC,0BAA4B;EvE6mRlE;EuE5mRM;;IAEE,8BAAoC;EvE8mR5C;EuE5mRM;;IAEE,gCAAwC;EvE8mRhD;EuE5mRM;;IAEE,iCAA0C;EvE8mRlD;EuE5mRM;;IAEE,+BAAsC;EvE8mR9C;EuE7nRM;IAAgC,wBAA4B;EvEgoRlE;EuE/nRM;;IAEE,4BAAoC;EvEioR5C;EuE/nRM;;IAEE,8BAAwC;EvEioRhD;EuE/nRM;;IAEE,+BAA0C;EvEioRlD;EuE/nRM;;IAEE,6BAAsC;EvEioR9C;EuEznRM;IAAwB,2BAA2B;EvE4nRzD;EuE3nRM;;IAEE,+BAA+B;EvE6nRvC;EuE3nRM;;IAEE,iCAAiC;EvE6nRzC;EuE3nRM;;IAEE,kCAAkC;EvE6nR1C;EuE3nRM;;IAEE,gCAAgC;EvE6nRxC;EuE5oRM;IAAwB,0BAA2B;EvE+oRzD;EuE9oRM;;IAEE,8BAA+B;EvEgpRvC;EuE9oRM;;IAEE,gCAAiC;EvEgpRzC;EuE9oRM;;IAEE,iCAAkC;EvEgpR1C;EuE9oRM;;IAEE,+BAAgC;EvEgpRxC;EuE/pRM;IAAwB,wBAA2B;EvEkqRzD;EuEjqRM;;IAEE,4BAA+B;EvEmqRvC;EuEjqRM;;IAEE,8BAAiC;EvEmqRzC;EuEjqRM;;IAEE,+BAAkC;EvEmqR1C;EuEjqRM;;IAEE,6BAAgC;EvEmqRxC;EuElrRM;IAAwB,0BAA2B;EvEqrRzD;EuEprRM;;IAEE,8BAA+B;EvEsrRvC;EuEprRM;;IAEE,gCAAiC;EvEsrRzC;EuEprRM;;IAEE,iCAAkC;EvEsrR1C;EuEprRM;;IAEE,+BAAgC;EvEsrRxC;EuErsRM;IAAwB,wBAA2B;EvEwsRzD;EuEvsRM;;IAEE,4BAA+B;EvEysRvC;EuEvsRM;;IAEE,8BAAiC;EvEysRzC;EuEvsRM;;IAEE,+BAAkC;EvEysR1C;EuEvsRM;;IAEE,6BAAgC;EvEysRxC;EuEnsRE;IAAmB,uBAAuB;EvEssR5C;EuErsRE;;IAEE,2BAA2B;EvEusR/B;EuErsRE;;IAEE,6BAA6B;EvEusRjC;EuErsRE;;IAEE,8BAA8B;EvEusRlC;EuErsRE;;IAEE,4BAA4B;EvEusRhC;AACF;;AcjtRI;EyDlDI;IAAgC,oBAA4B;EvEwwRlE;EuEvwRM;;IAEE,wBAAoC;EvEywR5C;EuEvwRM;;IAEE,0BAAwC;EvEywRhD;EuEvwRM;;IAEE,2BAA0C;EvEywRlD;EuEvwRM;;IAEE,yBAAsC;EvEywR9C;EuExxRM;IAAgC,0BAA4B;EvE2xRlE;EuE1xRM;;IAEE,8BAAoC;EvE4xR5C;EuE1xRM;;IAEE,gCAAwC;EvE4xRhD;EuE1xRM;;IAEE,iCAA0C;EvE4xRlD;EuE1xRM;;IAEE,+BAAsC;EvE4xR9C;EuE3yRM;IAAgC,yBAA4B;EvE8yRlE;EuE7yRM;;IAEE,6BAAoC;EvE+yR5C;EuE7yRM;;IAEE,+BAAwC;EvE+yRhD;EuE7yRM;;IAEE,gCAA0C;EvE+yRlD;EuE7yRM;;IAEE,8BAAsC;EvE+yR9C;EuE9zRM;IAAgC,uBAA4B;EvEi0RlE;EuEh0RM;;IAEE,2BAAoC;EvEk0R5C;EuEh0RM;;IAEE,6BAAwC;EvEk0RhD;EuEh0RM;;IAEE,8BAA0C;EvEk0RlD;EuEh0RM;;IAEE,4BAAsC;EvEk0R9C;EuEj1RM;IAAgC,yBAA4B;EvEo1RlE;EuEn1RM;;IAEE,6BAAoC;EvEq1R5C;EuEn1RM;;IAEE,+BAAwC;EvEq1RhD;EuEn1RM;;IAEE,gCAA0C;EvEq1RlD;EuEn1RM;;IAEE,8BAAsC;EvEq1R9C;EuEp2RM;IAAgC,uBAA4B;EvEu2RlE;EuEt2RM;;IAEE,2BAAoC;EvEw2R5C;EuEt2RM;;IAEE,6BAAwC;EvEw2RhD;EuEt2RM;;IAEE,8BAA0C;EvEw2RlD;EuEt2RM;;IAEE,4BAAsC;EvEw2R9C;EuEv3RM;IAAgC,qBAA4B;EvE03RlE;EuEz3RM;;IAEE,yBAAoC;EvE23R5C;EuEz3RM;;IAEE,2BAAwC;EvE23RhD;EuEz3RM;;IAEE,4BAA0C;EvE23RlD;EuEz3RM;;IAEE,0BAAsC;EvE23R9C;EuE14RM;IAAgC,2BAA4B;EvE64RlE;EuE54RM;;IAEE,+BAAoC;EvE84R5C;EuE54RM;;IAEE,iCAAwC;EvE84RhD;EuE54RM;;IAEE,kCAA0C;EvE84RlD;EuE54RM;;IAEE,gCAAsC;EvE84R9C;EuE75RM;IAAgC,0BAA4B;EvEg6RlE;EuE/5RM;;IAEE,8BAAoC;EvEi6R5C;EuE/5RM;;IAEE,gCAAwC;EvEi6RhD;EuE/5RM;;IAEE,iCAA0C;EvEi6RlD;EuE/5RM;;IAEE,+BAAsC;EvEi6R9C;EuEh7RM;IAAgC,wBAA4B;EvEm7RlE;EuEl7RM;;IAEE,4BAAoC;EvEo7R5C;EuEl7RM;;IAEE,8BAAwC;EvEo7RhD;EuEl7RM;;IAEE,+BAA0C;EvEo7RlD;EuEl7RM;;IAEE,6BAAsC;EvEo7R9C;EuEn8RM;IAAgC,0BAA4B;EvEs8RlE;EuEr8RM;;IAEE,8BAAoC;EvEu8R5C;EuEr8RM;;IAEE,gCAAwC;EvEu8RhD;EuEr8RM;;IAEE,iCAA0C;EvEu8RlD;EuEr8RM;;IAEE,+BAAsC;EvEu8R9C;EuEt9RM;IAAgC,wBAA4B;EvEy9RlE;EuEx9RM;;IAEE,4BAAoC;EvE09R5C;EuEx9RM;;IAEE,8BAAwC;EvE09RhD;EuEx9RM;;IAEE,+BAA0C;EvE09RlD;EuEx9RM;;IAEE,6BAAsC;EvE09R9C;EuEl9RM;IAAwB,2BAA2B;EvEq9RzD;EuEp9RM;;IAEE,+BAA+B;EvEs9RvC;EuEp9RM;;IAEE,iCAAiC;EvEs9RzC;EuEp9RM;;IAEE,kCAAkC;EvEs9R1C;EuEp9RM;;IAEE,gCAAgC;EvEs9RxC;EuEr+RM;IAAwB,0BAA2B;EvEw+RzD;EuEv+RM;;IAEE,8BAA+B;EvEy+RvC;EuEv+RM;;IAEE,gCAAiC;EvEy+RzC;EuEv+RM;;IAEE,iCAAkC;EvEy+R1C;EuEv+RM;;IAEE,+BAAgC;EvEy+RxC;EuEx/RM;IAAwB,wBAA2B;EvE2/RzD;EuE1/RM;;IAEE,4BAA+B;EvE4/RvC;EuE1/RM;;IAEE,8BAAiC;EvE4/RzC;EuE1/RM;;IAEE,+BAAkC;EvE4/R1C;EuE1/RM;;IAEE,6BAAgC;EvE4/RxC;EuE3gSM;IAAwB,0BAA2B;EvE8gSzD;EuE7gSM;;IAEE,8BAA+B;EvE+gSvC;EuE7gSM;;IAEE,gCAAiC;EvE+gSzC;EuE7gSM;;IAEE,iCAAkC;EvE+gS1C;EuE7gSM;;IAEE,+BAAgC;EvE+gSxC;EuE9hSM;IAAwB,wBAA2B;EvEiiSzD;EuEhiSM;;IAEE,4BAA+B;EvEkiSvC;EuEhiSM;;IAEE,8BAAiC;EvEkiSzC;EuEhiSM;;IAEE,+BAAkC;EvEkiS1C;EuEhiSM;;IAEE,6BAAgC;EvEkiSxC;EuE5hSE;IAAmB,uBAAuB;EvE+hS5C;EuE9hSE;;IAEE,2BAA2B;EvEgiS/B;EuE9hSE;;IAEE,6BAA6B;EvEgiSjC;EuE9hSE;;IAEE,8BAA8B;EvEgiSlC;EuE9hSE;;IAEE,4BAA4B;EvEgiShC;AACF;;AwEhmSA;EAAkB,4GAA8C;AxEomShE;;AwEhmSA;EAAiB,8BAA8B;AxEomS/C;;AwEnmSA;EAAiB,8BAA8B;AxEumS/C;;AwEtmSA;EAAiB,8BAA8B;AxE0mS/C;;AwEzmSA;ECTE,gBAAgB;EAChB,uBAAuB;EACvB,mBAAmB;AzEsnSrB;;AwEvmSI;EAAwB,2BAA2B;AxE2mSvD;;AwE1mSI;EAAwB,4BAA4B;AxE8mSxD;;AwE7mSI;EAAwB,6BAA6B;AxEinSzD;;Ac5kSI;E0DvCA;IAAwB,2BAA2B;ExEwnSrD;EwEvnSE;IAAwB,4BAA4B;ExE0nStD;EwEznSE;IAAwB,6BAA6B;ExE4nSvD;AACF;;AcxlSI;E0DvCA;IAAwB,2BAA2B;ExEooSrD;EwEnoSE;IAAwB,4BAA4B;ExEsoStD;EwEroSE;IAAwB,6BAA6B;ExEwoSvD;AACF;;AcpmSI;E0DvCA;IAAwB,2BAA2B;ExEgpSrD;EwE/oSE;IAAwB,4BAA4B;ExEkpStD;EwEjpSE;IAAwB,6BAA6B;ExEopSvD;AACF;;AchnSI;E0DvCA;IAAwB,2BAA2B;ExE4pSrD;EwE3pSE;IAAwB,4BAA4B;ExE8pStD;EwE7pSE;IAAwB,6BAA6B;ExEgqSvD;AACF;;AwE3pSA;EAAmB,oCAAoC;AxE+pSvD;;AwE9pSA;EAAmB,oCAAoC;AxEkqSvD;;AwEjqSA;EAAmB,qCAAqC;AxEqqSxD;;AwEjqSA;EAAuB,2BAA0C;AxEqqSjE;;AwEpqSA;EAAuB,+BAA4C;AxEwqSnE;;AwEvqSA;EAAuB,2BAA2C;AxE2qSlE;;AwE1qSA;EAAuB,2BAAyC;AxE8qShE;;AwE7qSA;EAAuB,8BAA2C;AxEirSlE;;AwEhrSA;EAAuB,6BAA6B;AxEorSpD;;AwEhrSA;EAAc,sBAAwB;AxEorStC;;A0E3tSE;EACE,yBAAwB;A1E8tS5B;;AKptSE;EqELM,yBAA0E;A1E6tSlF;;A0EnuSE;EACE,yBAAwB;A1EsuS5B;;AK5tSE;EqELM,yBAA0E;A1EquSlF;;A0E3uSE;EACE,yBAAwB;A1E8uS5B;;AKpuSE;EqELM,yBAA0E;A1E6uSlF;;A0EnvSE;EACE,yBAAwB;A1EsvS5B;;AK5uSE;EqELM,yBAA0E;A1EqvSlF;;A0E3vSE;EACE,yBAAwB;A1E8vS5B;;AKpvSE;EqELM,yBAA0E;A1E6vSlF;;A0EnwSE;EACE,yBAAwB;A1EswS5B;;AK5vSE;EqELM,yBAA0E;A1EqwSlF;;A0E3wSE;EACE,yBAAwB;A1E8wS5B;;AKpwSE;EqELM,yBAA0E;A1E6wSlF;;A0EnxSE;EACE,yBAAwB;A1EsxS5B;;AK5wSE;EqELM,yBAA0E;A1EqxSlF;;AwE9uSA;EAAa,yBAA6B;AxEkvS1C;;AwEjvSA;EAAc,yBAA6B;AxEqvS3C;;AwEnvSA;EAAiB,oCAAkC;AxEuvSnD;;AwEtvSA;EAAiB,0CAAkC;AxE0vSnD;;AwEtvSA;EGvDE,WAAW;EACX,kBAAkB;EAClB,iBAAiB;EACjB,6BAA6B;EAC7B,SAAS;A3EizSX;;AwE1vSA;EAAwB,gCAAgC;AxE8vSxD;;AwE5vSA;EACE,iCAAiC;EACjC,oCAAoC;AxE+vStC;;AwE1vSA;EAAc,yBAAyB;AxE8vSvC;;A4E/zSA;EACE,8BAA8B;A5Ek0ShC;;A4E/zSA;EACE,6BAA6B;A5Ek0S/B;;A6El0SE;E3EOF;;;I2EDM,4BAA4B;IAE5B,2BAA2B;E7Ek0S/B;E6E/zSE;IAEI,0BAA0B;E7Eg0ShC;E6EvzSE;IACE,6BAA6B;E7EyzSjC;EE3nSF;I2E/KM,gCAAgC;E7E6ySpC;E6E3ySE;;IAEE,yB1EzCY;I0E0CZ,wBAAwB;E7E6yS5B;E6ErySE;IACE,2BAA2B;E7EuyS/B;E6EpySE;;IAEE,wBAAwB;E7EsyS5B;E6EnySE;;;IAGE,UAAU;IACV,SAAS;E7EqySb;E6ElySE;;IAEE,uBAAuB;E7EoyS3B;E6E5xSE;IACE,Q1E4hCgC;EHkwQpC;EE10SF;I2E+CM,2BAA2C;E7E8xS/C;EYp3SA;IiEyFI,2BAA2C;E7E8xS/C;EiC52SF;I4CmFM,aAAa;E7E4xSjB;EsC33SF;IuCkGM,sB1EtFS;EHk3Sb;EgB/3SF;I6DuGM,oCAAoC;E7E2xSxC;E6E5xSE;;IAKI,iCAAmC;E7E2xSzC;EgB91SF;;I6D0EQ,oCAAsC;E7EwxS5C;EgB7wSF;I6DNM,cAAc;E7EsxSlB;EiB54SA;;;;I4D4HM,qB1EvHU;EH64ShB;EgBxySF;I6DuBM,cAAc;IACd,qB1E7HY;EHi5ShB;AACF;;A8E55SA;;EAEE,iBAAiB;EACjB,cAAc;A9E+5ShB;;A8El6SA;;EAMI,gBAAgB;A9Ei6SpB;;A8Ev6SA;;EAUI,YAAY;A9Ek6ShB;;A8E56SA;;EAcI,qBAAqB;EACrB,iBAAiB;A9Em6SrB;;A8El7SA;;EAmBI,iBAAiB;A9Eo6SrB;;A8Ev7SA;;EAuBI,sBAAsB;EACtB,kBAAkB;A9Eq6StB;;A8E77SA;;EA4BI,QAAQ;EACR,aAAa;EACb,iBAAiB;A9Es6SrB;;A8Ep8SA;;EAkCI,sBAAsB;EACtB,qBAAqB;A9Eu6SzB;;A8E18SA;;;;EAwCI,oBAAoB;EACpB,kB3EsM6B;AHmuSjC;;A8El9SA;;EA6CI,kCAAgD;A9E06SpD;;A8Ev9SA;;;;EAkDI,kC3EgMgC;AH4uSpC;;A8E99SA;;EAsDI,kC3E4LgC;AHivSpC;;A8En+SA;;EA0DI,qBAAqB;EACrB,qBAAqB;EACrB,qBAAqB;EACrB,iBAAiB;A9E86SrB;;A8E3+SA;;EAiEI,QAAQ;EACR,aAAa;A9E+6SjB;;A8Ej/SA;;EAsEI,cAAc;EACd,UAAU;EACV,gCAAgC;A9Eg7SpC;;A8Ex/SA;;;;EA6EI,cAAc;EACd,aAAa;A9Ek7SjB;;A8EhgTA;;EAkFI,0CAAiJ;EACjJ,+MAAqG;EACrG,yB3EqfwC;AH87R5C;;A8EvgTA;;EAwFI,sBAA4D;EAC5D,qBAAqB;A9Eo7SzB;;A8E7gTA;;EA6FQ,eAAsD;A9Eq7S9D;;A8ElhTA;;EAiGQ,2BAAgH;A9Es7SxH;;A8EvhTA;;EAuGQ,+BAA8E;A9Eq7StF;;A8E5hTA;;;;;;;;;;;;EAkHI,kCAAgD;A9Ey7SpD;;A8E3iTA;;;;;;;;;;;;EA2HI,kC3EuHgC;AHw0SpC;;A8E1jTA;;;;EAgII,kC3EkHgC;AH+0SpC;;A8EjkTA;;;;EAqII,kCAAgD;A9Em8SpD;;A8ExkTA;;;;EA0II,gBAAgB;A9Eq8SpB;;A8E/kTA;;;;;;;;EAiJI,sBAAsB;EACtB,oBAAoB;A9Ey8SxB;;A8E3lTA;;EAuJM,qB3E44BmC;E2E34BnC,eAAe;EAOf,c3ElJY;E2EmJZ,Y3E04BuC;AHyjR7C;;A8EnmTA;;EA2JQ,gBAAgB;EAChB,oB3Eu4BiC;AHskRzC;;A8EzmTA;;EAqKI,gBAAgB;EAChB,kBAAkB;A9Ey8StB;;A8E/mTA;;EA0KI,WAAW;A9E08Sf;;A8EpnTA;;EA8KI,8BAA8B;A9E28SlC;;A8EznTA;;EAmLM,oBAAoB;A9E28S1B;;A8E9nTA;;EAuLM,mBAAmB;A9E48SzB;;A8EnoTA;;EA2LM,eAAe;A9E68SrB;;A8ExoTA;;EA+LM,cAAc;A9E88SpB;;A8E7oTA;;EAoMI,cAAc;EACd,OAAO;A9E88SX;;A8EnpTA;;EAyMI,oBAAoB;EACpB,cAAc;A9E+8SlB;;A8EzpTA;;EA8MI,sBAAsB;EACtB,oBAAoB;A9Eg9SxB;;A8E/pTA;;EAmNI,sBAAsB;EACtB,qBAAqB;A9Ei9SzB;;A8ErqTA;;;;;;EA0NI,gBAAgB;EAChB,qBAAqB;A9Eo9SzB;;A8E/qTA;;EpEqBI,gCP6NgC;EO5NhC,mCP4NgC;EO/MhC,yBoEgMmC;EpE/LnC,4BoE+LmC;A9Eo9SvC;;A8EvrTA;;EpEqBI,0BoEoNoC;EpEnNpC,6BoEmNoC;EpEtMpC,+BP+MgC;EO9MhC,kCP8MgC;AH68SpC;;A8E/rTA;;EAkPI,uBAA+C;EAC/C,cAAc;A9Ek9SlB;;A8ErsTA;;EAkPI,wBAA+C;EAC/C,cAAc;A9Ew9SlB;;A8E3sTA;;EAkPI,iBAA+C;EAC/C,cAAc;A9E89SlB;;A8EjtTA;;EAkPI,wBAA+C;EAC/C,cAAc;A9Eo+SlB;;A8EvtTA;;EAkPI,wBAA+C;EAC/C,cAAc;A9E0+SlB;;A8E7tTA;;EAkPI,iBAA+C;EAC/C,cAAc;A9Eg/SlB;;A8EnuTA;;EAkPI,wBAA+C;EAC/C,cAAc;A9Es/SlB;;A8EzuTA;;EAkPI,wBAA+C;EAC/C,cAAc;A9E4/SlB;;A8E/uTA;;EAkPI,iBAA+C;EAC/C,cAAc;A9EkgTlB;;A8ErvTA;;EAkPI,wBAA+C;EAC/C,cAAc;A9EwgTlB;;A8E3vTA;;EAkPI,wBAA+C;EAC/C,cAAc;A9E8gTlB;;AcrsTI;EgE5DJ;;IAkPI,eAA6B;IAC7B,cAAc;E9EqhThB;E8ExwTF;;IAkPI,uBAA+C;IAC/C,cAAc;E9E0hThB;E8E7wTF;;IAkPI,wBAA+C;IAC/C,cAAc;E9E+hThB;E8ElxTF;;IAkPI,iBAA+C;IAC/C,cAAc;E9EoiThB;E8EvxTF;;IAkPI,wBAA+C;IAC/C,cAAc;E9EyiThB;E8E5xTF;;IAkPI,wBAA+C;IAC/C,cAAc;E9E8iThB;E8EjyTF;;IAkPI,iBAA+C;IAC/C,cAAc;E9EmjThB;E8EtyTF;;IAkPI,wBAA+C;IAC/C,cAAc;E9EwjThB;E8E3yTF;;IAkPI,wBAA+C;IAC/C,cAAc;E9E6jThB;E8EhzTF;;IAkPI,iBAA+C;IAC/C,cAAc;E9EkkThB;E8ErzTF;;IAkPI,wBAA+C;IAC/C,cAAc;E9EukThB;E8E1zTF;;IAkPI,wBAA+C;IAC/C,cAAc;E9E4kThB;AACF;;AcpwTI;EgE5DJ;;IAkPI,eAA6B;IAC7B,cAAc;E9EolThB;E8Ev0TF;;IAkPI,uBAA+C;IAC/C,cAAc;E9EylThB;E8E50TF;;IAkPI,wBAA+C;IAC/C,cAAc;E9E8lThB;E8Ej1TF;;IAkPI,iBAA+C;IAC/C,cAAc;E9EmmThB;E8Et1TF;;IAkPI,wBAA+C;IAC/C,cAAc;E9EwmThB;E8E31TF;;IAkPI,wBAA+C;IAC/C,cAAc;E9E6mThB;E8Eh2TF;;IAkPI,iBAA+C;IAC/C,cAAc;E9EknThB;E8Er2TF;;IAkPI,wBAA+C;IAC/C,cAAc;E9EunThB;E8E12TF;;IAkPI,wBAA+C;IAC/C,cAAc;E9E4nThB;E8E/2TF;;IAkPI,iBAA+C;IAC/C,cAAc;E9EioThB;E8Ep3TF;;IAkPI,wBAA+C;IAC/C,cAAc;E9EsoThB;E8Ez3TF;;IAkPI,wBAA+C;IAC/C,cAAc;E9E2oThB;AACF;;Acn0TI;EgE5DJ;;IAkPI,eAA6B;IAC7B,cAAc;E9EmpThB;E8Et4TF;;IAkPI,uBAA+C;IAC/C,cAAc;E9EwpThB;E8E34TF;;IAkPI,wBAA+C;IAC/C,cAAc;E9E6pThB;E8Eh5TF;;IAkPI,iBAA+C;IAC/C,cAAc;E9EkqThB;E8Er5TF;;IAkPI,wBAA+C;IAC/C,cAAc;E9EuqThB;E8E15TF;;IAkPI,wBAA+C;IAC/C,cAAc;E9E4qThB;E8E/5TF;;IAkPI,iBAA+C;IAC/C,cAAc;E9EirThB;E8Ep6TF;;IAkPI,wBAA+C;IAC/C,cAAc;E9EsrThB;E8Ez6TF;;IAkPI,wBAA+C;IAC/C,cAAc;E9E2rThB;E8E96TF;;IAkPI,iBAA+C;IAC/C,cAAc;E9EgsThB;E8En7TF;;IAkPI,wBAA+C;IAC/C,cAAc;E9EqsThB;E8Ex7TF;;IAkPI,wBAA+C;IAC/C,cAAc;E9E0sThB;AACF;;Acl4TI;EgE5DJ;;IAkPI,eAA6B;IAC7B,cAAc;E9EktThB;E8Er8TF;;IAkPI,uBAA+C;IAC/C,cAAc;E9EutThB;E8E18TF;;IAkPI,wBAA+C;IAC/C,cAAc;E9E4tThB;E8E/8TF;;IAkPI,iBAA+C;IAC/C,cAAc;E9EiuThB;E8Ep9TF;;IAkPI,wBAA+C;IAC/C,cAAc;E9EsuThB;E8Ez9TF;;IAkPI,wBAA+C;IAC/C,cAAc;E9E2uThB;E8E99TF;;IAkPI,iBAA+C;IAC/C,cAAc;E9EgvThB;E8En+TF;;IAkPI,wBAA+C;IAC/C,cAAc;E9EqvThB;E8Ex+TF;;IAkPI,wBAA+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","file":"bootstrap-rtl.css","sourcesContent":["/*!\n * Bootstrap v4.4.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n @import \"functions\";\n @import \"variables\";\n @import \"mixins\";\n @import \"root\";\n @import \"reboot\";\n @import \"type\";\n @import \"images\";\n @import \"code\";\n @import \"grid\";\n @import \"tables\";\n @import \"forms\";\n @import \"buttons\";\n @import \"transitions\";\n @import \"dropdown\";\n @import \"button-group\";\n @import \"input-group\";\n @import \"custom-forms\";\n @import \"nav\";\n @import \"navbar\";\n @import \"card\";\n @import \"breadcrumb\";\n @import \"pagination\";\n @import \"badge\";\n @import \"jumbotron\";\n @import \"alert\";\n @import \"progress\";\n @import \"media\";\n @import \"list-group\";\n @import \"close\";\n @import \"toasts\";\n @import \"modal\";\n @import \"tooltip\";\n @import \"popover\";\n @import \"carousel\";\n @import \"spinners\";\n @import \"utilities\";\n @import \"print\";\n\n@import \"rtl\";\n","/*!\n * Bootstrap v4.4.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n:root {\n --blue: #007bff;\n --indigo: #6610f2;\n --purple: #6f42c1;\n --pink: #e83e8c;\n --red: #dc3545;\n --orange: #fd7e14;\n --yellow: #ffc107;\n --green: #28a745;\n --teal: #20c997;\n --cyan: #17a2b8;\n --white: #fff;\n --gray: #6c757d;\n --gray-dark: #343a40;\n --primary: #007bff;\n --secondary: #6c757d;\n --success: #28a745;\n --info: #17a2b8;\n --warning: #ffc107;\n --danger: #dc3545;\n --light: #f8f9fa;\n --dark: #343a40;\n --breakpoint-xs: 0;\n --breakpoint-sm: 576px;\n --breakpoint-md: 768px;\n --breakpoint-lg: 992px;\n --breakpoint-xl: 1200px;\n --font-family-sans-serif: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\nhtml {\n font-family: sans-serif;\n line-height: 1.15;\n -webkit-text-size-adjust: 100%;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n\nbody {\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n text-align: left;\n background-color: #fff;\n}\n\n[tabindex=\"-1\"]:focus:not(:focus-visible) {\n outline: 0 !important;\n}\n\nhr {\n box-sizing: content-box;\n height: 0;\n overflow: visible;\n}\n\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-original-title] {\n text-decoration: underline;\n text-decoration: underline dotted;\n cursor: help;\n border-bottom: 0;\n text-decoration-skip-ink: none;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall {\n font-size: 80%;\n}\n\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -.25em;\n}\n\nsup {\n top: -.5em;\n}\n\na {\n color: #007bff;\n text-decoration: none;\n background-color: transparent;\n}\n\na:hover {\n color: #0056b3;\n text-decoration: underline;\n}\n\na:not([href]) {\n color: inherit;\n text-decoration: none;\n}\n\na:not([href]):hover {\n color: inherit;\n text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n font-size: 1em;\n}\n\npre {\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg {\n vertical-align: middle;\n border-style: none;\n}\n\nsvg {\n overflow: hidden;\n vertical-align: middle;\n}\n\ntable {\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n color: #6c757d;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n text-align: inherit;\n}\n\nlabel {\n display: inline-block;\n margin-bottom: 0.5rem;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\nselect {\n word-wrap: normal;\n}\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\n\nbutton:not(:disabled),\n[type=\"button\"]:not(:disabled),\n[type=\"reset\"]:not(:disabled),\n[type=\"submit\"]:not(:disabled) {\n cursor: pointer;\n}\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box;\n padding: 0;\n}\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n -webkit-appearance: listbox;\n}\n\ntextarea {\n overflow: auto;\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n max-width: 100%;\n padding: 0;\n margin-bottom: .5rem;\n font-size: 1.5rem;\n line-height: inherit;\n color: inherit;\n white-space: normal;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n outline-offset: -2px;\n -webkit-appearance: none;\n}\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-file-upload-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item;\n cursor: pointer;\n}\n\ntemplate {\n display: none;\n}\n\n[hidden] {\n display: none !important;\n}\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n margin-bottom: 0.5rem;\n font-weight: 500;\n line-height: 1.2;\n}\n\nh1, .h1 {\n font-size: 2.5rem;\n}\n\nh2, .h2 {\n font-size: 2rem;\n}\n\nh3, .h3 {\n font-size: 1.75rem;\n}\n\nh4, .h4 {\n font-size: 1.5rem;\n}\n\nh5, .h5 {\n font-size: 1.25rem;\n}\n\nh6, .h6 {\n font-size: 1rem;\n}\n\n.lead {\n font-size: 1.25rem;\n font-weight: 300;\n}\n\n.display-1 {\n font-size: 6rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\n.display-2 {\n font-size: 5.5rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\n.display-3 {\n font-size: 4.5rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\n.display-4 {\n font-size: 3.5rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\nhr {\n margin-top: 1rem;\n margin-bottom: 1rem;\n border: 0;\n border-top: 1px solid rgba(0, 0, 0, 0.1);\n}\n\nsmall,\n.small {\n font-size: 80%;\n font-weight: 400;\n}\n\nmark,\n.mark {\n padding: 0.2em;\n background-color: #fcf8e3;\n}\n\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline-item {\n display: inline-block;\n}\n\n.list-inline-item:not(:last-child) {\n margin-right: 0.5rem;\n}\n\n.initialism {\n font-size: 90%;\n text-transform: uppercase;\n}\n\n.blockquote {\n margin-bottom: 1rem;\n font-size: 1.25rem;\n}\n\n.blockquote-footer {\n display: block;\n font-size: 80%;\n color: #6c757d;\n}\n\n.blockquote-footer::before {\n content: \"\\2014\\00A0\";\n}\n\n.img-fluid {\n max-width: 100%;\n height: auto;\n}\n\n.img-thumbnail {\n padding: 0.25rem;\n background-color: #fff;\n border: 1px solid #dee2e6;\n border-radius: 0.25rem;\n max-width: 100%;\n height: auto;\n}\n\n.figure {\n display: inline-block;\n}\n\n.figure-img {\n margin-bottom: 0.5rem;\n line-height: 1;\n}\n\n.figure-caption {\n font-size: 90%;\n color: #6c757d;\n}\n\ncode {\n font-size: 87.5%;\n color: #e83e8c;\n word-wrap: break-word;\n}\n\na > code {\n color: inherit;\n}\n\nkbd {\n padding: 0.2rem 0.4rem;\n font-size: 87.5%;\n color: #fff;\n background-color: #212529;\n border-radius: 0.2rem;\n}\n\nkbd kbd {\n padding: 0;\n font-size: 100%;\n font-weight: 700;\n}\n\npre {\n display: block;\n font-size: 87.5%;\n color: #212529;\n}\n\npre code {\n font-size: inherit;\n color: inherit;\n word-break: normal;\n}\n\n.pre-scrollable {\n max-height: 340px;\n overflow-y: scroll;\n}\n\n.container {\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container {\n max-width: 540px;\n }\n}\n\n@media (min-width: 768px) {\n .container {\n max-width: 720px;\n }\n}\n\n@media (min-width: 992px) {\n .container {\n max-width: 960px;\n }\n}\n\n@media (min-width: 1200px) {\n .container {\n max-width: 1140px;\n }\n}\n\n.container-fluid, .container-sm, .container-md, .container-lg, .container-xl {\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container, .container-sm {\n max-width: 540px;\n }\n}\n\n@media (min-width: 768px) {\n .container, .container-sm, .container-md {\n max-width: 720px;\n }\n}\n\n@media (min-width: 992px) {\n .container, .container-sm, .container-md, .container-lg {\n max-width: 960px;\n }\n}\n\n@media (min-width: 1200px) {\n .container, .container-sm, .container-md, .container-lg, .container-xl {\n max-width: 1140px;\n }\n}\n\n.row {\n display: flex;\n flex-wrap: wrap;\n margin-right: -15px;\n margin-left: -15px;\n}\n\n.no-gutters {\n margin-right: 0;\n margin-left: 0;\n}\n\n.no-gutters > .col,\n.no-gutters > [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n}\n\n.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col,\n.col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm,\n.col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md,\n.col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg,\n.col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl,\n.col-xl-auto {\n position: relative;\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n}\n\n.col {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n}\n\n.row-cols-1 > * {\n flex: 0 0 100%;\n max-width: 100%;\n}\n\n.row-cols-2 > * {\n flex: 0 0 50%;\n max-width: 50%;\n}\n\n.row-cols-3 > * {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n}\n\n.row-cols-4 > * {\n flex: 0 0 25%;\n max-width: 25%;\n}\n\n.row-cols-5 > * {\n flex: 0 0 20%;\n max-width: 20%;\n}\n\n.row-cols-6 > * {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n}\n\n.col-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n}\n\n.col-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n}\n\n.col-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n}\n\n.col-3 {\n flex: 0 0 25%;\n max-width: 25%;\n}\n\n.col-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n}\n\n.col-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n}\n\n.col-6 {\n flex: 0 0 50%;\n max-width: 50%;\n}\n\n.col-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n}\n\n.col-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n}\n\n.col-9 {\n flex: 0 0 75%;\n max-width: 75%;\n}\n\n.col-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n}\n\n.col-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n}\n\n.col-12 {\n flex: 0 0 100%;\n max-width: 100%;\n}\n\n.order-first {\n order: -1;\n}\n\n.order-last {\n order: 13;\n}\n\n.order-0 {\n order: 0;\n}\n\n.order-1 {\n order: 1;\n}\n\n.order-2 {\n order: 2;\n}\n\n.order-3 {\n order: 3;\n}\n\n.order-4 {\n order: 4;\n}\n\n.order-5 {\n order: 5;\n}\n\n.order-6 {\n order: 6;\n}\n\n.order-7 {\n order: 7;\n}\n\n.order-8 {\n order: 8;\n}\n\n.order-9 {\n order: 9;\n}\n\n.order-10 {\n order: 10;\n}\n\n.order-11 {\n order: 11;\n}\n\n.order-12 {\n order: 12;\n}\n\n.offset-1 {\n margin-right: 8.333333%;\n}\n\n.offset-2 {\n margin-right: 16.666667%;\n}\n\n.offset-3 {\n margin-right: 25%;\n}\n\n.offset-4 {\n margin-right: 33.333333%;\n}\n\n.offset-5 {\n margin-right: 41.666667%;\n}\n\n.offset-6 {\n margin-right: 50%;\n}\n\n.offset-7 {\n margin-right: 58.333333%;\n}\n\n.offset-8 {\n margin-right: 66.666667%;\n}\n\n.offset-9 {\n margin-right: 75%;\n}\n\n.offset-10 {\n margin-right: 83.333333%;\n}\n\n.offset-11 {\n margin-right: 91.666667%;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-sm-1 > * {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-sm-2 > * {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-sm-3 > * {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-sm-4 > * {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-sm-5 > * {\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-sm-6 > * {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-sm-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-sm-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-sm-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-sm-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-sm-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-sm-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-sm-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-sm-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-sm-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-sm-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-sm-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-sm-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-sm-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-sm-first {\n order: -1;\n }\n .order-sm-last {\n order: 13;\n }\n .order-sm-0 {\n order: 0;\n }\n .order-sm-1 {\n order: 1;\n }\n .order-sm-2 {\n order: 2;\n }\n .order-sm-3 {\n order: 3;\n }\n .order-sm-4 {\n order: 4;\n }\n .order-sm-5 {\n order: 5;\n }\n .order-sm-6 {\n order: 6;\n }\n .order-sm-7 {\n order: 7;\n }\n .order-sm-8 {\n order: 8;\n }\n .order-sm-9 {\n order: 9;\n }\n .order-sm-10 {\n order: 10;\n }\n .order-sm-11 {\n order: 11;\n }\n .order-sm-12 {\n order: 12;\n }\n .offset-sm-0 {\n margin-right: 0;\n }\n .offset-sm-1 {\n margin-right: 8.333333%;\n }\n .offset-sm-2 {\n margin-right: 16.666667%;\n }\n .offset-sm-3 {\n margin-right: 25%;\n }\n .offset-sm-4 {\n margin-right: 33.333333%;\n }\n .offset-sm-5 {\n margin-right: 41.666667%;\n }\n .offset-sm-6 {\n margin-right: 50%;\n }\n .offset-sm-7 {\n margin-right: 58.333333%;\n }\n .offset-sm-8 {\n margin-right: 66.666667%;\n }\n .offset-sm-9 {\n margin-right: 75%;\n }\n .offset-sm-10 {\n margin-right: 83.333333%;\n }\n .offset-sm-11 {\n margin-right: 91.666667%;\n }\n}\n\n@media (min-width: 768px) {\n .col-md {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-md-1 > * {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-md-2 > * {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-md-3 > * {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-md-4 > * {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-md-5 > * {\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-md-6 > * {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-md-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-md-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-md-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-md-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-md-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-md-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-md-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-md-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-md-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-md-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-md-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-md-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-md-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-md-first {\n order: -1;\n }\n .order-md-last {\n order: 13;\n }\n .order-md-0 {\n order: 0;\n }\n .order-md-1 {\n order: 1;\n }\n .order-md-2 {\n order: 2;\n }\n .order-md-3 {\n order: 3;\n }\n .order-md-4 {\n order: 4;\n }\n .order-md-5 {\n order: 5;\n }\n .order-md-6 {\n order: 6;\n }\n .order-md-7 {\n order: 7;\n }\n .order-md-8 {\n order: 8;\n }\n .order-md-9 {\n order: 9;\n }\n .order-md-10 {\n order: 10;\n }\n .order-md-11 {\n order: 11;\n }\n .order-md-12 {\n order: 12;\n }\n .offset-md-0 {\n margin-right: 0;\n }\n .offset-md-1 {\n margin-right: 8.333333%;\n }\n .offset-md-2 {\n margin-right: 16.666667%;\n }\n .offset-md-3 {\n margin-right: 25%;\n }\n .offset-md-4 {\n margin-right: 33.333333%;\n }\n .offset-md-5 {\n margin-right: 41.666667%;\n }\n .offset-md-6 {\n margin-right: 50%;\n }\n .offset-md-7 {\n margin-right: 58.333333%;\n }\n .offset-md-8 {\n margin-right: 66.666667%;\n }\n .offset-md-9 {\n margin-right: 75%;\n }\n .offset-md-10 {\n margin-right: 83.333333%;\n }\n .offset-md-11 {\n margin-right: 91.666667%;\n }\n}\n\n@media (min-width: 992px) {\n .col-lg {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-lg-1 > * {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-lg-2 > * {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-lg-3 > * {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-lg-4 > * {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-lg-5 > * {\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-lg-6 > * {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-lg-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-lg-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-lg-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-lg-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-lg-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-lg-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-lg-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-lg-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-lg-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-lg-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-lg-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-lg-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-lg-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-lg-first {\n order: -1;\n }\n .order-lg-last {\n order: 13;\n }\n .order-lg-0 {\n order: 0;\n }\n .order-lg-1 {\n order: 1;\n }\n .order-lg-2 {\n order: 2;\n }\n .order-lg-3 {\n order: 3;\n }\n .order-lg-4 {\n order: 4;\n }\n .order-lg-5 {\n order: 5;\n }\n .order-lg-6 {\n order: 6;\n }\n .order-lg-7 {\n order: 7;\n }\n .order-lg-8 {\n order: 8;\n }\n .order-lg-9 {\n order: 9;\n }\n .order-lg-10 {\n order: 10;\n }\n .order-lg-11 {\n order: 11;\n }\n .order-lg-12 {\n order: 12;\n }\n .offset-lg-0 {\n margin-right: 0;\n }\n .offset-lg-1 {\n margin-right: 8.333333%;\n }\n .offset-lg-2 {\n margin-right: 16.666667%;\n }\n .offset-lg-3 {\n margin-right: 25%;\n }\n .offset-lg-4 {\n margin-right: 33.333333%;\n }\n .offset-lg-5 {\n margin-right: 41.666667%;\n }\n .offset-lg-6 {\n margin-right: 50%;\n }\n .offset-lg-7 {\n margin-right: 58.333333%;\n }\n .offset-lg-8 {\n margin-right: 66.666667%;\n }\n .offset-lg-9 {\n margin-right: 75%;\n }\n .offset-lg-10 {\n margin-right: 83.333333%;\n }\n .offset-lg-11 {\n margin-right: 91.666667%;\n }\n}\n\n@media (min-width: 1200px) {\n .col-xl {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-xl-1 > * {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-xl-2 > * {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-xl-3 > * {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-xl-4 > * {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-xl-5 > * {\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-xl-6 > * {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-xl-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-xl-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-xl-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-xl-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-xl-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-xl-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-xl-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-xl-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-xl-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-xl-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-xl-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-xl-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-xl-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-xl-first {\n order: -1;\n }\n .order-xl-last {\n order: 13;\n }\n .order-xl-0 {\n order: 0;\n }\n .order-xl-1 {\n order: 1;\n }\n .order-xl-2 {\n order: 2;\n }\n .order-xl-3 {\n order: 3;\n }\n .order-xl-4 {\n order: 4;\n }\n .order-xl-5 {\n order: 5;\n }\n .order-xl-6 {\n order: 6;\n }\n .order-xl-7 {\n order: 7;\n }\n .order-xl-8 {\n order: 8;\n }\n .order-xl-9 {\n order: 9;\n }\n .order-xl-10 {\n order: 10;\n }\n .order-xl-11 {\n order: 11;\n }\n .order-xl-12 {\n order: 12;\n }\n .offset-xl-0 {\n margin-right: 0;\n }\n .offset-xl-1 {\n margin-right: 8.333333%;\n }\n .offset-xl-2 {\n margin-right: 16.666667%;\n }\n .offset-xl-3 {\n margin-right: 25%;\n }\n .offset-xl-4 {\n margin-right: 33.333333%;\n }\n .offset-xl-5 {\n margin-right: 41.666667%;\n }\n .offset-xl-6 {\n margin-right: 50%;\n }\n .offset-xl-7 {\n margin-right: 58.333333%;\n }\n .offset-xl-8 {\n margin-right: 66.666667%;\n }\n .offset-xl-9 {\n margin-right: 75%;\n }\n .offset-xl-10 {\n margin-right: 83.333333%;\n }\n .offset-xl-11 {\n margin-right: 91.666667%;\n }\n}\n\n.table {\n width: 100%;\n margin-bottom: 1rem;\n color: #212529;\n}\n\n.table th,\n.table td {\n padding: 0.75rem;\n vertical-align: top;\n border-top: 1px solid #dee2e6;\n}\n\n.table thead th {\n vertical-align: bottom;\n border-bottom: 2px solid #dee2e6;\n}\n\n.table tbody + tbody {\n border-top: 2px solid #dee2e6;\n}\n\n.table-sm th,\n.table-sm td {\n padding: 0.3rem;\n}\n\n.table-bordered {\n border: 1px solid #dee2e6;\n}\n\n.table-bordered th,\n.table-bordered td {\n border: 1px solid #dee2e6;\n}\n\n.table-bordered thead th,\n.table-bordered thead td {\n border-bottom-width: 2px;\n}\n\n.table-borderless th,\n.table-borderless td,\n.table-borderless thead th,\n.table-borderless tbody + tbody {\n border: 0;\n}\n\n.table-striped tbody tr:nth-of-type(odd) {\n background-color: rgba(0, 0, 0, 0.05);\n}\n\n.table-hover tbody tr:hover {\n color: #212529;\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-primary,\n.table-primary > th,\n.table-primary > td {\n background-color: #b8daff;\n}\n\n.table-primary th,\n.table-primary td,\n.table-primary thead th,\n.table-primary tbody + tbody {\n border-color: #7abaff;\n}\n\n.table-hover .table-primary:hover {\n background-color: #9fcdff;\n}\n\n.table-hover .table-primary:hover > td,\n.table-hover .table-primary:hover > th {\n background-color: #9fcdff;\n}\n\n.table-secondary,\n.table-secondary > th,\n.table-secondary > td {\n background-color: #d6d8db;\n}\n\n.table-secondary th,\n.table-secondary td,\n.table-secondary thead th,\n.table-secondary tbody + tbody {\n border-color: #b3b7bb;\n}\n\n.table-hover .table-secondary:hover {\n background-color: #c8cbcf;\n}\n\n.table-hover .table-secondary:hover > td,\n.table-hover .table-secondary:hover > th {\n background-color: #c8cbcf;\n}\n\n.table-success,\n.table-success > th,\n.table-success > td {\n background-color: #c3e6cb;\n}\n\n.table-success th,\n.table-success td,\n.table-success thead th,\n.table-success tbody + tbody {\n border-color: #8fd19e;\n}\n\n.table-hover .table-success:hover {\n background-color: #b1dfbb;\n}\n\n.table-hover .table-success:hover > td,\n.table-hover .table-success:hover > th {\n background-color: #b1dfbb;\n}\n\n.table-info,\n.table-info > th,\n.table-info > td {\n background-color: #bee5eb;\n}\n\n.table-info th,\n.table-info td,\n.table-info thead th,\n.table-info tbody + tbody {\n border-color: #86cfda;\n}\n\n.table-hover .table-info:hover {\n background-color: #abdde5;\n}\n\n.table-hover .table-info:hover > td,\n.table-hover .table-info:hover > th {\n background-color: #abdde5;\n}\n\n.table-warning,\n.table-warning > th,\n.table-warning > td {\n background-color: #ffeeba;\n}\n\n.table-warning th,\n.table-warning td,\n.table-warning thead th,\n.table-warning tbody + tbody {\n border-color: #ffdf7e;\n}\n\n.table-hover .table-warning:hover {\n background-color: #ffe8a1;\n}\n\n.table-hover .table-warning:hover > td,\n.table-hover .table-warning:hover > th {\n background-color: #ffe8a1;\n}\n\n.table-danger,\n.table-danger > th,\n.table-danger > td {\n background-color: #f5c6cb;\n}\n\n.table-danger th,\n.table-danger td,\n.table-danger thead th,\n.table-danger tbody + tbody {\n border-color: #ed969e;\n}\n\n.table-hover .table-danger:hover {\n background-color: #f1b0b7;\n}\n\n.table-hover .table-danger:hover > td,\n.table-hover .table-danger:hover > th {\n background-color: #f1b0b7;\n}\n\n.table-light,\n.table-light > th,\n.table-light > td {\n background-color: #fdfdfe;\n}\n\n.table-light th,\n.table-light td,\n.table-light thead th,\n.table-light tbody + tbody {\n border-color: #fbfcfc;\n}\n\n.table-hover .table-light:hover {\n background-color: #ececf6;\n}\n\n.table-hover .table-light:hover > td,\n.table-hover .table-light:hover > th {\n background-color: #ececf6;\n}\n\n.table-dark,\n.table-dark > th,\n.table-dark > td {\n background-color: #c6c8ca;\n}\n\n.table-dark th,\n.table-dark td,\n.table-dark thead th,\n.table-dark tbody + tbody {\n border-color: #95999c;\n}\n\n.table-hover .table-dark:hover {\n background-color: #b9bbbe;\n}\n\n.table-hover .table-dark:hover > td,\n.table-hover .table-dark:hover > th {\n background-color: #b9bbbe;\n}\n\n.table-active,\n.table-active > th,\n.table-active > td {\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-hover .table-active:hover {\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-hover .table-active:hover > td,\n.table-hover .table-active:hover > th {\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table .thead-dark th {\n color: #fff;\n background-color: #343a40;\n border-color: #454d55;\n}\n\n.table .thead-light th {\n color: #495057;\n background-color: #e9ecef;\n border-color: #dee2e6;\n}\n\n.table-dark {\n color: #fff;\n background-color: #343a40;\n}\n\n.table-dark th,\n.table-dark td,\n.table-dark thead th {\n border-color: #454d55;\n}\n\n.table-dark.table-bordered {\n border: 0;\n}\n\n.table-dark.table-striped tbody tr:nth-of-type(odd) {\n background-color: rgba(255, 255, 255, 0.05);\n}\n\n.table-dark.table-hover tbody tr:hover {\n color: #fff;\n background-color: rgba(255, 255, 255, 0.075);\n}\n\n@media (max-width: 575.98px) {\n .table-responsive-sm {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n .table-responsive-sm > .table-bordered {\n border: 0;\n }\n}\n\n@media (max-width: 767.98px) {\n .table-responsive-md {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n .table-responsive-md > .table-bordered {\n border: 0;\n }\n}\n\n@media (max-width: 991.98px) {\n .table-responsive-lg {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n .table-responsive-lg > .table-bordered {\n border: 0;\n }\n}\n\n@media (max-width: 1199.98px) {\n .table-responsive-xl {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n .table-responsive-xl > .table-bordered {\n border: 0;\n }\n}\n\n.table-responsive {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n}\n\n.table-responsive > .table-bordered {\n border: 0;\n}\n\n.form-control {\n display: block;\n width: 100%;\n height: calc(1.5em + 0.75rem + 2px);\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .form-control {\n transition: none;\n }\n}\n\n.form-control::-ms-expand {\n background-color: transparent;\n border: 0;\n}\n\n.form-control:-moz-focusring {\n color: transparent;\n text-shadow: 0 0 0 #495057;\n}\n\n.form-control:focus {\n color: #495057;\n background-color: #fff;\n border-color: #80bdff;\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.form-control::placeholder {\n color: #6c757d;\n opacity: 1;\n}\n\n.form-control:disabled, .form-control[readonly] {\n background-color: #e9ecef;\n opacity: 1;\n}\n\nselect.form-control:focus::-ms-value {\n color: #495057;\n background-color: #fff;\n}\n\n.form-control-file,\n.form-control-range {\n display: block;\n width: 100%;\n}\n\n.col-form-label {\n padding-top: calc(0.375rem + 1px);\n padding-bottom: calc(0.375rem + 1px);\n margin-bottom: 0;\n font-size: inherit;\n line-height: 1.5;\n}\n\n.col-form-label-lg {\n padding-top: calc(0.5rem + 1px);\n padding-bottom: calc(0.5rem + 1px);\n font-size: 1.25rem;\n line-height: 1.5;\n}\n\n.col-form-label-sm {\n padding-top: calc(0.25rem + 1px);\n padding-bottom: calc(0.25rem + 1px);\n font-size: 0.875rem;\n line-height: 1.5;\n}\n\n.form-control-plaintext {\n display: block;\n width: 100%;\n padding: 0.375rem 0;\n margin-bottom: 0;\n font-size: 1rem;\n line-height: 1.5;\n color: #212529;\n background-color: transparent;\n border: solid transparent;\n border-width: 1px 0;\n}\n\n.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {\n padding-right: 0;\n padding-left: 0;\n}\n\n.form-control-sm {\n height: calc(1.5em + 0.5rem + 2px);\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n border-radius: 0.2rem;\n}\n\n.form-control-lg {\n height: calc(1.5em + 1rem + 2px);\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n line-height: 1.5;\n border-radius: 0.3rem;\n}\n\nselect.form-control[size], select.form-control[multiple] {\n height: auto;\n}\n\ntextarea.form-control {\n height: auto;\n}\n\n.form-group {\n margin-bottom: 1rem;\n}\n\n.form-text {\n display: block;\n margin-top: 0.25rem;\n}\n\n.form-row {\n display: flex;\n flex-wrap: wrap;\n margin-right: -5px;\n margin-left: -5px;\n}\n\n.form-row > .col,\n.form-row > [class*=\"col-\"] {\n padding-right: 5px;\n padding-left: 5px;\n}\n\n.form-check {\n position: relative;\n display: block;\n padding-left: 1.25rem;\n}\n\n.form-check-input {\n position: absolute;\n margin-top: 0.3rem;\n margin-left: -1.25rem;\n}\n\n.form-check-input[disabled] ~ .form-check-label,\n.form-check-input:disabled ~ .form-check-label {\n color: #6c757d;\n}\n\n.form-check-label {\n margin-bottom: 0;\n}\n\n.form-check-inline {\n display: inline-flex;\n align-items: center;\n padding-left: 0;\n margin-right: 0.75rem;\n}\n\n.form-check-inline .form-check-input {\n position: static;\n margin-top: 0;\n margin-right: 0.3125rem;\n margin-left: 0;\n}\n\n.valid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 80%;\n color: #28a745;\n}\n\n.valid-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: 0.25rem 0.5rem;\n margin-top: .1rem;\n font-size: 0.875rem;\n line-height: 1.5;\n color: #fff;\n background-color: rgba(40, 167, 69, 0.9);\n border-radius: 0.25rem;\n}\n\n.was-validated :valid ~ .valid-feedback,\n.was-validated :valid ~ .valid-tooltip,\n.is-valid ~ .valid-feedback,\n.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid {\n border-color: #28a745;\n padding-right: calc(1.5em + 0.75rem);\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: right calc(0.375em + 0.1875rem) center;\n background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus {\n border-color: #28a745;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated textarea.form-control:valid, textarea.form-control.is-valid {\n padding-right: calc(1.5em + 0.75rem);\n background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .custom-select:valid, .custom-select.is-valid {\n border-color: #28a745;\n padding-right: calc(0.75em + 2.3125rem);\n background: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") no-repeat right 0.75rem center/8px 10px, url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .custom-select:valid:focus, .custom-select.is-valid:focus {\n border-color: #28a745;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n color: #28a745;\n}\n\n.was-validated .form-check-input:valid ~ .valid-feedback,\n.was-validated .form-check-input:valid ~ .valid-tooltip, .form-check-input.is-valid ~ .valid-feedback,\n.form-check-input.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .custom-control-input:valid ~ .custom-control-label, .custom-control-input.is-valid ~ .custom-control-label {\n color: #28a745;\n}\n\n.was-validated .custom-control-input:valid ~ .custom-control-label::before, .custom-control-input.is-valid ~ .custom-control-label::before {\n border-color: #28a745;\n}\n\n.was-validated .custom-control-input:valid:checked ~ .custom-control-label::before, .custom-control-input.is-valid:checked ~ .custom-control-label::before {\n border-color: #34ce57;\n background-color: #34ce57;\n}\n\n.was-validated .custom-control-input:valid:focus ~ .custom-control-label::before, .custom-control-input.is-valid:focus ~ .custom-control-label::before {\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated .custom-control-input:valid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-valid:focus:not(:checked) ~ .custom-control-label::before {\n border-color: #28a745;\n}\n\n.was-validated .custom-file-input:valid ~ .custom-file-label, .custom-file-input.is-valid ~ .custom-file-label {\n border-color: #28a745;\n}\n\n.was-validated .custom-file-input:valid:focus ~ .custom-file-label, .custom-file-input.is-valid:focus ~ .custom-file-label {\n border-color: #28a745;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.invalid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 80%;\n color: #dc3545;\n}\n\n.invalid-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: 0.25rem 0.5rem;\n margin-top: .1rem;\n font-size: 0.875rem;\n line-height: 1.5;\n color: #fff;\n background-color: rgba(220, 53, 69, 0.9);\n border-radius: 0.25rem;\n}\n\n.was-validated :invalid ~ .invalid-feedback,\n.was-validated :invalid ~ .invalid-tooltip,\n.is-invalid ~ .invalid-feedback,\n.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid {\n border-color: #dc3545;\n padding-right: calc(1.5em + 0.75rem);\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: right calc(0.375em + 0.1875rem) center;\n background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {\n padding-right: calc(1.5em + 0.75rem);\n background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .custom-select:invalid, .custom-select.is-invalid {\n border-color: #dc3545;\n padding-right: calc(0.75em + 2.3125rem);\n background: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") no-repeat right 0.75rem center/8px 10px, url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .custom-select:invalid:focus, .custom-select.is-invalid:focus {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n color: #dc3545;\n}\n\n.was-validated .form-check-input:invalid ~ .invalid-feedback,\n.was-validated .form-check-input:invalid ~ .invalid-tooltip, .form-check-input.is-invalid ~ .invalid-feedback,\n.form-check-input.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .custom-control-input:invalid ~ .custom-control-label, .custom-control-input.is-invalid ~ .custom-control-label {\n color: #dc3545;\n}\n\n.was-validated .custom-control-input:invalid ~ .custom-control-label::before, .custom-control-input.is-invalid ~ .custom-control-label::before {\n border-color: #dc3545;\n}\n\n.was-validated .custom-control-input:invalid:checked ~ .custom-control-label::before, .custom-control-input.is-invalid:checked ~ .custom-control-label::before {\n border-color: #e4606d;\n background-color: #e4606d;\n}\n\n.was-validated .custom-control-input:invalid:focus ~ .custom-control-label::before, .custom-control-input.is-invalid:focus ~ .custom-control-label::before {\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .custom-control-input:invalid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-invalid:focus:not(:checked) ~ .custom-control-label::before {\n border-color: #dc3545;\n}\n\n.was-validated .custom-file-input:invalid ~ .custom-file-label, .custom-file-input.is-invalid ~ .custom-file-label {\n border-color: #dc3545;\n}\n\n.was-validated .custom-file-input:invalid:focus ~ .custom-file-label, .custom-file-input.is-invalid:focus ~ .custom-file-label {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.form-inline {\n display: flex;\n flex-flow: row wrap;\n align-items: center;\n}\n\n.form-inline .form-check {\n width: 100%;\n}\n\n@media (min-width: 576px) {\n .form-inline label {\n display: flex;\n align-items: center;\n justify-content: center;\n margin-bottom: 0;\n }\n .form-inline .form-group {\n display: flex;\n flex: 0 0 auto;\n flex-flow: row wrap;\n align-items: center;\n margin-bottom: 0;\n }\n .form-inline .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .form-inline .form-control-plaintext {\n display: inline-block;\n }\n .form-inline .input-group,\n .form-inline .custom-select {\n width: auto;\n }\n .form-inline .form-check {\n display: flex;\n align-items: center;\n justify-content: center;\n width: auto;\n padding-left: 0;\n }\n .form-inline .form-check-input {\n position: relative;\n flex-shrink: 0;\n margin-top: 0;\n margin-right: 0.25rem;\n margin-left: 0;\n }\n .form-inline .custom-control {\n align-items: center;\n justify-content: center;\n }\n .form-inline .custom-control-label {\n margin-bottom: 0;\n }\n}\n\n.btn {\n display: inline-block;\n font-weight: 400;\n color: #212529;\n text-align: center;\n vertical-align: middle;\n cursor: pointer;\n user-select: none;\n background-color: transparent;\n border: 1px solid transparent;\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n line-height: 1.5;\n border-radius: 0.25rem;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .btn {\n transition: none;\n }\n}\n\n.btn:hover {\n color: #212529;\n text-decoration: none;\n}\n\n.btn:focus, .btn.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.btn.disabled, .btn:disabled {\n opacity: 0.65;\n}\n\na.btn.disabled,\nfieldset:disabled a.btn {\n pointer-events: none;\n}\n\n.btn-primary {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-primary:hover {\n color: #fff;\n background-color: #0069d9;\n border-color: #0062cc;\n}\n\n.btn-primary:focus, .btn-primary.focus {\n color: #fff;\n background-color: #0069d9;\n border-color: #0062cc;\n box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5);\n}\n\n.btn-primary.disabled, .btn-primary:disabled {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-primary:not(:disabled):not(.disabled):active, .btn-primary:not(:disabled):not(.disabled).active,\n.show > .btn-primary.dropdown-toggle {\n color: #fff;\n background-color: #0062cc;\n border-color: #005cbf;\n}\n\n.btn-primary:not(:disabled):not(.disabled):active:focus, .btn-primary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-primary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5);\n}\n\n.btn-secondary {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-secondary:hover {\n color: #fff;\n background-color: #5a6268;\n border-color: #545b62;\n}\n\n.btn-secondary:focus, .btn-secondary.focus {\n color: #fff;\n background-color: #5a6268;\n border-color: #545b62;\n box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5);\n}\n\n.btn-secondary.disabled, .btn-secondary:disabled {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-secondary:not(:disabled):not(.disabled):active, .btn-secondary:not(:disabled):not(.disabled).active,\n.show > .btn-secondary.dropdown-toggle {\n color: #fff;\n background-color: #545b62;\n border-color: #4e555b;\n}\n\n.btn-secondary:not(:disabled):not(.disabled):active:focus, .btn-secondary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-secondary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5);\n}\n\n.btn-success {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-success:hover {\n color: #fff;\n background-color: #218838;\n border-color: #1e7e34;\n}\n\n.btn-success:focus, .btn-success.focus {\n color: #fff;\n background-color: #218838;\n border-color: #1e7e34;\n box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5);\n}\n\n.btn-success.disabled, .btn-success:disabled {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-success:not(:disabled):not(.disabled):active, .btn-success:not(:disabled):not(.disabled).active,\n.show > .btn-success.dropdown-toggle {\n color: #fff;\n background-color: #1e7e34;\n border-color: #1c7430;\n}\n\n.btn-success:not(:disabled):not(.disabled):active:focus, .btn-success:not(:disabled):not(.disabled).active:focus,\n.show > .btn-success.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5);\n}\n\n.btn-info {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-info:hover {\n color: #fff;\n background-color: #138496;\n border-color: #117a8b;\n}\n\n.btn-info:focus, .btn-info.focus {\n color: #fff;\n background-color: #138496;\n border-color: #117a8b;\n box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5);\n}\n\n.btn-info.disabled, .btn-info:disabled {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-info:not(:disabled):not(.disabled):active, .btn-info:not(:disabled):not(.disabled).active,\n.show > .btn-info.dropdown-toggle {\n color: #fff;\n background-color: #117a8b;\n border-color: #10707f;\n}\n\n.btn-info:not(:disabled):not(.disabled):active:focus, .btn-info:not(:disabled):not(.disabled).active:focus,\n.show > .btn-info.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5);\n}\n\n.btn-warning {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-warning:hover {\n color: #212529;\n background-color: #e0a800;\n border-color: #d39e00;\n}\n\n.btn-warning:focus, .btn-warning.focus {\n color: #212529;\n background-color: #e0a800;\n border-color: #d39e00;\n box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5);\n}\n\n.btn-warning.disabled, .btn-warning:disabled {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-warning:not(:disabled):not(.disabled):active, .btn-warning:not(:disabled):not(.disabled).active,\n.show > .btn-warning.dropdown-toggle {\n color: #212529;\n background-color: #d39e00;\n border-color: #c69500;\n}\n\n.btn-warning:not(:disabled):not(.disabled):active:focus, .btn-warning:not(:disabled):not(.disabled).active:focus,\n.show > .btn-warning.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5);\n}\n\n.btn-danger {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-danger:hover {\n color: #fff;\n background-color: #c82333;\n border-color: #bd2130;\n}\n\n.btn-danger:focus, .btn-danger.focus {\n color: #fff;\n background-color: #c82333;\n border-color: #bd2130;\n box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5);\n}\n\n.btn-danger.disabled, .btn-danger:disabled {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-danger:not(:disabled):not(.disabled):active, .btn-danger:not(:disabled):not(.disabled).active,\n.show > .btn-danger.dropdown-toggle {\n color: #fff;\n background-color: #bd2130;\n border-color: #b21f2d;\n}\n\n.btn-danger:not(:disabled):not(.disabled):active:focus, .btn-danger:not(:disabled):not(.disabled).active:focus,\n.show > .btn-danger.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5);\n}\n\n.btn-light {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-light:hover {\n color: #212529;\n background-color: #e2e6ea;\n border-color: #dae0e5;\n}\n\n.btn-light:focus, .btn-light.focus {\n color: #212529;\n background-color: #e2e6ea;\n border-color: #dae0e5;\n box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5);\n}\n\n.btn-light.disabled, .btn-light:disabled {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-light:not(:disabled):not(.disabled):active, .btn-light:not(:disabled):not(.disabled).active,\n.show > .btn-light.dropdown-toggle {\n color: #212529;\n background-color: #dae0e5;\n border-color: #d3d9df;\n}\n\n.btn-light:not(:disabled):not(.disabled):active:focus, .btn-light:not(:disabled):not(.disabled).active:focus,\n.show > .btn-light.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5);\n}\n\n.btn-dark {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-dark:hover {\n color: #fff;\n background-color: #23272b;\n border-color: #1d2124;\n}\n\n.btn-dark:focus, .btn-dark.focus {\n color: #fff;\n background-color: #23272b;\n border-color: #1d2124;\n box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5);\n}\n\n.btn-dark.disabled, .btn-dark:disabled {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-dark:not(:disabled):not(.disabled):active, .btn-dark:not(:disabled):not(.disabled).active,\n.show > .btn-dark.dropdown-toggle {\n color: #fff;\n background-color: #1d2124;\n border-color: #171a1d;\n}\n\n.btn-dark:not(:disabled):not(.disabled):active:focus, .btn-dark:not(:disabled):not(.disabled).active:focus,\n.show > .btn-dark.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5);\n}\n\n.btn-outline-primary {\n color: #007bff;\n border-color: #007bff;\n}\n\n.btn-outline-primary:hover {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-outline-primary:focus, .btn-outline-primary.focus {\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.btn-outline-primary.disabled, .btn-outline-primary:disabled {\n color: #007bff;\n background-color: transparent;\n}\n\n.btn-outline-primary:not(:disabled):not(.disabled):active, .btn-outline-primary:not(:disabled):not(.disabled).active,\n.show > .btn-outline-primary.dropdown-toggle {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-outline-primary:not(:disabled):not(.disabled):active:focus, .btn-outline-primary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-primary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.btn-outline-secondary {\n color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-outline-secondary:hover {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-outline-secondary:focus, .btn-outline-secondary.focus {\n box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.btn-outline-secondary.disabled, .btn-outline-secondary:disabled {\n color: #6c757d;\n background-color: transparent;\n}\n\n.btn-outline-secondary:not(:disabled):not(.disabled):active, .btn-outline-secondary:not(:disabled):not(.disabled).active,\n.show > .btn-outline-secondary.dropdown-toggle {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-outline-secondary:not(:disabled):not(.disabled):active:focus, .btn-outline-secondary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-secondary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.btn-outline-success {\n color: #28a745;\n border-color: #28a745;\n}\n\n.btn-outline-success:hover {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-outline-success:focus, .btn-outline-success.focus {\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.btn-outline-success.disabled, .btn-outline-success:disabled {\n color: #28a745;\n background-color: transparent;\n}\n\n.btn-outline-success:not(:disabled):not(.disabled):active, .btn-outline-success:not(:disabled):not(.disabled).active,\n.show > .btn-outline-success.dropdown-toggle {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-outline-success:not(:disabled):not(.disabled):active:focus, .btn-outline-success:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-success.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.btn-outline-info {\n color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-outline-info:hover {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-outline-info:focus, .btn-outline-info.focus {\n box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.btn-outline-info.disabled, .btn-outline-info:disabled {\n color: #17a2b8;\n background-color: transparent;\n}\n\n.btn-outline-info:not(:disabled):not(.disabled):active, .btn-outline-info:not(:disabled):not(.disabled).active,\n.show > .btn-outline-info.dropdown-toggle {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-outline-info:not(:disabled):not(.disabled):active:focus, .btn-outline-info:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-info.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.btn-outline-warning {\n color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-outline-warning:hover {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-outline-warning:focus, .btn-outline-warning.focus {\n box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.btn-outline-warning.disabled, .btn-outline-warning:disabled {\n color: #ffc107;\n background-color: transparent;\n}\n\n.btn-outline-warning:not(:disabled):not(.disabled):active, .btn-outline-warning:not(:disabled):not(.disabled).active,\n.show > .btn-outline-warning.dropdown-toggle {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-outline-warning:not(:disabled):not(.disabled):active:focus, .btn-outline-warning:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-warning.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.btn-outline-danger {\n color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-outline-danger:hover {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-outline-danger:focus, .btn-outline-danger.focus {\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.btn-outline-danger.disabled, .btn-outline-danger:disabled {\n color: #dc3545;\n background-color: transparent;\n}\n\n.btn-outline-danger:not(:disabled):not(.disabled):active, .btn-outline-danger:not(:disabled):not(.disabled).active,\n.show > .btn-outline-danger.dropdown-toggle {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-outline-danger:not(:disabled):not(.disabled):active:focus, .btn-outline-danger:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-danger.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.btn-outline-light {\n color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-outline-light:hover {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-outline-light:focus, .btn-outline-light.focus {\n box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-outline-light.disabled, .btn-outline-light:disabled {\n color: #f8f9fa;\n background-color: transparent;\n}\n\n.btn-outline-light:not(:disabled):not(.disabled):active, .btn-outline-light:not(:disabled):not(.disabled).active,\n.show > .btn-outline-light.dropdown-toggle {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-outline-light:not(:disabled):not(.disabled):active:focus, .btn-outline-light:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-light.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-outline-dark {\n color: #343a40;\n border-color: #343a40;\n}\n\n.btn-outline-dark:hover {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-outline-dark:focus, .btn-outline-dark.focus {\n box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.btn-outline-dark.disabled, .btn-outline-dark:disabled {\n color: #343a40;\n background-color: transparent;\n}\n\n.btn-outline-dark:not(:disabled):not(.disabled):active, .btn-outline-dark:not(:disabled):not(.disabled).active,\n.show > .btn-outline-dark.dropdown-toggle {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-outline-dark:not(:disabled):not(.disabled):active:focus, .btn-outline-dark:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-dark.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.btn-link {\n font-weight: 400;\n color: #007bff;\n text-decoration: none;\n}\n\n.btn-link:hover {\n color: #0056b3;\n text-decoration: underline;\n}\n\n.btn-link:focus, .btn-link.focus {\n text-decoration: underline;\n box-shadow: none;\n}\n\n.btn-link:disabled, .btn-link.disabled {\n color: #6c757d;\n pointer-events: none;\n}\n\n.btn-lg, .btn-group-lg > .btn {\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n line-height: 1.5;\n border-radius: 0.3rem;\n}\n\n.btn-sm, .btn-group-sm > .btn {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n border-radius: 0.2rem;\n}\n\n.btn-block {\n display: block;\n width: 100%;\n}\n\n.btn-block + .btn-block {\n margin-top: 0.5rem;\n}\n\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n width: 100%;\n}\n\n.fade {\n transition: opacity 0.15s linear;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .fade {\n transition: none;\n }\n}\n\n.fade:not(.show) {\n opacity: 0;\n}\n\n.collapse:not(.show) {\n display: none;\n}\n\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n transition: height 0.35s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .collapsing {\n transition: none;\n }\n}\n\n.dropup,\n.dropright,\n.dropdown,\n.dropleft {\n position: relative;\n}\n\n.dropdown-toggle {\n white-space: nowrap;\n}\n\n.dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid;\n border-right: 0.3em solid transparent;\n border-bottom: 0;\n border-left: 0.3em solid transparent;\n}\n\n.dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 1000;\n display: none;\n float: left;\n min-width: 10rem;\n padding: 0.5rem 0;\n margin: 0.125rem 0 0;\n font-size: 1rem;\n color: #212529;\n text-align: left;\n list-style: none;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.15);\n border-radius: 0.25rem;\n}\n\n.dropdown-menu-left {\n right: auto;\n left: 0;\n}\n\n.dropdown-menu-right {\n right: 0;\n left: auto;\n}\n\n@media (min-width: 576px) {\n .dropdown-menu-sm-left {\n right: auto;\n left: 0;\n }\n .dropdown-menu-sm-right {\n right: 0;\n left: auto;\n }\n}\n\n@media (min-width: 768px) {\n .dropdown-menu-md-left {\n right: auto;\n left: 0;\n }\n .dropdown-menu-md-right {\n right: 0;\n left: auto;\n }\n}\n\n@media (min-width: 992px) {\n .dropdown-menu-lg-left {\n right: auto;\n left: 0;\n }\n .dropdown-menu-lg-right {\n right: 0;\n left: auto;\n }\n}\n\n@media (min-width: 1200px) {\n .dropdown-menu-xl-left {\n right: auto;\n left: 0;\n }\n .dropdown-menu-xl-right {\n right: 0;\n left: auto;\n }\n}\n\n.dropup .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-top: 0;\n margin-bottom: 0.125rem;\n}\n\n.dropup .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0;\n border-right: 0.3em solid transparent;\n border-bottom: 0.3em solid;\n border-left: 0.3em solid transparent;\n}\n\n.dropup .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropright .dropdown-menu {\n top: 0;\n right: auto;\n left: 100%;\n margin-top: 0;\n margin-left: 0.125rem;\n}\n\n.dropright .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-right: 0;\n border-bottom: 0.3em solid transparent;\n border-left: 0.3em solid;\n}\n\n.dropright .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropright .dropdown-toggle::after {\n vertical-align: 0;\n}\n\n.dropleft .dropdown-menu {\n top: 0;\n right: 100%;\n left: auto;\n margin-top: 0;\n margin-right: 0.125rem;\n}\n\n.dropleft .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n}\n\n.dropleft .dropdown-toggle::after {\n display: none;\n}\n\n.dropleft .dropdown-toggle::before {\n display: inline-block;\n margin-right: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-right: 0.3em solid;\n border-bottom: 0.3em solid transparent;\n}\n\n.dropleft .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropleft .dropdown-toggle::before {\n vertical-align: 0;\n}\n\n.dropdown-menu[x-placement^=\"top\"], .dropdown-menu[x-placement^=\"right\"], .dropdown-menu[x-placement^=\"bottom\"], .dropdown-menu[x-placement^=\"left\"] {\n right: auto;\n bottom: auto;\n}\n\n.dropdown-divider {\n height: 0;\n margin: 0.5rem 0;\n overflow: hidden;\n border-top: 1px solid #e9ecef;\n}\n\n.dropdown-item {\n display: block;\n width: 100%;\n padding: 0.25rem 1.5rem;\n clear: both;\n font-weight: 400;\n color: #212529;\n text-align: inherit;\n white-space: nowrap;\n background-color: transparent;\n border: 0;\n}\n\n.dropdown-item:hover, .dropdown-item:focus {\n color: #16181b;\n text-decoration: none;\n background-color: #f8f9fa;\n}\n\n.dropdown-item.active, .dropdown-item:active {\n color: #fff;\n text-decoration: none;\n background-color: #007bff;\n}\n\n.dropdown-item.disabled, .dropdown-item:disabled {\n color: #6c757d;\n pointer-events: none;\n background-color: transparent;\n}\n\n.dropdown-menu.show {\n display: block;\n}\n\n.dropdown-header {\n display: block;\n padding: 0.5rem 1.5rem;\n margin-bottom: 0;\n font-size: 0.875rem;\n color: #6c757d;\n white-space: nowrap;\n}\n\n.dropdown-item-text {\n display: block;\n padding: 0.25rem 1.5rem;\n color: #212529;\n}\n\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-flex;\n vertical-align: middle;\n}\n\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n position: relative;\n flex: 1 1 auto;\n}\n\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover {\n z-index: 1;\n}\n\n.btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n z-index: 1;\n}\n\n.btn-toolbar {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-start;\n}\n\n.btn-toolbar .input-group {\n width: auto;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) {\n margin-left: -1px;\n}\n\n.btn-group > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group > .btn-group:not(:last-child) > .btn {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.dropdown-toggle-split {\n padding-right: 0.5625rem;\n padding-left: 0.5625rem;\n}\n\n.dropdown-toggle-split::after,\n.dropup .dropdown-toggle-split::after,\n.dropright .dropdown-toggle-split::after {\n margin-left: 0;\n}\n\n.dropleft .dropdown-toggle-split::before {\n margin-right: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n padding-right: 0.375rem;\n padding-left: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n padding-right: 0.75rem;\n padding-left: 0.75rem;\n}\n\n.btn-group-vertical {\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n}\n\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n width: 100%;\n}\n\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) {\n margin-top: -1px;\n}\n\n.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group-vertical > .btn-group:not(:last-child) > .btn {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.btn-group-toggle > .btn,\n.btn-group-toggle > .btn-group > .btn {\n margin-bottom: 0;\n}\n\n.btn-group-toggle > .btn input[type=\"radio\"],\n.btn-group-toggle > .btn input[type=\"checkbox\"],\n.btn-group-toggle > .btn-group > .btn input[type=\"radio\"],\n.btn-group-toggle > .btn-group > .btn input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n\n.input-group {\n position: relative;\n display: flex;\n flex-wrap: wrap;\n align-items: stretch;\n width: 100%;\n}\n\n.input-group > .form-control,\n.input-group > .form-control-plaintext,\n.input-group > .custom-select,\n.input-group > .custom-file {\n position: relative;\n flex: 1 1 0%;\n min-width: 0;\n margin-bottom: 0;\n}\n\n.input-group > .form-control + .form-control,\n.input-group > .form-control + .custom-select,\n.input-group > .form-control + .custom-file,\n.input-group > .form-control-plaintext + .form-control,\n.input-group > .form-control-plaintext + .custom-select,\n.input-group > .form-control-plaintext + .custom-file,\n.input-group > .custom-select + .form-control,\n.input-group > .custom-select + .custom-select,\n.input-group > .custom-select + .custom-file,\n.input-group > .custom-file + .form-control,\n.input-group > .custom-file + .custom-select,\n.input-group > .custom-file + .custom-file {\n margin-left: -1px;\n}\n\n.input-group > .form-control:focus,\n.input-group > .custom-select:focus,\n.input-group > .custom-file .custom-file-input:focus ~ .custom-file-label {\n z-index: 3;\n}\n\n.input-group > .custom-file .custom-file-input:focus {\n z-index: 4;\n}\n\n.input-group > .form-control:not(:last-child),\n.input-group > .custom-select:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.input-group > .form-control:not(:first-child),\n.input-group > .custom-select:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.input-group > .custom-file {\n display: flex;\n align-items: center;\n}\n\n.input-group > .custom-file:not(:last-child) .custom-file-label,\n.input-group > .custom-file:not(:last-child) .custom-file-label::after {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.input-group > .custom-file:not(:first-child) .custom-file-label {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.input-group-prepend,\n.input-group-append {\n display: flex;\n}\n\n.input-group-prepend .btn,\n.input-group-append .btn {\n position: relative;\n z-index: 2;\n}\n\n.input-group-prepend .btn:focus,\n.input-group-append .btn:focus {\n z-index: 3;\n}\n\n.input-group-prepend .btn + .btn,\n.input-group-prepend .btn + .input-group-text,\n.input-group-prepend .input-group-text + .input-group-text,\n.input-group-prepend .input-group-text + .btn,\n.input-group-append .btn + .btn,\n.input-group-append .btn + .input-group-text,\n.input-group-append .input-group-text + .input-group-text,\n.input-group-append .input-group-text + .btn {\n margin-left: -1px;\n}\n\n.input-group-prepend {\n margin-right: -1px;\n}\n\n.input-group-append {\n margin-left: -1px;\n}\n\n.input-group-text {\n display: flex;\n align-items: center;\n padding: 0.375rem 0.75rem;\n margin-bottom: 0;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n text-align: center;\n white-space: nowrap;\n background-color: #e9ecef;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n}\n\n.input-group-text input[type=\"radio\"],\n.input-group-text input[type=\"checkbox\"] {\n margin-top: 0;\n}\n\n.input-group-lg > .form-control:not(textarea),\n.input-group-lg > .custom-select {\n height: calc(1.5em + 1rem + 2px);\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .custom-select,\n.input-group-lg > .input-group-prepend > .input-group-text,\n.input-group-lg > .input-group-append > .input-group-text,\n.input-group-lg > .input-group-prepend > .btn,\n.input-group-lg > .input-group-append > .btn {\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n line-height: 1.5;\n border-radius: 0.3rem;\n}\n\n.input-group-sm > .form-control:not(textarea),\n.input-group-sm > .custom-select {\n height: calc(1.5em + 0.5rem + 2px);\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .custom-select,\n.input-group-sm > .input-group-prepend > .input-group-text,\n.input-group-sm > .input-group-append > .input-group-text,\n.input-group-sm > .input-group-prepend > .btn,\n.input-group-sm > .input-group-append > .btn {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n border-radius: 0.2rem;\n}\n\n.input-group-lg > .custom-select,\n.input-group-sm > .custom-select {\n padding-right: 1.75rem;\n}\n\n.input-group > .input-group-prepend > .btn,\n.input-group > .input-group-prepend > .input-group-text,\n.input-group > .input-group-append:not(:last-child) > .btn,\n.input-group > .input-group-append:not(:last-child) > .input-group-text,\n.input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group > .input-group-append:last-child > .input-group-text:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.input-group > .input-group-append > .btn,\n.input-group > .input-group-append > .input-group-text,\n.input-group > .input-group-prepend:not(:first-child) > .btn,\n.input-group > .input-group-prepend:not(:first-child) > .input-group-text,\n.input-group > .input-group-prepend:first-child > .btn:not(:first-child),\n.input-group > .input-group-prepend:first-child > .input-group-text:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.custom-control {\n position: relative;\n display: block;\n min-height: 1.5rem;\n padding-left: 1.5rem;\n}\n\n.custom-control-inline {\n display: inline-flex;\n margin-right: 1rem;\n}\n\n.custom-control-input {\n position: absolute;\n left: 0;\n z-index: -1;\n width: 1rem;\n height: 1.25rem;\n opacity: 0;\n}\n\n.custom-control-input:checked ~ .custom-control-label::before {\n color: #fff;\n border-color: #007bff;\n background-color: #007bff;\n}\n\n.custom-control-input:focus ~ .custom-control-label::before {\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-control-input:focus:not(:checked) ~ .custom-control-label::before {\n border-color: #80bdff;\n}\n\n.custom-control-input:not(:disabled):active ~ .custom-control-label::before {\n color: #fff;\n background-color: #b3d7ff;\n border-color: #b3d7ff;\n}\n\n.custom-control-input[disabled] ~ .custom-control-label, .custom-control-input:disabled ~ .custom-control-label {\n color: #6c757d;\n}\n\n.custom-control-input[disabled] ~ .custom-control-label::before, .custom-control-input:disabled ~ .custom-control-label::before {\n background-color: #e9ecef;\n}\n\n.custom-control-label {\n position: relative;\n margin-bottom: 0;\n vertical-align: top;\n}\n\n.custom-control-label::before {\n position: absolute;\n top: 0.25rem;\n left: -1.5rem;\n display: block;\n width: 1rem;\n height: 1rem;\n pointer-events: none;\n content: \"\";\n background-color: #fff;\n border: #adb5bd solid 1px;\n}\n\n.custom-control-label::after {\n position: absolute;\n top: 0.25rem;\n left: -1.5rem;\n display: block;\n width: 1rem;\n height: 1rem;\n content: \"\";\n background: no-repeat 50% / 50% 50%;\n}\n\n.custom-checkbox .custom-control-label::before {\n border-radius: 0.25rem;\n}\n\n.custom-checkbox .custom-control-input:checked ~ .custom-control-label::after {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e\");\n}\n\n.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before {\n border-color: #007bff;\n background-color: #007bff;\n}\n\n.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::after {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e\");\n}\n\n.custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-radio .custom-control-label::before {\n border-radius: 50%;\n}\n\n.custom-radio .custom-control-input:checked ~ .custom-control-label::after {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\");\n}\n\n.custom-radio .custom-control-input:disabled:checked ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-switch {\n padding-left: 2.25rem;\n}\n\n.custom-switch .custom-control-label::before {\n left: -2.25rem;\n width: 1.75rem;\n pointer-events: all;\n border-radius: 0.5rem;\n}\n\n.custom-switch .custom-control-label::after {\n top: calc(0.25rem + 2px);\n left: calc(-2.25rem + 2px);\n width: calc(1rem - 4px);\n height: calc(1rem - 4px);\n background-color: #adb5bd;\n border-radius: 0.5rem;\n transition: transform 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-switch .custom-control-label::after {\n transition: none;\n }\n}\n\n.custom-switch .custom-control-input:checked ~ .custom-control-label::after {\n background-color: #fff;\n transform: translateX(0.75rem);\n}\n\n.custom-switch .custom-control-input:disabled:checked ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-select {\n display: inline-block;\n width: 100%;\n height: calc(1.5em + 0.75rem + 2px);\n padding: 0.375rem 1.75rem 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n vertical-align: middle;\n background: #fff url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") no-repeat right 0.75rem center/8px 10px;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n appearance: none;\n}\n\n.custom-select:focus {\n border-color: #80bdff;\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-select:focus::-ms-value {\n color: #495057;\n background-color: #fff;\n}\n\n.custom-select[multiple], .custom-select[size]:not([size=\"1\"]) {\n height: auto;\n padding-right: 0.75rem;\n background-image: none;\n}\n\n.custom-select:disabled {\n color: #6c757d;\n background-color: #e9ecef;\n}\n\n.custom-select::-ms-expand {\n display: none;\n}\n\n.custom-select:-moz-focusring {\n color: transparent;\n text-shadow: 0 0 0 #495057;\n}\n\n.custom-select-sm {\n height: calc(1.5em + 0.5rem + 2px);\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n padding-left: 0.5rem;\n font-size: 0.875rem;\n}\n\n.custom-select-lg {\n height: calc(1.5em + 1rem + 2px);\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n padding-left: 1rem;\n font-size: 1.25rem;\n}\n\n.custom-file {\n position: relative;\n display: inline-block;\n width: 100%;\n height: calc(1.5em + 0.75rem + 2px);\n margin-bottom: 0;\n}\n\n.custom-file-input {\n position: relative;\n z-index: 2;\n width: 100%;\n height: calc(1.5em + 0.75rem + 2px);\n margin: 0;\n opacity: 0;\n}\n\n.custom-file-input:focus ~ .custom-file-label {\n border-color: #80bdff;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-file-input[disabled] ~ .custom-file-label,\n.custom-file-input:disabled ~ .custom-file-label {\n background-color: #e9ecef;\n}\n\n.custom-file-input:lang(en) ~ .custom-file-label::after {\n content: \"Browse\";\n}\n\n.custom-file-input ~ .custom-file-label[data-browse]::after {\n content: attr(data-browse);\n}\n\n.custom-file-label {\n position: absolute;\n top: 0;\n right: 0;\n left: 0;\n z-index: 1;\n height: calc(1.5em + 0.75rem + 2px);\n padding: 0.375rem 0.75rem;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n background-color: #fff;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n}\n\n.custom-file-label::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n z-index: 3;\n display: block;\n height: calc(1.5em + 0.75rem);\n padding: 0.375rem 0.75rem;\n line-height: 1.5;\n color: #495057;\n content: \"Browse\";\n background-color: #e9ecef;\n border-left: inherit;\n border-radius: 0 0.25rem 0.25rem 0;\n}\n\n.custom-range {\n width: 100%;\n height: 1.4rem;\n padding: 0;\n background-color: transparent;\n appearance: none;\n}\n\n.custom-range:focus {\n outline: none;\n}\n\n.custom-range:focus::-webkit-slider-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range:focus::-moz-range-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range:focus::-ms-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range::-moz-focus-outer {\n border: 0;\n}\n\n.custom-range::-webkit-slider-thumb {\n width: 1rem;\n height: 1rem;\n margin-top: -0.25rem;\n background-color: #007bff;\n border: 0;\n border-radius: 1rem;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-range::-webkit-slider-thumb {\n transition: none;\n }\n}\n\n.custom-range::-webkit-slider-thumb:active {\n background-color: #b3d7ff;\n}\n\n.custom-range::-webkit-slider-runnable-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: #dee2e6;\n border-color: transparent;\n border-radius: 1rem;\n}\n\n.custom-range::-moz-range-thumb {\n width: 1rem;\n height: 1rem;\n background-color: #007bff;\n border: 0;\n border-radius: 1rem;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-range::-moz-range-thumb {\n transition: none;\n }\n}\n\n.custom-range::-moz-range-thumb:active {\n background-color: #b3d7ff;\n}\n\n.custom-range::-moz-range-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: #dee2e6;\n border-color: transparent;\n border-radius: 1rem;\n}\n\n.custom-range::-ms-thumb {\n width: 1rem;\n height: 1rem;\n margin-top: 0;\n margin-right: 0.2rem;\n margin-left: 0.2rem;\n background-color: #007bff;\n border: 0;\n border-radius: 1rem;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-range::-ms-thumb {\n transition: none;\n }\n}\n\n.custom-range::-ms-thumb:active {\n background-color: #b3d7ff;\n}\n\n.custom-range::-ms-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: transparent;\n border-color: transparent;\n border-width: 0.5rem;\n}\n\n.custom-range::-ms-fill-lower {\n background-color: #dee2e6;\n border-radius: 1rem;\n}\n\n.custom-range::-ms-fill-upper {\n margin-right: 15px;\n background-color: #dee2e6;\n border-radius: 1rem;\n}\n\n.custom-range:disabled::-webkit-slider-thumb {\n background-color: #adb5bd;\n}\n\n.custom-range:disabled::-webkit-slider-runnable-track {\n cursor: default;\n}\n\n.custom-range:disabled::-moz-range-thumb {\n background-color: #adb5bd;\n}\n\n.custom-range:disabled::-moz-range-track {\n cursor: default;\n}\n\n.custom-range:disabled::-ms-thumb {\n background-color: #adb5bd;\n}\n\n.custom-control-label::before,\n.custom-file-label,\n.custom-select {\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-control-label::before,\n .custom-file-label,\n .custom-select {\n transition: none;\n }\n}\n\n.nav {\n display: flex;\n flex-wrap: wrap;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.nav-link {\n display: block;\n padding: 0.5rem 1rem;\n}\n\n.nav-link:hover, .nav-link:focus {\n text-decoration: none;\n}\n\n.nav-link.disabled {\n color: #6c757d;\n pointer-events: none;\n cursor: default;\n}\n\n.nav-tabs {\n border-bottom: 1px solid #dee2e6;\n}\n\n.nav-tabs .nav-item {\n margin-bottom: -1px;\n}\n\n.nav-tabs .nav-link {\n border: 1px solid transparent;\n border-top-left-radius: 0.25rem;\n border-top-right-radius: 0.25rem;\n}\n\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n border-color: #e9ecef #e9ecef #dee2e6;\n}\n\n.nav-tabs .nav-link.disabled {\n color: #6c757d;\n background-color: transparent;\n border-color: transparent;\n}\n\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n color: #495057;\n background-color: #fff;\n border-color: #dee2e6 #dee2e6 #fff;\n}\n\n.nav-tabs .dropdown-menu {\n margin-top: -1px;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.nav-pills .nav-link {\n border-radius: 0.25rem;\n}\n\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n color: #fff;\n background-color: #007bff;\n}\n\n.nav-fill .nav-item {\n flex: 1 1 auto;\n text-align: center;\n}\n\n.nav-justified .nav-item {\n flex-basis: 0;\n flex-grow: 1;\n text-align: center;\n}\n\n.tab-content > .tab-pane {\n display: none;\n}\n\n.tab-content > .active {\n display: block;\n}\n\n.navbar {\n position: relative;\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n padding: 0.5rem 1rem;\n}\n\n.navbar .container,\n.navbar .container-fluid, .navbar .container-sm, .navbar .container-md, .navbar .container-lg, .navbar .container-xl {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n}\n\n.navbar-brand {\n display: inline-block;\n padding-top: 0.3125rem;\n padding-bottom: 0.3125rem;\n margin-right: 1rem;\n font-size: 1.25rem;\n line-height: inherit;\n white-space: nowrap;\n}\n\n.navbar-brand:hover, .navbar-brand:focus {\n text-decoration: none;\n}\n\n.navbar-nav {\n display: flex;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.navbar-nav .nav-link {\n padding-right: 0;\n padding-left: 0;\n}\n\n.navbar-nav .dropdown-menu {\n position: static;\n float: none;\n}\n\n.navbar-text {\n display: inline-block;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n}\n\n.navbar-collapse {\n flex-basis: 100%;\n flex-grow: 1;\n align-items: center;\n}\n\n.navbar-toggler {\n padding: 0.25rem 0.75rem;\n font-size: 1.25rem;\n line-height: 1;\n background-color: transparent;\n border: 1px solid transparent;\n border-radius: 0.25rem;\n}\n\n.navbar-toggler:hover, .navbar-toggler:focus {\n text-decoration: none;\n}\n\n.navbar-toggler-icon {\n display: inline-block;\n width: 1.5em;\n height: 1.5em;\n vertical-align: middle;\n content: \"\";\n background: no-repeat center center;\n background-size: 100% 100%;\n}\n\n@media (max-width: 575.98px) {\n .navbar-expand-sm > .container,\n .navbar-expand-sm > .container-fluid, .navbar-expand-sm > .container-sm, .navbar-expand-sm > .container-md, .navbar-expand-sm > .container-lg, .navbar-expand-sm > .container-xl {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 576px) {\n .navbar-expand-sm {\n flex-flow: row nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-sm .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-sm .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-sm .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-sm > .container,\n .navbar-expand-sm > .container-fluid, .navbar-expand-sm > .container-sm, .navbar-expand-sm > .container-md, .navbar-expand-sm > .container-lg, .navbar-expand-sm > .container-xl {\n flex-wrap: nowrap;\n }\n .navbar-expand-sm .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-sm .navbar-toggler {\n display: none;\n }\n}\n\n@media (max-width: 767.98px) {\n .navbar-expand-md > .container,\n .navbar-expand-md > .container-fluid, .navbar-expand-md > .container-sm, .navbar-expand-md > .container-md, .navbar-expand-md > .container-lg, .navbar-expand-md > .container-xl {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 768px) {\n .navbar-expand-md {\n flex-flow: row nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-md .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-md .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-md .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-md > .container,\n .navbar-expand-md > .container-fluid, .navbar-expand-md > .container-sm, .navbar-expand-md > .container-md, .navbar-expand-md > .container-lg, .navbar-expand-md > .container-xl {\n flex-wrap: nowrap;\n }\n .navbar-expand-md .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-md .navbar-toggler {\n display: none;\n }\n}\n\n@media (max-width: 991.98px) {\n .navbar-expand-lg > .container,\n .navbar-expand-lg > .container-fluid, .navbar-expand-lg > .container-sm, .navbar-expand-lg > .container-md, .navbar-expand-lg > .container-lg, .navbar-expand-lg > .container-xl {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 992px) {\n .navbar-expand-lg {\n flex-flow: row nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-lg .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-lg .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-lg .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-lg > .container,\n .navbar-expand-lg > .container-fluid, .navbar-expand-lg > .container-sm, .navbar-expand-lg > .container-md, .navbar-expand-lg > .container-lg, .navbar-expand-lg > .container-xl {\n flex-wrap: nowrap;\n }\n .navbar-expand-lg .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-lg .navbar-toggler {\n display: none;\n }\n}\n\n@media (max-width: 1199.98px) {\n .navbar-expand-xl > .container,\n .navbar-expand-xl > .container-fluid, .navbar-expand-xl > .container-sm, .navbar-expand-xl > .container-md, .navbar-expand-xl > .container-lg, .navbar-expand-xl > .container-xl {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 1200px) {\n .navbar-expand-xl {\n flex-flow: row nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-xl .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-xl .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-xl .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-xl > .container,\n .navbar-expand-xl > .container-fluid, .navbar-expand-xl > .container-sm, .navbar-expand-xl > .container-md, .navbar-expand-xl > .container-lg, .navbar-expand-xl > .container-xl {\n flex-wrap: nowrap;\n }\n .navbar-expand-xl .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-xl .navbar-toggler {\n display: none;\n }\n}\n\n.navbar-expand {\n flex-flow: row nowrap;\n justify-content: flex-start;\n}\n\n.navbar-expand > .container,\n.navbar-expand > .container-fluid, .navbar-expand > .container-sm, .navbar-expand > .container-md, .navbar-expand > .container-lg, .navbar-expand > .container-xl {\n padding-right: 0;\n padding-left: 0;\n}\n\n.navbar-expand .navbar-nav {\n flex-direction: row;\n}\n\n.navbar-expand .navbar-nav .dropdown-menu {\n position: absolute;\n}\n\n.navbar-expand .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n}\n\n.navbar-expand > .container,\n.navbar-expand > .container-fluid, .navbar-expand > .container-sm, .navbar-expand > .container-md, .navbar-expand > .container-lg, .navbar-expand > .container-xl {\n flex-wrap: nowrap;\n}\n\n.navbar-expand .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n}\n\n.navbar-expand .navbar-toggler {\n display: none;\n}\n\n.navbar-light .navbar-brand {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-nav .nav-link {\n color: rgba(0, 0, 0, 0.5);\n}\n\n.navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus {\n color: rgba(0, 0, 0, 0.7);\n}\n\n.navbar-light .navbar-nav .nav-link.disabled {\n color: rgba(0, 0, 0, 0.3);\n}\n\n.navbar-light .navbar-nav .show > .nav-link,\n.navbar-light .navbar-nav .active > .nav-link,\n.navbar-light .navbar-nav .nav-link.show,\n.navbar-light .navbar-nav .nav-link.active {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-toggler {\n color: rgba(0, 0, 0, 0.5);\n border-color: rgba(0, 0, 0, 0.1);\n}\n\n.navbar-light .navbar-toggler-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba(0, 0, 0, 0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-light .navbar-text {\n color: rgba(0, 0, 0, 0.5);\n}\n\n.navbar-light .navbar-text a {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-text a:hover, .navbar-light .navbar-text a:focus {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-dark .navbar-brand {\n color: #fff;\n}\n\n.navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus {\n color: #fff;\n}\n\n.navbar-dark .navbar-nav .nav-link {\n color: rgba(255, 255, 255, 0.5);\n}\n\n.navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus {\n color: rgba(255, 255, 255, 0.75);\n}\n\n.navbar-dark .navbar-nav .nav-link.disabled {\n color: rgba(255, 255, 255, 0.25);\n}\n\n.navbar-dark .navbar-nav .show > .nav-link,\n.navbar-dark .navbar-nav .active > .nav-link,\n.navbar-dark .navbar-nav .nav-link.show,\n.navbar-dark .navbar-nav .nav-link.active {\n color: #fff;\n}\n\n.navbar-dark .navbar-toggler {\n color: rgba(255, 255, 255, 0.5);\n border-color: rgba(255, 255, 255, 0.1);\n}\n\n.navbar-dark .navbar-toggler-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba(255, 255, 255, 0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-dark .navbar-text {\n color: rgba(255, 255, 255, 0.5);\n}\n\n.navbar-dark .navbar-text a {\n color: #fff;\n}\n\n.navbar-dark .navbar-text a:hover, .navbar-dark .navbar-text a:focus {\n color: #fff;\n}\n\n.card {\n position: relative;\n display: flex;\n flex-direction: column;\n min-width: 0;\n word-wrap: break-word;\n background-color: #fff;\n background-clip: border-box;\n border: 1px solid rgba(0, 0, 0, 0.125);\n border-radius: 0.25rem;\n}\n\n.card > hr {\n margin-right: 0;\n margin-left: 0;\n}\n\n.card > .list-group:first-child .list-group-item:first-child {\n border-top-left-radius: 0.25rem;\n border-top-right-radius: 0.25rem;\n}\n\n.card > .list-group:last-child .list-group-item:last-child {\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n}\n\n.card-body {\n flex: 1 1 auto;\n min-height: 1px;\n padding: 1.25rem;\n}\n\n.card-title {\n margin-bottom: 0.75rem;\n}\n\n.card-subtitle {\n margin-top: -0.375rem;\n margin-bottom: 0;\n}\n\n.card-text:last-child {\n margin-bottom: 0;\n}\n\n.card-link:hover {\n text-decoration: none;\n}\n\n.card-link + .card-link {\n margin-left: 1.25rem;\n}\n\n.card-header {\n padding: 0.75rem 1.25rem;\n margin-bottom: 0;\n background-color: rgba(0, 0, 0, 0.03);\n border-bottom: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-header:first-child {\n border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0;\n}\n\n.card-header + .list-group .list-group-item:first-child {\n border-top: 0;\n}\n\n.card-footer {\n padding: 0.75rem 1.25rem;\n background-color: rgba(0, 0, 0, 0.03);\n border-top: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-footer:last-child {\n border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px);\n}\n\n.card-header-tabs {\n margin-right: -0.625rem;\n margin-bottom: -0.75rem;\n margin-left: -0.625rem;\n border-bottom: 0;\n}\n\n.card-header-pills {\n margin-right: -0.625rem;\n margin-left: -0.625rem;\n}\n\n.card-img-overlay {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n padding: 1.25rem;\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n flex-shrink: 0;\n width: 100%;\n}\n\n.card-img,\n.card-img-top {\n border-top-left-radius: calc(0.25rem - 1px);\n border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.card-img,\n.card-img-bottom {\n border-bottom-right-radius: calc(0.25rem - 1px);\n border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.card-deck .card {\n margin-bottom: 15px;\n}\n\n@media (min-width: 576px) {\n .card-deck {\n display: flex;\n flex-flow: row wrap;\n margin-right: -15px;\n margin-left: -15px;\n }\n .card-deck .card {\n flex: 1 0 0%;\n margin-right: 15px;\n margin-bottom: 0;\n margin-left: 15px;\n }\n}\n\n.card-group > .card {\n margin-bottom: 15px;\n}\n\n@media (min-width: 576px) {\n .card-group {\n display: flex;\n flex-flow: row wrap;\n }\n .card-group > .card {\n flex: 1 0 0%;\n margin-bottom: 0;\n }\n .card-group > .card + .card {\n margin-left: 0;\n border-left: 0;\n }\n .card-group > .card:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n .card-group > .card:not(:last-child) .card-img-top,\n .card-group > .card:not(:last-child) .card-header {\n border-top-right-radius: 0;\n }\n .card-group > .card:not(:last-child) .card-img-bottom,\n .card-group > .card:not(:last-child) .card-footer {\n border-bottom-right-radius: 0;\n }\n .card-group > .card:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n .card-group > .card:not(:first-child) .card-img-top,\n .card-group > .card:not(:first-child) .card-header {\n border-top-left-radius: 0;\n }\n .card-group > .card:not(:first-child) .card-img-bottom,\n .card-group > .card:not(:first-child) .card-footer {\n border-bottom-left-radius: 0;\n }\n}\n\n.card-columns .card {\n margin-bottom: 0.75rem;\n}\n\n@media (min-width: 576px) {\n .card-columns {\n column-count: 3;\n column-gap: 1.25rem;\n orphans: 1;\n widows: 1;\n }\n .card-columns .card {\n display: inline-block;\n width: 100%;\n }\n}\n\n.accordion > .card {\n overflow: hidden;\n}\n\n.accordion > .card:not(:last-of-type) {\n border-bottom: 0;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.accordion > .card:not(:first-of-type) {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.accordion > .card > .card-header {\n border-radius: 0;\n margin-bottom: -1px;\n}\n\n.breadcrumb {\n display: flex;\n flex-wrap: wrap;\n padding: 0.75rem 1rem;\n margin-bottom: 1rem;\n list-style: none;\n background-color: #e9ecef;\n border-radius: 0.25rem;\n}\n\n.breadcrumb-item + .breadcrumb-item {\n padding-left: 0.5rem;\n}\n\n.breadcrumb-item + .breadcrumb-item::before {\n display: inline-block;\n padding-right: 0.5rem;\n color: #6c757d;\n content: \"/\";\n}\n\n.breadcrumb-item + .breadcrumb-item:hover::before {\n text-decoration: underline;\n}\n\n.breadcrumb-item + .breadcrumb-item:hover::before {\n text-decoration: none;\n}\n\n.breadcrumb-item.active {\n color: #6c757d;\n}\n\n.pagination {\n display: flex;\n padding-left: 0;\n list-style: none;\n border-radius: 0.25rem;\n}\n\n.page-link {\n position: relative;\n display: block;\n padding: 0.5rem 0.75rem;\n margin-left: -1px;\n line-height: 1.25;\n color: #007bff;\n background-color: #fff;\n border: 1px solid #dee2e6;\n}\n\n.page-link:hover {\n z-index: 2;\n color: #0056b3;\n text-decoration: none;\n background-color: #e9ecef;\n border-color: #dee2e6;\n}\n\n.page-link:focus {\n z-index: 3;\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.page-item:first-child .page-link {\n margin-left: 0;\n border-top-left-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n}\n\n.page-item:last-child .page-link {\n border-top-right-radius: 0.25rem;\n border-bottom-right-radius: 0.25rem;\n}\n\n.page-item.active .page-link {\n z-index: 3;\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.page-item.disabled .page-link {\n color: #6c757d;\n pointer-events: none;\n cursor: auto;\n background-color: #fff;\n border-color: #dee2e6;\n}\n\n.pagination-lg .page-link {\n padding: 0.75rem 1.5rem;\n font-size: 1.25rem;\n line-height: 1.5;\n}\n\n.pagination-lg .page-item:first-child .page-link {\n border-top-left-radius: 0.3rem;\n border-bottom-left-radius: 0.3rem;\n}\n\n.pagination-lg .page-item:last-child .page-link {\n border-top-right-radius: 0.3rem;\n border-bottom-right-radius: 0.3rem;\n}\n\n.pagination-sm .page-link {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n}\n\n.pagination-sm .page-item:first-child .page-link {\n border-top-left-radius: 0.2rem;\n border-bottom-left-radius: 0.2rem;\n}\n\n.pagination-sm .page-item:last-child .page-link {\n border-top-right-radius: 0.2rem;\n border-bottom-right-radius: 0.2rem;\n}\n\n.badge {\n display: inline-block;\n padding: 0.25em 0.4em;\n font-size: 75%;\n font-weight: 700;\n line-height: 1;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: 0.25rem;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .badge {\n transition: none;\n }\n}\n\na.badge:hover, a.badge:focus {\n text-decoration: none;\n}\n\n.badge:empty {\n display: none;\n}\n\n.btn .badge {\n position: relative;\n top: -1px;\n}\n\n.badge-pill {\n padding-right: 0.6em;\n padding-left: 0.6em;\n border-radius: 10rem;\n}\n\n.badge-primary {\n color: #fff;\n background-color: #007bff;\n}\n\na.badge-primary:hover, a.badge-primary:focus {\n color: #fff;\n background-color: #0062cc;\n}\n\na.badge-primary:focus, a.badge-primary.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.badge-secondary {\n color: #fff;\n background-color: #6c757d;\n}\n\na.badge-secondary:hover, a.badge-secondary:focus {\n color: #fff;\n background-color: #545b62;\n}\n\na.badge-secondary:focus, a.badge-secondary.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.badge-success {\n color: #fff;\n background-color: #28a745;\n}\n\na.badge-success:hover, a.badge-success:focus {\n color: #fff;\n background-color: #1e7e34;\n}\n\na.badge-success:focus, a.badge-success.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.badge-info {\n color: #fff;\n background-color: #17a2b8;\n}\n\na.badge-info:hover, a.badge-info:focus {\n color: #fff;\n background-color: #117a8b;\n}\n\na.badge-info:focus, a.badge-info.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.badge-warning {\n color: #212529;\n background-color: #ffc107;\n}\n\na.badge-warning:hover, a.badge-warning:focus {\n color: #212529;\n background-color: #d39e00;\n}\n\na.badge-warning:focus, a.badge-warning.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.badge-danger {\n color: #fff;\n background-color: #dc3545;\n}\n\na.badge-danger:hover, a.badge-danger:focus {\n color: #fff;\n background-color: #bd2130;\n}\n\na.badge-danger:focus, a.badge-danger.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.badge-light {\n color: #212529;\n background-color: #f8f9fa;\n}\n\na.badge-light:hover, a.badge-light:focus {\n color: #212529;\n background-color: #dae0e5;\n}\n\na.badge-light:focus, a.badge-light.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.badge-dark {\n color: #fff;\n background-color: #343a40;\n}\n\na.badge-dark:hover, a.badge-dark:focus {\n color: #fff;\n background-color: #1d2124;\n}\n\na.badge-dark:focus, a.badge-dark.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.jumbotron {\n padding: 2rem 1rem;\n margin-bottom: 2rem;\n background-color: #e9ecef;\n border-radius: 0.3rem;\n}\n\n@media (min-width: 576px) {\n .jumbotron {\n padding: 4rem 2rem;\n }\n}\n\n.jumbotron-fluid {\n padding-right: 0;\n padding-left: 0;\n border-radius: 0;\n}\n\n.alert {\n position: relative;\n padding: 0.75rem 1.25rem;\n margin-bottom: 1rem;\n border: 1px solid transparent;\n border-radius: 0.25rem;\n}\n\n.alert-heading {\n color: inherit;\n}\n\n.alert-link {\n font-weight: 700;\n}\n\n.alert-dismissible {\n padding-right: 4rem;\n}\n\n.alert-dismissible .close {\n position: absolute;\n top: 0;\n right: 0;\n padding: 0.75rem 1.25rem;\n color: inherit;\n}\n\n.alert-primary {\n color: #004085;\n background-color: #cce5ff;\n border-color: #b8daff;\n}\n\n.alert-primary hr {\n border-top-color: #9fcdff;\n}\n\n.alert-primary .alert-link {\n color: #002752;\n}\n\n.alert-secondary {\n color: #383d41;\n background-color: #e2e3e5;\n border-color: #d6d8db;\n}\n\n.alert-secondary hr {\n border-top-color: #c8cbcf;\n}\n\n.alert-secondary .alert-link {\n color: #202326;\n}\n\n.alert-success {\n color: #155724;\n background-color: #d4edda;\n border-color: #c3e6cb;\n}\n\n.alert-success hr {\n border-top-color: #b1dfbb;\n}\n\n.alert-success .alert-link {\n color: #0b2e13;\n}\n\n.alert-info {\n color: #0c5460;\n background-color: #d1ecf1;\n border-color: #bee5eb;\n}\n\n.alert-info hr {\n border-top-color: #abdde5;\n}\n\n.alert-info .alert-link {\n color: #062c33;\n}\n\n.alert-warning {\n color: #856404;\n background-color: #fff3cd;\n border-color: #ffeeba;\n}\n\n.alert-warning hr {\n border-top-color: #ffe8a1;\n}\n\n.alert-warning .alert-link {\n color: #533f03;\n}\n\n.alert-danger {\n color: #721c24;\n background-color: #f8d7da;\n border-color: #f5c6cb;\n}\n\n.alert-danger hr {\n border-top-color: #f1b0b7;\n}\n\n.alert-danger .alert-link {\n color: #491217;\n}\n\n.alert-light {\n color: #818182;\n background-color: #fefefe;\n border-color: #fdfdfe;\n}\n\n.alert-light hr {\n border-top-color: #ececf6;\n}\n\n.alert-light .alert-link {\n color: #686868;\n}\n\n.alert-dark {\n color: #1b1e21;\n background-color: #d6d8d9;\n border-color: #c6c8ca;\n}\n\n.alert-dark hr {\n border-top-color: #b9bbbe;\n}\n\n.alert-dark .alert-link {\n color: #040505;\n}\n\n@keyframes progress-bar-stripes {\n from {\n background-position: 1rem 0;\n }\n to {\n background-position: 0 0;\n }\n}\n\n.progress {\n display: flex;\n height: 1rem;\n overflow: hidden;\n font-size: 0.75rem;\n background-color: #e9ecef;\n border-radius: 0.25rem;\n}\n\n.progress-bar {\n display: flex;\n flex-direction: column;\n justify-content: center;\n overflow: hidden;\n color: #fff;\n text-align: center;\n white-space: nowrap;\n background-color: #007bff;\n transition: width 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .progress-bar {\n transition: none;\n }\n}\n\n.progress-bar-striped {\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-size: 1rem 1rem;\n}\n\n.progress-bar-animated {\n animation: progress-bar-stripes 1s linear infinite;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .progress-bar-animated {\n animation: none;\n }\n}\n\n.media {\n display: flex;\n align-items: flex-start;\n}\n\n.media-body {\n flex: 1;\n}\n\n.list-group {\n display: flex;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n}\n\n.list-group-item-action {\n width: 100%;\n color: #495057;\n text-align: inherit;\n}\n\n.list-group-item-action:hover, .list-group-item-action:focus {\n z-index: 1;\n color: #495057;\n text-decoration: none;\n background-color: #f8f9fa;\n}\n\n.list-group-item-action:active {\n color: #212529;\n background-color: #e9ecef;\n}\n\n.list-group-item {\n position: relative;\n display: block;\n padding: 0.75rem 1.25rem;\n background-color: #fff;\n border: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.list-group-item:first-child {\n border-top-left-radius: 0.25rem;\n border-top-right-radius: 0.25rem;\n}\n\n.list-group-item:last-child {\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n}\n\n.list-group-item.disabled, .list-group-item:disabled {\n color: #6c757d;\n pointer-events: none;\n background-color: #fff;\n}\n\n.list-group-item.active {\n z-index: 2;\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.list-group-item + .list-group-item {\n border-top-width: 0;\n}\n\n.list-group-item + .list-group-item.active {\n margin-top: -1px;\n border-top-width: 1px;\n}\n\n.list-group-horizontal {\n flex-direction: row;\n}\n\n.list-group-horizontal .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n}\n\n.list-group-horizontal .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n}\n\n.list-group-horizontal .list-group-item.active {\n margin-top: 0;\n}\n\n.list-group-horizontal .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n}\n\n.list-group-horizontal .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n}\n\n@media (min-width: 576px) {\n .list-group-horizontal-sm {\n flex-direction: row;\n }\n .list-group-horizontal-sm .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-sm .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-sm .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-sm .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n }\n .list-group-horizontal-sm .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n }\n}\n\n@media (min-width: 768px) {\n .list-group-horizontal-md {\n flex-direction: row;\n }\n .list-group-horizontal-md .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-md .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-md .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-md .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n }\n .list-group-horizontal-md .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n }\n}\n\n@media (min-width: 992px) {\n .list-group-horizontal-lg {\n flex-direction: row;\n }\n .list-group-horizontal-lg .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-lg .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-lg .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-lg .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n }\n .list-group-horizontal-lg .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n }\n}\n\n@media (min-width: 1200px) {\n .list-group-horizontal-xl {\n flex-direction: row;\n }\n .list-group-horizontal-xl .list-group-item:first-child {\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-xl .list-group-item:last-child {\n border-top-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-xl .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-xl .list-group-item + .list-group-item {\n border-top-width: 1px;\n border-left-width: 0;\n }\n .list-group-horizontal-xl .list-group-item + .list-group-item.active {\n margin-left: -1px;\n border-left-width: 1px;\n }\n}\n\n.list-group-flush .list-group-item {\n border-right-width: 0;\n border-left-width: 0;\n border-radius: 0;\n}\n\n.list-group-flush .list-group-item:first-child {\n border-top-width: 0;\n}\n\n.list-group-flush:last-child .list-group-item:last-child {\n border-bottom-width: 0;\n}\n\n.list-group-item-primary {\n color: #004085;\n background-color: #b8daff;\n}\n\n.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {\n color: #004085;\n background-color: #9fcdff;\n}\n\n.list-group-item-primary.list-group-item-action.active {\n color: #fff;\n background-color: #004085;\n border-color: #004085;\n}\n\n.list-group-item-secondary {\n color: #383d41;\n background-color: #d6d8db;\n}\n\n.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {\n color: #383d41;\n background-color: #c8cbcf;\n}\n\n.list-group-item-secondary.list-group-item-action.active {\n color: #fff;\n background-color: #383d41;\n border-color: #383d41;\n}\n\n.list-group-item-success {\n color: #155724;\n background-color: #c3e6cb;\n}\n\n.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {\n color: #155724;\n background-color: #b1dfbb;\n}\n\n.list-group-item-success.list-group-item-action.active {\n color: #fff;\n background-color: #155724;\n border-color: #155724;\n}\n\n.list-group-item-info {\n color: #0c5460;\n background-color: #bee5eb;\n}\n\n.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {\n color: #0c5460;\n background-color: #abdde5;\n}\n\n.list-group-item-info.list-group-item-action.active {\n color: #fff;\n background-color: #0c5460;\n border-color: #0c5460;\n}\n\n.list-group-item-warning {\n color: #856404;\n background-color: #ffeeba;\n}\n\n.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {\n color: #856404;\n background-color: #ffe8a1;\n}\n\n.list-group-item-warning.list-group-item-action.active {\n color: #fff;\n background-color: #856404;\n border-color: #856404;\n}\n\n.list-group-item-danger {\n color: #721c24;\n background-color: #f5c6cb;\n}\n\n.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {\n color: #721c24;\n background-color: #f1b0b7;\n}\n\n.list-group-item-danger.list-group-item-action.active {\n color: #fff;\n background-color: #721c24;\n border-color: #721c24;\n}\n\n.list-group-item-light {\n color: #818182;\n background-color: #fdfdfe;\n}\n\n.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {\n color: #818182;\n background-color: #ececf6;\n}\n\n.list-group-item-light.list-group-item-action.active {\n color: #fff;\n background-color: #818182;\n border-color: #818182;\n}\n\n.list-group-item-dark {\n color: #1b1e21;\n background-color: #c6c8ca;\n}\n\n.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {\n color: #1b1e21;\n background-color: #b9bbbe;\n}\n\n.list-group-item-dark.list-group-item-action.active {\n color: #fff;\n background-color: #1b1e21;\n border-color: #1b1e21;\n}\n\n.close {\n float: right;\n font-size: 1.5rem;\n font-weight: 700;\n line-height: 1;\n color: #000;\n text-shadow: 0 1px 0 #fff;\n opacity: .5;\n}\n\n.close:hover {\n color: #000;\n text-decoration: none;\n}\n\n.close:not(:disabled):not(.disabled):hover, .close:not(:disabled):not(.disabled):focus {\n opacity: .75;\n}\n\nbutton.close {\n padding: 0;\n background-color: transparent;\n border: 0;\n appearance: none;\n}\n\na.close.disabled {\n pointer-events: none;\n}\n\n.toast {\n max-width: 350px;\n overflow: hidden;\n font-size: 0.875rem;\n background-color: rgba(255, 255, 255, 0.85);\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.1);\n box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.1);\n backdrop-filter: blur(10px);\n opacity: 0;\n border-radius: 0.25rem;\n}\n\n.toast:not(:last-child) {\n margin-bottom: 0.75rem;\n}\n\n.toast.showing {\n opacity: 1;\n}\n\n.toast.show {\n display: block;\n opacity: 1;\n}\n\n.toast.hide {\n display: none;\n}\n\n.toast-header {\n display: flex;\n align-items: center;\n padding: 0.25rem 0.75rem;\n color: #6c757d;\n background-color: rgba(255, 255, 255, 0.85);\n background-clip: padding-box;\n border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n}\n\n.toast-body {\n padding: 0.75rem;\n}\n\n.modal-open {\n overflow: hidden;\n}\n\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto;\n}\n\n.modal {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1050;\n display: none;\n width: 100%;\n height: 100%;\n overflow: hidden;\n outline: 0;\n}\n\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 0.5rem;\n pointer-events: none;\n}\n\n.modal.fade .modal-dialog {\n transition: transform 0.3s ease-out;\n transform: translate(0, -50px);\n}\n\n@media (prefers-reduced-motion: reduce) {\n .modal.fade .modal-dialog {\n transition: none;\n }\n}\n\n.modal.show .modal-dialog {\n transform: none;\n}\n\n.modal.modal-static .modal-dialog {\n transform: scale(1.02);\n}\n\n.modal-dialog-scrollable {\n display: flex;\n max-height: calc(100% - 1rem);\n}\n\n.modal-dialog-scrollable .modal-content {\n max-height: calc(100vh - 1rem);\n overflow: hidden;\n}\n\n.modal-dialog-scrollable .modal-header,\n.modal-dialog-scrollable .modal-footer {\n flex-shrink: 0;\n}\n\n.modal-dialog-scrollable .modal-body {\n overflow-y: auto;\n}\n\n.modal-dialog-centered {\n display: flex;\n align-items: center;\n min-height: calc(100% - 1rem);\n}\n\n.modal-dialog-centered::before {\n display: block;\n height: calc(100vh - 1rem);\n content: \"\";\n}\n\n.modal-dialog-centered.modal-dialog-scrollable {\n flex-direction: column;\n justify-content: center;\n height: 100%;\n}\n\n.modal-dialog-centered.modal-dialog-scrollable .modal-content {\n max-height: none;\n}\n\n.modal-dialog-centered.modal-dialog-scrollable::before {\n content: none;\n}\n\n.modal-content {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%;\n pointer-events: auto;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 0.3rem;\n outline: 0;\n}\n\n.modal-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1040;\n width: 100vw;\n height: 100vh;\n background-color: #000;\n}\n\n.modal-backdrop.fade {\n opacity: 0;\n}\n\n.modal-backdrop.show {\n opacity: 0.5;\n}\n\n.modal-header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n padding: 1rem 1rem;\n border-bottom: 1px solid #dee2e6;\n border-top-left-radius: calc(0.3rem - 1px);\n border-top-right-radius: calc(0.3rem - 1px);\n}\n\n.modal-header .close {\n padding: 1rem 1rem;\n margin: -1rem -1rem -1rem auto;\n}\n\n.modal-title {\n margin-bottom: 0;\n line-height: 1.5;\n}\n\n.modal-body {\n position: relative;\n flex: 1 1 auto;\n padding: 1rem;\n}\n\n.modal-footer {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: flex-end;\n padding: 0.75rem;\n border-top: 1px solid #dee2e6;\n border-bottom-right-radius: calc(0.3rem - 1px);\n border-bottom-left-radius: calc(0.3rem - 1px);\n}\n\n.modal-footer > * {\n margin: 0.25rem;\n}\n\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n\n@media (min-width: 576px) {\n .modal-dialog {\n max-width: 500px;\n margin: 1.75rem auto;\n }\n .modal-dialog-scrollable {\n max-height: calc(100% - 3.5rem);\n }\n .modal-dialog-scrollable .modal-content {\n max-height: calc(100vh - 3.5rem);\n }\n .modal-dialog-centered {\n min-height: calc(100% - 3.5rem);\n }\n .modal-dialog-centered::before {\n height: calc(100vh - 3.5rem);\n }\n .modal-sm {\n max-width: 300px;\n }\n}\n\n@media (min-width: 992px) {\n .modal-lg,\n .modal-xl {\n max-width: 800px;\n }\n}\n\n@media (min-width: 1200px) {\n .modal-xl {\n max-width: 1140px;\n }\n}\n\n.tooltip {\n position: absolute;\n z-index: 1070;\n display: block;\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n white-space: normal;\n line-break: auto;\n font-size: 0.875rem;\n word-wrap: break-word;\n opacity: 0;\n}\n\n.tooltip.show {\n opacity: 0.9;\n}\n\n.tooltip .arrow {\n position: absolute;\n display: block;\n width: 0.8rem;\n height: 0.4rem;\n}\n\n.tooltip .arrow::before {\n position: absolute;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n}\n\n.bs-tooltip-top, .bs-tooltip-auto[x-placement^=\"top\"] {\n padding: 0.4rem 0;\n}\n\n.bs-tooltip-top .arrow, .bs-tooltip-auto[x-placement^=\"top\"] .arrow {\n bottom: 0;\n}\n\n.bs-tooltip-top .arrow::before, .bs-tooltip-auto[x-placement^=\"top\"] .arrow::before {\n top: 0;\n border-width: 0.4rem 0.4rem 0;\n border-top-color: #000;\n}\n\n.bs-tooltip-right, .bs-tooltip-auto[x-placement^=\"right\"] {\n padding: 0 0.4rem;\n}\n\n.bs-tooltip-right .arrow, .bs-tooltip-auto[x-placement^=\"right\"] .arrow {\n left: 0;\n width: 0.4rem;\n height: 0.8rem;\n}\n\n.bs-tooltip-right .arrow::before, .bs-tooltip-auto[x-placement^=\"right\"] .arrow::before {\n right: 0;\n border-width: 0.4rem 0.4rem 0.4rem 0;\n border-right-color: #000;\n}\n\n.bs-tooltip-bottom, .bs-tooltip-auto[x-placement^=\"bottom\"] {\n padding: 0.4rem 0;\n}\n\n.bs-tooltip-bottom .arrow, .bs-tooltip-auto[x-placement^=\"bottom\"] .arrow {\n top: 0;\n}\n\n.bs-tooltip-bottom .arrow::before, .bs-tooltip-auto[x-placement^=\"bottom\"] .arrow::before {\n bottom: 0;\n border-width: 0 0.4rem 0.4rem;\n border-bottom-color: #000;\n}\n\n.bs-tooltip-left, .bs-tooltip-auto[x-placement^=\"left\"] {\n padding: 0 0.4rem;\n}\n\n.bs-tooltip-left .arrow, .bs-tooltip-auto[x-placement^=\"left\"] .arrow {\n right: 0;\n width: 0.4rem;\n height: 0.8rem;\n}\n\n.bs-tooltip-left .arrow::before, .bs-tooltip-auto[x-placement^=\"left\"] .arrow::before {\n left: 0;\n border-width: 0.4rem 0 0.4rem 0.4rem;\n border-left-color: #000;\n}\n\n.tooltip-inner {\n max-width: 200px;\n padding: 0.25rem 0.5rem;\n color: #fff;\n text-align: center;\n background-color: #000;\n border-radius: 0.25rem;\n}\n\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1060;\n display: block;\n max-width: 276px;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n white-space: normal;\n line-break: auto;\n font-size: 0.875rem;\n word-wrap: break-word;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 0.3rem;\n}\n\n.popover .arrow {\n position: absolute;\n display: block;\n width: 1rem;\n height: 0.5rem;\n margin: 0 0.3rem;\n}\n\n.popover .arrow::before, .popover .arrow::after {\n position: absolute;\n display: block;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n}\n\n.bs-popover-top, .bs-popover-auto[x-placement^=\"top\"] {\n margin-bottom: 0.5rem;\n}\n\n.bs-popover-top > .arrow, .bs-popover-auto[x-placement^=\"top\"] > .arrow {\n bottom: calc(-0.5rem - 1px);\n}\n\n.bs-popover-top > .arrow::before, .bs-popover-auto[x-placement^=\"top\"] > .arrow::before {\n bottom: 0;\n border-width: 0.5rem 0.5rem 0;\n border-top-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-top > .arrow::after, .bs-popover-auto[x-placement^=\"top\"] > .arrow::after {\n bottom: 1px;\n border-width: 0.5rem 0.5rem 0;\n border-top-color: #fff;\n}\n\n.bs-popover-right, .bs-popover-auto[x-placement^=\"right\"] {\n margin-left: 0.5rem;\n}\n\n.bs-popover-right > .arrow, .bs-popover-auto[x-placement^=\"right\"] > .arrow {\n left: calc(-0.5rem - 1px);\n width: 0.5rem;\n height: 1rem;\n margin: 0.3rem 0;\n}\n\n.bs-popover-right > .arrow::before, .bs-popover-auto[x-placement^=\"right\"] > .arrow::before {\n left: 0;\n border-width: 0.5rem 0.5rem 0.5rem 0;\n border-right-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-right > .arrow::after, .bs-popover-auto[x-placement^=\"right\"] > .arrow::after {\n left: 1px;\n border-width: 0.5rem 0.5rem 0.5rem 0;\n border-right-color: #fff;\n}\n\n.bs-popover-bottom, .bs-popover-auto[x-placement^=\"bottom\"] {\n margin-top: 0.5rem;\n}\n\n.bs-popover-bottom > .arrow, .bs-popover-auto[x-placement^=\"bottom\"] > .arrow {\n top: calc(-0.5rem - 1px);\n}\n\n.bs-popover-bottom > .arrow::before, .bs-popover-auto[x-placement^=\"bottom\"] > .arrow::before {\n top: 0;\n border-width: 0 0.5rem 0.5rem 0.5rem;\n border-bottom-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-bottom > .arrow::after, .bs-popover-auto[x-placement^=\"bottom\"] > .arrow::after {\n top: 1px;\n border-width: 0 0.5rem 0.5rem 0.5rem;\n border-bottom-color: #fff;\n}\n\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[x-placement^=\"bottom\"] .popover-header::before {\n position: absolute;\n top: 0;\n left: 50%;\n display: block;\n width: 1rem;\n margin-left: -0.5rem;\n content: \"\";\n border-bottom: 1px solid #f7f7f7;\n}\n\n.bs-popover-left, .bs-popover-auto[x-placement^=\"left\"] {\n margin-right: 0.5rem;\n}\n\n.bs-popover-left > .arrow, .bs-popover-auto[x-placement^=\"left\"] > .arrow {\n right: calc(-0.5rem - 1px);\n width: 0.5rem;\n height: 1rem;\n margin: 0.3rem 0;\n}\n\n.bs-popover-left > .arrow::before, .bs-popover-auto[x-placement^=\"left\"] > .arrow::before {\n right: 0;\n border-width: 0.5rem 0 0.5rem 0.5rem;\n border-left-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-left > .arrow::after, .bs-popover-auto[x-placement^=\"left\"] > .arrow::after {\n right: 1px;\n border-width: 0.5rem 0 0.5rem 0.5rem;\n border-left-color: #fff;\n}\n\n.popover-header {\n padding: 0.5rem 0.75rem;\n margin-bottom: 0;\n font-size: 1rem;\n background-color: #f7f7f7;\n border-bottom: 1px solid #ebebeb;\n border-top-left-radius: calc(0.3rem - 1px);\n border-top-right-radius: calc(0.3rem - 1px);\n}\n\n.popover-header:empty {\n display: none;\n}\n\n.popover-body {\n padding: 0.5rem 0.75rem;\n color: #212529;\n}\n\n.carousel {\n position: relative;\n}\n\n.carousel.pointer-event {\n touch-action: pan-y;\n}\n\n.carousel-inner {\n position: relative;\n width: 100%;\n overflow: hidden;\n}\n\n.carousel-inner::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.carousel-item {\n position: relative;\n display: none;\n float: left;\n width: 100%;\n margin-right: -100%;\n backface-visibility: hidden;\n transition: transform 0.6s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-item {\n transition: none;\n }\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n display: block;\n}\n\n.carousel-item-next:not(.carousel-item-left),\n.active.carousel-item-right {\n transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-right),\n.active.carousel-item-left {\n transform: translateX(-100%);\n}\n\n.carousel-fade .carousel-item {\n opacity: 0;\n transition-property: opacity;\n transform: none;\n}\n\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-left,\n.carousel-fade .carousel-item-prev.carousel-item-right {\n z-index: 1;\n opacity: 1;\n}\n\n.carousel-fade .active.carousel-item-left,\n.carousel-fade .active.carousel-item-right {\n z-index: 0;\n opacity: 0;\n transition: opacity 0s 0.6s;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-fade .active.carousel-item-left,\n .carousel-fade .active.carousel-item-right {\n transition: none;\n }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 15%;\n color: #fff;\n text-align: center;\n opacity: 0.5;\n transition: opacity 0.15s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-control-prev,\n .carousel-control-next {\n transition: none;\n }\n}\n\n.carousel-control-prev:hover, .carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n color: #fff;\n text-decoration: none;\n outline: 0;\n opacity: 0.9;\n}\n\n.carousel-control-prev {\n left: 0;\n}\n\n.carousel-control-next {\n right: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n display: inline-block;\n width: 20px;\n height: 20px;\n background: no-repeat 50% / 100% 100%;\n}\n\n.carousel-control-prev-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e\");\n}\n\n.carousel-control-next-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e\");\n}\n\n.carousel-indicators {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 15;\n display: flex;\n justify-content: center;\n padding-left: 0;\n margin-right: 15%;\n margin-left: 15%;\n list-style: none;\n}\n\n.carousel-indicators li {\n box-sizing: content-box;\n flex: 0 1 auto;\n width: 30px;\n height: 3px;\n margin-right: 3px;\n margin-left: 3px;\n text-indent: -999px;\n cursor: pointer;\n background-color: #fff;\n background-clip: padding-box;\n border-top: 10px solid transparent;\n border-bottom: 10px solid transparent;\n opacity: .5;\n transition: opacity 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-indicators li {\n transition: none;\n }\n}\n\n.carousel-indicators .active {\n opacity: 1;\n}\n\n.carousel-caption {\n position: absolute;\n right: 15%;\n bottom: 20px;\n left: 15%;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: #fff;\n text-align: center;\n}\n\n@keyframes spinner-border {\n to {\n transform: rotate(360deg);\n }\n}\n\n.spinner-border {\n display: inline-block;\n width: 2rem;\n height: 2rem;\n vertical-align: text-bottom;\n border: 0.25em solid currentColor;\n border-right-color: transparent;\n border-radius: 50%;\n animation: spinner-border .75s linear infinite;\n}\n\n.spinner-border-sm {\n width: 1rem;\n height: 1rem;\n border-width: 0.2em;\n}\n\n@keyframes spinner-grow {\n 0% {\n transform: scale(0);\n }\n 50% {\n opacity: 1;\n }\n}\n\n.spinner-grow {\n display: inline-block;\n width: 2rem;\n height: 2rem;\n vertical-align: text-bottom;\n background-color: currentColor;\n border-radius: 50%;\n opacity: 0;\n animation: spinner-grow .75s linear infinite;\n}\n\n.spinner-grow-sm {\n width: 1rem;\n height: 1rem;\n}\n\n.align-baseline {\n vertical-align: baseline !important;\n}\n\n.align-top {\n vertical-align: top !important;\n}\n\n.align-middle {\n vertical-align: middle !important;\n}\n\n.align-bottom {\n vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n vertical-align: text-top !important;\n}\n\n.bg-primary {\n background-color: #007bff !important;\n}\n\na.bg-primary:hover, a.bg-primary:focus,\nbutton.bg-primary:hover,\nbutton.bg-primary:focus {\n background-color: #0062cc !important;\n}\n\n.bg-secondary {\n background-color: #6c757d !important;\n}\n\na.bg-secondary:hover, a.bg-secondary:focus,\nbutton.bg-secondary:hover,\nbutton.bg-secondary:focus {\n background-color: #545b62 !important;\n}\n\n.bg-success {\n background-color: #28a745 !important;\n}\n\na.bg-success:hover, a.bg-success:focus,\nbutton.bg-success:hover,\nbutton.bg-success:focus {\n background-color: #1e7e34 !important;\n}\n\n.bg-info {\n background-color: #17a2b8 !important;\n}\n\na.bg-info:hover, a.bg-info:focus,\nbutton.bg-info:hover,\nbutton.bg-info:focus {\n background-color: #117a8b !important;\n}\n\n.bg-warning {\n background-color: #ffc107 !important;\n}\n\na.bg-warning:hover, a.bg-warning:focus,\nbutton.bg-warning:hover,\nbutton.bg-warning:focus {\n background-color: #d39e00 !important;\n}\n\n.bg-danger {\n background-color: #dc3545 !important;\n}\n\na.bg-danger:hover, a.bg-danger:focus,\nbutton.bg-danger:hover,\nbutton.bg-danger:focus {\n background-color: #bd2130 !important;\n}\n\n.bg-light {\n background-color: #f8f9fa !important;\n}\n\na.bg-light:hover, a.bg-light:focus,\nbutton.bg-light:hover,\nbutton.bg-light:focus {\n background-color: #dae0e5 !important;\n}\n\n.bg-dark {\n background-color: #343a40 !important;\n}\n\na.bg-dark:hover, a.bg-dark:focus,\nbutton.bg-dark:hover,\nbutton.bg-dark:focus {\n background-color: #1d2124 !important;\n}\n\n.bg-white {\n background-color: #fff !important;\n}\n\n.bg-transparent {\n background-color: transparent !important;\n}\n\n.border {\n border: 1px solid #dee2e6 !important;\n}\n\n.border-top {\n border-top: 1px solid #dee2e6 !important;\n}\n\n.border-right {\n border-right: 1px solid #dee2e6 !important;\n}\n\n.border-bottom {\n border-bottom: 1px solid #dee2e6 !important;\n}\n\n.border-left {\n border-left: 1px solid #dee2e6 !important;\n}\n\n.border-0 {\n border: 0 !important;\n}\n\n.border-top-0 {\n border-top: 0 !important;\n}\n\n.border-right-0 {\n border-right: 0 !important;\n}\n\n.border-bottom-0 {\n border-bottom: 0 !important;\n}\n\n.border-left-0 {\n border-left: 0 !important;\n}\n\n.border-primary {\n border-color: #007bff !important;\n}\n\n.border-secondary {\n border-color: #6c757d !important;\n}\n\n.border-success {\n border-color: #28a745 !important;\n}\n\n.border-info {\n border-color: #17a2b8 !important;\n}\n\n.border-warning {\n border-color: #ffc107 !important;\n}\n\n.border-danger {\n border-color: #dc3545 !important;\n}\n\n.border-light {\n border-color: #f8f9fa !important;\n}\n\n.border-dark {\n border-color: #343a40 !important;\n}\n\n.border-white {\n border-color: #fff !important;\n}\n\n.rounded-sm {\n border-radius: 0.2rem !important;\n}\n\n.rounded {\n border-radius: 0.25rem !important;\n}\n\n.rounded-top {\n border-top-left-radius: 0.25rem !important;\n border-top-right-radius: 0.25rem !important;\n}\n\n.rounded-right {\n border-top-right-radius: 0.25rem !important;\n border-bottom-right-radius: 0.25rem !important;\n}\n\n.rounded-bottom {\n border-bottom-right-radius: 0.25rem !important;\n border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-left {\n border-top-left-radius: 0.25rem !important;\n border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-lg {\n border-radius: 0.3rem !important;\n}\n\n.rounded-circle {\n border-radius: 50% !important;\n}\n\n.rounded-pill {\n border-radius: 50rem !important;\n}\n\n.rounded-0 {\n border-radius: 0 !important;\n}\n\n.clearfix::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.d-none {\n display: none !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline-flex {\n display: inline-flex !important;\n}\n\n@media (min-width: 576px) {\n .d-sm-none {\n display: none !important;\n }\n .d-sm-inline {\n display: inline !important;\n }\n .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 768px) {\n .d-md-none {\n display: none !important;\n }\n .d-md-inline {\n display: inline !important;\n }\n .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: flex !important;\n }\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 992px) {\n .d-lg-none {\n display: none !important;\n }\n .d-lg-inline {\n display: inline !important;\n }\n .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 1200px) {\n .d-xl-none {\n display: none !important;\n }\n .d-xl-inline {\n display: inline !important;\n }\n .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media print {\n .d-print-none {\n display: none !important;\n }\n .d-print-inline {\n display: inline !important;\n }\n .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: flex !important;\n }\n .d-print-inline-flex {\n display: inline-flex !important;\n }\n}\n\n.embed-responsive {\n position: relative;\n display: block;\n width: 100%;\n padding: 0;\n overflow: hidden;\n}\n\n.embed-responsive::before {\n display: block;\n content: \"\";\n}\n\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: 0;\n}\n\n.embed-responsive-21by9::before {\n padding-top: 42.857143%;\n}\n\n.embed-responsive-16by9::before {\n padding-top: 56.25%;\n}\n\n.embed-responsive-4by3::before {\n padding-top: 75%;\n}\n\n.embed-responsive-1by1::before {\n padding-top: 100%;\n}\n\n.flex-row {\n flex-direction: row !important;\n}\n\n.flex-column {\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n flex-direction: column-reverse !important;\n}\n\n.flex-wrap {\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n}\n\n.flex-fill {\n flex: 1 1 auto !important;\n}\n\n.flex-grow-0 {\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n flex-shrink: 1 !important;\n}\n\n.justify-content-start {\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n justify-content: center !important;\n}\n\n.justify-content-between {\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n justify-content: space-around !important;\n}\n\n.align-items-start {\n align-items: flex-start !important;\n}\n\n.align-items-end {\n align-items: flex-end !important;\n}\n\n.align-items-center {\n align-items: center !important;\n}\n\n.align-items-baseline {\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n align-items: stretch !important;\n}\n\n.align-content-start {\n align-content: flex-start !important;\n}\n\n.align-content-end {\n align-content: flex-end !important;\n}\n\n.align-content-center {\n align-content: center !important;\n}\n\n.align-content-between {\n align-content: space-between !important;\n}\n\n.align-content-around {\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n align-content: stretch !important;\n}\n\n.align-self-auto {\n align-self: auto !important;\n}\n\n.align-self-start {\n align-self: flex-start !important;\n}\n\n.align-self-end {\n align-self: flex-end !important;\n}\n\n.align-self-center {\n align-self: center !important;\n}\n\n.align-self-baseline {\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n align-self: stretch !important;\n}\n\n@media (min-width: 576px) {\n .flex-sm-row {\n flex-direction: row !important;\n }\n .flex-sm-column {\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-sm-fill {\n flex: 1 1 auto !important;\n }\n .flex-sm-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n justify-content: center !important;\n }\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n align-items: center !important;\n }\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n align-content: center !important;\n }\n .align-content-sm-between {\n align-content: space-between !important;\n }\n .align-content-sm-around {\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n align-self: auto !important;\n }\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n align-self: center !important;\n }\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 768px) {\n .flex-md-row {\n flex-direction: row !important;\n }\n .flex-md-column {\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-md-fill {\n flex: 1 1 auto !important;\n }\n .flex-md-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n justify-content: center !important;\n }\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n .align-items-md-start {\n align-items: flex-start !important;\n }\n .align-items-md-end {\n align-items: flex-end !important;\n }\n .align-items-md-center {\n align-items: center !important;\n }\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n .align-content-md-start {\n align-content: flex-start !important;\n }\n .align-content-md-end {\n align-content: flex-end !important;\n }\n .align-content-md-center {\n align-content: center !important;\n }\n .align-content-md-between {\n align-content: space-between !important;\n }\n .align-content-md-around {\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n .align-self-md-auto {\n align-self: auto !important;\n }\n .align-self-md-start {\n align-self: flex-start !important;\n }\n .align-self-md-end {\n align-self: flex-end !important;\n }\n .align-self-md-center {\n align-self: center !important;\n }\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 992px) {\n .flex-lg-row {\n flex-direction: row !important;\n }\n .flex-lg-column {\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-lg-fill {\n flex: 1 1 auto !important;\n }\n .flex-lg-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n justify-content: center !important;\n }\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n align-items: center !important;\n }\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n align-content: center !important;\n }\n .align-content-lg-between {\n align-content: space-between !important;\n }\n .align-content-lg-around {\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n align-self: auto !important;\n }\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n align-self: center !important;\n }\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 1200px) {\n .flex-xl-row {\n flex-direction: row !important;\n }\n .flex-xl-column {\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-xl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n justify-content: center !important;\n }\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n align-items: center !important;\n }\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n align-content: center !important;\n }\n .align-content-xl-between {\n align-content: space-between !important;\n }\n .align-content-xl-around {\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n align-self: auto !important;\n }\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n align-self: center !important;\n }\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n}\n\n.float-left {\n float: left !important;\n}\n\n.float-right {\n float: right !important;\n}\n\n.float-none {\n float: none !important;\n}\n\n@media (min-width: 576px) {\n .float-sm-left {\n float: left !important;\n }\n .float-sm-right {\n float: right !important;\n }\n .float-sm-none {\n float: none !important;\n }\n}\n\n@media (min-width: 768px) {\n .float-md-left {\n float: left !important;\n }\n .float-md-right {\n float: right !important;\n }\n .float-md-none {\n float: none !important;\n }\n}\n\n@media (min-width: 992px) {\n .float-lg-left {\n float: left !important;\n }\n .float-lg-right {\n float: right !important;\n }\n .float-lg-none {\n float: none !important;\n }\n}\n\n@media (min-width: 1200px) {\n .float-xl-left {\n float: left !important;\n }\n .float-xl-right {\n float: right !important;\n }\n .float-xl-none {\n float: none !important;\n }\n}\n\n.overflow-auto {\n overflow: auto !important;\n}\n\n.overflow-hidden {\n overflow: hidden !important;\n}\n\n.position-static {\n position: static !important;\n}\n\n.position-relative {\n position: relative !important;\n}\n\n.position-absolute {\n position: absolute !important;\n}\n\n.position-fixed {\n position: fixed !important;\n}\n\n.position-sticky {\n position: sticky !important;\n}\n\n.fixed-top {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n\n.fixed-bottom {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1030;\n}\n\n@supports (position: sticky) {\n .sticky-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n}\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n\n.sr-only-focusable:active, .sr-only-focusable:focus {\n position: static;\n width: auto;\n height: auto;\n overflow: visible;\n clip: auto;\n white-space: normal;\n}\n\n.shadow-sm {\n box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;\n}\n\n.shadow {\n box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;\n}\n\n.shadow-lg {\n box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;\n}\n\n.shadow-none {\n box-shadow: none !important;\n}\n\n.w-25 {\n width: 25% !important;\n}\n\n.w-50 {\n width: 50% !important;\n}\n\n.w-75 {\n width: 75% !important;\n}\n\n.w-100 {\n width: 100% !important;\n}\n\n.w-auto {\n width: auto !important;\n}\n\n.h-25 {\n height: 25% !important;\n}\n\n.h-50 {\n height: 50% !important;\n}\n\n.h-75 {\n height: 75% !important;\n}\n\n.h-100 {\n height: 100% !important;\n}\n\n.h-auto {\n height: auto !important;\n}\n\n.mw-100 {\n max-width: 100% !important;\n}\n\n.mh-100 {\n max-height: 100% !important;\n}\n\n.min-vw-100 {\n min-width: 100vw !important;\n}\n\n.min-vh-100 {\n min-height: 100vh !important;\n}\n\n.vw-100 {\n width: 100vw !important;\n}\n\n.vh-100 {\n height: 100vh !important;\n}\n\n.stretched-link::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n pointer-events: auto;\n content: \"\";\n background-color: rgba(0, 0, 0, 0);\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.mt-0,\n.my-0 {\n margin-top: 0 !important;\n}\n\n.mr-0,\n.mx-0 {\n margin-right: 0 !important;\n}\n\n.mb-0,\n.my-0 {\n margin-bottom: 0 !important;\n}\n\n.ml-0,\n.mx-0 {\n margin-left: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.mt-1,\n.my-1 {\n margin-top: 0.25rem !important;\n}\n\n.mr-1,\n.mx-1 {\n margin-right: 0.25rem !important;\n}\n\n.mb-1,\n.my-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.ml-1,\n.mx-1 {\n margin-left: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.mt-2,\n.my-2 {\n margin-top: 0.5rem !important;\n}\n\n.mr-2,\n.mx-2 {\n margin-right: 0.5rem !important;\n}\n\n.mb-2,\n.my-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.ml-2,\n.mx-2 {\n margin-left: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.mt-3,\n.my-3 {\n margin-top: 1rem !important;\n}\n\n.mr-3,\n.mx-3 {\n margin-right: 1rem !important;\n}\n\n.mb-3,\n.my-3 {\n margin-bottom: 1rem !important;\n}\n\n.ml-3,\n.mx-3 {\n margin-left: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.mt-4,\n.my-4 {\n margin-top: 1.5rem !important;\n}\n\n.mr-4,\n.mx-4 {\n margin-right: 1.5rem !important;\n}\n\n.mb-4,\n.my-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.ml-4,\n.mx-4 {\n margin-left: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.mt-5,\n.my-5 {\n margin-top: 3rem !important;\n}\n\n.mr-5,\n.mx-5 {\n margin-right: 3rem !important;\n}\n\n.mb-5,\n.my-5 {\n margin-bottom: 3rem !important;\n}\n\n.ml-5,\n.mx-5 {\n margin-left: 3rem !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.pt-0,\n.py-0 {\n padding-top: 0 !important;\n}\n\n.pr-0,\n.px-0 {\n padding-right: 0 !important;\n}\n\n.pb-0,\n.py-0 {\n padding-bottom: 0 !important;\n}\n\n.pl-0,\n.px-0 {\n padding-left: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.pt-1,\n.py-1 {\n padding-top: 0.25rem !important;\n}\n\n.pr-1,\n.px-1 {\n padding-right: 0.25rem !important;\n}\n\n.pb-1,\n.py-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pl-1,\n.px-1 {\n padding-left: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.pt-2,\n.py-2 {\n padding-top: 0.5rem !important;\n}\n\n.pr-2,\n.px-2 {\n padding-right: 0.5rem !important;\n}\n\n.pb-2,\n.py-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pl-2,\n.px-2 {\n padding-left: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.pt-3,\n.py-3 {\n padding-top: 1rem !important;\n}\n\n.pr-3,\n.px-3 {\n padding-right: 1rem !important;\n}\n\n.pb-3,\n.py-3 {\n padding-bottom: 1rem !important;\n}\n\n.pl-3,\n.px-3 {\n padding-left: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.pt-4,\n.py-4 {\n padding-top: 1.5rem !important;\n}\n\n.pr-4,\n.px-4 {\n padding-right: 1.5rem !important;\n}\n\n.pb-4,\n.py-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pl-4,\n.px-4 {\n padding-left: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.pt-5,\n.py-5 {\n padding-top: 3rem !important;\n}\n\n.pr-5,\n.px-5 {\n padding-right: 3rem !important;\n}\n\n.pb-5,\n.py-5 {\n padding-bottom: 3rem !important;\n}\n\n.pl-5,\n.px-5 {\n padding-left: 3rem !important;\n}\n\n.m-n1 {\n margin: -0.25rem !important;\n}\n\n.mt-n1,\n.my-n1 {\n margin-top: -0.25rem !important;\n}\n\n.mr-n1,\n.mx-n1 {\n margin-right: -0.25rem !important;\n}\n\n.mb-n1,\n.my-n1 {\n margin-bottom: -0.25rem !important;\n}\n\n.ml-n1,\n.mx-n1 {\n margin-left: -0.25rem !important;\n}\n\n.m-n2 {\n margin: -0.5rem !important;\n}\n\n.mt-n2,\n.my-n2 {\n margin-top: -0.5rem !important;\n}\n\n.mr-n2,\n.mx-n2 {\n margin-right: -0.5rem !important;\n}\n\n.mb-n2,\n.my-n2 {\n margin-bottom: -0.5rem !important;\n}\n\n.ml-n2,\n.mx-n2 {\n margin-left: -0.5rem !important;\n}\n\n.m-n3 {\n margin: -1rem !important;\n}\n\n.mt-n3,\n.my-n3 {\n margin-top: -1rem !important;\n}\n\n.mr-n3,\n.mx-n3 {\n margin-right: -1rem !important;\n}\n\n.mb-n3,\n.my-n3 {\n margin-bottom: -1rem !important;\n}\n\n.ml-n3,\n.mx-n3 {\n margin-left: -1rem !important;\n}\n\n.m-n4 {\n margin: -1.5rem !important;\n}\n\n.mt-n4,\n.my-n4 {\n margin-top: -1.5rem !important;\n}\n\n.mr-n4,\n.mx-n4 {\n margin-right: -1.5rem !important;\n}\n\n.mb-n4,\n.my-n4 {\n margin-bottom: -1.5rem !important;\n}\n\n.ml-n4,\n.mx-n4 {\n margin-left: -1.5rem !important;\n}\n\n.m-n5 {\n margin: -3rem !important;\n}\n\n.mt-n5,\n.my-n5 {\n margin-top: -3rem !important;\n}\n\n.mr-n5,\n.mx-n5 {\n margin-right: -3rem !important;\n}\n\n.mb-n5,\n.my-n5 {\n margin-bottom: -3rem !important;\n}\n\n.ml-n5,\n.mx-n5 {\n margin-left: -3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mt-auto,\n.my-auto {\n margin-top: auto !important;\n}\n\n.mr-auto,\n.mx-auto {\n margin-right: auto !important;\n}\n\n.mb-auto,\n.my-auto {\n margin-bottom: auto !important;\n}\n\n.ml-auto,\n.mx-auto {\n margin-left: auto !important;\n}\n\n@media (min-width: 576px) {\n .m-sm-0 {\n margin: 0 !important;\n }\n .mt-sm-0,\n .my-sm-0 {\n margin-top: 0 !important;\n }\n .mr-sm-0,\n .mx-sm-0 {\n margin-right: 0 !important;\n }\n .mb-sm-0,\n .my-sm-0 {\n margin-bottom: 0 !important;\n }\n .ml-sm-0,\n .mx-sm-0 {\n margin-left: 0 !important;\n }\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n .mt-sm-1,\n .my-sm-1 {\n margin-top: 0.25rem !important;\n }\n .mr-sm-1,\n .mx-sm-1 {\n margin-right: 0.25rem !important;\n }\n .mb-sm-1,\n .my-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-sm-1,\n .mx-sm-1 {\n margin-left: 0.25rem !important;\n }\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n .mt-sm-2,\n .my-sm-2 {\n margin-top: 0.5rem !important;\n }\n .mr-sm-2,\n .mx-sm-2 {\n margin-right: 0.5rem !important;\n }\n .mb-sm-2,\n .my-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-sm-2,\n .mx-sm-2 {\n margin-left: 0.5rem !important;\n }\n .m-sm-3 {\n margin: 1rem !important;\n }\n .mt-sm-3,\n .my-sm-3 {\n margin-top: 1rem !important;\n }\n .mr-sm-3,\n .mx-sm-3 {\n margin-right: 1rem !important;\n }\n .mb-sm-3,\n .my-sm-3 {\n margin-bottom: 1rem !important;\n }\n .ml-sm-3,\n .mx-sm-3 {\n margin-left: 1rem !important;\n }\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n .mt-sm-4,\n .my-sm-4 {\n margin-top: 1.5rem !important;\n }\n .mr-sm-4,\n .mx-sm-4 {\n margin-right: 1.5rem !important;\n }\n .mb-sm-4,\n .my-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-sm-4,\n .mx-sm-4 {\n margin-left: 1.5rem !important;\n }\n .m-sm-5 {\n margin: 3rem !important;\n }\n .mt-sm-5,\n .my-sm-5 {\n margin-top: 3rem !important;\n }\n .mr-sm-5,\n .mx-sm-5 {\n margin-right: 3rem !important;\n }\n .mb-sm-5,\n .my-sm-5 {\n margin-bottom: 3rem !important;\n }\n .ml-sm-5,\n .mx-sm-5 {\n margin-left: 3rem !important;\n }\n .p-sm-0 {\n padding: 0 !important;\n }\n .pt-sm-0,\n .py-sm-0 {\n padding-top: 0 !important;\n }\n .pr-sm-0,\n .px-sm-0 {\n padding-right: 0 !important;\n }\n .pb-sm-0,\n .py-sm-0 {\n padding-bottom: 0 !important;\n }\n .pl-sm-0,\n .px-sm-0 {\n padding-left: 0 !important;\n }\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n .pt-sm-1,\n .py-sm-1 {\n padding-top: 0.25rem !important;\n }\n .pr-sm-1,\n .px-sm-1 {\n padding-right: 0.25rem !important;\n }\n .pb-sm-1,\n .py-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-sm-1,\n .px-sm-1 {\n padding-left: 0.25rem !important;\n }\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n .pt-sm-2,\n .py-sm-2 {\n padding-top: 0.5rem !important;\n }\n .pr-sm-2,\n .px-sm-2 {\n padding-right: 0.5rem !important;\n }\n .pb-sm-2,\n .py-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-sm-2,\n .px-sm-2 {\n padding-left: 0.5rem !important;\n }\n .p-sm-3 {\n padding: 1rem !important;\n }\n .pt-sm-3,\n .py-sm-3 {\n padding-top: 1rem !important;\n }\n .pr-sm-3,\n .px-sm-3 {\n padding-right: 1rem !important;\n }\n .pb-sm-3,\n .py-sm-3 {\n padding-bottom: 1rem !important;\n }\n .pl-sm-3,\n .px-sm-3 {\n padding-left: 1rem !important;\n }\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n .pt-sm-4,\n .py-sm-4 {\n padding-top: 1.5rem !important;\n }\n .pr-sm-4,\n .px-sm-4 {\n padding-right: 1.5rem !important;\n }\n .pb-sm-4,\n .py-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-sm-4,\n .px-sm-4 {\n padding-left: 1.5rem !important;\n }\n .p-sm-5 {\n padding: 3rem !important;\n }\n .pt-sm-5,\n .py-sm-5 {\n padding-top: 3rem !important;\n }\n .pr-sm-5,\n .px-sm-5 {\n padding-right: 3rem !important;\n }\n .pb-sm-5,\n .py-sm-5 {\n padding-bottom: 3rem !important;\n }\n .pl-sm-5,\n .px-sm-5 {\n padding-left: 3rem !important;\n }\n .m-sm-n1 {\n margin: -0.25rem !important;\n }\n .mt-sm-n1,\n .my-sm-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-sm-n1,\n .mx-sm-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-sm-n1,\n .my-sm-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-sm-n1,\n .mx-sm-n1 {\n margin-left: -0.25rem !important;\n }\n .m-sm-n2 {\n margin: -0.5rem !important;\n }\n .mt-sm-n2,\n .my-sm-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-sm-n2,\n .mx-sm-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-sm-n2,\n .my-sm-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-sm-n2,\n .mx-sm-n2 {\n margin-left: -0.5rem !important;\n }\n .m-sm-n3 {\n margin: -1rem !important;\n }\n .mt-sm-n3,\n .my-sm-n3 {\n margin-top: -1rem !important;\n }\n .mr-sm-n3,\n .mx-sm-n3 {\n margin-right: -1rem !important;\n }\n .mb-sm-n3,\n .my-sm-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-sm-n3,\n .mx-sm-n3 {\n margin-left: -1rem !important;\n }\n .m-sm-n4 {\n margin: -1.5rem !important;\n }\n .mt-sm-n4,\n .my-sm-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-sm-n4,\n .mx-sm-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-sm-n4,\n .my-sm-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-sm-n4,\n .mx-sm-n4 {\n margin-left: -1.5rem !important;\n }\n .m-sm-n5 {\n margin: -3rem !important;\n }\n .mt-sm-n5,\n .my-sm-n5 {\n margin-top: -3rem !important;\n }\n .mr-sm-n5,\n .mx-sm-n5 {\n margin-right: -3rem !important;\n }\n .mb-sm-n5,\n .my-sm-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-sm-n5,\n .mx-sm-n5 {\n margin-left: -3rem !important;\n }\n .m-sm-auto {\n margin: auto !important;\n }\n .mt-sm-auto,\n .my-sm-auto {\n margin-top: auto !important;\n }\n .mr-sm-auto,\n .mx-sm-auto {\n margin-right: auto !important;\n }\n .mb-sm-auto,\n .my-sm-auto {\n margin-bottom: auto !important;\n }\n .ml-sm-auto,\n .mx-sm-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 768px) {\n .m-md-0 {\n margin: 0 !important;\n }\n .mt-md-0,\n .my-md-0 {\n margin-top: 0 !important;\n }\n .mr-md-0,\n .mx-md-0 {\n margin-right: 0 !important;\n }\n .mb-md-0,\n .my-md-0 {\n margin-bottom: 0 !important;\n }\n .ml-md-0,\n .mx-md-0 {\n margin-left: 0 !important;\n }\n .m-md-1 {\n margin: 0.25rem !important;\n }\n .mt-md-1,\n .my-md-1 {\n margin-top: 0.25rem !important;\n }\n .mr-md-1,\n .mx-md-1 {\n margin-right: 0.25rem !important;\n }\n .mb-md-1,\n .my-md-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-md-1,\n .mx-md-1 {\n margin-left: 0.25rem !important;\n }\n .m-md-2 {\n margin: 0.5rem !important;\n }\n .mt-md-2,\n .my-md-2 {\n margin-top: 0.5rem !important;\n }\n .mr-md-2,\n .mx-md-2 {\n margin-right: 0.5rem !important;\n }\n .mb-md-2,\n .my-md-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-md-2,\n .mx-md-2 {\n margin-left: 0.5rem !important;\n }\n .m-md-3 {\n margin: 1rem !important;\n }\n .mt-md-3,\n .my-md-3 {\n margin-top: 1rem !important;\n }\n .mr-md-3,\n .mx-md-3 {\n margin-right: 1rem !important;\n }\n .mb-md-3,\n .my-md-3 {\n margin-bottom: 1rem !important;\n }\n .ml-md-3,\n .mx-md-3 {\n margin-left: 1rem !important;\n }\n .m-md-4 {\n margin: 1.5rem !important;\n }\n .mt-md-4,\n .my-md-4 {\n margin-top: 1.5rem !important;\n }\n .mr-md-4,\n .mx-md-4 {\n margin-right: 1.5rem !important;\n }\n .mb-md-4,\n .my-md-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-md-4,\n .mx-md-4 {\n margin-left: 1.5rem !important;\n }\n .m-md-5 {\n margin: 3rem !important;\n }\n .mt-md-5,\n .my-md-5 {\n margin-top: 3rem !important;\n }\n .mr-md-5,\n .mx-md-5 {\n margin-right: 3rem !important;\n }\n .mb-md-5,\n .my-md-5 {\n margin-bottom: 3rem !important;\n }\n .ml-md-5,\n .mx-md-5 {\n margin-left: 3rem !important;\n }\n .p-md-0 {\n padding: 0 !important;\n }\n .pt-md-0,\n .py-md-0 {\n padding-top: 0 !important;\n }\n .pr-md-0,\n .px-md-0 {\n padding-right: 0 !important;\n }\n .pb-md-0,\n .py-md-0 {\n padding-bottom: 0 !important;\n }\n .pl-md-0,\n .px-md-0 {\n padding-left: 0 !important;\n }\n .p-md-1 {\n padding: 0.25rem !important;\n }\n .pt-md-1,\n .py-md-1 {\n padding-top: 0.25rem !important;\n }\n .pr-md-1,\n .px-md-1 {\n padding-right: 0.25rem !important;\n }\n .pb-md-1,\n .py-md-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-md-1,\n .px-md-1 {\n padding-left: 0.25rem !important;\n }\n .p-md-2 {\n padding: 0.5rem !important;\n }\n .pt-md-2,\n .py-md-2 {\n padding-top: 0.5rem !important;\n }\n .pr-md-2,\n .px-md-2 {\n padding-right: 0.5rem !important;\n }\n .pb-md-2,\n .py-md-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-md-2,\n .px-md-2 {\n padding-left: 0.5rem !important;\n }\n .p-md-3 {\n padding: 1rem !important;\n }\n .pt-md-3,\n .py-md-3 {\n padding-top: 1rem !important;\n }\n .pr-md-3,\n .px-md-3 {\n padding-right: 1rem !important;\n }\n .pb-md-3,\n .py-md-3 {\n padding-bottom: 1rem !important;\n }\n .pl-md-3,\n .px-md-3 {\n padding-left: 1rem !important;\n }\n .p-md-4 {\n padding: 1.5rem !important;\n }\n .pt-md-4,\n .py-md-4 {\n padding-top: 1.5rem !important;\n }\n .pr-md-4,\n .px-md-4 {\n padding-right: 1.5rem !important;\n }\n .pb-md-4,\n .py-md-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-md-4,\n .px-md-4 {\n padding-left: 1.5rem !important;\n }\n .p-md-5 {\n padding: 3rem !important;\n }\n .pt-md-5,\n .py-md-5 {\n padding-top: 3rem !important;\n }\n .pr-md-5,\n .px-md-5 {\n padding-right: 3rem !important;\n }\n .pb-md-5,\n .py-md-5 {\n padding-bottom: 3rem !important;\n }\n .pl-md-5,\n .px-md-5 {\n padding-left: 3rem !important;\n }\n .m-md-n1 {\n margin: -0.25rem !important;\n }\n .mt-md-n1,\n .my-md-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-md-n1,\n .mx-md-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-md-n1,\n .my-md-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-md-n1,\n .mx-md-n1 {\n margin-left: -0.25rem !important;\n }\n .m-md-n2 {\n margin: -0.5rem !important;\n }\n .mt-md-n2,\n .my-md-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-md-n2,\n .mx-md-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-md-n2,\n .my-md-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-md-n2,\n .mx-md-n2 {\n margin-left: -0.5rem !important;\n }\n .m-md-n3 {\n margin: -1rem !important;\n }\n .mt-md-n3,\n .my-md-n3 {\n margin-top: -1rem !important;\n }\n .mr-md-n3,\n .mx-md-n3 {\n margin-right: -1rem !important;\n }\n .mb-md-n3,\n .my-md-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-md-n3,\n .mx-md-n3 {\n margin-left: -1rem !important;\n }\n .m-md-n4 {\n margin: -1.5rem !important;\n }\n .mt-md-n4,\n .my-md-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-md-n4,\n .mx-md-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-md-n4,\n .my-md-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-md-n4,\n .mx-md-n4 {\n margin-left: -1.5rem !important;\n }\n .m-md-n5 {\n margin: -3rem !important;\n }\n .mt-md-n5,\n .my-md-n5 {\n margin-top: -3rem !important;\n }\n .mr-md-n5,\n .mx-md-n5 {\n margin-right: -3rem !important;\n }\n .mb-md-n5,\n .my-md-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-md-n5,\n .mx-md-n5 {\n margin-left: -3rem !important;\n }\n .m-md-auto {\n margin: auto !important;\n }\n .mt-md-auto,\n .my-md-auto {\n margin-top: auto !important;\n }\n .mr-md-auto,\n .mx-md-auto {\n margin-right: auto !important;\n }\n .mb-md-auto,\n .my-md-auto {\n margin-bottom: auto !important;\n }\n .ml-md-auto,\n .mx-md-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 992px) {\n .m-lg-0 {\n margin: 0 !important;\n }\n .mt-lg-0,\n .my-lg-0 {\n margin-top: 0 !important;\n }\n .mr-lg-0,\n .mx-lg-0 {\n margin-right: 0 !important;\n }\n .mb-lg-0,\n .my-lg-0 {\n margin-bottom: 0 !important;\n }\n .ml-lg-0,\n .mx-lg-0 {\n margin-left: 0 !important;\n }\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n .mt-lg-1,\n .my-lg-1 {\n margin-top: 0.25rem !important;\n }\n .mr-lg-1,\n .mx-lg-1 {\n margin-right: 0.25rem !important;\n }\n .mb-lg-1,\n .my-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-lg-1,\n .mx-lg-1 {\n margin-left: 0.25rem !important;\n }\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n .mt-lg-2,\n .my-lg-2 {\n margin-top: 0.5rem !important;\n }\n .mr-lg-2,\n .mx-lg-2 {\n margin-right: 0.5rem !important;\n }\n .mb-lg-2,\n .my-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-lg-2,\n .mx-lg-2 {\n margin-left: 0.5rem !important;\n }\n .m-lg-3 {\n margin: 1rem !important;\n }\n .mt-lg-3,\n .my-lg-3 {\n margin-top: 1rem !important;\n }\n .mr-lg-3,\n .mx-lg-3 {\n margin-right: 1rem !important;\n }\n .mb-lg-3,\n .my-lg-3 {\n margin-bottom: 1rem !important;\n }\n .ml-lg-3,\n .mx-lg-3 {\n margin-left: 1rem !important;\n }\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n .mt-lg-4,\n .my-lg-4 {\n margin-top: 1.5rem !important;\n }\n .mr-lg-4,\n .mx-lg-4 {\n margin-right: 1.5rem !important;\n }\n .mb-lg-4,\n .my-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-lg-4,\n .mx-lg-4 {\n margin-left: 1.5rem !important;\n }\n .m-lg-5 {\n margin: 3rem !important;\n }\n .mt-lg-5,\n .my-lg-5 {\n margin-top: 3rem !important;\n }\n .mr-lg-5,\n .mx-lg-5 {\n margin-right: 3rem !important;\n }\n .mb-lg-5,\n .my-lg-5 {\n margin-bottom: 3rem !important;\n }\n .ml-lg-5,\n .mx-lg-5 {\n margin-left: 3rem !important;\n }\n .p-lg-0 {\n padding: 0 !important;\n }\n .pt-lg-0,\n .py-lg-0 {\n padding-top: 0 !important;\n }\n .pr-lg-0,\n .px-lg-0 {\n padding-right: 0 !important;\n }\n .pb-lg-0,\n .py-lg-0 {\n padding-bottom: 0 !important;\n }\n .pl-lg-0,\n .px-lg-0 {\n padding-left: 0 !important;\n }\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n .pt-lg-1,\n .py-lg-1 {\n padding-top: 0.25rem !important;\n }\n .pr-lg-1,\n .px-lg-1 {\n padding-right: 0.25rem !important;\n }\n .pb-lg-1,\n .py-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-lg-1,\n .px-lg-1 {\n padding-left: 0.25rem !important;\n }\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n .pt-lg-2,\n .py-lg-2 {\n padding-top: 0.5rem !important;\n }\n .pr-lg-2,\n .px-lg-2 {\n padding-right: 0.5rem !important;\n }\n .pb-lg-2,\n .py-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-lg-2,\n .px-lg-2 {\n padding-left: 0.5rem !important;\n }\n .p-lg-3 {\n padding: 1rem !important;\n }\n .pt-lg-3,\n .py-lg-3 {\n padding-top: 1rem !important;\n }\n .pr-lg-3,\n .px-lg-3 {\n padding-right: 1rem !important;\n }\n .pb-lg-3,\n .py-lg-3 {\n padding-bottom: 1rem !important;\n }\n .pl-lg-3,\n .px-lg-3 {\n padding-left: 1rem !important;\n }\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n .pt-lg-4,\n .py-lg-4 {\n padding-top: 1.5rem !important;\n }\n .pr-lg-4,\n .px-lg-4 {\n padding-right: 1.5rem !important;\n }\n .pb-lg-4,\n .py-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-lg-4,\n .px-lg-4 {\n padding-left: 1.5rem !important;\n }\n .p-lg-5 {\n padding: 3rem !important;\n }\n .pt-lg-5,\n .py-lg-5 {\n padding-top: 3rem !important;\n }\n .pr-lg-5,\n .px-lg-5 {\n padding-right: 3rem !important;\n }\n .pb-lg-5,\n .py-lg-5 {\n padding-bottom: 3rem !important;\n }\n .pl-lg-5,\n .px-lg-5 {\n padding-left: 3rem !important;\n }\n .m-lg-n1 {\n margin: -0.25rem !important;\n }\n .mt-lg-n1,\n .my-lg-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-lg-n1,\n .mx-lg-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-lg-n1,\n .my-lg-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-lg-n1,\n .mx-lg-n1 {\n margin-left: -0.25rem !important;\n }\n .m-lg-n2 {\n margin: -0.5rem !important;\n }\n .mt-lg-n2,\n .my-lg-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-lg-n2,\n .mx-lg-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-lg-n2,\n .my-lg-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-lg-n2,\n .mx-lg-n2 {\n margin-left: -0.5rem !important;\n }\n .m-lg-n3 {\n margin: -1rem !important;\n }\n .mt-lg-n3,\n .my-lg-n3 {\n margin-top: -1rem !important;\n }\n .mr-lg-n3,\n .mx-lg-n3 {\n margin-right: -1rem !important;\n }\n .mb-lg-n3,\n .my-lg-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-lg-n3,\n .mx-lg-n3 {\n margin-left: -1rem !important;\n }\n .m-lg-n4 {\n margin: -1.5rem !important;\n }\n .mt-lg-n4,\n .my-lg-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-lg-n4,\n .mx-lg-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-lg-n4,\n .my-lg-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-lg-n4,\n .mx-lg-n4 {\n margin-left: -1.5rem !important;\n }\n .m-lg-n5 {\n margin: -3rem !important;\n }\n .mt-lg-n5,\n .my-lg-n5 {\n margin-top: -3rem !important;\n }\n .mr-lg-n5,\n .mx-lg-n5 {\n margin-right: -3rem !important;\n }\n .mb-lg-n5,\n .my-lg-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-lg-n5,\n .mx-lg-n5 {\n margin-left: -3rem !important;\n }\n .m-lg-auto {\n margin: auto !important;\n }\n .mt-lg-auto,\n .my-lg-auto {\n margin-top: auto !important;\n }\n .mr-lg-auto,\n .mx-lg-auto {\n margin-right: auto !important;\n }\n .mb-lg-auto,\n .my-lg-auto {\n margin-bottom: auto !important;\n }\n .ml-lg-auto,\n .mx-lg-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 1200px) {\n .m-xl-0 {\n margin: 0 !important;\n }\n .mt-xl-0,\n .my-xl-0 {\n margin-top: 0 !important;\n }\n .mr-xl-0,\n .mx-xl-0 {\n margin-right: 0 !important;\n }\n .mb-xl-0,\n .my-xl-0 {\n margin-bottom: 0 !important;\n }\n .ml-xl-0,\n .mx-xl-0 {\n margin-left: 0 !important;\n }\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n .mt-xl-1,\n .my-xl-1 {\n margin-top: 0.25rem !important;\n }\n .mr-xl-1,\n .mx-xl-1 {\n margin-right: 0.25rem !important;\n }\n .mb-xl-1,\n .my-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-xl-1,\n .mx-xl-1 {\n margin-left: 0.25rem !important;\n }\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n .mt-xl-2,\n .my-xl-2 {\n margin-top: 0.5rem !important;\n }\n .mr-xl-2,\n .mx-xl-2 {\n margin-right: 0.5rem !important;\n }\n .mb-xl-2,\n .my-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-xl-2,\n .mx-xl-2 {\n margin-left: 0.5rem !important;\n }\n .m-xl-3 {\n margin: 1rem !important;\n }\n .mt-xl-3,\n .my-xl-3 {\n margin-top: 1rem !important;\n }\n .mr-xl-3,\n .mx-xl-3 {\n margin-right: 1rem !important;\n }\n .mb-xl-3,\n .my-xl-3 {\n margin-bottom: 1rem !important;\n }\n .ml-xl-3,\n .mx-xl-3 {\n margin-left: 1rem !important;\n }\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n .mt-xl-4,\n .my-xl-4 {\n margin-top: 1.5rem !important;\n }\n .mr-xl-4,\n .mx-xl-4 {\n margin-right: 1.5rem !important;\n }\n .mb-xl-4,\n .my-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-xl-4,\n .mx-xl-4 {\n margin-left: 1.5rem !important;\n }\n .m-xl-5 {\n margin: 3rem !important;\n }\n .mt-xl-5,\n .my-xl-5 {\n margin-top: 3rem !important;\n }\n .mr-xl-5,\n .mx-xl-5 {\n margin-right: 3rem !important;\n }\n .mb-xl-5,\n .my-xl-5 {\n margin-bottom: 3rem !important;\n }\n .ml-xl-5,\n .mx-xl-5 {\n margin-left: 3rem !important;\n }\n .p-xl-0 {\n padding: 0 !important;\n }\n .pt-xl-0,\n .py-xl-0 {\n padding-top: 0 !important;\n }\n .pr-xl-0,\n .px-xl-0 {\n padding-right: 0 !important;\n }\n .pb-xl-0,\n .py-xl-0 {\n padding-bottom: 0 !important;\n }\n .pl-xl-0,\n .px-xl-0 {\n padding-left: 0 !important;\n }\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n .pt-xl-1,\n .py-xl-1 {\n padding-top: 0.25rem !important;\n }\n .pr-xl-1,\n .px-xl-1 {\n padding-right: 0.25rem !important;\n }\n .pb-xl-1,\n .py-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-xl-1,\n .px-xl-1 {\n padding-left: 0.25rem !important;\n }\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n .pt-xl-2,\n .py-xl-2 {\n padding-top: 0.5rem !important;\n }\n .pr-xl-2,\n .px-xl-2 {\n padding-right: 0.5rem !important;\n }\n .pb-xl-2,\n .py-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-xl-2,\n .px-xl-2 {\n padding-left: 0.5rem !important;\n }\n .p-xl-3 {\n padding: 1rem !important;\n }\n .pt-xl-3,\n .py-xl-3 {\n padding-top: 1rem !important;\n }\n .pr-xl-3,\n .px-xl-3 {\n padding-right: 1rem !important;\n }\n .pb-xl-3,\n .py-xl-3 {\n padding-bottom: 1rem !important;\n }\n .pl-xl-3,\n .px-xl-3 {\n padding-left: 1rem !important;\n }\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n .pt-xl-4,\n .py-xl-4 {\n padding-top: 1.5rem !important;\n }\n .pr-xl-4,\n .px-xl-4 {\n padding-right: 1.5rem !important;\n }\n .pb-xl-4,\n .py-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-xl-4,\n .px-xl-4 {\n padding-left: 1.5rem !important;\n }\n .p-xl-5 {\n padding: 3rem !important;\n }\n .pt-xl-5,\n .py-xl-5 {\n padding-top: 3rem !important;\n }\n .pr-xl-5,\n .px-xl-5 {\n padding-right: 3rem !important;\n }\n .pb-xl-5,\n .py-xl-5 {\n padding-bottom: 3rem !important;\n }\n .pl-xl-5,\n .px-xl-5 {\n padding-left: 3rem !important;\n }\n .m-xl-n1 {\n margin: -0.25rem !important;\n }\n .mt-xl-n1,\n .my-xl-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-xl-n1,\n .mx-xl-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-xl-n1,\n .my-xl-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-xl-n1,\n .mx-xl-n1 {\n margin-left: -0.25rem !important;\n }\n .m-xl-n2 {\n margin: -0.5rem !important;\n }\n .mt-xl-n2,\n .my-xl-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-xl-n2,\n .mx-xl-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-xl-n2,\n .my-xl-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-xl-n2,\n .mx-xl-n2 {\n margin-left: -0.5rem !important;\n }\n .m-xl-n3 {\n margin: -1rem !important;\n }\n .mt-xl-n3,\n .my-xl-n3 {\n margin-top: -1rem !important;\n }\n .mr-xl-n3,\n .mx-xl-n3 {\n margin-right: -1rem !important;\n }\n .mb-xl-n3,\n .my-xl-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-xl-n3,\n .mx-xl-n3 {\n margin-left: -1rem !important;\n }\n .m-xl-n4 {\n margin: -1.5rem !important;\n }\n .mt-xl-n4,\n .my-xl-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-xl-n4,\n .mx-xl-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-xl-n4,\n .my-xl-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-xl-n4,\n .mx-xl-n4 {\n margin-left: -1.5rem !important;\n }\n .m-xl-n5 {\n margin: -3rem !important;\n }\n .mt-xl-n5,\n .my-xl-n5 {\n margin-top: -3rem !important;\n }\n .mr-xl-n5,\n .mx-xl-n5 {\n margin-right: -3rem !important;\n }\n .mb-xl-n5,\n .my-xl-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-xl-n5,\n .mx-xl-n5 {\n margin-left: -3rem !important;\n }\n .m-xl-auto {\n margin: auto !important;\n }\n .mt-xl-auto,\n .my-xl-auto {\n margin-top: auto !important;\n }\n .mr-xl-auto,\n .mx-xl-auto {\n margin-right: auto !important;\n }\n .mb-xl-auto,\n .my-xl-auto {\n margin-bottom: auto !important;\n }\n .ml-xl-auto,\n .mx-xl-auto {\n margin-left: auto !important;\n }\n}\n\n.text-monospace {\n font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !important;\n}\n\n.text-justify {\n text-align: justify !important;\n}\n\n.text-wrap {\n white-space: normal !important;\n}\n\n.text-nowrap {\n white-space: nowrap !important;\n}\n\n.text-truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.text-left {\n text-align: left !important;\n}\n\n.text-right {\n text-align: right !important;\n}\n\n.text-center {\n text-align: center !important;\n}\n\n@media (min-width: 576px) {\n .text-sm-left {\n text-align: left !important;\n }\n .text-sm-right {\n text-align: right !important;\n }\n .text-sm-center {\n text-align: center !important;\n }\n}\n\n@media (min-width: 768px) {\n .text-md-left {\n text-align: left !important;\n }\n .text-md-right {\n text-align: right !important;\n }\n .text-md-center {\n text-align: center !important;\n }\n}\n\n@media (min-width: 992px) {\n .text-lg-left {\n text-align: left !important;\n }\n .text-lg-right {\n text-align: right !important;\n }\n .text-lg-center {\n text-align: center !important;\n }\n}\n\n@media (min-width: 1200px) {\n .text-xl-left {\n text-align: left !important;\n }\n .text-xl-right {\n text-align: right !important;\n }\n .text-xl-center {\n text-align: center !important;\n }\n}\n\n.text-lowercase {\n text-transform: lowercase !important;\n}\n\n.text-uppercase {\n text-transform: uppercase !important;\n}\n\n.text-capitalize {\n text-transform: capitalize !important;\n}\n\n.font-weight-light {\n font-weight: 300 !important;\n}\n\n.font-weight-lighter {\n font-weight: lighter !important;\n}\n\n.font-weight-normal {\n font-weight: 400 !important;\n}\n\n.font-weight-bold {\n font-weight: 700 !important;\n}\n\n.font-weight-bolder {\n font-weight: bolder !important;\n}\n\n.font-italic {\n font-style: italic !important;\n}\n\n.text-white {\n color: #fff !important;\n}\n\n.text-primary {\n color: #007bff !important;\n}\n\na.text-primary:hover, a.text-primary:focus {\n color: #0056b3 !important;\n}\n\n.text-secondary {\n color: #6c757d !important;\n}\n\na.text-secondary:hover, a.text-secondary:focus {\n color: #494f54 !important;\n}\n\n.text-success {\n color: #28a745 !important;\n}\n\na.text-success:hover, a.text-success:focus {\n color: #19692c !important;\n}\n\n.text-info {\n color: #17a2b8 !important;\n}\n\na.text-info:hover, a.text-info:focus {\n color: #0f6674 !important;\n}\n\n.text-warning {\n color: #ffc107 !important;\n}\n\na.text-warning:hover, a.text-warning:focus {\n color: #ba8b00 !important;\n}\n\n.text-danger {\n color: #dc3545 !important;\n}\n\na.text-danger:hover, a.text-danger:focus {\n color: #a71d2a !important;\n}\n\n.text-light {\n color: #f8f9fa !important;\n}\n\na.text-light:hover, a.text-light:focus {\n color: #cbd3da !important;\n}\n\n.text-dark {\n color: #343a40 !important;\n}\n\na.text-dark:hover, a.text-dark:focus {\n color: #121416 !important;\n}\n\n.text-body {\n color: #212529 !important;\n}\n\n.text-muted {\n color: #6c757d !important;\n}\n\n.text-black-50 {\n color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-hide {\n font: 0/0 a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n\n.text-decoration-none {\n text-decoration: none !important;\n}\n\n.text-break {\n word-break: break-word !important;\n overflow-wrap: break-word !important;\n}\n\n.text-reset {\n color: inherit !important;\n}\n\n.visible {\n visibility: visible !important;\n}\n\n.invisible {\n visibility: hidden !important;\n}\n\n@media print {\n *,\n *::before,\n *::after {\n text-shadow: none !important;\n box-shadow: none !important;\n }\n a:not(.btn) {\n text-decoration: underline;\n }\n abbr[title]::after {\n content: \" (\" attr(title) \")\";\n }\n pre {\n white-space: pre-wrap !important;\n }\n pre,\n blockquote {\n border: 1px solid #adb5bd;\n page-break-inside: avoid;\n }\n thead {\n display: table-header-group;\n }\n tr,\n img {\n page-break-inside: avoid;\n }\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n h2,\n h3 {\n page-break-after: avoid;\n }\n @page {\n size: a3;\n }\n body {\n min-width: 992px !important;\n }\n .container {\n min-width: 992px !important;\n }\n .navbar {\n display: none;\n }\n .badge {\n border: 1px solid #000;\n }\n .table {\n border-collapse: collapse !important;\n }\n .table td,\n .table th {\n background-color: #fff !important;\n }\n .table-bordered th,\n .table-bordered td {\n border: 1px solid #dee2e6 !important;\n }\n .table-dark {\n color: inherit;\n }\n .table-dark th,\n .table-dark td,\n .table-dark thead th,\n .table-dark tbody + tbody {\n border-color: #dee2e6;\n }\n .table .thead-dark th {\n color: inherit;\n border-color: #dee2e6;\n }\n}\n\n.rtl,\n[dir=\"rtl\"] {\n text-align: right;\n direction: rtl;\n}\n\n.rtl .nav,\n[dir=\"rtl\"] .nav {\n padding-right: 0;\n}\n\n.rtl .navbar-nav .nav-item,\n[dir=\"rtl\"] .navbar-nav .nav-item {\n float: right;\n}\n\n.rtl .navbar-nav .nav-item + .nav-item,\n[dir=\"rtl\"] .navbar-nav .nav-item + .nav-item {\n margin-right: inherit;\n margin-left: 1rem;\n}\n\n.rtl th,\n[dir=\"rtl\"] th {\n text-align: right;\n}\n\n.rtl .alert-dismissible,\n[dir=\"rtl\"] .alert-dismissible {\n padding-right: 1.25rem;\n padding-left: 4rem;\n}\n\n.rtl .dropdown-menu,\n[dir=\"rtl\"] .dropdown-menu {\n right: 0;\n left: inherit;\n text-align: right;\n}\n\n.rtl .checkbox label,\n[dir=\"rtl\"] .checkbox label {\n padding-right: 1.25rem;\n padding-left: inherit;\n}\n\n.rtl .btn-group > .btn:not(:first-child),\n.rtl .btn-group > .btn-group:not(:first-child),\n[dir=\"rtl\"] .btn-group > .btn:not(:first-child),\n[dir=\"rtl\"] .btn-group > .btn-group:not(:first-child) {\n margin-left: initial;\n margin-right: -1px;\n}\n\n.rtl .btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle),\n[dir=\"rtl\"] .btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n border-radius: 0 0.25rem 0.25rem 0;\n}\n\n.rtl .btn-group > .btn:last-child:not(:first-child),\n.rtl .btn-group > .dropdown-toggle:not(:first-child),\n[dir=\"rtl\"] .btn-group > .btn:last-child:not(:first-child),\n[dir=\"rtl\"] .btn-group > .dropdown-toggle:not(:first-child) {\n border-radius: 0.25rem 0 0 0.25rem;\n}\n\n.rtl .btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child,\n[dir=\"rtl\"] .btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-radius: 0.25rem 0 0 0.25rem;\n}\n\n.rtl .custom-control,\n[dir=\"rtl\"] .custom-control {\n padding-right: 1.5rem;\n padding-left: inherit;\n margin-right: inherit;\n margin-left: 1rem;\n}\n\n.rtl .custom-control-indicator,\n[dir=\"rtl\"] .custom-control-indicator {\n right: 0;\n left: inherit;\n}\n\n.rtl .custom-file-label::after,\n[dir=\"rtl\"] .custom-file-label::after {\n right: initial;\n left: -1px;\n border-radius: .25rem 0 0 .25rem;\n}\n\n.rtl .custom-control-label::after,\n.rtl .custom-control-label::before,\n[dir=\"rtl\"] .custom-control-label::after,\n[dir=\"rtl\"] .custom-control-label::before {\n right: -1.5rem;\n left: inherit;\n}\n\n.rtl .custom-select,\n[dir=\"rtl\"] .custom-select {\n padding: 0.375rem 0.75rem 0.375rem 1.75rem;\n background: #fff url(\"data:image/svg+xml,\") no-repeat left 0.75rem center;\n background-size: 8px 10px;\n}\n\n.rtl .custom-switch,\n[dir=\"rtl\"] .custom-switch {\n padding-right: 2.25rem;\n padding-left: inherit;\n}\n\n.rtl .custom-switch .custom-control-label::before,\n[dir=\"rtl\"] .custom-switch .custom-control-label::before {\n right: -2.25rem;\n}\n\n.rtl .custom-switch .custom-control-label::after,\n[dir=\"rtl\"] .custom-switch .custom-control-label::after {\n right: calc(-2.25rem + 2px);\n}\n\n.rtl .custom-switch .custom-control-input:checked ~ .custom-control-label::after,\n[dir=\"rtl\"] .custom-switch .custom-control-input:checked ~ .custom-control-label::after {\n transform: translateX(-0.75rem);\n}\n\n.rtl .input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.rtl .input-group > .input-group-append:last-child > .input-group-text:not(:last-child),\n.rtl .input-group > .input-group-append:not(:last-child) > .btn,\n.rtl .input-group > .input-group-append:not(:last-child) > .input-group-text,\n.rtl .input-group > .input-group-prepend > .btn,\n.rtl .input-group > .input-group-prepend > .input-group-text,\n[dir=\"rtl\"] .input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n[dir=\"rtl\"] .input-group > .input-group-append:last-child > .input-group-text:not(:last-child),\n[dir=\"rtl\"] .input-group > .input-group-append:not(:last-child) > .btn,\n[dir=\"rtl\"] .input-group > .input-group-append:not(:last-child) > .input-group-text,\n[dir=\"rtl\"] .input-group > .input-group-prepend > .btn,\n[dir=\"rtl\"] .input-group > .input-group-prepend > .input-group-text {\n border-radius: 0 0.25rem 0.25rem 0;\n}\n\n.rtl .input-group > .input-group-append > .btn,\n.rtl .input-group > .input-group-append > .input-group-text,\n.rtl .input-group > .input-group-prepend:first-child > .btn:not(:first-child),\n.rtl .input-group > .input-group-prepend:first-child > .input-group-text:not(:first-child),\n.rtl .input-group > .input-group-prepend:not(:first-child) > .btn,\n.rtl .input-group > .input-group-prepend:not(:first-child) > .input-group-text,\n[dir=\"rtl\"] .input-group > .input-group-append > .btn,\n[dir=\"rtl\"] .input-group > .input-group-append > .input-group-text,\n[dir=\"rtl\"] .input-group > .input-group-prepend:first-child > .btn:not(:first-child),\n[dir=\"rtl\"] .input-group > .input-group-prepend:first-child > .input-group-text:not(:first-child),\n[dir=\"rtl\"] .input-group > .input-group-prepend:not(:first-child) > .btn,\n[dir=\"rtl\"] .input-group > .input-group-prepend:not(:first-child) > .input-group-text {\n border-radius: 0.25rem 0 0 0.25rem;\n}\n\n.rtl .input-group > .custom-select:not(:first-child),\n.rtl .input-group > .form-control:not(:first-child),\n[dir=\"rtl\"] .input-group > .custom-select:not(:first-child),\n[dir=\"rtl\"] .input-group > .form-control:not(:first-child) {\n border-radius: 0.25rem 0 0 0.25rem;\n}\n\n.rtl .input-group > .custom-select:not(:last-child),\n.rtl .input-group > .form-control:not(:last-child),\n[dir=\"rtl\"] .input-group > .custom-select:not(:last-child),\n[dir=\"rtl\"] .input-group > .form-control:not(:last-child) {\n border-radius: 0 0.25rem 0.25rem 0;\n}\n\n.rtl .input-group > .custom-select:not(:last-child):not(:first-child),\n.rtl .input-group > .form-control:not(:last-child):not(:first-child),\n[dir=\"rtl\"] .input-group > .custom-select:not(:last-child):not(:first-child),\n[dir=\"rtl\"] .input-group > .form-control:not(:last-child):not(:first-child) {\n border-radius: 0;\n}\n\n.rtl .radio input,\n.rtl .radio-inline,\n.rtl .checkbox input,\n.rtl .checkbox-inline input,\n[dir=\"rtl\"] .radio input,\n[dir=\"rtl\"] .radio-inline,\n[dir=\"rtl\"] .checkbox input,\n[dir=\"rtl\"] .checkbox-inline input {\n margin-right: -1.25rem;\n margin-left: inherit;\n}\n\n.rtl .breadcrumb-item + .breadcrumb-item,\n[dir=\"rtl\"] .breadcrumb-item + .breadcrumb-item {\n padding-right: 0.5rem;\n padding-left: 0;\n color: #6c757d;\n content: \"/\";\n}\n\n.rtl .breadcrumb-item + .breadcrumb-item::before,\n[dir=\"rtl\"] .breadcrumb-item + .breadcrumb-item::before {\n padding-right: 0;\n padding-left: 0.5rem;\n}\n\n.rtl .list-group,\n[dir=\"rtl\"] .list-group {\n padding-right: 0;\n padding-left: 40px;\n}\n\n.rtl .close,\n[dir=\"rtl\"] .close {\n float: left;\n}\n\n.rtl .modal-header .close,\n[dir=\"rtl\"] .modal-header .close {\n margin: -15px auto -15px -15px;\n}\n\n.rtl .modal-footer > :not(:first-child),\n[dir=\"rtl\"] .modal-footer > :not(:first-child) {\n margin-right: .25rem;\n}\n\n.rtl .modal-footer > :not(:last-child),\n[dir=\"rtl\"] .modal-footer > :not(:last-child) {\n margin-left: .25rem;\n}\n\n.rtl .modal-footer > :first-child,\n[dir=\"rtl\"] .modal-footer > :first-child {\n margin-right: 0;\n}\n\n.rtl .modal-footer > :last-child,\n[dir=\"rtl\"] .modal-footer > :last-child {\n margin-left: 0;\n}\n\n.rtl .alert-dismissible .close,\n[dir=\"rtl\"] .alert-dismissible .close {\n right: inherit;\n left: 0;\n}\n\n.rtl .dropdown-toggle::after,\n[dir=\"rtl\"] .dropdown-toggle::after {\n margin-right: .255em;\n margin-left: 0;\n}\n\n.rtl .form-check-input,\n[dir=\"rtl\"] .form-check-input {\n margin-right: -1.25rem;\n margin-left: inherit;\n}\n\n.rtl .form-check-label,\n[dir=\"rtl\"] .form-check-label {\n padding-right: 1.25rem;\n padding-left: inherit;\n}\n\n.rtl .pagination,\n.rtl .list-unstyled,\n.rtl .list-inline,\n[dir=\"rtl\"] .pagination,\n[dir=\"rtl\"] .list-unstyled,\n[dir=\"rtl\"] .list-inline {\n padding-right: 0;\n padding-left: inherit;\n}\n\n.rtl .pagination .page-item:first-child .page-link,\n[dir=\"rtl\"] .pagination .page-item:first-child .page-link {\n border-top-right-radius: 0.25rem;\n border-bottom-right-radius: 0.25rem;\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.rtl .pagination .page-item:last-child .page-link,\n[dir=\"rtl\"] .pagination .page-item:last-child .page-link {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n border-top-left-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n}\n\n.rtl .offset-1,\n[dir=\"rtl\"] .offset-1 {\n margin-right: 8.333333%;\n margin-left: 0;\n}\n\n.rtl .offset-2,\n[dir=\"rtl\"] .offset-2 {\n margin-right: 16.666667%;\n margin-left: 0;\n}\n\n.rtl .offset-3,\n[dir=\"rtl\"] .offset-3 {\n margin-right: 25%;\n margin-left: 0;\n}\n\n.rtl .offset-4,\n[dir=\"rtl\"] .offset-4 {\n margin-right: 33.333333%;\n margin-left: 0;\n}\n\n.rtl .offset-5,\n[dir=\"rtl\"] .offset-5 {\n margin-right: 41.666667%;\n margin-left: 0;\n}\n\n.rtl .offset-6,\n[dir=\"rtl\"] .offset-6 {\n margin-right: 50%;\n margin-left: 0;\n}\n\n.rtl .offset-7,\n[dir=\"rtl\"] .offset-7 {\n margin-right: 58.333333%;\n margin-left: 0;\n}\n\n.rtl .offset-8,\n[dir=\"rtl\"] .offset-8 {\n margin-right: 66.666667%;\n margin-left: 0;\n}\n\n.rtl .offset-9,\n[dir=\"rtl\"] .offset-9 {\n margin-right: 75%;\n margin-left: 0;\n}\n\n.rtl .offset-10,\n[dir=\"rtl\"] .offset-10 {\n margin-right: 83.333333%;\n margin-left: 0;\n}\n\n.rtl .offset-11,\n[dir=\"rtl\"] .offset-11 {\n margin-right: 91.666667%;\n margin-left: 0;\n}\n\n@media (min-width: 576px) {\n .rtl .offset-sm-0,\n [dir=\"rtl\"] .offset-sm-0 {\n margin-right: 0;\n margin-left: 0;\n }\n .rtl .offset-sm-1,\n [dir=\"rtl\"] .offset-sm-1 {\n margin-right: 8.333333%;\n margin-left: 0;\n }\n .rtl .offset-sm-2,\n [dir=\"rtl\"] .offset-sm-2 {\n margin-right: 16.666667%;\n margin-left: 0;\n }\n .rtl .offset-sm-3,\n [dir=\"rtl\"] .offset-sm-3 {\n margin-right: 25%;\n margin-left: 0;\n }\n .rtl .offset-sm-4,\n [dir=\"rtl\"] .offset-sm-4 {\n margin-right: 33.333333%;\n margin-left: 0;\n }\n .rtl .offset-sm-5,\n [dir=\"rtl\"] .offset-sm-5 {\n margin-right: 41.666667%;\n margin-left: 0;\n }\n .rtl .offset-sm-6,\n [dir=\"rtl\"] .offset-sm-6 {\n margin-right: 50%;\n margin-left: 0;\n }\n .rtl .offset-sm-7,\n [dir=\"rtl\"] .offset-sm-7 {\n margin-right: 58.333333%;\n margin-left: 0;\n }\n .rtl .offset-sm-8,\n [dir=\"rtl\"] .offset-sm-8 {\n margin-right: 66.666667%;\n margin-left: 0;\n }\n .rtl .offset-sm-9,\n [dir=\"rtl\"] .offset-sm-9 {\n margin-right: 75%;\n margin-left: 0;\n }\n .rtl .offset-sm-10,\n [dir=\"rtl\"] .offset-sm-10 {\n margin-right: 83.333333%;\n margin-left: 0;\n }\n .rtl .offset-sm-11,\n [dir=\"rtl\"] .offset-sm-11 {\n margin-right: 91.666667%;\n margin-left: 0;\n }\n}\n\n@media (min-width: 768px) {\n .rtl .offset-md-0,\n [dir=\"rtl\"] .offset-md-0 {\n margin-right: 0;\n margin-left: 0;\n }\n .rtl .offset-md-1,\n [dir=\"rtl\"] .offset-md-1 {\n margin-right: 8.333333%;\n margin-left: 0;\n }\n .rtl .offset-md-2,\n [dir=\"rtl\"] .offset-md-2 {\n margin-right: 16.666667%;\n margin-left: 0;\n }\n .rtl .offset-md-3,\n [dir=\"rtl\"] .offset-md-3 {\n margin-right: 25%;\n margin-left: 0;\n }\n .rtl .offset-md-4,\n [dir=\"rtl\"] .offset-md-4 {\n margin-right: 33.333333%;\n margin-left: 0;\n }\n .rtl .offset-md-5,\n [dir=\"rtl\"] .offset-md-5 {\n margin-right: 41.666667%;\n margin-left: 0;\n }\n .rtl .offset-md-6,\n [dir=\"rtl\"] .offset-md-6 {\n margin-right: 50%;\n margin-left: 0;\n }\n .rtl .offset-md-7,\n [dir=\"rtl\"] .offset-md-7 {\n margin-right: 58.333333%;\n margin-left: 0;\n }\n .rtl .offset-md-8,\n [dir=\"rtl\"] .offset-md-8 {\n margin-right: 66.666667%;\n margin-left: 0;\n }\n .rtl .offset-md-9,\n [dir=\"rtl\"] .offset-md-9 {\n margin-right: 75%;\n margin-left: 0;\n }\n .rtl .offset-md-10,\n [dir=\"rtl\"] .offset-md-10 {\n margin-right: 83.333333%;\n margin-left: 0;\n }\n .rtl .offset-md-11,\n [dir=\"rtl\"] .offset-md-11 {\n margin-right: 91.666667%;\n margin-left: 0;\n }\n}\n\n@media (min-width: 992px) {\n .rtl .offset-lg-0,\n [dir=\"rtl\"] .offset-lg-0 {\n margin-right: 0;\n margin-left: 0;\n }\n .rtl .offset-lg-1,\n [dir=\"rtl\"] .offset-lg-1 {\n margin-right: 8.333333%;\n margin-left: 0;\n }\n .rtl .offset-lg-2,\n [dir=\"rtl\"] .offset-lg-2 {\n margin-right: 16.666667%;\n margin-left: 0;\n }\n .rtl .offset-lg-3,\n [dir=\"rtl\"] .offset-lg-3 {\n margin-right: 25%;\n margin-left: 0;\n }\n .rtl .offset-lg-4,\n [dir=\"rtl\"] .offset-lg-4 {\n margin-right: 33.333333%;\n margin-left: 0;\n }\n .rtl .offset-lg-5,\n [dir=\"rtl\"] .offset-lg-5 {\n margin-right: 41.666667%;\n margin-left: 0;\n }\n .rtl .offset-lg-6,\n [dir=\"rtl\"] .offset-lg-6 {\n margin-right: 50%;\n margin-left: 0;\n }\n .rtl .offset-lg-7,\n [dir=\"rtl\"] .offset-lg-7 {\n margin-right: 58.333333%;\n margin-left: 0;\n }\n .rtl .offset-lg-8,\n [dir=\"rtl\"] .offset-lg-8 {\n margin-right: 66.666667%;\n margin-left: 0;\n }\n .rtl .offset-lg-9,\n [dir=\"rtl\"] .offset-lg-9 {\n margin-right: 75%;\n margin-left: 0;\n }\n .rtl .offset-lg-10,\n [dir=\"rtl\"] .offset-lg-10 {\n margin-right: 83.333333%;\n margin-left: 0;\n }\n .rtl .offset-lg-11,\n [dir=\"rtl\"] .offset-lg-11 {\n margin-right: 91.666667%;\n margin-left: 0;\n }\n}\n\n@media (min-width: 1200px) {\n .rtl .offset-xl-0,\n [dir=\"rtl\"] .offset-xl-0 {\n margin-right: 0;\n margin-left: 0;\n }\n .rtl .offset-xl-1,\n [dir=\"rtl\"] .offset-xl-1 {\n margin-right: 8.333333%;\n margin-left: 0;\n }\n .rtl .offset-xl-2,\n [dir=\"rtl\"] .offset-xl-2 {\n margin-right: 16.666667%;\n margin-left: 0;\n }\n .rtl .offset-xl-3,\n [dir=\"rtl\"] .offset-xl-3 {\n margin-right: 25%;\n margin-left: 0;\n }\n .rtl .offset-xl-4,\n [dir=\"rtl\"] .offset-xl-4 {\n margin-right: 33.333333%;\n margin-left: 0;\n }\n .rtl .offset-xl-5,\n [dir=\"rtl\"] .offset-xl-5 {\n margin-right: 41.666667%;\n margin-left: 0;\n }\n .rtl .offset-xl-6,\n [dir=\"rtl\"] .offset-xl-6 {\n margin-right: 50%;\n margin-left: 0;\n }\n .rtl .offset-xl-7,\n [dir=\"rtl\"] .offset-xl-7 {\n margin-right: 58.333333%;\n margin-left: 0;\n }\n .rtl .offset-xl-8,\n [dir=\"rtl\"] .offset-xl-8 {\n margin-right: 66.666667%;\n margin-left: 0;\n }\n .rtl .offset-xl-9,\n [dir=\"rtl\"] .offset-xl-9 {\n margin-right: 75%;\n margin-left: 0;\n }\n .rtl .offset-xl-10,\n [dir=\"rtl\"] .offset-xl-10 {\n margin-right: 83.333333%;\n margin-left: 0;\n }\n .rtl .offset-xl-11,\n [dir=\"rtl\"] .offset-xl-11 {\n margin-right: 91.666667%;\n margin-left: 0;\n }\n}\n\n.rtl .mr-0,\n[dir=\"rtl\"] .mr-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n}\n\n.rtl .ml-0,\n[dir=\"rtl\"] .ml-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n}\n\n.rtl mx-0,\n[dir=\"rtl\"] mx-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n}\n\n.rtl .mr-1,\n[dir=\"rtl\"] .mr-1 {\n margin-right: 0 !important;\n margin-left: 0.25rem !important;\n}\n\n.rtl .ml-1,\n[dir=\"rtl\"] .ml-1 {\n margin-left: 0 !important;\n margin-right: 0.25rem !important;\n}\n\n.rtl mx-1,\n[dir=\"rtl\"] mx-1 {\n margin-left: 0.25rem !important;\n margin-right: 0.25rem !important;\n}\n\n.rtl .mr-2,\n[dir=\"rtl\"] .mr-2 {\n margin-right: 0 !important;\n margin-left: 0.5rem !important;\n}\n\n.rtl .ml-2,\n[dir=\"rtl\"] .ml-2 {\n margin-left: 0 !important;\n margin-right: 0.5rem !important;\n}\n\n.rtl mx-2,\n[dir=\"rtl\"] mx-2 {\n margin-left: 0.5rem !important;\n margin-right: 0.5rem !important;\n}\n\n.rtl .mr-3,\n[dir=\"rtl\"] .mr-3 {\n margin-right: 0 !important;\n margin-left: 1rem !important;\n}\n\n.rtl .ml-3,\n[dir=\"rtl\"] .ml-3 {\n margin-left: 0 !important;\n margin-right: 1rem !important;\n}\n\n.rtl mx-3,\n[dir=\"rtl\"] mx-3 {\n margin-left: 1rem !important;\n margin-right: 1rem !important;\n}\n\n.rtl .mr-4,\n[dir=\"rtl\"] .mr-4 {\n margin-right: 0 !important;\n margin-left: 1.5rem !important;\n}\n\n.rtl .ml-4,\n[dir=\"rtl\"] .ml-4 {\n margin-left: 0 !important;\n margin-right: 1.5rem !important;\n}\n\n.rtl mx-4,\n[dir=\"rtl\"] mx-4 {\n margin-left: 1.5rem !important;\n margin-right: 1.5rem !important;\n}\n\n.rtl .mr-5,\n[dir=\"rtl\"] .mr-5 {\n margin-right: 0 !important;\n margin-left: 3rem !important;\n}\n\n.rtl .ml-5,\n[dir=\"rtl\"] .ml-5 {\n margin-left: 0 !important;\n margin-right: 3rem !important;\n}\n\n.rtl mx-5,\n[dir=\"rtl\"] mx-5 {\n margin-left: 3rem !important;\n margin-right: 3rem !important;\n}\n\n.rtl .pr-0,\n[dir=\"rtl\"] .pr-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n}\n\n.rtl .pl-0,\n[dir=\"rtl\"] .pl-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n}\n\n.rtl px-0,\n[dir=\"rtl\"] px-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n}\n\n.rtl .pr-1,\n[dir=\"rtl\"] .pr-1 {\n padding-right: 0 !important;\n padding-left: 0.25rem !important;\n}\n\n.rtl .pl-1,\n[dir=\"rtl\"] .pl-1 {\n padding-left: 0 !important;\n padding-right: 0.25rem !important;\n}\n\n.rtl px-1,\n[dir=\"rtl\"] px-1 {\n padding-left: 0.25rem !important;\n padding-right: 0.25rem !important;\n}\n\n.rtl .pr-2,\n[dir=\"rtl\"] .pr-2 {\n padding-right: 0 !important;\n padding-left: 0.5rem !important;\n}\n\n.rtl .pl-2,\n[dir=\"rtl\"] .pl-2 {\n padding-left: 0 !important;\n padding-right: 0.5rem !important;\n}\n\n.rtl px-2,\n[dir=\"rtl\"] px-2 {\n padding-left: 0.5rem !important;\n padding-right: 0.5rem !important;\n}\n\n.rtl .pr-3,\n[dir=\"rtl\"] .pr-3 {\n padding-right: 0 !important;\n padding-left: 1rem !important;\n}\n\n.rtl .pl-3,\n[dir=\"rtl\"] .pl-3 {\n padding-left: 0 !important;\n padding-right: 1rem !important;\n}\n\n.rtl px-3,\n[dir=\"rtl\"] px-3 {\n padding-left: 1rem !important;\n padding-right: 1rem !important;\n}\n\n.rtl .pr-4,\n[dir=\"rtl\"] .pr-4 {\n padding-right: 0 !important;\n padding-left: 1.5rem !important;\n}\n\n.rtl .pl-4,\n[dir=\"rtl\"] .pl-4 {\n padding-left: 0 !important;\n padding-right: 1.5rem !important;\n}\n\n.rtl px-4,\n[dir=\"rtl\"] px-4 {\n padding-left: 1.5rem !important;\n padding-right: 1.5rem !important;\n}\n\n.rtl .pr-5,\n[dir=\"rtl\"] .pr-5 {\n padding-right: 0 !important;\n padding-left: 3rem !important;\n}\n\n.rtl .pl-5,\n[dir=\"rtl\"] .pl-5 {\n padding-left: 0 !important;\n padding-right: 3rem !important;\n}\n\n.rtl px-5,\n[dir=\"rtl\"] px-5 {\n padding-left: 3rem !important;\n padding-right: 3rem !important;\n}\n\n.rtl .mr-auto,\n[dir=\"rtl\"] .mr-auto {\n margin-right: 0 !important;\n margin-left: auto !important;\n}\n\n.rtl .ml-auto,\n[dir=\"rtl\"] .ml-auto {\n margin-right: auto !important;\n margin-left: 0 !important;\n}\n\n.rtl .mx-auto,\n[dir=\"rtl\"] .mx-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n}\n\n@media (min-width: 576px) {\n .rtl .mr-sm-0,\n [dir=\"rtl\"] .mr-sm-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .rtl .ml-sm-0,\n [dir=\"rtl\"] .ml-sm-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n }\n .rtl mx-sm-0,\n [dir=\"rtl\"] mx-sm-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n }\n .rtl .mr-sm-1,\n [dir=\"rtl\"] .mr-sm-1 {\n margin-right: 0 !important;\n margin-left: 0.25rem !important;\n }\n .rtl .ml-sm-1,\n [dir=\"rtl\"] .ml-sm-1 {\n margin-left: 0 !important;\n margin-right: 0.25rem !important;\n }\n .rtl mx-sm-1,\n [dir=\"rtl\"] mx-sm-1 {\n margin-left: 0.25rem !important;\n margin-right: 0.25rem !important;\n }\n .rtl .mr-sm-2,\n [dir=\"rtl\"] .mr-sm-2 {\n margin-right: 0 !important;\n margin-left: 0.5rem !important;\n }\n .rtl .ml-sm-2,\n [dir=\"rtl\"] .ml-sm-2 {\n margin-left: 0 !important;\n margin-right: 0.5rem !important;\n }\n .rtl mx-sm-2,\n [dir=\"rtl\"] mx-sm-2 {\n margin-left: 0.5rem !important;\n margin-right: 0.5rem !important;\n }\n .rtl .mr-sm-3,\n [dir=\"rtl\"] .mr-sm-3 {\n margin-right: 0 !important;\n margin-left: 1rem !important;\n }\n .rtl .ml-sm-3,\n [dir=\"rtl\"] .ml-sm-3 {\n margin-left: 0 !important;\n margin-right: 1rem !important;\n }\n .rtl mx-sm-3,\n [dir=\"rtl\"] mx-sm-3 {\n margin-left: 1rem !important;\n margin-right: 1rem !important;\n }\n .rtl .mr-sm-4,\n [dir=\"rtl\"] .mr-sm-4 {\n margin-right: 0 !important;\n margin-left: 1.5rem !important;\n }\n .rtl .ml-sm-4,\n [dir=\"rtl\"] .ml-sm-4 {\n margin-left: 0 !important;\n margin-right: 1.5rem !important;\n }\n .rtl mx-sm-4,\n [dir=\"rtl\"] mx-sm-4 {\n margin-left: 1.5rem !important;\n margin-right: 1.5rem !important;\n }\n .rtl .mr-sm-5,\n [dir=\"rtl\"] .mr-sm-5 {\n margin-right: 0 !important;\n margin-left: 3rem !important;\n }\n .rtl .ml-sm-5,\n [dir=\"rtl\"] .ml-sm-5 {\n margin-left: 0 !important;\n margin-right: 3rem !important;\n }\n .rtl mx-sm-5,\n [dir=\"rtl\"] mx-sm-5 {\n margin-left: 3rem !important;\n margin-right: 3rem !important;\n }\n .rtl .pr-sm-0,\n [dir=\"rtl\"] .pr-sm-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .rtl .pl-sm-0,\n [dir=\"rtl\"] .pl-sm-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n }\n .rtl px-sm-0,\n [dir=\"rtl\"] px-sm-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n }\n .rtl .pr-sm-1,\n [dir=\"rtl\"] .pr-sm-1 {\n padding-right: 0 !important;\n padding-left: 0.25rem !important;\n }\n .rtl .pl-sm-1,\n [dir=\"rtl\"] .pl-sm-1 {\n padding-left: 0 !important;\n padding-right: 0.25rem !important;\n }\n .rtl px-sm-1,\n [dir=\"rtl\"] px-sm-1 {\n padding-left: 0.25rem !important;\n padding-right: 0.25rem !important;\n }\n .rtl .pr-sm-2,\n [dir=\"rtl\"] .pr-sm-2 {\n padding-right: 0 !important;\n padding-left: 0.5rem !important;\n }\n .rtl .pl-sm-2,\n [dir=\"rtl\"] .pl-sm-2 {\n padding-left: 0 !important;\n padding-right: 0.5rem !important;\n }\n .rtl px-sm-2,\n [dir=\"rtl\"] px-sm-2 {\n padding-left: 0.5rem !important;\n padding-right: 0.5rem !important;\n }\n .rtl .pr-sm-3,\n [dir=\"rtl\"] .pr-sm-3 {\n padding-right: 0 !important;\n padding-left: 1rem !important;\n }\n .rtl .pl-sm-3,\n [dir=\"rtl\"] .pl-sm-3 {\n padding-left: 0 !important;\n padding-right: 1rem !important;\n }\n .rtl px-sm-3,\n [dir=\"rtl\"] px-sm-3 {\n padding-left: 1rem !important;\n padding-right: 1rem !important;\n }\n .rtl .pr-sm-4,\n [dir=\"rtl\"] .pr-sm-4 {\n padding-right: 0 !important;\n padding-left: 1.5rem !important;\n }\n .rtl .pl-sm-4,\n [dir=\"rtl\"] .pl-sm-4 {\n padding-left: 0 !important;\n padding-right: 1.5rem !important;\n }\n .rtl px-sm-4,\n [dir=\"rtl\"] px-sm-4 {\n padding-left: 1.5rem !important;\n padding-right: 1.5rem !important;\n }\n .rtl .pr-sm-5,\n [dir=\"rtl\"] .pr-sm-5 {\n padding-right: 0 !important;\n padding-left: 3rem !important;\n }\n .rtl .pl-sm-5,\n [dir=\"rtl\"] .pl-sm-5 {\n padding-left: 0 !important;\n padding-right: 3rem !important;\n }\n .rtl px-sm-5,\n [dir=\"rtl\"] px-sm-5 {\n padding-left: 3rem !important;\n padding-right: 3rem !important;\n }\n .rtl .mr-sm-auto,\n [dir=\"rtl\"] .mr-sm-auto {\n margin-right: 0 !important;\n margin-left: auto !important;\n }\n .rtl .ml-sm-auto,\n [dir=\"rtl\"] .ml-sm-auto {\n margin-right: auto !important;\n margin-left: 0 !important;\n }\n .rtl .mx-sm-auto,\n [dir=\"rtl\"] .mx-sm-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 768px) {\n .rtl .mr-md-0,\n [dir=\"rtl\"] .mr-md-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .rtl .ml-md-0,\n [dir=\"rtl\"] .ml-md-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n }\n .rtl mx-md-0,\n [dir=\"rtl\"] mx-md-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n }\n .rtl .mr-md-1,\n [dir=\"rtl\"] .mr-md-1 {\n margin-right: 0 !important;\n margin-left: 0.25rem !important;\n }\n .rtl .ml-md-1,\n [dir=\"rtl\"] .ml-md-1 {\n margin-left: 0 !important;\n margin-right: 0.25rem !important;\n }\n .rtl mx-md-1,\n [dir=\"rtl\"] mx-md-1 {\n margin-left: 0.25rem !important;\n margin-right: 0.25rem !important;\n }\n .rtl .mr-md-2,\n [dir=\"rtl\"] .mr-md-2 {\n margin-right: 0 !important;\n margin-left: 0.5rem !important;\n }\n .rtl .ml-md-2,\n [dir=\"rtl\"] .ml-md-2 {\n margin-left: 0 !important;\n margin-right: 0.5rem !important;\n }\n .rtl mx-md-2,\n [dir=\"rtl\"] mx-md-2 {\n margin-left: 0.5rem !important;\n margin-right: 0.5rem !important;\n }\n .rtl .mr-md-3,\n [dir=\"rtl\"] .mr-md-3 {\n margin-right: 0 !important;\n margin-left: 1rem !important;\n }\n .rtl .ml-md-3,\n [dir=\"rtl\"] .ml-md-3 {\n margin-left: 0 !important;\n margin-right: 1rem !important;\n }\n .rtl mx-md-3,\n [dir=\"rtl\"] mx-md-3 {\n margin-left: 1rem !important;\n margin-right: 1rem !important;\n }\n .rtl .mr-md-4,\n [dir=\"rtl\"] .mr-md-4 {\n margin-right: 0 !important;\n margin-left: 1.5rem !important;\n }\n .rtl .ml-md-4,\n [dir=\"rtl\"] .ml-md-4 {\n margin-left: 0 !important;\n margin-right: 1.5rem !important;\n }\n .rtl mx-md-4,\n [dir=\"rtl\"] mx-md-4 {\n margin-left: 1.5rem !important;\n margin-right: 1.5rem !important;\n }\n .rtl .mr-md-5,\n [dir=\"rtl\"] .mr-md-5 {\n margin-right: 0 !important;\n margin-left: 3rem !important;\n }\n .rtl .ml-md-5,\n [dir=\"rtl\"] .ml-md-5 {\n margin-left: 0 !important;\n margin-right: 3rem !important;\n }\n .rtl mx-md-5,\n [dir=\"rtl\"] mx-md-5 {\n margin-left: 3rem !important;\n margin-right: 3rem !important;\n }\n .rtl .pr-md-0,\n [dir=\"rtl\"] .pr-md-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .rtl .pl-md-0,\n [dir=\"rtl\"] .pl-md-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n }\n .rtl px-md-0,\n [dir=\"rtl\"] px-md-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n }\n .rtl .pr-md-1,\n [dir=\"rtl\"] .pr-md-1 {\n padding-right: 0 !important;\n padding-left: 0.25rem !important;\n }\n .rtl .pl-md-1,\n [dir=\"rtl\"] .pl-md-1 {\n padding-left: 0 !important;\n padding-right: 0.25rem !important;\n }\n .rtl px-md-1,\n [dir=\"rtl\"] px-md-1 {\n padding-left: 0.25rem !important;\n padding-right: 0.25rem !important;\n }\n .rtl .pr-md-2,\n [dir=\"rtl\"] .pr-md-2 {\n padding-right: 0 !important;\n padding-left: 0.5rem !important;\n }\n .rtl .pl-md-2,\n [dir=\"rtl\"] .pl-md-2 {\n padding-left: 0 !important;\n padding-right: 0.5rem !important;\n }\n .rtl px-md-2,\n [dir=\"rtl\"] px-md-2 {\n padding-left: 0.5rem !important;\n padding-right: 0.5rem !important;\n }\n .rtl .pr-md-3,\n [dir=\"rtl\"] .pr-md-3 {\n padding-right: 0 !important;\n padding-left: 1rem !important;\n }\n .rtl .pl-md-3,\n [dir=\"rtl\"] .pl-md-3 {\n padding-left: 0 !important;\n padding-right: 1rem !important;\n }\n .rtl px-md-3,\n [dir=\"rtl\"] px-md-3 {\n padding-left: 1rem !important;\n padding-right: 1rem !important;\n }\n .rtl .pr-md-4,\n [dir=\"rtl\"] .pr-md-4 {\n padding-right: 0 !important;\n padding-left: 1.5rem !important;\n }\n .rtl .pl-md-4,\n [dir=\"rtl\"] .pl-md-4 {\n padding-left: 0 !important;\n padding-right: 1.5rem !important;\n }\n .rtl px-md-4,\n [dir=\"rtl\"] px-md-4 {\n padding-left: 1.5rem !important;\n padding-right: 1.5rem !important;\n }\n .rtl .pr-md-5,\n [dir=\"rtl\"] .pr-md-5 {\n padding-right: 0 !important;\n padding-left: 3rem !important;\n }\n .rtl .pl-md-5,\n [dir=\"rtl\"] .pl-md-5 {\n padding-left: 0 !important;\n padding-right: 3rem !important;\n }\n .rtl px-md-5,\n [dir=\"rtl\"] px-md-5 {\n padding-left: 3rem !important;\n padding-right: 3rem !important;\n }\n .rtl .mr-md-auto,\n [dir=\"rtl\"] .mr-md-auto {\n margin-right: 0 !important;\n margin-left: auto !important;\n }\n .rtl .ml-md-auto,\n [dir=\"rtl\"] .ml-md-auto {\n margin-right: auto !important;\n margin-left: 0 !important;\n }\n .rtl .mx-md-auto,\n [dir=\"rtl\"] .mx-md-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 992px) {\n .rtl .mr-lg-0,\n [dir=\"rtl\"] .mr-lg-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .rtl .ml-lg-0,\n [dir=\"rtl\"] .ml-lg-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n }\n .rtl mx-lg-0,\n [dir=\"rtl\"] mx-lg-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n }\n .rtl .mr-lg-1,\n [dir=\"rtl\"] .mr-lg-1 {\n margin-right: 0 !important;\n margin-left: 0.25rem !important;\n }\n .rtl .ml-lg-1,\n [dir=\"rtl\"] .ml-lg-1 {\n margin-left: 0 !important;\n margin-right: 0.25rem !important;\n }\n .rtl mx-lg-1,\n [dir=\"rtl\"] mx-lg-1 {\n margin-left: 0.25rem !important;\n margin-right: 0.25rem !important;\n }\n .rtl .mr-lg-2,\n [dir=\"rtl\"] .mr-lg-2 {\n margin-right: 0 !important;\n margin-left: 0.5rem !important;\n }\n .rtl .ml-lg-2,\n [dir=\"rtl\"] .ml-lg-2 {\n margin-left: 0 !important;\n margin-right: 0.5rem !important;\n }\n .rtl mx-lg-2,\n [dir=\"rtl\"] mx-lg-2 {\n margin-left: 0.5rem !important;\n margin-right: 0.5rem !important;\n }\n .rtl .mr-lg-3,\n [dir=\"rtl\"] .mr-lg-3 {\n margin-right: 0 !important;\n margin-left: 1rem !important;\n }\n .rtl .ml-lg-3,\n [dir=\"rtl\"] .ml-lg-3 {\n margin-left: 0 !important;\n margin-right: 1rem !important;\n }\n .rtl mx-lg-3,\n [dir=\"rtl\"] mx-lg-3 {\n margin-left: 1rem !important;\n margin-right: 1rem !important;\n }\n .rtl .mr-lg-4,\n [dir=\"rtl\"] .mr-lg-4 {\n margin-right: 0 !important;\n margin-left: 1.5rem !important;\n }\n .rtl .ml-lg-4,\n [dir=\"rtl\"] .ml-lg-4 {\n margin-left: 0 !important;\n margin-right: 1.5rem !important;\n }\n .rtl mx-lg-4,\n [dir=\"rtl\"] mx-lg-4 {\n margin-left: 1.5rem !important;\n margin-right: 1.5rem !important;\n }\n .rtl .mr-lg-5,\n [dir=\"rtl\"] .mr-lg-5 {\n margin-right: 0 !important;\n margin-left: 3rem !important;\n }\n .rtl .ml-lg-5,\n [dir=\"rtl\"] .ml-lg-5 {\n margin-left: 0 !important;\n margin-right: 3rem !important;\n }\n .rtl mx-lg-5,\n [dir=\"rtl\"] mx-lg-5 {\n margin-left: 3rem !important;\n margin-right: 3rem !important;\n }\n .rtl .pr-lg-0,\n [dir=\"rtl\"] .pr-lg-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .rtl .pl-lg-0,\n [dir=\"rtl\"] .pl-lg-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n }\n .rtl px-lg-0,\n [dir=\"rtl\"] px-lg-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n }\n .rtl .pr-lg-1,\n [dir=\"rtl\"] .pr-lg-1 {\n padding-right: 0 !important;\n padding-left: 0.25rem !important;\n }\n .rtl .pl-lg-1,\n [dir=\"rtl\"] .pl-lg-1 {\n padding-left: 0 !important;\n padding-right: 0.25rem !important;\n }\n .rtl px-lg-1,\n [dir=\"rtl\"] px-lg-1 {\n padding-left: 0.25rem !important;\n padding-right: 0.25rem !important;\n }\n .rtl .pr-lg-2,\n [dir=\"rtl\"] .pr-lg-2 {\n padding-right: 0 !important;\n padding-left: 0.5rem !important;\n }\n .rtl .pl-lg-2,\n [dir=\"rtl\"] .pl-lg-2 {\n padding-left: 0 !important;\n padding-right: 0.5rem !important;\n }\n .rtl px-lg-2,\n [dir=\"rtl\"] px-lg-2 {\n padding-left: 0.5rem !important;\n padding-right: 0.5rem !important;\n }\n .rtl .pr-lg-3,\n [dir=\"rtl\"] .pr-lg-3 {\n padding-right: 0 !important;\n padding-left: 1rem !important;\n }\n .rtl .pl-lg-3,\n [dir=\"rtl\"] .pl-lg-3 {\n padding-left: 0 !important;\n padding-right: 1rem !important;\n }\n .rtl px-lg-3,\n [dir=\"rtl\"] px-lg-3 {\n padding-left: 1rem !important;\n padding-right: 1rem !important;\n }\n .rtl .pr-lg-4,\n [dir=\"rtl\"] .pr-lg-4 {\n padding-right: 0 !important;\n padding-left: 1.5rem !important;\n }\n .rtl .pl-lg-4,\n [dir=\"rtl\"] .pl-lg-4 {\n padding-left: 0 !important;\n padding-right: 1.5rem !important;\n }\n .rtl px-lg-4,\n [dir=\"rtl\"] px-lg-4 {\n padding-left: 1.5rem !important;\n padding-right: 1.5rem !important;\n }\n .rtl .pr-lg-5,\n [dir=\"rtl\"] .pr-lg-5 {\n padding-right: 0 !important;\n padding-left: 3rem !important;\n }\n .rtl .pl-lg-5,\n [dir=\"rtl\"] .pl-lg-5 {\n padding-left: 0 !important;\n padding-right: 3rem !important;\n }\n .rtl px-lg-5,\n [dir=\"rtl\"] px-lg-5 {\n padding-left: 3rem !important;\n padding-right: 3rem !important;\n }\n .rtl .mr-lg-auto,\n [dir=\"rtl\"] .mr-lg-auto {\n margin-right: 0 !important;\n margin-left: auto !important;\n }\n .rtl .ml-lg-auto,\n [dir=\"rtl\"] .ml-lg-auto {\n margin-right: auto !important;\n margin-left: 0 !important;\n }\n .rtl .mx-lg-auto,\n [dir=\"rtl\"] .mx-lg-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 1200px) {\n .rtl .mr-xl-0,\n [dir=\"rtl\"] .mr-xl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .rtl .ml-xl-0,\n [dir=\"rtl\"] .ml-xl-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n }\n .rtl mx-xl-0,\n [dir=\"rtl\"] mx-xl-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n }\n .rtl .mr-xl-1,\n [dir=\"rtl\"] .mr-xl-1 {\n margin-right: 0 !important;\n margin-left: 0.25rem !important;\n }\n .rtl .ml-xl-1,\n [dir=\"rtl\"] .ml-xl-1 {\n margin-left: 0 !important;\n margin-right: 0.25rem !important;\n }\n .rtl mx-xl-1,\n [dir=\"rtl\"] mx-xl-1 {\n margin-left: 0.25rem !important;\n margin-right: 0.25rem !important;\n }\n .rtl .mr-xl-2,\n [dir=\"rtl\"] .mr-xl-2 {\n margin-right: 0 !important;\n margin-left: 0.5rem !important;\n }\n .rtl .ml-xl-2,\n [dir=\"rtl\"] .ml-xl-2 {\n margin-left: 0 !important;\n margin-right: 0.5rem !important;\n }\n .rtl mx-xl-2,\n [dir=\"rtl\"] mx-xl-2 {\n margin-left: 0.5rem !important;\n margin-right: 0.5rem !important;\n }\n .rtl .mr-xl-3,\n [dir=\"rtl\"] .mr-xl-3 {\n margin-right: 0 !important;\n margin-left: 1rem !important;\n }\n .rtl .ml-xl-3,\n [dir=\"rtl\"] .ml-xl-3 {\n margin-left: 0 !important;\n margin-right: 1rem !important;\n }\n .rtl mx-xl-3,\n [dir=\"rtl\"] mx-xl-3 {\n margin-left: 1rem !important;\n margin-right: 1rem !important;\n }\n .rtl .mr-xl-4,\n [dir=\"rtl\"] .mr-xl-4 {\n margin-right: 0 !important;\n margin-left: 1.5rem !important;\n }\n .rtl .ml-xl-4,\n [dir=\"rtl\"] .ml-xl-4 {\n margin-left: 0 !important;\n margin-right: 1.5rem !important;\n }\n .rtl mx-xl-4,\n [dir=\"rtl\"] mx-xl-4 {\n margin-left: 1.5rem !important;\n margin-right: 1.5rem !important;\n }\n .rtl .mr-xl-5,\n [dir=\"rtl\"] .mr-xl-5 {\n margin-right: 0 !important;\n margin-left: 3rem !important;\n }\n .rtl .ml-xl-5,\n [dir=\"rtl\"] .ml-xl-5 {\n margin-left: 0 !important;\n margin-right: 3rem !important;\n }\n .rtl mx-xl-5,\n [dir=\"rtl\"] mx-xl-5 {\n margin-left: 3rem !important;\n margin-right: 3rem !important;\n }\n .rtl .pr-xl-0,\n [dir=\"rtl\"] .pr-xl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .rtl .pl-xl-0,\n [dir=\"rtl\"] .pl-xl-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n }\n .rtl px-xl-0,\n [dir=\"rtl\"] px-xl-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n }\n .rtl .pr-xl-1,\n [dir=\"rtl\"] .pr-xl-1 {\n padding-right: 0 !important;\n padding-left: 0.25rem !important;\n }\n .rtl .pl-xl-1,\n [dir=\"rtl\"] .pl-xl-1 {\n padding-left: 0 !important;\n padding-right: 0.25rem !important;\n }\n .rtl px-xl-1,\n [dir=\"rtl\"] px-xl-1 {\n padding-left: 0.25rem !important;\n padding-right: 0.25rem !important;\n }\n .rtl .pr-xl-2,\n [dir=\"rtl\"] .pr-xl-2 {\n padding-right: 0 !important;\n padding-left: 0.5rem !important;\n }\n .rtl .pl-xl-2,\n [dir=\"rtl\"] .pl-xl-2 {\n padding-left: 0 !important;\n padding-right: 0.5rem !important;\n }\n .rtl px-xl-2,\n [dir=\"rtl\"] px-xl-2 {\n padding-left: 0.5rem !important;\n padding-right: 0.5rem !important;\n }\n .rtl .pr-xl-3,\n [dir=\"rtl\"] .pr-xl-3 {\n padding-right: 0 !important;\n padding-left: 1rem !important;\n }\n .rtl .pl-xl-3,\n [dir=\"rtl\"] .pl-xl-3 {\n padding-left: 0 !important;\n padding-right: 1rem !important;\n }\n .rtl px-xl-3,\n [dir=\"rtl\"] px-xl-3 {\n padding-left: 1rem !important;\n padding-right: 1rem !important;\n }\n .rtl .pr-xl-4,\n [dir=\"rtl\"] .pr-xl-4 {\n padding-right: 0 !important;\n padding-left: 1.5rem !important;\n }\n .rtl .pl-xl-4,\n [dir=\"rtl\"] .pl-xl-4 {\n padding-left: 0 !important;\n padding-right: 1.5rem !important;\n }\n .rtl px-xl-4,\n [dir=\"rtl\"] px-xl-4 {\n padding-left: 1.5rem !important;\n padding-right: 1.5rem !important;\n }\n .rtl .pr-xl-5,\n [dir=\"rtl\"] .pr-xl-5 {\n padding-right: 0 !important;\n padding-left: 3rem !important;\n }\n .rtl .pl-xl-5,\n [dir=\"rtl\"] .pl-xl-5 {\n padding-left: 0 !important;\n padding-right: 3rem !important;\n }\n .rtl px-xl-5,\n [dir=\"rtl\"] px-xl-5 {\n padding-left: 3rem !important;\n padding-right: 3rem !important;\n }\n .rtl .mr-xl-auto,\n [dir=\"rtl\"] .mr-xl-auto {\n margin-right: 0 !important;\n margin-left: auto !important;\n }\n .rtl .ml-xl-auto,\n [dir=\"rtl\"] .ml-xl-auto {\n margin-right: auto !important;\n margin-left: 0 !important;\n }\n .rtl .mx-xl-auto,\n [dir=\"rtl\"] .mx-xl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n}\n\n.rtl .text-right,\n[dir=\"rtl\"] .text-right {\n text-align: left !important;\n}\n\n.rtl .text-left,\n[dir=\"rtl\"] .text-left {\n text-align: right !important;\n}\n\n@media (min-width: 576px) {\n .rtl .text-sm-right,\n [dir=\"rtl\"] .text-sm-right {\n text-align: left !important;\n }\n .rtl .text-sm-left,\n [dir=\"rtl\"] .text-sm-left {\n text-align: right !important;\n }\n}\n\n@media (min-width: 768px) {\n .rtl .text-md-right,\n [dir=\"rtl\"] .text-md-right {\n text-align: left !important;\n }\n .rtl .text-md-left,\n [dir=\"rtl\"] .text-md-left {\n text-align: right !important;\n }\n}\n\n@media (min-width: 992px) {\n .rtl .text-lg-right,\n [dir=\"rtl\"] .text-lg-right {\n text-align: left !important;\n }\n .rtl .text-lg-left,\n [dir=\"rtl\"] .text-lg-left {\n text-align: right !important;\n }\n}\n\n@media (min-width: 1200px) {\n .rtl .text-xl-right,\n [dir=\"rtl\"] .text-xl-right {\n text-align: left !important;\n }\n .rtl .text-xl-left,\n [dir=\"rtl\"] .text-xl-left {\n text-align: right !important;\n }\n}\n\n/*# sourceMappingURL=bootstrap-rtl.css.map */","// Do not forget to update getting-started/theming.md!\n:root {\n // Custom variable values only support SassScript inside `#{}`.\n @each $color, $value in $colors {\n --#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$color}: #{$value};\n }\n\n @each $bp, $value in $grid-breakpoints {\n --breakpoint-#{$bp}: #{$value};\n }\n\n // Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --font-family-sans-serif: #{inspect($font-family-sans-serif)};\n --font-family-monospace: #{inspect($font-family-monospace)};\n}\n","// stylelint-disable at-rule-no-vendor-prefix, declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// 1. Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n// 2. Change the default font family in all browsers.\n// 3. Correct the line height in all browsers.\n// 4. Prevent adjustments of font size after orientation changes in IE on Windows Phone and in iOS.\n// 5. Change the default tap highlight to be completely transparent in iOS.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box; // 1\n}\n\nhtml {\n font-family: sans-serif; // 2\n line-height: 1.15; // 3\n -webkit-text-size-adjust: 100%; // 4\n -webkit-tap-highlight-color: rgba($black, 0); // 5\n}\n\n// Shim for \"new\" HTML5 structural elements to display correctly (IE10, older browsers)\n// TODO: remove in v5\n// stylelint-disable-next-line selector-list-comma-newline-after\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Set an explicit initial text-align value so that we can later use\n// the `inherit` value on things like `` elements.\n\nbody {\n margin: 0; // 1\n font-family: $font-family-base;\n @include font-size($font-size-base);\n font-weight: $font-weight-base;\n line-height: $line-height-base;\n color: $body-color;\n text-align: left; // 3\n background-color: $body-bg; // 2\n}\n\n// Future-proof rule: in browsers that support :focus-visible, suppress the focus outline\n// on elements that programmatically receive focus but wouldn't normally show a visible\n// focus outline. In general, this would mean that the outline is only applied if the\n// interaction that led to the element receiving programmatic focus was a keyboard interaction,\n// or the browser has somehow determined that the user is primarily a keyboard user and/or\n// wants focus outlines to always be presented.\n//\n// See https://developer.mozilla.org/en-US/docs/Web/CSS/:focus-visible\n// and https://developer.paciellogroup.com/blog/2018/03/focus-visible-and-backwards-compatibility/\n[tabindex=\"-1\"]:focus:not(:focus-visible) {\n outline: 0 !important;\n}\n\n\n// Content grouping\n//\n// 1. Add the correct box sizing in Firefox.\n// 2. Show the overflow in Edge and IE.\n\nhr {\n box-sizing: content-box; // 1\n height: 0; // 1\n overflow: visible; // 2\n}\n\n\n//\n// Typography\n//\n\n// Remove top margins from headings\n//\n// By default, `

`-`

` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n// stylelint-disable-next-line selector-list-comma-newline-after\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: $headings-margin-bottom;\n}\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `

`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n// Abbreviations\n//\n// 1. Duplicate behavior to the data-* attribute for our tooltip plugin\n// 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n// 3. Add explicit cursor to indicate changed behavior.\n// 4. Remove the bottom border in Firefox 39-.\n// 5. Prevent the text-decoration to be skipped.\n\nabbr[title],\nabbr[data-original-title] { // 1\n text-decoration: underline; // 2\n text-decoration: underline dotted; // 2\n cursor: help; // 3\n border-bottom: 0; // 4\n text-decoration-skip-ink: none; // 5\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // Undo browser default\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: $font-weight-bolder; // Add the correct font weight in Chrome, Edge, and Safari\n}\n\nsmall {\n @include font-size(80%); // Add the correct font size in all browsers\n}\n\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n//\n\nsub,\nsup {\n position: relative;\n @include font-size(75%);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n//\n// Links\n//\n\na {\n color: $link-color;\n text-decoration: $link-decoration;\n background-color: transparent; // Remove the gray background on active links in IE 10.\n\n @include hover() {\n color: $link-hover-color;\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]) {\n color: inherit;\n text-decoration: none;\n\n @include hover() {\n color: inherit;\n text-decoration: none;\n }\n}\n\n\n//\n// Code\n//\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-monospace;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n}\n\npre {\n // Remove browser default top margin\n margin-top: 0;\n // Reset browser default of `1em` to use `rem`s\n margin-bottom: 1rem;\n // Don't allow content to break outside\n overflow: auto;\n}\n\n\n//\n// Figures\n//\n\nfigure {\n // Apply a consistent margin strategy (matches our type styles).\n margin: 0 0 1rem;\n}\n\n\n//\n// Images and content\n//\n\nimg {\n vertical-align: middle;\n border-style: none; // Remove the border on images inside links in IE 10-.\n}\n\nsvg {\n // Workaround for the SVG overflow bug in IE10/11 is still required.\n // See https://github.com/twbs/bootstrap/issues/26878\n overflow: hidden;\n vertical-align: middle;\n}\n\n\n//\n// Tables\n//\n\ntable {\n border-collapse: collapse; // Prevent double borders\n}\n\ncaption {\n padding-top: $table-cell-padding;\n padding-bottom: $table-cell-padding;\n color: $table-caption-color;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n // Matches default `` alignment by inheriting from the ``, or the\n // closest parent with a set `text-align`.\n text-align: inherit;\n}\n\n\n//\n// Forms\n//\n\nlabel {\n // Allow labels to use `margin` for spacing.\n display: inline-block;\n margin-bottom: $label-margin-bottom;\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n//\n// Details at https://github.com/twbs/bootstrap/issues/24093\nbutton {\n // stylelint-disable-next-line property-blacklist\n border-radius: 0;\n}\n\n// Work around a Firefox/IE bug where the transparent `button` background\n// results in a loss of the default `button` focus styles.\n//\n// Credit: https://github.com/suitcss/base/\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // Remove the margin in Firefox and Safari\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible; // Show the overflow in Edge\n}\n\nbutton,\nselect {\n text-transform: none; // Remove the inheritance of text transform in Firefox\n}\n\n// Remove the inheritance of word-wrap in Safari.\n//\n// Details at https://github.com/twbs/bootstrap/issues/24990\nselect {\n word-wrap: normal;\n}\n\n\n// 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n// controls in Android 4.\n// 2. Correct the inability to style clickable types in iOS and Safari.\nbutton,\n[type=\"button\"], // 1\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button; // 2\n}\n\n// Opinionated: add \"hand\" cursor to non-disabled button elements.\n@if $enable-pointer-cursor-for-buttons {\n button,\n [type=\"button\"],\n [type=\"reset\"],\n [type=\"submit\"] {\n &:not(:disabled) {\n cursor: pointer;\n }\n }\n}\n\n// Remove inner border and padding from Firefox, but don't restore the outline like Normalize.\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box; // 1. Add the correct box sizing in IE 10-\n padding: 0; // 2. Remove the padding in IE 10-\n}\n\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n // Remove the default appearance of temporal inputs to avoid a Mobile Safari\n // bug where setting a custom line-height prevents text from being vertically\n // centered within the input.\n // See https://bugs.webkit.org/show_bug.cgi?id=139848\n // and https://github.com/twbs/bootstrap/issues/11266\n -webkit-appearance: listbox;\n}\n\ntextarea {\n overflow: auto; // Remove the default vertical scrollbar in IE.\n // Textareas should really only resize vertically so they don't break their (horizontal) containers.\n resize: vertical;\n}\n\nfieldset {\n // Browsers set a default `min-width: min-content;` on fieldsets,\n // unlike e.g. `

`s, which have `min-width: 0;` by default.\n // So we reset that to ensure fieldsets behave more like a standard block element.\n // See https://github.com/twbs/bootstrap/issues/12359\n // and https://html.spec.whatwg.org/multipage/#the-fieldset-and-legend-elements\n min-width: 0;\n // Reset the default outline behavior of fieldsets so they don't affect page layout.\n padding: 0;\n margin: 0;\n border: 0;\n}\n\n// 1. Correct the text wrapping in Edge and IE.\n// 2. Correct the color inheritance from `fieldset` elements in IE.\nlegend {\n display: block;\n width: 100%;\n max-width: 100%; // 1\n padding: 0;\n margin-bottom: .5rem;\n @include font-size(1.5rem);\n line-height: inherit;\n color: inherit; // 2\n white-space: normal; // 1\n}\n\nprogress {\n vertical-align: baseline; // Add the correct vertical alignment in Chrome, Firefox, and Opera.\n}\n\n// Correct the cursor style of increment and decrement buttons in Chrome.\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n // This overrides the extra rounded corners on search inputs in iOS so that our\n // `.form-control` class can properly style them. Note that this cannot simply\n // be added to `.form-control` as it's not specific enough. For details, see\n // https://github.com/twbs/bootstrap/issues/11586.\n outline-offset: -2px; // 2. Correct the outline style in Safari.\n -webkit-appearance: none;\n}\n\n//\n// Remove the inner padding in Chrome and Safari on macOS.\n//\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n//\n// 1. Correct the inability to style clickable types in iOS and Safari.\n// 2. Change font properties to `inherit` in Safari.\n//\n\n::-webkit-file-upload-button {\n font: inherit; // 2\n -webkit-appearance: button; // 1\n}\n\n//\n// Correct element displays\n//\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item; // Add the correct display in all browsers\n cursor: pointer;\n}\n\ntemplate {\n display: none; // Add the correct display in IE\n}\n\n// Always hide an element with the `hidden` HTML attribute (from PureCSS).\n// Needed for proper display in IE 10-.\n[hidden] {\n display: none !important;\n}\n","// Variables\n//\n// Variables should follow the `$component-state-property-size` formula for\n// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs.\n\n// Color system\n\n$white: #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #e9ecef !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #adb5bd !default;\n$gray-600: #6c757d !default;\n$gray-700: #495057 !default;\n$gray-800: #343a40 !default;\n$gray-900: #212529 !default;\n$black: #000 !default;\n\n$grays: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$grays: map-merge(\n (\n \"100\": $gray-100,\n \"200\": $gray-200,\n \"300\": $gray-300,\n \"400\": $gray-400,\n \"500\": $gray-500,\n \"600\": $gray-600,\n \"700\": $gray-700,\n \"800\": $gray-800,\n \"900\": $gray-900\n ),\n $grays\n);\n\n$blue: #007bff !default;\n$indigo: #6610f2 !default;\n$purple: #6f42c1 !default;\n$pink: #e83e8c !default;\n$red: #dc3545 !default;\n$orange: #fd7e14 !default;\n$yellow: #ffc107 !default;\n$green: #28a745 !default;\n$teal: #20c997 !default;\n$cyan: #17a2b8 !default;\n\n$colors: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$colors: map-merge(\n (\n \"blue\": $blue,\n \"indigo\": $indigo,\n \"purple\": $purple,\n \"pink\": $pink,\n \"red\": $red,\n \"orange\": $orange,\n \"yellow\": $yellow,\n \"green\": $green,\n \"teal\": $teal,\n \"cyan\": $cyan,\n \"white\": $white,\n \"gray\": $gray-600,\n \"gray-dark\": $gray-800\n ),\n $colors\n);\n\n$primary: $blue !default;\n$secondary: $gray-600 !default;\n$success: $green !default;\n$info: $cyan !default;\n$warning: $yellow !default;\n$danger: $red !default;\n$light: $gray-100 !default;\n$dark: $gray-800 !default;\n\n$theme-colors: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$theme-colors: map-merge(\n (\n \"primary\": $primary,\n \"secondary\": $secondary,\n \"success\": $success,\n \"info\": $info,\n \"warning\": $warning,\n \"danger\": $danger,\n \"light\": $light,\n \"dark\": $dark\n ),\n $theme-colors\n);\n\n// Set a specific jump point for requesting color jumps\n$theme-color-interval: 8% !default;\n\n// The yiq lightness value that determines when the lightness of color changes from \"dark\" to \"light\". Acceptable values are between 0 and 255.\n$yiq-contrasted-threshold: 150 !default;\n\n// Customize the light and dark text colors for use in our YIQ color contrast function.\n$yiq-text-dark: $gray-900 !default;\n$yiq-text-light: $white !default;\n\n// Characters which are escaped by the escape-svg function\n$escaped-characters: (\n (\"<\",\"%3c\"),\n (\">\",\"%3e\"),\n (\"#\",\"%23\"),\n) !default;\n\n\n// Options\n//\n// Quickly modify global styling by enabling or disabling optional features.\n\n$enable-caret: true !default;\n$enable-rounded: true !default;\n$enable-shadows: false !default;\n$enable-gradients: false !default;\n$enable-transitions: true !default;\n$enable-prefers-reduced-motion-media-query: true !default;\n$enable-hover-media-query: false !default; // Deprecated, no longer affects any compiled CSS\n$enable-grid-classes: true !default;\n$enable-pointer-cursor-for-buttons: true !default;\n$enable-print-styles: true !default;\n$enable-responsive-font-sizes: false !default;\n$enable-validation-icons: true !default;\n$enable-deprecation-messages: true !default;\n\n\n// Spacing\n//\n// Control the default styling of most Bootstrap elements by modifying these\n// variables. Mostly focused on spacing.\n// You can add more entries to the $spacers map, should you need more variation.\n\n$spacer: 1rem !default;\n$spacers: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$spacers: map-merge(\n (\n 0: 0,\n 1: ($spacer * .25),\n 2: ($spacer * .5),\n 3: $spacer,\n 4: ($spacer * 1.5),\n 5: ($spacer * 3)\n ),\n $spacers\n);\n\n// This variable affects the `.h-*` and `.w-*` classes.\n$sizes: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$sizes: map-merge(\n (\n 25: 25%,\n 50: 50%,\n 75: 75%,\n 100: 100%,\n auto: auto\n ),\n $sizes\n);\n\n\n// Body\n//\n// Settings for the `` element.\n\n$body-bg: $white !default;\n$body-color: $gray-900 !default;\n\n\n// Links\n//\n// Style anchor elements.\n\n$link-color: theme-color(\"primary\") !default;\n$link-decoration: none !default;\n$link-hover-color: darken($link-color, 15%) !default;\n$link-hover-decoration: underline !default;\n// Darken percentage for links with `.text-*` class (e.g. `.text-success`)\n$emphasized-link-hover-darken-percentage: 15% !default;\n\n// Paragraphs\n//\n// Style p element.\n\n$paragraph-margin-bottom: 1rem !default;\n\n\n// Grid breakpoints\n//\n// Define the minimum dimensions at which your layout will change,\n// adapting to different screen sizes, for use in media queries.\n\n$grid-breakpoints: (\n xs: 0,\n sm: 576px,\n md: 768px,\n lg: 992px,\n xl: 1200px\n) !default;\n\n@include _assert-ascending($grid-breakpoints, \"$grid-breakpoints\");\n@include _assert-starts-at-zero($grid-breakpoints, \"$grid-breakpoints\");\n\n\n// Grid containers\n//\n// Define the maximum width of `.container` for different screen sizes.\n\n$container-max-widths: (\n sm: 540px,\n md: 720px,\n lg: 960px,\n xl: 1140px\n) !default;\n\n@include _assert-ascending($container-max-widths, \"$container-max-widths\");\n\n\n// Grid columns\n//\n// Set the number of columns and specify the width of the gutters.\n\n$grid-columns: 12 !default;\n$grid-gutter-width: 30px !default;\n$grid-row-columns: 6 !default;\n\n\n// Components\n//\n// Define common padding and border radius sizes and more.\n\n$line-height-lg: 1.5 !default;\n$line-height-sm: 1.5 !default;\n\n$border-width: 1px !default;\n$border-color: $gray-300 !default;\n\n$border-radius: .25rem !default;\n$border-radius-lg: .3rem !default;\n$border-radius-sm: .2rem !default;\n\n$rounded-pill: 50rem !default;\n\n$box-shadow-sm: 0 .125rem .25rem rgba($black, .075) !default;\n$box-shadow: 0 .5rem 1rem rgba($black, .15) !default;\n$box-shadow-lg: 0 1rem 3rem rgba($black, .175) !default;\n\n$component-active-color: $white !default;\n$component-active-bg: theme-color(\"primary\") !default;\n\n$caret-width: .3em !default;\n$caret-vertical-align: $caret-width * .85 !default;\n$caret-spacing: $caret-width * .85 !default;\n\n$transition-base: all .2s ease-in-out !default;\n$transition-fade: opacity .15s linear !default;\n$transition-collapse: height .35s ease !default;\n\n$embed-responsive-aspect-ratios: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$embed-responsive-aspect-ratios: join(\n (\n (21 9),\n (16 9),\n (4 3),\n (1 1),\n ),\n $embed-responsive-aspect-ratios\n);\n\n// Typography\n//\n// Font, line-height, and color for body text, headings, and more.\n\n// stylelint-disable value-keyword-case\n$font-family-sans-serif: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\" !default;\n$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !default;\n$font-family-base: $font-family-sans-serif !default;\n// stylelint-enable value-keyword-case\n\n$font-size-base: 1rem !default; // Assumes the browser default, typically `16px`\n$font-size-lg: $font-size-base * 1.25 !default;\n$font-size-sm: $font-size-base * .875 !default;\n\n$font-weight-lighter: lighter !default;\n$font-weight-light: 300 !default;\n$font-weight-normal: 400 !default;\n$font-weight-bold: 700 !default;\n$font-weight-bolder: bolder !default;\n\n$font-weight-base: $font-weight-normal !default;\n$line-height-base: 1.5 !default;\n\n$h1-font-size: $font-size-base * 2.5 !default;\n$h2-font-size: $font-size-base * 2 !default;\n$h3-font-size: $font-size-base * 1.75 !default;\n$h4-font-size: $font-size-base * 1.5 !default;\n$h5-font-size: $font-size-base * 1.25 !default;\n$h6-font-size: $font-size-base !default;\n\n$headings-margin-bottom: $spacer / 2 !default;\n$headings-font-family: null !default;\n$headings-font-weight: 500 !default;\n$headings-line-height: 1.2 !default;\n$headings-color: null !default;\n\n$display1-size: 6rem !default;\n$display2-size: 5.5rem !default;\n$display3-size: 4.5rem !default;\n$display4-size: 3.5rem !default;\n\n$display1-weight: 300 !default;\n$display2-weight: 300 !default;\n$display3-weight: 300 !default;\n$display4-weight: 300 !default;\n$display-line-height: $headings-line-height !default;\n\n$lead-font-size: $font-size-base * 1.25 !default;\n$lead-font-weight: 300 !default;\n\n$small-font-size: 80% !default;\n\n$text-muted: $gray-600 !default;\n\n$blockquote-small-color: $gray-600 !default;\n$blockquote-small-font-size: $small-font-size !default;\n$blockquote-font-size: $font-size-base * 1.25 !default;\n\n$hr-border-color: rgba($black, .1) !default;\n$hr-border-width: $border-width !default;\n\n$mark-padding: .2em !default;\n\n$dt-font-weight: $font-weight-bold !default;\n\n$kbd-box-shadow: inset 0 -.1rem 0 rgba($black, .25) !default;\n$nested-kbd-font-weight: $font-weight-bold !default;\n\n$list-inline-padding: .5rem !default;\n\n$mark-bg: #fcf8e3 !default;\n\n$hr-margin-y: $spacer !default;\n\n\n// Tables\n//\n// Customizes the `.table` component with basic values, each used across all table variations.\n\n$table-cell-padding: .75rem !default;\n$table-cell-padding-sm: .3rem !default;\n\n$table-color: $body-color !default;\n$table-bg: null !default;\n$table-accent-bg: rgba($black, .05) !default;\n$table-hover-color: $table-color !default;\n$table-hover-bg: rgba($black, .075) !default;\n$table-active-bg: $table-hover-bg !default;\n\n$table-border-width: $border-width !default;\n$table-border-color: $border-color !default;\n\n$table-head-bg: $gray-200 !default;\n$table-head-color: $gray-700 !default;\n\n$table-dark-color: $white !default;\n$table-dark-bg: $gray-800 !default;\n$table-dark-accent-bg: rgba($white, .05) !default;\n$table-dark-hover-color: $table-dark-color !default;\n$table-dark-hover-bg: rgba($white, .075) !default;\n$table-dark-border-color: lighten($table-dark-bg, 7.5%) !default;\n\n$table-striped-order: odd !default;\n\n$table-caption-color: $text-muted !default;\n\n$table-bg-level: -9 !default;\n$table-border-level: -6 !default;\n\n\n// Buttons + Forms\n//\n// Shared variables that are reassigned to `$input-` and `$btn-` specific variables.\n\n$input-btn-padding-y: .375rem !default;\n$input-btn-padding-x: .75rem !default;\n$input-btn-font-family: null !default;\n$input-btn-font-size: $font-size-base !default;\n$input-btn-line-height: $line-height-base !default;\n\n$input-btn-focus-width: .2rem !default;\n$input-btn-focus-color: rgba($component-active-bg, .25) !default;\n$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color !default;\n\n$input-btn-padding-y-sm: .25rem !default;\n$input-btn-padding-x-sm: .5rem !default;\n$input-btn-font-size-sm: $font-size-sm !default;\n$input-btn-line-height-sm: $line-height-sm !default;\n\n$input-btn-padding-y-lg: .5rem !default;\n$input-btn-padding-x-lg: 1rem !default;\n$input-btn-font-size-lg: $font-size-lg !default;\n$input-btn-line-height-lg: $line-height-lg !default;\n\n$input-btn-border-width: $border-width !default;\n\n\n// Buttons\n//\n// For each of Bootstrap's buttons, define text, background, and border color.\n\n$btn-padding-y: $input-btn-padding-y !default;\n$btn-padding-x: $input-btn-padding-x !default;\n$btn-font-family: $input-btn-font-family !default;\n$btn-font-size: $input-btn-font-size !default;\n$btn-line-height: $input-btn-line-height !default;\n$btn-white-space: null !default; // Set to `nowrap` to prevent text wrapping\n\n$btn-padding-y-sm: $input-btn-padding-y-sm !default;\n$btn-padding-x-sm: $input-btn-padding-x-sm !default;\n$btn-font-size-sm: $input-btn-font-size-sm !default;\n$btn-line-height-sm: $input-btn-line-height-sm !default;\n\n$btn-padding-y-lg: $input-btn-padding-y-lg !default;\n$btn-padding-x-lg: $input-btn-padding-x-lg !default;\n$btn-font-size-lg: $input-btn-font-size-lg !default;\n$btn-line-height-lg: $input-btn-line-height-lg !default;\n\n$btn-border-width: $input-btn-border-width !default;\n\n$btn-font-weight: $font-weight-normal !default;\n$btn-box-shadow: inset 0 1px 0 rgba($white, .15), 0 1px 1px rgba($black, .075) !default;\n$btn-focus-width: $input-btn-focus-width !default;\n$btn-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$btn-disabled-opacity: .65 !default;\n$btn-active-box-shadow: inset 0 3px 5px rgba($black, .125) !default;\n\n$btn-link-disabled-color: $gray-600 !default;\n\n$btn-block-spacing-y: .5rem !default;\n\n// Allows for customizing button radius independently from global border radius\n$btn-border-radius: $border-radius !default;\n$btn-border-radius-lg: $border-radius-lg !default;\n$btn-border-radius-sm: $border-radius-sm !default;\n\n$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n\n// Forms\n\n$label-margin-bottom: .5rem !default;\n\n$input-padding-y: $input-btn-padding-y !default;\n$input-padding-x: $input-btn-padding-x !default;\n$input-font-family: $input-btn-font-family !default;\n$input-font-size: $input-btn-font-size !default;\n$input-font-weight: $font-weight-base !default;\n$input-line-height: $input-btn-line-height !default;\n\n$input-padding-y-sm: $input-btn-padding-y-sm !default;\n$input-padding-x-sm: $input-btn-padding-x-sm !default;\n$input-font-size-sm: $input-btn-font-size-sm !default;\n$input-line-height-sm: $input-btn-line-height-sm !default;\n\n$input-padding-y-lg: $input-btn-padding-y-lg !default;\n$input-padding-x-lg: $input-btn-padding-x-lg !default;\n$input-font-size-lg: $input-btn-font-size-lg !default;\n$input-line-height-lg: $input-btn-line-height-lg !default;\n\n$input-bg: $white !default;\n$input-disabled-bg: $gray-200 !default;\n\n$input-color: $gray-700 !default;\n$input-border-color: $gray-400 !default;\n$input-border-width: $input-btn-border-width !default;\n$input-box-shadow: inset 0 1px 1px rgba($black, .075) !default;\n\n$input-border-radius: $border-radius !default;\n$input-border-radius-lg: $border-radius-lg !default;\n$input-border-radius-sm: $border-radius-sm !default;\n\n$input-focus-bg: $input-bg !default;\n$input-focus-border-color: lighten($component-active-bg, 25%) !default;\n$input-focus-color: $input-color !default;\n$input-focus-width: $input-btn-focus-width !default;\n$input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$input-placeholder-color: $gray-600 !default;\n$input-plaintext-color: $body-color !default;\n\n$input-height-border: $input-border-width * 2 !default;\n\n$input-height-inner: add($input-line-height * 1em, $input-padding-y * 2) !default;\n$input-height-inner-half: add($input-line-height * .5em, $input-padding-y) !default;\n$input-height-inner-quarter: add($input-line-height * .25em, $input-padding-y / 2) !default;\n\n$input-height: add($input-line-height * 1em, add($input-padding-y * 2, $input-height-border, false)) !default;\n$input-height-sm: add($input-line-height-sm * 1em, add($input-padding-y-sm * 2, $input-height-border, false)) !default;\n$input-height-lg: add($input-line-height-lg * 1em, add($input-padding-y-lg * 2, $input-height-border, false)) !default;\n\n$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$form-text-margin-top: .25rem !default;\n\n$form-check-input-gutter: 1.25rem !default;\n$form-check-input-margin-y: .3rem !default;\n$form-check-input-margin-x: .25rem !default;\n\n$form-check-inline-margin-x: .75rem !default;\n$form-check-inline-input-margin-x: .3125rem !default;\n\n$form-grid-gutter-width: 10px !default;\n$form-group-margin-bottom: 1rem !default;\n\n$input-group-addon-color: $input-color !default;\n$input-group-addon-bg: $gray-200 !default;\n$input-group-addon-border-color: $input-border-color !default;\n\n$custom-forms-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$custom-control-gutter: .5rem !default;\n$custom-control-spacer-x: 1rem !default;\n$custom-control-cursor: null !default;\n\n$custom-control-indicator-size: 1rem !default;\n$custom-control-indicator-bg: $input-bg !default;\n\n$custom-control-indicator-bg-size: 50% 50% !default;\n$custom-control-indicator-box-shadow: $input-box-shadow !default;\n$custom-control-indicator-border-color: $gray-500 !default;\n$custom-control-indicator-border-width: $input-border-width !default;\n\n$custom-control-label-color: null !default;\n\n$custom-control-indicator-disabled-bg: $input-disabled-bg !default;\n$custom-control-label-disabled-color: $gray-600 !default;\n\n$custom-control-indicator-checked-color: $component-active-color !default;\n$custom-control-indicator-checked-bg: $component-active-bg !default;\n$custom-control-indicator-checked-disabled-bg: rgba(theme-color(\"primary\"), .5) !default;\n$custom-control-indicator-checked-box-shadow: none !default;\n$custom-control-indicator-checked-border-color: $custom-control-indicator-checked-bg !default;\n\n$custom-control-indicator-focus-box-shadow: $input-focus-box-shadow !default;\n$custom-control-indicator-focus-border-color: $input-focus-border-color !default;\n\n$custom-control-indicator-active-color: $component-active-color !default;\n$custom-control-indicator-active-bg: lighten($component-active-bg, 35%) !default;\n$custom-control-indicator-active-box-shadow: none !default;\n$custom-control-indicator-active-border-color: $custom-control-indicator-active-bg !default;\n\n$custom-checkbox-indicator-border-radius: $border-radius !default;\n$custom-checkbox-indicator-icon-checked: url(\"data:image/svg+xml,\") !default;\n\n$custom-checkbox-indicator-indeterminate-bg: $component-active-bg !default;\n$custom-checkbox-indicator-indeterminate-color: $custom-control-indicator-checked-color !default;\n$custom-checkbox-indicator-icon-indeterminate: url(\"data:image/svg+xml,\") !default;\n$custom-checkbox-indicator-indeterminate-box-shadow: none !default;\n$custom-checkbox-indicator-indeterminate-border-color: $custom-checkbox-indicator-indeterminate-bg !default;\n\n$custom-radio-indicator-border-radius: 50% !default;\n$custom-radio-indicator-icon-checked: url(\"data:image/svg+xml,\") !default;\n\n$custom-switch-width: $custom-control-indicator-size * 1.75 !default;\n$custom-switch-indicator-border-radius: $custom-control-indicator-size / 2 !default;\n$custom-switch-indicator-size: subtract($custom-control-indicator-size, $custom-control-indicator-border-width * 4) !default;\n\n$custom-select-padding-y: $input-padding-y !default;\n$custom-select-padding-x: $input-padding-x !default;\n$custom-select-font-family: $input-font-family !default;\n$custom-select-font-size: $input-font-size !default;\n$custom-select-height: $input-height !default;\n$custom-select-indicator-padding: 1rem !default; // Extra padding to account for the presence of the background-image based indicator\n$custom-select-font-weight: $input-font-weight !default;\n$custom-select-line-height: $input-line-height !default;\n$custom-select-color: $input-color !default;\n$custom-select-disabled-color: $gray-600 !default;\n$custom-select-bg: $input-bg !default;\n$custom-select-disabled-bg: $gray-200 !default;\n$custom-select-bg-size: 8px 10px !default; // In pixels because image dimensions\n$custom-select-indicator-color: $gray-800 !default;\n$custom-select-indicator: url(\"data:image/svg+xml,\") !default;\n$custom-select-background: escape-svg($custom-select-indicator) no-repeat right $custom-select-padding-x center / $custom-select-bg-size !default; // Used so we can have multiple background elements (e.g., arrow and feedback icon)\n\n$custom-select-feedback-icon-padding-right: add(1em * .75, (2 * $custom-select-padding-y * .75) + $custom-select-padding-x + $custom-select-indicator-padding) !default;\n$custom-select-feedback-icon-position: center right ($custom-select-padding-x + $custom-select-indicator-padding) !default;\n$custom-select-feedback-icon-size: $input-height-inner-half $input-height-inner-half !default;\n\n$custom-select-border-width: $input-border-width !default;\n$custom-select-border-color: $input-border-color !default;\n$custom-select-border-radius: $border-radius !default;\n$custom-select-box-shadow: inset 0 1px 2px rgba($black, .075) !default;\n\n$custom-select-focus-border-color: $input-focus-border-color !default;\n$custom-select-focus-width: $input-focus-width !default;\n$custom-select-focus-box-shadow: 0 0 0 $custom-select-focus-width $input-btn-focus-color !default;\n\n$custom-select-padding-y-sm: $input-padding-y-sm !default;\n$custom-select-padding-x-sm: $input-padding-x-sm !default;\n$custom-select-font-size-sm: $input-font-size-sm !default;\n$custom-select-height-sm: $input-height-sm !default;\n\n$custom-select-padding-y-lg: $input-padding-y-lg !default;\n$custom-select-padding-x-lg: $input-padding-x-lg !default;\n$custom-select-font-size-lg: $input-font-size-lg !default;\n$custom-select-height-lg: $input-height-lg !default;\n\n$custom-range-track-width: 100% !default;\n$custom-range-track-height: .5rem !default;\n$custom-range-track-cursor: pointer !default;\n$custom-range-track-bg: $gray-300 !default;\n$custom-range-track-border-radius: 1rem !default;\n$custom-range-track-box-shadow: inset 0 .25rem .25rem rgba($black, .1) !default;\n\n$custom-range-thumb-width: 1rem !default;\n$custom-range-thumb-height: $custom-range-thumb-width !default;\n$custom-range-thumb-bg: $component-active-bg !default;\n$custom-range-thumb-border: 0 !default;\n$custom-range-thumb-border-radius: 1rem !default;\n$custom-range-thumb-box-shadow: 0 .1rem .25rem rgba($black, .1) !default;\n$custom-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-focus-box-shadow !default;\n$custom-range-thumb-focus-box-shadow-width: $input-focus-width !default; // For focus box shadow issue in IE/Edge\n$custom-range-thumb-active-bg: lighten($component-active-bg, 35%) !default;\n$custom-range-thumb-disabled-bg: $gray-500 !default;\n\n$custom-file-height: $input-height !default;\n$custom-file-height-inner: $input-height-inner !default;\n$custom-file-focus-border-color: $input-focus-border-color !default;\n$custom-file-focus-box-shadow: $input-focus-box-shadow !default;\n$custom-file-disabled-bg: $input-disabled-bg !default;\n\n$custom-file-padding-y: $input-padding-y !default;\n$custom-file-padding-x: $input-padding-x !default;\n$custom-file-line-height: $input-line-height !default;\n$custom-file-font-family: $input-font-family !default;\n$custom-file-font-weight: $input-font-weight !default;\n$custom-file-color: $input-color !default;\n$custom-file-bg: $input-bg !default;\n$custom-file-border-width: $input-border-width !default;\n$custom-file-border-color: $input-border-color !default;\n$custom-file-border-radius: $input-border-radius !default;\n$custom-file-box-shadow: $input-box-shadow !default;\n$custom-file-button-color: $custom-file-color !default;\n$custom-file-button-bg: $input-group-addon-bg !default;\n$custom-file-text: (\n en: \"Browse\"\n) !default;\n\n\n// Form validation\n\n$form-feedback-margin-top: $form-text-margin-top !default;\n$form-feedback-font-size: $small-font-size !default;\n$form-feedback-valid-color: theme-color(\"success\") !default;\n$form-feedback-invalid-color: theme-color(\"danger\") !default;\n\n$form-feedback-icon-valid-color: $form-feedback-valid-color !default;\n$form-feedback-icon-valid: url(\"data:image/svg+xml,\") !default;\n$form-feedback-icon-invalid-color: $form-feedback-invalid-color !default;\n$form-feedback-icon-invalid: url(\"data:image/svg+xml,\") !default;\n\n$form-validation-states: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$form-validation-states: map-merge(\n (\n \"valid\": (\n \"color\": $form-feedback-valid-color,\n \"icon\": $form-feedback-icon-valid\n ),\n \"invalid\": (\n \"color\": $form-feedback-invalid-color,\n \"icon\": $form-feedback-icon-invalid\n ),\n ),\n $form-validation-states\n);\n\n// Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n\n$zindex-dropdown: 1000 !default;\n$zindex-sticky: 1020 !default;\n$zindex-fixed: 1030 !default;\n$zindex-modal-backdrop: 1040 !default;\n$zindex-modal: 1050 !default;\n$zindex-popover: 1060 !default;\n$zindex-tooltip: 1070 !default;\n\n\n// Navs\n\n$nav-link-padding-y: .5rem !default;\n$nav-link-padding-x: 1rem !default;\n$nav-link-disabled-color: $gray-600 !default;\n\n$nav-tabs-border-color: $gray-300 !default;\n$nav-tabs-border-width: $border-width !default;\n$nav-tabs-border-radius: $border-radius !default;\n$nav-tabs-link-hover-border-color: $gray-200 $gray-200 $nav-tabs-border-color !default;\n$nav-tabs-link-active-color: $gray-700 !default;\n$nav-tabs-link-active-bg: $body-bg !default;\n$nav-tabs-link-active-border-color: $gray-300 $gray-300 $nav-tabs-link-active-bg !default;\n\n$nav-pills-border-radius: $border-radius !default;\n$nav-pills-link-active-color: $component-active-color !default;\n$nav-pills-link-active-bg: $component-active-bg !default;\n\n$nav-divider-color: $gray-200 !default;\n$nav-divider-margin-y: $spacer / 2 !default;\n\n\n// Navbar\n\n$navbar-padding-y: $spacer / 2 !default;\n$navbar-padding-x: $spacer !default;\n\n$navbar-nav-link-padding-x: .5rem !default;\n\n$navbar-brand-font-size: $font-size-lg !default;\n// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link\n$nav-link-height: $font-size-base * $line-height-base + $nav-link-padding-y * 2 !default;\n$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;\n$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) / 2 !default;\n\n$navbar-toggler-padding-y: .25rem !default;\n$navbar-toggler-padding-x: .75rem !default;\n$navbar-toggler-font-size: $font-size-lg !default;\n$navbar-toggler-border-radius: $btn-border-radius !default;\n\n$navbar-dark-color: rgba($white, .5) !default;\n$navbar-dark-hover-color: rgba($white, .75) !default;\n$navbar-dark-active-color: $white !default;\n$navbar-dark-disabled-color: rgba($white, .25) !default;\n$navbar-dark-toggler-icon-bg: url(\"data:image/svg+xml,\") !default;\n$navbar-dark-toggler-border-color: rgba($white, .1) !default;\n\n$navbar-light-color: rgba($black, .5) !default;\n$navbar-light-hover-color: rgba($black, .7) !default;\n$navbar-light-active-color: rgba($black, .9) !default;\n$navbar-light-disabled-color: rgba($black, .3) !default;\n$navbar-light-toggler-icon-bg: url(\"data:image/svg+xml,\") !default;\n$navbar-light-toggler-border-color: rgba($black, .1) !default;\n\n$navbar-light-brand-color: $navbar-light-active-color !default;\n$navbar-light-brand-hover-color: $navbar-light-active-color !default;\n$navbar-dark-brand-color: $navbar-dark-active-color !default;\n$navbar-dark-brand-hover-color: $navbar-dark-active-color !default;\n\n\n// Dropdowns\n//\n// Dropdown menu container and contents.\n\n$dropdown-min-width: 10rem !default;\n$dropdown-padding-y: .5rem !default;\n$dropdown-spacer: .125rem !default;\n$dropdown-font-size: $font-size-base !default;\n$dropdown-color: $body-color !default;\n$dropdown-bg: $white !default;\n$dropdown-border-color: rgba($black, .15) !default;\n$dropdown-border-radius: $border-radius !default;\n$dropdown-border-width: $border-width !default;\n$dropdown-inner-border-radius: subtract($dropdown-border-radius, $dropdown-border-width) !default;\n$dropdown-divider-bg: $gray-200 !default;\n$dropdown-divider-margin-y: $nav-divider-margin-y !default;\n$dropdown-box-shadow: 0 .5rem 1rem rgba($black, .175) !default;\n\n$dropdown-link-color: $gray-900 !default;\n$dropdown-link-hover-color: darken($gray-900, 5%) !default;\n$dropdown-link-hover-bg: $gray-100 !default;\n\n$dropdown-link-active-color: $component-active-color !default;\n$dropdown-link-active-bg: $component-active-bg !default;\n\n$dropdown-link-disabled-color: $gray-600 !default;\n\n$dropdown-item-padding-y: .25rem !default;\n$dropdown-item-padding-x: 1.5rem !default;\n\n$dropdown-header-color: $gray-600 !default;\n\n\n// Pagination\n\n$pagination-padding-y: .5rem !default;\n$pagination-padding-x: .75rem !default;\n$pagination-padding-y-sm: .25rem !default;\n$pagination-padding-x-sm: .5rem !default;\n$pagination-padding-y-lg: .75rem !default;\n$pagination-padding-x-lg: 1.5rem !default;\n$pagination-line-height: 1.25 !default;\n\n$pagination-color: $link-color !default;\n$pagination-bg: $white !default;\n$pagination-border-width: $border-width !default;\n$pagination-border-color: $gray-300 !default;\n\n$pagination-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$pagination-focus-outline: 0 !default;\n\n$pagination-hover-color: $link-hover-color !default;\n$pagination-hover-bg: $gray-200 !default;\n$pagination-hover-border-color: $gray-300 !default;\n\n$pagination-active-color: $component-active-color !default;\n$pagination-active-bg: $component-active-bg !default;\n$pagination-active-border-color: $pagination-active-bg !default;\n\n$pagination-disabled-color: $gray-600 !default;\n$pagination-disabled-bg: $white !default;\n$pagination-disabled-border-color: $gray-300 !default;\n\n\n// Jumbotron\n\n$jumbotron-padding: 2rem !default;\n$jumbotron-color: null !default;\n$jumbotron-bg: $gray-200 !default;\n\n\n// Cards\n\n$card-spacer-y: .75rem !default;\n$card-spacer-x: 1.25rem !default;\n$card-border-width: $border-width !default;\n$card-border-radius: $border-radius !default;\n$card-border-color: rgba($black, .125) !default;\n$card-inner-border-radius: subtract($card-border-radius, $card-border-width) !default;\n$card-cap-bg: rgba($black, .03) !default;\n$card-cap-color: null !default;\n$card-height: null !default;\n$card-color: null !default;\n$card-bg: $white !default;\n\n$card-img-overlay-padding: 1.25rem !default;\n\n$card-group-margin: $grid-gutter-width / 2 !default;\n$card-deck-margin: $card-group-margin !default;\n\n$card-columns-count: 3 !default;\n$card-columns-gap: 1.25rem !default;\n$card-columns-margin: $card-spacer-y !default;\n\n\n// Tooltips\n\n$tooltip-font-size: $font-size-sm !default;\n$tooltip-max-width: 200px !default;\n$tooltip-color: $white !default;\n$tooltip-bg: $black !default;\n$tooltip-border-radius: $border-radius !default;\n$tooltip-opacity: .9 !default;\n$tooltip-padding-y: .25rem !default;\n$tooltip-padding-x: .5rem !default;\n$tooltip-margin: 0 !default;\n\n$tooltip-arrow-width: .8rem !default;\n$tooltip-arrow-height: .4rem !default;\n$tooltip-arrow-color: $tooltip-bg !default;\n\n// Form tooltips must come after regular tooltips\n$form-feedback-tooltip-padding-y: $tooltip-padding-y !default;\n$form-feedback-tooltip-padding-x: $tooltip-padding-x !default;\n$form-feedback-tooltip-font-size: $tooltip-font-size !default;\n$form-feedback-tooltip-line-height: $line-height-base !default;\n$form-feedback-tooltip-opacity: $tooltip-opacity !default;\n$form-feedback-tooltip-border-radius: $tooltip-border-radius !default;\n\n\n// Popovers\n\n$popover-font-size: $font-size-sm !default;\n$popover-bg: $white !default;\n$popover-max-width: 276px !default;\n$popover-border-width: $border-width !default;\n$popover-border-color: rgba($black, .2) !default;\n$popover-border-radius: $border-radius-lg !default;\n$popover-inner-border-radius: subtract($popover-border-radius, $popover-border-width) !default;\n$popover-box-shadow: 0 .25rem .5rem rgba($black, .2) !default;\n\n$popover-header-bg: darken($popover-bg, 3%) !default;\n$popover-header-color: $headings-color !default;\n$popover-header-padding-y: .5rem !default;\n$popover-header-padding-x: .75rem !default;\n\n$popover-body-color: $body-color !default;\n$popover-body-padding-y: $popover-header-padding-y !default;\n$popover-body-padding-x: $popover-header-padding-x !default;\n\n$popover-arrow-width: 1rem !default;\n$popover-arrow-height: .5rem !default;\n$popover-arrow-color: $popover-bg !default;\n\n$popover-arrow-outer-color: fade-in($popover-border-color, .05) !default;\n\n\n// Toasts\n\n$toast-max-width: 350px !default;\n$toast-padding-x: .75rem !default;\n$toast-padding-y: .25rem !default;\n$toast-font-size: .875rem !default;\n$toast-color: null !default;\n$toast-background-color: rgba($white, .85) !default;\n$toast-border-width: 1px !default;\n$toast-border-color: rgba(0, 0, 0, .1) !default;\n$toast-border-radius: .25rem !default;\n$toast-box-shadow: 0 .25rem .75rem rgba($black, .1) !default;\n\n$toast-header-color: $gray-600 !default;\n$toast-header-background-color: rgba($white, .85) !default;\n$toast-header-border-color: rgba(0, 0, 0, .05) !default;\n\n\n// Badges\n\n$badge-font-size: 75% !default;\n$badge-font-weight: $font-weight-bold !default;\n$badge-padding-y: .25em !default;\n$badge-padding-x: .4em !default;\n$badge-border-radius: $border-radius !default;\n\n$badge-transition: $btn-transition !default;\n$badge-focus-width: $input-btn-focus-width !default;\n\n$badge-pill-padding-x: .6em !default;\n// Use a higher than normal value to ensure completely rounded edges when\n// customizing padding or font-size on labels.\n$badge-pill-border-radius: 10rem !default;\n\n\n// Modals\n\n// Padding applied to the modal body\n$modal-inner-padding: 1rem !default;\n\n// Margin between elements in footer, must be lower than or equal to 2 * $modal-inner-padding\n$modal-footer-margin-between: .5rem !default;\n\n$modal-dialog-margin: .5rem !default;\n$modal-dialog-margin-y-sm-up: 1.75rem !default;\n\n$modal-title-line-height: $line-height-base !default;\n\n$modal-content-color: null !default;\n$modal-content-bg: $white !default;\n$modal-content-border-color: rgba($black, .2) !default;\n$modal-content-border-width: $border-width !default;\n$modal-content-border-radius: $border-radius-lg !default;\n$modal-content-inner-border-radius: subtract($modal-content-border-radius, $modal-content-border-width) !default;\n$modal-content-box-shadow-xs: 0 .25rem .5rem rgba($black, .5) !default;\n$modal-content-box-shadow-sm-up: 0 .5rem 1rem rgba($black, .5) !default;\n\n$modal-backdrop-bg: $black !default;\n$modal-backdrop-opacity: .5 !default;\n$modal-header-border-color: $border-color !default;\n$modal-footer-border-color: $modal-header-border-color !default;\n$modal-header-border-width: $modal-content-border-width !default;\n$modal-footer-border-width: $modal-header-border-width !default;\n$modal-header-padding-y: 1rem !default;\n$modal-header-padding-x: 1rem !default;\n$modal-header-padding: $modal-header-padding-y $modal-header-padding-x !default; // Keep this for backwards compatibility\n\n$modal-xl: 1140px !default;\n$modal-lg: 800px !default;\n$modal-md: 500px !default;\n$modal-sm: 300px !default;\n\n$modal-fade-transform: translate(0, -50px) !default;\n$modal-show-transform: none !default;\n$modal-transition: transform .3s ease-out !default;\n$modal-scale-transform: scale(1.02) !default;\n\n\n// Alerts\n//\n// Define alert colors, border radius, and padding.\n\n$alert-padding-y: .75rem !default;\n$alert-padding-x: 1.25rem !default;\n$alert-margin-bottom: 1rem !default;\n$alert-border-radius: $border-radius !default;\n$alert-link-font-weight: $font-weight-bold !default;\n$alert-border-width: $border-width !default;\n\n$alert-bg-level: -10 !default;\n$alert-border-level: -9 !default;\n$alert-color-level: 6 !default;\n\n\n// Progress bars\n\n$progress-height: 1rem !default;\n$progress-font-size: $font-size-base * .75 !default;\n$progress-bg: $gray-200 !default;\n$progress-border-radius: $border-radius !default;\n$progress-box-shadow: inset 0 .1rem .1rem rgba($black, .1) !default;\n$progress-bar-color: $white !default;\n$progress-bar-bg: theme-color(\"primary\") !default;\n$progress-bar-animation-timing: 1s linear infinite !default;\n$progress-bar-transition: width .6s ease !default;\n\n\n// List group\n\n$list-group-color: null !default;\n$list-group-bg: $white !default;\n$list-group-border-color: rgba($black, .125) !default;\n$list-group-border-width: $border-width !default;\n$list-group-border-radius: $border-radius !default;\n\n$list-group-item-padding-y: .75rem !default;\n$list-group-item-padding-x: 1.25rem !default;\n\n$list-group-hover-bg: $gray-100 !default;\n$list-group-active-color: $component-active-color !default;\n$list-group-active-bg: $component-active-bg !default;\n$list-group-active-border-color: $list-group-active-bg !default;\n\n$list-group-disabled-color: $gray-600 !default;\n$list-group-disabled-bg: $list-group-bg !default;\n\n$list-group-action-color: $gray-700 !default;\n$list-group-action-hover-color: $list-group-action-color !default;\n\n$list-group-action-active-color: $body-color !default;\n$list-group-action-active-bg: $gray-200 !default;\n\n\n// Image thumbnails\n\n$thumbnail-padding: .25rem !default;\n$thumbnail-bg: $body-bg !default;\n$thumbnail-border-width: $border-width !default;\n$thumbnail-border-color: $gray-300 !default;\n$thumbnail-border-radius: $border-radius !default;\n$thumbnail-box-shadow: 0 1px 2px rgba($black, .075) !default;\n\n\n// Figures\n\n$figure-caption-font-size: 90% !default;\n$figure-caption-color: $gray-600 !default;\n\n\n// Breadcrumbs\n\n$breadcrumb-font-size: null !default;\n\n$breadcrumb-padding-y: .75rem !default;\n$breadcrumb-padding-x: 1rem !default;\n$breadcrumb-item-padding: .5rem !default;\n\n$breadcrumb-margin-bottom: 1rem !default;\n\n$breadcrumb-bg: $gray-200 !default;\n$breadcrumb-divider-color: $gray-600 !default;\n$breadcrumb-active-color: $gray-600 !default;\n$breadcrumb-divider: quote(\"/\") !default;\n\n$breadcrumb-border-radius: $border-radius !default;\n\n\n// Carousel\n\n$carousel-control-color: $white !default;\n$carousel-control-width: 15% !default;\n$carousel-control-opacity: .5 !default;\n$carousel-control-hover-opacity: .9 !default;\n$carousel-control-transition: opacity .15s ease !default;\n\n$carousel-indicator-width: 30px !default;\n$carousel-indicator-height: 3px !default;\n$carousel-indicator-hit-area-height: 10px !default;\n$carousel-indicator-spacer: 3px !default;\n$carousel-indicator-active-bg: $white !default;\n$carousel-indicator-transition: opacity .6s ease !default;\n\n$carousel-caption-width: 70% !default;\n$carousel-caption-color: $white !default;\n\n$carousel-control-icon-width: 20px !default;\n\n$carousel-control-prev-icon-bg: url(\"data:image/svg+xml,\") !default;\n$carousel-control-next-icon-bg: url(\"data:image/svg+xml,\") !default;\n\n$carousel-transition-duration: .6s !default;\n$carousel-transition: transform $carousel-transition-duration ease-in-out !default; // Define transform transition first if using multiple transitions (e.g., `transform 2s ease, opacity .5s ease-out`)\n\n\n// Spinners\n\n$spinner-width: 2rem !default;\n$spinner-height: $spinner-width !default;\n$spinner-border-width: .25em !default;\n\n$spinner-width-sm: 1rem !default;\n$spinner-height-sm: $spinner-width-sm !default;\n$spinner-border-width-sm: .2em !default;\n\n\n// Close\n\n$close-font-size: $font-size-base * 1.5 !default;\n$close-font-weight: $font-weight-bold !default;\n$close-color: $black !default;\n$close-text-shadow: 0 1px 0 $white !default;\n\n\n// Code\n\n$code-font-size: 87.5% !default;\n$code-color: $pink !default;\n\n$kbd-padding-y: .2rem !default;\n$kbd-padding-x: .4rem !default;\n$kbd-font-size: $code-font-size !default;\n$kbd-color: $white !default;\n$kbd-bg: $gray-900 !default;\n\n$pre-color: $gray-900 !default;\n$pre-scrollable-max-height: 340px !default;\n\n\n// Utilities\n\n$displays: none, inline, inline-block, block, table, table-row, table-cell, flex, inline-flex !default;\n$overflows: auto, hidden !default;\n$positions: static, relative, absolute, fixed, sticky !default;\n\n\n// Printing\n\n$print-page-size: a3 !default;\n$print-body-min-width: map-get($grid-breakpoints, \"lg\") !default;\n","// stylelint-disable property-blacklist, scss/dollar-variable-default\n\n// SCSS RFS mixin\n//\n// Automated font-resizing\n//\n// See https://github.com/twbs/rfs\n\n// Configuration\n\n// Base font size\n$rfs-base-font-size: 1.25rem !default;\n$rfs-font-size-unit: rem !default;\n\n// Breakpoint at where font-size starts decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n// Resize font-size based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != \"number\" or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-responsive-font-sizes to false\n$enable-responsive-font-sizes: true !default;\n\n// Cache $rfs-base-font-size unit\n$rfs-base-font-size-unit: unit($rfs-base-font-size);\n\n// Remove px-unit from $rfs-base-font-size for calculations\n@if $rfs-base-font-size-unit == \"px\" {\n $rfs-base-font-size: $rfs-base-font-size / ($rfs-base-font-size * 0 + 1);\n}\n@else if $rfs-base-font-size-unit == \"rem\" {\n $rfs-base-font-size: $rfs-base-font-size / ($rfs-base-font-size * 0 + 1 / $rfs-rem-value);\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == \"px\" {\n $rfs-breakpoint: $rfs-breakpoint / ($rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == \"rem\" or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: $rfs-breakpoint / ($rfs-breakpoint * 0 + 1 / $rfs-rem-value);\n}\n\n// Responsive font-size mixin\n@mixin rfs($fs, $important: false) {\n // Cache $fs unit\n $fs-unit: if(type-of($fs) == \"number\", unit($fs), false);\n\n // Add !important suffix if needed\n $rfs-suffix: if($important, \" !important\", \"\");\n\n // If $fs isn't a number (like inherit) or $fs has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $fs-unit or $fs-unit != \"\" and $fs-unit != \"px\" and $fs-unit != \"rem\" or $fs == 0 {\n font-size: #{$fs}#{$rfs-suffix};\n }\n @else {\n // Variables for storing static and fluid rescaling\n $rfs-static: null;\n $rfs-fluid: null;\n\n // Remove px-unit from $fs for calculations\n @if $fs-unit == \"px\" {\n $fs: $fs / ($fs * 0 + 1);\n }\n @else if $fs-unit == \"rem\" {\n $fs: $fs / ($fs * 0 + 1 / $rfs-rem-value);\n }\n\n // Set default font-size\n @if $rfs-font-size-unit == rem {\n $rfs-static: #{$fs / $rfs-rem-value}rem#{$rfs-suffix};\n }\n @else if $rfs-font-size-unit == px {\n $rfs-static: #{$fs}px#{$rfs-suffix};\n }\n @else {\n @error \"`#{$rfs-font-size-unit}` is not a valid unit for $rfs-font-size-unit. Use `px` or `rem`.\";\n }\n\n // Only add media query if font-size is bigger as the minimum font-size\n // If $rfs-factor == 1, no rescaling will take place\n @if $fs > $rfs-base-font-size and $enable-responsive-font-sizes {\n $min-width: null;\n $variable-unit: null;\n\n // Calculate minimum font-size for given font-size\n $fs-min: $rfs-base-font-size + ($fs - $rfs-base-font-size) / $rfs-factor;\n\n // Calculate difference between given font-size and minimum font-size for given font-size\n $fs-diff: $fs - $fs-min;\n\n // Base font-size formatting\n // No need to check if the unit is valid, because we did that before\n $min-width: if($rfs-font-size-unit == rem, #{$fs-min / $rfs-rem-value}rem, #{$fs-min}px);\n\n // If two-dimensional, use smallest of screen width and height\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{$fs-diff * 100 / $rfs-breakpoint}#{$variable-unit};\n\n // Set the calculated font-size.\n $rfs-fluid: calc(#{$min-width} + #{$variable-width}) #{$rfs-suffix};\n }\n\n // Rendering\n @if $rfs-fluid == null {\n // Only render static font-size if no fluid font-size is available\n font-size: $rfs-static;\n }\n @else {\n $mq-value: null;\n\n // RFS breakpoint formatting\n @if $rfs-breakpoint-unit == em or $rfs-breakpoint-unit == rem {\n $mq-value: #{$rfs-breakpoint / $rfs-rem-value}#{$rfs-breakpoint-unit};\n }\n @else if $rfs-breakpoint-unit == px {\n $mq-value: #{$rfs-breakpoint}px;\n }\n @else {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n }\n\n @if $rfs-class == \"disable\" {\n // Adding an extra class increases specificity,\n // which prevents the media query to override the font size\n &,\n .disable-responsive-font-size &,\n &.disable-responsive-font-size {\n font-size: $rfs-static;\n }\n }\n @else {\n font-size: $rfs-static;\n }\n\n @if $rfs-two-dimensional {\n @media (max-width: #{$mq-value}), (max-height: #{$mq-value}) {\n @if $rfs-class == \"enable\" {\n .enable-responsive-font-size &,\n &.enable-responsive-font-size {\n font-size: $rfs-fluid;\n }\n }\n @else {\n font-size: $rfs-fluid;\n }\n\n @if $rfs-safari-iframe-resize-bug-fix {\n // stylelint-disable-next-line length-zero-no-unit\n min-width: 0vw;\n }\n }\n }\n @else {\n @media (max-width: #{$mq-value}) {\n @if $rfs-class == \"enable\" {\n .enable-responsive-font-size &,\n &.enable-responsive-font-size {\n font-size: $rfs-fluid;\n }\n }\n @else {\n font-size: $rfs-fluid;\n }\n\n @if $rfs-safari-iframe-resize-bug-fix {\n // stylelint-disable-next-line length-zero-no-unit\n min-width: 0vw;\n }\n }\n }\n }\n }\n}\n\n// The font-size & responsive-font-size mixin uses RFS to rescale font sizes\n@mixin font-size($fs, $important: false) {\n @include rfs($fs, $important);\n}\n\n@mixin responsive-font-size($fs, $important: false) {\n @include rfs($fs, $important);\n}\n","// Hover mixin and `$enable-hover-media-query` are deprecated.\n//\n// Originally added during our alphas and maintained during betas, this mixin was\n// designed to prevent `:hover` stickiness on iOS-an issue where hover styles\n// would persist after initial touch.\n//\n// For backward compatibility, we've kept these mixins and updated them to\n// always return their regular pseudo-classes instead of a shimmed media query.\n//\n// Issue: https://github.com/twbs/bootstrap/issues/25195\n\n@mixin hover() {\n &:hover { @content; }\n}\n\n@mixin hover-focus() {\n &:hover,\n &:focus {\n @content;\n }\n}\n\n@mixin plain-hover-focus() {\n &,\n &:hover,\n &:focus {\n @content;\n }\n}\n\n@mixin hover-focus-active() {\n &:hover,\n &:focus,\n &:active {\n @content;\n }\n}\n","// stylelint-disable declaration-no-important, selector-list-comma-newline-after\n\n//\n// Headings\n//\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n margin-bottom: $headings-margin-bottom;\n font-family: $headings-font-family;\n font-weight: $headings-font-weight;\n line-height: $headings-line-height;\n color: $headings-color;\n}\n\nh1, .h1 { @include font-size($h1-font-size); }\nh2, .h2 { @include font-size($h2-font-size); }\nh3, .h3 { @include font-size($h3-font-size); }\nh4, .h4 { @include font-size($h4-font-size); }\nh5, .h5 { @include font-size($h5-font-size); }\nh6, .h6 { @include font-size($h6-font-size); }\n\n.lead {\n @include font-size($lead-font-size);\n font-weight: $lead-font-weight;\n}\n\n// Type display classes\n.display-1 {\n @include font-size($display1-size);\n font-weight: $display1-weight;\n line-height: $display-line-height;\n}\n.display-2 {\n @include font-size($display2-size);\n font-weight: $display2-weight;\n line-height: $display-line-height;\n}\n.display-3 {\n @include font-size($display3-size);\n font-weight: $display3-weight;\n line-height: $display-line-height;\n}\n.display-4 {\n @include font-size($display4-size);\n font-weight: $display4-weight;\n line-height: $display-line-height;\n}\n\n\n//\n// Horizontal rules\n//\n\nhr {\n margin-top: $hr-margin-y;\n margin-bottom: $hr-margin-y;\n border: 0;\n border-top: $hr-border-width solid $hr-border-color;\n}\n\n\n//\n// Emphasis\n//\n\nsmall,\n.small {\n @include font-size($small-font-size);\n font-weight: $font-weight-normal;\n}\n\nmark,\n.mark {\n padding: $mark-padding;\n background-color: $mark-bg;\n}\n\n\n//\n// Lists\n//\n\n.list-unstyled {\n @include list-unstyled();\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n @include list-unstyled();\n}\n.list-inline-item {\n display: inline-block;\n\n &:not(:last-child) {\n margin-right: $list-inline-padding;\n }\n}\n\n\n//\n// Misc\n//\n\n// Builds on `abbr`\n.initialism {\n @include font-size(90%);\n text-transform: uppercase;\n}\n\n// Blockquotes\n.blockquote {\n margin-bottom: $spacer;\n @include font-size($blockquote-font-size);\n}\n\n.blockquote-footer {\n display: block;\n @include font-size($blockquote-small-font-size);\n color: $blockquote-small-color;\n\n &::before {\n content: \"\\2014\\00A0\"; // em dash, nbsp\n }\n}\n","// Lists\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n@mixin list-unstyled() {\n padding-left: 0;\n list-style: none;\n}\n","// Responsive images (ensure images don't scale beyond their parents)\n//\n// This is purposefully opt-in via an explicit class rather than being the default for all ``s.\n// We previously tried the \"images are responsive by default\" approach in Bootstrap v2,\n// and abandoned it in Bootstrap v3 because it breaks lots of third-party widgets (including Google Maps)\n// which weren't expecting the images within themselves to be involuntarily resized.\n// See also https://github.com/twbs/bootstrap/issues/18178\n.img-fluid {\n @include img-fluid();\n}\n\n\n// Image thumbnails\n.img-thumbnail {\n padding: $thumbnail-padding;\n background-color: $thumbnail-bg;\n border: $thumbnail-border-width solid $thumbnail-border-color;\n @include border-radius($thumbnail-border-radius);\n @include box-shadow($thumbnail-box-shadow);\n\n // Keep them at most 100% wide\n @include img-fluid();\n}\n\n//\n// Figures\n//\n\n.figure {\n // Ensures the caption's text aligns with the image.\n display: inline-block;\n}\n\n.figure-img {\n margin-bottom: $spacer / 2;\n line-height: 1;\n}\n\n.figure-caption {\n @include font-size($figure-caption-font-size);\n color: $figure-caption-color;\n}\n","// Image Mixins\n// - Responsive image\n// - Retina image\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n\n@mixin img-fluid() {\n // Part 1: Set a maximum relative to the parent\n max-width: 100%;\n // Part 2: Override the height to auto, otherwise images will be stretched\n // when setting a width and height attribute on the img element.\n height: auto;\n}\n\n\n// Retina image\n//\n// Short retina mixin for setting background-image and -size.\n\n@mixin img-retina($file-1x, $file-2x, $width-1x, $height-1x) {\n background-image: url($file-1x);\n\n // Autoprefixer takes care of adding -webkit-min-device-pixel-ratio and -o-min-device-pixel-ratio,\n // but doesn't convert dppx=>dpi.\n // There's no such thing as unprefixed min-device-pixel-ratio since it's nonstandard.\n // Compatibility info: https://caniuse.com/#feat=css-media-resolution\n @media only screen and (min-resolution: 192dpi), // IE9-11 don't support dppx\n only screen and (min-resolution: 2dppx) { // Standardized\n background-image: url($file-2x);\n background-size: $width-1x $height-1x;\n }\n @include deprecate(\"`img-retina()`\", \"v4.3.0\", \"v5\");\n}\n","// stylelint-disable property-blacklist\n// Single side border-radius\n\n@mixin border-radius($radius: $border-radius, $fallback-border-radius: false) {\n @if $enable-rounded {\n border-radius: $radius;\n }\n @else if $fallback-border-radius != false {\n border-radius: $fallback-border-radius;\n }\n}\n\n@mixin border-top-radius($radius) {\n @if $enable-rounded {\n border-top-left-radius: $radius;\n border-top-right-radius: $radius;\n }\n}\n\n@mixin border-right-radius($radius) {\n @if $enable-rounded {\n border-top-right-radius: $radius;\n border-bottom-right-radius: $radius;\n }\n}\n\n@mixin border-bottom-radius($radius) {\n @if $enable-rounded {\n border-bottom-right-radius: $radius;\n border-bottom-left-radius: $radius;\n }\n}\n\n@mixin border-left-radius($radius) {\n @if $enable-rounded {\n border-top-left-radius: $radius;\n border-bottom-left-radius: $radius;\n }\n}\n\n@mixin border-top-left-radius($radius) {\n @if $enable-rounded {\n border-top-left-radius: $radius;\n }\n}\n\n@mixin border-top-right-radius($radius) {\n @if $enable-rounded {\n border-top-right-radius: $radius;\n }\n}\n\n@mixin border-bottom-right-radius($radius) {\n @if $enable-rounded {\n border-bottom-right-radius: $radius;\n }\n}\n\n@mixin border-bottom-left-radius($radius) {\n @if $enable-rounded {\n border-bottom-left-radius: $radius;\n }\n}\n","// Inline code\ncode {\n @include font-size($code-font-size);\n color: $code-color;\n word-wrap: break-word;\n\n // Streamline the style when inside anchors to avoid broken underline and more\n a > & {\n color: inherit;\n }\n}\n\n// User input typically entered via keyboard\nkbd {\n padding: $kbd-padding-y $kbd-padding-x;\n @include font-size($kbd-font-size);\n color: $kbd-color;\n background-color: $kbd-bg;\n @include border-radius($border-radius-sm);\n @include box-shadow($kbd-box-shadow);\n\n kbd {\n padding: 0;\n @include font-size(100%);\n font-weight: $nested-kbd-font-weight;\n @include box-shadow(none);\n }\n}\n\n// Blocks of code\npre {\n display: block;\n @include font-size($code-font-size);\n color: $pre-color;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n @include font-size(inherit);\n color: inherit;\n word-break: normal;\n }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n max-height: $pre-scrollable-max-height;\n overflow-y: scroll;\n}\n","// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-grid-classes {\n // Single container class with breakpoint max-widths\n .container {\n @include make-container();\n @include make-container-max-widths();\n }\n\n // 100% wide container at all breakpoints\n .container-fluid {\n @include make-container();\n }\n\n // Responsive containers that are 100% wide until a breakpoint\n @each $breakpoint, $container-max-width in $container-max-widths {\n .container-#{$breakpoint} {\n @extend .container-fluid;\n }\n\n @include media-breakpoint-up($breakpoint, $grid-breakpoints) {\n %responsive-container-#{$breakpoint} {\n max-width: $container-max-width;\n }\n\n @each $name, $width in $grid-breakpoints {\n @if ($container-max-width > $width or $breakpoint == $name) {\n .container#{breakpoint-infix($name, $grid-breakpoints)} {\n @extend %responsive-container-#{$breakpoint};\n }\n }\n }\n }\n }\n}\n\n\n// Row\n//\n// Rows contain your columns.\n\n@if $enable-grid-classes {\n .row {\n @include make-row();\n }\n\n // Remove the negative margin from default .row, then the horizontal padding\n // from all immediate children columns (to prevent runaway style inheritance).\n .no-gutters {\n margin-right: 0;\n margin-left: 0;\n\n > .col,\n > [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n }\n }\n}\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n@if $enable-grid-classes {\n @include make-grid-columns();\n}\n","/// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n@mixin make-container($gutter: $grid-gutter-width) {\n width: 100%;\n padding-right: $gutter / 2;\n padding-left: $gutter / 2;\n margin-right: auto;\n margin-left: auto;\n}\n\n// For each breakpoint, define the maximum width of the container in a media query\n@mixin make-container-max-widths(\n $max-widths: $container-max-widths,\n $breakpoints: $grid-breakpoints\n) {\n @each $breakpoint, $container-max-width in $max-widths {\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n max-width: $container-max-width;\n }\n }\n}\n\n@mixin make-row($gutter: $grid-gutter-width) {\n display: flex;\n flex-wrap: wrap;\n margin-right: -$gutter / 2;\n margin-left: -$gutter / 2;\n}\n\n@mixin make-col-ready($gutter: $grid-gutter-width) {\n position: relative;\n // Prevent columns from becoming too narrow when at smaller grid tiers by\n // always setting `width: 100%;`. This works because we use `flex` values\n // later on to override this initial width.\n width: 100%;\n padding-right: $gutter / 2;\n padding-left: $gutter / 2;\n}\n\n@mixin make-col($size, $columns: $grid-columns) {\n flex: 0 0 percentage($size / $columns);\n // Add a `max-width` to ensure content within each column does not blow out\n // the width of the column. Applies to IE10+ and Firefox. Chrome and Safari\n // do not appear to require this.\n max-width: percentage($size / $columns);\n}\n\n@mixin make-col-auto() {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%; // Reset earlier grid tiers\n}\n\n@mixin make-col-offset($size, $columns: $grid-columns) {\n $num: $size / $columns;\n margin-right: if($num == 0, 0, percentage($num));\n}\n\n// Row columns\n//\n// Specify on a parent element(e.g., .row) to force immediate children into NN\n// numberof columns. Supports wrapping to new lines, but does not do a Masonry\n// style grid.\n@mixin row-cols($count) {\n & > * {\n flex: 0 0 100% / $count;\n max-width: 100% / $count;\n }\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @return if($n != null and $n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width. Null for the largest (last) breakpoint.\n// The maximum value is calculated as the minimum of the next one less 0.02px\n// to work around the limitations of `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $next: breakpoint-next($name, $breakpoints);\n @return if($next, breakpoint-min($next, $breakpoints) - .02, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $max: breakpoint-max($name, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($name, $breakpoints) {\n @content;\n }\n }\n}\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n@mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) {\n // Common properties for all breakpoints\n %grid-column {\n position: relative;\n width: 100%;\n padding-right: $gutter / 2;\n padding-left: $gutter / 2;\n }\n\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n // Allow columns to stretch full width below their breakpoints\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @extend %grid-column;\n }\n }\n .col#{$infix},\n .col#{$infix}-auto {\n @extend %grid-column;\n }\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n // Provide basic `.col-{bp}` classes for equal-width flexbox columns\n .col#{$infix} {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n\n @for $i from 1 through $grid-row-columns {\n .row-cols#{$infix}-#{$i} {\n @include row-cols($i);\n }\n }\n\n .col#{$infix}-auto {\n @include make-col-auto();\n }\n\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @include make-col($i, $columns);\n }\n }\n\n .order#{$infix}-first { order: -1; }\n\n .order#{$infix}-last { order: $columns + 1; }\n\n @for $i from 0 through $columns {\n .order#{$infix}-#{$i} { order: $i; }\n }\n\n // `$columns - 1` because offsetting by the width of an entire row isn't possible\n @for $i from 0 through ($columns - 1) {\n @if not ($infix == \"\" and $i == 0) { // Avoid emitting useless .offset-0\n .offset#{$infix}-#{$i} {\n @include make-col-offset($i, $columns);\n }\n }\n }\n }\n }\n}\n","//\n// Basic Bootstrap table\n//\n\n.table {\n width: 100%;\n margin-bottom: $spacer;\n color: $table-color;\n background-color: $table-bg; // Reset for nesting within parents with `background-color`.\n\n th,\n td {\n padding: $table-cell-padding;\n vertical-align: top;\n border-top: $table-border-width solid $table-border-color;\n }\n\n thead th {\n vertical-align: bottom;\n border-bottom: (2 * $table-border-width) solid $table-border-color;\n }\n\n tbody + tbody {\n border-top: (2 * $table-border-width) solid $table-border-color;\n }\n}\n\n\n//\n// Condensed table w/ half padding\n//\n\n.table-sm {\n th,\n td {\n padding: $table-cell-padding-sm;\n }\n}\n\n\n// Border versions\n//\n// Add or remove borders all around the table and between all the columns.\n\n.table-bordered {\n border: $table-border-width solid $table-border-color;\n\n th,\n td {\n border: $table-border-width solid $table-border-color;\n }\n\n thead {\n th,\n td {\n border-bottom-width: 2 * $table-border-width;\n }\n }\n}\n\n.table-borderless {\n th,\n td,\n thead th,\n tbody + tbody {\n border: 0;\n }\n}\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n tbody tr:nth-of-type(#{$table-striped-order}) {\n background-color: $table-accent-bg;\n }\n}\n\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n tbody tr {\n @include hover() {\n color: $table-hover-color;\n background-color: $table-hover-bg;\n }\n }\n}\n\n\n// Table backgrounds\n//\n// Exact selectors below required to override `.table-striped` and prevent\n// inheritance to nested tables.\n\n@each $color, $value in $theme-colors {\n @include table-row-variant($color, theme-color-level($color, $table-bg-level), theme-color-level($color, $table-border-level));\n}\n\n@include table-row-variant(active, $table-active-bg);\n\n\n// Dark styles\n//\n// Same table markup, but inverted color scheme: dark background and light text.\n\n// stylelint-disable-next-line no-duplicate-selectors\n.table {\n .thead-dark {\n th {\n color: $table-dark-color;\n background-color: $table-dark-bg;\n border-color: $table-dark-border-color;\n }\n }\n\n .thead-light {\n th {\n color: $table-head-color;\n background-color: $table-head-bg;\n border-color: $table-border-color;\n }\n }\n}\n\n.table-dark {\n color: $table-dark-color;\n background-color: $table-dark-bg;\n\n th,\n td,\n thead th {\n border-color: $table-dark-border-color;\n }\n\n &.table-bordered {\n border: 0;\n }\n\n &.table-striped {\n tbody tr:nth-of-type(#{$table-striped-order}) {\n background-color: $table-dark-accent-bg;\n }\n }\n\n &.table-hover {\n tbody tr {\n @include hover() {\n color: $table-dark-hover-color;\n background-color: $table-dark-hover-bg;\n }\n }\n }\n}\n\n\n// Responsive tables\n//\n// Generate series of `.table-responsive-*` classes for configuring the screen\n// size of where your table will overflow.\n\n.table-responsive {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $next: breakpoint-next($breakpoint, $grid-breakpoints);\n $infix: breakpoint-infix($next, $grid-breakpoints);\n\n &#{$infix} {\n @include media-breakpoint-down($breakpoint) {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n\n // Prevent double border on horizontal scroll due to use of `display: block;`\n > .table-bordered {\n border: 0;\n }\n }\n }\n }\n}\n","// Tables\n\n@mixin table-row-variant($state, $background, $border: null) {\n // Exact selectors below required to override `.table-striped` and prevent\n // inheritance to nested tables.\n .table-#{$state} {\n &,\n > th,\n > td {\n background-color: $background;\n }\n\n @if $border != null {\n th,\n td,\n thead th,\n tbody + tbody {\n border-color: $border;\n }\n }\n }\n\n // Hover states for `.table-hover`\n // Note: this is not available for cells or rows within `thead` or `tfoot`.\n .table-hover {\n $hover-background: darken($background, 5%);\n\n .table-#{$state} {\n @include hover() {\n background-color: $hover-background;\n\n > td,\n > th {\n background-color: $hover-background;\n }\n }\n }\n }\n}\n","// Bootstrap functions\n//\n// Utility mixins and functions for evaluating source code across our variables, maps, and mixins.\n\n// Ascending\n// Used to evaluate Sass maps like our grid breakpoints.\n@mixin _assert-ascending($map, $map-name) {\n $prev-key: null;\n $prev-num: null;\n @each $key, $num in $map {\n @if $prev-num == null or unit($num) == \"%\" or unit($prev-num) == \"%\" {\n // Do nothing\n } @else if not comparable($prev-num, $num) {\n @warn \"Potentially invalid value for #{$map-name}: This map must be in ascending order, but key '#{$key}' has value #{$num} whose unit makes it incomparable to #{$prev-num}, the value of the previous key '#{$prev-key}' !\";\n } @else if $prev-num >= $num {\n @warn \"Invalid value for #{$map-name}: This map must be in ascending order, but key '#{$key}' has value #{$num} which isn't greater than #{$prev-num}, the value of the previous key '#{$prev-key}' !\";\n }\n $prev-key: $key;\n $prev-num: $num;\n }\n}\n\n// Starts at zero\n// Used to ensure the min-width of the lowest breakpoint starts at 0.\n@mixin _assert-starts-at-zero($map, $map-name: \"$grid-breakpoints\") {\n $values: map-values($map);\n $first-value: nth($values, 1);\n @if $first-value != 0 {\n @warn \"First breakpoint in #{$map-name} must start at 0, but starts at #{$first-value}.\";\n }\n}\n\n// Replace `$search` with `$replace` in `$string`\n// Used on our SVG icon backgrounds for custom forms.\n//\n// @author Hugo Giraudel\n// @param {String} $string - Initial string\n// @param {String} $search - Substring to replace\n// @param {String} $replace ('') - New value\n// @return {String} - Updated string\n@function str-replace($string, $search, $replace: \"\") {\n $index: str-index($string, $search);\n\n @if $index {\n @return str-slice($string, 1, $index - 1) + $replace + str-replace(str-slice($string, $index + str-length($search)), $search, $replace);\n }\n\n @return $string;\n}\n\n// See https://codepen.io/kevinweber/pen/dXWoRw\n@function escape-svg($string) {\n @if str-index($string, \"data:image/svg+xml\") {\n @each $char, $encoded in $escaped-characters {\n $string: str-replace($string, $char, $encoded);\n }\n }\n\n @return $string;\n}\n\n// Color contrast\n@function color-yiq($color, $dark: $yiq-text-dark, $light: $yiq-text-light) {\n $r: red($color);\n $g: green($color);\n $b: blue($color);\n\n $yiq: (($r * 299) + ($g * 587) + ($b * 114)) / 1000;\n\n @if ($yiq >= $yiq-contrasted-threshold) {\n @return $dark;\n } @else {\n @return $light;\n }\n}\n\n// Retrieve color Sass maps\n@function color($key: \"blue\") {\n @return map-get($colors, $key);\n}\n\n@function theme-color($key: \"primary\") {\n @return map-get($theme-colors, $key);\n}\n\n@function gray($key: \"100\") {\n @return map-get($grays, $key);\n}\n\n// Request a theme color level\n@function theme-color-level($color-name: \"primary\", $level: 0) {\n $color: theme-color($color-name);\n $color-base: if($level > 0, $black, $white);\n $level: abs($level);\n\n @return mix($color-base, $color, $level * $theme-color-interval);\n}\n\n// Return valid calc\n@function add($value1, $value2, $return-calc: true) {\n @if $value1 == null {\n @return $value2;\n }\n\n @if $value2 == null {\n @return $value1;\n }\n\n @if type-of($value1) == number and type-of($value2) == number and comparable($value1, $value2) {\n @return $value1 + $value2;\n }\n\n @return if($return-calc == true, calc(#{$value1} + #{$value2}), $value1 + unquote(\" + \") + $value2);\n}\n\n@function subtract($value1, $value2, $return-calc: true) {\n @if $value1 == null and $value2 == null {\n @return null;\n }\n\n @if $value1 == null {\n @return -$value2;\n }\n\n @if $value2 == null {\n @return $value1;\n }\n\n @if type-of($value1) == number and type-of($value2) == number and comparable($value1, $value2) {\n @return $value1 - $value2;\n }\n\n @return if($return-calc == true, calc(#{$value1} - #{$value2}), $value1 + unquote(\" - \") + $value2);\n}\n","// stylelint-disable selector-no-qualifying-type\n\n//\n// Textual form controls\n//\n\n.form-control {\n display: block;\n width: 100%;\n height: $input-height;\n padding: $input-padding-y $input-padding-x;\n font-family: $input-font-family;\n @include font-size($input-font-size);\n font-weight: $input-font-weight;\n line-height: $input-line-height;\n color: $input-color;\n background-color: $input-bg;\n background-clip: padding-box;\n border: $input-border-width solid $input-border-color;\n\n // Note: This has no effect on `s in CSS.\n @include border-radius($input-border-radius, 0);\n\n @include box-shadow($input-box-shadow);\n @include transition($input-transition);\n\n // Unstyle the caret on ` receives focus\n // in IE and (under certain conditions) Edge, as it looks bad and cannot be made to\n // match the appearance of the native widget.\n // See https://github.com/twbs/bootstrap/issues/19398.\n color: $input-color;\n background-color: $input-bg;\n }\n}\n\n// Make file inputs better match text inputs by forcing them to new lines.\n.form-control-file,\n.form-control-range {\n display: block;\n width: 100%;\n}\n\n\n//\n// Labels\n//\n\n// For use with horizontal and inline forms, when you need the label (or legend)\n// text to align with the form controls.\n.col-form-label {\n padding-top: add($input-padding-y, $input-border-width);\n padding-bottom: add($input-padding-y, $input-border-width);\n margin-bottom: 0; // Override the `` elements\na.btn.disabled,\nfieldset:disabled a.btn {\n pointer-events: none;\n}\n\n\n//\n// Alternate buttons\n//\n\n@each $color, $value in $theme-colors {\n .btn-#{$color} {\n @include button-variant($value, $value);\n }\n}\n\n@each $color, $value in $theme-colors {\n .btn-outline-#{$color} {\n @include button-outline-variant($value);\n }\n}\n\n\n//\n// Link buttons\n//\n\n// Make a button look and behave like a link\n.btn-link {\n font-weight: $font-weight-normal;\n color: $link-color;\n text-decoration: $link-decoration;\n\n @include hover() {\n color: $link-hover-color;\n text-decoration: $link-hover-decoration;\n }\n\n &:focus,\n &.focus {\n text-decoration: $link-hover-decoration;\n box-shadow: none;\n }\n\n &:disabled,\n &.disabled {\n color: $btn-link-disabled-color;\n pointer-events: none;\n }\n\n // No need for an active state here\n}\n\n\n//\n// Button Sizes\n//\n\n.btn-lg {\n @include button-size($btn-padding-y-lg, $btn-padding-x-lg, $btn-font-size-lg, $btn-line-height-lg, $btn-border-radius-lg);\n}\n\n.btn-sm {\n @include button-size($btn-padding-y-sm, $btn-padding-x-sm, $btn-font-size-sm, $btn-line-height-sm, $btn-border-radius-sm);\n}\n\n\n//\n// Block button\n//\n\n.btn-block {\n display: block;\n width: 100%;\n\n // Vertically space out multiple block buttons\n + .btn-block {\n margin-top: $btn-block-spacing-y;\n }\n}\n\n// Specificity overrides\ninput[type=\"submit\"],\ninput[type=\"reset\"],\ninput[type=\"button\"] {\n &.btn-block {\n width: 100%;\n }\n}\n","// Button variants\n//\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n\n@mixin button-variant($background, $border, $hover-background: darken($background, 7.5%), $hover-border: darken($border, 10%), $active-background: darken($background, 10%), $active-border: darken($border, 12.5%)) {\n color: color-yiq($background);\n @include gradient-bg($background);\n border-color: $border;\n @include box-shadow($btn-box-shadow);\n\n @include hover() {\n color: color-yiq($hover-background);\n @include gradient-bg($hover-background);\n border-color: $hover-border;\n }\n\n &:focus,\n &.focus {\n color: color-yiq($hover-background);\n @include gradient-bg($hover-background);\n border-color: $hover-border;\n // Avoid using mixin so we can pass custom focus shadow properly\n @if $enable-shadows {\n box-shadow: $btn-box-shadow, 0 0 0 $btn-focus-width rgba(mix(color-yiq($background), $border, 15%), .5);\n } @else {\n box-shadow: 0 0 0 $btn-focus-width rgba(mix(color-yiq($background), $border, 15%), .5);\n }\n }\n\n // Disabled comes first so active can properly restyle\n &.disabled,\n &:disabled {\n color: color-yiq($background);\n background-color: $background;\n border-color: $border;\n // Remove CSS gradients if they're enabled\n @if $enable-gradients {\n background-image: none;\n }\n }\n\n &:not(:disabled):not(.disabled):active,\n &:not(:disabled):not(.disabled).active,\n .show > &.dropdown-toggle {\n color: color-yiq($active-background);\n background-color: $active-background;\n @if $enable-gradients {\n background-image: none; // Remove the gradient for the pressed/active state\n }\n border-color: $active-border;\n\n &:focus {\n // Avoid using mixin so we can pass custom focus shadow properly\n @if $enable-shadows and $btn-active-box-shadow != none {\n box-shadow: $btn-active-box-shadow, 0 0 0 $btn-focus-width rgba(mix(color-yiq($background), $border, 15%), .5);\n } @else {\n box-shadow: 0 0 0 $btn-focus-width rgba(mix(color-yiq($background), $border, 15%), .5);\n }\n }\n }\n}\n\n@mixin button-outline-variant($color, $color-hover: color-yiq($color), $active-background: $color, $active-border: $color) {\n color: $color;\n border-color: $color;\n\n @include hover() {\n color: $color-hover;\n background-color: $active-background;\n border-color: $active-border;\n }\n\n &:focus,\n &.focus {\n box-shadow: 0 0 0 $btn-focus-width rgba($color, .5);\n }\n\n &.disabled,\n &:disabled {\n color: $color;\n background-color: transparent;\n }\n\n &:not(:disabled):not(.disabled):active,\n &:not(:disabled):not(.disabled).active,\n .show > &.dropdown-toggle {\n color: color-yiq($active-background);\n background-color: $active-background;\n border-color: $active-border;\n\n &:focus {\n // Avoid using mixin so we can pass custom focus shadow properly\n @if $enable-shadows and $btn-active-box-shadow != none {\n box-shadow: $btn-active-box-shadow, 0 0 0 $btn-focus-width rgba($color, .5);\n } @else {\n box-shadow: 0 0 0 $btn-focus-width rgba($color, .5);\n }\n }\n }\n}\n\n// Button sizes\n@mixin button-size($padding-y, $padding-x, $font-size, $line-height, $border-radius) {\n padding: $padding-y $padding-x;\n @include font-size($font-size);\n line-height: $line-height;\n // Manually declare to provide an override to the browser default\n @include border-radius($border-radius, 0);\n}\n",".fade {\n @include transition($transition-fade);\n\n &:not(.show) {\n opacity: 0;\n }\n}\n\n.collapse {\n &:not(.show) {\n display: none;\n }\n}\n\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n @include transition($transition-collapse);\n}\n","// The dropdown wrapper (`
`)\n.dropup,\n.dropright,\n.dropdown,\n.dropleft {\n position: relative;\n}\n\n.dropdown-toggle {\n white-space: nowrap;\n\n // Generate the caret automatically\n @include caret();\n}\n\n// The dropdown menu\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: $zindex-dropdown;\n display: none; // none by default, but block on \"open\" of the menu\n float: left;\n min-width: $dropdown-min-width;\n padding: $dropdown-padding-y 0;\n margin: $dropdown-spacer 0 0; // override default ul\n @include font-size($dropdown-font-size);\n color: $dropdown-color;\n text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)\n list-style: none;\n background-color: $dropdown-bg;\n background-clip: padding-box;\n border: $dropdown-border-width solid $dropdown-border-color;\n @include border-radius($dropdown-border-radius);\n @include box-shadow($dropdown-box-shadow);\n}\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .dropdown-menu#{$infix}-left {\n right: auto;\n left: 0;\n }\n\n .dropdown-menu#{$infix}-right {\n right: 0;\n left: auto;\n }\n }\n}\n\n// Allow for dropdowns to go bottom up (aka, dropup-menu)\n// Just add .dropup after the standard .dropdown class and you're set.\n.dropup {\n .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-top: 0;\n margin-bottom: $dropdown-spacer;\n }\n\n .dropdown-toggle {\n @include caret(up);\n }\n}\n\n.dropright {\n .dropdown-menu {\n top: 0;\n right: auto;\n left: 100%;\n margin-top: 0;\n margin-left: $dropdown-spacer;\n }\n\n .dropdown-toggle {\n @include caret(right);\n &::after {\n vertical-align: 0;\n }\n }\n}\n\n.dropleft {\n .dropdown-menu {\n top: 0;\n right: 100%;\n left: auto;\n margin-top: 0;\n margin-right: $dropdown-spacer;\n }\n\n .dropdown-toggle {\n @include caret(left);\n &::before {\n vertical-align: 0;\n }\n }\n}\n\n// When enabled Popper.js, reset basic dropdown position\n// stylelint-disable-next-line no-duplicate-selectors\n.dropdown-menu {\n &[x-placement^=\"top\"],\n &[x-placement^=\"right\"],\n &[x-placement^=\"bottom\"],\n &[x-placement^=\"left\"] {\n right: auto;\n bottom: auto;\n }\n}\n\n// Dividers (basically an `
`) within the dropdown\n.dropdown-divider {\n @include nav-divider($dropdown-divider-bg, $dropdown-divider-margin-y, true);\n}\n\n// Links, buttons, and more within the dropdown menu\n//\n// `
',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent",customClass:"",sanitize:!0,sanitizeFn:null,whiteList:Qt,popperConfig:null},Zt={HIDE:"hide.bs.tooltip",HIDDEN:"hidden.bs.tooltip",SHOW:"show.bs.tooltip",SHOWN:"shown.bs.tooltip",INSERTED:"inserted.bs.tooltip",CLICK:"click.bs.tooltip",FOCUSIN:"focusin.bs.tooltip",FOCUSOUT:"focusout.bs.tooltip",MOUSEENTER:"mouseenter.bs.tooltip",MOUSELEAVE:"mouseleave.bs.tooltip"},te=function(){function t(t,e){if("undefined"==typeof It)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=t,this.config=this._getConfig(e),this.tip=null,this._setListeners()}var e=t.prototype;return e.enable=function(){this._isEnabled=!0},e.disable=function(){this._isEnabled=!1},e.toggleEnabled=function(){this._isEnabled=!this._isEnabled},e.toggle=function(t){if(this._isEnabled)if(t){var e=this.constructor.DATA_KEY,n=i.default(t.currentTarget).data(e);n||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),i.default(t.currentTarget).data(e,n)),n._activeTrigger.click=!n._activeTrigger.click,n._isWithActiveTrigger()?n._enter(null,n):n._leave(null,n)}else{if(i.default(this.getTipElement()).hasClass("show"))return void this._leave(null,this);this._enter(null,this)}},e.dispose=function(){clearTimeout(this._timeout),i.default.removeData(this.element,this.constructor.DATA_KEY),i.default(this.element).off(this.constructor.EVENT_KEY),i.default(this.element).closest(".modal").off("hide.bs.modal",this._hideModalHandler),this.tip&&i.default(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,this._activeTrigger=null,this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},e.show=function(){var t=this;if("none"===i.default(this.element).css("display"))throw new Error("Please use show on visible elements");var e=i.default.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){i.default(this.element).trigger(e);var n=l.findShadowRoot(this.element),o=i.default.contains(null!==n?n:this.element.ownerDocument.documentElement,this.element);if(e.isDefaultPrevented()||!o)return;var r=this.getTipElement(),a=l.getUID(this.constructor.NAME);r.setAttribute("id",a),this.element.setAttribute("aria-describedby",a),this.setContent(),this.config.animation&&i.default(r).addClass("fade");var s="function"==typeof this.config.placement?this.config.placement.call(this,r,this.element):this.config.placement,u=this._getAttachment(s);this.addAttachmentClass(u);var f=this._getContainer();i.default(r).data(this.constructor.DATA_KEY,this),i.default.contains(this.element.ownerDocument.documentElement,this.tip)||i.default(r).appendTo(f),i.default(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new It(this.element,r,this._getPopperConfig(u)),i.default(r).addClass("show"),i.default(r).addClass(this.config.customClass),"ontouchstart"in document.documentElement&&i.default(document.body).children().on("mouseover",null,i.default.noop);var d=function(){t.config.animation&&t._fixTransition();var e=t._hoverState;t._hoverState=null,i.default(t.element).trigger(t.constructor.Event.SHOWN),"out"===e&&t._leave(null,t)};if(i.default(this.tip).hasClass("fade")){var c=l.getTransitionDurationFromElement(this.tip);i.default(this.tip).one(l.TRANSITION_END,d).emulateTransitionEnd(c)}else d()}},e.hide=function(t){var e=this,n=this.getTipElement(),o=i.default.Event(this.constructor.Event.HIDE),r=function(){"show"!==e._hoverState&&n.parentNode&&n.parentNode.removeChild(n),e._cleanTipClass(),e.element.removeAttribute("aria-describedby"),i.default(e.element).trigger(e.constructor.Event.HIDDEN),null!==e._popper&&e._popper.destroy(),t&&t()};if(i.default(this.element).trigger(o),!o.isDefaultPrevented()){if(i.default(n).removeClass("show"),"ontouchstart"in document.documentElement&&i.default(document.body).children().off("mouseover",null,i.default.noop),this._activeTrigger.click=!1,this._activeTrigger.focus=!1,this._activeTrigger.hover=!1,i.default(this.tip).hasClass("fade")){var a=l.getTransitionDurationFromElement(n);i.default(n).one(l.TRANSITION_END,r).emulateTransitionEnd(a)}else r();this._hoverState=""}},e.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},e.isWithContent=function(){return Boolean(this.getTitle())},e.addAttachmentClass=function(t){i.default(this.getTipElement()).addClass("bs-tooltip-"+t)},e.getTipElement=function(){return this.tip=this.tip||i.default(this.config.template)[0],this.tip},e.setContent=function(){var t=this.getTipElement();this.setElementContent(i.default(t.querySelectorAll(".tooltip-inner")),this.getTitle()),i.default(t).removeClass("fade show")},e.setElementContent=function(t,e){"object"!=typeof e||!e.nodeType&&!e.jquery?this.config.html?(this.config.sanitize&&(e=Vt(e,this.config.whiteList,this.config.sanitizeFn)),t.html(e)):t.text(e):this.config.html?i.default(e).parent().is(t)||t.empty().append(e):t.text(i.default(e).text())},e.getTitle=function(){var t=this.element.getAttribute("data-original-title");return t||(t="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),t},e._getPopperConfig=function(t){var e=this;return a({},{placement:t,modifiers:{offset:this._getOffset(),flip:{behavior:this.config.fallbackPlacement},arrow:{element:".arrow"},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){return e._handlePopperPlacementChange(t)}},this.config.popperConfig)},e._getOffset=function(){var t=this,e={};return"function"==typeof this.config.offset?e.fn=function(e){return e.offsets=a({},e.offsets,t.config.offset(e.offsets,t.element)||{}),e}:e.offset=this.config.offset,e},e._getContainer=function(){return!1===this.config.container?document.body:l.isElement(this.config.container)?i.default(this.config.container):i.default(document).find(this.config.container)},e._getAttachment=function(t){return $t[t.toUpperCase()]},e._setListeners=function(){var t=this;this.config.trigger.split(" ").forEach((function(e){if("click"===e)i.default(t.element).on(t.constructor.Event.CLICK,t.config.selector,(function(e){return t.toggle(e)}));else if("manual"!==e){var n="hover"===e?t.constructor.Event.MOUSEENTER:t.constructor.Event.FOCUSIN,o="hover"===e?t.constructor.Event.MOUSELEAVE:t.constructor.Event.FOCUSOUT;i.default(t.element).on(n,t.config.selector,(function(e){return t._enter(e)})).on(o,t.config.selector,(function(e){return t._leave(e)}))}})),this._hideModalHandler=function(){t.element&&t.hide()},i.default(this.element).closest(".modal").on("hide.bs.modal",this._hideModalHandler),this.config.selector?this.config=a({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},e._fixTitle=function(){var t=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!==t)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},e._enter=function(t,e){var n=this.constructor.DATA_KEY;(e=e||i.default(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),i.default(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusin"===t.type?"focus":"hover"]=!0),i.default(e.getTipElement()).hasClass("show")||"show"===e._hoverState?e._hoverState="show":(clearTimeout(e._timeout),e._hoverState="show",e.config.delay&&e.config.delay.show?e._timeout=setTimeout((function(){"show"===e._hoverState&&e.show()}),e.config.delay.show):e.show())},e._leave=function(t,e){var n=this.constructor.DATA_KEY;(e=e||i.default(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),i.default(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusout"===t.type?"focus":"hover"]=!1),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState="out",e.config.delay&&e.config.delay.hide?e._timeout=setTimeout((function(){"out"===e._hoverState&&e.hide()}),e.config.delay.hide):e.hide())},e._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},e._getConfig=function(t){var e=i.default(this.element).data();return Object.keys(e).forEach((function(t){-1!==Kt.indexOf(t)&&delete e[t]})),"number"==typeof(t=a({},this.constructor.Default,e,"object"==typeof t&&t?t:{})).delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),l.typeCheckConfig(Yt,t,this.constructor.DefaultType),t.sanitize&&(t.template=Vt(t.template,t.whiteList,t.sanitizeFn)),t},e._getDelegateConfig=function(){var t={};if(this.config)for(var e in this.config)this.constructor.Default[e]!==this.config[e]&&(t[e]=this.config[e]);return t},e._cleanTipClass=function(){var t=i.default(this.getTipElement()),e=t.attr("class").match(Xt);null!==e&&e.length&&t.removeClass(e.join(""))},e._handlePopperPlacementChange=function(t){this.tip=t.instance.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(t.placement))},e._fixTransition=function(){var t=this.getTipElement(),e=this.config.animation;null===t.getAttribute("x-placement")&&(i.default(t).removeClass("fade"),this.config.animation=!1,this.hide(),this.show(),this.config.animation=e)},t._jQueryInterface=function(e){return this.each((function(){var n=i.default(this),o=n.data("bs.tooltip"),r="object"==typeof e&&e;if((o||!/dispose|hide/.test(e))&&(o||(o=new t(this,r),n.data("bs.tooltip",o)),"string"==typeof e)){if("undefined"==typeof o[e])throw new TypeError('No method named "'+e+'"');o[e]()}}))},r(t,null,[{key:"VERSION",get:function(){return"4.6.0"}},{key:"Default",get:function(){return Jt}},{key:"NAME",get:function(){return Yt}},{key:"DATA_KEY",get:function(){return"bs.tooltip"}},{key:"Event",get:function(){return Zt}},{key:"EVENT_KEY",get:function(){return".bs.tooltip"}},{key:"DefaultType",get:function(){return Gt}}]),t}();i.default.fn[Yt]=te._jQueryInterface,i.default.fn[Yt].Constructor=te,i.default.fn[Yt].noConflict=function(){return i.default.fn[Yt]=zt,te._jQueryInterface};var ee="popover",ne=i.default.fn[ee],ie=new RegExp("(^|\\s)bs-popover\\S+","g"),oe=a({},te.Default,{placement:"right",trigger:"click",content:"",template:''}),re=a({},te.DefaultType,{content:"(string|element|function)"}),ae={HIDE:"hide.bs.popover",HIDDEN:"hidden.bs.popover",SHOW:"show.bs.popover",SHOWN:"shown.bs.popover",INSERTED:"inserted.bs.popover",CLICK:"click.bs.popover",FOCUSIN:"focusin.bs.popover",FOCUSOUT:"focusout.bs.popover",MOUSEENTER:"mouseenter.bs.popover",MOUSELEAVE:"mouseleave.bs.popover"},se=function(t){var e,n;function o(){return t.apply(this,arguments)||this}n=t,(e=o).prototype=Object.create(n.prototype),e.prototype.constructor=e,e.__proto__=n;var a=o.prototype;return a.isWithContent=function(){return this.getTitle()||this._getContent()},a.addAttachmentClass=function(t){i.default(this.getTipElement()).addClass("bs-popover-"+t)},a.getTipElement=function(){return this.tip=this.tip||i.default(this.config.template)[0],this.tip},a.setContent=function(){var t=i.default(this.getTipElement());this.setElementContent(t.find(".popover-header"),this.getTitle());var e=this._getContent();"function"==typeof e&&(e=e.call(this.element)),this.setElementContent(t.find(".popover-body"),e),t.removeClass("fade show")},a._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},a._cleanTipClass=function(){var t=i.default(this.getTipElement()),e=t.attr("class").match(ie);null!==e&&e.length>0&&t.removeClass(e.join(""))},o._jQueryInterface=function(t){return this.each((function(){var e=i.default(this).data("bs.popover"),n="object"==typeof t?t:null;if((e||!/dispose|hide/.test(t))&&(e||(e=new o(this,n),i.default(this).data("bs.popover",e)),"string"==typeof t)){if("undefined"==typeof e[t])throw new TypeError('No method named "'+t+'"');e[t]()}}))},r(o,null,[{key:"VERSION",get:function(){return"4.6.0"}},{key:"Default",get:function(){return oe}},{key:"NAME",get:function(){return ee}},{key:"DATA_KEY",get:function(){return"bs.popover"}},{key:"Event",get:function(){return ae}},{key:"EVENT_KEY",get:function(){return".bs.popover"}},{key:"DefaultType",get:function(){return re}}]),o}(te);i.default.fn[ee]=se._jQueryInterface,i.default.fn[ee].Constructor=se,i.default.fn[ee].noConflict=function(){return i.default.fn[ee]=ne,se._jQueryInterface};var le="scrollspy",ue=i.default.fn[le],fe={offset:10,method:"auto",target:""},de={offset:"number",method:"string",target:"(string|element)"},ce=function(){function t(t,e){var n=this;this._element=t,this._scrollElement="BODY"===t.tagName?window:t,this._config=this._getConfig(e),this._selector=this._config.target+" .nav-link,"+this._config.target+" .list-group-item,"+this._config.target+" .dropdown-item",this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,i.default(this._scrollElement).on("scroll.bs.scrollspy",(function(t){return n._process(t)})),this.refresh(),this._process()}var e=t.prototype;return e.refresh=function(){var t=this,e=this._scrollElement===this._scrollElement.window?"offset":"position",n="auto"===this._config.method?e:this._config.method,o="position"===n?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight(),[].slice.call(document.querySelectorAll(this._selector)).map((function(t){var e,r=l.getSelectorFromElement(t);if(r&&(e=document.querySelector(r)),e){var a=e.getBoundingClientRect();if(a.width||a.height)return[i.default(e)[n]().top+o,r]}return null})).filter((function(t){return t})).sort((function(t,e){return t[0]-e[0]})).forEach((function(e){t._offsets.push(e[0]),t._targets.push(e[1])}))},e.dispose=function(){i.default.removeData(this._element,"bs.scrollspy"),i.default(this._scrollElement).off(".bs.scrollspy"),this._element=null,this._scrollElement=null,this._config=null,this._selector=null,this._offsets=null,this._targets=null,this._activeTarget=null,this._scrollHeight=null},e._getConfig=function(t){if("string"!=typeof(t=a({},fe,"object"==typeof t&&t?t:{})).target&&l.isElement(t.target)){var e=i.default(t.target).attr("id");e||(e=l.getUID(le),i.default(t.target).attr("id",e)),t.target="#"+e}return l.typeCheckConfig(le,t,de),t},e._getScrollTop=function(){return this._scrollElement===window?this._scrollElement.pageYOffset:this._scrollElement.scrollTop},e._getScrollHeight=function(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)},e._getOffsetHeight=function(){return this._scrollElement===window?window.innerHeight:this._scrollElement.getBoundingClientRect().height},e._process=function(){var t=this._getScrollTop()+this._config.offset,e=this._getScrollHeight(),n=this._config.offset+e-this._getOffsetHeight();if(this._scrollHeight!==e&&this.refresh(),t>=n){var i=this._targets[this._targets.length-1];this._activeTarget!==i&&this._activate(i)}else{if(this._activeTarget&&t0)return this._activeTarget=null,void this._clear();for(var o=this._offsets.length;o--;){this._activeTarget!==this._targets[o]&&t>=this._offsets[o]&&("undefined"==typeof this._offsets[o+1]||t li > .active":".active";n=(n=i.default.makeArray(i.default(o).find(a)))[n.length-1]}var s=i.default.Event("hide.bs.tab",{relatedTarget:this._element}),u=i.default.Event("show.bs.tab",{relatedTarget:n});if(n&&i.default(n).trigger(s),i.default(this._element).trigger(u),!u.isDefaultPrevented()&&!s.isDefaultPrevented()){r&&(e=document.querySelector(r)),this._activate(this._element,o);var f=function(){var e=i.default.Event("hidden.bs.tab",{relatedTarget:t._element}),o=i.default.Event("shown.bs.tab",{relatedTarget:n});i.default(n).trigger(e),i.default(t._element).trigger(o)};e?this._activate(e,e.parentNode,f):f()}}},e.dispose=function(){i.default.removeData(this._element,"bs.tab"),this._element=null},e._activate=function(t,e,n){var o=this,r=(!e||"UL"!==e.nodeName&&"OL"!==e.nodeName?i.default(e).children(".active"):i.default(e).find("> li > .active"))[0],a=n&&r&&i.default(r).hasClass("fade"),s=function(){return o._transitionComplete(t,r,n)};if(r&&a){var u=l.getTransitionDurationFromElement(r);i.default(r).removeClass("show").one(l.TRANSITION_END,s).emulateTransitionEnd(u)}else s()},e._transitionComplete=function(t,e,n){if(e){i.default(e).removeClass("active");var o=i.default(e.parentNode).find("> .dropdown-menu .active")[0];o&&i.default(o).removeClass("active"),"tab"===e.getAttribute("role")&&e.setAttribute("aria-selected",!1)}if(i.default(t).addClass("active"),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!0),l.reflow(t),t.classList.contains("fade")&&t.classList.add("show"),t.parentNode&&i.default(t.parentNode).hasClass("dropdown-menu")){var r=i.default(t).closest(".dropdown")[0];if(r){var a=[].slice.call(r.querySelectorAll(".dropdown-toggle"));i.default(a).addClass("active")}t.setAttribute("aria-expanded",!0)}n&&n()},t._jQueryInterface=function(e){return this.each((function(){var n=i.default(this),o=n.data("bs.tab");if(o||(o=new t(this),n.data("bs.tab",o)),"string"==typeof e){if("undefined"==typeof o[e])throw new TypeError('No method named "'+e+'"');o[e]()}}))},r(t,null,[{key:"VERSION",get:function(){return"4.6.0"}}]),t}();i.default(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',(function(t){t.preventDefault(),pe._jQueryInterface.call(i.default(this),"show")})),i.default.fn.tab=pe._jQueryInterface,i.default.fn.tab.Constructor=pe,i.default.fn.tab.noConflict=function(){return i.default.fn.tab=he,pe._jQueryInterface};var me=i.default.fn.toast,ge={animation:"boolean",autohide:"boolean",delay:"number"},ve={animation:!0,autohide:!0,delay:500},_e=function(){function t(t,e){this._element=t,this._config=this._getConfig(e),this._timeout=null,this._setListeners()}var e=t.prototype;return e.show=function(){var t=this,e=i.default.Event("show.bs.toast");if(i.default(this._element).trigger(e),!e.isDefaultPrevented()){this._clearTimeout(),this._config.animation&&this._element.classList.add("fade");var n=function(){t._element.classList.remove("showing"),t._element.classList.add("show"),i.default(t._element).trigger("shown.bs.toast"),t._config.autohide&&(t._timeout=setTimeout((function(){t.hide()}),t._config.delay))};if(this._element.classList.remove("hide"),l.reflow(this._element),this._element.classList.add("showing"),this._config.animation){var o=l.getTransitionDurationFromElement(this._element);i.default(this._element).one(l.TRANSITION_END,n).emulateTransitionEnd(o)}else n()}},e.hide=function(){if(this._element.classList.contains("show")){var t=i.default.Event("hide.bs.toast");i.default(this._element).trigger(t),t.isDefaultPrevented()||this._close()}},e.dispose=function(){this._clearTimeout(),this._element.classList.contains("show")&&this._element.classList.remove("show"),i.default(this._element).off("click.dismiss.bs.toast"),i.default.removeData(this._element,"bs.toast"),this._element=null,this._config=null},e._getConfig=function(t){return t=a({},ve,i.default(this._element).data(),"object"==typeof t&&t?t:{}),l.typeCheckConfig("toast",t,this.constructor.DefaultType),t},e._setListeners=function(){var t=this;i.default(this._element).on("click.dismiss.bs.toast",'[data-dismiss="toast"]',(function(){return t.hide()}))},e._close=function(){var t=this,e=function(){t._element.classList.add("hide"),i.default(t._element).trigger("hidden.bs.toast")};if(this._element.classList.remove("show"),this._config.animation){var n=l.getTransitionDurationFromElement(this._element);i.default(this._element).one(l.TRANSITION_END,e).emulateTransitionEnd(n)}else e()},e._clearTimeout=function(){clearTimeout(this._timeout),this._timeout=null},t._jQueryInterface=function(e){return this.each((function(){var n=i.default(this),o=n.data("bs.toast");if(o||(o=new t(this,"object"==typeof e&&e),n.data("bs.toast",o)),"string"==typeof e){if("undefined"==typeof o[e])throw new TypeError('No method named "'+e+'"');o[e](this)}}))},r(t,null,[{key:"VERSION",get:function(){return"4.6.0"}},{key:"DefaultType",get:function(){return ge}},{key:"Default",get:function(){return ve}}]),t}();i.default.fn.toast=_e._jQueryInterface,i.default.fn.toast.Constructor=_e,i.default.fn.toast.noConflict=function(){return i.default.fn.toast=me,_e._jQueryInterface},t.Alert=d,t.Button=h,t.Carousel=y,t.Collapse=S,t.Dropdown=Ft,t.Modal=qt,t.Popover=se,t.Scrollspy=ce,t.Tab=pe,t.Toast=_e,t.Tooltip=te,t.Util=l,Object.defineProperty(t,"__esModule",{value:!0})})); +//# sourceMappingURL=bootstrap.bundle.min.js.map \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap/js/bootstrap.bundle.min.js.map b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap/js/bootstrap.bundle.min.js.map new file mode 100644 index 0000000000..7fcd06e5c7 --- /dev/null +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/wwwroot/libs/bootstrap/js/bootstrap.bundle.min.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../js/src/util.js","../../js/src/alert.js","../../js/src/button.js","../../js/src/carousel.js","../../js/src/collapse.js","../../node_modules/popper.js/dist/esm/popper.js","../../js/src/dropdown.js","../../js/src/modal.js","../../js/src/tools/sanitizer.js","../../js/src/tooltip.js","../../js/src/popover.js","../../js/src/scrollspy.js","../../js/src/tab.js","../../js/src/toast.js"],"names":["transitionEndEmulator","duration","_this","this","called","$","one","Util","TRANSITION_END","setTimeout","triggerTransitionEnd","getUID","prefix","Math","random","document","getElementById","getSelectorFromElement","element","selector","getAttribute","hrefAttr","trim","querySelector","_","getTransitionDurationFromElement","transitionDuration","css","transitionDelay","floatTransitionDuration","parseFloat","floatTransitionDelay","split","reflow","offsetHeight","trigger","supportsTransitionEnd","Boolean","isElement","obj","nodeType","typeCheckConfig","componentName","config","configTypes","property","Object","prototype","hasOwnProperty","call","expectedTypes","value","valueType","toString","match","toLowerCase","RegExp","test","Error","toUpperCase","findShadowRoot","documentElement","attachShadow","getRootNode","root","ShadowRoot","parentNode","jQueryDetection","TypeError","version","fn","jquery","emulateTransitionEnd","event","special","bindType","delegateType","handle","target","is","handleObj","handler","apply","arguments","NAME","JQUERY_NO_CONFLICT","Alert","_element","close","rootElement","_getRootElement","_triggerCloseEvent","isDefaultPrevented","_removeElement","dispose","removeData","parent","closest","closeEvent","Event","removeClass","hasClass","_destroyElement","detach","remove","_jQueryInterface","each","$element","data","_handleDismiss","alertInstance","preventDefault","on","Constructor","noConflict","Button","shouldAvoidTriggerChange","toggle","triggerChangeEvent","addAriaPressed","input","type","checked","classList","contains","activeElement","focus","hasAttribute","setAttribute","toggleClass","avoidTriggerChange","button","initialButton","inputBtn","tagName","window","buttons","slice","querySelectorAll","i","len","length","add","EVENT_KEY","Default","interval","keyboard","slide","pause","wrap","touch","DefaultType","PointerType","TOUCH","PEN","Carousel","_items","_interval","_activeElement","_isPaused","_isSliding","touchTimeout","touchStartX","touchDeltaX","_config","_getConfig","_indicatorsElement","_touchSupported","navigator","maxTouchPoints","_pointerEvent","PointerEvent","MSPointerEvent","_addEventListeners","next","_slide","nextWhenVisible","hidden","prev","cycle","clearInterval","_updateInterval","setInterval","visibilityState","bind","to","index","activeIndex","_getItemIndex","direction","off","_extends","_handleSwipe","absDeltax","abs","_this2","_keydown","_addTouchEventListeners","_this3","start","originalEvent","pointerType","clientX","touches","end","clearTimeout","e","move","which","indexOf","_getItemByDirection","isNextDirection","isPrevDirection","lastItemIndex","itemIndex","_triggerSlideEvent","relatedTarget","eventDirectionName","targetIndex","fromIndex","slideEvent","from","_setActiveIndicatorElement","indicators","nextIndicator","children","addClass","elementInterval","parseInt","defaultInterval","directionalClassName","orderClassName","_this4","activeElementIndex","nextElement","nextElementIndex","isCycling","slidEvent","CLASS_NAME_ACTIVE","action","ride","_dataApiClickHandler","slideIndex","carousels","$carousel","Collapse","_isTransitioning","_triggerArray","id","toggleList","elem","filterElement","filter","foundElem","_selector","push","_parent","_getParent","_addAriaAndCollapsedClass","hide","show","actives","activesData","not","startEvent","dimension","_getDimension","style","attr","setTransitioning","scrollSize","CLASS_NAME_COLLAPSE","getBoundingClientRect","triggerArrayLength","isTransitioning","_getTargetFromElement","triggerArray","isOpen","currentTarget","$trigger","selectors","$target","isBrowser","timeoutDuration","longerTimeoutBrowsers","userAgent","debounce","Promise","resolve","then","scheduled","isFunction","functionToCheck","getStyleComputedProperty","ownerDocument","defaultView","getComputedStyle","getParentNode","nodeName","host","getScrollParent","body","_getStyleComputedProp","overflow","overflowX","overflowY","getReferenceNode","reference","referenceNode","isIE11","MSInputMethodContext","documentMode","isIE10","isIE","getOffsetParent","noOffsetParent","offsetParent","nextElementSibling","getRoot","node","findCommonOffsetParent","element1","element2","order","compareDocumentPosition","Node","DOCUMENT_POSITION_FOLLOWING","range","createRange","setStart","setEnd","commonAncestorContainer","firstElementChild","element1root","getScroll","side","undefined","upperSide","html","scrollingElement","includeScroll","rect","subtract","scrollTop","scrollLeft","modifier","top","bottom","left","right","getBordersSize","styles","axis","sideA","sideB","getSize","computedStyle","max","getWindowSizes","height","width","classCallCheck","instance","createClass","defineProperties","props","descriptor","enumerable","configurable","writable","defineProperty","key","protoProps","staticProps","assign","source","getClientRect","offsets","result","sizes","clientWidth","clientHeight","horizScrollbar","offsetWidth","vertScrollbar","getOffsetRectRelativeToArbitraryNode","fixedPosition","isHTML","childrenRect","parentRect","scrollParent","borderTopWidth","borderLeftWidth","marginTop","marginLeft","getViewportOffsetRectRelativeToArtbitraryNode","excludeScroll","relativeOffset","innerWidth","innerHeight","offset","isFixed","getFixedPositionOffsetParent","parentElement","el","getBoundaries","popper","padding","boundariesElement","boundaries","boundariesNode","_getWindowSizes","isPaddingNumber","getArea","_ref","computeAutoPlacement","placement","refRect","rects","sortedAreas","keys","map","area","sort","a","b","filteredAreas","_ref2","computedPlacement","variation","getReferenceOffsets","state","commonOffsetParent","getOuterSizes","x","marginBottom","y","marginRight","getOppositePlacement","hash","replace","matched","getPopperOffsets","referenceOffsets","popperRect","popperOffsets","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","find","arr","check","Array","runModifiers","modifiers","ends","prop","findIndex","cur","forEach","console","warn","enabled","update","isDestroyed","arrowStyles","attributes","flipped","options","positionFixed","flip","originalPlacement","position","isCreated","onUpdate","onCreate","isModifierEnabled","modifierName","some","name","getSupportedPropertyName","prefixes","upperProp","charAt","toCheck","destroy","removeAttribute","willChange","disableEventListeners","removeOnDestroy","removeChild","getWindow","setupEventListeners","updateBound","addEventListener","passive","scrollElement","attachToScrollParents","callback","scrollParents","isBody","eventsEnabled","enableEventListeners","scheduleUpdate","cancelAnimationFrame","removeEventListener","isNumeric","n","isNaN","isFinite","setStyles","unit","isFirefox","isModifierRequired","requestingName","requestedName","requesting","isRequired","_requesting","requested","placements","validPlacements","clockwise","counter","concat","reverse","BEHAVIORS","parseOffset","basePlacement","useHeight","fragments","frag","divider","search","splitRegex","ops","op","mergeWithPrevious","reduce","str","toValue","index2","Defaults","shift","shiftvariation","_data$offsets","isVertical","shiftOffsets","preventOverflow","transformProp","popperStyles","transform","priority","primary","escapeWithReference","secondary","min","keepTogether","floor","opSide","arrow","_data$offsets$arrow","arrowElement","sideCapitalized","altSide","arrowElementSize","center","popperMarginSide","popperBorderSide","sideValue","round","placementOpposite","flipOrder","behavior","step","refOffsets","overlapsRef","overflowsLeft","overflowsRight","overflowsTop","overflowsBottom","overflowsBoundaries","flippedVariationByRef","flipVariations","flippedVariationByContent","flipVariationsByContent","flippedVariation","getOppositeVariation","inner","subtractLength","bound","computeStyle","legacyGpuAccelerationOption","gpuAcceleration","offsetParentRect","shouldRound","noRound","v","referenceWidth","popperWidth","isVariation","horizontalToInteger","verticalToInteger","getRoundedOffsets","devicePixelRatio","prefixedProperty","invertTop","invertLeft","x-placement","applyStyle","onLoad","modifierOptions","Popper","requestAnimationFrame","Utils","global","PopperUtils","REGEXP_KEYDOWN","ARROW_UP_KEYCODE","boundary","display","popperConfig","Dropdown","_popper","_menu","_getMenuElement","_inNavbar","_detectNavbar","disabled","isActive","_clearMenus","usePopper","showEvent","_getParentFromElement","referenceElement","_getPopperConfig","noop","hideEvent","stopPropagation","constructor","_getPlacement","$parentDropdown","_getOffset","toggles","context","clickEvent","dropdownMenu","_dataApiKeydownHandler","items","item","EVENT_CLICK_DATA_API","backdrop","Modal","_dialog","_backdrop","_isShown","_isBodyOverflowing","_ignoreBackdropClick","_scrollbarWidth","_checkScrollbar","_setScrollbar","_adjustDialog","_setEscapeEvent","_setResizeEvent","_showBackdrop","_showElement","transition","_hideModal","htmlElement","handleUpdate","_triggerBackdropTransition","hideEventPrevented","isModalOverflowing","scrollHeight","modalTransitionDuration","modalBody","ELEMENT_NODE","appendChild","_enforceFocus","shownEvent","transitionComplete","_this5","has","_this6","_this7","_this8","_resetAdjustments","_resetScrollbar","_removeBackdrop","_this9","animate","createElement","className","appendTo","backdropTransitionDuration","callbackRemove","paddingLeft","paddingRight","_getScrollbarWidth","_this10","fixedContent","stickyContent","actualPadding","calculatedPadding","actualMargin","calculatedMargin","elements","margin","scrollDiv","scrollbarWidth","_this11","uriAttrs","DefaultWhitelist","*","br","col","code","div","em","hr","h1","h2","h3","h4","h5","h6","img","li","ol","p","pre","s","small","span","sub","sup","strong","u","ul","SAFE_URL_PATTERN","DATA_URL_PATTERN","sanitizeHtml","unsafeHtml","whiteList","sanitizeFn","createdDocument","DOMParser","parseFromString","whitelistKeys","_loop","elName","attributeList","whitelistedAttributes","allowedAttributeList","attrName","nodeValue","regExp","attrRegex","allowedAttribute","innerHTML","BSCLS_PREFIX_REGEX","DISALLOWED_ATTRIBUTES","animation","template","title","delay","container","fallbackPlacement","customClass","sanitize","AttachmentMap","AUTO","TOP","RIGHT","BOTTOM","LEFT","HIDE","HIDDEN","SHOW","SHOWN","INSERTED","CLICK","FOCUSIN","FOCUSOUT","MOUSEENTER","MOUSELEAVE","Tooltip","_isEnabled","_timeout","_hoverState","_activeTrigger","tip","_setListeners","enable","disable","toggleEnabled","dataKey","DATA_KEY","_getDelegateConfig","click","_isWithActiveTrigger","_enter","_leave","getTipElement","_hideModalHandler","isWithContent","shadowRoot","isInTheDom","tipId","setContent","attachment","_getAttachment","addAttachmentClass","_getContainer","complete","_fixTransition","prevHoverState","_cleanTipClass","getTitle","CLASS_PREFIX","setElementContent","CLASS_NAME_FADE","content","text","empty","append","_handlePopperPlacementChange","eventIn","eventOut","_fixTitle","titleType","dataAttributes","dataAttr","$tip","tabClass","join","popperData","initConfigAnimation","Popover","_getContent","method","ScrollSpy","_scrollElement","_offsets","_targets","_activeTarget","_scrollHeight","_process","refresh","autoMethod","offsetMethod","offsetBase","_getScrollTop","_getScrollHeight","targetSelector","targetBCR","pageYOffset","_getOffsetHeight","maxScroll","_activate","_clear","queries","$link","parents","SELECTOR_NAV_LINKS","scrollSpys","$spy","Tab","previous","listElement","itemSelector","makeArray","hiddenEvent","active","_transitionComplete","dropdownChild","dropdownElement","dropdownToggleList","$this","autohide","Toast","_clearTimeout","_close"],"mappings":"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","sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): util.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\n\n/**\n * ------------------------------------------------------------------------\n * Private TransitionEnd Helpers\n * ------------------------------------------------------------------------\n */\n\nconst TRANSITION_END = 'transitionend'\nconst MAX_UID = 1000000\nconst MILLISECONDS_MULTIPLIER = 1000\n\n// Shoutout AngusCroll (https://goo.gl/pxwQGp)\nfunction toType(obj) {\n if (obj === null || typeof obj === 'undefined') {\n return `${obj}`\n }\n\n return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase()\n}\n\nfunction getSpecialTransitionEndEvent() {\n return {\n bindType: TRANSITION_END,\n delegateType: TRANSITION_END,\n handle(event) {\n if ($(event.target).is(this)) {\n return event.handleObj.handler.apply(this, arguments) // eslint-disable-line prefer-rest-params\n }\n\n return undefined\n }\n }\n}\n\nfunction transitionEndEmulator(duration) {\n let called = false\n\n $(this).one(Util.TRANSITION_END, () => {\n called = true\n })\n\n setTimeout(() => {\n if (!called) {\n Util.triggerTransitionEnd(this)\n }\n }, duration)\n\n return this\n}\n\nfunction setTransitionEndSupport() {\n $.fn.emulateTransitionEnd = transitionEndEmulator\n $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent()\n}\n\n/**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\nconst Util = {\n TRANSITION_END: 'bsTransitionEnd',\n\n getUID(prefix) {\n do {\n prefix += ~~(Math.random() * MAX_UID) // \"~~\" acts like a faster Math.floor() here\n } while (document.getElementById(prefix))\n\n return prefix\n },\n\n getSelectorFromElement(element) {\n let selector = element.getAttribute('data-target')\n\n if (!selector || selector === '#') {\n const hrefAttr = element.getAttribute('href')\n selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : ''\n }\n\n try {\n return document.querySelector(selector) ? selector : null\n } catch (_) {\n return null\n }\n },\n\n getTransitionDurationFromElement(element) {\n if (!element) {\n return 0\n }\n\n // Get transition-duration of the element\n let transitionDuration = $(element).css('transition-duration')\n let transitionDelay = $(element).css('transition-delay')\n\n const floatTransitionDuration = parseFloat(transitionDuration)\n const floatTransitionDelay = parseFloat(transitionDelay)\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0]\n transitionDelay = transitionDelay.split(',')[0]\n\n return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER\n },\n\n reflow(element) {\n return element.offsetHeight\n },\n\n triggerTransitionEnd(element) {\n $(element).trigger(TRANSITION_END)\n },\n\n supportsTransitionEnd() {\n return Boolean(TRANSITION_END)\n },\n\n isElement(obj) {\n return (obj[0] || obj).nodeType\n },\n\n typeCheckConfig(componentName, config, configTypes) {\n for (const property in configTypes) {\n if (Object.prototype.hasOwnProperty.call(configTypes, property)) {\n const expectedTypes = configTypes[property]\n const value = config[property]\n const valueType = value && Util.isElement(value) ?\n 'element' : toType(value)\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new Error(\n `${componentName.toUpperCase()}: ` +\n `Option \"${property}\" provided type \"${valueType}\" ` +\n `but expected type \"${expectedTypes}\".`)\n }\n }\n }\n },\n\n findShadowRoot(element) {\n if (!document.documentElement.attachShadow) {\n return null\n }\n\n // Can find the shadow root otherwise it'll return the document\n if (typeof element.getRootNode === 'function') {\n const root = element.getRootNode()\n return root instanceof ShadowRoot ? root : null\n }\n\n if (element instanceof ShadowRoot) {\n return element\n }\n\n // when we don't find a shadow root\n if (!element.parentNode) {\n return null\n }\n\n return Util.findShadowRoot(element.parentNode)\n },\n\n jQueryDetection() {\n if (typeof $ === 'undefined') {\n throw new TypeError('Bootstrap\\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\\'s JavaScript.')\n }\n\n const version = $.fn.jquery.split(' ')[0].split('.')\n const minMajor = 1\n const ltMajor = 2\n const minMinor = 9\n const minPatch = 1\n const maxMajor = 4\n\n if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) {\n throw new Error('Bootstrap\\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0')\n }\n }\n}\n\nUtil.jQueryDetection()\nsetTransitionEndSupport()\n\nexport default Util\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'alert'\nconst VERSION = '4.6.0'\nconst DATA_KEY = 'bs.alert'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst SELECTOR_DISMISS = '[data-dismiss=\"alert\"]'\n\nconst EVENT_CLOSE = `close${EVENT_KEY}`\nconst EVENT_CLOSED = `closed${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_ALERT = 'alert'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Alert {\n constructor(element) {\n this._element = element\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n // Public\n\n close(element) {\n let rootElement = this._element\n if (element) {\n rootElement = this._getRootElement(element)\n }\n\n const customEvent = this._triggerCloseEvent(rootElement)\n\n if (customEvent.isDefaultPrevented()) {\n return\n }\n\n this._removeElement(rootElement)\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n // Private\n\n _getRootElement(element) {\n const selector = Util.getSelectorFromElement(element)\n let parent = false\n\n if (selector) {\n parent = document.querySelector(selector)\n }\n\n if (!parent) {\n parent = $(element).closest(`.${CLASS_NAME_ALERT}`)[0]\n }\n\n return parent\n }\n\n _triggerCloseEvent(element) {\n const closeEvent = $.Event(EVENT_CLOSE)\n\n $(element).trigger(closeEvent)\n return closeEvent\n }\n\n _removeElement(element) {\n $(element).removeClass(CLASS_NAME_SHOW)\n\n if (!$(element).hasClass(CLASS_NAME_FADE)) {\n this._destroyElement(element)\n return\n }\n\n const transitionDuration = Util.getTransitionDurationFromElement(element)\n\n $(element)\n .one(Util.TRANSITION_END, event => this._destroyElement(element, event))\n .emulateTransitionEnd(transitionDuration)\n }\n\n _destroyElement(element) {\n $(element)\n .detach()\n .trigger(EVENT_CLOSED)\n .remove()\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n\n if (!data) {\n data = new Alert(this)\n $element.data(DATA_KEY, data)\n }\n\n if (config === 'close') {\n data[config](this)\n }\n })\n }\n\n static _handleDismiss(alertInstance) {\n return function (event) {\n if (event) {\n event.preventDefault()\n }\n\n alertInstance.close(this)\n }\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(\n EVENT_CLICK_DATA_API,\n SELECTOR_DISMISS,\n Alert._handleDismiss(new Alert())\n)\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Alert._jQueryInterface\n$.fn[NAME].Constructor = Alert\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Alert._jQueryInterface\n}\n\nexport default Alert\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'button'\nconst VERSION = '4.6.0'\nconst DATA_KEY = 'bs.button'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_BUTTON = 'btn'\nconst CLASS_NAME_FOCUS = 'focus'\n\nconst SELECTOR_DATA_TOGGLE_CARROT = '[data-toggle^=\"button\"]'\nconst SELECTOR_DATA_TOGGLES = '[data-toggle=\"buttons\"]'\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"button\"]'\nconst SELECTOR_DATA_TOGGLES_BUTTONS = '[data-toggle=\"buttons\"] .btn'\nconst SELECTOR_INPUT = 'input:not([type=\"hidden\"])'\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_BUTTON = '.btn'\n\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_FOCUS_BLUR_DATA_API = `focus${EVENT_KEY}${DATA_API_KEY} ` +\n `blur${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Button {\n constructor(element) {\n this._element = element\n this.shouldAvoidTriggerChange = false\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n // Public\n\n toggle() {\n let triggerChangeEvent = true\n let addAriaPressed = true\n const rootElement = $(this._element).closest(SELECTOR_DATA_TOGGLES)[0]\n\n if (rootElement) {\n const input = this._element.querySelector(SELECTOR_INPUT)\n\n if (input) {\n if (input.type === 'radio') {\n if (input.checked && this._element.classList.contains(CLASS_NAME_ACTIVE)) {\n triggerChangeEvent = false\n } else {\n const activeElement = rootElement.querySelector(SELECTOR_ACTIVE)\n\n if (activeElement) {\n $(activeElement).removeClass(CLASS_NAME_ACTIVE)\n }\n }\n }\n\n if (triggerChangeEvent) {\n // if it's not a radio button or checkbox don't add a pointless/invalid checked property to the input\n if (input.type === 'checkbox' || input.type === 'radio') {\n input.checked = !this._element.classList.contains(CLASS_NAME_ACTIVE)\n }\n\n if (!this.shouldAvoidTriggerChange) {\n $(input).trigger('change')\n }\n }\n\n input.focus()\n addAriaPressed = false\n }\n }\n\n if (!(this._element.hasAttribute('disabled') || this._element.classList.contains('disabled'))) {\n if (addAriaPressed) {\n this._element.setAttribute('aria-pressed', !this._element.classList.contains(CLASS_NAME_ACTIVE))\n }\n\n if (triggerChangeEvent) {\n $(this._element).toggleClass(CLASS_NAME_ACTIVE)\n }\n }\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n // Static\n\n static _jQueryInterface(config, avoidTriggerChange) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n\n if (!data) {\n data = new Button(this)\n $element.data(DATA_KEY, data)\n }\n\n data.shouldAvoidTriggerChange = avoidTriggerChange\n\n if (config === 'toggle') {\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document)\n .on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, event => {\n let button = event.target\n const initialButton = button\n\n if (!$(button).hasClass(CLASS_NAME_BUTTON)) {\n button = $(button).closest(SELECTOR_BUTTON)[0]\n }\n\n if (!button || button.hasAttribute('disabled') || button.classList.contains('disabled')) {\n event.preventDefault() // work around Firefox bug #1540995\n } else {\n const inputBtn = button.querySelector(SELECTOR_INPUT)\n\n if (inputBtn && (inputBtn.hasAttribute('disabled') || inputBtn.classList.contains('disabled'))) {\n event.preventDefault() // work around Firefox bug #1540995\n return\n }\n\n if (initialButton.tagName === 'INPUT' || button.tagName !== 'LABEL') {\n Button._jQueryInterface.call($(button), 'toggle', initialButton.tagName === 'INPUT')\n }\n }\n })\n .on(EVENT_FOCUS_BLUR_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, event => {\n const button = $(event.target).closest(SELECTOR_BUTTON)[0]\n $(button).toggleClass(CLASS_NAME_FOCUS, /^focus(in)?$/.test(event.type))\n })\n\n$(window).on(EVENT_LOAD_DATA_API, () => {\n // ensure correct active class is set to match the controls' actual values/states\n\n // find all checkboxes/readio buttons inside data-toggle groups\n let buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLES_BUTTONS))\n for (let i = 0, len = buttons.length; i < len; i++) {\n const button = buttons[i]\n const input = button.querySelector(SELECTOR_INPUT)\n if (input.checked || input.hasAttribute('checked')) {\n button.classList.add(CLASS_NAME_ACTIVE)\n } else {\n button.classList.remove(CLASS_NAME_ACTIVE)\n }\n }\n\n // find all button toggles\n buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE))\n for (let i = 0, len = buttons.length; i < len; i++) {\n const button = buttons[i]\n if (button.getAttribute('aria-pressed') === 'true') {\n button.classList.add(CLASS_NAME_ACTIVE)\n } else {\n button.classList.remove(CLASS_NAME_ACTIVE)\n }\n }\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Button._jQueryInterface\n$.fn[NAME].Constructor = Button\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Button._jQueryInterface\n}\n\nexport default Button\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'carousel'\nconst VERSION = '4.6.0'\nconst DATA_KEY = 'bs.carousel'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ARROW_LEFT_KEYCODE = 37 // KeyboardEvent.which value for left arrow key\nconst ARROW_RIGHT_KEYCODE = 39 // KeyboardEvent.which value for right arrow key\nconst TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch\nconst SWIPE_THRESHOLD = 40\n\nconst Default = {\n interval: 5000,\n keyboard: true,\n slide: false,\n pause: 'hover',\n wrap: true,\n touch: true\n}\n\nconst DefaultType = {\n interval: '(number|boolean)',\n keyboard: 'boolean',\n slide: '(boolean|string)',\n pause: '(string|boolean)',\n wrap: 'boolean',\n touch: 'boolean'\n}\n\nconst DIRECTION_NEXT = 'next'\nconst DIRECTION_PREV = 'prev'\nconst DIRECTION_LEFT = 'left'\nconst DIRECTION_RIGHT = 'right'\n\nconst EVENT_SLIDE = `slide${EVENT_KEY}`\nconst EVENT_SLID = `slid${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY}`\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY}`\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY}`\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY}`\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY}`\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY}`\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY}`\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_CAROUSEL = 'carousel'\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_SLIDE = 'slide'\nconst CLASS_NAME_RIGHT = 'carousel-item-right'\nconst CLASS_NAME_LEFT = 'carousel-item-left'\nconst CLASS_NAME_NEXT = 'carousel-item-next'\nconst CLASS_NAME_PREV = 'carousel-item-prev'\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event'\n\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_ACTIVE_ITEM = '.active.carousel-item'\nconst SELECTOR_ITEM = '.carousel-item'\nconst SELECTOR_ITEM_IMG = '.carousel-item img'\nconst SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev'\nconst SELECTOR_INDICATORS = '.carousel-indicators'\nconst SELECTOR_DATA_SLIDE = '[data-slide], [data-slide-to]'\nconst SELECTOR_DATA_RIDE = '[data-ride=\"carousel\"]'\n\nconst PointerType = {\n TOUCH: 'touch',\n PEN: 'pen'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\nclass Carousel {\n constructor(element, config) {\n this._items = null\n this._interval = null\n this._activeElement = null\n this._isPaused = false\n this._isSliding = false\n this.touchTimeout = null\n this.touchStartX = 0\n this.touchDeltaX = 0\n\n this._config = this._getConfig(config)\n this._element = element\n this._indicatorsElement = this._element.querySelector(SELECTOR_INDICATORS)\n this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0\n this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent)\n\n this._addEventListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n next() {\n if (!this._isSliding) {\n this._slide(DIRECTION_NEXT)\n }\n }\n\n nextWhenVisible() {\n const $element = $(this._element)\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden &&\n ($element.is(':visible') && $element.css('visibility') !== 'hidden')) {\n this.next()\n }\n }\n\n prev() {\n if (!this._isSliding) {\n this._slide(DIRECTION_PREV)\n }\n }\n\n pause(event) {\n if (!event) {\n this._isPaused = true\n }\n\n if (this._element.querySelector(SELECTOR_NEXT_PREV)) {\n Util.triggerTransitionEnd(this._element)\n this.cycle(true)\n }\n\n clearInterval(this._interval)\n this._interval = null\n }\n\n cycle(event) {\n if (!event) {\n this._isPaused = false\n }\n\n if (this._interval) {\n clearInterval(this._interval)\n this._interval = null\n }\n\n if (this._config.interval && !this._isPaused) {\n this._updateInterval()\n\n this._interval = setInterval(\n (document.visibilityState ? this.nextWhenVisible : this.next).bind(this),\n this._config.interval\n )\n }\n }\n\n to(index) {\n this._activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM)\n\n const activeIndex = this._getItemIndex(this._activeElement)\n\n if (index > this._items.length - 1 || index < 0) {\n return\n }\n\n if (this._isSliding) {\n $(this._element).one(EVENT_SLID, () => this.to(index))\n return\n }\n\n if (activeIndex === index) {\n this.pause()\n this.cycle()\n return\n }\n\n const direction = index > activeIndex ?\n DIRECTION_NEXT :\n DIRECTION_PREV\n\n this._slide(direction, this._items[index])\n }\n\n dispose() {\n $(this._element).off(EVENT_KEY)\n $.removeData(this._element, DATA_KEY)\n\n this._items = null\n this._config = null\n this._element = null\n this._interval = null\n this._isPaused = null\n this._isSliding = null\n this._activeElement = null\n this._indicatorsElement = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _handleSwipe() {\n const absDeltax = Math.abs(this.touchDeltaX)\n\n if (absDeltax <= SWIPE_THRESHOLD) {\n return\n }\n\n const direction = absDeltax / this.touchDeltaX\n\n this.touchDeltaX = 0\n\n // swipe left\n if (direction > 0) {\n this.prev()\n }\n\n // swipe right\n if (direction < 0) {\n this.next()\n }\n }\n\n _addEventListeners() {\n if (this._config.keyboard) {\n $(this._element).on(EVENT_KEYDOWN, event => this._keydown(event))\n }\n\n if (this._config.pause === 'hover') {\n $(this._element)\n .on(EVENT_MOUSEENTER, event => this.pause(event))\n .on(EVENT_MOUSELEAVE, event => this.cycle(event))\n }\n\n if (this._config.touch) {\n this._addTouchEventListeners()\n }\n }\n\n _addTouchEventListeners() {\n if (!this._touchSupported) {\n return\n }\n\n const start = event => {\n if (this._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n this.touchStartX = event.originalEvent.clientX\n } else if (!this._pointerEvent) {\n this.touchStartX = event.originalEvent.touches[0].clientX\n }\n }\n\n const move = event => {\n // ensure swiping with one touch and not pinching\n if (event.originalEvent.touches && event.originalEvent.touches.length > 1) {\n this.touchDeltaX = 0\n } else {\n this.touchDeltaX = event.originalEvent.touches[0].clientX - this.touchStartX\n }\n }\n\n const end = event => {\n if (this._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n this.touchDeltaX = event.originalEvent.clientX - this.touchStartX\n }\n\n this._handleSwipe()\n if (this._config.pause === 'hover') {\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n\n this.pause()\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout)\n }\n\n this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval)\n }\n }\n\n $(this._element.querySelectorAll(SELECTOR_ITEM_IMG))\n .on(EVENT_DRAG_START, e => e.preventDefault())\n\n if (this._pointerEvent) {\n $(this._element).on(EVENT_POINTERDOWN, event => start(event))\n $(this._element).on(EVENT_POINTERUP, event => end(event))\n\n this._element.classList.add(CLASS_NAME_POINTER_EVENT)\n } else {\n $(this._element).on(EVENT_TOUCHSTART, event => start(event))\n $(this._element).on(EVENT_TOUCHMOVE, event => move(event))\n $(this._element).on(EVENT_TOUCHEND, event => end(event))\n }\n }\n\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return\n }\n\n switch (event.which) {\n case ARROW_LEFT_KEYCODE:\n event.preventDefault()\n this.prev()\n break\n case ARROW_RIGHT_KEYCODE:\n event.preventDefault()\n this.next()\n break\n default:\n }\n }\n\n _getItemIndex(element) {\n this._items = element && element.parentNode ?\n [].slice.call(element.parentNode.querySelectorAll(SELECTOR_ITEM)) :\n []\n return this._items.indexOf(element)\n }\n\n _getItemByDirection(direction, activeElement) {\n const isNextDirection = direction === DIRECTION_NEXT\n const isPrevDirection = direction === DIRECTION_PREV\n const activeIndex = this._getItemIndex(activeElement)\n const lastItemIndex = this._items.length - 1\n const isGoingToWrap = isPrevDirection && activeIndex === 0 ||\n isNextDirection && activeIndex === lastItemIndex\n\n if (isGoingToWrap && !this._config.wrap) {\n return activeElement\n }\n\n const delta = direction === DIRECTION_PREV ? -1 : 1\n const itemIndex = (activeIndex + delta) % this._items.length\n\n return itemIndex === -1 ?\n this._items[this._items.length - 1] : this._items[itemIndex]\n }\n\n _triggerSlideEvent(relatedTarget, eventDirectionName) {\n const targetIndex = this._getItemIndex(relatedTarget)\n const fromIndex = this._getItemIndex(this._element.querySelector(SELECTOR_ACTIVE_ITEM))\n const slideEvent = $.Event(EVENT_SLIDE, {\n relatedTarget,\n direction: eventDirectionName,\n from: fromIndex,\n to: targetIndex\n })\n\n $(this._element).trigger(slideEvent)\n\n return slideEvent\n }\n\n _setActiveIndicatorElement(element) {\n if (this._indicatorsElement) {\n const indicators = [].slice.call(this._indicatorsElement.querySelectorAll(SELECTOR_ACTIVE))\n $(indicators).removeClass(CLASS_NAME_ACTIVE)\n\n const nextIndicator = this._indicatorsElement.children[\n this._getItemIndex(element)\n ]\n\n if (nextIndicator) {\n $(nextIndicator).addClass(CLASS_NAME_ACTIVE)\n }\n }\n }\n\n _updateInterval() {\n const element = this._activeElement || this._element.querySelector(SELECTOR_ACTIVE_ITEM)\n\n if (!element) {\n return\n }\n\n const elementInterval = parseInt(element.getAttribute('data-interval'), 10)\n\n if (elementInterval) {\n this._config.defaultInterval = this._config.defaultInterval || this._config.interval\n this._config.interval = elementInterval\n } else {\n this._config.interval = this._config.defaultInterval || this._config.interval\n }\n }\n\n _slide(direction, element) {\n const activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM)\n const activeElementIndex = this._getItemIndex(activeElement)\n const nextElement = element || activeElement &&\n this._getItemByDirection(direction, activeElement)\n const nextElementIndex = this._getItemIndex(nextElement)\n const isCycling = Boolean(this._interval)\n\n let directionalClassName\n let orderClassName\n let eventDirectionName\n\n if (direction === DIRECTION_NEXT) {\n directionalClassName = CLASS_NAME_LEFT\n orderClassName = CLASS_NAME_NEXT\n eventDirectionName = DIRECTION_LEFT\n } else {\n directionalClassName = CLASS_NAME_RIGHT\n orderClassName = CLASS_NAME_PREV\n eventDirectionName = DIRECTION_RIGHT\n }\n\n if (nextElement && $(nextElement).hasClass(CLASS_NAME_ACTIVE)) {\n this._isSliding = false\n return\n }\n\n const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName)\n if (slideEvent.isDefaultPrevented()) {\n return\n }\n\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n return\n }\n\n this._isSliding = true\n\n if (isCycling) {\n this.pause()\n }\n\n this._setActiveIndicatorElement(nextElement)\n this._activeElement = nextElement\n\n const slidEvent = $.Event(EVENT_SLID, {\n relatedTarget: nextElement,\n direction: eventDirectionName,\n from: activeElementIndex,\n to: nextElementIndex\n })\n\n if ($(this._element).hasClass(CLASS_NAME_SLIDE)) {\n $(nextElement).addClass(orderClassName)\n\n Util.reflow(nextElement)\n\n $(activeElement).addClass(directionalClassName)\n $(nextElement).addClass(directionalClassName)\n\n const transitionDuration = Util.getTransitionDurationFromElement(activeElement)\n\n $(activeElement)\n .one(Util.TRANSITION_END, () => {\n $(nextElement)\n .removeClass(`${directionalClassName} ${orderClassName}`)\n .addClass(CLASS_NAME_ACTIVE)\n\n $(activeElement).removeClass(`${CLASS_NAME_ACTIVE} ${orderClassName} ${directionalClassName}`)\n\n this._isSliding = false\n\n setTimeout(() => $(this._element).trigger(slidEvent), 0)\n })\n .emulateTransitionEnd(transitionDuration)\n } else {\n $(activeElement).removeClass(CLASS_NAME_ACTIVE)\n $(nextElement).addClass(CLASS_NAME_ACTIVE)\n\n this._isSliding = false\n $(this._element).trigger(slidEvent)\n }\n\n if (isCycling) {\n this.cycle()\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n let _config = {\n ...Default,\n ...$(this).data()\n }\n\n if (typeof config === 'object') {\n _config = {\n ..._config,\n ...config\n }\n }\n\n const action = typeof config === 'string' ? config : _config.slide\n\n if (!data) {\n data = new Carousel(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'number') {\n data.to(config)\n } else if (typeof action === 'string') {\n if (typeof data[action] === 'undefined') {\n throw new TypeError(`No method named \"${action}\"`)\n }\n\n data[action]()\n } else if (_config.interval && _config.ride) {\n data.pause()\n data.cycle()\n }\n })\n }\n\n static _dataApiClickHandler(event) {\n const selector = Util.getSelectorFromElement(this)\n\n if (!selector) {\n return\n }\n\n const target = $(selector)[0]\n\n if (!target || !$(target).hasClass(CLASS_NAME_CAROUSEL)) {\n return\n }\n\n const config = {\n ...$(target).data(),\n ...$(this).data()\n }\n const slideIndex = this.getAttribute('data-slide-to')\n\n if (slideIndex) {\n config.interval = false\n }\n\n Carousel._jQueryInterface.call($(target), config)\n\n if (slideIndex) {\n $(target).data(DATA_KEY).to(slideIndex)\n }\n\n event.preventDefault()\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, Carousel._dataApiClickHandler)\n\n$(window).on(EVENT_LOAD_DATA_API, () => {\n const carousels = [].slice.call(document.querySelectorAll(SELECTOR_DATA_RIDE))\n for (let i = 0, len = carousels.length; i < len; i++) {\n const $carousel = $(carousels[i])\n Carousel._jQueryInterface.call($carousel, $carousel.data())\n }\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Carousel._jQueryInterface\n$.fn[NAME].Constructor = Carousel\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Carousel._jQueryInterface\n}\n\nexport default Carousel\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'collapse'\nconst VERSION = '4.6.0'\nconst DATA_KEY = 'bs.collapse'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst Default = {\n toggle: true,\n parent: ''\n}\n\nconst DefaultType = {\n toggle: 'boolean',\n parent: '(string|element)'\n}\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_COLLAPSE = 'collapse'\nconst CLASS_NAME_COLLAPSING = 'collapsing'\nconst CLASS_NAME_COLLAPSED = 'collapsed'\n\nconst DIMENSION_WIDTH = 'width'\nconst DIMENSION_HEIGHT = 'height'\n\nconst SELECTOR_ACTIVES = '.show, .collapsing'\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"collapse\"]'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Collapse {\n constructor(element, config) {\n this._isTransitioning = false\n this._element = element\n this._config = this._getConfig(config)\n this._triggerArray = [].slice.call(document.querySelectorAll(\n `[data-toggle=\"collapse\"][href=\"#${element.id}\"],` +\n `[data-toggle=\"collapse\"][data-target=\"#${element.id}\"]`\n ))\n\n const toggleList = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE))\n for (let i = 0, len = toggleList.length; i < len; i++) {\n const elem = toggleList[i]\n const selector = Util.getSelectorFromElement(elem)\n const filterElement = [].slice.call(document.querySelectorAll(selector))\n .filter(foundElem => foundElem === element)\n\n if (selector !== null && filterElement.length > 0) {\n this._selector = selector\n this._triggerArray.push(elem)\n }\n }\n\n this._parent = this._config.parent ? this._getParent() : null\n\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._element, this._triggerArray)\n }\n\n if (this._config.toggle) {\n this.toggle()\n }\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n toggle() {\n if ($(this._element).hasClass(CLASS_NAME_SHOW)) {\n this.hide()\n } else {\n this.show()\n }\n }\n\n show() {\n if (this._isTransitioning ||\n $(this._element).hasClass(CLASS_NAME_SHOW)) {\n return\n }\n\n let actives\n let activesData\n\n if (this._parent) {\n actives = [].slice.call(this._parent.querySelectorAll(SELECTOR_ACTIVES))\n .filter(elem => {\n if (typeof this._config.parent === 'string') {\n return elem.getAttribute('data-parent') === this._config.parent\n }\n\n return elem.classList.contains(CLASS_NAME_COLLAPSE)\n })\n\n if (actives.length === 0) {\n actives = null\n }\n }\n\n if (actives) {\n activesData = $(actives).not(this._selector).data(DATA_KEY)\n if (activesData && activesData._isTransitioning) {\n return\n }\n }\n\n const startEvent = $.Event(EVENT_SHOW)\n $(this._element).trigger(startEvent)\n if (startEvent.isDefaultPrevented()) {\n return\n }\n\n if (actives) {\n Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide')\n if (!activesData) {\n $(actives).data(DATA_KEY, null)\n }\n }\n\n const dimension = this._getDimension()\n\n $(this._element)\n .removeClass(CLASS_NAME_COLLAPSE)\n .addClass(CLASS_NAME_COLLAPSING)\n\n this._element.style[dimension] = 0\n\n if (this._triggerArray.length) {\n $(this._triggerArray)\n .removeClass(CLASS_NAME_COLLAPSED)\n .attr('aria-expanded', true)\n }\n\n this.setTransitioning(true)\n\n const complete = () => {\n $(this._element)\n .removeClass(CLASS_NAME_COLLAPSING)\n .addClass(`${CLASS_NAME_COLLAPSE} ${CLASS_NAME_SHOW}`)\n\n this._element.style[dimension] = ''\n\n this.setTransitioning(false)\n\n $(this._element).trigger(EVENT_SHOWN)\n }\n\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1)\n const scrollSize = `scroll${capitalizedDimension}`\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n\n this._element.style[dimension] = `${this._element[scrollSize]}px`\n }\n\n hide() {\n if (this._isTransitioning ||\n !$(this._element).hasClass(CLASS_NAME_SHOW)) {\n return\n }\n\n const startEvent = $.Event(EVENT_HIDE)\n $(this._element).trigger(startEvent)\n if (startEvent.isDefaultPrevented()) {\n return\n }\n\n const dimension = this._getDimension()\n\n this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`\n\n Util.reflow(this._element)\n\n $(this._element)\n .addClass(CLASS_NAME_COLLAPSING)\n .removeClass(`${CLASS_NAME_COLLAPSE} ${CLASS_NAME_SHOW}`)\n\n const triggerArrayLength = this._triggerArray.length\n if (triggerArrayLength > 0) {\n for (let i = 0; i < triggerArrayLength; i++) {\n const trigger = this._triggerArray[i]\n const selector = Util.getSelectorFromElement(trigger)\n\n if (selector !== null) {\n const $elem = $([].slice.call(document.querySelectorAll(selector)))\n if (!$elem.hasClass(CLASS_NAME_SHOW)) {\n $(trigger).addClass(CLASS_NAME_COLLAPSED)\n .attr('aria-expanded', false)\n }\n }\n }\n }\n\n this.setTransitioning(true)\n\n const complete = () => {\n this.setTransitioning(false)\n $(this._element)\n .removeClass(CLASS_NAME_COLLAPSING)\n .addClass(CLASS_NAME_COLLAPSE)\n .trigger(EVENT_HIDDEN)\n }\n\n this._element.style[dimension] = ''\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n }\n\n setTransitioning(isTransitioning) {\n this._isTransitioning = isTransitioning\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n\n this._config = null\n this._parent = null\n this._element = null\n this._triggerArray = null\n this._isTransitioning = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n config.toggle = Boolean(config.toggle) // Coerce string values\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _getDimension() {\n const hasWidth = $(this._element).hasClass(DIMENSION_WIDTH)\n return hasWidth ? DIMENSION_WIDTH : DIMENSION_HEIGHT\n }\n\n _getParent() {\n let parent\n\n if (Util.isElement(this._config.parent)) {\n parent = this._config.parent\n\n // It's a jQuery object\n if (typeof this._config.parent.jquery !== 'undefined') {\n parent = this._config.parent[0]\n }\n } else {\n parent = document.querySelector(this._config.parent)\n }\n\n const selector = `[data-toggle=\"collapse\"][data-parent=\"${this._config.parent}\"]`\n const children = [].slice.call(parent.querySelectorAll(selector))\n\n $(children).each((i, element) => {\n this._addAriaAndCollapsedClass(\n Collapse._getTargetFromElement(element),\n [element]\n )\n })\n\n return parent\n }\n\n _addAriaAndCollapsedClass(element, triggerArray) {\n const isOpen = $(element).hasClass(CLASS_NAME_SHOW)\n\n if (triggerArray.length) {\n $(triggerArray)\n .toggleClass(CLASS_NAME_COLLAPSED, !isOpen)\n .attr('aria-expanded', isOpen)\n }\n }\n\n // Static\n\n static _getTargetFromElement(element) {\n const selector = Util.getSelectorFromElement(element)\n return selector ? document.querySelector(selector) : null\n }\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n const _config = {\n ...Default,\n ...$element.data(),\n ...(typeof config === 'object' && config ? config : {})\n }\n\n if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {\n _config.toggle = false\n }\n\n if (!data) {\n data = new Collapse(this, _config)\n $element.data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n // preventDefault only for elements (which change the URL) not inside the collapsible element\n if (event.currentTarget.tagName === 'A') {\n event.preventDefault()\n }\n\n const $trigger = $(this)\n const selector = Util.getSelectorFromElement(this)\n const selectors = [].slice.call(document.querySelectorAll(selector))\n\n $(selectors).each(function () {\n const $target = $(this)\n const data = $target.data(DATA_KEY)\n const config = data ? 'toggle' : $trigger.data()\n Collapse._jQueryInterface.call($target, config)\n })\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Collapse._jQueryInterface\n$.fn[NAME].Constructor = Collapse\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Collapse._jQueryInterface\n}\n\nexport default Collapse\n","/**!\n * @fileOverview Kickass library to create and place poppers near their reference elements.\n * @version 1.16.1\n * @license\n * Copyright (c) 2016 Federico Zivolo and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && typeof navigator !== 'undefined';\n\nvar timeoutDuration = function () {\n var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\n for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n return 1;\n }\n }\n return 0;\n}();\n\nfunction microtaskDebounce(fn) {\n var called = false;\n return function () {\n if (called) {\n return;\n }\n called = true;\n window.Promise.resolve().then(function () {\n called = false;\n fn();\n });\n };\n}\n\nfunction taskDebounce(fn) {\n var scheduled = false;\n return function () {\n if (!scheduled) {\n scheduled = true;\n setTimeout(function () {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\nvar supportsMicroTasks = isBrowser && window.Promise;\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nvar debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;\n\n/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nfunction isFunction(functionToCheck) {\n var getType = {};\n return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n}\n\n/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nfunction getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n var window = element.ownerDocument.defaultView;\n var css = window.getComputedStyle(element, null);\n return property ? css[property] : css;\n}\n\n/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nfunction getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n return element.parentNode || element.host;\n}\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nfunction getScrollParent(element) {\n // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n if (!element) {\n return document.body;\n }\n\n switch (element.nodeName) {\n case 'HTML':\n case 'BODY':\n return element.ownerDocument.body;\n case '#document':\n return element.body;\n }\n\n // Firefox want us to check `-x` and `-y` variations as well\n\n var _getStyleComputedProp = getStyleComputedProperty(element),\n overflow = _getStyleComputedProp.overflow,\n overflowX = _getStyleComputedProp.overflowX,\n overflowY = _getStyleComputedProp.overflowY;\n\n if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\n\n return getScrollParent(getParentNode(element));\n}\n\n/**\n * Returns the reference node of the reference object, or the reference object itself.\n * @method\n * @memberof Popper.Utils\n * @param {Element|Object} reference - the reference element (the popper will be relative to this)\n * @returns {Element} parent\n */\nfunction getReferenceNode(reference) {\n return reference && reference.referenceNode ? reference.referenceNode : reference;\n}\n\nvar isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);\nvar isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);\n\n/**\n * Determines if the browser is Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @param {Number} version to check\n * @returns {Boolean} isIE\n */\nfunction isIE(version) {\n if (version === 11) {\n return isIE11;\n }\n if (version === 10) {\n return isIE10;\n }\n return isIE11 || isIE10;\n}\n\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nfunction getOffsetParent(element) {\n if (!element) {\n return document.documentElement;\n }\n\n var noOffsetParent = isIE(10) ? document.body : null;\n\n // NOTE: 1 DOM access here\n var offsetParent = element.offsetParent || null;\n // Skip hidden elements which don't have an offsetParent\n while (offsetParent === noOffsetParent && element.nextElementSibling) {\n offsetParent = (element = element.nextElementSibling).offsetParent;\n }\n\n var nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return element ? element.ownerDocument.documentElement : document.documentElement;\n }\n\n // .offsetParent will return the closest TH, TD or TABLE in case\n // no offsetParent is present, I hate this job...\n if (['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') {\n return getOffsetParent(offsetParent);\n }\n\n return offsetParent;\n}\n\nfunction isOffsetContainer(element) {\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY') {\n return false;\n }\n return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element;\n}\n\n/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nfunction getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nfunction findCommonOffsetParent(element1, element2) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n return document.documentElement;\n }\n\n // Here we make sure to give as \"start\" the element that comes first in the DOM\n var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;\n var start = order ? element1 : element2;\n var end = order ? element2 : element1;\n\n // Get common ancestor container\n var range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n var commonAncestorContainer = range.commonAncestorContainer;\n\n // Both nodes are inside #document\n\n if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n\n return getOffsetParent(commonAncestorContainer);\n }\n\n // one of the nodes is inside shadowDOM, find which one\n var element1root = getRoot(element1);\n if (element1root.host) {\n return findCommonOffsetParent(element1root.host, element2);\n } else {\n return findCommonOffsetParent(element1, getRoot(element2).host);\n }\n}\n\n/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nfunction getScroll(element) {\n var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';\n\n var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n var html = element.ownerDocument.documentElement;\n var scrollingElement = element.ownerDocument.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n\n return element[upperSide];\n}\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nfunction includeScroll(rect, element) {\n var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n var modifier = subtract ? -1 : 1;\n rect.top += scrollTop * modifier;\n rect.bottom += scrollTop * modifier;\n rect.left += scrollLeft * modifier;\n rect.right += scrollLeft * modifier;\n return rect;\n}\n\n/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nfunction getBordersSize(styles, axis) {\n var sideA = axis === 'x' ? 'Left' : 'Top';\n var sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n return parseFloat(styles['border' + sideA + 'Width']) + parseFloat(styles['border' + sideB + 'Width']);\n}\n\nfunction getSize(axis, body, html, computedStyle) {\n return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? parseInt(html['offset' + axis]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')]) : 0);\n}\n\nfunction getWindowSizes(document) {\n var body = document.body;\n var html = document.documentElement;\n var computedStyle = isIE(10) && getComputedStyle(html);\n\n return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle)\n };\n}\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\n\n\n\n\nvar defineProperty = function (obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n};\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\n/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nfunction getClientRect(offsets) {\n return _extends({}, offsets, {\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height\n });\n}\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nfunction getBoundingClientRect(element) {\n var rect = {};\n\n // IE10 10 FIX: Please, don't ask, the element isn't\n // considered in DOM in some circumstances...\n // This isn't reproducible in IE10 compatibility mode of IE11\n try {\n if (isIE(10)) {\n rect = element.getBoundingClientRect();\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.left += scrollLeft;\n rect.bottom += scrollTop;\n rect.right += scrollLeft;\n } else {\n rect = element.getBoundingClientRect();\n }\n } catch (e) {}\n\n var result = {\n left: rect.left,\n top: rect.top,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top\n };\n\n // subtract scrollbar size from sizes\n var sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {};\n var width = sizes.width || element.clientWidth || result.width;\n var height = sizes.height || element.clientHeight || result.height;\n\n var horizScrollbar = element.offsetWidth - width;\n var vertScrollbar = element.offsetHeight - height;\n\n // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n // we make this check conditional for performance reasons\n if (horizScrollbar || vertScrollbar) {\n var styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n\n return getClientRect(result);\n}\n\nfunction getOffsetRectRelativeToArbitraryNode(children, parent) {\n var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var isIE10 = isIE(10);\n var isHTML = parent.nodeName === 'HTML';\n var childrenRect = getBoundingClientRect(children);\n var parentRect = getBoundingClientRect(parent);\n var scrollParent = getScrollParent(children);\n\n var styles = getStyleComputedProperty(parent);\n var borderTopWidth = parseFloat(styles.borderTopWidth);\n var borderLeftWidth = parseFloat(styles.borderLeftWidth);\n\n // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n if (fixedPosition && isHTML) {\n parentRect.top = Math.max(parentRect.top, 0);\n parentRect.left = Math.max(parentRect.left, 0);\n }\n var offsets = getClientRect({\n top: childrenRect.top - parentRect.top - borderTopWidth,\n left: childrenRect.left - parentRect.left - borderLeftWidth,\n width: childrenRect.width,\n height: childrenRect.height\n });\n offsets.marginTop = 0;\n offsets.marginLeft = 0;\n\n // Subtract margins of documentElement in case it's being used as parent\n // we do this only on HTML because it's the only element that behaves\n // differently when margins are applied to it. The margins are included in\n // the box of the documentElement, in the other cases not.\n if (!isIE10 && isHTML) {\n var marginTop = parseFloat(styles.marginTop);\n var marginLeft = parseFloat(styles.marginLeft);\n\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft;\n\n // Attach marginTop and marginLeft because in some circumstances we may need them\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n\n if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n\nfunction getViewportOffsetRectRelativeToArtbitraryNode(element) {\n var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var html = element.ownerDocument.documentElement;\n var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n var width = Math.max(html.clientWidth, window.innerWidth || 0);\n var height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n var scrollTop = !excludeScroll ? getScroll(html) : 0;\n var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n var offset = {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n width: width,\n height: height\n };\n\n return getClientRect(offset);\n}\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nfunction isFixed(element) {\n var nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n var parentNode = getParentNode(element);\n if (!parentNode) {\n return false;\n }\n return isFixed(parentNode);\n}\n\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nfunction getFixedPositionOffsetParent(element) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element || !element.parentElement || isIE()) {\n return document.documentElement;\n }\n var el = element.parentElement;\n while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n el = el.parentElement;\n }\n return el || document.documentElement;\n}\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nfunction getBoundaries(popper, reference, padding, boundariesElement) {\n var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n // NOTE: 1 DOM access here\n\n var boundaries = { top: 0, left: 0 };\n var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n\n // Handle viewport case\n if (boundariesElement === 'viewport') {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n } else {\n // Handle other cases based on DOM element used as boundaries\n var boundariesNode = void 0;\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(reference));\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = popper.ownerDocument.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = popper.ownerDocument.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\n\n var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);\n\n // In case of HTML, we need a different computation\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n var _getWindowSizes = getWindowSizes(popper.ownerDocument),\n height = _getWindowSizes.height,\n width = _getWindowSizes.width;\n\n boundaries.top += offsets.top - offsets.marginTop;\n boundaries.bottom = height + offsets.top;\n boundaries.left += offsets.left - offsets.marginLeft;\n boundaries.right = width + offsets.left;\n } else {\n // for all the other DOM elements, this one is good\n boundaries = offsets;\n }\n }\n\n // Add paddings\n padding = padding || 0;\n var isPaddingNumber = typeof padding === 'number';\n boundaries.left += isPaddingNumber ? padding : padding.left || 0;\n boundaries.top += isPaddingNumber ? padding : padding.top || 0;\n boundaries.right -= isPaddingNumber ? padding : padding.right || 0;\n boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0;\n\n return boundaries;\n}\n\nfunction getArea(_ref) {\n var width = _ref.width,\n height = _ref.height;\n\n return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) {\n var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;\n\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n var boundaries = getBoundaries(popper, reference, padding, boundariesElement);\n\n var rects = {\n top: {\n width: boundaries.width,\n height: refRect.top - boundaries.top\n },\n right: {\n width: boundaries.right - refRect.right,\n height: boundaries.height\n },\n bottom: {\n width: boundaries.width,\n height: boundaries.bottom - refRect.bottom\n },\n left: {\n width: refRect.left - boundaries.left,\n height: boundaries.height\n }\n };\n\n var sortedAreas = Object.keys(rects).map(function (key) {\n return _extends({\n key: key\n }, rects[key], {\n area: getArea(rects[key])\n });\n }).sort(function (a, b) {\n return b.area - a.area;\n });\n\n var filteredAreas = sortedAreas.filter(function (_ref2) {\n var width = _ref2.width,\n height = _ref2.height;\n return width >= popper.clientWidth && height >= popper.clientHeight;\n });\n\n var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;\n\n var variation = placement.split('-')[1];\n\n return computedPlacement + (variation ? '-' + variation : '');\n}\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nfunction getReferenceOffsets(state, popper, reference) {\n var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n\n/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nfunction getOuterSizes(element) {\n var window = element.ownerDocument.defaultView;\n var styles = window.getComputedStyle(element);\n var x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0);\n var y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0);\n var result = {\n width: element.offsetWidth + y,\n height: element.offsetHeight + x\n };\n return result;\n}\n\n/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nfunction getOppositePlacement(placement) {\n var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nfunction getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0];\n\n // Get popper node sizes\n var popperRect = getOuterSizes(popper);\n\n // Add position, width and height to our offsets object\n var popperOffsets = {\n width: popperRect.width,\n height: popperRect.height\n };\n\n // depending by the popper placement we have to compute its offsets slightly differently\n var isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n var mainSide = isHoriz ? 'top' : 'left';\n var secondarySide = isHoriz ? 'left' : 'top';\n var measurement = isHoriz ? 'height' : 'width';\n var secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)];\n }\n\n return popperOffsets;\n}\n\n/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n\n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n}\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(function (cur) {\n return cur[prop] === value;\n });\n }\n\n // use `find` + `indexOf` if `findIndex` isn't supported\n var match = find(arr, function (obj) {\n return obj[prop] === value;\n });\n return arr.indexOf(match);\n}\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nfunction runModifiers(modifiers, data, ends) {\n var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(function (modifier) {\n if (modifier['function']) {\n // eslint-disable-line dot-notation\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n if (modifier.enabled && isFunction(fn)) {\n // Add properties to offsets to make them a complete clientRect object\n // we do this before each modifier to make sure the previous one doesn't\n // mess with these values\n data.offsets.popper = getClientRect(data.offsets.popper);\n data.offsets.reference = getClientRect(data.offsets.reference);\n\n data = fn(data, modifier);\n }\n });\n\n return data;\n}\n\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style.
\n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\nfunction update() {\n // if popper is destroyed, don't perform any further update\n if (this.state.isDestroyed) {\n return;\n }\n\n var data = {\n instance: this,\n styles: {},\n arrowStyles: {},\n attributes: {},\n flipped: false,\n offsets: {}\n };\n\n // compute reference element offsets\n data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding);\n\n // store the computed placement inside `originalPlacement`\n data.originalPlacement = data.placement;\n\n data.positionFixed = this.options.positionFixed;\n\n // compute the popper offsets\n data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);\n\n data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';\n\n // run the modifiers\n data = runModifiers(this.modifiers, data);\n\n // the first `update` will call `onCreate` callback\n // the other ones will call `onUpdate` callback\n if (!this.state.isCreated) {\n this.state.isCreated = true;\n this.options.onCreate(data);\n } else {\n this.options.onUpdate(data);\n }\n}\n\n/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nfunction isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(function (_ref) {\n var name = _ref.name,\n enabled = _ref.enabled;\n return enabled && name === modifierName;\n });\n}\n\n/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nfunction getSupportedPropertyName(property) {\n var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n var upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (var i = 0; i < prefixes.length; i++) {\n var prefix = prefixes[i];\n var toCheck = prefix ? '' + prefix + upperProp : property;\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n\n/**\n * Destroys the popper.\n * @method\n * @memberof Popper\n */\nfunction destroy() {\n this.state.isDestroyed = true;\n\n // touch DOM only if `applyStyle` modifier is enabled\n if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n this.popper.removeAttribute('x-placement');\n this.popper.style.position = '';\n this.popper.style.top = '';\n this.popper.style.left = '';\n this.popper.style.right = '';\n this.popper.style.bottom = '';\n this.popper.style.willChange = '';\n this.popper.style[getSupportedPropertyName('transform')] = '';\n }\n\n this.disableEventListeners();\n\n // remove the popper if user explicitly asked for the deletion on destroy\n // do not use `remove` because IE11 doesn't support it\n if (this.options.removeOnDestroy) {\n this.popper.parentNode.removeChild(this.popper);\n }\n return this;\n}\n\n/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nfunction getWindow(element) {\n var ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n}\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n var isBody = scrollParent.nodeName === 'BODY';\n var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n\n if (!isBody) {\n attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);\n }\n scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction setupEventListeners(reference, options, state, updateBound) {\n // Resize event listener on window\n state.updateBound = updateBound;\n getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n // Scroll event listener on scroll parents\n var scrollElement = getScrollParent(reference);\n attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n\n return state;\n}\n\n/**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\nfunction enableEventListeners() {\n if (!this.state.eventsEnabled) {\n this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate);\n }\n}\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction removeEventListeners(reference, state) {\n // Remove resize event listener on window\n getWindow(reference).removeEventListener('resize', state.updateBound);\n\n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(function (target) {\n target.removeEventListener('scroll', state.updateBound);\n });\n\n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger `onUpdate` callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\nfunction disableEventListeners() {\n if (this.state.eventsEnabled) {\n cancelAnimationFrame(this.scheduleUpdate);\n this.state = removeEventListeners(this.reference, this.state);\n }\n}\n\n/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nfunction isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setStyles(element, styles) {\n Object.keys(styles).forEach(function (prop) {\n var unit = '';\n // add unit if the value is numeric and is one of the following\n if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n}\n\n/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function (prop) {\n var value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\nfunction applyStyle(data) {\n // any property present in `data.styles` will be applied to the popper,\n // in this way we can make the 3rd party modifiers add custom styles to it\n // Be aware, modifiers could override the properties defined in the previous\n // lines of this modifier!\n setStyles(data.instance.popper, data.styles);\n\n // any property present in `data.attributes` will be applied to the popper,\n // they will be set as HTML attributes of the element\n setAttributes(data.instance.popper, data.attributes);\n\n // if arrowElement is defined and arrowStyles has some properties\n if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n setStyles(data.arrowElement, data.arrowStyles);\n }\n\n return data;\n}\n\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper\n * @param {Object} options - Popper.js options\n */\nfunction applyStyleOnLoad(reference, popper, options, modifierOptions, state) {\n // compute reference element offsets\n var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding);\n\n popper.setAttribute('x-placement', placement);\n\n // Apply `position` to popper before anything else because\n // without the position applied we can't guarantee correct computations\n setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });\n\n return options;\n}\n\n/**\n * @function\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Boolean} shouldRound - If the offsets should be rounded at all\n * @returns {Object} The popper's position offsets rounded\n *\n * The tale of pixel-perfect positioning. It's still not 100% perfect, but as\n * good as it can be within reason.\n * Discussion here: https://github.com/FezVrasta/popper.js/pull/715\n *\n * Low DPI screens cause a popper to be blurry if not using full pixels (Safari\n * as well on High DPI screens).\n *\n * Firefox prefers no rounding for positioning and does not have blurriness on\n * high DPI screens.\n *\n * Only horizontal placement and left/right values need to be considered.\n */\nfunction getRoundedOffsets(data, shouldRound) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n var round = Math.round,\n floor = Math.floor;\n\n var noRound = function noRound(v) {\n return v;\n };\n\n var referenceWidth = round(reference.width);\n var popperWidth = round(popper.width);\n\n var isVertical = ['left', 'right'].indexOf(data.placement) !== -1;\n var isVariation = data.placement.indexOf('-') !== -1;\n var sameWidthParity = referenceWidth % 2 === popperWidth % 2;\n var bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1;\n\n var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthParity ? round : floor;\n var verticalToInteger = !shouldRound ? noRound : round;\n\n return {\n left: horizontalToInteger(bothOddWidth && !isVariation && shouldRound ? popper.left - 1 : popper.left),\n top: verticalToInteger(popper.top),\n bottom: verticalToInteger(popper.bottom),\n right: horizontalToInteger(popper.right)\n };\n}\n\nvar isFirefox = isBrowser && /Firefox/i.test(navigator.userAgent);\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeStyle(data, options) {\n var x = options.x,\n y = options.y;\n var popper = data.offsets.popper;\n\n // Remove this legacy support in Popper.js v2\n\n var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'applyStyle';\n }).gpuAcceleration;\n if (legacyGpuAccelerationOption !== undefined) {\n console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');\n }\n var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration;\n\n var offsetParent = getOffsetParent(data.instance.popper);\n var offsetParentRect = getBoundingClientRect(offsetParent);\n\n // Styles\n var styles = {\n position: popper.position\n };\n\n var offsets = getRoundedOffsets(data, window.devicePixelRatio < 2 || !isFirefox);\n\n var sideA = x === 'bottom' ? 'top' : 'bottom';\n var sideB = y === 'right' ? 'left' : 'right';\n\n // if gpuAcceleration is set to `true` and transform is supported,\n // we use `translate3d` to apply the position to the popper we\n // automatically use the supported prefixed version if needed\n var prefixedProperty = getSupportedPropertyName('transform');\n\n // now, let's make a step back and look at this code closely (wtf?)\n // If the content of the popper grows once it's been positioned, it\n // may happen that the popper gets misplaced because of the new content\n // overflowing its reference element\n // To avoid this problem, we provide two options (x and y), which allow\n // the consumer to define the offset origin.\n // If we position a popper on top of a reference element, we can set\n // `x` to `top` to make the popper grow towards its top instead of\n // its bottom.\n var left = void 0,\n top = void 0;\n if (sideA === 'bottom') {\n // when offsetParent is the positioning is relative to the bottom of the screen (excluding the scrollbar)\n // and not the bottom of the html element\n if (offsetParent.nodeName === 'HTML') {\n top = -offsetParent.clientHeight + offsets.bottom;\n } else {\n top = -offsetParentRect.height + offsets.bottom;\n }\n } else {\n top = offsets.top;\n }\n if (sideB === 'right') {\n if (offsetParent.nodeName === 'HTML') {\n left = -offsetParent.clientWidth + offsets.right;\n } else {\n left = -offsetParentRect.width + offsets.right;\n }\n } else {\n left = offsets.left;\n }\n if (gpuAcceleration && prefixedProperty) {\n styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';\n styles[sideA] = 0;\n styles[sideB] = 0;\n styles.willChange = 'transform';\n } else {\n // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n var invertTop = sideA === 'bottom' ? -1 : 1;\n var invertLeft = sideB === 'right' ? -1 : 1;\n styles[sideA] = top * invertTop;\n styles[sideB] = left * invertLeft;\n styles.willChange = sideA + ', ' + sideB;\n }\n\n // Attributes\n var attributes = {\n 'x-placement': data.placement\n };\n\n // Update `data` attributes, styles and arrowStyles\n data.attributes = _extends({}, attributes, data.attributes);\n data.styles = _extends({}, styles, data.styles);\n data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles);\n\n return data;\n}\n\n/**\n * Helper used to know if the given modifier depends from another one.
\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nfunction isModifierRequired(modifiers, requestingName, requestedName) {\n var requesting = find(modifiers, function (_ref) {\n var name = _ref.name;\n return name === requestingName;\n });\n\n var isRequired = !!requesting && modifiers.some(function (modifier) {\n return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;\n });\n\n if (!isRequired) {\n var _requesting = '`' + requestingName + '`';\n var requested = '`' + requestedName + '`';\n console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!');\n }\n return isRequired;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction arrow(data, options) {\n var _data$offsets$arrow;\n\n // arrow depends on keepTogether in order to work\n if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n return data;\n }\n\n var arrowElement = options.element;\n\n // if arrowElement is a string, suppose it's a CSS selector\n if (typeof arrowElement === 'string') {\n arrowElement = data.instance.popper.querySelector(arrowElement);\n\n // if arrowElement is not found, don't run the modifier\n if (!arrowElement) {\n return data;\n }\n } else {\n // if the arrowElement isn't a query selector we must check that the\n // provided DOM node is child of its popper node\n if (!data.instance.popper.contains(arrowElement)) {\n console.warn('WARNING: `arrow.element` must be child of its popper element!');\n return data;\n }\n }\n\n var placement = data.placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n var len = isVertical ? 'height' : 'width';\n var sideCapitalized = isVertical ? 'Top' : 'Left';\n var side = sideCapitalized.toLowerCase();\n var altSide = isVertical ? 'left' : 'top';\n var opSide = isVertical ? 'bottom' : 'right';\n var arrowElementSize = getOuterSizes(arrowElement)[len];\n\n //\n // extends keepTogether behavior making sure the popper and its\n // reference have enough pixels in conjunction\n //\n\n // top/left side\n if (reference[opSide] - arrowElementSize < popper[side]) {\n data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);\n }\n // bottom/right side\n if (reference[side] + arrowElementSize > popper[opSide]) {\n data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];\n }\n data.offsets.popper = getClientRect(data.offsets.popper);\n\n // compute center of the popper\n var center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n // Compute the sideValue using the updated popper offsets\n // take popper margin in account because we don't have this info available\n var css = getStyleComputedProperty(data.instance.popper);\n var popperMarginSide = parseFloat(css['margin' + sideCapitalized]);\n var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width']);\n var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n\n // prevent arrowElement from being placed not contiguously to its popper\n sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n data.arrowElement = arrowElement;\n data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow);\n\n return data;\n}\n\n/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\nfunction getOppositeVariation(variation) {\n if (variation === 'end') {\n return 'start';\n } else if (variation === 'start') {\n return 'end';\n }\n return variation;\n}\n\n/**\n * List of accepted placements to use as values of the `placement` option.
\n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right.
\n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-end` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */\nvar placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'];\n\n// Get rid of `auto` `auto-start` and `auto-end`\nvar validPlacements = placements.slice(3);\n\n/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\nfunction clockwise(placement) {\n var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var index = validPlacements.indexOf(placement);\n var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index));\n return counter ? arr.reverse() : arr;\n}\n\nvar BEHAVIORS = {\n FLIP: 'flip',\n CLOCKWISE: 'clockwise',\n COUNTERCLOCKWISE: 'counterclockwise'\n};\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction flip(data, options) {\n // if `inner` modifier is enabled, we can't use the `flip` modifier\n if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n return data;\n }\n\n if (data.flipped && data.placement === data.originalPlacement) {\n // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n return data;\n }\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed);\n\n var placement = data.placement.split('-')[0];\n var placementOpposite = getOppositePlacement(placement);\n var variation = data.placement.split('-')[1] || '';\n\n var flipOrder = [];\n\n switch (options.behavior) {\n case BEHAVIORS.FLIP:\n flipOrder = [placement, placementOpposite];\n break;\n case BEHAVIORS.CLOCKWISE:\n flipOrder = clockwise(placement);\n break;\n case BEHAVIORS.COUNTERCLOCKWISE:\n flipOrder = clockwise(placement, true);\n break;\n default:\n flipOrder = options.behavior;\n }\n\n flipOrder.forEach(function (step, index) {\n if (placement !== step || flipOrder.length === index + 1) {\n return data;\n }\n\n placement = data.placement.split('-')[0];\n placementOpposite = getOppositePlacement(placement);\n\n var popperOffsets = data.offsets.popper;\n var refOffsets = data.offsets.reference;\n\n // using floor because the reference offsets may contain decimals we are not going to consider here\n var floor = Math.floor;\n var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom);\n\n var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom;\n\n // flip the variation if required\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n\n // flips variation if reference element overflows boundaries\n var flippedVariationByRef = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom);\n\n // flips variation if popper content overflows boundaries\n var flippedVariationByContent = !!options.flipVariationsByContent && (isVertical && variation === 'start' && overflowsRight || isVertical && variation === 'end' && overflowsLeft || !isVertical && variation === 'start' && overflowsBottom || !isVertical && variation === 'end' && overflowsTop);\n\n var flippedVariation = flippedVariationByRef || flippedVariationByContent;\n\n if (overlapsRef || overflowsBoundaries || flippedVariation) {\n // this boolean to detect any flip loop\n data.flipped = true;\n\n if (overlapsRef || overflowsBoundaries) {\n placement = flipOrder[index + 1];\n }\n\n if (flippedVariation) {\n variation = getOppositeVariation(variation);\n }\n\n data.placement = placement + (variation ? '-' + variation : '');\n\n // this object contains `position`, we want to preserve it along with\n // any additional property we may add in the future\n data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));\n\n data = runModifiers(data.instance.modifiers, data, 'flip');\n }\n });\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction keepTogether(data) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var placement = data.placement.split('-')[0];\n var floor = Math.floor;\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n var side = isVertical ? 'right' : 'bottom';\n var opSide = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n if (popper[side] < floor(reference[opSide])) {\n data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement];\n }\n if (popper[opSide] > floor(reference[side])) {\n data.offsets.popper[opSide] = floor(reference[side]);\n }\n\n return data;\n}\n\n/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\nfunction toValue(str, measurement, popperOffsets, referenceOffsets) {\n // separate value from unit\n var split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n var value = +split[1];\n var unit = split[2];\n\n // If it's not a number it's an operator, I guess\n if (!value) {\n return str;\n }\n\n if (unit.indexOf('%') === 0) {\n var element = void 0;\n switch (unit) {\n case '%p':\n element = popperOffsets;\n break;\n case '%':\n case '%r':\n default:\n element = referenceOffsets;\n }\n\n var rect = getClientRect(element);\n return rect[measurement] / 100 * value;\n } else if (unit === 'vh' || unit === 'vw') {\n // if is a vh or vw, we calculate the size based on the viewport\n var size = void 0;\n if (unit === 'vh') {\n size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n } else {\n size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n }\n return size / 100 * value;\n } else {\n // if is an explicit pixel unit, we get rid of the unit and keep the value\n // if is an implicit unit, it's px, and we return just the value\n return value;\n }\n}\n\n/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\nfunction parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {\n var offsets = [0, 0];\n\n // Use height if placement is left or right and index is 0 otherwise use width\n // in this way the first offset will use an axis and the second one\n // will use the other one\n var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n // Split the offset string to obtain a list of values and operands\n // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n var fragments = offset.split(/(\\+|\\-)/).map(function (frag) {\n return frag.trim();\n });\n\n // Detect if the offset string contains a pair of values or a single one\n // they could be separated by comma or space\n var divider = fragments.indexOf(find(fragments, function (frag) {\n return frag.search(/,|\\s/) !== -1;\n }));\n\n if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');\n }\n\n // If divider is found, we divide the list of values and operands to divide\n // them by ofset X and Y.\n var splitRegex = /\\s*,\\s*|\\s+/;\n var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments];\n\n // Convert the values with units to absolute pixels to allow our computations\n ops = ops.map(function (op, index) {\n // Most of the units rely on the orientation of the popper\n var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width';\n var mergeWithPrevious = false;\n return op\n // This aggregates any `+` or `-` sign that aren't considered operators\n // e.g.: 10 + +5 => [10, +, +5]\n .reduce(function (a, b) {\n if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n a[a.length - 1] = b;\n mergeWithPrevious = true;\n return a;\n } else if (mergeWithPrevious) {\n a[a.length - 1] += b;\n mergeWithPrevious = false;\n return a;\n } else {\n return a.concat(b);\n }\n }, [])\n // Here we convert the string values into number values (in px)\n .map(function (str) {\n return toValue(str, measurement, popperOffsets, referenceOffsets);\n });\n });\n\n // Loop trough the offsets arrays and execute the operations\n ops.forEach(function (op, index) {\n op.forEach(function (frag, index2) {\n if (isNumeric(frag)) {\n offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n }\n });\n });\n return offsets;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\nfunction offset(data, _ref) {\n var offset = _ref.offset;\n var placement = data.placement,\n _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var basePlacement = placement.split('-')[0];\n\n var offsets = void 0;\n if (isNumeric(+offset)) {\n offsets = [+offset, 0];\n } else {\n offsets = parseOffset(offset, popper, reference, basePlacement);\n }\n\n if (basePlacement === 'left') {\n popper.top += offsets[0];\n popper.left -= offsets[1];\n } else if (basePlacement === 'right') {\n popper.top += offsets[0];\n popper.left += offsets[1];\n } else if (basePlacement === 'top') {\n popper.left += offsets[0];\n popper.top -= offsets[1];\n } else if (basePlacement === 'bottom') {\n popper.left += offsets[0];\n popper.top += offsets[1];\n }\n\n data.popper = popper;\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction preventOverflow(data, options) {\n var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper);\n\n // If offsetParent is the reference element, we really want to\n // go one step up and use the next offsetParent as reference to\n // avoid to make this modifier completely useless and look like broken\n if (data.instance.reference === boundariesElement) {\n boundariesElement = getOffsetParent(boundariesElement);\n }\n\n // NOTE: DOM access here\n // resets the popper's position so that the document size can be calculated excluding\n // the size of the popper element itself\n var transformProp = getSupportedPropertyName('transform');\n var popperStyles = data.instance.popper.style; // assignment to help minification\n var top = popperStyles.top,\n left = popperStyles.left,\n transform = popperStyles[transformProp];\n\n popperStyles.top = '';\n popperStyles.left = '';\n popperStyles[transformProp] = '';\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed);\n\n // NOTE: DOM access here\n // restores the original style properties after the offsets have been computed\n popperStyles.top = top;\n popperStyles.left = left;\n popperStyles[transformProp] = transform;\n\n options.boundaries = boundaries;\n\n var order = options.priority;\n var popper = data.offsets.popper;\n\n var check = {\n primary: function primary(placement) {\n var value = popper[placement];\n if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {\n value = Math.max(popper[placement], boundaries[placement]);\n }\n return defineProperty({}, placement, value);\n },\n secondary: function secondary(placement) {\n var mainSide = placement === 'right' ? 'left' : 'top';\n var value = popper[mainSide];\n if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {\n value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));\n }\n return defineProperty({}, mainSide, value);\n }\n };\n\n order.forEach(function (placement) {\n var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n popper = _extends({}, popper, check[side](placement));\n });\n\n data.offsets.popper = popper;\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction shift(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var shiftvariation = placement.split('-')[1];\n\n // if shift shiftvariation is specified, run the modifier\n if (shiftvariation) {\n var _data$offsets = data.offsets,\n reference = _data$offsets.reference,\n popper = _data$offsets.popper;\n\n var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n var side = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n var shiftOffsets = {\n start: defineProperty({}, side, reference[side]),\n end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])\n };\n\n data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction hide(data) {\n if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n return data;\n }\n\n var refRect = data.offsets.reference;\n var bound = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'preventOverflow';\n }).boundaries;\n\n if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === true) {\n return data;\n }\n\n data.hide = true;\n data.attributes['x-out-of-boundaries'] = '';\n } else {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === false) {\n return data;\n }\n\n data.hide = false;\n data.attributes['x-out-of-boundaries'] = false;\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction inner(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n data.placement = getOppositePlacement(placement);\n data.offsets.popper = getClientRect(popper);\n\n return data;\n}\n\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property.
\n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers.
\n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\nvar modifiers = {\n /**\n * Modifier used to shift the popper on the start or end of its reference\n * element.
\n * It will read the variation of the `placement` property.
\n * It can be one either `-end` or `-start`.\n * @memberof modifiers\n * @inner\n */\n shift: {\n /** @prop {number} order=100 - Index used to define the order of execution */\n order: 100,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: shift\n },\n\n /**\n * The `offset` modifier can shift your popper on both its axis.\n *\n * It accepts the following units:\n * - `px` or unit-less, interpreted as pixels\n * - `%` or `%r`, percentage relative to the length of the reference element\n * - `%p`, percentage relative to the length of the popper element\n * - `vw`, CSS viewport width unit\n * - `vh`, CSS viewport height unit\n *\n * For length is intended the main axis relative to the placement of the popper.
\n * This means that if the placement is `top` or `bottom`, the length will be the\n * `width`. In case of `left` or `right`, it will be the `height`.\n *\n * You can provide a single value (as `Number` or `String`), or a pair of values\n * as `String` divided by a comma or one (or more) white spaces.
\n * The latter is a deprecated method because it leads to confusion and will be\n * removed in v2.
\n * Additionally, it accepts additions and subtractions between different units.\n * Note that multiplications and divisions aren't supported.\n *\n * Valid examples are:\n * ```\n * 10\n * '10%'\n * '10, 10'\n * '10%, 10'\n * '10 + 10%'\n * '10 - 5vh + 3%'\n * '-10px + 5vh, 5px - 6%'\n * ```\n * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373).\n *\n * @memberof modifiers\n * @inner\n */\n offset: {\n /** @prop {number} order=200 - Index used to define the order of execution */\n order: 200,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: offset,\n /** @prop {Number|String} offset=0\n * The offset value as described in the modifier description\n */\n offset: 0\n },\n\n /**\n * Modifier used to prevent the popper from being positioned outside the boundary.\n *\n * A scenario exists where the reference itself is not within the boundaries.
\n * We can say it has \"escaped the boundaries\" — or just \"escaped\".
\n * In this case we need to decide whether the popper should either:\n *\n * - detach from the reference and remain \"trapped\" in the boundaries, or\n * - if it should ignore the boundary and \"escape with its reference\"\n *\n * When `escapeWithReference` is set to`true` and reference is completely\n * outside its boundaries, the popper will overflow (or completely leave)\n * the boundaries in order to remain attached to the edge of the reference.\n *\n * @memberof modifiers\n * @inner\n */\n preventOverflow: {\n /** @prop {number} order=300 - Index used to define the order of execution */\n order: 300,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: preventOverflow,\n /**\n * @prop {Array} [priority=['left','right','top','bottom']]\n * Popper will try to prevent overflow following these priorities by default,\n * then, it could overflow on the left and on top of the `boundariesElement`\n */\n priority: ['left', 'right', 'top', 'bottom'],\n /**\n * @prop {number} padding=5\n * Amount of pixel used to define a minimum distance between the boundaries\n * and the popper. This makes sure the popper always has a little padding\n * between the edges of its container\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='scrollParent'\n * Boundaries used by the modifier. Can be `scrollParent`, `window`,\n * `viewport` or any DOM element.\n */\n boundariesElement: 'scrollParent'\n },\n\n /**\n * Modifier used to make sure the reference and its popper stay near each other\n * without leaving any gap between the two. Especially useful when the arrow is\n * enabled and you want to ensure that it points to its reference element.\n * It cares only about the first axis. You can still have poppers with margin\n * between the popper and its reference element.\n * @memberof modifiers\n * @inner\n */\n keepTogether: {\n /** @prop {number} order=400 - Index used to define the order of execution */\n order: 400,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: keepTogether\n },\n\n /**\n * This modifier is used to move the `arrowElement` of the popper to make\n * sure it is positioned between the reference element and its popper element.\n * It will read the outer size of the `arrowElement` node to detect how many\n * pixels of conjunction are needed.\n *\n * It has no effect if no `arrowElement` is provided.\n * @memberof modifiers\n * @inner\n */\n arrow: {\n /** @prop {number} order=500 - Index used to define the order of execution */\n order: 500,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: arrow,\n /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n element: '[x-arrow]'\n },\n\n /**\n * Modifier used to flip the popper's placement when it starts to overlap its\n * reference element.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n *\n * **NOTE:** this modifier will interrupt the current update cycle and will\n * restart it if it detects the need to flip the placement.\n * @memberof modifiers\n * @inner\n */\n flip: {\n /** @prop {number} order=600 - Index used to define the order of execution */\n order: 600,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: flip,\n /**\n * @prop {String|Array} behavior='flip'\n * The behavior used to change the popper's placement. It can be one of\n * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n * placements (with optional variations)\n */\n behavior: 'flip',\n /**\n * @prop {number} padding=5\n * The popper will flip if it hits the edges of the `boundariesElement`\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='viewport'\n * The element which will define the boundaries of the popper position.\n * The popper will never be placed outside of the defined boundaries\n * (except if `keepTogether` is enabled)\n */\n boundariesElement: 'viewport',\n /**\n * @prop {Boolean} flipVariations=false\n * The popper will switch placement variation between `-start` and `-end` when\n * the reference element overlaps its boundaries.\n *\n * The original placement should have a set variation.\n */\n flipVariations: false,\n /**\n * @prop {Boolean} flipVariationsByContent=false\n * The popper will switch placement variation between `-start` and `-end` when\n * the popper element overlaps its reference boundaries.\n *\n * The original placement should have a set variation.\n */\n flipVariationsByContent: false\n },\n\n /**\n * Modifier used to make the popper flow toward the inner of the reference element.\n * By default, when this modifier is disabled, the popper will be placed outside\n * the reference element.\n * @memberof modifiers\n * @inner\n */\n inner: {\n /** @prop {number} order=700 - Index used to define the order of execution */\n order: 700,\n /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n enabled: false,\n /** @prop {ModifierFn} */\n fn: inner\n },\n\n /**\n * Modifier used to hide the popper when its reference element is outside of the\n * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n * be used to hide with a CSS selector the popper when its reference is\n * out of boundaries.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n * @memberof modifiers\n * @inner\n */\n hide: {\n /** @prop {number} order=800 - Index used to define the order of execution */\n order: 800,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: hide\n },\n\n /**\n * Computes the style that will be applied to the popper element to gets\n * properly positioned.\n *\n * Note that this modifier will not touch the DOM, it just prepares the styles\n * so that `applyStyle` modifier can apply it. This separation is useful\n * in case you need to replace `applyStyle` with a custom implementation.\n *\n * This modifier has `850` as `order` value to maintain backward compatibility\n * with previous versions of Popper.js. Expect the modifiers ordering method\n * to change in future major versions of the library.\n *\n * @memberof modifiers\n * @inner\n */\n computeStyle: {\n /** @prop {number} order=850 - Index used to define the order of execution */\n order: 850,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: computeStyle,\n /**\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: true,\n /**\n * @prop {string} [x='bottom']\n * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n * Change this if your popper should grow in a direction different from `bottom`\n */\n x: 'bottom',\n /**\n * @prop {string} [x='left']\n * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n * Change this if your popper should grow in a direction different from `right`\n */\n y: 'right'\n },\n\n /**\n * Applies the computed styles to the popper element.\n *\n * All the DOM manipulations are limited to this modifier. This is useful in case\n * you want to integrate Popper.js inside a framework or view library and you\n * want to delegate all the DOM manipulations to it.\n *\n * Note that if you disable this modifier, you must make sure the popper element\n * has its position set to `absolute` before Popper.js can do its work!\n *\n * Just disable this modifier and define your own to achieve the desired effect.\n *\n * @memberof modifiers\n * @inner\n */\n applyStyle: {\n /** @prop {number} order=900 - Index used to define the order of execution */\n order: 900,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: applyStyle,\n /** @prop {Function} */\n onLoad: applyStyleOnLoad,\n /**\n * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: undefined\n }\n};\n\n/**\n * The `dataObject` is an object containing all the information used by Popper.js.\n * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n\n/**\n * Default options provided to Popper.js constructor.
\n * These can be overridden using the `options` argument of Popper.js.
\n * To override an option, simply pass an object with the same\n * structure of the `options` object, as the 3rd argument. For example:\n * ```\n * new Popper(ref, pop, {\n * modifiers: {\n * preventOverflow: { enabled: false }\n * }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\nvar Defaults = {\n /**\n * Popper's placement.\n * @prop {Popper.placements} placement='bottom'\n */\n placement: 'bottom',\n\n /**\n * Set this to true if you want popper to position it self in 'fixed' mode\n * @prop {Boolean} positionFixed=false\n */\n positionFixed: false,\n\n /**\n * Whether events (resize, scroll) are initially enabled.\n * @prop {Boolean} eventsEnabled=true\n */\n eventsEnabled: true,\n\n /**\n * Set to true if you want to automatically remove the popper when\n * you call the `destroy` method.\n * @prop {Boolean} removeOnDestroy=false\n */\n removeOnDestroy: false,\n\n /**\n * Callback called when the popper is created.
\n * By default, it is set to no-op.
\n * Access Popper.js instance with `data.instance`.\n * @prop {onCreate}\n */\n onCreate: function onCreate() {},\n\n /**\n * Callback called when the popper is updated. This callback is not called\n * on the initialization/creation of the popper, but only on subsequent\n * updates.
\n * By default, it is set to no-op.
\n * Access Popper.js instance with `data.instance`.\n * @prop {onUpdate}\n */\n onUpdate: function onUpdate() {},\n\n /**\n * List of modifiers used to modify the offsets before they are applied to the popper.\n * They provide most of the functionalities of Popper.js.\n * @prop {modifiers}\n */\n modifiers: modifiers\n};\n\n/**\n * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\n */\n\n// Utils\n// Methods\nvar Popper = function () {\n /**\n * Creates a new Popper.js instance.\n * @class Popper\n * @param {Element|referenceObject} reference - The reference element used to position the popper\n * @param {Element} popper - The HTML / XML element used as the popper\n * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n * @return {Object} instance - The generated Popper.js instance\n */\n function Popper(reference, popper) {\n var _this = this;\n\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n classCallCheck(this, Popper);\n\n this.scheduleUpdate = function () {\n return requestAnimationFrame(_this.update);\n };\n\n // make update() debounced, so that it only runs at most once-per-tick\n this.update = debounce(this.update.bind(this));\n\n // with {} we create a new object with the options inside it\n this.options = _extends({}, Popper.Defaults, options);\n\n // init state\n this.state = {\n isDestroyed: false,\n isCreated: false,\n scrollParents: []\n };\n\n // get reference and popper elements (allow jQuery wrappers)\n this.reference = reference && reference.jquery ? reference[0] : reference;\n this.popper = popper && popper.jquery ? popper[0] : popper;\n\n // Deep merge modifiers options\n this.options.modifiers = {};\n Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) {\n _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {});\n });\n\n // Refactoring modifiers' list (Object => Array)\n this.modifiers = Object.keys(this.options.modifiers).map(function (name) {\n return _extends({\n name: name\n }, _this.options.modifiers[name]);\n })\n // sort the modifiers by order\n .sort(function (a, b) {\n return a.order - b.order;\n });\n\n // modifiers have the ability to execute arbitrary code when Popper.js get inited\n // such code is executed in the same order of its modifier\n // they could add new properties to their options configuration\n // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n this.modifiers.forEach(function (modifierOptions) {\n if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state);\n }\n });\n\n // fire the first update to position the popper in the right place\n this.update();\n\n var eventsEnabled = this.options.eventsEnabled;\n if (eventsEnabled) {\n // setup event listeners, they will take care of update the position in specific situations\n this.enableEventListeners();\n }\n\n this.state.eventsEnabled = eventsEnabled;\n }\n\n // We can't use class properties because they don't get listed in the\n // class prototype and break stuff like Sinon stubs\n\n\n createClass(Popper, [{\n key: 'update',\n value: function update$$1() {\n return update.call(this);\n }\n }, {\n key: 'destroy',\n value: function destroy$$1() {\n return destroy.call(this);\n }\n }, {\n key: 'enableEventListeners',\n value: function enableEventListeners$$1() {\n return enableEventListeners.call(this);\n }\n }, {\n key: 'disableEventListeners',\n value: function disableEventListeners$$1() {\n return disableEventListeners.call(this);\n }\n\n /**\n * Schedules an update. It will run on the next UI update available.\n * @method scheduleUpdate\n * @memberof Popper\n */\n\n\n /**\n * Collection of utilities useful when writing custom modifiers.\n * Starting from version 1.7, this method is available only if you\n * include `popper-utils.js` before `popper.js`.\n *\n * **DEPRECATION**: This way to access PopperUtils is deprecated\n * and will be removed in v2! Use the PopperUtils module directly instead.\n * Due to the high instability of the methods contained in Utils, we can't\n * guarantee them to follow semver. Use them at your own risk!\n * @static\n * @private\n * @type {Object}\n * @deprecated since version 1.8\n * @member Utils\n * @memberof Popper\n */\n\n }]);\n return Popper;\n}();\n\n/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node.
\n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10.\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n\n\nPopper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\nPopper.placements = placements;\nPopper.Defaults = Defaults;\n\nexport default Popper;\n//# sourceMappingURL=popper.js.map\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Popper from 'popper.js'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'dropdown'\nconst VERSION = '4.6.0'\nconst DATA_KEY = 'bs.dropdown'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key\nconst SPACE_KEYCODE = 32 // KeyboardEvent.which value for space key\nconst TAB_KEYCODE = 9 // KeyboardEvent.which value for tab key\nconst ARROW_UP_KEYCODE = 38 // KeyboardEvent.which value for up arrow key\nconst ARROW_DOWN_KEYCODE = 40 // KeyboardEvent.which value for down arrow key\nconst RIGHT_MOUSE_BUTTON_WHICH = 3 // MouseEvent.which value for the right button (assuming a right-handed mouse)\nconst REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEYCODE}|${ARROW_DOWN_KEYCODE}|${ESCAPE_KEYCODE}`)\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK = `click${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DISABLED = 'disabled'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_DROPUP = 'dropup'\nconst CLASS_NAME_DROPRIGHT = 'dropright'\nconst CLASS_NAME_DROPLEFT = 'dropleft'\nconst CLASS_NAME_MENURIGHT = 'dropdown-menu-right'\nconst CLASS_NAME_POSITION_STATIC = 'position-static'\n\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"dropdown\"]'\nconst SELECTOR_FORM_CHILD = '.dropdown form'\nconst SELECTOR_MENU = '.dropdown-menu'\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav'\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n\nconst PLACEMENT_TOP = 'top-start'\nconst PLACEMENT_TOPEND = 'top-end'\nconst PLACEMENT_BOTTOM = 'bottom-start'\nconst PLACEMENT_BOTTOMEND = 'bottom-end'\nconst PLACEMENT_RIGHT = 'right-start'\nconst PLACEMENT_LEFT = 'left-start'\n\nconst Default = {\n offset: 0,\n flip: true,\n boundary: 'scrollParent',\n reference: 'toggle',\n display: 'dynamic',\n popperConfig: null\n}\n\nconst DefaultType = {\n offset: '(number|string|function)',\n flip: 'boolean',\n boundary: '(string|element)',\n reference: '(string|element)',\n display: 'string',\n popperConfig: '(null|object)'\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Dropdown {\n constructor(element, config) {\n this._element = element\n this._popper = null\n this._config = this._getConfig(config)\n this._menu = this._getMenuElement()\n this._inNavbar = this._detectNavbar()\n\n this._addEventListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Public\n\n toggle() {\n if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED)) {\n return\n }\n\n const isActive = $(this._menu).hasClass(CLASS_NAME_SHOW)\n\n Dropdown._clearMenus()\n\n if (isActive) {\n return\n }\n\n this.show(true)\n }\n\n show(usePopper = false) {\n if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED) || $(this._menu).hasClass(CLASS_NAME_SHOW)) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n const showEvent = $.Event(EVENT_SHOW, relatedTarget)\n const parent = Dropdown._getParentFromElement(this._element)\n\n $(parent).trigger(showEvent)\n\n if (showEvent.isDefaultPrevented()) {\n return\n }\n\n // Totally disable Popper for Dropdowns in Navbar\n if (!this._inNavbar && usePopper) {\n /**\n * Check for Popper dependency\n * Popper - https://popper.js.org\n */\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)')\n }\n\n let referenceElement = this._element\n\n if (this._config.reference === 'parent') {\n referenceElement = parent\n } else if (Util.isElement(this._config.reference)) {\n referenceElement = this._config.reference\n\n // Check if it's jQuery element\n if (typeof this._config.reference.jquery !== 'undefined') {\n referenceElement = this._config.reference[0]\n }\n }\n\n // If boundary is not `scrollParent`, then set position to `static`\n // to allow the menu to \"escape\" the scroll parent's boundaries\n // https://github.com/twbs/bootstrap/issues/24251\n if (this._config.boundary !== 'scrollParent') {\n $(parent).addClass(CLASS_NAME_POSITION_STATIC)\n }\n\n this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig())\n }\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement &&\n $(parent).closest(SELECTOR_NAVBAR_NAV).length === 0) {\n $(document.body).children().on('mouseover', null, $.noop)\n }\n\n this._element.focus()\n this._element.setAttribute('aria-expanded', true)\n\n $(this._menu).toggleClass(CLASS_NAME_SHOW)\n $(parent)\n .toggleClass(CLASS_NAME_SHOW)\n .trigger($.Event(EVENT_SHOWN, relatedTarget))\n }\n\n hide() {\n if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED) || !$(this._menu).hasClass(CLASS_NAME_SHOW)) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n const hideEvent = $.Event(EVENT_HIDE, relatedTarget)\n const parent = Dropdown._getParentFromElement(this._element)\n\n $(parent).trigger(hideEvent)\n\n if (hideEvent.isDefaultPrevented()) {\n return\n }\n\n if (this._popper) {\n this._popper.destroy()\n }\n\n $(this._menu).toggleClass(CLASS_NAME_SHOW)\n $(parent)\n .toggleClass(CLASS_NAME_SHOW)\n .trigger($.Event(EVENT_HIDDEN, relatedTarget))\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n $(this._element).off(EVENT_KEY)\n this._element = null\n this._menu = null\n if (this._popper !== null) {\n this._popper.destroy()\n this._popper = null\n }\n }\n\n update() {\n this._inNavbar = this._detectNavbar()\n if (this._popper !== null) {\n this._popper.scheduleUpdate()\n }\n }\n\n // Private\n\n _addEventListeners() {\n $(this._element).on(EVENT_CLICK, event => {\n event.preventDefault()\n event.stopPropagation()\n this.toggle()\n })\n }\n\n _getConfig(config) {\n config = {\n ...this.constructor.Default,\n ...$(this._element).data(),\n ...config\n }\n\n Util.typeCheckConfig(\n NAME,\n config,\n this.constructor.DefaultType\n )\n\n return config\n }\n\n _getMenuElement() {\n if (!this._menu) {\n const parent = Dropdown._getParentFromElement(this._element)\n\n if (parent) {\n this._menu = parent.querySelector(SELECTOR_MENU)\n }\n }\n\n return this._menu\n }\n\n _getPlacement() {\n const $parentDropdown = $(this._element.parentNode)\n let placement = PLACEMENT_BOTTOM\n\n // Handle dropup\n if ($parentDropdown.hasClass(CLASS_NAME_DROPUP)) {\n placement = $(this._menu).hasClass(CLASS_NAME_MENURIGHT) ?\n PLACEMENT_TOPEND :\n PLACEMENT_TOP\n } else if ($parentDropdown.hasClass(CLASS_NAME_DROPRIGHT)) {\n placement = PLACEMENT_RIGHT\n } else if ($parentDropdown.hasClass(CLASS_NAME_DROPLEFT)) {\n placement = PLACEMENT_LEFT\n } else if ($(this._menu).hasClass(CLASS_NAME_MENURIGHT)) {\n placement = PLACEMENT_BOTTOMEND\n }\n\n return placement\n }\n\n _detectNavbar() {\n return $(this._element).closest('.navbar').length > 0\n }\n\n _getOffset() {\n const offset = {}\n\n if (typeof this._config.offset === 'function') {\n offset.fn = data => {\n data.offsets = {\n ...data.offsets,\n ...(this._config.offset(data.offsets, this._element) || {})\n }\n\n return data\n }\n } else {\n offset.offset = this._config.offset\n }\n\n return offset\n }\n\n _getPopperConfig() {\n const popperConfig = {\n placement: this._getPlacement(),\n modifiers: {\n offset: this._getOffset(),\n flip: {\n enabled: this._config.flip\n },\n preventOverflow: {\n boundariesElement: this._config.boundary\n }\n }\n }\n\n // Disable Popper if we have a static display\n if (this._config.display === 'static') {\n popperConfig.modifiers.applyStyle = {\n enabled: false\n }\n }\n\n return {\n ...popperConfig,\n ...this._config.popperConfig\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' ? config : null\n\n if (!data) {\n data = new Dropdown(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n\n static _clearMenus(event) {\n if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH ||\n event.type === 'keyup' && event.which !== TAB_KEYCODE)) {\n return\n }\n\n const toggles = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE))\n\n for (let i = 0, len = toggles.length; i < len; i++) {\n const parent = Dropdown._getParentFromElement(toggles[i])\n const context = $(toggles[i]).data(DATA_KEY)\n const relatedTarget = {\n relatedTarget: toggles[i]\n }\n\n if (event && event.type === 'click') {\n relatedTarget.clickEvent = event\n }\n\n if (!context) {\n continue\n }\n\n const dropdownMenu = context._menu\n if (!$(parent).hasClass(CLASS_NAME_SHOW)) {\n continue\n }\n\n if (event && (event.type === 'click' &&\n /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) &&\n $.contains(parent, event.target)) {\n continue\n }\n\n const hideEvent = $.Event(EVENT_HIDE, relatedTarget)\n $(parent).trigger(hideEvent)\n if (hideEvent.isDefaultPrevented()) {\n continue\n }\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().off('mouseover', null, $.noop)\n }\n\n toggles[i].setAttribute('aria-expanded', 'false')\n\n if (context._popper) {\n context._popper.destroy()\n }\n\n $(dropdownMenu).removeClass(CLASS_NAME_SHOW)\n $(parent)\n .removeClass(CLASS_NAME_SHOW)\n .trigger($.Event(EVENT_HIDDEN, relatedTarget))\n }\n }\n\n static _getParentFromElement(element) {\n let parent\n const selector = Util.getSelectorFromElement(element)\n\n if (selector) {\n parent = document.querySelector(selector)\n }\n\n return parent || element.parentNode\n }\n\n // eslint-disable-next-line complexity\n static _dataApiKeydownHandler(event) {\n // If not input/textarea:\n // - And not a key in REGEXP_KEYDOWN => not a dropdown command\n // If input/textarea:\n // - If space key => not a dropdown command\n // - If key is other than escape\n // - If key is not up or down => not a dropdown command\n // - If trigger inside the menu => not a dropdown command\n if (/input|textarea/i.test(event.target.tagName) ?\n event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE &&\n (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE ||\n $(event.target).closest(SELECTOR_MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {\n return\n }\n\n if (this.disabled || $(this).hasClass(CLASS_NAME_DISABLED)) {\n return\n }\n\n const parent = Dropdown._getParentFromElement(this)\n const isActive = $(parent).hasClass(CLASS_NAME_SHOW)\n\n if (!isActive && event.which === ESCAPE_KEYCODE) {\n return\n }\n\n event.preventDefault()\n event.stopPropagation()\n\n if (!isActive || (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {\n if (event.which === ESCAPE_KEYCODE) {\n $(parent.querySelector(SELECTOR_DATA_TOGGLE)).trigger('focus')\n }\n\n $(this).trigger('click')\n return\n }\n\n const items = [].slice.call(parent.querySelectorAll(SELECTOR_VISIBLE_ITEMS))\n .filter(item => $(item).is(':visible'))\n\n if (items.length === 0) {\n return\n }\n\n let index = items.indexOf(event.target)\n\n if (event.which === ARROW_UP_KEYCODE && index > 0) { // Up\n index--\n }\n\n if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) { // Down\n index++\n }\n\n if (index < 0) {\n index = 0\n }\n\n items[index].focus()\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document)\n .on(EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown._dataApiKeydownHandler)\n .on(EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown._dataApiKeydownHandler)\n .on(`${EVENT_CLICK_DATA_API} ${EVENT_KEYUP_DATA_API}`, Dropdown._clearMenus)\n .on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n event.preventDefault()\n event.stopPropagation()\n Dropdown._jQueryInterface.call($(this), 'toggle')\n })\n .on(EVENT_CLICK_DATA_API, SELECTOR_FORM_CHILD, e => {\n e.stopPropagation()\n })\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Dropdown._jQueryInterface\n$.fn[NAME].Constructor = Dropdown\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Dropdown._jQueryInterface\n}\n\nexport default Dropdown\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'modal'\nconst VERSION = '4.6.0'\nconst DATA_KEY = 'bs.modal'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key\n\nconst Default = {\n backdrop: true,\n keyboard: true,\n focus: true,\n show: true\n}\n\nconst DefaultType = {\n backdrop: '(boolean|string)',\n keyboard: 'boolean',\n focus: 'boolean',\n show: 'boolean'\n}\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SCROLLABLE = 'modal-dialog-scrollable'\nconst CLASS_NAME_SCROLLBAR_MEASURER = 'modal-scrollbar-measure'\nconst CLASS_NAME_BACKDROP = 'modal-backdrop'\nconst CLASS_NAME_OPEN = 'modal-open'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_STATIC = 'modal-static'\n\nconst SELECTOR_DIALOG = '.modal-dialog'\nconst SELECTOR_MODAL_BODY = '.modal-body'\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"modal\"]'\nconst SELECTOR_DATA_DISMISS = '[data-dismiss=\"modal\"]'\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'\nconst SELECTOR_STICKY_CONTENT = '.sticky-top'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Modal {\n constructor(element, config) {\n this._config = this._getConfig(config)\n this._element = element\n this._dialog = element.querySelector(SELECTOR_DIALOG)\n this._backdrop = null\n this._isShown = false\n this._isBodyOverflowing = false\n this._ignoreBackdropClick = false\n this._isTransitioning = false\n this._scrollbarWidth = 0\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown || this._isTransitioning) {\n return\n }\n\n if ($(this._element).hasClass(CLASS_NAME_FADE)) {\n this._isTransitioning = true\n }\n\n const showEvent = $.Event(EVENT_SHOW, {\n relatedTarget\n })\n\n $(this._element).trigger(showEvent)\n\n if (this._isShown || showEvent.isDefaultPrevented()) {\n return\n }\n\n this._isShown = true\n\n this._checkScrollbar()\n this._setScrollbar()\n\n this._adjustDialog()\n\n this._setEscapeEvent()\n this._setResizeEvent()\n\n $(this._element).on(\n EVENT_CLICK_DISMISS,\n SELECTOR_DATA_DISMISS,\n event => this.hide(event)\n )\n\n $(this._dialog).on(EVENT_MOUSEDOWN_DISMISS, () => {\n $(this._element).one(EVENT_MOUSEUP_DISMISS, event => {\n if ($(event.target).is(this._element)) {\n this._ignoreBackdropClick = true\n }\n })\n })\n\n this._showBackdrop(() => this._showElement(relatedTarget))\n }\n\n hide(event) {\n if (event) {\n event.preventDefault()\n }\n\n if (!this._isShown || this._isTransitioning) {\n return\n }\n\n const hideEvent = $.Event(EVENT_HIDE)\n\n $(this._element).trigger(hideEvent)\n\n if (!this._isShown || hideEvent.isDefaultPrevented()) {\n return\n }\n\n this._isShown = false\n const transition = $(this._element).hasClass(CLASS_NAME_FADE)\n\n if (transition) {\n this._isTransitioning = true\n }\n\n this._setEscapeEvent()\n this._setResizeEvent()\n\n $(document).off(EVENT_FOCUSIN)\n\n $(this._element).removeClass(CLASS_NAME_SHOW)\n\n $(this._element).off(EVENT_CLICK_DISMISS)\n $(this._dialog).off(EVENT_MOUSEDOWN_DISMISS)\n\n if (transition) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, event => this._hideModal(event))\n .emulateTransitionEnd(transitionDuration)\n } else {\n this._hideModal()\n }\n }\n\n dispose() {\n [window, this._element, this._dialog]\n .forEach(htmlElement => $(htmlElement).off(EVENT_KEY))\n\n /**\n * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\n * Do not move `document` in `htmlElements` array\n * It will remove `EVENT_CLICK_DATA_API` event that should remain\n */\n $(document).off(EVENT_FOCUSIN)\n\n $.removeData(this._element, DATA_KEY)\n\n this._config = null\n this._element = null\n this._dialog = null\n this._backdrop = null\n this._isShown = null\n this._isBodyOverflowing = null\n this._ignoreBackdropClick = null\n this._isTransitioning = null\n this._scrollbarWidth = null\n }\n\n handleUpdate() {\n this._adjustDialog()\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _triggerBackdropTransition() {\n const hideEventPrevented = $.Event(EVENT_HIDE_PREVENTED)\n\n $(this._element).trigger(hideEventPrevented)\n if (hideEventPrevented.isDefaultPrevented()) {\n return\n }\n\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n\n if (!isModalOverflowing) {\n this._element.style.overflowY = 'hidden'\n }\n\n this._element.classList.add(CLASS_NAME_STATIC)\n\n const modalTransitionDuration = Util.getTransitionDurationFromElement(this._dialog)\n $(this._element).off(Util.TRANSITION_END)\n\n $(this._element).one(Util.TRANSITION_END, () => {\n this._element.classList.remove(CLASS_NAME_STATIC)\n if (!isModalOverflowing) {\n $(this._element).one(Util.TRANSITION_END, () => {\n this._element.style.overflowY = ''\n })\n .emulateTransitionEnd(this._element, modalTransitionDuration)\n }\n })\n .emulateTransitionEnd(modalTransitionDuration)\n this._element.focus()\n }\n\n _showElement(relatedTarget) {\n const transition = $(this._element).hasClass(CLASS_NAME_FADE)\n const modalBody = this._dialog ? this._dialog.querySelector(SELECTOR_MODAL_BODY) : null\n\n if (!this._element.parentNode ||\n this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n // Don't move modal's DOM position\n document.body.appendChild(this._element)\n }\n\n this._element.style.display = 'block'\n this._element.removeAttribute('aria-hidden')\n this._element.setAttribute('aria-modal', true)\n this._element.setAttribute('role', 'dialog')\n\n if ($(this._dialog).hasClass(CLASS_NAME_SCROLLABLE) && modalBody) {\n modalBody.scrollTop = 0\n } else {\n this._element.scrollTop = 0\n }\n\n if (transition) {\n Util.reflow(this._element)\n }\n\n $(this._element).addClass(CLASS_NAME_SHOW)\n\n if (this._config.focus) {\n this._enforceFocus()\n }\n\n const shownEvent = $.Event(EVENT_SHOWN, {\n relatedTarget\n })\n\n const transitionComplete = () => {\n if (this._config.focus) {\n this._element.focus()\n }\n\n this._isTransitioning = false\n $(this._element).trigger(shownEvent)\n }\n\n if (transition) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._dialog)\n\n $(this._dialog)\n .one(Util.TRANSITION_END, transitionComplete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n transitionComplete()\n }\n }\n\n _enforceFocus() {\n $(document)\n .off(EVENT_FOCUSIN) // Guard against infinite focus loop\n .on(EVENT_FOCUSIN, event => {\n if (document !== event.target &&\n this._element !== event.target &&\n $(this._element).has(event.target).length === 0) {\n this._element.focus()\n }\n })\n }\n\n _setEscapeEvent() {\n if (this._isShown) {\n $(this._element).on(EVENT_KEYDOWN_DISMISS, event => {\n if (this._config.keyboard && event.which === ESCAPE_KEYCODE) {\n event.preventDefault()\n this.hide()\n } else if (!this._config.keyboard && event.which === ESCAPE_KEYCODE) {\n this._triggerBackdropTransition()\n }\n })\n } else if (!this._isShown) {\n $(this._element).off(EVENT_KEYDOWN_DISMISS)\n }\n }\n\n _setResizeEvent() {\n if (this._isShown) {\n $(window).on(EVENT_RESIZE, event => this.handleUpdate(event))\n } else {\n $(window).off(EVENT_RESIZE)\n }\n }\n\n _hideModal() {\n this._element.style.display = 'none'\n this._element.setAttribute('aria-hidden', true)\n this._element.removeAttribute('aria-modal')\n this._element.removeAttribute('role')\n this._isTransitioning = false\n this._showBackdrop(() => {\n $(document.body).removeClass(CLASS_NAME_OPEN)\n this._resetAdjustments()\n this._resetScrollbar()\n $(this._element).trigger(EVENT_HIDDEN)\n })\n }\n\n _removeBackdrop() {\n if (this._backdrop) {\n $(this._backdrop).remove()\n this._backdrop = null\n }\n }\n\n _showBackdrop(callback) {\n const animate = $(this._element).hasClass(CLASS_NAME_FADE) ?\n CLASS_NAME_FADE : ''\n\n if (this._isShown && this._config.backdrop) {\n this._backdrop = document.createElement('div')\n this._backdrop.className = CLASS_NAME_BACKDROP\n\n if (animate) {\n this._backdrop.classList.add(animate)\n }\n\n $(this._backdrop).appendTo(document.body)\n\n $(this._element).on(EVENT_CLICK_DISMISS, event => {\n if (this._ignoreBackdropClick) {\n this._ignoreBackdropClick = false\n return\n }\n\n if (event.target !== event.currentTarget) {\n return\n }\n\n if (this._config.backdrop === 'static') {\n this._triggerBackdropTransition()\n } else {\n this.hide()\n }\n })\n\n if (animate) {\n Util.reflow(this._backdrop)\n }\n\n $(this._backdrop).addClass(CLASS_NAME_SHOW)\n\n if (!callback) {\n return\n }\n\n if (!animate) {\n callback()\n return\n }\n\n const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop)\n\n $(this._backdrop)\n .one(Util.TRANSITION_END, callback)\n .emulateTransitionEnd(backdropTransitionDuration)\n } else if (!this._isShown && this._backdrop) {\n $(this._backdrop).removeClass(CLASS_NAME_SHOW)\n\n const callbackRemove = () => {\n this._removeBackdrop()\n if (callback) {\n callback()\n }\n }\n\n if ($(this._element).hasClass(CLASS_NAME_FADE)) {\n const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop)\n\n $(this._backdrop)\n .one(Util.TRANSITION_END, callbackRemove)\n .emulateTransitionEnd(backdropTransitionDuration)\n } else {\n callbackRemove()\n }\n } else if (callback) {\n callback()\n }\n }\n\n // ----------------------------------------------------------------------\n // the following methods are used to handle overflowing modals\n // todo (fat): these should probably be refactored out of modal.js\n // ----------------------------------------------------------------------\n\n _adjustDialog() {\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n\n if (!this._isBodyOverflowing && isModalOverflowing) {\n this._element.style.paddingLeft = `${this._scrollbarWidth}px`\n }\n\n if (this._isBodyOverflowing && !isModalOverflowing) {\n this._element.style.paddingRight = `${this._scrollbarWidth}px`\n }\n }\n\n _resetAdjustments() {\n this._element.style.paddingLeft = ''\n this._element.style.paddingRight = ''\n }\n\n _checkScrollbar() {\n const rect = document.body.getBoundingClientRect()\n this._isBodyOverflowing = Math.round(rect.left + rect.right) < window.innerWidth\n this._scrollbarWidth = this._getScrollbarWidth()\n }\n\n _setScrollbar() {\n if (this._isBodyOverflowing) {\n // Note: DOMNode.style.paddingRight returns the actual value or '' if not set\n // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set\n const fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT))\n const stickyContent = [].slice.call(document.querySelectorAll(SELECTOR_STICKY_CONTENT))\n\n // Adjust fixed content padding\n $(fixedContent).each((index, element) => {\n const actualPadding = element.style.paddingRight\n const calculatedPadding = $(element).css('padding-right')\n $(element)\n .data('padding-right', actualPadding)\n .css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)\n })\n\n // Adjust sticky content margin\n $(stickyContent).each((index, element) => {\n const actualMargin = element.style.marginRight\n const calculatedMargin = $(element).css('margin-right')\n $(element)\n .data('margin-right', actualMargin)\n .css('margin-right', `${parseFloat(calculatedMargin) - this._scrollbarWidth}px`)\n })\n\n // Adjust body padding\n const actualPadding = document.body.style.paddingRight\n const calculatedPadding = $(document.body).css('padding-right')\n $(document.body)\n .data('padding-right', actualPadding)\n .css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)\n }\n\n $(document.body).addClass(CLASS_NAME_OPEN)\n }\n\n _resetScrollbar() {\n // Restore fixed content padding\n const fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT))\n $(fixedContent).each((index, element) => {\n const padding = $(element).data('padding-right')\n $(element).removeData('padding-right')\n element.style.paddingRight = padding ? padding : ''\n })\n\n // Restore sticky content\n const elements = [].slice.call(document.querySelectorAll(`${SELECTOR_STICKY_CONTENT}`))\n $(elements).each((index, element) => {\n const margin = $(element).data('margin-right')\n if (typeof margin !== 'undefined') {\n $(element).css('margin-right', margin).removeData('margin-right')\n }\n })\n\n // Restore body padding\n const padding = $(document.body).data('padding-right')\n $(document.body).removeData('padding-right')\n document.body.style.paddingRight = padding ? padding : ''\n }\n\n _getScrollbarWidth() { // thx d.walsh\n const scrollDiv = document.createElement('div')\n scrollDiv.className = CLASS_NAME_SCROLLBAR_MEASURER\n document.body.appendChild(scrollDiv)\n const scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth\n document.body.removeChild(scrollDiv)\n return scrollbarWidth\n }\n\n // Static\n\n static _jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = {\n ...Default,\n ...$(this).data(),\n ...(typeof config === 'object' && config ? config : {})\n }\n\n if (!data) {\n data = new Modal(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](relatedTarget)\n } else if (_config.show) {\n data.show(relatedTarget)\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n$(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n let target\n const selector = Util.getSelectorFromElement(this)\n\n if (selector) {\n target = document.querySelector(selector)\n }\n\n const config = $(target).data(DATA_KEY) ?\n 'toggle' : {\n ...$(target).data(),\n ...$(this).data()\n }\n\n if (this.tagName === 'A' || this.tagName === 'AREA') {\n event.preventDefault()\n }\n\n const $target = $(target).one(EVENT_SHOW, showEvent => {\n if (showEvent.isDefaultPrevented()) {\n // Only register focus restorer if modal will actually get shown\n return\n }\n\n $target.one(EVENT_HIDDEN, () => {\n if ($(this).is(':visible')) {\n this.focus()\n }\n })\n })\n\n Modal._jQueryInterface.call($(target), config, this)\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Modal._jQueryInterface\n$.fn[NAME].Constructor = Modal\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Modal._jQueryInterface\n}\n\nexport default Modal\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): tools/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst uriAttrs = [\n 'background',\n 'cite',\n 'href',\n 'itemtype',\n 'longdesc',\n 'poster',\n 'src',\n 'xlink:href'\n]\n\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\nexport const DefaultWhitelist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n div: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: []\n}\n\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/gi\n\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i\n\nfunction allowedAttribute(attr, allowedAttributeList) {\n const attrName = attr.nodeName.toLowerCase()\n\n if (allowedAttributeList.indexOf(attrName) !== -1) {\n if (uriAttrs.indexOf(attrName) !== -1) {\n return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN))\n }\n\n return true\n }\n\n const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp)\n\n // Check if a regular expression validates the attribute.\n for (let i = 0, len = regExp.length; i < len; i++) {\n if (attrName.match(regExp[i])) {\n return true\n }\n }\n\n return false\n}\n\nexport function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {\n if (unsafeHtml.length === 0) {\n return unsafeHtml\n }\n\n if (sanitizeFn && typeof sanitizeFn === 'function') {\n return sanitizeFn(unsafeHtml)\n }\n\n const domParser = new window.DOMParser()\n const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html')\n const whitelistKeys = Object.keys(whiteList)\n const elements = [].slice.call(createdDocument.body.querySelectorAll('*'))\n\n for (let i = 0, len = elements.length; i < len; i++) {\n const el = elements[i]\n const elName = el.nodeName.toLowerCase()\n\n if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) {\n el.parentNode.removeChild(el)\n\n continue\n }\n\n const attributeList = [].slice.call(el.attributes)\n const whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || [])\n\n attributeList.forEach(attr => {\n if (!allowedAttribute(attr, whitelistedAttributes)) {\n el.removeAttribute(attr.nodeName)\n }\n })\n }\n\n return createdDocument.body.innerHTML\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n DefaultWhitelist,\n sanitizeHtml\n} from './tools/sanitizer'\nimport $ from 'jquery'\nimport Popper from 'popper.js'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'tooltip'\nconst VERSION = '4.6.0'\nconst DATA_KEY = 'bs.tooltip'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst CLASS_PREFIX = 'bs-tooltip'\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g')\nconst DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn']\n\nconst DefaultType = {\n animation: 'boolean',\n template: 'string',\n title: '(string|element|function)',\n trigger: 'string',\n delay: '(number|object)',\n html: 'boolean',\n selector: '(string|boolean)',\n placement: '(string|function)',\n offset: '(number|string|function)',\n container: '(string|element|boolean)',\n fallbackPlacement: '(string|array)',\n boundary: '(string|element)',\n customClass: '(string|function)',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n whiteList: 'object',\n popperConfig: '(null|object)'\n}\n\nconst AttachmentMap = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: 'right',\n BOTTOM: 'bottom',\n LEFT: 'left'\n}\n\nconst Default = {\n animation: true,\n template: '
' +\n '
' +\n '
',\n trigger: 'hover focus',\n title: '',\n delay: 0,\n html: false,\n selector: false,\n placement: 'top',\n offset: 0,\n container: false,\n fallbackPlacement: 'flip',\n boundary: 'scrollParent',\n customClass: '',\n sanitize: true,\n sanitizeFn: null,\n whiteList: DefaultWhitelist,\n popperConfig: null\n}\n\nconst HOVER_STATE_SHOW = 'show'\nconst HOVER_STATE_OUT = 'out'\n\nconst Event = {\n HIDE: `hide${EVENT_KEY}`,\n HIDDEN: `hidden${EVENT_KEY}`,\n SHOW: `show${EVENT_KEY}`,\n SHOWN: `shown${EVENT_KEY}`,\n INSERTED: `inserted${EVENT_KEY}`,\n CLICK: `click${EVENT_KEY}`,\n FOCUSIN: `focusin${EVENT_KEY}`,\n FOCUSOUT: `focusout${EVENT_KEY}`,\n MOUSEENTER: `mouseenter${EVENT_KEY}`,\n MOUSELEAVE: `mouseleave${EVENT_KEY}`\n}\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner'\nconst SELECTOR_ARROW = '.arrow'\n\nconst TRIGGER_HOVER = 'hover'\nconst TRIGGER_FOCUS = 'focus'\nconst TRIGGER_CLICK = 'click'\nconst TRIGGER_MANUAL = 'manual'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tooltip {\n constructor(element, config) {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)')\n }\n\n // private\n this._isEnabled = true\n this._timeout = 0\n this._hoverState = ''\n this._activeTrigger = {}\n this._popper = null\n\n // Protected\n this.element = element\n this.config = this._getConfig(config)\n this.tip = null\n\n this._setListeners()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n static get Event() {\n return Event\n }\n\n static get EVENT_KEY() {\n return EVENT_KEY\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Public\n\n enable() {\n this._isEnabled = true\n }\n\n disable() {\n this._isEnabled = false\n }\n\n toggleEnabled() {\n this._isEnabled = !this._isEnabled\n }\n\n toggle(event) {\n if (!this._isEnabled) {\n return\n }\n\n if (event) {\n const dataKey = this.constructor.DATA_KEY\n let context = $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n context._activeTrigger.click = !context._activeTrigger.click\n\n if (context._isWithActiveTrigger()) {\n context._enter(null, context)\n } else {\n context._leave(null, context)\n }\n } else {\n if ($(this.getTipElement()).hasClass(CLASS_NAME_SHOW)) {\n this._leave(null, this)\n return\n }\n\n this._enter(null, this)\n }\n }\n\n dispose() {\n clearTimeout(this._timeout)\n\n $.removeData(this.element, this.constructor.DATA_KEY)\n\n $(this.element).off(this.constructor.EVENT_KEY)\n $(this.element).closest('.modal').off('hide.bs.modal', this._hideModalHandler)\n\n if (this.tip) {\n $(this.tip).remove()\n }\n\n this._isEnabled = null\n this._timeout = null\n this._hoverState = null\n this._activeTrigger = null\n if (this._popper) {\n this._popper.destroy()\n }\n\n this._popper = null\n this.element = null\n this.config = null\n this.tip = null\n }\n\n show() {\n if ($(this.element).css('display') === 'none') {\n throw new Error('Please use show on visible elements')\n }\n\n const showEvent = $.Event(this.constructor.Event.SHOW)\n if (this.isWithContent() && this._isEnabled) {\n $(this.element).trigger(showEvent)\n\n const shadowRoot = Util.findShadowRoot(this.element)\n const isInTheDom = $.contains(\n shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement,\n this.element\n )\n\n if (showEvent.isDefaultPrevented() || !isInTheDom) {\n return\n }\n\n const tip = this.getTipElement()\n const tipId = Util.getUID(this.constructor.NAME)\n\n tip.setAttribute('id', tipId)\n this.element.setAttribute('aria-describedby', tipId)\n\n this.setContent()\n\n if (this.config.animation) {\n $(tip).addClass(CLASS_NAME_FADE)\n }\n\n const placement = typeof this.config.placement === 'function' ?\n this.config.placement.call(this, tip, this.element) :\n this.config.placement\n\n const attachment = this._getAttachment(placement)\n this.addAttachmentClass(attachment)\n\n const container = this._getContainer()\n $(tip).data(this.constructor.DATA_KEY, this)\n\n if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) {\n $(tip).appendTo(container)\n }\n\n $(this.element).trigger(this.constructor.Event.INSERTED)\n\n this._popper = new Popper(this.element, tip, this._getPopperConfig(attachment))\n\n $(tip).addClass(CLASS_NAME_SHOW)\n $(tip).addClass(this.config.customClass)\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().on('mouseover', null, $.noop)\n }\n\n const complete = () => {\n if (this.config.animation) {\n this._fixTransition()\n }\n\n const prevHoverState = this._hoverState\n this._hoverState = null\n\n $(this.element).trigger(this.constructor.Event.SHOWN)\n\n if (prevHoverState === HOVER_STATE_OUT) {\n this._leave(null, this)\n }\n }\n\n if ($(this.tip).hasClass(CLASS_NAME_FADE)) {\n const transitionDuration = Util.getTransitionDurationFromElement(this.tip)\n\n $(this.tip)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n }\n }\n\n hide(callback) {\n const tip = this.getTipElement()\n const hideEvent = $.Event(this.constructor.Event.HIDE)\n const complete = () => {\n if (this._hoverState !== HOVER_STATE_SHOW && tip.parentNode) {\n tip.parentNode.removeChild(tip)\n }\n\n this._cleanTipClass()\n this.element.removeAttribute('aria-describedby')\n $(this.element).trigger(this.constructor.Event.HIDDEN)\n if (this._popper !== null) {\n this._popper.destroy()\n }\n\n if (callback) {\n callback()\n }\n }\n\n $(this.element).trigger(hideEvent)\n\n if (hideEvent.isDefaultPrevented()) {\n return\n }\n\n $(tip).removeClass(CLASS_NAME_SHOW)\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().off('mouseover', null, $.noop)\n }\n\n this._activeTrigger[TRIGGER_CLICK] = false\n this._activeTrigger[TRIGGER_FOCUS] = false\n this._activeTrigger[TRIGGER_HOVER] = false\n\n if ($(this.tip).hasClass(CLASS_NAME_FADE)) {\n const transitionDuration = Util.getTransitionDurationFromElement(tip)\n\n $(tip)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n\n this._hoverState = ''\n }\n\n update() {\n if (this._popper !== null) {\n this._popper.scheduleUpdate()\n }\n }\n\n // Protected\n\n isWithContent() {\n return Boolean(this.getTitle())\n }\n\n addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(`${CLASS_PREFIX}-${attachment}`)\n }\n\n getTipElement() {\n this.tip = this.tip || $(this.config.template)[0]\n return this.tip\n }\n\n setContent() {\n const tip = this.getTipElement()\n this.setElementContent($(tip.querySelectorAll(SELECTOR_TOOLTIP_INNER)), this.getTitle())\n $(tip).removeClass(`${CLASS_NAME_FADE} ${CLASS_NAME_SHOW}`)\n }\n\n setElementContent($element, content) {\n if (typeof content === 'object' && (content.nodeType || content.jquery)) {\n // Content is a DOM node or a jQuery\n if (this.config.html) {\n if (!$(content).parent().is($element)) {\n $element.empty().append(content)\n }\n } else {\n $element.text($(content).text())\n }\n\n return\n }\n\n if (this.config.html) {\n if (this.config.sanitize) {\n content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn)\n }\n\n $element.html(content)\n } else {\n $element.text(content)\n }\n }\n\n getTitle() {\n let title = this.element.getAttribute('data-original-title')\n\n if (!title) {\n title = typeof this.config.title === 'function' ?\n this.config.title.call(this.element) :\n this.config.title\n }\n\n return title\n }\n\n // Private\n\n _getPopperConfig(attachment) {\n const defaultBsConfig = {\n placement: attachment,\n modifiers: {\n offset: this._getOffset(),\n flip: {\n behavior: this.config.fallbackPlacement\n },\n arrow: {\n element: SELECTOR_ARROW\n },\n preventOverflow: {\n boundariesElement: this.config.boundary\n }\n },\n onCreate: data => {\n if (data.originalPlacement !== data.placement) {\n this._handlePopperPlacementChange(data)\n }\n },\n onUpdate: data => this._handlePopperPlacementChange(data)\n }\n\n return {\n ...defaultBsConfig,\n ...this.config.popperConfig\n }\n }\n\n _getOffset() {\n const offset = {}\n\n if (typeof this.config.offset === 'function') {\n offset.fn = data => {\n data.offsets = {\n ...data.offsets,\n ...(this.config.offset(data.offsets, this.element) || {})\n }\n\n return data\n }\n } else {\n offset.offset = this.config.offset\n }\n\n return offset\n }\n\n _getContainer() {\n if (this.config.container === false) {\n return document.body\n }\n\n if (Util.isElement(this.config.container)) {\n return $(this.config.container)\n }\n\n return $(document).find(this.config.container)\n }\n\n _getAttachment(placement) {\n return AttachmentMap[placement.toUpperCase()]\n }\n\n _setListeners() {\n const triggers = this.config.trigger.split(' ')\n\n triggers.forEach(trigger => {\n if (trigger === 'click') {\n $(this.element).on(\n this.constructor.Event.CLICK,\n this.config.selector,\n event => this.toggle(event)\n )\n } else if (trigger !== TRIGGER_MANUAL) {\n const eventIn = trigger === TRIGGER_HOVER ?\n this.constructor.Event.MOUSEENTER :\n this.constructor.Event.FOCUSIN\n const eventOut = trigger === TRIGGER_HOVER ?\n this.constructor.Event.MOUSELEAVE :\n this.constructor.Event.FOCUSOUT\n\n $(this.element)\n .on(eventIn, this.config.selector, event => this._enter(event))\n .on(eventOut, this.config.selector, event => this._leave(event))\n }\n })\n\n this._hideModalHandler = () => {\n if (this.element) {\n this.hide()\n }\n }\n\n $(this.element).closest('.modal').on('hide.bs.modal', this._hideModalHandler)\n\n if (this.config.selector) {\n this.config = {\n ...this.config,\n trigger: 'manual',\n selector: ''\n }\n } else {\n this._fixTitle()\n }\n }\n\n _fixTitle() {\n const titleType = typeof this.element.getAttribute('data-original-title')\n\n if (this.element.getAttribute('title') || titleType !== 'string') {\n this.element.setAttribute(\n 'data-original-title',\n this.element.getAttribute('title') || ''\n )\n\n this.element.setAttribute('title', '')\n }\n }\n\n _enter(event, context) {\n const dataKey = this.constructor.DATA_KEY\n context = context || $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n if (event) {\n context._activeTrigger[\n event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER\n ] = true\n }\n\n if ($(context.getTipElement()).hasClass(CLASS_NAME_SHOW) || context._hoverState === HOVER_STATE_SHOW) {\n context._hoverState = HOVER_STATE_SHOW\n return\n }\n\n clearTimeout(context._timeout)\n\n context._hoverState = HOVER_STATE_SHOW\n\n if (!context.config.delay || !context.config.delay.show) {\n context.show()\n return\n }\n\n context._timeout = setTimeout(() => {\n if (context._hoverState === HOVER_STATE_SHOW) {\n context.show()\n }\n }, context.config.delay.show)\n }\n\n _leave(event, context) {\n const dataKey = this.constructor.DATA_KEY\n context = context || $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n if (event) {\n context._activeTrigger[\n event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER\n ] = false\n }\n\n if (context._isWithActiveTrigger()) {\n return\n }\n\n clearTimeout(context._timeout)\n\n context._hoverState = HOVER_STATE_OUT\n\n if (!context.config.delay || !context.config.delay.hide) {\n context.hide()\n return\n }\n\n context._timeout = setTimeout(() => {\n if (context._hoverState === HOVER_STATE_OUT) {\n context.hide()\n }\n }, context.config.delay.hide)\n }\n\n _isWithActiveTrigger() {\n for (const trigger in this._activeTrigger) {\n if (this._activeTrigger[trigger]) {\n return true\n }\n }\n\n return false\n }\n\n _getConfig(config) {\n const dataAttributes = $(this.element).data()\n\n Object.keys(dataAttributes)\n .forEach(dataAttr => {\n if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) {\n delete dataAttributes[dataAttr]\n }\n })\n\n config = {\n ...this.constructor.Default,\n ...dataAttributes,\n ...(typeof config === 'object' && config ? config : {})\n }\n\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n }\n }\n\n if (typeof config.title === 'number') {\n config.title = config.title.toString()\n }\n\n if (typeof config.content === 'number') {\n config.content = config.content.toString()\n }\n\n Util.typeCheckConfig(\n NAME,\n config,\n this.constructor.DefaultType\n )\n\n if (config.sanitize) {\n config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn)\n }\n\n return config\n }\n\n _getDelegateConfig() {\n const config = {}\n\n if (this.config) {\n for (const key in this.config) {\n if (this.constructor.Default[key] !== this.config[key]) {\n config[key] = this.config[key]\n }\n }\n }\n\n return config\n }\n\n _cleanTipClass() {\n const $tip = $(this.getTipElement())\n const tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX)\n if (tabClass !== null && tabClass.length) {\n $tip.removeClass(tabClass.join(''))\n }\n }\n\n _handlePopperPlacementChange(popperData) {\n this.tip = popperData.instance.popper\n this._cleanTipClass()\n this.addAttachmentClass(this._getAttachment(popperData.placement))\n }\n\n _fixTransition() {\n const tip = this.getTipElement()\n const initConfigAnimation = this.config.animation\n\n if (tip.getAttribute('x-placement') !== null) {\n return\n }\n\n $(tip).removeClass(CLASS_NAME_FADE)\n this.config.animation = false\n this.hide()\n this.show()\n this.config.animation = initConfigAnimation\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n const _config = typeof config === 'object' && config\n\n if (!data && /dispose|hide/.test(config)) {\n return\n }\n\n if (!data) {\n data = new Tooltip(this, _config)\n $element.data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Tooltip._jQueryInterface\n$.fn[NAME].Constructor = Tooltip\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Tooltip._jQueryInterface\n}\n\nexport default Tooltip\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Tooltip from './tooltip'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'popover'\nconst VERSION = '4.6.0'\nconst DATA_KEY = 'bs.popover'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst CLASS_PREFIX = 'bs-popover'\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g')\n\nconst Default = {\n ...Tooltip.Default,\n placement: 'right',\n trigger: 'click',\n content: '',\n template: '
' +\n '
' +\n '

' +\n '
'\n}\n\nconst DefaultType = {\n ...Tooltip.DefaultType,\n content: '(string|element|function)'\n}\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_TITLE = '.popover-header'\nconst SELECTOR_CONTENT = '.popover-body'\n\nconst Event = {\n HIDE: `hide${EVENT_KEY}`,\n HIDDEN: `hidden${EVENT_KEY}`,\n SHOW: `show${EVENT_KEY}`,\n SHOWN: `shown${EVENT_KEY}`,\n INSERTED: `inserted${EVENT_KEY}`,\n CLICK: `click${EVENT_KEY}`,\n FOCUSIN: `focusin${EVENT_KEY}`,\n FOCUSOUT: `focusout${EVENT_KEY}`,\n MOUSEENTER: `mouseenter${EVENT_KEY}`,\n MOUSELEAVE: `mouseleave${EVENT_KEY}`\n}\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Popover extends Tooltip {\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n static get Event() {\n return Event\n }\n\n static get EVENT_KEY() {\n return EVENT_KEY\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Overrides\n\n isWithContent() {\n return this.getTitle() || this._getContent()\n }\n\n addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(`${CLASS_PREFIX}-${attachment}`)\n }\n\n getTipElement() {\n this.tip = this.tip || $(this.config.template)[0]\n return this.tip\n }\n\n setContent() {\n const $tip = $(this.getTipElement())\n\n // We use append for html objects to maintain js events\n this.setElementContent($tip.find(SELECTOR_TITLE), this.getTitle())\n let content = this._getContent()\n if (typeof content === 'function') {\n content = content.call(this.element)\n }\n\n this.setElementContent($tip.find(SELECTOR_CONTENT), content)\n\n $tip.removeClass(`${CLASS_NAME_FADE} ${CLASS_NAME_SHOW}`)\n }\n\n // Private\n\n _getContent() {\n return this.element.getAttribute('data-content') ||\n this.config.content\n }\n\n _cleanTipClass() {\n const $tip = $(this.getTipElement())\n const tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX)\n if (tabClass !== null && tabClass.length > 0) {\n $tip.removeClass(tabClass.join(''))\n }\n }\n\n // Static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' ? config : null\n\n if (!data && /dispose|hide/.test(config)) {\n return\n }\n\n if (!data) {\n data = new Popover(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n$.fn[NAME] = Popover._jQueryInterface\n$.fn[NAME].Constructor = Popover\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Popover._jQueryInterface\n}\n\nexport default Popover\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'scrollspy'\nconst VERSION = '4.6.0'\nconst DATA_KEY = 'bs.scrollspy'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst Default = {\n offset: 10,\n method: 'auto',\n target: ''\n}\n\nconst DefaultType = {\n offset: 'number',\n method: 'string',\n target: '(string|element)'\n}\n\nconst EVENT_ACTIVATE = `activate${EVENT_KEY}`\nconst EVENT_SCROLL = `scroll${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'\nconst CLASS_NAME_ACTIVE = 'active'\n\nconst SELECTOR_DATA_SPY = '[data-spy=\"scroll\"]'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_NAV_LINKS = '.nav-link'\nconst SELECTOR_NAV_ITEMS = '.nav-item'\nconst SELECTOR_LIST_ITEMS = '.list-group-item'\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_DROPDOWN_ITEMS = '.dropdown-item'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\n\nconst METHOD_OFFSET = 'offset'\nconst METHOD_POSITION = 'position'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass ScrollSpy {\n constructor(element, config) {\n this._element = element\n this._scrollElement = element.tagName === 'BODY' ? window : element\n this._config = this._getConfig(config)\n this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS},` +\n `${this._config.target} ${SELECTOR_LIST_ITEMS},` +\n `${this._config.target} ${SELECTOR_DROPDOWN_ITEMS}`\n this._offsets = []\n this._targets = []\n this._activeTarget = null\n this._scrollHeight = 0\n\n $(this._scrollElement).on(EVENT_SCROLL, event => this._process(event))\n\n this.refresh()\n this._process()\n }\n\n // Getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n\n refresh() {\n const autoMethod = this._scrollElement === this._scrollElement.window ?\n METHOD_OFFSET : METHOD_POSITION\n\n const offsetMethod = this._config.method === 'auto' ?\n autoMethod : this._config.method\n\n const offsetBase = offsetMethod === METHOD_POSITION ?\n this._getScrollTop() : 0\n\n this._offsets = []\n this._targets = []\n\n this._scrollHeight = this._getScrollHeight()\n\n const targets = [].slice.call(document.querySelectorAll(this._selector))\n\n targets\n .map(element => {\n let target\n const targetSelector = Util.getSelectorFromElement(element)\n\n if (targetSelector) {\n target = document.querySelector(targetSelector)\n }\n\n if (target) {\n const targetBCR = target.getBoundingClientRect()\n if (targetBCR.width || targetBCR.height) {\n // TODO (fat): remove sketch reliance on jQuery position/offset\n return [\n $(target)[offsetMethod]().top + offsetBase,\n targetSelector\n ]\n }\n }\n\n return null\n })\n .filter(item => item)\n .sort((a, b) => a[0] - b[0])\n .forEach(item => {\n this._offsets.push(item[0])\n this._targets.push(item[1])\n })\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n $(this._scrollElement).off(EVENT_KEY)\n\n this._element = null\n this._scrollElement = null\n this._config = null\n this._selector = null\n this._offsets = null\n this._targets = null\n this._activeTarget = null\n this._scrollHeight = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...(typeof config === 'object' && config ? config : {})\n }\n\n if (typeof config.target !== 'string' && Util.isElement(config.target)) {\n let id = $(config.target).attr('id')\n if (!id) {\n id = Util.getUID(NAME)\n $(config.target).attr('id', id)\n }\n\n config.target = `#${id}`\n }\n\n Util.typeCheckConfig(NAME, config, DefaultType)\n\n return config\n }\n\n _getScrollTop() {\n return this._scrollElement === window ?\n this._scrollElement.pageYOffset : this._scrollElement.scrollTop\n }\n\n _getScrollHeight() {\n return this._scrollElement.scrollHeight || Math.max(\n document.body.scrollHeight,\n document.documentElement.scrollHeight\n )\n }\n\n _getOffsetHeight() {\n return this._scrollElement === window ?\n window.innerHeight : this._scrollElement.getBoundingClientRect().height\n }\n\n _process() {\n const scrollTop = this._getScrollTop() + this._config.offset\n const scrollHeight = this._getScrollHeight()\n const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight()\n\n if (this._scrollHeight !== scrollHeight) {\n this.refresh()\n }\n\n if (scrollTop >= maxScroll) {\n const target = this._targets[this._targets.length - 1]\n\n if (this._activeTarget !== target) {\n this._activate(target)\n }\n\n return\n }\n\n if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n this._activeTarget = null\n this._clear()\n return\n }\n\n for (let i = this._offsets.length; i--;) {\n const isActiveTarget = this._activeTarget !== this._targets[i] &&\n scrollTop >= this._offsets[i] &&\n (typeof this._offsets[i + 1] === 'undefined' ||\n scrollTop < this._offsets[i + 1])\n\n if (isActiveTarget) {\n this._activate(this._targets[i])\n }\n }\n }\n\n _activate(target) {\n this._activeTarget = target\n\n this._clear()\n\n const queries = this._selector\n .split(',')\n .map(selector => `${selector}[data-target=\"${target}\"],${selector}[href=\"${target}\"]`)\n\n const $link = $([].slice.call(document.querySelectorAll(queries.join(','))))\n\n if ($link.hasClass(CLASS_NAME_DROPDOWN_ITEM)) {\n $link.closest(SELECTOR_DROPDOWN)\n .find(SELECTOR_DROPDOWN_TOGGLE)\n .addClass(CLASS_NAME_ACTIVE)\n $link.addClass(CLASS_NAME_ACTIVE)\n } else {\n // Set triggered link as active\n $link.addClass(CLASS_NAME_ACTIVE)\n // Set triggered links parents as active\n // With both