From 4d3860f9ebf5d0a5ff3cd11c38b5d57b782de97e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 3 Jul 2020 18:00:45 +0300 Subject: [PATCH 001/137] Added book and book type --- docs/en/Tutorials/Part-1.md | 131 ++++-------------- .../images/bookstore-book-and-booktype.png | Bin 0 -> 43075 bytes 2 files changed, 29 insertions(+), 102 deletions(-) create mode 100644 docs/en/Tutorials/images/bookstore-book-and-booktype.png diff --git a/docs/en/Tutorials/Part-1.md b/docs/en/Tutorials/Part-1.md index f7b062aa6e..0a3a14f947 100644 --- a/docs/en/Tutorials/Part-1.md +++ b/docs/en/Tutorials/Part-1.md @@ -1,4 +1,4 @@ -## ASP.NET Core {{UI_Value}} Tutorial - Part 1 +# ASP.NET Core {{UI_Value}} Tutorial - Part 1 ````json //[doc-params] { @@ -20,108 +20,43 @@ else end }} -### About this tutorial: +## About This Tutorial -In this tutorial series, you will build an ABP application named `Acme.BookStore`. In this sample project, we will manage a list of books and authors. **{{DB_Text}}** will be used as the ORM provider. And on the front-end side {{UI_Value}} and JavaScript will be used. +In this tutorial series, you will build an ABP based web application named `Acme.BookStore`. This application is used to manage a list of books and their authors. It is developed using the following technologies: -The ASP.NET Core {{UI_Value}} tutorial series consists of 3 parts: +* **{{DB_Text}}** as the ORM provider. +* **{{UI_Value}}** as the UI Framework. -- **Part-1: Creating the project and book list page (this tutorial)** +This tutorial is organized as the following parts; + +- **Part-1: Creating the project and book list page (this part)** - [Part-2: Creating, updating and deleting books](part-2.md) - [Part-3: Integration tests](part-3.md) -*You can also check out [the video course](https://amazingsolutions.teachable.com/p/lets-build-the-bookstore-application) prepared by the community, based on this tutorial.* - -### Creating the project - -Create a new project named `Acme.BookStore` where `Acme` is the company name and `BookStore` is the project name. You can check out [creating a new project](../Getting-Started-{{if UI == 'NG'}}Angular{{else}}AspNetCore-MVC{{end}}-Template#creating-a-new-project) document to see how you can create a new project. We will create the project with ABP CLI. - -#### Create the project - -By running the below command, it creates a new ABP project with the database provider `{{DB_Text}}` and UI option `{{UI_Value}}`. To see the other CLI options, check out [ABP CLI](https://docs.abp.io/en/abp/latest/CLI) document. - -```bash -abp new Acme.BookStore --template app --database-provider {{DB}} --ui {{UI_Text}} --mobile none -``` -![Creating project](./images/bookstore-create-project-{{UI_Text}}.png) - -### Apply migrations - -After creating the project, you need to apply the initial migrations and create the database. To apply migrations, right click on the `Acme.BookStore.DbMigrator` and click **Debug** > **Start New Instance**. This will run the application and apply all migrations. You will see the below result when it successfully completes the process. The application database is ready! - -![Migrations applied](./images/bookstore-migrations-applied-{{UI_Text}}.png) - -> Alternatively, you can run `Update-Database` command in the Visual Studio > Package Manager Console to apply migrations. - -#### Initial database tables +### Source Code -![Initial database tables](./images/bookstore-database-tables-{{DB}}.png) +You can find the completed solution on {{if UI == "MVC"}}[the GitHub repository](https://github.com/abpframework/abp-samples/tree/master/BookStore-Mvc-EfCore){{else}}[the GitHub repository](https://github.com/abpframework/abp-samples/tree/master/BookStore-Angular-MongoDb){{end}}. -### Run the application +## Creating the Solution -To run the project, right click to the {{if UI == "MVC"}} `Acme.BookStore.Web`{{end}} {{if UI == "NG"}} `Acme.BookStore.HttpApi.Host` {{end}} project and click **Set As StartUp Project**. And run the web project by pressing **CTRL+F5** (*without debugging and fast*) or press **F5** (*with debugging and slow*). {{if UI == "NG"}}You will see the Swagger UI for BookStore API.{{end}} +Before starting to the development, create a new solution named `Acme.BookStore` and run it by following the [getting started tutorial](../Getting-Started-{{if UI == 'NG'}}Angular{{else}}AspNetCore-MVC{{end}}-Template#creating-a-new-project). -Further information, see the [running the application section](../Getting-Started?UI={{UI}}#run-the-application). - -![Set as startup project](./images/bookstore-start-project-{{UI_Text}}.png) - -{{if UI == "NG"}} - -To start Angular project, go to the `angular` folder, open a command line terminal, execute the `yarn` command: - -```bash -yarn -``` - -Once all node modules are loaded, execute the `yarn start` command: - -```bash -yarn start -``` +## Create the Book Entity -The website will be accessible from the following default URL: +**Domain layer** in the startup template is separated into two projects: -http://localhost:4200/ - -If you see the website's landing page successfully, you can exit Angular hosting by pressing `ctrl-c`. (We'll later start it again.) - -> Be aware that, Firefox does not use the Windows Certificate Store, so you'll need to add the self-signed developer certificate to Firefox manually. To do this, open Firefox and navigate to the below URL: -> -> https://localhost:44322/api/abp/application-configuration -> -> If you see the below screen, click the **Accept the Risk and Continue** button to bypass this warning. -> -> ![Set as startup project](./images/mozilla-self-signed-cert-error.png) - -{{end}} - -The default login credentials are; - -* **Username**: admin -* **Password**: 1q2w3E* - -### Solution structure - -This is how the layered solution structure looks like: - -![bookstore-visual-studio-solution](./images/bookstore-solution-structure-{{UI_Text}}.png) - -Check out the [solution structure](../startup-templates/application#solution-structure) section to understand the structure in details. - -### Create the book entity - -Domain layer in the startup template is separated into two projects: - -- `Acme.BookStore.Domain` contains your [entities](https://docs.abp.io/en/abp/latest/Entities), [domain services](https://docs.abp.io/en/abp/latest/Domain-Services) and other core domain objects. +- `Acme.BookStore.Domain` contains your [entities](../Entities.md), [domain services](../Domain-Services.md) and other core domain objects. - `Acme.BookStore.Domain.Shared` contains `constants`, `enums` or other domain related objects those can be shared with clients. -Define [entities](https://docs.abp.io/en/abp/latest/Entities) in the **domain layer** (`Acme.BookStore.Domain` project) of the solution. The main entity of the application is the `Book`. Create a class, named `Book`, in the `Acme.BookStore.Domain` project as shown below: +So, define your entities in the domain layer (`Acme.BookStore.Domain` project) of the solution. + +The main entity of the application is the `Book`. Create a `Books` folder (namespace) in the `Acme.BookStore.Domain` project and add a `Book` class inside it: ````csharp using System; using Volo.Abp.Domain.Entities.Auditing; -namespace Acme.BookStore +namespace Acme.BookStore.Books { public class Book : AuditedAggregateRoot { @@ -132,31 +67,19 @@ namespace Acme.BookStore public DateTime PublishDate { get; set; } public float Price { get; set; } - - protected Book() - { - - } - - public Book(Guid id, string name, BookType type, DateTime publishDate, float price) : - base(id) - { - Name = name; - Type = type; - PublishDate = publishDate; - Price = price; - } } } ```` -* ABP has 2 fundamental base classes for entities: `AggregateRoot` and `Entity`. **Aggregate Root** is one of the **Domain Driven Design (DDD)** concepts. See [entity document](https://docs.abp.io/en/abp/latest/Entities) for details and best practices. -* `Book` entity inherits `AuditedAggregateRoot` which adds some auditing properties (`CreationTime`, `CreatorId`, `LastModificationTime`... etc.) on top of the `AggregateRoot` class. +* ABP Framework has two fundamental base classes for entities: `AggregateRoot` and `Entity`. **Aggregate Root** is a [Domain Driven Design](../Domain-Driven-Design.md) concept which can be thought as a root entity that is directly queried and worked on (see the [entities document](../Entities.md) for more). +* `Book` entity inherits from the `AuditedAggregateRoot` which adds some base [auditing](../Audit-Logging.md) properties (like `CreationTime`, `CreatorId`, `LastModificationTime`...) on top of the `AggregateRoot` class. ABP automatically manages these properties for you. * `Guid` is the **primary key type** of the `Book` entity. -#### BookType enum +> This tutorials leaves the entity properties with **public get/set** for the sake of simplicity. See the [entities document](../Entities.md) if you learn more about DDD best practices. -Create the `BookType` enum in the `Acme.BookStore.Domain.Shared` project: +#### BookType Enum + +The `Book` entity uses the `BookType` enum. Create the `BookType` in the `Acme.BookStore.Domain.Shared` project: ````csharp namespace Acme.BookStore @@ -176,6 +99,10 @@ namespace Acme.BookStore } ```` +The final folder/file structure should be as shown below: + +![bookstore-book-and-booktype](images/bookstore-book-and-booktype.png) + #### Add book entity to the DbContext {{if DB == "ef"}} diff --git a/docs/en/Tutorials/images/bookstore-book-and-booktype.png b/docs/en/Tutorials/images/bookstore-book-and-booktype.png new file mode 100644 index 0000000000000000000000000000000000000000..1620ebf150e0531baab78a1f0d0785417f813839 GIT binary patch literal 43075 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 literal 0 HcmV?d00001 From 1da80929c9fbeea4e1365440a71dd9a2f07923ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 3 Jul 2020 20:29:58 +0300 Subject: [PATCH 002/137] Complete the database migration part --- docs/en/Tutorials/Part-1.md | 161 +++++++++--------- .../bookstore-dbmigrator-on-solution.png | Bin 0 -> 41421 bytes 2 files changed, 85 insertions(+), 76 deletions(-) create mode 100644 docs/en/Tutorials/images/bookstore-dbmigrator-on-solution.png diff --git a/docs/en/Tutorials/Part-1.md b/docs/en/Tutorials/Part-1.md index 0a3a14f947..0c2944346e 100644 --- a/docs/en/Tutorials/Part-1.md +++ b/docs/en/Tutorials/Part-1.md @@ -77,7 +77,7 @@ namespace Acme.BookStore.Books > This tutorials leaves the entity properties with **public get/set** for the sake of simplicity. See the [entities document](../Entities.md) if you learn more about DDD best practices. -#### BookType Enum +### BookType Enum The `Book` entity uses the `BookType` enum. Create the `BookType` in the `Acme.BookStore.Domain.Shared` project: @@ -103,19 +103,18 @@ The final folder/file structure should be as shown below: ![bookstore-book-and-booktype](images/bookstore-book-and-booktype.png) -#### Add book entity to the DbContext +### Add Book Entity to the DbContext {{if DB == "ef"}} EF Core requires to relate entities with your `DbContext`. The easiest way to do this is to add a `DbSet` property to the `BookStoreDbContext` class in the `Acme.BookStore.EntityFrameworkCore` project, as shown below: ````csharp - public class BookStoreDbContext : AbpDbContext - { - public DbSet Users { get; set; } - public DbSet Books { get; set; } //<--added this line--> - //... - } +public class BookStoreDbContext : AbpDbContext +{ + public DbSet Books { get; set; } + //... +} ```` {{end}} @@ -127,9 +126,8 @@ Add a `IMongoCollection Books` property to the `BookStoreMongoDbContext` i ```csharp public class BookStoreMongoDbContext : AbpMongoDbContext { - public IMongoCollection Users => Collection(); - public IMongoCollection Books => Collection();//<--added this line--> - //... + public IMongoCollection Books => Collection(); + //... } ``` @@ -137,36 +135,76 @@ public class BookStoreMongoDbContext : AbpMongoDbContext {{if DB == "ef"}} -#### Configure the book entity +### Map the Book Entity to a Database Table -Open `BookStoreDbContextModelCreatingExtensions.cs` file in the `Acme.BookStore.EntityFrameworkCore` project and add following code to the end of the `ConfigureBookStore` method to configure the Book entity: +Open `BookStoreDbContextModelCreatingExtensions.cs` file in the `Acme.BookStore.EntityFrameworkCore` project and add the mapping code for the `Book` entity. The final class should be the following: ````csharp -builder.Entity(b => +using Acme.BookStore.Books; +using Microsoft.EntityFrameworkCore; +using Volo.Abp; +using Volo.Abp.EntityFrameworkCore.Modeling; + +namespace Acme.BookStore.EntityFrameworkCore { - b.ToTable(BookStoreConsts.DbTablePrefix + "Books", BookStoreConsts.DbSchema); - b.ConfigureByConvention(); //auto configure for the base class props - b.Property(x => x.Name).IsRequired().HasMaxLength(128); -}); + public static class BookStoreDbContextModelCreatingExtensions + { + public static void ConfigureBookStore(this ModelBuilder builder) + { + Check.NotNull(builder, nameof(builder)); + + /* Configure your own tables/entities inside here */ + + builder.Entity(b => + { + b.ToTable(BookStoreConsts.DbTablePrefix + "Books", + BookStoreConsts.DbSchema); + b.ConfigureByConvention(); //auto configure for the base class props + b.Property(x => x.Name).IsRequired().HasMaxLength(128); + }); + } + } +} ```` -Add the `using Volo.Abp.EntityFrameworkCore.Modeling;` statement to resolve `ConfigureByConvention` extension method. +* `BookStoreConsts` has constant values for schema and table prefixes for your tables. You don't have to use it, but suggested to control the table prefixes in a single point. +* `ConfigureByConvention()` method gracefully configures/maps the inherited properties. Always use it for all your entities. + +### Add Database Migration + +The startup template uses [EF Core Code First Migrations](https://docs.microsoft.com/en-us/ef/core/managing-schemas/migrations/) to create and maintain the database schema. Open the **Package Manager Console (PMC)** under the menu *Tools > NuGet Package Manager*. + +![Open Package Manager Console](images/bookstore-open-package-manager-console.png) + +Select the `Acme.BookStore.EntityFrameworkCore.DbMigrations` as the **default project** and execute the following command: + +```bash +Add-Migration "Created_Book_Entity" +``` + +![bookstore-pmc-add-book-migration](./images/bookstore-pmc-add-book-migration-v2.png) + +This will create a new migration class inside the `Migrations` folder of the `Acme.BookStore.EntityFrameworkCore.DbMigrations` project. + +Before updating the database, you will learn how to seed initial data to the database. + +> If you are using another IDE than the Visual Studio, you can use `dotnet-ef` tool as [documented here](https://docs.microsoft.com/en-us/ef/core/managing-schemas/migrations/?tabs=dotnet-core-cli#create-a-migration). {{end}} -{{if DB == "mongodb"}} +### Add Sample Seed Data -#### Add seed (sample) data +> It's good to have some initial data in the database before running the application. This section introduces the [Data Seeding](../Data-Seeding.md) system of the ABP framework. You can skip this section if you don't want to create seed data, but it is suggested to follow it to learn this useful ABP Framework feature. -Adding sample data is optional, but it's good to have initial data in the database for the first run. ABP provides a [data seed system](https://docs.abp.io/en/abp/latest/Data-Seeding). Create a class deriving from the `IDataSeedContributor` in the `*.Domain` project: +Create a class deriving from the `IDataSeedContributor` in the `*.Domain` project and copy the following code: ```csharp using System; using System.Threading.Tasks; +using Acme.BookStore.Books; using Volo.Abp.Data; using Volo.Abp.DependencyInjection; using Volo.Abp.Domain.Repositories; -using Volo.Abp.Guids; namespace Acme.BookStore { @@ -174,14 +212,10 @@ namespace Acme.BookStore : IDataSeedContributor, ITransientDependency { private readonly IRepository _bookRepository; - private readonly IGuidGenerator _guidGenerator; - public BookStoreDataSeederContributor( - IRepository bookRepository, - IGuidGenerator guidGenerator) + public BookStoreDataSeederContributor(IRepository bookRepository) { _bookRepository = bookRepository; - _guidGenerator = guidGenerator; } public async Task SeedAsync(DataSeedContext context) @@ -192,71 +226,46 @@ namespace Acme.BookStore } await _bookRepository.InsertAsync( - new Book( - id: _guidGenerator.Create(), - name: "1984", - type: BookType.Dystopia, - publishDate: new DateTime(1949, 6, 8), - price: 19.84f - ) + new Book + { + Name = "1984", + Type = BookType.Dystopia, + PublishDate = new DateTime(1949, 6, 8), + Price = 19.84f + } ); await _bookRepository.InsertAsync( - new Book( - id: _guidGenerator.Create(), - name: "The Hitchhiker's Guide to the Galaxy", - type: BookType.ScienceFiction, - publishDate: new DateTime(1995, 9, 27), - price: 42.0f - ) + new Book + { + Name = "The Hitchhiker's Guide to the Galaxy", + Type = BookType.ScienceFiction, + PublishDate = new DateTime(1995, 9, 27), + Price = 42.0f + } ); } } } ``` -{{end}} +* This code simply uses the `IRepository` (the default [repository](../Repositories.md)) to insert two books to the database, if there is no book currently in the database. -{{if DB == "ef"}} +### Update the Database -#### Add new migration & update the database +Run the `Acme.BookStore.DbMigrator` application to update the database: -The startup template uses [EF Core Code First Migrations](https://docs.microsoft.com/en-us/ef/core/managing-schemas/migrations/) to create and maintain the database schema. Open the **Package Manager Console (PMC)** under the menu *Tools > NuGet Package Manager*. +![bookstore-dbmigrator-on-solution](images/bookstore-dbmigrator-on-solution.png) -![Open Package Manager Console](./images/bookstore-open-package-manager-console.png) - -Select the `Acme.BookStore.EntityFrameworkCore.DbMigrations` as the **default project** and execute the following command: - -```bash -Add-Migration "Created_Book_Entity" -``` - -![bookstore-pmc-add-book-migration](./images/bookstore-pmc-add-book-migration-v2.png) - -This will create a new migration class inside the `Migrations` folder of the `Acme.BookStore.EntityFrameworkCore.DbMigrations` project. Then execute the `Update-Database` command to update the database schema: - -````bash -Update-Database -```` - -![bookstore-update-database-after-book-entity](./images/bookstore-update-database-after-book-entity.png) - -#### Add initial (sample) data - -`Update-Database` command has created the `AppBooks` table in the database. Open your database and enter a few sample rows, so you can show them on the listing page. +{{if DB == "ef"}} -```mssql -INSERT INTO AppBooks (Id,CreationTime,[Name],[Type],PublishDate,Price) VALUES -('f3c04764-6bfd-49e2-859e-3f9bfda6183e', '2018-07-01', '1984',3,'1949-06-08','19.84') +`.DbMigrator` is a console application that can be run to **migrate the database schema** and **seed the data** on **development** and **production** environments. -INSERT INTO AppBooks (Id,CreationTime,[Name],[Type],PublishDate,Price) VALUES -('13024066-35c9-473c-997b-83cd8d3e29dc', '2018-07-01', 'The Hitchhiker`s Guide to the Galaxy',7,'1995-09-27','42') +{{end}} -INSERT INTO AppBooks (Id,CreationTime,[Name],[Type],PublishDate,Price) VALUES -('4fa024a1-95ac-49c6-a709-6af9e4d54b54', '2018-07-02', 'Pet Sematary',5,'1983-11-14','23.7') -``` +{{if DB == "mongodb"}} -![bookstore-books-table](./images/bookstore-books-table.png) +While MongoDB **doesn't require** a database schema migration, it is still good to run this application since it **seeds the initial data** on the database. This application can be used on **development** and **production** environments. {{end}} diff --git a/docs/en/Tutorials/images/bookstore-dbmigrator-on-solution.png b/docs/en/Tutorials/images/bookstore-dbmigrator-on-solution.png new file mode 100644 index 0000000000000000000000000000000000000000..0b81900307caecffbbf096d0d7c577aa1ca84437 GIT binary patch literal 41421 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˿|)v{ujg7-(lRTEwjI8$wb5Ekb|dVwvv}+AR5LEH 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 I;ik|21soqaIRF3v literal 0 HcmV?d00001 From 134219f43f7ac9ec423bb2980f7726044247d7a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 3 Jul 2020 20:55:12 +0300 Subject: [PATCH 003/137] Cpmpleted the app service part. --- docs/en/Tutorials/Part-1.md | 71 +++++++++++++++++++++---------------- 1 file changed, 40 insertions(+), 31 deletions(-) diff --git a/docs/en/Tutorials/Part-1.md b/docs/en/Tutorials/Part-1.md index 0c2944346e..070630daef 100644 --- a/docs/en/Tutorials/Part-1.md +++ b/docs/en/Tutorials/Part-1.md @@ -269,22 +269,24 @@ While MongoDB **doesn't require** a database schema migration, it is still good {{end}} -### Create the application service +## Create the Application Service -The next step is to create an [application service](../Application-Services.md) to manage the books which will allow us the four basic functions: creating, reading, updating and deleting. Application layer is separated into two projects: +The application layer is separated into two projects: -* `Acme.BookStore.Application.Contracts` mainly contains your `DTO`s and application service interfaces. +* `Acme.BookStore.Application.Contracts` contains your [DTO](../Data-Transfer-Objects.md)s and [application service](../Application-Services.md) interfaces. * `Acme.BookStore.Application` contains the implementations of your application services. -#### BookDto +In this section, you will create an application service to get, create, update and delete books using the `CrudAppService` base class of the ABP Framework. -Create a DTO class named `BookDto` into the `Acme.BookStore.Application.Contracts` project: +### BookDto + +`CrudAppService` base class requires to define the fundamental DTOs for the entity. Create a DTO class named `BookDto` into the `Acme.BookStore.Application.Contracts` project: ````csharp using System; using Volo.Abp.Application.Dtos; -namespace Acme.BookStore +namespace Acme.BookStore.Books { public class BookDto : AuditedEntityDto { @@ -301,11 +303,12 @@ namespace Acme.BookStore * **DTO** classes are used to **transfer data** between the *presentation layer* and the *application layer*. See the [Data Transfer Objects document](https://docs.abp.io/en/abp/latest/Data-Transfer-Objects) for more details. * `BookDto` is used to transfer book data to the presentation layer in order to show the book information on the UI. -* `BookDto` is derived from the `AuditedEntityDto` which has audit properties just like the `Book` class defined above. +* `BookDto` is derived from the `AuditedEntityDto` which has audit properties just like the `Book` entity defined above. -It will be needed to map `Book` entities to `BookDto` objects while returning books to the presentation layer. [AutoMapper](https://automapper.org) library can automate this conversion when you define the proper mapping. The startup template comes with AutoMapper configured, so you can just define the mapping in the `BookStoreApplicationAutoMapperProfile` class in the `Acme.BookStore.Application` project: +It will be needed to map `Book` entities to `BookDto` objects while returning books to the presentation layer. [AutoMapper](https://automapper.org) library can automate this conversion when you define the proper mapping. The startup template comes with AutoMapper pre-configured. So, you can just define the mapping in the `BookStoreApplicationAutoMapperProfile` class in the `Acme.BookStore.Application` project: ````csharp +using Acme.BookStore.Books; using AutoMapper; namespace Acme.BookStore @@ -320,15 +323,17 @@ namespace Acme.BookStore } ```` -#### CreateUpdateBookDto +> See the [object to object mapping](../Object-To-Object-Mapping.md) document for details. -Create a DTO class named `CreateUpdateBookDto` into the `Acme.BookStore.Application.Contracts` project: +### CreateUpdateBookDto + +Create another DTO class named `CreateUpdateBookDto` into the `Acme.BookStore.Application.Contracts` project: ````csharp using System; using System.ComponentModel.DataAnnotations; -namespace Acme.BookStore +namespace Acme.BookStore.Books { public class CreateUpdateBookDto { @@ -351,9 +356,10 @@ namespace Acme.BookStore * This `DTO` class is used to get book information from the user interface while creating or updating a book. * It defines data annotation attributes (like `[Required]`) to define validations for the properties. `DTO`s are [automatically validated](https://docs.abp.io/en/abp/latest/Validation) by the ABP framework. -Next, add a mapping in `BookStoreApplicationAutoMapperProfile` from the `CreateUpdateBookDto` object to the `Book` entity with the `CreateMap();` command: +Just like done for the `BookDto` above, we should define the mapping from the `CreateUpdateBookDto` object to the `Book` entity. The final class will be like shown below: ````csharp +using Acme.BookStore.Books; using AutoMapper; namespace Acme.BookStore @@ -363,30 +369,29 @@ namespace Acme.BookStore public BookStoreApplicationAutoMapperProfile() { CreateMap(); - CreateMap(); //<--added this line--> + CreateMap(); } } } ```` -#### IBookAppService +### IBookAppService -Create an interface named `IBookAppService` in the `Acme.BookStore.Application.Contracts` project: +Next step is to define an interface for the application service. Create an interface named `IBookAppService` in the `Acme.BookStore.Application.Contracts` project: ````csharp using System; using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Services; -namespace Acme.BookStore +namespace Acme.BookStore.Books { public interface IBookAppService : ICrudAppService< //Defines CRUD methods BookDto, //Used to show books Guid, //Primary key of the book entity - PagedAndSortedResultRequestDto, //Used for paging/sorting on getting a list of books - CreateUpdateBookDto, //Used to create a new book - CreateUpdateBookDto> //Used to update a book + PagedAndSortedResultRequestDto, //Used for paging/sorting + CreateUpdateBookDto> //Used to create/update a book { } @@ -394,12 +399,12 @@ namespace Acme.BookStore ```` * Defining interfaces for the application services **are not required** by the framework. However, it's suggested as a best practice. -* `ICrudAppService` defines common **CRUD** methods: `GetAsync`, `GetListAsync`, `CreateAsync`, `UpdateAsync` and `DeleteAsync`. It's not required to extend it. Instead, you could inherit from the empty `IApplicationService` interface and define your own methods manually. -* There are some variations of the `ICrudAppService` where you can use separated DTOs for each method. +* `ICrudAppService` defines common **CRUD** methods: `GetAsync`, `GetListAsync`, `CreateAsync`, `UpdateAsync` and `DeleteAsync`. It's not required to extend it. Instead, you could inherit from the empty `IApplicationService` interface and define your own methods manually (which will be done for the authors in the next parts). +* There are some variations of the `ICrudAppService` where you can use separated DTOs for each method (like using different DTOs for create and update). -#### BookAppService +### BookAppService -Implement the `IBookAppService` as named `BookAppService` in the `Acme.BookStore.Application` project: +Implement the `IBookAppService`, as named `BookAppService`, in the `Acme.BookStore.Application` project: ````csharp using System; @@ -407,12 +412,16 @@ using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Services; using Volo.Abp.Domain.Repositories; -namespace Acme.BookStore +namespace Acme.BookStore.Books { public class BookAppService : - CrudAppService, - IBookAppService + CrudAppService< + Book, //The Book entity + BookDto, //Used to show books + Guid, //Primary key of the book entity + PagedAndSortedResultRequestDto, //Used for paging/sorting + CreateUpdateBookDto>, //Used to create/update a book + IBookAppService //implement the IBookAppService { public BookAppService(IRepository repository) : base(repository) @@ -423,13 +432,13 @@ namespace Acme.BookStore } ```` -* `BookAppService` is derived from `CrudAppService<...>` which implements all the CRUD (create, read, update, delete) methods defined above. +* `BookAppService` is derived from `CrudAppService<...>` which implements all the CRUD (create, read, update, delete) methods defined by the `ICrudAppService`. * `BookAppService` injects `IRepository` which is the default repository for the `Book` entity. ABP automatically creates default repositories for each aggregate root (or entity). See the [repository document](https://docs.abp.io/en/abp/latest/Repositories). -* `BookAppService` uses `IObjectMapper` to map `Book` objects to `BookDto` objects and `CreateUpdateBookDto` objects to `Book` objects. The Startup template uses the [AutoMapper](http://automapper.org/) library as the object mapping provider. We have defined the mappings before, so it will work as expected. +* `BookAppService` uses `IObjectMapper` service ([see](../Object-To-Object-Mapping.md)) to map `Book` objects to `BookDto` objects and `CreateUpdateBookDto` objects to `Book` objects. The Startup template uses the [AutoMapper](http://automapper.org/) library as the object mapping provider. We have defined the mappings before, so it will work as expected. -### Auto API Controllers +## Auto API Controllers -We normally create **Controllers** to expose application services as **HTTP API** endpoints. This allows browsers or 3rd-party clients to call them via AJAX. ABP can [**automagically**](https://docs.abp.io/en/abp/latest/API/Auto-API-Controllers) configures your application services as MVC API Controllers by convention. +In a typical ASP.NET Core application, you create **API Controllers** to expose application services as **HTTP API** endpoints. This allows browsers or 3rd-party clients to call them over HTTP. ABP can [**automagically**](https://docs.abp.io/en/abp/latest/API/Auto-API-Controllers) configures your application services as MVC API Controllers by convention. #### Swagger UI From a6e5595878fda31ae90d96e367320f515f01d828 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 3 Jul 2020 21:08:41 +0300 Subject: [PATCH 004/137] completed the api part. --- docs/en/Tutorials/Part-1.md | 50 ++++++++++++++++++++++++++++++++----- 1 file changed, 44 insertions(+), 6 deletions(-) diff --git a/docs/en/Tutorials/Part-1.md b/docs/en/Tutorials/Part-1.md index 070630daef..d0ec1bee9c 100644 --- a/docs/en/Tutorials/Part-1.md +++ b/docs/en/Tutorials/Part-1.md @@ -186,7 +186,7 @@ Add-Migration "Created_Book_Entity" This will create a new migration class inside the `Migrations` folder of the `Acme.BookStore.EntityFrameworkCore.DbMigrations` project. -Before updating the database, you will learn how to seed initial data to the database. +Before updating the database, read the section below to learn how to seed some initial data to the database. > If you are using another IDE than the Visual Studio, you can use `dotnet-ef` tool as [documented here](https://docs.microsoft.com/en-us/ef/core/managing-schemas/migrations/?tabs=dotnet-core-cli#create-a-migration). @@ -232,7 +232,8 @@ namespace Acme.BookStore Type = BookType.Dystopia, PublishDate = new DateTime(1949, 6, 8), Price = 19.84f - } + }, + autoSave: true ); await _bookRepository.InsertAsync( @@ -242,7 +243,8 @@ namespace Acme.BookStore Type = BookType.ScienceFiction, PublishDate = new DateTime(1995, 9, 27), Price = 42.0f - } + }, + autoSave: true ); } } @@ -438,7 +440,9 @@ namespace Acme.BookStore.Books ## Auto API Controllers -In a typical ASP.NET Core application, you create **API Controllers** to expose application services as **HTTP API** endpoints. This allows browsers or 3rd-party clients to call them over HTTP. ABP can [**automagically**](https://docs.abp.io/en/abp/latest/API/Auto-API-Controllers) configures your application services as MVC API Controllers by convention. +In a typical ASP.NET Core application, you create **API Controllers** to expose application services as **HTTP API** endpoints. This allows browsers or 3rd-party clients to call them over HTTP. + +ABP can [**automagically**](https://docs.abp.io/en/abp/latest/API/Auto-API-Controllers) configures your application services as MVC API Controllers by convention. #### Swagger UI @@ -448,11 +452,45 @@ You will see some built-in service endpoints as well as the `Book` service and i ![bookstore-swagger](./images/bookstore-swagger.png) -Swagger has a nice interface to test the APIs. You can try to execute the `[GET] /api/app/book` API to get a list of books. +Swagger has a nice interface to test the APIs. + +If you try to execute the `[GET] /api/app/book` API to get a list of books, the server returns such a JSON result: + +````json +{ + "totalCount": 2, + "items": [ + { + "name": "The Hitchhiker's Guide to the Galaxy", + "type": 7, + "publishDate": "1995-09-27T00:00:00", + "price": 42, + "lastModificationTime": null, + "lastModifierId": null, + "creationTime": "2020-07-03T21:04:18.4607218", + "creatorId": null, + "id": "86100bb6-cbc1-25be-6643-39f62806969c" + }, + { + "name": "1984", + "type": 3, + "publishDate": "1949-06-08T00:00:00", + "price": 19.84, + "lastModificationTime": null, + "lastModifierId": null, + "creationTime": "2020-07-03T21:04:18.3174016", + "creatorId": null, + "id": "41055277-cce8-37d7-bb37-39f62806960b" + } + ] +} +```` + +That's pretty cool since we haven't written a single line of code to create the API controller, but now we have a fully working REST API! {{if UI == "MVC"}} -### Dynamic JavaScript proxies +## Dynamic JavaScript proxies It's common to call HTTP API endpoints via AJAX from the **JavaScript** side. You can use `$.ajax` or another tool to call the endpoints. However, ABP offers a better way. From 89b4d5d48fd6a4a366ec7acac78ec1a41195e6ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 3 Jul 2020 21:27:37 +0300 Subject: [PATCH 005/137] Dynamic JavaScript Proxies section completed. --- docs/en/Tutorials/Part-1.md | 39 +++++++++++------- .../bookstore-getlist-result-network.png | Bin 0 -> 27382 bytes .../bookstore-javascript-proxy-console.png | Bin 0 -> 73671 bytes 3 files changed, 24 insertions(+), 15 deletions(-) create mode 100644 docs/en/Tutorials/images/bookstore-getlist-result-network.png create mode 100644 docs/en/Tutorials/images/bookstore-javascript-proxy-console.png diff --git a/docs/en/Tutorials/Part-1.md b/docs/en/Tutorials/Part-1.md index d0ec1bee9c..bace3bc76f 100644 --- a/docs/en/Tutorials/Part-1.md +++ b/docs/en/Tutorials/Part-1.md @@ -442,7 +442,7 @@ namespace Acme.BookStore.Books In a typical ASP.NET Core application, you create **API Controllers** to expose application services as **HTTP API** endpoints. This allows browsers or 3rd-party clients to call them over HTTP. -ABP can [**automagically**](https://docs.abp.io/en/abp/latest/API/Auto-API-Controllers) configures your application services as MVC API Controllers by convention. +ABP can [**automagically**](../API/Auto-API-Controllers.md) configures your application services as MVC API Controllers by convention. #### Swagger UI @@ -490,38 +490,45 @@ That's pretty cool since we haven't written a single line of code to create the {{if UI == "MVC"}} -## Dynamic JavaScript proxies +## Dynamic JavaScript Proxies -It's common to call HTTP API endpoints via AJAX from the **JavaScript** side. You can use `$.ajax` or another tool to call the endpoints. However, ABP offers a better way. +It's common to call the HTTP API endpoints via AJAX from the **JavaScript** side. You can use `$.ajax` or another tool to call the endpoints. However, ABP offers a better way. -ABP **dynamically** creates JavaScript **proxies** for all API endpoints. So, you can use any **endpoint** just like calling a **JavaScript function**. +ABP **dynamically** creates **[JavaScript Proxies](../UI/AspNetCore/)** for all API endpoints. So, you can use any **endpoint** just like calling a **JavaScript function**. -#### Testing in developer console of the browser +### Testing in Developer Console of the Browser -You can easily test the JavaScript proxies using your favorite browser's **Developer Console**. Run the application, open your browser's **developer tools** (*shortcut is F12 for Chrome*), switch to the **Console** tab, type the following code and press enter: +You can easily test the JavaScript proxies using your favorite browser's **Developer Console**. Run the application, open your browser's **developer tools** (*shortcut is generally F12*), switch to the **Console** tab, type the following code and press enter: ````js -acme.bookStore.book.getList({}).done(function (result) { console.log(result); }); +acme.bookStore.books.book.getList({}).done(function (result) { console.log(result); }); ```` -* `acme.bookStore` is the namespace of the `BookAppService` converted to [camelCase](https://en.wikipedia.org/wiki/Camel_case). +* `acme.bookStore.books` is the namespace of the `BookAppService` converted to [camelCase](https://en.wikipedia.org/wiki/Camel_case). * `book` is the conventional name for the `BookAppService` (removed `AppService` postfix and converted to camelCase). -* `getList` is the conventional name for the `GetListAsync` method defined in the `AsyncCrudAppService` base class (removed `Async` postfix and converted to camelCase). -* `{}` argument is used to send an empty object to the `GetListAsync` method which normally expects an object of type `PagedAndSortedResultRequestDto` that is used to send paging and sorting options to the server (all properties are optional, so you can send an empty object). -* `getList` function returns a `promise`. You can pass a callback to the `done` (or `then`) function to get the result from the server. +* `getList` is the conventional name for the `GetListAsync` method defined in the `CrudAppService` base class (removed `Async` postfix and converted to camelCase). +* `{}` argument is used to send an empty object to the `GetListAsync` method which normally expects an object of type `PagedAndSortedResultRequestDto` that is used to send paging and sorting options to the server (all properties are optional with default values, so you can send an empty object). +* `getList` function returns a `promise`. You can pass a callback to the `then` (or `done`) function to get the result returned from the server. Running this code produces the following output: -![bookstore-test-js-proxy-getlist](./images/bookstore-test-js-proxy-getlist.png) +![bookstore-javascript-proxy-console](images/bookstore-javascript-proxy-console.png) You can see the **book list** returned from the server. You can also check the **network** tab of the developer tools to see the client to server communication: -![bookstore-test-js-proxy-getlist-network](./images/bookstore-test-js-proxy-getlist-network.png) +![bookstore-getlist-result-network](images/bookstore-getlist-result-network.png) Let's **create a new book** using the `create` function: ````js -acme.bookStore.book.create({ name: 'Foundation', type: 7, publishDate: '1951-05-24', price: 21.5 }).done(function (result) { console.log('successfully created the book with id: ' + result.id); }); +acme.bookStore.books.book.create({ + name: 'Foundation', + type: 7, + publishDate: '1951-05-24', + price: 21.5 + }).then(function (result) { + console.log('successfully created the book with id: ' + result.id); + }); ```` You should see a message in the console something like that: @@ -532,9 +539,11 @@ successfully created the book with id: 439b0ea8-923e-8e1e-5d97-39f2c7ac4246 Check the `Books` table in the database to see the new book row. You can try `get`, `update` and `delete` functions yourself. +We will use these dynamic proxy functions in the next sections to communicate to the server. + ### Create the books page -It's time to create something visible and usable! Instead of classic MVC, we will use the new [Razor Pages UI](https://docs.microsoft.com/en-us/aspnet/core/tutorials/razor-pages/razor-pages-start) approach which is recommended by Microsoft. +It's time to create something visible and usable! Instead of classic MVC, we will use the [Razor Pages UI](https://docs.microsoft.com/en-us/aspnet/core/tutorials/razor-pages/razor-pages-start) approach which is recommended by Microsoft. Create `Books` folder under the `Pages` folder of the `Acme.BookStore.Web` project. Add a new Razor Page by right clicking the Books folder then selecting **Add > Razor Page** menu item. Name it as `Index`: diff --git a/docs/en/Tutorials/images/bookstore-getlist-result-network.png b/docs/en/Tutorials/images/bookstore-getlist-result-network.png new file mode 100644 index 0000000000000000000000000000000000000000..141f9d14eeb330f78ad7dcbf3955f6bcccd96cf0 GIT binary patch literal 27382 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 literal 0 HcmV?d00001 diff --git a/docs/en/Tutorials/images/bookstore-javascript-proxy-console.png b/docs/en/Tutorials/images/bookstore-javascript-proxy-console.png new file mode 100644 index 0000000000000000000000000000000000000000..f393c47875bba10b8bd0f42bb2fa2f5fe9725830 GIT binary patch literal 73671 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 Date: Fri, 3 Jul 2020 21:54:23 +0300 Subject: [PATCH 006/137] Create a Books Page --- docs/en/Tutorials/Part-1.md | 66 ++++++++++++++++--------------------- 1 file changed, 29 insertions(+), 37 deletions(-) diff --git a/docs/en/Tutorials/Part-1.md b/docs/en/Tutorials/Part-1.md index bace3bc76f..ecb477beb3 100644 --- a/docs/en/Tutorials/Part-1.md +++ b/docs/en/Tutorials/Part-1.md @@ -541,7 +541,7 @@ Check the `Books` table in the database to see the new book row. You can try `ge We will use these dynamic proxy functions in the next sections to communicate to the server. -### Create the books page +## Create a Books Page It's time to create something visible and usable! Instead of classic MVC, we will use the [Razor Pages UI](https://docs.microsoft.com/en-us/aspnet/core/tutorials/razor-pages/razor-pages-start) approach which is recommended by Microsoft. @@ -551,8 +551,6 @@ Create `Books` folder under the `Pages` folder of the `Acme.BookStore.Web` proje Open the `Index.cshtml` and change the whole content as shown below: -**Index.cshtml:** - ````html @page @using Acme.BookStore.Web.Pages.Books @@ -561,12 +559,7 @@ Open the `Index.cshtml` and change the whole content as shown below:

Books

```` - -* Set the `IndexModel`'s namespace to `Acme.BookStore.Pages.Books` in `Index.cshtml.cs`. - - - -**Index.cshtml.cs:** +`Index.cshtml.cs` content should be like that: ```csharp using Microsoft.AspNetCore.Mvc.RazorPages; @@ -577,46 +570,41 @@ namespace Acme.BookStore.Web.Pages.Books { public void OnGet() { - + } } } ``` -#### Add books page to the main menu +### Add Books Page to the Main Menu Open the `BookStoreMenuContributor` class in the `Menus` folder and add the following code to the end of the `ConfigureMainMenuAsync` method: ````csharp -//... -namespace Acme.BookStore.Web.Menus -{ - public class BookStoreMenuContributor : IMenuContributor - { - private async Task ConfigureMainMenuAsync(MenuConfigurationContext context) - { - //<-- added the below code - context.Menu.AddItem( - new ApplicationMenuItem("BooksStore", l["Menu:BookStore"], icon: "fa fa-book") - .AddItem( - new ApplicationMenuItem("BooksStore.Books", l["Menu:Books"], url: "/Books") - ) - ); - //--> - } - } -} +context.Menu.AddItem( + new ApplicationMenuItem( + "BooksStore", + l["Menu:BookStore"], + icon: "fa fa-book" + ).AddItem( + new ApplicationMenuItem( + "BooksStore.Books", + l["Menu:Books"], + url: "/Books" + ) + ) +); ```` {{end}} -#### Localize the menu items +### Localization Localization texts are located under the `Localization/BookStore` folder of the `Acme.BookStore.Domain.Shared` project: ![bookstore-localization-files](./images/bookstore-localization-files-v2.png) -Open the `en.json` (*English translations*) file and add the below localization texts to the end of the file: +Open the `en.json` (*the English translations*) file and change the content as below: ````json { @@ -625,7 +613,6 @@ Open the `en.json` (*English translations*) file and add the below localization "Menu:Home": "Home", "Welcome": "Welcome", "LongWelcomeMessage": "Welcome to the application. This is a startup project based on the ABP framework. For more information, visit abp.io.", - "Menu:BookStore": "Book Store", "Menu:Books": "Books", "Actions": "Actions", @@ -650,18 +637,23 @@ Open the `en.json` (*English translations*) file and add the below localization } ```` -* ABP's localization system is built on [ASP.NET Core's standard localization](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/localization) system and extends it in many ways. See the [localization document](https://docs.abp.io/en/abp/latest/Localization) for details. -* Localization key names are arbitrary. You can set any name. As a best practice, we prefer to add `Menu:` prefix for menu items to distinguish from other texts. If a text is not defined in the localization file, it **fallbacks** to the localization key (as ASP.NET Core's standard behavior). +* Localization key names are arbitrary. You can set any name. We prefer some conventions for specific text types; + * Add `Menu:` prefix for menu items. + * Use `Enum::` naming convention to localize the enum members. When you do it like that, ABP can automatically localize the enums. + +If a text is not defined in the localization file, it **fallbacks** to the localization key (as ASP.NET Core's standard behavior). + +> ABP's localization system is built on [ASP.NET Core's standard localization](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/localization) system and extends it in many ways. See the [localization document](../Localization.md) for details. {{if UI == "MVC"}} -Run the project, login to the application with the username `admin` and password `1q2w3E*` and see the new menu item has been added to the menu. +Run the project, login to the application with the username `admin` and the password `1q2w3E*` and see the new menu item has been added to the main menu: ![bookstore-menu-items](./images/bookstore-new-menu-item.png) -When you click to the Books menu item under the Book Store parent, you are being redirected to the new Books page. +When you click to the Books menu item under the Book Store parent, you are being redirected to the new empty Books Page. -#### Book list +### Book list We will use the [Datatables.net](https://datatables.net/) jQuery plugin to show the book list. [Datatables](https://datatables.net/) can completely work via AJAX, it is fast, popular and provides a good user experience. [Datatables](https://datatables.net/) plugin is configured in the startup template, so you can directly use it in any page without including any style or script file to your page. From 5b98bee7d252bdf215b4f00e88691c723535651f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 3 Jul 2020 22:24:58 +0300 Subject: [PATCH 007/137] Completed the MVC part. --- docs/en/Tutorials/Part-1.md | 126 +++++++++++------- .../images/bookstore-book-list-3.png | Bin 0 -> 75431 bytes .../images/bookstore-index-js-file-v3.png | Bin 0 -> 9763 bytes 3 files changed, 81 insertions(+), 45 deletions(-) create mode 100644 docs/en/Tutorials/images/bookstore-book-list-3.png create mode 100644 docs/en/Tutorials/images/bookstore-index-js-file-v3.png diff --git a/docs/en/Tutorials/Part-1.md b/docs/en/Tutorials/Part-1.md index ecb477beb3..6ca1e802ba 100644 --- a/docs/en/Tutorials/Part-1.md +++ b/docs/en/Tutorials/Part-1.md @@ -631,7 +631,7 @@ Open the `en.json` (*the English translations*) file and change the content as b "Enum:BookType:4": "Fantastic", "Enum:BookType:5": "Horror", "Enum:BookType:6": "Science", - "Enum:BookType:7": "ScienceFiction", + "Enum:BookType:7": "Science fiction", "Enum:BookType:8": "Poetry" } } @@ -639,7 +639,7 @@ Open the `en.json` (*the English translations*) file and change the content as b * Localization key names are arbitrary. You can set any name. We prefer some conventions for specific text types; * Add `Menu:` prefix for menu items. - * Use `Enum::` naming convention to localize the enum members. When you do it like that, ABP can automatically localize the enums. + * Use `Enum::` naming convention to localize the enum members. When you do it like that, ABP can automatically localize the enums in some proper cases. If a text is not defined in the localization file, it **fallbacks** to the localization key (as ASP.NET Core's standard behavior). @@ -653,80 +653,116 @@ Run the project, login to the application with the username `admin` and the pass When you click to the Books menu item under the Book Store parent, you are being redirected to the new empty Books Page. -### Book list +### Book List -We will use the [Datatables.net](https://datatables.net/) jQuery plugin to show the book list. [Datatables](https://datatables.net/) can completely work via AJAX, it is fast, popular and provides a good user experience. [Datatables](https://datatables.net/) plugin is configured in the startup template, so you can directly use it in any page without including any style or script file to your page. +We will use the [Datatables.net](https://datatables.net/) jQuery library to show the book list. Datatables library completely work via AJAX, it is fast, popular and provides a good user experience. -##### Index.cshtml +> Datatables library is configured in the startup template, so you can directly use it in any page without including any style or script file to your page. + +#### Index.cshtml Change the `Pages/Books/Index.cshtml` as following: ````html @page -@model Acme.BookStore.Web.Pages.Books.IndexModel +@using Acme.BookStore.Localization +@using Acme.BookStore.Web.Pages.Books +@using Microsoft.Extensions.Localization +@model IndexModel +@inject IStringLocalizer L @section scripts { - + }

@L["Books"]

- - - - @L["Name"] - @L["Type"] - @L["PublishDate"] - @L["Price"] - @L["CreationTime"] - - - +
```` -* `abp-script` [tag helper](https://docs.microsoft.com/en-us/aspnet/core/mvc/views/tag-helpers/intro) is used to add external **scripts** to the page. It has many additional features compared to standard `script` tag. It handles **minification** and **versioning**. See the [bundling & minification document](https://docs.abp.io/en/abp/latest/UI/AspNetCore/Bundling-Minification) for details. -* `abp-card` and `abp-table` are **tag helpers** for Twitter Bootstrap's [card component](http://getbootstrap.com/docs/4.1/components/card/). There are other useful tag helpers in ABP to easily use most of the [bootstrap](https://getbootstrap.com/) components. You can also use regular HTML tags instead of these tag helpers, but using tag helpers reduces HTML code and prevents errors by help the of IntelliSense and compile time type checking. Further information, see the [tag helpers](https://docs.abp.io/en/abp/latest/UI/AspNetCore/Tag-Helpers/Index) document. -* You can **localize** the column names in the localization file as you did for the menu items above. +* `abp-script` [tag helper](https://docs.microsoft.com/en-us/aspnet/core/mvc/views/tag-helpers/intro) is used to add external **scripts** to the page. It has many additional features compared to standard `script` tag. It handles **minification** and **versioning**. See the [bundling & minification document](../UI/AspNetCore/Bundling-Minification.md) for details. +* `abp-card` is a tag helper for Twitter Bootstrap's [card component](https://getbootstrap.com/docs/4.5/components/card/). There are other useful tag helpers provided by the ABP Framework to easily use most of the [bootstrap](https://getbootstrap.com/) components. You could use the regular HTML tags instead of these tag helpers, but using tag helpers reduces HTML code and prevents errors by help the of IntelliSense and compile time type checking. Further information, see the [tag helpers](../UI/AspNetCore/Tag-Helpers/Index.md) document. -##### Add a Script File +#### Index.js -Create `index.js` JavaScript file under the `Pages/Books/` folder: +Create an `Index.js` file under the `Pages/Books` folder: -![bookstore-index-js-file](./images/bookstore-index-js-file-v2.png) +![bookstore-index-js-file](./images/bookstore-index-js-file-v3.png) -`index.js` content is shown below: +The content of the file is shown below: ````js $(function () { - var dataTable = $('#BooksTable').DataTable(abp.libs.datatables.normalizeConfiguration({ - ajax: abp.libs.datatables.createAjax(acme.bookStore.book.getList), - columnDefs: [ - { data: "name" }, - { data: "type", - render: function(data){ - return l('Enum:BookType:' + data); - } - }, - { data: "publishDate" }, - { data: "price" }, - { data: "creationTime" } - ] - })); + var l = abp.localization.getResource('BookStore'); + + var dataTable = $('#BooksTable').DataTable( + abp.libs.datatables.normalizeConfiguration({ + ajax: abp.libs.datatables.createAjax(acme.bookStore.books.book.getList), + columnDefs: [ + { + title: l('Name'), + data: "name" + }, + { + title: l('Type'), + data: "type", + render: function (data) { + console.log(data); + return l('Enum:BookType:' + data); + } + }, + { + title: l('PublishDate'), + data: "publishDate", + render: function (data) { + return luxon + .DateTime + .fromISO(data, { + locale: abp.localization.currentCulture.name + }).toLocaleString(); + } + }, + { + title: l('Price'), + data: "price" + }, + { + title: l('CreationTime'), data: "creationTime", + render: function (data) { + return luxon + .DateTime + .fromISO(data, { + locale: abp.localization.currentCulture.name + }).toLocaleString(luxon.DateTime.DATETIME_SHORT); + } + } + ] + } + ) + ); + }); ```` -* `abp.libs.datatables.createAjax` is a helper function to adapt ABP's dynamic JavaScript API proxies to [Datatable](https://datatables.net/)'s format. -* `abp.libs.datatables.normalizeConfiguration` is another helper function. There's no requirement to use it, but it simplifies the [Datatables](https://datatables.net/) configuration by providing conventional values for missing options. -* `acme.bookStore.book.getList` is the function to get list of books (as described in [dynamic JavaScript proxies](#dynamic-javascript-proxies)). -* See [Datatables documentation](https://datatables.net/manual/) for all configuration options. +* `abp.localization.getResource` gets a function that is used to localize text using the same JSON file defined in the server side. In this way, you can share the localization values with the client side. +* `abp.libs.datatables.normalizeConfiguration` is a helper function defined by the ABP Framework. There's no requirement to use it, but it simplifies the [Datatables](https://datatables.net/) configuration by providing conventional default values for missing options. +* `abp.libs.datatables.createAjax` is another helper function to adapt ABP's dynamic JavaScript API proxies to [Datatable](https://datatables.net/)'s expected parameter format +* `acme.bookStore.books.book.getList` is the dynamic JavaScript proxy function introduced before. +* [luxon](https://moment.github.io/luxon/) library is also a standard library that is pre-configured in the solution, so you can use to perform date/time operations easily. + +> See [Datatables documentation](https://datatables.net/manual/) for all configuration options. + +## Run the Final Application + +You can run the application! The final UI of this part is shown below: -It's end of this part. The final UI of this work is shown as below: +![Book list](images/bookstore-book-list-3.png) -![Book list](./images/bookstore-book-list-2.png) +This is a fully working, server side paged, sorted and localized table of books. {{end}} diff --git a/docs/en/Tutorials/images/bookstore-book-list-3.png b/docs/en/Tutorials/images/bookstore-book-list-3.png new file mode 100644 index 0000000000000000000000000000000000000000..cbd7ec4a6a1207b780bfa0a871b50af4cfa74531 GIT binary patch literal 75431 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 z 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 Date: Fri, 3 Jul 2020 22:27:36 +0300 Subject: [PATCH 008/137] Update Part-1.md --- docs/en/Tutorials/Part-1.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/en/Tutorials/Part-1.md b/docs/en/Tutorials/Part-1.md index 6ca1e802ba..10b0a3360d 100644 --- a/docs/en/Tutorials/Part-1.md +++ b/docs/en/Tutorials/Part-1.md @@ -768,8 +768,8 @@ This is a fully working, server side paged, sorted and localized table of books. {{if UI == "NG"}} -### Angular development -#### Create the books page +## Angular UI Development +### Create the books page It's time to create something visible and usable! There are some tools that we will use when developing ABP Angular frontend application: @@ -778,7 +778,7 @@ It's time to create something visible and usable! There are some tools that we w - [ngx-datatable](https://swimlane.gitbook.io/ngx-datatable/) will be used as the datatable library. - [Visual Studio Code](https://code.visualstudio.com/) will be used as the code editor (you can use your favorite editor). -#### Install NPM packages +### Install NPM packages Open a new command line interface (terminal window) and go to your `angular` folder and then run `yarn` command to install NPM packages: @@ -786,7 +786,7 @@ Open a new command line interface (terminal window) and go to your `angular` fol yarn ``` -#### BookModule +### BookModule Run the following command line to create a new module, named `BookModule`: @@ -796,7 +796,7 @@ yarn ng generate module book --routing true ![Generating books module](./images/bookstore-creating-book-module-terminal.png) -#### Routing +### Routing Open the `app-routing.module.ts` file in `src\app` folder and add a route as shown below: @@ -849,7 +849,7 @@ function configureRoutes(routes: RoutesService) { For more information, see the [RoutesService document](https://docs.abp.io/en/abp/latest/UI/Angular/Modifying-the-Menu.md#via-routesservice). -#### Book list component +#### Book List Component Run the command below on the terminal in the root folder to generate a new component, named book-list: @@ -915,7 +915,7 @@ Open the browser and navigate to http://localhost:4200/books. We'll see **book-l ![Initial book list page](./images/bookstore-initial-book-list-page.png) -#### Generate proxies +### Generate Proxies ABP CLI provides `generate-proxy` command that generates client proxies for your HTTP APIs to make easy to consume your services from the client side. Before running generate-proxy command, your host must be up and running. See the [CLI documentation](../CLI.md) @@ -931,7 +931,7 @@ The generated files looks like below: ![Generated files](./images/generated-proxies.png) -#### BookListComponent +### BookListComponent Open the `book-list.component.ts` file in `app\book\book-list` folder and replace the content as below: @@ -1018,6 +1018,6 @@ In this tutorial we have applied the rules of official [Angular Style Guide](htt {{end}} -### Next Part +## Next Part See the [part 2](./Part-2.md) for creating, updating and deleting books. From 430e0049c85a704946ad5ddb39355ec001d23347 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Sat, 4 Jul 2020 22:38:26 +0300 Subject: [PATCH 009/137] Revised Creating a New Book section --- docs/en/Tutorials/Part-1.md | 5 +- docs/en/Tutorials/Part-2.md | 96 +++++++++++++----- .../images/bookstore-new-book-button-2.png | Bin 0 -> 84177 bytes 3 files changed, 74 insertions(+), 27 deletions(-) create mode 100644 docs/en/Tutorials/images/bookstore-new-book-button-2.png diff --git a/docs/en/Tutorials/Part-1.md b/docs/en/Tutorials/Part-1.md index 10b0a3360d..00e0852d37 100644 --- a/docs/en/Tutorials/Part-1.md +++ b/docs/en/Tutorials/Part-1.md @@ -347,7 +347,8 @@ namespace Acme.BookStore.Books public BookType Type { get; set; } = BookType.Undefined; [Required] - public DateTime PublishDate { get; set; } + [DataType(DataType.Date)] + public DateTime PublishDate { get; set; } = DateTime.Now; [Required] public float Price { get; set; } @@ -1020,4 +1021,4 @@ In this tutorial we have applied the rules of official [Angular Style Guide](htt ## Next Part -See the [part 2](./Part-2.md) for creating, updating and deleting books. +See the [part 2](Part-2.md) for creating, updating and deleting books. diff --git a/docs/en/Tutorials/Part-2.md b/docs/en/Tutorials/Part-2.md index 0a48866956..77b8986dd5 100644 --- a/docs/en/Tutorials/Part-2.md +++ b/docs/en/Tutorials/Part-2.md @@ -1,4 +1,4 @@ -## ASP.NET Core {{UI_Value}} Tutorial - Part 2 +# ASP.NET Core {{UI_Value}} Tutorial - Part 2 ````json //[doc-params] { @@ -21,36 +21,40 @@ else end }} -### About this tutorial +## About This Tutorial -This is the second part of the ASP.NET Core {{UI_Value}} tutorial series. All parts: +In this tutorial series, you will build an ABP based web application named `Acme.BookStore`. This application is used to manage a list of books and their authors. It is developed using the following technologies: -* [Part I: Creating the project and book list page](part-1.md) -* **Part II: Creating, updating and deleting books (this tutorial)** -* [Part III: Integration tests](part-3.md) +* **{{DB_Text}}** as the ORM provider. +* **{{UI_Value}}** as the UI Framework. -*You can also watch [this video course](https://amazingsolutions.teachable.com/p/lets-build-the-bookstore-application) prepared by an ABP community member, based on this tutorial.* +This tutorial is organized as the following parts; + +- [Part I: Creating the project and book list page](part-1.md) +- **Part-2: Creating, updating and deleting books (this part)** +- [Part-3: Integration tests](part-3.md) {{if UI == "MVC"}} -### Creating a new book +## Creating a New Book -In this section, you will learn how to create a new modal dialog form to create a new book. The modal dialog will look like in the below image: +In this section, you will learn how to create a new modal dialog form to create a new book. The modal dialog will look like in the image below: ![bookstore-create-dialog](./images/bookstore-create-dialog-2.png) -#### Create the modal form +### Create the Modal Form Create a new razor page, named `CreateModal.cshtml` under the `Pages/Books` folder of the `Acme.BookStore.Web` project. ![bookstore-add-create-dialog](./images/bookstore-add-create-dialog-v2.png) -##### CreateModal.cshtml.cs +#### CreateModal.cshtml.cs Open the `CreateModal.cshtml.cs` file (`CreateModalModel` class) and replace with the following code: ````C# using System.Threading.Tasks; +using Acme.BookStore.Books; using Microsoft.AspNetCore.Mvc; namespace Acme.BookStore.Web.Pages.Books @@ -67,6 +71,11 @@ namespace Acme.BookStore.Web.Pages.Books _bookAppService = bookAppService; } + public void OnGet() + { + Book = new CreateUpdateBookDto(); + } + public async Task OnPostAsync() { await _bookAppService.CreateAsync(Book); @@ -76,21 +85,24 @@ namespace Acme.BookStore.Web.Pages.Books } ```` -* This class is derived from the `BookStorePageModel` instead of standard `PageModel`. `BookStorePageModel` inherits the `PageModel` and adds some common properties & methods that can be used in your page model classes. +* This class is derived from the `BookStorePageModel` instead of standard `PageModel`. `BookStorePageModel` indirectly inherits the `PageModel` and adds some common properties & methods that can be shared in your page model classes. * `[BindProperty]` attribute on the `Book` property binds post request data to this property. * This class simply injects the `IBookAppService` in the constructor and calls the `CreateAsync` method in the `OnPostAsync` handler. +* It creates a new `CreateUpdateBookDto` object in the `OnGet` method. ASP.NET Core can work without creating a new instance like that. However, it doesn't create an instance for you and if your class has some default value assignments or code execution in the class constructor, they won't work. For this case, we set default values for some of the `CreateUpdateBookDto` properties. -##### CreateModal.cshtml +#### CreateModal.cshtml Open the `CreateModal.cshtml` file and paste the code below: ````html @page +@using Acme.BookStore.Localization +@using Acme.BookStore.Web.Pages.Books +@using Microsoft.Extensions.Localization @using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal -@model Acme.BookStore.Web.Pages.Books.CreateModalModel -@{ - Layout = null; -} +@model CreateModalModel +@inject IStringLocalizer L + @@ -102,12 +114,12 @@ Open the `CreateModal.cshtml` file and paste the code below: ```` -* This modal uses `abp-dynamic-form` tag helper to automatically create the form from the model `CreateBookViewModel`. +* This modal uses `abp-dynamic-form` [tag helper](../UI/AspNetCore/Tag-Helpers/Dynamic-Forms.md) to automatically create the form from the `CreateBookViewModel` model class. * `abp-model` attribute indicates the model object where it's the `Book` property in this case. * `data-ajaxForm` attribute sets the form to submit via AJAX, instead of a classic page post. * `abp-form-content` tag helper is a placeholder to render the form controls (it is optional and needed only if you have added some other content in the `abp-dynamic-form` tag, just like in this page). -#### Add the "New book" button +### Add the "New book" Button Open the `Pages/Books/Index.cshtml` and set the content of `abp-card-header` tag as below: @@ -115,23 +127,57 @@ Open the `Pages/Books/Index.cshtml` and set the content of `abp-card-header` tag -

@L["Books"]

+ @L["Books"] + button-type="Primary"/> ```` +The final content of the `Index.cshtml` is shown below: + +````html +@page +@using Acme.BookStore.Localization +@using Acme.BookStore.Web.Pages.Books +@using Microsoft.Extensions.Localization +@model IndexModel +@inject IStringLocalizer L +@section scripts +{ + +} + + + + + + @L["Books"] + + + + + + + + + + +```` + This adds a new button called **New book** to the **top-right** of the table: -![bookstore-new-book-button](./images/bookstore-new-book-button.png) +![bookstore-new-book-button](./images/bookstore-new-book-button-2.png) -Open the `pages/books/index.js` and add the following code just after the `Datatable` configuration: +Open the `Pages/Books/Index.js` and add the following code just after the `Datatable` configuration: ````js var createModal = new abp.ModalManager(abp.appPath + 'Books/CreateModal'); @@ -148,9 +194,9 @@ $('#NewBookButton').click(function (e) { * `abp.ModalManager` is a helper class to manage modals in the client side. It internally uses Twitter Bootstrap's standard modal, but abstracts many details by providing a simple API. -Now, you can **run the application** and add new books using the new modal form. +Now, you can **run the application** and add some new books using the new modal form. -### Updating a book +## Updating a Book Create a new razor page, named `EditModal.cshtml` under the `Pages/Books` folder of the `Acme.BookStore.Web` project: diff --git a/docs/en/Tutorials/images/bookstore-new-book-button-2.png b/docs/en/Tutorials/images/bookstore-new-book-button-2.png new file mode 100644 index 0000000000000000000000000000000000000000..12f18196888ad8ff03f1d7e062f99d74fa61aa5c GIT binary patch literal 84177 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

+%VocP>a)?sWz=K~W0Z|%3Ew^DG?tR0bX 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 D|7}&+ literal 0 HcmV?d00001 From 86218ad0644c121bf26b7249f45ba39b0ea80374 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Sat, 4 Jul 2020 23:35:21 +0300 Subject: [PATCH 010/137] Finalize the part-2 for the mvc ui --- docs/en/Tutorials/Part-2.md | 394 +++++++++++------- .../images/bookstore-edit-button-2.png | Bin 0 -> 94543 bytes 2 files changed, 254 insertions(+), 140 deletions(-) create mode 100644 docs/en/Tutorials/images/bookstore-edit-button-2.png diff --git a/docs/en/Tutorials/Part-2.md b/docs/en/Tutorials/Part-2.md index 77b8986dd5..694d20ed09 100644 --- a/docs/en/Tutorials/Part-2.md +++ b/docs/en/Tutorials/Part-2.md @@ -102,8 +102,10 @@ Open the `CreateModal.cshtml` file and paste the code below: @using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal @model CreateModalModel @inject IStringLocalizer L - - +@{ + Layout = null; +} + @@ -115,9 +117,10 @@ Open the `CreateModal.cshtml` file and paste the code below: ```` * This modal uses `abp-dynamic-form` [tag helper](../UI/AspNetCore/Tag-Helpers/Dynamic-Forms.md) to automatically create the form from the `CreateBookViewModel` model class. - * `abp-model` attribute indicates the model object where it's the `Book` property in this case. - * `data-ajaxForm` attribute sets the form to submit via AJAX, instead of a classic page post. - * `abp-form-content` tag helper is a placeholder to render the form controls (it is optional and needed only if you have added some other content in the `abp-dynamic-form` tag, just like in this page). +* `abp-model` attribute indicates the model object where it's the `Book` property in this case. +* `abp-form-content` tag helper is a placeholder to render the form controls (it is optional and needed only if you have added some other content in the `abp-dynamic-form` tag, just like in this page). + +> Tip: `Layout` should be `null` just as done in this example since we don't want to include all the layout for the modals when they are loaded via AJAX. ### Add the "New book" Button @@ -193,6 +196,73 @@ $('#NewBookButton').click(function (e) { ```` * `abp.ModalManager` is a helper class to manage modals in the client side. It internally uses Twitter Bootstrap's standard modal, but abstracts many details by providing a simple API. +* `createModal.onResult(...)` used to refresh the data table after creating a new book. +* `createModal.open();` is used to open the model to create a new book. + +The final content of the `Index.js` should be like that: + +````js +$(function () { + var l = abp.localization.getResource('BookStore'); + + var dataTable = $('#BooksTable').DataTable( + abp.libs.datatables.normalizeConfiguration({ + ajax: abp.libs.datatables.createAjax(acme.bookStore.books.book.getList), + columnDefs: [ + { + title: l('Name'), + data: "name" + }, + { + title: l('Type'), + data: "type", + render: function (data) { + return l('Enum:BookType:' + data); + } + }, + { + title: l('PublishDate'), + data: "publishDate", + render: function (data) { + return luxon + .DateTime + .fromISO(data, { + locale: abp.localization.currentCulture.name + }).toLocaleString(); + } + }, + { + title: l('Price'), + data: "price" + }, + { + title: l('CreationTime'), data: "creationTime", + render: function (data) { + return luxon + .DateTime + .fromISO(data, { + locale: abp.localization.currentCulture.name + }).toLocaleString(luxon.DateTime.DATETIME_SHORT); + } + } + ] + } + ) + ); + + var createModal = new abp.ModalManager(abp.appPath + 'Books/CreateModal'); + + createModal.onResult(function () { + dataTable.ajax.reload(); + }); + + $('#NewBookButton').click(function (e) { + e.preventDefault(); + createModal.open(); + }); + +}); +```` Now, you can **run the application** and add some new books using the new modal form. @@ -202,13 +272,14 @@ Create a new razor page, named `EditModal.cshtml` under the `Pages/Books` folder ![bookstore-add-edit-dialog](./images/bookstore-add-edit-dialog.png) -#### EditModal.cshtml.cs +### EditModal.cshtml.cs Open the `EditModal.cshtml.cs` file (`EditModalModel` class) and replace with the following code: ````csharp using System; using System.Threading.Tasks; +using Acme.BookStore.Books; using Microsoft.AspNetCore.Mvc; namespace Acme.BookStore.Web.Pages.Books @@ -245,10 +316,10 @@ namespace Acme.BookStore.Web.Pages.Books ```` * `[HiddenInput]` and `[BindProperty]` are standard ASP.NET Core MVC attributes. `SupportsGet` is used to be able to get `Id` value from query string parameter of the request. -* In the `GetAsync` method, we get `BookDto `from `BookAppService` and this is being mapped to the DTO object `CreateUpdateBookDto`. -* The `OnPostAsync` uses `BookAppService.UpdateAsync()` to update the entity. +* In the `OnGetAsync` method, we get `BookDto ` from the `BookAppService` and this is being mapped to the DTO object `CreateUpdateBookDto`. +* The `OnPostAsync` uses `BookAppService.UpdateAsync(...)` to update the entity. -#### Mapping from BookDto to CreateUpdateBookDto +### Mapping from BookDto to CreateUpdateBookDto To be able to map the `BookDto` to `CreateUpdateBookDto`, configure a new mapping. To do this, open the `BookStoreWebAutoMapperProfile.cs` in the `Acme.BookStore.Web` project and change it as shown below: @@ -269,19 +340,24 @@ namespace Acme.BookStore.Web * We have just added `CreateMap();` to define this mapping. -#### EditModal.cshtml +> Notice that we do the mapping definition in the web layer as a best practice since it is only needed in this layer. + +### EditModal.cshtml Replace `EditModal.cshtml` content with the following content: ````html @page +@using Acme.BookStore.Localization @using Acme.BookStore.Web.Pages.Books +@using Microsoft.Extensions.Localization @using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal @model EditModalModel +@inject IStringLocalizer L @{ Layout = null; } - + @@ -296,71 +372,78 @@ Replace `EditModal.cshtml` content with the following content: This page is very similar to the `CreateModal.cshtml`, except: * It includes an `abp-input` for the `Id` property to store `Id` of the editing book (which is a hidden input). -* It uses `Books/EditModal` as the post URL and *Update* text as the modal header. +* It uses `Books/EditModal` as the post URL. -#### Add "Actions" dropdown to the table +### Add "Actions" Dropdown to the Table We will add a dropdown button to the table named *Actions*. -Open the `Pages/Books/Index.cshtml` page and change the `` section as shown below: - -````html - - - - @L["Actions"] - @L["Name"] - @L["Type"] - @L["PublishDate"] - @L["Price"] - @L["CreationTime"] - - - -```` - -* We just added a new `th` tag for the "*Actions*" button. - -Open the `pages/books/index.js` and replace the content as below: +Open the `Pages/Books/Index.js` and replace the content as below: ````js $(function () { - var l = abp.localization.getResource('BookStore'); - var createModal = new abp.ModalManager(abp.appPath + 'Books/CreateModal'); var editModal = new abp.ModalManager(abp.appPath + 'Books/EditModal'); - var dataTable = $('#BooksTable').DataTable(abp.libs.datatables.normalizeConfiguration({ - processing: true, - serverSide: true, - paging: true, - searching: false, - autoWidth: false, - scrollCollapse: true, - order: [[1, "asc"]], - ajax: abp.libs.datatables.createAjax(acme.bookStore.book.getList), - columnDefs: [ - { - rowAction: { - items: - [ - { - text: l('Edit'), - action: function (data) { - editModal.open({ id: data.record.id }); - } - } - ] - } - }, - { data: "name" }, - { data: "type" }, - { data: "publishDate" }, - { data: "price" }, - { data: "creationTime" } - ] - })); + var dataTable = $('#BooksTable').DataTable( + abp.libs.datatables.normalizeConfiguration({ + ajax: abp.libs.datatables.createAjax(acme.bookStore.books.book.getList), + columnDefs: [ + { + title: l('Actions'), + rowAction: { + items: + [ + { + text: l('Edit'), + action: function (data) { + editModal.open({ id: data.record.id }); + } + } + ] + } + }, + { + title: l('Name'), + data: "name" + }, + { + title: l('Type'), + data: "type", + render: function (data) { + return l('Enum:BookType:' + data); + } + }, + { + title: l('PublishDate'), + data: "publishDate", + render: function (data) { + return luxon + .DateTime + .fromISO(data, { + locale: abp.localization.currentCulture.name + }).toLocaleString(); + } + }, + { + title: l('Price'), + data: "price" + }, + { + title: l('CreationTime'), data: "creationTime", + render: function (data) { + return luxon + .DateTime + .fromISO(data, { + locale: abp.localization.currentCulture.name + }).toLocaleString(luxon.DateTime.DATETIME_SHORT); + } + } + ] + } + ) + ); createModal.onResult(function () { dataTable.ajax.reload(); @@ -377,20 +460,20 @@ $(function () { }); ```` -* Used `abp.localization.getResource('BookStore')` to be able to use the same localization texts defined on the server-side. -* Added a new `ModalManager` named `createModal` to open the create modal dialog. * Added a new `ModalManager` named `editModal` to open the edit modal dialog. * Added a new column at the beginning of the `columnDefs` section. This column is used for the "*Actions*" dropdown button. -* "*New Book*" action simply calls `createModal.open()` to open the create dialog. * "*Edit*" action simply calls `editModal.open()` to open the edit dialog. +* `editModal.onResult(...)` callback refreshes the data table when you close the edit modal. -You can run the application and edit any book by selecting the edit action. The final UI looks as below: +You can run the application and edit any book by selecting the edit action on a book. -![bookstore-books-table-actions](./images/bookstore-edit-button.png) +The final UI looks as below: -### Deleting a book +![bookstore-books-table-actions](./images/bookstore-edit-button-2.png) -Open the `pages/books/index.js` and add a new item to the `rowAction` `items`: +## Deleting a Book + +Open the `Pages/Books/Index.js` and add a new item to the `rowAction` `items`: ````js { @@ -399,7 +482,7 @@ Open the `pages/books/index.js` and add a new item to the `rowAction` `items`: return l('BookDeletionConfirmationMessage', data.record.name); }, action: function (data) { - acme.bookStore.book + acme.bookStore.books.book .delete(data.record.id) .then(function() { abp.notify.info(l('SuccessfullyDeleted')); @@ -410,63 +493,101 @@ Open the `pages/books/index.js` and add a new item to the `rowAction` `items`: ```` * `confirmMessage` option is used to ask a confirmation question before executing the `action`. -* `acme.bookStore.book.delete()` method makes an AJAX request to JavaScript proxy function to delete a book. +* `acme.bookStore.books.book.delete(...)` method makes an AJAX request to the server to delete a book. * `abp.notify.info()` shows a notification after the delete operation. -The final `index.js` content is shown below: +Since we've used two new localization texts (`BookDeletionConfirmationMessage` and `SuccessfullyDeleted`) you need to add these to the localization file (`en.json` under the `Localization/BookStore` folder of the `Acme.BookStore.Domain.Shared` project): + +````json +"BookDeletionConfirmationMessage": "Are you sure to delete the book '{0}'?", +"SuccessfullyDeleted": "Successfully deleted!" +```` + +The final `Index.js` content is shown below: ````js $(function () { - var l = abp.localization.getResource('BookStore'); - var createModal = new abp.ModalManager(abp.appPath + 'Books/CreateModal'); var editModal = new abp.ModalManager(abp.appPath + 'Books/EditModal'); - var dataTable = $('#BooksTable').DataTable(abp.libs.datatables.normalizeConfiguration({ - processing: true, - serverSide: true, - paging: true, - searching: false, - autoWidth: false, - scrollCollapse: true, - order: [[1, "asc"]], - ajax: abp.libs.datatables.createAjax(acme.bookStore.book.getList), - columnDefs: [ - { - rowAction: { - items: - [ - { - text: l('Edit'), - action: function (data) { - editModal.open({ id: data.record.id }); - } - }, - { - text: l('Delete'), - confirmMessage: function (data) { - return l('BookDeletionConfirmationMessage', data.record.name); - }, - action: function (data) { - acme.bookStore.book - .delete(data.record.id) - .then(function() { - abp.notify.info(l('SuccessfullyDeleted')); - dataTable.ajax.reload(); - }); - } + var dataTable = $('#BooksTable').DataTable( + abp.libs.datatables.normalizeConfiguration({ + ajax: abp.libs.datatables.createAjax(acme.bookStore.books.book.getList), + columnDefs: [ + { + title: l('Actions'), + rowAction: { + items: + [ + { + text: l('Edit'), + action: function (data) { + editModal.open({ id: data.record.id }); + } + }, + { + text: l('Delete'), + confirmMessage: function (data) { + return l( + 'BookDeletionConfirmationMessage', + data.record.name + ); + }, + action: function (data) { + acme.bookStore.books.book + .delete(data.record.id) + .then(function() { + abp.notify.info( + l('SuccessfullyDeleted') + ); + dataTable.ajax.reload(); + }); + } + } + ] } - ] - } - }, - { data: "name" }, - { data: "type" }, - { data: "publishDate" }, - { data: "price" }, - { data: "creationTime" } - ] - })); + }, + { + title: l('Name'), + data: "name" + }, + { + title: l('Type'), + data: "type", + render: function (data) { + return l('Enum:BookType:' + data); + } + }, + { + title: l('PublishDate'), + data: "publishDate", + render: function (data) { + return luxon + .DateTime + .fromISO(data, { + locale: abp.localization.currentCulture.name + }).toLocaleString(); + } + }, + { + title: l('Price'), + data: "price" + }, + { + title: l('CreationTime'), data: "creationTime", + render: function (data) { + return luxon + .DateTime + .fromISO(data, { + locale: abp.localization.currentCulture.name + }).toLocaleString(luxon.DateTime.DATETIME_SHORT); + } + } + ] + } + ) + ); createModal.onResult(function () { dataTable.ajax.reload(); @@ -483,24 +604,17 @@ $(function () { }); ```` -Open the `en.json` in the `Acme.BookStore.Domain.Shared` project and add the following translations: - -````json -"BookDeletionConfirmationMessage": "Are you sure to delete the book {0}?", -"SuccessfullyDeleted": "Successfully deleted" -```` - -Run the application and try to delete a book. +You can run the application and try to delete a book. {{end}} {{if UI == "NG"}} -### Creating a new book +## Creating a new book In this section, you will learn how to create a new modal dialog form to create a new book. -#### Add a modal to BookListComponent +### Add a modal to BookListComponent Open `book-list.component.ts` file in `app\book\book-list` folder and replace the content as below: @@ -610,7 +724,7 @@ You can open your browser and click **New book** button to see the new modal. ![Empty modal for new book](./images/bookstore-empty-new-book-modal.png) -#### Create a reactive form +### Create a reactive form [Reactive forms](https://angular.io/guide/reactive-forms) provide a model-driven approach to handling form inputs whose values change over time. @@ -676,7 +790,7 @@ export class BookListComponent implements OnInit { * The `group` method of `FormBuilder`, `fb` creates a `FormGroup`. * Added `Validators.required` static method which validates the relevant form element. -#### Create the DOM elements of the form +### Create the DOM elements of the form Open `book-list.component.html` in `app\books\book-list` folder and replace ` ` with the following code part: @@ -719,7 +833,7 @@ Open `book-list.component.html` in `app\books\book-list` folder and replace `` tag as below: @@ -1099,9 +1213,9 @@ Open `book-list.component.html` in `app\book\book-list` folder and find the `?P+@Dkp-^A3mldzke%rM=bdf&T}xq`yq=cJxA{YS?=#&Jx&c<#rD^$4Yxwax1pwh zdb0|QxnE-sdBR643+Wb;CCM-WFrdze@YM?gFZ8#!YOdv$%H!okRZ{iRg)92$J8~D)l9@46+*`oHs zMFoy5+E}tf%c<<`ifT`~pV;nJ)~=tT;LW^C0rjJ1maUjru3DnQf|~{1*1oV~(OIdC zL7NktsbRI<9}uh2TO~#r9{cBTeXSiT#^lm8%2@ ze6RNuMrkl4Xn;OAxPxlO1qTJPqoY@$BzosC$YgPtn&ZR5)^;LvxAfj1=t`rcnh$YQ z1umT^e9oCk9j2Ba-$R9fa08-*xP|o;JS}vqY&1t1m{t<(lm;@aEY$p)5~U?9zNSva z3uST>D7w)&!WjhxYGl9?1#@Syj+A|vu_`8C0W}`0*QdBjsQ_X1pN_bj*)8S&7kg%)Gn|E)m6p$f&EG zKQr)e^IYhM=n@^4V<9{l0k#eB9o*{5Vj~^B)%gLzmXbeA$34%*4At`}z$8Ni54=F9pcZ5H`spDWn; z(8|NLYMZ%go4V(@qGHSkmIikn9o;7LV>XkqSW%h~^KwVTXYeIki(N$3*7GHtMc9o; zK`fV9zix}+8MYB#Z0F!}yRn*i9AyyonptF}&m-VqHNE-l4zuI_TJg!5gK|i$$2lC# zy`r9TIc%>wU3-p63i~s9zE_Yb?)mPA3vK*C_9oi^y0EYS!*nuYFV*sJ|9T0(0B)kG z)mZJ9W+IBIr>2@Z?bIscutpn=jbhLbf&L=n)+2vqEKqX99hs-svsaeR;5%`IAxdOTrB2EY$y{9A9t&

Books

-```` - -`Index.cshtml.cs` content should be like that: - -```csharp -using Microsoft.AspNetCore.Mvc.RazorPages; - -namespace Acme.BookStore.Web.Pages.Books -{ - public class IndexModel : PageModel - { - public void OnGet() - { - - } - } -} -``` - -### Add Books Page to the Main Menu - -Open the `BookStoreMenuContributor` class in the `Menus` folder and add the following code to the end of the `ConfigureMainMenuAsync` method: - -````csharp -context.Menu.AddItem( - new ApplicationMenuItem( - "BooksStore", - l["Menu:BookStore"], - icon: "fa fa-book" - ).AddItem( - new ApplicationMenuItem( - "BooksStore.Books", - l["Menu:Books"], - url: "/Books" - ) - ) -); -```` - -{{end}} - -### Localization - -Localization texts are located under the `Localization/BookStore` folder of the `Acme.BookStore.Domain.Shared` project: - -![bookstore-localization-files](./images/bookstore-localization-files-v2.png) - -Open the `en.json` (*the English translations*) file and change the content as below: - -````json -{ - "Culture": "en", - "Texts": { - "Menu:Home": "Home", - "Welcome": "Welcome", - "LongWelcomeMessage": "Welcome to the application. This is a startup project based on the ABP framework. For more information, visit abp.io.", - "Menu:BookStore": "Book Store", - "Menu:Books": "Books", - "Actions": "Actions", - "Edit": "Edit", - "PublishDate": "Publish date", - "NewBook": "New book", - "Name": "Name", - "Type": "Type", - "Price": "Price", - "CreationTime": "Creation time", - "AreYouSureToDelete": "Are you sure you want to delete this item?", - "Enum:BookType:0": "Undefined", - "Enum:BookType:1": "Adventure", - "Enum:BookType:2": "Biography", - "Enum:BookType:3": "Dystopia", - "Enum:BookType:4": "Fantastic", - "Enum:BookType:5": "Horror", - "Enum:BookType:6": "Science", - "Enum:BookType:7": "Science fiction", - "Enum:BookType:8": "Poetry" - } -} -```` - -* Localization key names are arbitrary. You can set any name. We prefer some conventions for specific text types; - * Add `Menu:` prefix for menu items. - * Use `Enum::` naming convention to localize the enum members. When you do it like that, ABP can automatically localize the enums in some proper cases. - -If a text is not defined in the localization file, it **fallbacks** to the localization key (as ASP.NET Core's standard behavior). - -> ABP's localization system is built on [ASP.NET Core's standard localization](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/localization) system and extends it in many ways. See the [localization document](../Localization.md) for details. - -{{if UI == "MVC"}} - -Run the project, login to the application with the username `admin` and the password `1q2w3E*` and see the new menu item has been added to the main menu: - -![bookstore-menu-items](./images/bookstore-new-menu-item.png) - -When you click to the Books menu item under the Book Store parent, you are being redirected to the new empty Books Page. - -### Book List - -We will use the [Datatables.net](https://datatables.net/) jQuery library to show the book list. Datatables library completely work via AJAX, it is fast, popular and provides a good user experience. - -> Datatables library is configured in the startup template, so you can directly use it in any page without including any style or script file to your page. - -#### Index.cshtml - -Change the `Pages/Books/Index.cshtml` as following: - -````html -@page -@using Acme.BookStore.Localization -@using Acme.BookStore.Web.Pages.Books -@using Microsoft.Extensions.Localization -@model IndexModel -@inject IStringLocalizer L -@section scripts -{ - -} - - -

@L["Books"]

-
- - - -
-```` - -* `abp-script` [tag helper](https://docs.microsoft.com/en-us/aspnet/core/mvc/views/tag-helpers/intro) is used to add external **scripts** to the page. It has many additional features compared to standard `script` tag. It handles **minification** and **versioning**. See the [bundling & minification document](../UI/AspNetCore/Bundling-Minification.md) for details. -* `abp-card` is a tag helper for Twitter Bootstrap's [card component](https://getbootstrap.com/docs/4.5/components/card/). There are other useful tag helpers provided by the ABP Framework to easily use most of the [bootstrap](https://getbootstrap.com/) components. You could use the regular HTML tags instead of these tag helpers, but using tag helpers reduces HTML code and prevents errors by help the of IntelliSense and compile time type checking. Further information, see the [tag helpers](../UI/AspNetCore/Tag-Helpers/Index.md) document. - -#### Index.js - -Create an `Index.js` file under the `Pages/Books` folder: - -![bookstore-index-js-file](./images/bookstore-index-js-file-v3.png) - -The content of the file is shown below: - -````js -$(function () { - var l = abp.localization.getResource('BookStore'); - - var dataTable = $('#BooksTable').DataTable( - abp.libs.datatables.normalizeConfiguration({ - serverSide: true, - paging: true, - order: [[1, "asc"]], - searching: false, - scrollX: true, - ajax: abp.libs.datatables.createAjax(acme.bookStore.books.book.getList), - columnDefs: [ - { - title: l('Name'), - data: "name" - }, - { - title: l('Type'), - data: "type", - render: function (data) { - return l('Enum:BookType:' + data); - } - }, - { - title: l('PublishDate'), - data: "publishDate", - render: function (data) { - return luxon - .DateTime - .fromISO(data, { - locale: abp.localization.currentCulture.name - }).toLocaleString(); - } - }, - { - title: l('Price'), - data: "price" - }, - { - title: l('CreationTime'), data: "creationTime", - render: function (data) { - return luxon - .DateTime - .fromISO(data, { - locale: abp.localization.currentCulture.name - }).toLocaleString(luxon.DateTime.DATETIME_SHORT); - } - } - ] - }) - ); -}); -```` - -* `abp.localization.getResource` gets a function that is used to localize text using the same JSON file defined in the server side. In this way, you can share the localization values with the client side. -* `abp.libs.datatables.normalizeConfiguration` is a helper function defined by the ABP Framework. There's no requirement to use it, but it simplifies the [Datatables](https://datatables.net/) configuration by providing conventional default values for missing options. -* `abp.libs.datatables.createAjax` is another helper function to adapt ABP's dynamic JavaScript API proxies to [Datatable](https://datatables.net/)'s expected parameter format -* `acme.bookStore.books.book.getList` is the dynamic JavaScript proxy function introduced before. -* [luxon](https://moment.github.io/luxon/) library is also a standard library that is pre-configured in the solution, so you can use to perform date/time operations easily. - -> See [Datatables documentation](https://datatables.net/manual/) for all configuration options. - -## Run the Final Application - -You can run the application! The final UI of this part is shown below: - -![Book list](images/bookstore-book-list-3.png) - -This is a fully working, server side paged, sorted and localized table of books. - -{{end}} - -{{if UI == "NG"}} - -## Angular UI Development -### Create the books page - -It's time to create something visible and usable! There are some tools that we will use when developing ABP Angular frontend application: - -- [Angular CLI](https://angular.io/cli) will be used to create modules, components and services. -- [Ng Bootstrap](https://ng-bootstrap.github.io/#/home) will be used as the UI component library. -- [ngx-datatable](https://swimlane.gitbook.io/ngx-datatable/) will be used as the datatable library. -- [Visual Studio Code](https://code.visualstudio.com/) will be used as the code editor (you can use your favorite editor). - -### Install NPM packages - -Open a new command line interface (terminal window) and go to your `angular` folder and then run `yarn` command to install NPM packages: - -```bash -yarn -``` - -### BookModule - -Run the following command line to create a new module, named `BookModule`: - -```bash -yarn ng generate module book --routing true -``` - -![Generating books module](./images/bookstore-creating-book-module-terminal.png) - -### Routing - -Open the `app-routing.module.ts` file in `src\app` folder and add a route as shown below: - -```js -const routes: Routes = [ -// ... -// added a new route to the routes array - { - path: 'books', - loadChildren: () => import('./book/book.module').then(m => m.BookModule) - } -] -``` - -* We added a lazy-loaded route. See the [Lazy-Loading Feature Modules](https://angular.io/guide/lazy-loading-ngmodules#lazy-loading-feature-modules). - -Open the `route.provider.ts` file in `src\app` folder and replace the content as below: - -```js -import { RoutesService, eLayoutType } from '@abp/ng.core'; -import { APP_INITIALIZER } from '@angular/core'; - -export const APP_ROUTE_PROVIDER = [ - { provide: APP_INITIALIZER, useFactory: configureRoutes, deps: [RoutesService], multi: true }, -]; - -function configureRoutes(routes: RoutesService) { - return () => { - routes.add([ - //... - // added below element - { - path: '/books', - name: '::Menu:Books', - iconClass: 'fas fa-book', - order: 101, - layout: eLayoutType.application, - }, - ]); - }; -} -``` - -* We added a new route element to show a navigation element labeled "Books" on the menu. - * `path` is the URL of the route. - * `name` is the menu item name. A Localization key can be passed. - * `iconClass` is the icon of the menu item. - * `order` is the order of the menu item. We define 101 to show the route after the "Administration" item. - * `layout` is the layout of the BooksModule's routes. `eLayoutType.application`, `eLayoutType.account` or `eLayoutType.empty` can be defined. - -For more information, see the [RoutesService document](https://docs.abp.io/en/abp/latest/UI/Angular/Modifying-the-Menu.md#via-routesservice). - -#### Book List Component - -Run the command below on the terminal in the root folder to generate a new component, named book-list: - -```bash -yarn ng generate component book/book-list -``` - -![Creating books list](./images/bookstore-creating-book-list-terminal.png) - -Open `book.module.ts` file in the `app\book` folder and replace the content as below: - -```js -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { BookRoutingModule } from './book-routing.module'; -import { BookListComponent } from './book-list/book-list.component'; -import { SharedModule } from '../shared/shared.module'; //<== added this line ==> - -@NgModule({ - declarations: [BookListComponent], - imports: [ - CommonModule, - BookRoutingModule, - SharedModule, //<== added this line ==> - ], -}) -export class BookModule {} -``` - -* We imported `SharedModule` and added to `imports` array. - -Open `book-routing.module.ts` file in the `app\book` folder and replace the content as below: - -```js -import { NgModule } from '@angular/core'; -import { Routes, RouterModule } from '@angular/router'; -import { BookListComponent } from './book-list/book-list.component'; // <== added this line ==> - -// <== replaced routes ==> -const routes: Routes = [ - { - path: '', - component: BookListComponent, - }, -]; - -@NgModule({ - imports: [RouterModule.forChild(routes)], - exports: [RouterModule] -}) -export class BookRoutingModule { } -``` - -* We imported `BookListComponent` and replaced `routes` const. - -Run `yarn start` and wait for Angular to serve the application: - -```bash -yarn start -``` - -Open the browser and navigate to http://localhost:4200/books. We'll see **book-list works!** text on the books page: - -![Initial book list page](./images/bookstore-initial-book-list-page.png) - -### Generate Proxies - -ABP CLI provides `generate-proxy` command that generates client proxies for your HTTP APIs to make easy to consume your services from the client side. Before running generate-proxy command, your host must be up and running. See the [CLI documentation](../CLI.md) - -Run the following command in the `angular` folder: - -```bash -abp generate-proxy --module app -``` - -![Generate proxy command](./images/generate-proxy-command.png) - -The generated files looks like below: - -![Generated files](./images/generated-proxies.png) - -### BookListComponent - -Open the `book-list.component.ts` file in `app\book\book-list` folder and replace the content as below: - -```js -import { ListService, PagedResultDto } from '@abp/ng.core'; -import { Component, OnInit } from '@angular/core'; -import { BookDto, BookType } from '../models'; -import { BookService } from '../services'; - -@Component({ - selector: 'app-book-list', - templateUrl: './book-list.component.html', - styleUrls: ['./book-list.component.scss'], - providers: [ListService], -}) -export class BookListComponent implements OnInit { - book = { items: [], totalCount: 0 } as PagedResultDto; - - booksType = BookType; - - constructor(public readonly list: ListService, private bookService: BookService) {} - - ngOnInit() { - const bookStreamCreator = (query) => this.bookService.getListByInput(query); - - this.list.hookToQuery(bookStreamCreator).subscribe((response) => { - this.book = response; - }); - } -} -``` - -* We imported and injected the generated `BookService`. -* We implemented the [ListService](https://docs.abp.io/en/abp/latest/UI/Angular/List-Service) that is a utility service to provide easy pagination, sorting, and search implementation. - -Open the `book-list.component.html` file in `app\book\book-list` folder and replace the content as below: - -```html -
-
-
-
-
- {%{{{ '::Menu:Books' | abpLocalization }}}%} -
-
-
-
-
-
- - - - - {%{{{ booksType[row.type] }}}%} - - - - - {%{{{ row.publishDate | date }}}%} - - - - - {%{{{ row.price | currency }}}%} - - - -
-
-``` - -* We added HTML code of book list page. - -Now you can see the final result on your browser: - -![Book list final result](./images/bookstore-book-list.png) - -The file system structure of the project: - -![Book list final result](./images/bookstore-angular-file-tree.png) - -In this tutorial we have applied the rules of official [Angular Style Guide](https://angular.io/guide/styleguide#file-tree). - -{{end}} - -## Next Part - -See the [part 2](Part-2.md) for creating, updating and deleting books. +See the [next part](Part-2.md) of this tutorial. diff --git a/docs/en/Tutorials/Part-2.md b/docs/en/Tutorials/Part-2.md index c744d85229..1a3c2db7fd 100644 --- a/docs/en/Tutorials/Part-2.md +++ b/docs/en/Tutorials/Part-2.md @@ -1,11 +1,10 @@ -# ASP.NET Core {{UI_Value}} Tutorial - Part 2 +# Web Application Development Tutorial - Part 2: The Book List Page ````json //[doc-params] { "UI": ["MVC","NG"] } ```` - {{ if UI == "MVC" DB="ef" @@ -30,10 +29,11 @@ In this tutorial series, you will build an ABP based web application named `Acme This tutorial is organized as the following parts; -- [Part I: Creating the project and book list page](part-1.md) -- **Part-2: Creating, updating and deleting books (this part)** -- [Part-3: Integration tests](part-3.md) -- [Part-4: Authorization](Part-4.md) +- [Part 1: Creating the server side](Part-1.md) +- **Part 2: The book list page (this part)** +- [Part 3: Creating, updating and deleting books](Part-3.md) +- [Part 4: Integration tests](Part-4.md) +- [Part 5: Authorization](Part-5.md) ### Source Code @@ -41,113 +41,178 @@ You can find the completed solution on {{if UI == "MVC"}}[the GitHub repository] {{if UI == "MVC"}} -## Creating a New Book +## Dynamic JavaScript Proxies -In this section, you will learn how to create a new modal dialog form to create a new book. The modal dialog will look like in the image below: +It's common to call the HTTP API endpoints via AJAX from the **JavaScript** side. You can use `$.ajax` or another tool to call the endpoints. However, ABP offers a better way. -![bookstore-create-dialog](./images/bookstore-create-dialog-2.png) +ABP **dynamically** creates **[JavaScript Proxies](../UI/AspNetCore/)** for all API endpoints. So, you can use any **endpoint** just like calling a **JavaScript function**. -### Create the Modal Form +### Testing in Developer Console of the Browser -Create a new razor page, named `CreateModal.cshtml` under the `Pages/Books` folder of the `Acme.BookStore.Web` project. +You can easily test the JavaScript proxies using your favorite browser's **Developer Console**. Run the application, open your browser's **developer tools** (*shortcut is generally F12*), switch to the **Console** tab, type the following code and press enter: -![bookstore-add-create-dialog](./images/bookstore-add-create-dialog-v2.png) +````js +acme.bookStore.books.book.getList({}).done(function (result) { console.log(result); }); +```` -#### CreateModal.cshtml.cs +* `acme.bookStore.books` is the namespace of the `BookAppService` converted to [camelCase](https://en.wikipedia.org/wiki/Camel_case). +* `book` is the conventional name for the `BookAppService` (removed `AppService` postfix and converted to camelCase). +* `getList` is the conventional name for the `GetListAsync` method defined in the `CrudAppService` base class (removed `Async` postfix and converted to camelCase). +* `{}` argument is used to send an empty object to the `GetListAsync` method which normally expects an object of type `PagedAndSortedResultRequestDto` that is used to send paging and sorting options to the server (all properties are optional with default values, so you can send an empty object). +* `getList` function returns a `promise`. You can pass a callback to the `then` (or `done`) function to get the result returned from the server. -Open the `CreateModal.cshtml.cs` file (`CreateModalModel` class) and replace with the following code: +Running this code produces the following output: -````C# -using System.Threading.Tasks; -using Acme.BookStore.Books; -using Microsoft.AspNetCore.Mvc; +![bookstore-javascript-proxy-console](images/bookstore-javascript-proxy-console.png) -namespace Acme.BookStore.Web.Pages.Books -{ - public class CreateModalModel : BookStorePageModel - { - [BindProperty] - public CreateUpdateBookDto Book { get; set; } +You can see the **book list** returned from the server. You can also check the **network** tab of the developer tools to see the client to server communication: - private readonly IBookAppService _bookAppService; +![bookstore-getlist-result-network](images/bookstore-getlist-result-network.png) - public CreateModalModel(IBookAppService bookAppService) - { - _bookAppService = bookAppService; - } +Let's **create a new book** using the `create` function: - public void OnGet() - { - Book = new CreateUpdateBookDto(); - } +````js +acme.bookStore.books.book.create({ + name: 'Foundation', + type: 7, + publishDate: '1951-05-24', + price: 21.5 + }).then(function (result) { + console.log('successfully created the book with id: ' + result.id); + }); +```` - public async Task OnPostAsync() - { - await _bookAppService.CreateAsync(Book); - return NoContent(); - } - } -} +You should see a message in the console something like that: + +````text +successfully created the book with id: 439b0ea8-923e-8e1e-5d97-39f2c7ac4246 ```` -* This class is derived from the `BookStorePageModel` instead of standard `PageModel`. `BookStorePageModel` indirectly inherits the `PageModel` and adds some common properties & methods that can be shared in your page model classes. -* `[BindProperty]` attribute on the `Book` property binds post request data to this property. -* This class simply injects the `IBookAppService` in the constructor and calls the `CreateAsync` method in the `OnPostAsync` handler. -* It creates a new `CreateUpdateBookDto` object in the `OnGet` method. ASP.NET Core can work without creating a new instance like that. However, it doesn't create an instance for you and if your class has some default value assignments or code execution in the class constructor, they won't work. For this case, we set default values for some of the `CreateUpdateBookDto` properties. +Check the `Books` table in the database to see the new book row. You can try `get`, `update` and `delete` functions yourself. + +We will use these dynamic proxy functions in the next sections to communicate to the server. -#### CreateModal.cshtml +## Create a Books Page -Open the `CreateModal.cshtml` file and paste the code below: +It's time to create something visible and usable! Instead of classic MVC, we will use the [Razor Pages UI](https://docs.microsoft.com/en-us/aspnet/core/tutorials/razor-pages/razor-pages-start) approach which is recommended by Microsoft. + +Create `Books` folder under the `Pages` folder of the `Acme.BookStore.Web` project. Add a new Razor Page by right clicking the Books folder then selecting **Add > Razor Page** menu item. Name it as `Index`: + +![bookstore-add-index-page](./images/bookstore-add-index-page-v2.png) + +Open the `Index.cshtml` and change the whole content as shown below: ````html @page -@using Acme.BookStore.Localization @using Acme.BookStore.Web.Pages.Books -@using Microsoft.Extensions.Localization -@using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal -@model CreateModalModel -@inject IStringLocalizer L -@{ - Layout = null; +@model IndexModel + +

Books

+```` + +`Index.cshtml.cs` content should be like that: + +```csharp +using Microsoft.AspNetCore.Mvc.RazorPages; + +namespace Acme.BookStore.Web.Pages.Books +{ + public class IndexModel : PageModel + { + public void OnGet() + { + + } + } } - - - - - - - - - +``` + +### Add Books Page to the Main Menu + +Open the `BookStoreMenuContributor` class in the `Menus` folder and add the following code to the end of the `ConfigureMainMenuAsync` method: + +````csharp +context.Menu.AddItem( + new ApplicationMenuItem( + "BooksStore", + l["Menu:BookStore"], + icon: "fa fa-book" + ).AddItem( + new ApplicationMenuItem( + "BooksStore.Books", + l["Menu:Books"], + url: "/Books" + ) + ) +); ```` -* This modal uses `abp-dynamic-form` [tag helper](../UI/AspNetCore/Tag-Helpers/Dynamic-Forms.md) to automatically create the form from the `CreateBookViewModel` model class. -* `abp-model` attribute indicates the model object where it's the `Book` property in this case. -* `abp-form-content` tag helper is a placeholder to render the form controls (it is optional and needed only if you have added some other content in the `abp-dynamic-form` tag, just like in this page). +{{end}} -> Tip: `Layout` should be `null` just as done in this example since we don't want to include all the layout for the modals when they are loaded via AJAX. +### Localization -### Add the "New book" Button +Localization texts are located under the `Localization/BookStore` folder of the `Acme.BookStore.Domain.Shared` project: -Open the `Pages/Books/Index.cshtml` and set the content of `abp-card-header` tag as below: +![bookstore-localization-files](./images/bookstore-localization-files-v2.png) -````html - - - - @L["Books"] - - - - - - +Open the `en.json` (*the English translations*) file and change the content as below: + +````json +{ + "Culture": "en", + "Texts": { + "Menu:Home": "Home", + "Welcome": "Welcome", + "LongWelcomeMessage": "Welcome to the application. This is a startup project based on the ABP framework. For more information, visit abp.io.", + "Menu:BookStore": "Book Store", + "Menu:Books": "Books", + "Actions": "Actions", + "Edit": "Edit", + "PublishDate": "Publish date", + "NewBook": "New book", + "Name": "Name", + "Type": "Type", + "Price": "Price", + "CreationTime": "Creation time", + "AreYouSureToDelete": "Are you sure you want to delete this item?", + "Enum:BookType:0": "Undefined", + "Enum:BookType:1": "Adventure", + "Enum:BookType:2": "Biography", + "Enum:BookType:3": "Dystopia", + "Enum:BookType:4": "Fantastic", + "Enum:BookType:5": "Horror", + "Enum:BookType:6": "Science", + "Enum:BookType:7": "Science fiction", + "Enum:BookType:8": "Poetry" + } +} ```` -The final content of the `Index.cshtml` is shown below: +* Localization key names are arbitrary. You can set any name. We prefer some conventions for specific text types; + * Add `Menu:` prefix for menu items. + * Use `Enum::` naming convention to localize the enum members. When you do it like that, ABP can automatically localize the enums in some proper cases. + +If a text is not defined in the localization file, it **fallbacks** to the localization key (as ASP.NET Core's standard behavior). + +> ABP's localization system is built on [ASP.NET Core's standard localization](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/localization) system and extends it in many ways. See the [localization document](../Localization.md) for details. + +{{if UI == "MVC"}} + +Run the project, login to the application with the username `admin` and the password `1q2w3E*` and see the new menu item has been added to the main menu: + +![bookstore-menu-items](./images/bookstore-new-menu-item.png) + +When you click to the Books menu item under the Book Store parent, you are being redirected to the new empty Books Page. + +### Book List + +We will use the [Datatables.net](https://datatables.net/) jQuery library to show the book list. Datatables library completely work via AJAX, it is fast, popular and provides a good user experience. + +> Datatables library is configured in the startup template, so you can directly use it in any page without including any style or script file to your page. + +#### Index.cshtml + +Change the `Pages/Books/Index.cshtml` as following: ````html @page @@ -158,22 +223,11 @@ The final content of the `Index.cshtml` is shown below: @inject IStringLocalizer L @section scripts { - + } - - - - @L["Books"] - - - - - +

@L["Books"]

@@ -181,30 +235,16 @@ The final content of the `Index.cshtml` is shown below:
```` -This adds a new button called **New book** to the **top-right** of the table: +* `abp-script` [tag helper](https://docs.microsoft.com/en-us/aspnet/core/mvc/views/tag-helpers/intro) is used to add external **scripts** to the page. It has many additional features compared to standard `script` tag. It handles **minification** and **versioning**. See the [bundling & minification document](../UI/AspNetCore/Bundling-Minification.md) for details. +* `abp-card` is a tag helper for Twitter Bootstrap's [card component](https://getbootstrap.com/docs/4.5/components/card/). There are other useful tag helpers provided by the ABP Framework to easily use most of the [bootstrap](https://getbootstrap.com/) components. You could use the regular HTML tags instead of these tag helpers, but using tag helpers reduces HTML code and prevents errors by help the of IntelliSense and compile time type checking. Further information, see the [tag helpers](../UI/AspNetCore/Tag-Helpers/Index.md) document. -![bookstore-new-book-button](./images/bookstore-new-book-button-2.png) +#### Index.js -Open the `Pages/Books/Index.js` and add the following code just after the `Datatable` configuration: +Create an `Index.js` file under the `Pages/Books` folder: -````js -var createModal = new abp.ModalManager(abp.appPath + 'Books/CreateModal'); - -createModal.onResult(function () { - dataTable.ajax.reload(); -}); - -$('#NewBookButton').click(function (e) { - e.preventDefault(); - createModal.open(); -}); -```` +![bookstore-index-js-file](./images/bookstore-index-js-file-v3.png) -* `abp.ModalManager` is a helper class to manage modals in the client side. It internally uses Twitter Bootstrap's standard modal, but abstracts many details by providing a simple API. -* `createModal.onResult(...)` used to refresh the data table after creating a new book. -* `createModal.open();` is used to open the model to create a new book. - -The final content of the `Index.js` should be like that: +The content of the file is shown below: ````js $(function () { @@ -258,381 +298,195 @@ $(function () { ] }) ); - - var createModal = new abp.ModalManager(abp.appPath + 'Books/CreateModal'); - - createModal.onResult(function () { - dataTable.ajax.reload(); - }); - - $('#NewBookButton').click(function (e) { - e.preventDefault(); - createModal.open(); - }); }); ```` -Now, you can **run the application** and add some new books using the new modal form. +* `abp.localization.getResource` gets a function that is used to localize text using the same JSON file defined in the server side. In this way, you can share the localization values with the client side. +* `abp.libs.datatables.normalizeConfiguration` is a helper function defined by the ABP Framework. There's no requirement to use it, but it simplifies the [Datatables](https://datatables.net/) configuration by providing conventional default values for missing options. +* `abp.libs.datatables.createAjax` is another helper function to adapt ABP's dynamic JavaScript API proxies to [Datatable](https://datatables.net/)'s expected parameter format +* `acme.bookStore.books.book.getList` is the dynamic JavaScript proxy function introduced before. +* [luxon](https://moment.github.io/luxon/) library is also a standard library that is pre-configured in the solution, so you can use to perform date/time operations easily. -## Updating a Book +> See [Datatables documentation](https://datatables.net/manual/) for all configuration options. -Create a new razor page, named `EditModal.cshtml` under the `Pages/Books` folder of the `Acme.BookStore.Web` project: +## Run the Final Application -![bookstore-add-edit-dialog](./images/bookstore-add-edit-dialog.png) +You can run the application! The final UI of this part is shown below: -### EditModal.cshtml.cs +![Book list](images/bookstore-book-list-3.png) -Open the `EditModal.cshtml.cs` file (`EditModalModel` class) and replace with the following code: +This is a fully working, server side paged, sorted and localized table of books. -````csharp -using System; -using System.Threading.Tasks; -using Acme.BookStore.Books; -using Microsoft.AspNetCore.Mvc; +{{end}} -namespace Acme.BookStore.Web.Pages.Books -{ - public class EditModalModel : BookStorePageModel - { - [HiddenInput] - [BindProperty(SupportsGet = true)] - public Guid Id { get; set; } +{{if UI == "NG"}} - [BindProperty] - public CreateUpdateBookDto Book { get; set; } +## Angular UI Development +### Create the books page - private readonly IBookAppService _bookAppService; +It's time to create something visible and usable! There are some tools that we will use when developing ABP Angular frontend application: - public EditModalModel(IBookAppService bookAppService) - { - _bookAppService = bookAppService; - } +- [Angular CLI](https://angular.io/cli) will be used to create modules, components and services. +- [Ng Bootstrap](https://ng-bootstrap.github.io/#/home) will be used as the UI component library. +- [ngx-datatable](https://swimlane.gitbook.io/ngx-datatable/) will be used as the datatable library. +- [Visual Studio Code](https://code.visualstudio.com/) will be used as the code editor (you can use your favorite editor). - public async Task OnGetAsync() - { - var bookDto = await _bookAppService.GetAsync(Id); - Book = ObjectMapper.Map(bookDto); - } +### Install NPM packages - public async Task OnPostAsync() - { - await _bookAppService.UpdateAsync(Id, Book); - return NoContent(); - } - } -} -```` +Open a new command line interface (terminal window) and go to your `angular` folder and then run `yarn` command to install NPM packages: -* `[HiddenInput]` and `[BindProperty]` are standard ASP.NET Core MVC attributes. `SupportsGet` is used to be able to get `Id` value from query string parameter of the request. -* In the `OnGetAsync` method, we get `BookDto ` from the `BookAppService` and this is being mapped to the DTO object `CreateUpdateBookDto`. -* The `OnPostAsync` uses `BookAppService.UpdateAsync(...)` to update the entity. +```bash +yarn +``` -### Mapping from BookDto to CreateUpdateBookDto +### BookModule -To be able to map the `BookDto` to `CreateUpdateBookDto`, configure a new mapping. To do this, open the `BookStoreWebAutoMapperProfile.cs` in the `Acme.BookStore.Web` project and change it as shown below: +Run the following command line to create a new module, named `BookModule`: -````csharp -using AutoMapper; +```bash +yarn ng generate module book --routing true +``` -namespace Acme.BookStore.Web -{ - public class BookStoreWebAutoMapperProfile : Profile - { - public BookStoreWebAutoMapperProfile() - { - CreateMap(); - } - } -} -```` +![Generating books module](./images/bookstore-creating-book-module-terminal.png) + +### Routing -* We have just added `CreateMap();` to define this mapping. +Open the `app-routing.module.ts` file in `src\app` folder and add a route as shown below: -> Notice that we do the mapping definition in the web layer as a best practice since it is only needed in this layer. +```js +const routes: Routes = [ +// ... +// added a new route to the routes array + { + path: 'books', + loadChildren: () => import('./book/book.module').then(m => m.BookModule) + } +] +``` -### EditModal.cshtml +* We added a lazy-loaded route. See the [Lazy-Loading Feature Modules](https://angular.io/guide/lazy-loading-ngmodules#lazy-loading-feature-modules). -Replace `EditModal.cshtml` content with the following content: +Open the `route.provider.ts` file in `src\app` folder and replace the content as below: -````html -@page -@using Acme.BookStore.Localization -@using Acme.BookStore.Web.Pages.Books -@using Microsoft.Extensions.Localization -@using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal -@model EditModalModel -@inject IStringLocalizer L -@{ - Layout = null; +```js +import { RoutesService, eLayoutType } from '@abp/ng.core'; +import { APP_INITIALIZER } from '@angular/core'; + +export const APP_ROUTE_PROVIDER = [ + { provide: APP_INITIALIZER, useFactory: configureRoutes, deps: [RoutesService], multi: true }, +]; + +function configureRoutes(routes: RoutesService) { + return () => { + routes.add([ + //... + // added below element + { + path: '/books', + name: '::Menu:Books', + iconClass: 'fas fa-book', + order: 101, + layout: eLayoutType.application, + }, + ]); + }; } - - - - - - - - - - -```` +``` -This page is very similar to the `CreateModal.cshtml`, except: +* We added a new route element to show a navigation element labeled "Books" on the menu. + * `path` is the URL of the route. + * `name` is the menu item name. A Localization key can be passed. + * `iconClass` is the icon of the menu item. + * `order` is the order of the menu item. We define 101 to show the route after the "Administration" item. + * `layout` is the layout of the BooksModule's routes. `eLayoutType.application`, `eLayoutType.account` or `eLayoutType.empty` can be defined. -* It includes an `abp-input` for the `Id` property to store `Id` of the editing book (which is a hidden input). -* It uses `Books/EditModal` as the post URL. +For more information, see the [RoutesService document](https://docs.abp.io/en/abp/latest/UI/Angular/Modifying-the-Menu.md#via-routesservice). -### Add "Actions" Dropdown to the Table +#### Book List Component -We will add a dropdown button to the table named *Actions*. +Run the command below on the terminal in the root folder to generate a new component, named book-list: -Open the `Pages/Books/Index.js` and replace the content as below: +```bash +yarn ng generate component book/book-list +``` -````js -$(function () { - var l = abp.localization.getResource('BookStore'); - var createModal = new abp.ModalManager(abp.appPath + 'Books/CreateModal'); - var editModal = new abp.ModalManager(abp.appPath + 'Books/EditModal'); +![Creating books list](./images/bookstore-creating-book-list-terminal.png) - var dataTable = $('#BooksTable').DataTable( - abp.libs.datatables.normalizeConfiguration({ - serverSide: true, - paging: true, - order: [[1, "asc"]], - searching: false, - scrollX: true, - ajax: abp.libs.datatables.createAjax(acme.bookStore.books.book.getList), - columnDefs: [ - { - title: l('Actions'), - rowAction: { - items: - [ - { - text: l('Edit'), - action: function (data) { - editModal.open({ id: data.record.id }); - } - } - ] - } - }, - { - title: l('Name'), - data: "name" - }, - { - title: l('Type'), - data: "type", - render: function (data) { - return l('Enum:BookType:' + data); - } - }, - { - title: l('PublishDate'), - data: "publishDate", - render: function (data) { - return luxon - .DateTime - .fromISO(data, { - locale: abp.localization.currentCulture.name - }).toLocaleString(); - } - }, - { - title: l('Price'), - data: "price" - }, - { - title: l('CreationTime'), data: "creationTime", - render: function (data) { - return luxon - .DateTime - .fromISO(data, { - locale: abp.localization.currentCulture.name - }).toLocaleString(luxon.DateTime.DATETIME_SHORT); - } - } - ] - }) - ); +Open `book.module.ts` file in the `app\book` folder and replace the content as below: - createModal.onResult(function () { - dataTable.ajax.reload(); - }); +```js +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { BookRoutingModule } from './book-routing.module'; +import { BookListComponent } from './book-list/book-list.component'; +import { SharedModule } from '../shared/shared.module'; //<== added this line ==> - editModal.onResult(function () { - dataTable.ajax.reload(); - }); +@NgModule({ + declarations: [BookListComponent], + imports: [ + CommonModule, + BookRoutingModule, + SharedModule, //<== added this line ==> + ], +}) +export class BookModule {} +``` - $('#NewBookButton').click(function (e) { - e.preventDefault(); - createModal.open(); - }); -}); -```` +* We imported `SharedModule` and added to `imports` array. -* Added a new `ModalManager` named `editModal` to open the edit modal dialog. -* Added a new column at the beginning of the `columnDefs` section. This column is used for the "*Actions*" dropdown button. -* "*Edit*" action simply calls `editModal.open()` to open the edit dialog. -* `editModal.onResult(...)` callback refreshes the data table when you close the edit modal. +Open `book-routing.module.ts` file in the `app\book` folder and replace the content as below: -You can run the application and edit any book by selecting the edit action on a book. +```js +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; +import { BookListComponent } from './book-list/book-list.component'; // <== added this line ==> -The final UI looks as below: +// <== replaced routes ==> +const routes: Routes = [ + { + path: '', + component: BookListComponent, + }, +]; -![bookstore-books-table-actions](./images/bookstore-edit-button-2.png) +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class BookRoutingModule { } +``` -## Deleting a Book +* We imported `BookListComponent` and replaced `routes` const. -Open the `Pages/Books/Index.js` and add a new item to the `rowAction` `items`: +Run `yarn start` and wait for Angular to serve the application: -````js -{ - text: l('Delete'), - confirmMessage: function (data) { - return l('BookDeletionConfirmationMessage', data.record.name); - }, - action: function (data) { - acme.bookStore.books.book - .delete(data.record.id) - .then(function() { - abp.notify.info(l('SuccessfullyDeleted')); - dataTable.ajax.reload(); - }); - } -} -```` +```bash +yarn start +``` -* `confirmMessage` option is used to ask a confirmation question before executing the `action`. -* `acme.bookStore.books.book.delete(...)` method makes an AJAX request to the server to delete a book. -* `abp.notify.info()` shows a notification after the delete operation. +Open the browser and navigate to http://localhost:4200/books. We'll see **book-list works!** text on the books page: -Since we've used two new localization texts (`BookDeletionConfirmationMessage` and `SuccessfullyDeleted`) you need to add these to the localization file (`en.json` under the `Localization/BookStore` folder of the `Acme.BookStore.Domain.Shared` project): +![Initial book list page](./images/bookstore-initial-book-list-page.png) -````json -"BookDeletionConfirmationMessage": "Are you sure to delete the book '{0}'?", -"SuccessfullyDeleted": "Successfully deleted!" -```` +### Generate Proxies -The final `Index.js` content is shown below: +ABP CLI provides `generate-proxy` command that generates client proxies for your HTTP APIs to make easy to consume your services from the client side. Before running generate-proxy command, your host must be up and running. See the [CLI documentation](../CLI.md) -````js -$(function () { - var l = abp.localization.getResource('BookStore'); - var createModal = new abp.ModalManager(abp.appPath + 'Books/CreateModal'); - var editModal = new abp.ModalManager(abp.appPath + 'Books/EditModal'); +Run the following command in the `angular` folder: - var dataTable = $('#BooksTable').DataTable( - abp.libs.datatables.normalizeConfiguration({ - serverSide: true, - paging: true, - order: [[1, "asc"]], - searching: false, - scrollX: true, - ajax: abp.libs.datatables.createAjax(acme.bookStore.books.book.getList), - columnDefs: [ - { - title: l('Actions'), - rowAction: { - items: - [ - { - text: l('Edit'), - action: function (data) { - editModal.open({ id: data.record.id }); - } - }, - { - text: l('Delete'), - confirmMessage: function (data) { - return l( - 'BookDeletionConfirmationMessage', - data.record.name - ); - }, - action: function (data) { - acme.bookStore.books.book - .delete(data.record.id) - .then(function() { - abp.notify.info( - l('SuccessfullyDeleted') - ); - dataTable.ajax.reload(); - }); - } - } - ] - } - }, - { - title: l('Name'), - data: "name" - }, - { - title: l('Type'), - data: "type", - render: function (data) { - return l('Enum:BookType:' + data); - } - }, - { - title: l('PublishDate'), - data: "publishDate", - render: function (data) { - return luxon - .DateTime - .fromISO(data, { - locale: abp.localization.currentCulture.name - }).toLocaleString(); - } - }, - { - title: l('Price'), - data: "price" - }, - { - title: l('CreationTime'), data: "creationTime", - render: function (data) { - return luxon - .DateTime - .fromISO(data, { - locale: abp.localization.currentCulture.name - }).toLocaleString(luxon.DateTime.DATETIME_SHORT); - } - } - ] - }) - ); +```bash +abp generate-proxy --module app +``` - createModal.onResult(function () { - dataTable.ajax.reload(); - }); - - editModal.onResult(function () { - dataTable.ajax.reload(); - }); - - $('#NewBookButton').click(function (e) { - e.preventDefault(); - createModal.open(); - }); -}); -```` - -You can run the application and try to delete a book. - -{{end}} - -{{if UI == "NG"}} +![Generate proxy command](./images/generate-proxy-command.png) -## Creating a new book +The generated files looks like below: -In this section, you will learn how to create a new modal dialog form to create a new book. +![Generated files](./images/generated-proxies.png) -### Add a modal to BookListComponent +### BookListComponent -Open `book-list.component.ts` file in `app\book\book-list` folder and replace the content as below: +Open the `book-list.component.ts` file in `app\book\book-list` folder and replace the content as below: ```js import { ListService, PagedResultDto } from '@abp/ng.core'; @@ -651,8 +505,6 @@ export class BookListComponent implements OnInit { booksType = BookType; - isModalOpen = false; // <== added this line ==> - constructor(public readonly list: ListService, private bookService: BookService) {} ngOnInit() { @@ -662,36 +514,24 @@ export class BookListComponent implements OnInit { this.book = response; }); } - - // added createBook method - createBook() { - this.isModalOpen = true; - } } ``` -* We defined a variable called `isModalOpen` and `createBook` method. -* We added the `createBook` method. - +* We imported and injected the generated `BookService`. +* We implemented the [ListService](https://docs.abp.io/en/abp/latest/UI/Angular/List-Service) that is a utility service to provide easy pagination, sorting, and search implementation. -Open `book-list.component.html` file in `books\book-list` folder and replace the content as below: +Open the `book-list.component.html` file in `app\book\book-list` folder and replace the content as below: ```html
-
{%{{{ '::Menu:Books' | abpLocalization }}}%}
-
- -
-
- -
+
+ {%{{{ '::Menu:Books' | abpLocalization }}}%} +
+
@@ -715,587 +555,22 @@ Open `book-list.component.html` file in `books\book-list` folder and replace the
- - - - -

{%{{{ '::NewBook' | abpLocalization }}}%}

-
- - - - - - -
-``` - -* We added the `abp-modal` which renders a modal to allow user to create a new book. -* `abp-modal` is a pre-built component to show modals. While you could use another approach to show a modal, `abp-modal` provides additional benefits. -* We added `New book` button to the `AbpContentToolbar`. - -You can open your browser and click **New book** button to see the new modal. - -![Empty modal for new book](./images/bookstore-empty-new-book-modal.png) - -### Create a reactive form - -[Reactive forms](https://angular.io/guide/reactive-forms) provide a model-driven approach to handling form inputs whose values change over time. - -Open `book-list.component.ts` file in `app\book\book-list` folder and replace the content as below: - -```js -import { ListService, PagedResultDto } from '@abp/ng.core'; -import { Component, OnInit } from '@angular/core'; -import { BookDto, BookType } from '../models'; -import { BookService } from '../services'; -import { FormGroup, FormBuilder, Validators } from '@angular/forms'; // <== added this line ==> - -@Component({ - selector: 'app-book-list', - templateUrl: './book-list.component.html', - styleUrls: ['./book-list.component.scss'], - providers: [ListService], -}) -export class BookListComponent implements OnInit { - book = { items: [], totalCount: 0 } as PagedResultDto; - - booksType = BookType; - - isModalOpen = false; - - form: FormGroup; // <== added this line ==> - - constructor( - public readonly list: ListService, - private bookService: BookService, - private fb: FormBuilder // <== injected FormBuilder ==> - ) {} - - ngOnInit() { - const bookStreamCreator = (query) => this.bookService.getListByInput(query); - - this.list.hookToQuery(bookStreamCreator).subscribe((response) => { - this.book = response; - }); - } - - createBook() { - this.buildForm(); // <== added this line ==> - this.isModalOpen = true; - } - - // added buildForm method - buildForm() { - this.form = this.fb.group({ - name: ['', Validators.required], - type: [null, Validators.required], - publishDate: [null, Validators.required], - price: [null, Validators.required], - }); - } -} -``` - -* We imported `FormGroup, FormBuilder and Validators`. -* We added `form: FormGroup` variable. -* We injected `fb: FormBuilder` service to the constructor. The [FormBuilder](https://angular.io/api/forms/FormBuilder) service provides convenient methods for generating controls. It reduces the amount of boilerplate needed to build complex forms. -* We added `buildForm` method to the end of the file and executed `buildForm()` in the `createBook` method. This method creates a reactive form to be able to create a new book. - * The `group` method of `FormBuilder`, `fb` creates a `FormGroup`. - * Added `Validators.required` static method which validates the relevant form element. - -### Create the DOM elements of the form - -Open `book-list.component.html` in `app\books\book-list` folder and replace ` ` with the following code part: - -```html - -
-
- * - -
- -
- * - -
- -
- * - -
- -
- * - -
-
-
-``` - -- This template creates a form with `Name`, `Price`, `Type` and `Publish` date fields. -- We've used [NgBootstrap datepicker](https://ng-bootstrap.github.io/#/components/datepicker/overview) in this component. - -### Datepicker requirements - -Open `book.module.ts` file in `app\book` folder and replace the content as below: - -```js -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { BookRoutingModule } from './book-routing.module'; -import { BookListComponent } from './book-list/book-list.component'; -import { SharedModule } from '../shared/shared.module'; -import { NgbDatepickerModule } from '@ng-bootstrap/ng-bootstrap'; //<== added this line ==> - -@NgModule({ - declarations: [BookListComponent], - imports: [ - CommonModule, - BookRoutingModule, - SharedModule, - NgbDatepickerModule, //<== added this line ==> - ], -}) -export class BookModule {} -``` - -* We imported `NgbDatepickerModule` to be able to use the date picker. - -Open `book-list.component.ts` file in `app\book\book-list` folder and replace the content as below: - -```js -import { ListService, PagedResultDto } from '@abp/ng.core'; -import { Component, OnInit } from '@angular/core'; -import { BookDto, BookType } from '../models'; -import { BookService } from '../services'; -import { FormGroup, FormBuilder, Validators } from '@angular/forms'; -import { NgbDateNativeAdapter, NgbDateAdapter } from '@ng-bootstrap/ng-bootstrap'; // <== added this line ==> - -@Component({ - selector: 'app-book-list', - templateUrl: './book-list.component.html', - styleUrls: ['./book-list.component.scss'], - providers: [ListService, { provide: NgbDateAdapter, useClass: NgbDateNativeAdapter }], // <== added a provide ==> -}) -export class BookListComponent implements OnInit { - book = { items: [], totalCount: 0 } as PagedResultDto; - - booksType = BookType; - - // <== added bookTypeArr array ==> - bookTypeArr = Object.keys(BookType).filter( - (bookType) => typeof this.booksType[bookType] === 'number' - ); - - isModalOpen = false; - - form: FormGroup; - - constructor( - public readonly list: ListService, - private bookService: BookService, - private fb: FormBuilder - ) {} - - ngOnInit() { - const bookStreamCreator = (query) => this.bookService.getListByInput(query); - - this.list.hookToQuery(bookStreamCreator).subscribe((response) => { - this.book = response; - }); - } - - createBook() { - this.buildForm(); - this.isModalOpen = true; - } - - buildForm() { - this.form = this.fb.group({ - name: ['', Validators.required], - type: [null, Validators.required], - publishDate: [null, Validators.required], - price: [null, Validators.required], - }); - } -} ``` -* We imported ` NgbDateNativeAdapter, NgbDateAdapter` - -* We added a new provider `NgbDateAdapter` that converts Datepicker value to `Date` type. See the [datepicker adapters](https://ng-bootstrap.github.io/#/components/datepicker/overview) for more details. - -* We added `bookTypeArr` array to be able to use it in the combobox values. The `bookTypeArr` contains the fields of the `BookType` enum. Resulting array is shown below: +* We added HTML code of book list page. - ```js - ['Adventure', 'Biography', 'Dystopia', 'Fantastic' ...] - ``` +Now you can see the final result on your browser: - This array was used in the previous form template in the `ngFor` loop. +![Book list final result](./images/bookstore-book-list.png) -Now, you can open your browser to see the changes: - - -![New book modal](./images/bookstore-new-book-form.png) - -### Saving the book - -Open `book-list.component.ts` file in `app\book\book-list` folder and replace the content as below: - -```js -import { ListService, PagedResultDto } from '@abp/ng.core'; -import { Component, OnInit } from '@angular/core'; -import { BookDto, BookType } from '../models'; -import { BookService } from '../services'; -import { FormGroup, FormBuilder, Validators } from '@angular/forms'; -import { NgbDateNativeAdapter, NgbDateAdapter } from '@ng-bootstrap/ng-bootstrap'; - -@Component({ - selector: 'app-book-list', - templateUrl: './book-list.component.html', - styleUrls: ['./book-list.component.scss'], - providers: [ListService, { provide: NgbDateAdapter, useClass: NgbDateNativeAdapter }], -}) -export class BookListComponent implements OnInit { - book = { items: [], totalCount: 0 } as PagedResultDto; - - booksType = BookType; - - bookTypeArr = Object.keys(BookType).filter( - (bookType) => typeof this.booksType[bookType] === 'number' - ); - - isModalOpen = false; - - form: FormGroup; - - constructor( - public readonly list: ListService, - private bookService: BookService, - private fb: FormBuilder - ) {} - - ngOnInit() { - const bookStreamCreator = (query) => this.bookService.getListByInput(query); - - this.list.hookToQuery(bookStreamCreator).subscribe((response) => { - this.book = response; - }); - } - - createBook() { - this.buildForm(); - this.isModalOpen = true; - } - - buildForm() { - this.form = this.fb.group({ - name: ['', Validators.required], - type: [null, Validators.required], - publishDate: [null, Validators.required], - price: [null, Validators.required], - }); - } - - // <== added save ==> - save() { - if (this.form.invalid) { - return; - } - - this.bookService.createByInput(this.form.value).subscribe(() => { - this.isModalOpen = false; - this.form.reset(); - this.list.get(); - }); - } -} -``` - -* We added `save` method - -Open `book-list.component.html` in `app\book\book-list` folder, find the `` element and replace this element with the following to create a new book. - -```html - - - - - - -``` - -Find the `
` tag and replace below content: - -```html - -``` - - -* We added the `(ngSubmit)="save()"` to `` element to save a new book by pressing the enter. -* We added `abp-button` to the bottom area of the modal to save a new book. - -The final modal UI looks like below: - -![Save button to the modal](./images/bookstore-new-book-form-v2.png) - -## Updating a book - -Open `book-list.component.ts` in `app\book\book-list` folder and add a variable named `selectedBook`. - -```js -import { ListService, PagedResultDto } from '@abp/ng.core'; -import { Component, OnInit } from '@angular/core'; -import { BookDto, BookType } from '../models'; -import { BookService } from '../services'; -import { FormGroup, FormBuilder, Validators } from '@angular/forms'; -import { NgbDateNativeAdapter, NgbDateAdapter } from '@ng-bootstrap/ng-bootstrap'; - -@Component({ - selector: 'app-book-list', - templateUrl: './book-list.component.html', - styleUrls: ['./book-list.component.scss'], - providers: [ListService, { provide: NgbDateAdapter, useClass: NgbDateNativeAdapter }], -}) -export class BookListComponent implements OnInit { - book = { items: [], totalCount: 0 } as PagedResultDto; - - booksType = BookType; - - bookTypeArr = Object.keys(BookType).filter( - (bookType) => typeof this.booksType[bookType] === 'number' - ); - - isModalOpen = false; - - form: FormGroup; - - selectedBook = {} as BookDto; // <== declared selectedBook ==> - - constructor( - public readonly list: ListService, - private bookService: BookService, - private fb: FormBuilder - ) {} - - ngOnInit() { - const bookStreamCreator = (query) => this.bookService.getListByInput(query); - - this.list.hookToQuery(bookStreamCreator).subscribe((response) => { - this.book = response; - }); - } - - // <== this method is replaced ==> - createBook() { - this.selectedBook = {} as BookDto; // <== added ==> - this.buildForm(); - this.isModalOpen = true; - } - - // <== added editBook method ==> - editBook(id: string) { - this.bookService.getById(id).subscribe((book) => { - this.selectedBook = book; - this.buildForm(); - this.isModalOpen = true; - }); - } - - // <== this method is replaced ==> - buildForm() { - this.form = this.fb.group({ - name: [this.selectedBook.name || '', Validators.required], - type: [this.selectedBook.type || null, Validators.required], - publishDate: [ - this.selectedBook.publishDate ? new Date(this.selectedBook.publishDate) : null, - Validators.required, - ], - price: [this.selectedBook.price || null, Validators.required], - }); - } - - // <== this method is replaced ==> - save() { - if (this.form.invalid) { - return; - } - - // <== added request ==> - const request = this.selectedBook.id - ? this.bookService.updateByIdAndInput(this.form.value, this.selectedBook.id) - : this.bookService.createByInput(this.form.value); - - request.subscribe(() => { - this.isModalOpen = false; - this.form.reset(); - this.list.get(); - }); - } -} -``` - -* We declared a variable named `selectedBook` as `BookDto`. -* We added `editBook` method. This method fetches the book with the given `Id` and sets it to `selectedBook` object. -* We replaced the `buildForm` method so that it creates the form with the `selectedBook` data. -* We replaced the `createBook` method so it sets `selectedBook` to an empty object. -* We replaced the `save` method. - -### Add "Actions" dropdown to the table - -Open the `book-list.component.html` in `app\book\book-list` folder and replace the `
` tag as below: - -```html -
- - - - -
- -
- -
-
-
-
- - - - {%{{{ booksType[row.type] }}}%} - - - - - {%{{{ row.publishDate | date }}}%} - - - - - {%{{{ row.price | currency }}}%} - - -
-
-``` - -- We added a `ngx-datatable-column` for the "Actions" column. -- We added `button` with `ngbDropdownToggle` to open actions when clicked the button. -- We have used to [NgbDropdown](https://ng-bootstrap.github.io/#/components/dropdown/examples) for the dropdown menu of actions. - -The final UI looks like as below: - -![Action buttons](./images/bookstore-actions-buttons.png) - -Open `book-list.component.html` in `app\book\book-list` folder and find the `` tag and replace the content as below. - -```html - -

{%{{{ (selectedBook.id ? '::Edit' : '::NewBook' ) | abpLocalization }}}%}

-
-``` - -* This template will show **Edit** text for edit record operation, **New Book** for new record operation in the title. - -## Deleting a book - -### Delete confirmation popup - -Open `book-list.component.ts` in `app\book\book-list` folder and inject the `ConfirmationService`. - -Replace the constructor as below: - -```js -import { ConfirmationService } from '@abp/ng.theme.shared'; -//... - -constructor( - public readonly list: ListService, - private bookService: BookService, - private fb: FormBuilder, - private confirmation: ConfirmationService // <== added this line ==> -) {} -``` - -* We imported `ConfirmationService`. -* We injected `ConfirmationService` to the constructor. - -See the [Confirmation Popup documentation](https://docs.abp.io/en/abp/latest/UI/Angular/Confirmation-Service) - -In the `book-list.component.ts` add a delete method: - -```js -import { ConfirmationService, Confirmation } from '@abp/ng.theme.shared'; //<== imported Confirmation namespace ==> - -//... - -delete(id: string) { - this.confirmation.warn('::AreYouSureToDelete', 'AbpAccount::AreYouSure').subscribe((status) => { - if (status === Confirmation.Status.confirm) { - this.bookService.deleteById(id).subscribe(() => this.list.get()); - } - }); -} -``` - - -The `delete` method shows a confirmation popup and subscribes for the user response. The `deleteById` method of `BookService` called only if user clicks to the `Yes` button. The confirmation popup looks like below: - -![bookstore-confirmation-popup](./images/bookstore-confirmation-popup.png) - - -### Add a delete button - - -Open `book-list.component.html` in `app\book\book-list` folder and modify the `ngbDropdownMenu` to add the delete button as shown below: - -```html -
- - -
-``` +The file system structure of the project: -The final actions dropdown UI looks like below: +![Book list final result](./images/bookstore-angular-file-tree.png) -![bookstore-final-actions-dropdown](./images/bookstore-final-actions-dropdown.png) +In this tutorial we have applied the rules of official [Angular Style Guide](https://angular.io/guide/styleguide#file-tree). {{end}} -## Next Part +## The Next Part -See the [next part](part-3.md) of this tutorial. +See the [next part](Part-3.md) of this tutorial. diff --git a/docs/en/Tutorials/Part-3.md b/docs/en/Tutorials/Part-3.md index 22e3cd4a5b..1a861f76bd 100644 --- a/docs/en/Tutorials/Part-3.md +++ b/docs/en/Tutorials/Part-3.md @@ -1,4 +1,4 @@ -# ASP.NET Core {{UI_Value}} Tutorial - Part 3 +# Web Application Development Tutorial - Part 3: Creating, Updating and Deleting Books ````json //[doc-params] { @@ -15,7 +15,7 @@ else if UI == "NG" DB="mongodb" DB_Text="MongoDB" UI_Text="angular" -else +else DB ="?" UI_Text="?" end @@ -30,213 +30,1273 @@ In this tutorial series, you will build an ABP based web application named `Acme This tutorial is organized as the following parts; -- [Part I: Creating the project and book list page](part-1.md) -- [Part-2: Creating, updating and deleting books](Part-2.md) -- **Part-3: Integration tests (this part)** -- [Part-4: Authorization](Part-4.md) +- [Part 1: Creating the project and book list page](Part-1.md) +- [Part 2: The book list page](Part-2.md) +- **Part 3: Creating, updating and deleting books (this part)** +- [Part 4: Integration tests](Part-4.md) +- [Part 5: Authorization](Part-5.md) ### Source Code You can find the completed solution on {{if UI == "MVC"}}[the GitHub repository](https://github.com/abpframework/abp-samples/tree/master/BookStore-Mvc-EfCore){{else}}[the GitHub repository](https://github.com/abpframework/abp-samples/tree/master/BookStore-Angular-MongoDb){{end}}. -## Test Projects in the Solution +{{if UI == "MVC"}} -This part covers the **server side** tests. There are several test projects in the solution: +## Creating a New Book -![bookstore-test-projects-v2](./images/bookstore-test-projects-{{UI_Text}}.png) +In this section, you will learn how to create a new modal dialog form to create a new book. The modal dialog will look like in the image below: -Each project is used to test the related project. Test projects use the following libraries for testing: +![bookstore-create-dialog](./images/bookstore-create-dialog-2.png) -* [Xunit](https://xunit.github.io/) as the main test framework. -* [Shoudly](http://shouldly.readthedocs.io/en/latest/) as the assertion library. -* [NSubstitute](http://nsubstitute.github.io/) as the mocking library. +### Create the Modal Form -{{if DB="ef"}} +Create a new razor page, named `CreateModal.cshtml` under the `Pages/Books` folder of the `Acme.BookStore.Web` project. -> The test projects are configured to use **SQLite in-memory** as the database. A separate database instance is created and seeded (with the data seed system) to prepare a fresh database for every test. +![bookstore-add-create-dialog](./images/bookstore-add-create-dialog-v2.png) -{{else if DB="mongodb"}} +#### CreateModal.cshtml.cs -> **[Mongo2Go](https://github.com/Mongo2Go/Mongo2Go)** library is used to mock the MongoDB database. A separate database instance is created and seeded (with the data seed system) to prepare a fresh database for every test. +Open the `CreateModal.cshtml.cs` file (`CreateModalModel` class) and replace with the following code: -{{end}} - -## Adding Test Data - -If you had created a data seed contributor as described in the [first part](Part-1.md), the same data will be available in your tests. So, you can skip this section. If you haven't created the seed contributor, you can use the `BookStoreTestDataSeedContributor` to seed the same data to be used in the tests below. - -## Testing The Application Service: BookAppService - -Create a test class named `BookAppService_Tests` in the `Acme.BookStore.Application.Tests` project: - -````csharp +````C# using System.Threading.Tasks; -using Shouldly; -using Volo.Abp.Application.Dtos; -using Xunit; +using Acme.BookStore.Books; +using Microsoft.AspNetCore.Mvc; -namespace Acme.BookStore.Books +namespace Acme.BookStore.Web.Pages.Books { - public class BookAppService_Tests : BookStoreApplicationTestBase + public class CreateModalModel : BookStorePageModel { + [BindProperty] + public CreateUpdateBookDto Book { get; set; } + private readonly IBookAppService _bookAppService; - public BookAppService_Tests() + public CreateModalModel(IBookAppService bookAppService) + { + _bookAppService = bookAppService; + } + + public void OnGet() { - _bookAppService = GetRequiredService(); + Book = new CreateUpdateBookDto(); } - [Fact] - public async Task Should_Get_List_Of_Books() + public async Task OnPostAsync() { - //Act - var result = await _bookAppService.GetListAsync( - new PagedAndSortedResultRequestDto() - ); - - //Assert - result.TotalCount.ShouldBeGreaterThan(0); - result.Items.ShouldContain(b => b.Name == "1984"); + await _bookAppService.CreateAsync(Book); + return NoContent(); } } } ```` -* `Should_Get_List_Of_Books` test simply uses `BookAppService.GetListAsync` method to get and check the list of books. -* We can safely check the book "1984" by its name, because we know that this books is available in the database since we've added it in the seed data. +* This class is derived from the `BookStorePageModel` instead of standard `PageModel`. `BookStorePageModel` indirectly inherits the `PageModel` and adds some common properties & methods that can be shared in your page model classes. +* `[BindProperty]` attribute on the `Book` property binds post request data to this property. +* This class simply injects the `IBookAppService` in the constructor and calls the `CreateAsync` method in the `OnPostAsync` handler. +* It creates a new `CreateUpdateBookDto` object in the `OnGet` method. ASP.NET Core can work without creating a new instance like that. However, it doesn't create an instance for you and if your class has some default value assignments or code execution in the class constructor, they won't work. For this case, we set default values for some of the `CreateUpdateBookDto` properties. -Add a new test method to the `BookAppService_Tests` class that creates a new **valid** book: +#### CreateModal.cshtml -````csharp -[Fact] -public async Task Should_Create_A_Valid_Book() -{ - //Act - var result = await _bookAppService.CreateAsync( - new CreateUpdateBookDto - { - Name = "New test book 42", - Price = 10, - PublishDate = System.DateTime.Now, - Type = BookType.ScienceFiction - } - ); +Open the `CreateModal.cshtml` file and paste the code below: - //Assert - result.Id.ShouldNotBe(Guid.Empty); - result.Name.ShouldBe("New test book 42"); +````html +@page +@using Acme.BookStore.Localization +@using Acme.BookStore.Web.Pages.Books +@using Microsoft.Extensions.Localization +@using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal +@model CreateModalModel +@inject IStringLocalizer L +@{ + Layout = null; } + + + + + + + + + ```` -Add a new test that tries to create an invalid book and fails: +* This modal uses `abp-dynamic-form` [tag helper](../UI/AspNetCore/Tag-Helpers/Dynamic-Forms.md) to automatically create the form from the `CreateBookViewModel` model class. +* `abp-model` attribute indicates the model object where it's the `Book` property in this case. +* `abp-form-content` tag helper is a placeholder to render the form controls (it is optional and needed only if you have added some other content in the `abp-dynamic-form` tag, just like in this page). -````csharp -[Fact] -public async Task Should_Not_Create_A_Book_Without_Name() +> Tip: `Layout` should be `null` just as done in this example since we don't want to include all the layout for the modals when they are loaded via AJAX. + +### Add the "New book" Button + +Open the `Pages/Books/Index.cshtml` and set the content of `abp-card-header` tag as below: + +````html + + + + @L["Books"] + + + + + + +```` + +The final content of the `Index.cshtml` is shown below: + +````html +@page +@using Acme.BookStore.Localization +@using Acme.BookStore.Web.Pages.Books +@using Microsoft.Extensions.Localization +@model IndexModel +@inject IStringLocalizer L +@section scripts { - var exception = await Assert.ThrowsAsync(async () => - { - await _bookAppService.CreateAsync( - new CreateUpdateBookDto - { - Name = "", - Price = 10, - PublishDate = DateTime.Now, - Type = BookType.ScienceFiction - } - ); - }); - - exception.ValidationErrors - .ShouldContain(err => err.MemberNames.Any(mem => mem == "Name")); + } + + + + + + @L["Books"] + + + + + + + + + + +```` + +This adds a new button called **New book** to the **top-right** of the table: + +![bookstore-new-book-button](./images/bookstore-new-book-button-2.png) + +Open the `Pages/Books/Index.js` and add the following code just after the `Datatable` configuration: + +````js +var createModal = new abp.ModalManager(abp.appPath + 'Books/CreateModal'); + +createModal.onResult(function () { + dataTable.ajax.reload(); +}); + +$('#NewBookButton').click(function (e) { + e.preventDefault(); + createModal.open(); +}); +```` + +* `abp.ModalManager` is a helper class to manage modals in the client side. It internally uses Twitter Bootstrap's standard modal, but abstracts many details by providing a simple API. +* `createModal.onResult(...)` used to refresh the data table after creating a new book. +* `createModal.open();` is used to open the model to create a new book. + +The final content of the `Index.js` should be like that: + +````js +$(function () { + var l = abp.localization.getResource('BookStore'); + + var dataTable = $('#BooksTable').DataTable( + abp.libs.datatables.normalizeConfiguration({ + serverSide: true, + paging: true, + order: [[1, "asc"]], + searching: false, + scrollX: true, + ajax: abp.libs.datatables.createAjax(acme.bookStore.books.book.getList), + columnDefs: [ + { + title: l('Name'), + data: "name" + }, + { + title: l('Type'), + data: "type", + render: function (data) { + return l('Enum:BookType:' + data); + } + }, + { + title: l('PublishDate'), + data: "publishDate", + render: function (data) { + return luxon + .DateTime + .fromISO(data, { + locale: abp.localization.currentCulture.name + }).toLocaleString(); + } + }, + { + title: l('Price'), + data: "price" + }, + { + title: l('CreationTime'), data: "creationTime", + render: function (data) { + return luxon + .DateTime + .fromISO(data, { + locale: abp.localization.currentCulture.name + }).toLocaleString(luxon.DateTime.DATETIME_SHORT); + } + } + ] + }) + ); + + var createModal = new abp.ModalManager(abp.appPath + 'Books/CreateModal'); + + createModal.onResult(function () { + dataTable.ajax.reload(); + }); + + $('#NewBookButton').click(function (e) { + e.preventDefault(); + createModal.open(); + }); +}); ```` -* Since the `Name` is empty, ABP will throw an `AbpValidationException`. +Now, you can **run the application** and add some new books using the new modal form. + +## Updating a Book + +Create a new razor page, named `EditModal.cshtml` under the `Pages/Books` folder of the `Acme.BookStore.Web` project: -The final test class should be as shown below: +![bookstore-add-edit-dialog](./images/bookstore-add-edit-dialog.png) + +### EditModal.cshtml.cs + +Open the `EditModal.cshtml.cs` file (`EditModalModel` class) and replace with the following code: ````csharp using System; -using System.Linq; using System.Threading.Tasks; -using Shouldly; -using Volo.Abp.Application.Dtos; -using Volo.Abp.Validation; -using Xunit; +using Acme.BookStore.Books; +using Microsoft.AspNetCore.Mvc; -namespace Acme.BookStore.Books +namespace Acme.BookStore.Web.Pages.Books { - public class BookAppService_Tests : BookStoreApplicationTestBase + public class EditModalModel : BookStorePageModel { + [HiddenInput] + [BindProperty(SupportsGet = true)] + public Guid Id { get; set; } + + [BindProperty] + public CreateUpdateBookDto Book { get; set; } + private readonly IBookAppService _bookAppService; - public BookAppService_Tests() + public EditModalModel(IBookAppService bookAppService) { - _bookAppService = GetRequiredService(); + _bookAppService = bookAppService; } - [Fact] - public async Task Should_Get_List_Of_Books() + public async Task OnGetAsync() { - //Act - var result = await _bookAppService.GetListAsync( - new PagedAndSortedResultRequestDto() - ); - - //Assert - result.TotalCount.ShouldBeGreaterThan(0); - result.Items.ShouldContain(b => b.Name == "1984"); + var bookDto = await _bookAppService.GetAsync(Id); + Book = ObjectMapper.Map(bookDto); } - - [Fact] - public async Task Should_Create_A_Valid_Book() - { - //Act - var result = await _bookAppService.CreateAsync( - new CreateUpdateBookDto - { - Name = "New test book 42", - Price = 10, - PublishDate = System.DateTime.Now, - Type = BookType.ScienceFiction - } - ); - //Assert - result.Id.ShouldNotBe(Guid.Empty); - result.Name.ShouldBe("New test book 42"); + public async Task OnPostAsync() + { + await _bookAppService.UpdateAsync(Id, Book); + return NoContent(); } - - [Fact] - public async Task Should_Not_Create_A_Book_Without_Name() + } +} +```` + +* `[HiddenInput]` and `[BindProperty]` are standard ASP.NET Core MVC attributes. `SupportsGet` is used to be able to get `Id` value from query string parameter of the request. +* In the `OnGetAsync` method, we get `BookDto ` from the `BookAppService` and this is being mapped to the DTO object `CreateUpdateBookDto`. +* The `OnPostAsync` uses `BookAppService.UpdateAsync(...)` to update the entity. + +### Mapping from BookDto to CreateUpdateBookDto + +To be able to map the `BookDto` to `CreateUpdateBookDto`, configure a new mapping. To do this, open the `BookStoreWebAutoMapperProfile.cs` in the `Acme.BookStore.Web` project and change it as shown below: + +````csharp +using AutoMapper; + +namespace Acme.BookStore.Web +{ + public class BookStoreWebAutoMapperProfile : Profile + { + public BookStoreWebAutoMapperProfile() { - var exception = await Assert.ThrowsAsync(async () => - { - await _bookAppService.CreateAsync( - new CreateUpdateBookDto - { - Name = "", - Price = 10, - PublishDate = DateTime.Now, - Type = BookType.ScienceFiction + CreateMap(); + } + } +} +```` + +* We have just added `CreateMap();` to define this mapping. + +> Notice that we do the mapping definition in the web layer as a best practice since it is only needed in this layer. + +### EditModal.cshtml + +Replace `EditModal.cshtml` content with the following content: + +````html +@page +@using Acme.BookStore.Localization +@using Acme.BookStore.Web.Pages.Books +@using Microsoft.Extensions.Localization +@using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal +@model EditModalModel +@inject IStringLocalizer L +@{ + Layout = null; +} + + + + + + + + + + +```` + +This page is very similar to the `CreateModal.cshtml`, except: + +* It includes an `abp-input` for the `Id` property to store `Id` of the editing book (which is a hidden input). +* It uses `Books/EditModal` as the post URL. + +### Add "Actions" Dropdown to the Table + +We will add a dropdown button to the table named *Actions*. + +Open the `Pages/Books/Index.js` and replace the content as below: + +````js +$(function () { + var l = abp.localization.getResource('BookStore'); + var createModal = new abp.ModalManager(abp.appPath + 'Books/CreateModal'); + var editModal = new abp.ModalManager(abp.appPath + 'Books/EditModal'); + + var dataTable = $('#BooksTable').DataTable( + abp.libs.datatables.normalizeConfiguration({ + serverSide: true, + paging: true, + order: [[1, "asc"]], + searching: false, + scrollX: true, + ajax: abp.libs.datatables.createAjax(acme.bookStore.books.book.getList), + columnDefs: [ + { + title: l('Actions'), + rowAction: { + items: + [ + { + text: l('Edit'), + action: function (data) { + editModal.open({ id: data.record.id }); + } + } + ] } - ); - }); + }, + { + title: l('Name'), + data: "name" + }, + { + title: l('Type'), + data: "type", + render: function (data) { + return l('Enum:BookType:' + data); + } + }, + { + title: l('PublishDate'), + data: "publishDate", + render: function (data) { + return luxon + .DateTime + .fromISO(data, { + locale: abp.localization.currentCulture.name + }).toLocaleString(); + } + }, + { + title: l('Price'), + data: "price" + }, + { + title: l('CreationTime'), data: "creationTime", + render: function (data) { + return luxon + .DateTime + .fromISO(data, { + locale: abp.localization.currentCulture.name + }).toLocaleString(luxon.DateTime.DATETIME_SHORT); + } + } + ] + }) + ); - exception.ValidationErrors - .ShouldContain(err => err.MemberNames.Any(mem => mem == "Name")); - } + createModal.onResult(function () { + dataTable.ajax.reload(); + }); + + editModal.onResult(function () { + dataTable.ajax.reload(); + }); + + $('#NewBookButton').click(function (e) { + e.preventDefault(); + createModal.open(); + }); +}); +```` + +* Added a new `ModalManager` named `editModal` to open the edit modal dialog. +* Added a new column at the beginning of the `columnDefs` section. This column is used for the "*Actions*" dropdown button. +* "*Edit*" action simply calls `editModal.open()` to open the edit dialog. +* `editModal.onResult(...)` callback refreshes the data table when you close the edit modal. + +You can run the application and edit any book by selecting the edit action on a book. + +The final UI looks as below: + +![bookstore-books-table-actions](./images/bookstore-edit-button-2.png) + +## Deleting a Book + +Open the `Pages/Books/Index.js` and add a new item to the `rowAction` `items`: + +````js +{ + text: l('Delete'), + confirmMessage: function (data) { + return l('BookDeletionConfirmationMessage', data.record.name); + }, + action: function (data) { + acme.bookStore.books.book + .delete(data.record.id) + .then(function() { + abp.notify.info(l('SuccessfullyDeleted')); + dataTable.ajax.reload(); + }); } } ```` -Open the **Test Explorer Window** (use Test -> Windows -> Test Explorer menu if it is not visible) and **Run All** tests: +* `confirmMessage` option is used to ask a confirmation question before executing the `action`. +* `acme.bookStore.books.book.delete(...)` method makes an AJAX request to the server to delete a book. +* `abp.notify.info()` shows a notification after the delete operation. + +Since we've used two new localization texts (`BookDeletionConfirmationMessage` and `SuccessfullyDeleted`) you need to add these to the localization file (`en.json` under the `Localization/BookStore` folder of the `Acme.BookStore.Domain.Shared` project): + +````json +"BookDeletionConfirmationMessage": "Are you sure to delete the book '{0}'?", +"SuccessfullyDeleted": "Successfully deleted!" +```` + +The final `Index.js` content is shown below: + +````js +$(function () { + var l = abp.localization.getResource('BookStore'); + var createModal = new abp.ModalManager(abp.appPath + 'Books/CreateModal'); + var editModal = new abp.ModalManager(abp.appPath + 'Books/EditModal'); + + var dataTable = $('#BooksTable').DataTable( + abp.libs.datatables.normalizeConfiguration({ + serverSide: true, + paging: true, + order: [[1, "asc"]], + searching: false, + scrollX: true, + ajax: abp.libs.datatables.createAjax(acme.bookStore.books.book.getList), + columnDefs: [ + { + title: l('Actions'), + rowAction: { + items: + [ + { + text: l('Edit'), + action: function (data) { + editModal.open({ id: data.record.id }); + } + }, + { + text: l('Delete'), + confirmMessage: function (data) { + return l( + 'BookDeletionConfirmationMessage', + data.record.name + ); + }, + action: function (data) { + acme.bookStore.books.book + .delete(data.record.id) + .then(function() { + abp.notify.info( + l('SuccessfullyDeleted') + ); + dataTable.ajax.reload(); + }); + } + } + ] + } + }, + { + title: l('Name'), + data: "name" + }, + { + title: l('Type'), + data: "type", + render: function (data) { + return l('Enum:BookType:' + data); + } + }, + { + title: l('PublishDate'), + data: "publishDate", + render: function (data) { + return luxon + .DateTime + .fromISO(data, { + locale: abp.localization.currentCulture.name + }).toLocaleString(); + } + }, + { + title: l('Price'), + data: "price" + }, + { + title: l('CreationTime'), data: "creationTime", + render: function (data) { + return luxon + .DateTime + .fromISO(data, { + locale: abp.localization.currentCulture.name + }).toLocaleString(luxon.DateTime.DATETIME_SHORT); + } + } + ] + }) + ); + + createModal.onResult(function () { + dataTable.ajax.reload(); + }); + + editModal.onResult(function () { + dataTable.ajax.reload(); + }); + + $('#NewBookButton').click(function (e) { + e.preventDefault(); + createModal.open(); + }); +}); +```` + +You can run the application and try to delete a book. + +{{end}} + +{{if UI == "NG"}} + +## Creating a new book + +In this section, you will learn how to create a new modal dialog form to create a new book. + +### Add a modal to BookListComponent + +Open `book-list.component.ts` file in `app\book\book-list` folder and replace the content as below: + +```js +import { ListService, PagedResultDto } from '@abp/ng.core'; +import { Component, OnInit } from '@angular/core'; +import { BookDto, BookType } from '../models'; +import { BookService } from '../services'; + +@Component({ + selector: 'app-book-list', + templateUrl: './book-list.component.html', + styleUrls: ['./book-list.component.scss'], + providers: [ListService], +}) +export class BookListComponent implements OnInit { + book = { items: [], totalCount: 0 } as PagedResultDto; + + booksType = BookType; + + isModalOpen = false; // <== added this line ==> -![bookstore-appservice-tests](./images/bookstore-appservice-tests.png) + constructor(public readonly list: ListService, private bookService: BookService) {} -Congratulations, the **green icons** indicates that the tests have been successfully passed! + ngOnInit() { + const bookStreamCreator = (query) => this.bookService.getListByInput(query); + + this.list.hookToQuery(bookStreamCreator).subscribe((response) => { + this.book = response; + }); + } + + // added createBook method + createBook() { + this.isModalOpen = true; + } +} +``` + +* We defined a variable called `isModalOpen` and `createBook` method. +* We added the `createBook` method. + + +Open `book-list.component.html` file in `books\book-list` folder and replace the content as below: + +```html +
+
+
+
+
{%{{{ '::Menu:Books' | abpLocalization }}}%}
+
+ +
+
+ +
+
+
+
+
+ + + + + {%{{{ booksType[row.type] }}}%} + + + + + {%{{{ row.publishDate | date }}}%} + + + + + {%{{{ row.price | currency }}}%} + + + +
+
+ + + + +

{%{{{ '::NewBook' | abpLocalization }}}%}

+
+ + + + + + +
+``` + +* We added the `abp-modal` which renders a modal to allow user to create a new book. +* `abp-modal` is a pre-built component to show modals. While you could use another approach to show a modal, `abp-modal` provides additional benefits. +* We added `New book` button to the `AbpContentToolbar`. + +You can open your browser and click **New book** button to see the new modal. + +![Empty modal for new book](./images/bookstore-empty-new-book-modal.png) + +### Create a reactive form + +[Reactive forms](https://angular.io/guide/reactive-forms) provide a model-driven approach to handling form inputs whose values change over time. + +Open `book-list.component.ts` file in `app\book\book-list` folder and replace the content as below: + +```js +import { ListService, PagedResultDto } from '@abp/ng.core'; +import { Component, OnInit } from '@angular/core'; +import { BookDto, BookType } from '../models'; +import { BookService } from '../services'; +import { FormGroup, FormBuilder, Validators } from '@angular/forms'; // <== added this line ==> + +@Component({ + selector: 'app-book-list', + templateUrl: './book-list.component.html', + styleUrls: ['./book-list.component.scss'], + providers: [ListService], +}) +export class BookListComponent implements OnInit { + book = { items: [], totalCount: 0 } as PagedResultDto; + + booksType = BookType; + + isModalOpen = false; + + form: FormGroup; // <== added this line ==> + + constructor( + public readonly list: ListService, + private bookService: BookService, + private fb: FormBuilder // <== injected FormBuilder ==> + ) {} + + ngOnInit() { + const bookStreamCreator = (query) => this.bookService.getListByInput(query); + + this.list.hookToQuery(bookStreamCreator).subscribe((response) => { + this.book = response; + }); + } + + createBook() { + this.buildForm(); // <== added this line ==> + this.isModalOpen = true; + } + + // added buildForm method + buildForm() { + this.form = this.fb.group({ + name: ['', Validators.required], + type: [null, Validators.required], + publishDate: [null, Validators.required], + price: [null, Validators.required], + }); + } +} +``` + +* We imported `FormGroup, FormBuilder and Validators`. +* We added `form: FormGroup` variable. +* We injected `fb: FormBuilder` service to the constructor. The [FormBuilder](https://angular.io/api/forms/FormBuilder) service provides convenient methods for generating controls. It reduces the amount of boilerplate needed to build complex forms. +* We added `buildForm` method to the end of the file and executed `buildForm()` in the `createBook` method. This method creates a reactive form to be able to create a new book. + * The `group` method of `FormBuilder`, `fb` creates a `FormGroup`. + * Added `Validators.required` static method which validates the relevant form element. + +### Create the DOM elements of the form + +Open `book-list.component.html` in `app\books\book-list` folder and replace ` ` with the following code part: + +```html + + +
+ * + +
+ +
+ * + +
+ +
+ * + +
+ +
+ * + +
+ +
+``` + +- This template creates a form with `Name`, `Price`, `Type` and `Publish` date fields. +- We've used [NgBootstrap datepicker](https://ng-bootstrap.github.io/#/components/datepicker/overview) in this component. + +### Datepicker requirements + +Open `book.module.ts` file in `app\book` folder and replace the content as below: + +```js +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { BookRoutingModule } from './book-routing.module'; +import { BookListComponent } from './book-list/book-list.component'; +import { SharedModule } from '../shared/shared.module'; +import { NgbDatepickerModule } from '@ng-bootstrap/ng-bootstrap'; //<== added this line ==> + +@NgModule({ + declarations: [BookListComponent], + imports: [ + CommonModule, + BookRoutingModule, + SharedModule, + NgbDatepickerModule, //<== added this line ==> + ], +}) +export class BookModule {} +``` + +* We imported `NgbDatepickerModule` to be able to use the date picker. + +Open `book-list.component.ts` file in `app\book\book-list` folder and replace the content as below: + +```js +import { ListService, PagedResultDto } from '@abp/ng.core'; +import { Component, OnInit } from '@angular/core'; +import { BookDto, BookType } from '../models'; +import { BookService } from '../services'; +import { FormGroup, FormBuilder, Validators } from '@angular/forms'; +import { NgbDateNativeAdapter, NgbDateAdapter } from '@ng-bootstrap/ng-bootstrap'; // <== added this line ==> + +@Component({ + selector: 'app-book-list', + templateUrl: './book-list.component.html', + styleUrls: ['./book-list.component.scss'], + providers: [ListService, { provide: NgbDateAdapter, useClass: NgbDateNativeAdapter }], // <== added a provide ==> +}) +export class BookListComponent implements OnInit { + book = { items: [], totalCount: 0 } as PagedResultDto; + + booksType = BookType; + + // <== added bookTypeArr array ==> + bookTypeArr = Object.keys(BookType).filter( + (bookType) => typeof this.booksType[bookType] === 'number' + ); + + isModalOpen = false; + + form: FormGroup; + + constructor( + public readonly list: ListService, + private bookService: BookService, + private fb: FormBuilder + ) {} + + ngOnInit() { + const bookStreamCreator = (query) => this.bookService.getListByInput(query); + + this.list.hookToQuery(bookStreamCreator).subscribe((response) => { + this.book = response; + }); + } + + createBook() { + this.buildForm(); + this.isModalOpen = true; + } + + buildForm() { + this.form = this.fb.group({ + name: ['', Validators.required], + type: [null, Validators.required], + publishDate: [null, Validators.required], + price: [null, Validators.required], + }); + } +} +``` + +* We imported ` NgbDateNativeAdapter, NgbDateAdapter` + +* We added a new provider `NgbDateAdapter` that converts Datepicker value to `Date` type. See the [datepicker adapters](https://ng-bootstrap.github.io/#/components/datepicker/overview) for more details. + +* We added `bookTypeArr` array to be able to use it in the combobox values. The `bookTypeArr` contains the fields of the `BookType` enum. Resulting array is shown below: + + ```js + ['Adventure', 'Biography', 'Dystopia', 'Fantastic' ...] + ``` + + This array was used in the previous form template in the `ngFor` loop. + +Now, you can open your browser to see the changes: + + +![New book modal](./images/bookstore-new-book-form.png) + +### Saving the book + +Open `book-list.component.ts` file in `app\book\book-list` folder and replace the content as below: + +```js +import { ListService, PagedResultDto } from '@abp/ng.core'; +import { Component, OnInit } from '@angular/core'; +import { BookDto, BookType } from '../models'; +import { BookService } from '../services'; +import { FormGroup, FormBuilder, Validators } from '@angular/forms'; +import { NgbDateNativeAdapter, NgbDateAdapter } from '@ng-bootstrap/ng-bootstrap'; + +@Component({ + selector: 'app-book-list', + templateUrl: './book-list.component.html', + styleUrls: ['./book-list.component.scss'], + providers: [ListService, { provide: NgbDateAdapter, useClass: NgbDateNativeAdapter }], +}) +export class BookListComponent implements OnInit { + book = { items: [], totalCount: 0 } as PagedResultDto; + + booksType = BookType; + + bookTypeArr = Object.keys(BookType).filter( + (bookType) => typeof this.booksType[bookType] === 'number' + ); + + isModalOpen = false; + + form: FormGroup; + + constructor( + public readonly list: ListService, + private bookService: BookService, + private fb: FormBuilder + ) {} + + ngOnInit() { + const bookStreamCreator = (query) => this.bookService.getListByInput(query); + + this.list.hookToQuery(bookStreamCreator).subscribe((response) => { + this.book = response; + }); + } + + createBook() { + this.buildForm(); + this.isModalOpen = true; + } + + buildForm() { + this.form = this.fb.group({ + name: ['', Validators.required], + type: [null, Validators.required], + publishDate: [null, Validators.required], + price: [null, Validators.required], + }); + } + + // <== added save ==> + save() { + if (this.form.invalid) { + return; + } + + this.bookService.createByInput(this.form.value).subscribe(() => { + this.isModalOpen = false; + this.form.reset(); + this.list.get(); + }); + } +} +``` + +* We added `save` method + +Open `book-list.component.html` in `app\book\book-list` folder, find the `` element and replace this element with the following to create a new book. + +```html + + + + + + +``` + +Find the `
` tag and replace below content: + +```html + +``` + + +* We added the `(ngSubmit)="save()"` to `` element to save a new book by pressing the enter. +* We added `abp-button` to the bottom area of the modal to save a new book. + +The final modal UI looks like below: + +![Save button to the modal](./images/bookstore-new-book-form-v2.png) + +## Updating a book + +Open `book-list.component.ts` in `app\book\book-list` folder and add a variable named `selectedBook`. + +```js +import { ListService, PagedResultDto } from '@abp/ng.core'; +import { Component, OnInit } from '@angular/core'; +import { BookDto, BookType } from '../models'; +import { BookService } from '../services'; +import { FormGroup, FormBuilder, Validators } from '@angular/forms'; +import { NgbDateNativeAdapter, NgbDateAdapter } from '@ng-bootstrap/ng-bootstrap'; + +@Component({ + selector: 'app-book-list', + templateUrl: './book-list.component.html', + styleUrls: ['./book-list.component.scss'], + providers: [ListService, { provide: NgbDateAdapter, useClass: NgbDateNativeAdapter }], +}) +export class BookListComponent implements OnInit { + book = { items: [], totalCount: 0 } as PagedResultDto; + + booksType = BookType; + + bookTypeArr = Object.keys(BookType).filter( + (bookType) => typeof this.booksType[bookType] === 'number' + ); + + isModalOpen = false; + + form: FormGroup; + + selectedBook = {} as BookDto; // <== declared selectedBook ==> + + constructor( + public readonly list: ListService, + private bookService: BookService, + private fb: FormBuilder + ) {} + + ngOnInit() { + const bookStreamCreator = (query) => this.bookService.getListByInput(query); + + this.list.hookToQuery(bookStreamCreator).subscribe((response) => { + this.book = response; + }); + } + + // <== this method is replaced ==> + createBook() { + this.selectedBook = {} as BookDto; // <== added ==> + this.buildForm(); + this.isModalOpen = true; + } + + // <== added editBook method ==> + editBook(id: string) { + this.bookService.getById(id).subscribe((book) => { + this.selectedBook = book; + this.buildForm(); + this.isModalOpen = true; + }); + } + + // <== this method is replaced ==> + buildForm() { + this.form = this.fb.group({ + name: [this.selectedBook.name || '', Validators.required], + type: [this.selectedBook.type || null, Validators.required], + publishDate: [ + this.selectedBook.publishDate ? new Date(this.selectedBook.publishDate) : null, + Validators.required, + ], + price: [this.selectedBook.price || null, Validators.required], + }); + } + + // <== this method is replaced ==> + save() { + if (this.form.invalid) { + return; + } + + // <== added request ==> + const request = this.selectedBook.id + ? this.bookService.updateByIdAndInput(this.form.value, this.selectedBook.id) + : this.bookService.createByInput(this.form.value); + + request.subscribe(() => { + this.isModalOpen = false; + this.form.reset(); + this.list.get(); + }); + } +} +``` + +* We declared a variable named `selectedBook` as `BookDto`. +* We added `editBook` method. This method fetches the book with the given `Id` and sets it to `selectedBook` object. +* We replaced the `buildForm` method so that it creates the form with the `selectedBook` data. +* We replaced the `createBook` method so it sets `selectedBook` to an empty object. +* We replaced the `save` method. + +### Add "Actions" dropdown to the table + +Open the `book-list.component.html` in `app\book\book-list` folder and replace the `
` tag as below: + +```html +
+ + + + +
+ +
+ +
+
+
+
+ + + + {%{{{ booksType[row.type] }}}%} + + + + + {%{{{ row.publishDate | date }}}%} + + + + + {%{{{ row.price | currency }}}%} + + +
+
+``` + +- We added a `ngx-datatable-column` for the "Actions" column. +- We added `button` with `ngbDropdownToggle` to open actions when clicked the button. +- We have used to [NgbDropdown](https://ng-bootstrap.github.io/#/components/dropdown/examples) for the dropdown menu of actions. + +The final UI looks like as below: + +![Action buttons](./images/bookstore-actions-buttons.png) + +Open `book-list.component.html` in `app\book\book-list` folder and find the `` tag and replace the content as below. + +```html + +

{%{{{ (selectedBook.id ? '::Edit' : '::NewBook' ) | abpLocalization }}}%}

+
+``` + +* This template will show **Edit** text for edit record operation, **New Book** for new record operation in the title. + +## Deleting a book + +### Delete confirmation popup + +Open `book-list.component.ts` in `app\book\book-list` folder and inject the `ConfirmationService`. + +Replace the constructor as below: + +```js +import { ConfirmationService } from '@abp/ng.theme.shared'; +//... + +constructor( + public readonly list: ListService, + private bookService: BookService, + private fb: FormBuilder, + private confirmation: ConfirmationService // <== added this line ==> +) {} +``` + +* We imported `ConfirmationService`. +* We injected `ConfirmationService` to the constructor. + +See the [Confirmation Popup documentation](https://docs.abp.io/en/abp/latest/UI/Angular/Confirmation-Service) + +In the `book-list.component.ts` add a delete method: + +```js +import { ConfirmationService, Confirmation } from '@abp/ng.theme.shared'; //<== imported Confirmation namespace ==> + +//... + +delete(id: string) { + this.confirmation.warn('::AreYouSureToDelete', 'AbpAccount::AreYouSure').subscribe((status) => { + if (status === Confirmation.Status.confirm) { + this.bookService.deleteById(id).subscribe(() => this.list.get()); + } + }); +} +``` + + +The `delete` method shows a confirmation popup and subscribes for the user response. The `deleteById` method of `BookService` called only if user clicks to the `Yes` button. The confirmation popup looks like below: + +![bookstore-confirmation-popup](./images/bookstore-confirmation-popup.png) + + +### Add a delete button + + +Open `book-list.component.html` in `app\book\book-list` folder and modify the `ngbDropdownMenu` to add the delete button as shown below: + +```html +
+ + +
+``` + +The final actions dropdown UI looks like below: + +![bookstore-final-actions-dropdown](./images/bookstore-final-actions-dropdown.png) + +{{end}} -## Next Part +## The Next Part -See the [next part](part-4.md) of this tutorial. \ No newline at end of file +See the [next part](part-4.md) of this tutorial. diff --git a/docs/en/Tutorials/Part-4.md b/docs/en/Tutorials/Part-4.md index 43523440db..c2c0c2b530 100644 --- a/docs/en/Tutorials/Part-4.md +++ b/docs/en/Tutorials/Part-4.md @@ -1,4 +1,4 @@ -# ASP.NET Core {{UI_Value}} Tutorial - Part 4 +# Web Application Development Tutorial - Part 4: Integration Tests ````json //[doc-params] { @@ -30,286 +30,214 @@ In this tutorial series, you will build an ABP based web application named `Acme This tutorial is organized as the following parts; -- [Part I: Creating the project and book list page](part-1.md) -- [Part-2: Creating, updating and deleting books](Part-2.md) -- [Part-3: Integration tests](Part-3.md) -- **Part-4: Authorization (this part)** +- [Part 1: Creating the project and book list page](Part-1.md) +- [Part 2: The book list page](Part-2.md) +- [Part 3: Creating, updating and deleting books](Part-3.md) +- **Part 4: Integration tests (this part)** +- [Part 5: Authorization](Part-5.md) ### Source Code You can find the completed solution on {{if UI == "MVC"}}[the GitHub repository](https://github.com/abpframework/abp-samples/tree/master/BookStore-Mvc-EfCore){{else}}[the GitHub repository](https://github.com/abpframework/abp-samples/tree/master/BookStore-Angular-MongoDb){{end}}. -## Permissions +## Test Projects in the Solution -ABP Framework provides an [authorization system](../Authorization.md) based on the ASP.NET Core's [authorization infrastructure](https://docs.microsoft.com/en-us/aspnet/core/security/authorization/introduction). One major feature added on top of the standard authorization infrastructure is the **permission system** which allows to define permissions and enable/disable per role, user or client. +This part covers the **server side** tests. There are several test projects in the solution: -### Permission Names +![bookstore-test-projects-v2](./images/bookstore-test-projects-{{UI_Text}}.png) -A permission must have a unique name (a `string`). The best way is to define it as a `const`, so we can reuse the permission name. +Each project is used to test the related project. Test projects use the following libraries for testing: -Open the `BookStorePermissions` class and change the content as shown below: +* [Xunit](https://xunit.github.io/) as the main test framework. +* [Shoudly](http://shouldly.readthedocs.io/en/latest/) as the assertion library. +* [NSubstitute](http://nsubstitute.github.io/) as the mocking library. -````csharp -namespace Acme.BookStore.Permissions -{ - public static class BookStorePermissions - { - public const string GroupName = "BookStore"; +{{if DB="ef"}} - public static class Books - { - public const string Default = GroupName + ".Books"; - public const string Create = Default + ".Create"; - public const string Edit = Default + ".Edit"; - public const string Delete = Default + ".Delete"; - } - } -} -```` +> The test projects are configured to use **SQLite in-memory** as the database. A separate database instance is created and seeded (with the data seed system) to prepare a fresh database for every test. + +{{else if DB="mongodb"}} + +> **[Mongo2Go](https://github.com/Mongo2Go/Mongo2Go)** library is used to mock the MongoDB database. A separate database instance is created and seeded (with the data seed system) to prepare a fresh database for every test. + +{{end}} -This is a hierarchical way of defining permission names. For example, "create book" permission name was defined as `BookStore.Books.Create`. +## Adding Test Data -### Permission Definitions +If you had created a data seed contributor as described in the [first part](Part-1.md), the same data will be available in your tests. So, you can skip this section. If you haven't created the seed contributor, you can use the `BookStoreTestDataSeedContributor` to seed the same data to be used in the tests below. -You should define permissions before using them. +## Testing The Application Service: BookAppService -Open the `BookStorePermissionDefinitionProvider` class inside the `Acme.BookStore.Application.Contracts` project and change the content as shown below: +Create a test class named `BookAppService_Tests` in the `Acme.BookStore.Application.Tests` project: ````csharp -using Acme.BookStore.Localization; -using Volo.Abp.Authorization.Permissions; -using Volo.Abp.Localization; +using System.Threading.Tasks; +using Shouldly; +using Volo.Abp.Application.Dtos; +using Xunit; -namespace Acme.BookStore.Permissions +namespace Acme.BookStore.Books { - public class BookStorePermissionDefinitionProvider : PermissionDefinitionProvider + public class BookAppService_Tests : BookStoreApplicationTestBase { - public override void Define(IPermissionDefinitionContext context) - { - var bookStoreGroup = context.AddGroup(BookStorePermissions.GroupName, L("Permission:BookStore")); + private readonly IBookAppService _bookAppService; - var booksPermission = bookStoreGroup.AddPermission(BookStorePermissions.Books.Default, L("Permission:Books")); - booksPermission.AddChild(BookStorePermissions.Books.Create, L("Permission:Books.Create")); - booksPermission.AddChild(BookStorePermissions.Books.Edit, L("Permission:Books.Edit")); - booksPermission.AddChild(BookStorePermissions.Books.Delete, L("Permission:Books.Delete")); + public BookAppService_Tests() + { + _bookAppService = GetRequiredService(); } - private static LocalizableString L(string name) + [Fact] + public async Task Should_Get_List_Of_Books() { - return LocalizableString.Create(name); + //Act + var result = await _bookAppService.GetListAsync( + new PagedAndSortedResultRequestDto() + ); + + //Assert + result.TotalCount.ShouldBeGreaterThan(0); + result.Items.ShouldContain(b => b.Name == "1984"); } } } ```` -This class defines a **permission group** (to group permissions on the UI, will be seen below) and **4 permissions** inside this group. Also, **Create**, **Edit** and **Delete** are children of the `BookStorePermissions.Books.Default` permission. A child permission can be selected **only if the parent was selected**. - -Finally, edit the localization file (`en.json` under the `Localization/BookStore` folder of the `Acme.BookStore.Domain.Shared` project) to define the localization keys used above: - -````json -"Permission:BookStore": "Book Store", -"Permission:Books": "Book Management", -"Permission:Books.Create": "Creating new books", -"Permission:Books.Edit": "Editing the books", -"Permission:Books.Delete": "Deleting the books" -```` - -> Localization key names are arbitrary and no forcing rule. But we prefer the convention used above. - -### Permission Management UI +* `Should_Get_List_Of_Books` test simply uses `BookAppService.GetListAsync` method to get and check the list of books. +* We can safely check the book "1984" by its name, because we know that this books is available in the database since we've added it in the seed data. -Once you define the permissions, you can see them on the **permission management modal**. - -Go to the *Administration -> Identity -> Roles* page, select *Permissions* action for the admin role to open the permission management modal: - -![bookstore-permissions-ui](images/bookstore-permissions-ui.png) - -Grant the permissions you want and save the modal. - -## Authorization - -Now, you can use the permissions to authorize the book management. - -### Application Layer & HTTP API - -Open the `BookAppService` class and add set the policy names as the permission names defined above: +Add a new test method to the `BookAppService_Tests` class that creates a new **valid** book: ````csharp -using System; -using Acme.BookStore.Permissions; -using Volo.Abp.Application.Dtos; -using Volo.Abp.Application.Services; -using Volo.Abp.Domain.Repositories; - -namespace Acme.BookStore.Books +[Fact] +public async Task Should_Create_A_Valid_Book() { - public class BookAppService : - CrudAppService< - Book, //The Book entity - BookDto, //Used to show books - Guid, //Primary key of the book entity - PagedAndSortedResultRequestDto, //Used for paging/sorting - CreateUpdateBookDto>, //Used to create/update a book - IBookAppService //implement the IBookAppService - { - public BookAppService(IRepository repository) - : base(repository) + //Act + var result = await _bookAppService.CreateAsync( + new CreateUpdateBookDto { - GetPolicyName = BookStorePermissions.Books.Default; - GetListPolicyName = BookStorePermissions.Books.Default; - CreatePolicyName = BookStorePermissions.Books.Create; - UpdatePolicyName = BookStorePermissions.Books.Edit; - DeletePolicyName = BookStorePermissions.Books.Create; + Name = "New test book 42", + Price = 10, + PublishDate = System.DateTime.Now, + Type = BookType.ScienceFiction } - } + ); + + //Assert + result.Id.ShouldNotBe(Guid.Empty); + result.Name.ShouldBe("New test book 42"); } ```` -Added code to the constructor. Base `CrudAppService` automatically uses these permissions on the CRUD operations. This makes the **application service** secure, but also makes the **HTTP API** secure since this service is automatically used as an HTTP API as explained before (see [auto API controllers](../API/Auto-API-Controllers.md)). - -{{if UI == "MVC"}} - -### Razor Page - -While securing the HTTP API & the application service prevents unauthorized users to use the services, they can still navigate to the book management page. While they will get authorization exception when the page makes the first AJAX call to the server, we should also authorize the page for a better user experience and security. - -Open the `BookStoreWebModule` and add the following code block inside the `ConfigureServices` method: +Add a new test that tries to create an invalid book and fails: ````csharp -Configure(options => +[Fact] +public async Task Should_Not_Create_A_Book_Without_Name() { - options.Conventions.AuthorizePage("/Books/Index", BookStorePermissions.Books.Default); - options.Conventions.AuthorizePage("/Books/CreateModal", BookStorePermissions.Books.Create); - options.Conventions.AuthorizePage("/Books/EditModal", BookStorePermissions.Books.Edit); -}); + var exception = await Assert.ThrowsAsync(async () => + { + await _bookAppService.CreateAsync( + new CreateUpdateBookDto + { + Name = "", + Price = 10, + PublishDate = DateTime.Now, + Type = BookType.ScienceFiction + } + ); + }); + + exception.ValidationErrors + .ShouldContain(err => err.MemberNames.Any(mem => mem == "Name")); +} ```` -Now, unauthorized users are redirected to the **login page**. +* Since the `Name` is empty, ABP will throw an `AbpValidationException`. -#### Hide the New Book Button +The final test class should be as shown below: -The book management page has a *New Book* button that should be invisible if the current user has no *Book Creation* permission. - -![bookstore-new-book-button-small](images/bookstore-new-book-button-small.png) - -Open the `Pages/Books/Index.cshtml` file and change the content as shown below: +````csharp +using System; +using System.Linq; +using System.Threading.Tasks; +using Shouldly; +using Volo.Abp.Application.Dtos; +using Volo.Abp.Validation; +using Xunit; -````html -@page -@using Acme.BookStore.Localization -@using Acme.BookStore.Permissions -@using Acme.BookStore.Web.Pages.Books -@using Microsoft.AspNetCore.Authorization -@using Microsoft.Extensions.Localization -@model IndexModel -@inject IStringLocalizer L -@inject IAuthorizationService AuthorizationService -@section scripts +namespace Acme.BookStore.Books { - -} + public class BookAppService_Tests : BookStoreApplicationTestBase + { + private readonly IBookAppService _bookAppService; + + public BookAppService_Tests() + { + _bookAppService = GetRequiredService(); + } - - - - - @L["Books"] - - - @if (await AuthorizationService.IsGrantedAsync(BookStorePermissions.Books.Create)) + [Fact] + public async Task Should_Get_List_Of_Books() + { + //Act + var result = await _bookAppService.GetListAsync( + new PagedAndSortedResultRequestDto() + ); + + //Assert + result.TotalCount.ShouldBeGreaterThan(0); + result.Items.ShouldContain(b => b.Name == "1984"); + } + + [Fact] + public async Task Should_Create_A_Valid_Book() + { + //Act + var result = await _bookAppService.CreateAsync( + new CreateUpdateBookDto { - + Name = "New test book 42", + Price = 10, + PublishDate = System.DateTime.Now, + Type = BookType.ScienceFiction } - - - - - - - -```` - -* Added `@inject IAuthorizationService AuthorizationService` to access to the authorization service. -* Used `@if (await AuthorizationService.IsGrantedAsync(BookStorePermissions.Books.Create))` to check the book creation permission to conditionally render the *New Book* button. - -### JavaScript Side - -Books table in the book management page has an actions button for each row. The actions button includes *Edit* and *Delete* action: - -![bookstore-edit-delete-actions](images/bookstore-edit-delete-actions.png) - -We should hide an action if the current user has not granted for the related permission. Datatables row actions has a `visible` option that can be set to `false` to hide the action item. - -Open the `Pages/Books/Index.js` inside the `Acme.BookStore.Web` project and add a `visible` option to the `Edit` action as shown below: + ); -````js -{ - text: l('Edit'), - visible: abp.auth.isGranted('BookStore.Books.Edit'), //CHECK for the PERMISSION - action: function (data) { - editModal.open({ id: data.record.id }); + //Assert + result.Id.ShouldNotBe(Guid.Empty); + result.Name.ShouldBe("New test book 42"); + } + + [Fact] + public async Task Should_Not_Create_A_Book_Without_Name() + { + var exception = await Assert.ThrowsAsync(async () => + { + await _bookAppService.CreateAsync( + new CreateUpdateBookDto + { + Name = "", + Price = 10, + PublishDate = DateTime.Now, + Type = BookType.ScienceFiction + } + ); + }); + + exception.ValidationErrors + .ShouldContain(err => err.MemberNames.Any(mem => mem == "Name")); + } } } ```` -Do same for the `Delete` action: - -````js -visible: abp.auth.isGranted('BookStore.Books.Delete') -```` - -* `abp.auth.isGranted(...)` is used to check a permission that is defined before. -* `visible` could also be get a function that returns a `bool` if the value will be calculated later, based on some conditions. - -### Menu Item - -Even we have secured all the layers of the book management page, it is still visible on the main menu of the application. We should hide the menu item if the current user has no permission. - -Open the `BookStoreMenuContributor` class, find the code block below: - -````csharp -context.Menu.AddItem( - new ApplicationMenuItem( - "BooksStore", - l["Menu:BookStore"], - icon: "fa fa-book" - ).AddItem( - new ApplicationMenuItem( - "BooksStore.Books", - l["Menu:Books"], - url: "/Books" - ) - ) -); -```` - -And replace this code block with the following: - -````csharp -var bookStoreMenu = new ApplicationMenuItem( - "BooksStore", - l["Menu:BookStore"], - icon: "fa fa-book" -); - -context.Menu.AddItem(bookStoreMenu); +Open the **Test Explorer Window** (use Test -> Windows -> Test Explorer menu if it is not visible) and **Run All** tests: -//CHECK the PERMISSION -if (await context.IsGrantedAsync(BookStorePermissions.Books.Default)) -{ - bookStoreMenu.AddItem(new ApplicationMenuItem( - "BooksStore.Books", - l["Menu:Books"], - url: "/Books" - )); -} -```` +![bookstore-appservice-tests](./images/bookstore-appservice-tests.png) -{{else if UI == "NG"}} +Congratulations, the **green icons** indicates that the tests have been successfully passed! -***Angular UI authorization document is being prepared...*** +## The Next Part -{{end}} \ No newline at end of file +See the [next part](part-5.md) of this tutorial. \ No newline at end of file diff --git a/docs/en/Tutorials/Part-5.md b/docs/en/Tutorials/Part-5.md new file mode 100644 index 0000000000..17dacbd4f7 --- /dev/null +++ b/docs/en/Tutorials/Part-5.md @@ -0,0 +1,316 @@ +# Web Application Development Tutorial - Part 5: Authorization +````json +//[doc-params] +{ + "UI": ["MVC","NG"] +} +```` + +{{ +if UI == "MVC" + DB="ef" + DB_Text="Entity Framework Core" + UI_Text="mvc" +else if UI == "NG" + DB="mongodb" + DB_Text="MongoDB" + UI_Text="angular" +else + DB ="?" + UI_Text="?" +end +}} + +## About This Tutorial + +In this tutorial series, you will build an ABP based web application named `Acme.BookStore`. This application is used to manage a list of books and their authors. It is developed using the following technologies: + +* **{{DB_Text}}** as the ORM provider. +* **{{UI_Value}}** as the UI Framework. + +This tutorial is organized as the following parts; + +- [Part 1: Creating the project and book list page](Part-1.md) +- [Part 2: The book list page](Part-2.md) +- [Part 3: Creating, updating and deleting books](Part-3.md) +- [Part 4: Integration tests](Part-4.md) +- **Part 5: Authorization (this part)** + +### Source Code + +You can find the completed solution on {{if UI == "MVC"}}[the GitHub repository](https://github.com/abpframework/abp-samples/tree/master/BookStore-Mvc-EfCore){{else}}[the GitHub repository](https://github.com/abpframework/abp-samples/tree/master/BookStore-Angular-MongoDb){{end}}. + +## Permissions + +ABP Framework provides an [authorization system](../Authorization.md) based on the ASP.NET Core's [authorization infrastructure](https://docs.microsoft.com/en-us/aspnet/core/security/authorization/introduction). One major feature added on top of the standard authorization infrastructure is the **permission system** which allows to define permissions and enable/disable per role, user or client. + +### Permission Names + +A permission must have a unique name (a `string`). The best way is to define it as a `const`, so we can reuse the permission name. + +Open the `BookStorePermissions` class and change the content as shown below: + +````csharp +namespace Acme.BookStore.Permissions +{ + public static class BookStorePermissions + { + public const string GroupName = "BookStore"; + + public static class Books + { + public const string Default = GroupName + ".Books"; + public const string Create = Default + ".Create"; + public const string Edit = Default + ".Edit"; + public const string Delete = Default + ".Delete"; + } + } +} +```` + +This is a hierarchical way of defining permission names. For example, "create book" permission name was defined as `BookStore.Books.Create`. + +### Permission Definitions + +You should define permissions before using them. + +Open the `BookStorePermissionDefinitionProvider` class inside the `Acme.BookStore.Application.Contracts` project and change the content as shown below: + +````csharp +using Acme.BookStore.Localization; +using Volo.Abp.Authorization.Permissions; +using Volo.Abp.Localization; + +namespace Acme.BookStore.Permissions +{ + public class BookStorePermissionDefinitionProvider : PermissionDefinitionProvider + { + public override void Define(IPermissionDefinitionContext context) + { + var bookStoreGroup = context.AddGroup(BookStorePermissions.GroupName, L("Permission:BookStore")); + + var booksPermission = bookStoreGroup.AddPermission(BookStorePermissions.Books.Default, L("Permission:Books")); + booksPermission.AddChild(BookStorePermissions.Books.Create, L("Permission:Books.Create")); + booksPermission.AddChild(BookStorePermissions.Books.Edit, L("Permission:Books.Edit")); + booksPermission.AddChild(BookStorePermissions.Books.Delete, L("Permission:Books.Delete")); + } + + private static LocalizableString L(string name) + { + return LocalizableString.Create(name); + } + } +} +```` + +This class defines a **permission group** (to group permissions on the UI, will be seen below) and **4 permissions** inside this group. Also, **Create**, **Edit** and **Delete** are children of the `BookStorePermissions.Books.Default` permission. A child permission can be selected **only if the parent was selected**. + +Finally, edit the localization file (`en.json` under the `Localization/BookStore` folder of the `Acme.BookStore.Domain.Shared` project) to define the localization keys used above: + +````json +"Permission:BookStore": "Book Store", +"Permission:Books": "Book Management", +"Permission:Books.Create": "Creating new books", +"Permission:Books.Edit": "Editing the books", +"Permission:Books.Delete": "Deleting the books" +```` + +> Localization key names are arbitrary and no forcing rule. But we prefer the convention used above. + +### Permission Management UI + +Once you define the permissions, you can see them on the **permission management modal**. + +Go to the *Administration -> Identity -> Roles* page, select *Permissions* action for the admin role to open the permission management modal: + +![bookstore-permissions-ui](images/bookstore-permissions-ui.png) + +Grant the permissions you want and save the modal. + +## Authorization + +Now, you can use the permissions to authorize the book management. + +### Application Layer & HTTP API + +Open the `BookAppService` class and add set the policy names as the permission names defined above: + +````csharp +using System; +using Acme.BookStore.Permissions; +using Volo.Abp.Application.Dtos; +using Volo.Abp.Application.Services; +using Volo.Abp.Domain.Repositories; + +namespace Acme.BookStore.Books +{ + public class BookAppService : + CrudAppService< + Book, //The Book entity + BookDto, //Used to show books + Guid, //Primary key of the book entity + PagedAndSortedResultRequestDto, //Used for paging/sorting + CreateUpdateBookDto>, //Used to create/update a book + IBookAppService //implement the IBookAppService + { + public BookAppService(IRepository repository) + : base(repository) + { + GetPolicyName = BookStorePermissions.Books.Default; + GetListPolicyName = BookStorePermissions.Books.Default; + CreatePolicyName = BookStorePermissions.Books.Create; + UpdatePolicyName = BookStorePermissions.Books.Edit; + DeletePolicyName = BookStorePermissions.Books.Create; + } + } +} +```` + +Added code to the constructor. Base `CrudAppService` automatically uses these permissions on the CRUD operations. This makes the **application service** secure, but also makes the **HTTP API** secure since this service is automatically used as an HTTP API as explained before (see [auto API controllers](../API/Auto-API-Controllers.md)). + +{{if UI == "MVC"}} + +### Razor Page + +While securing the HTTP API & the application service prevents unauthorized users to use the services, they can still navigate to the book management page. While they will get authorization exception when the page makes the first AJAX call to the server, we should also authorize the page for a better user experience and security. + +Open the `BookStoreWebModule` and add the following code block inside the `ConfigureServices` method: + +````csharp +Configure(options => +{ + options.Conventions.AuthorizePage("/Books/Index", BookStorePermissions.Books.Default); + options.Conventions.AuthorizePage("/Books/CreateModal", BookStorePermissions.Books.Create); + options.Conventions.AuthorizePage("/Books/EditModal", BookStorePermissions.Books.Edit); +}); +```` + +Now, unauthorized users are redirected to the **login page**. + +#### Hide the New Book Button + +The book management page has a *New Book* button that should be invisible if the current user has no *Book Creation* permission. + +![bookstore-new-book-button-small](images/bookstore-new-book-button-small.png) + +Open the `Pages/Books/Index.cshtml` file and change the content as shown below: + +````html +@page +@using Acme.BookStore.Localization +@using Acme.BookStore.Permissions +@using Acme.BookStore.Web.Pages.Books +@using Microsoft.AspNetCore.Authorization +@using Microsoft.Extensions.Localization +@model IndexModel +@inject IStringLocalizer L +@inject IAuthorizationService AuthorizationService +@section scripts +{ + +} + + + + + + @L["Books"] + + + @if (await AuthorizationService.IsGrantedAsync(BookStorePermissions.Books.Create)) + { + + } + + + + + + + +```` + +* Added `@inject IAuthorizationService AuthorizationService` to access to the authorization service. +* Used `@if (await AuthorizationService.IsGrantedAsync(BookStorePermissions.Books.Create))` to check the book creation permission to conditionally render the *New Book* button. + +### JavaScript Side + +Books table in the book management page has an actions button for each row. The actions button includes *Edit* and *Delete* action: + +![bookstore-edit-delete-actions](images/bookstore-edit-delete-actions.png) + +We should hide an action if the current user has not granted for the related permission. Datatables row actions has a `visible` option that can be set to `false` to hide the action item. + +Open the `Pages/Books/Index.js` inside the `Acme.BookStore.Web` project and add a `visible` option to the `Edit` action as shown below: + +````js +{ + text: l('Edit'), + visible: abp.auth.isGranted('BookStore.Books.Edit'), //CHECK for the PERMISSION + action: function (data) { + editModal.open({ id: data.record.id }); + } +} +```` + +Do same for the `Delete` action: + +````js +visible: abp.auth.isGranted('BookStore.Books.Delete') +```` + +* `abp.auth.isGranted(...)` is used to check a permission that is defined before. +* `visible` could also be get a function that returns a `bool` if the value will be calculated later, based on some conditions. + +### Menu Item + +Even we have secured all the layers of the book management page, it is still visible on the main menu of the application. We should hide the menu item if the current user has no permission. + +Open the `BookStoreMenuContributor` class, find the code block below: + +````csharp +context.Menu.AddItem( + new ApplicationMenuItem( + "BooksStore", + l["Menu:BookStore"], + icon: "fa fa-book" + ).AddItem( + new ApplicationMenuItem( + "BooksStore.Books", + l["Menu:Books"], + url: "/Books" + ) + ) +); +```` + +And replace this code block with the following: + +````csharp +var bookStoreMenu = new ApplicationMenuItem( + "BooksStore", + l["Menu:BookStore"], + icon: "fa fa-book" +); + +context.Menu.AddItem(bookStoreMenu); + +//CHECK the PERMISSION +if (await context.IsGrantedAsync(BookStorePermissions.Books.Default)) +{ + bookStoreMenu.AddItem(new ApplicationMenuItem( + "BooksStore.Books", + l["Menu:Books"], + url: "/Books" + )); +} +```` + +{{else if UI == "NG"}} + +***Angular UI authorization document is being prepared...*** + +{{end}} \ No newline at end of file diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json index b691ea9b07..239f071619 100644 --- a/docs/en/docs-nav.json +++ b/docs/en/docs-nav.json @@ -26,19 +26,27 @@ "text": "Tutorials", "items": [ { - "text": "Application Development", + "text": "Web Application Development", "items": [ { - "text": "Part-1: Creating a new solution and listing items", + "text": "1: Creating the Server Side", "path": "Tutorials/Part-1.md" }, { - "text": "Part-2: CRUD operations", + "text": "2: The Book List Page", "path": "Tutorials/Part-2.md" }, { - "text": "Part-3: Integration tests", + "text": "3: Creating, Updating and Deleting Books", "path": "Tutorials/Part-3.md" + }, + { + "text": "4: Integration Tests", + "path": "Tutorials/Part-4.md" + }, + { + "text": "5: Authorization", + "path": "Tutorials/Part-5.md" } ] } From b329520312b8771b7c08d69870e8160ce6e98723 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Sun, 5 Jul 2020 21:38:04 +0300 Subject: [PATCH 019/137] Fix db provider naming --- docs/en/Tutorials/Part-1.md | 27 +++++++++++++++------------ docs/en/Tutorials/Part-2.md | 15 +++++++++------ docs/en/Tutorials/Part-3.md | 16 +++++++++------- docs/en/Tutorials/Part-4.md | 22 ++++++++++++---------- docs/en/Tutorials/Part-5.md | 18 ++++++++++-------- 5 files changed, 55 insertions(+), 43 deletions(-) diff --git a/docs/en/Tutorials/Part-1.md b/docs/en/Tutorials/Part-1.md index c74f7d8c85..89236e2a85 100644 --- a/docs/en/Tutorials/Part-1.md +++ b/docs/en/Tutorials/Part-1.md @@ -2,22 +2,25 @@ ````json //[doc-params] { - "UI": ["MVC","NG"] + "UI": ["MVC","NG"], + "DB": ["EF","Mongo"] } ```` {{ if UI == "MVC" - DB="ef" - DB_Text="Entity Framework Core" UI_Text="mvc" else if UI == "NG" - DB="mongodb" - DB_Text="MongoDB" UI_Text="angular" else - DB ="?" UI_Text="?" end +if DB == "EF" + DB_Text="Entity Framework Core" +else if DB == "Mongo" + DB_Text="MongoDB" +else + DB_Text="?" +end }} ## About This Tutorial @@ -41,7 +44,7 @@ You can find the completed solution on {{if UI == "MVC"}}[the GitHub repository] ## Creating the Solution -Before starting to the development, create a new solution named `Acme.BookStore` and run it by following the [getting started tutorial](../Getting-Started-{{if UI == 'NG'}}Angular{{else}}AspNetCore-MVC{{end}}-Template#creating-a-new-project). +Before starting to the development, create a new solution named `Acme.BookStore` and run it by following the [getting started tutorial](../Getting-Started.md). ## Create the Book Entity @@ -107,7 +110,7 @@ The final folder/file structure should be as shown below: ### Add Book Entity to the DbContext -{{if DB == "ef"}} +{{if DB == "EF"}} EF Core requires to relate entities with your `DbContext`. The easiest way to do this is to add a `DbSet` property to the `BookStoreDbContext` class in the `Acme.BookStore.EntityFrameworkCore` project, as shown below: @@ -121,7 +124,7 @@ public class BookStoreDbContext : AbpDbContext {{end}} -{{if DB == "mongodb"}} +{{if DB == "Mongo"}} Add a `IMongoCollection Books` property to the `BookStoreMongoDbContext` inside the `Acme.BookStore.MongoDB` project: @@ -135,7 +138,7 @@ public class BookStoreMongoDbContext : AbpMongoDbContext {{end}} -{{if DB == "ef"}} +{{if DB == "EF"}} ### Map the Book Entity to a Database Table @@ -261,13 +264,13 @@ Run the `Acme.BookStore.DbMigrator` application to update the database: ![bookstore-dbmigrator-on-solution](images/bookstore-dbmigrator-on-solution.png) -{{if DB == "ef"}} +{{if DB == "EF"}} `.DbMigrator` is a console application that can be run to **migrate the database schema** and **seed the data** on **development** and **production** environments. {{end}} -{{if DB == "mongodb"}} +{{if DB == "Mongo"}} While MongoDB **doesn't require** a database schema migration, it is still good to run this application since it **seeds the initial data** on the database. This application can be used on **development** and **production** environments. diff --git a/docs/en/Tutorials/Part-2.md b/docs/en/Tutorials/Part-2.md index 1a3c2db7fd..904d68aa7f 100644 --- a/docs/en/Tutorials/Part-2.md +++ b/docs/en/Tutorials/Part-2.md @@ -2,22 +2,25 @@ ````json //[doc-params] { - "UI": ["MVC","NG"] + "UI": ["MVC","NG"], + "DB": ["EF","Mongo"] } ```` {{ if UI == "MVC" - DB="ef" - DB_Text="Entity Framework Core" UI_Text="mvc" else if UI == "NG" - DB="mongodb" - DB_Text="MongoDB" UI_Text="angular" else - DB ="?" UI_Text="?" end +if DB == "EF" + DB_Text="Entity Framework Core" +else if DB == "Mongo" + DB_Text="MongoDB" +else + DB_Text="?" +end }} ## About This Tutorial diff --git a/docs/en/Tutorials/Part-3.md b/docs/en/Tutorials/Part-3.md index 1a861f76bd..c19f621ecf 100644 --- a/docs/en/Tutorials/Part-3.md +++ b/docs/en/Tutorials/Part-3.md @@ -2,23 +2,25 @@ ````json //[doc-params] { - "UI": ["MVC","NG"] + "UI": ["MVC","NG"], + "DB": ["EF","Mongo"] } ```` - {{ if UI == "MVC" - DB="ef" - DB_Text="Entity Framework Core" UI_Text="mvc" else if UI == "NG" - DB="mongodb" - DB_Text="MongoDB" UI_Text="angular" else - DB ="?" UI_Text="?" end +if DB == "EF" + DB_Text="Entity Framework Core" +else if DB == "Mongo" + DB_Text="MongoDB" +else + DB_Text="?" +end }} ## About This Tutorial diff --git a/docs/en/Tutorials/Part-4.md b/docs/en/Tutorials/Part-4.md index c2c0c2b530..98900abff8 100644 --- a/docs/en/Tutorials/Part-4.md +++ b/docs/en/Tutorials/Part-4.md @@ -2,23 +2,25 @@ ````json //[doc-params] { - "UI": ["MVC","NG"] + "UI": ["MVC","NG"], + "DB": ["EF","Mongo"] } ```` - {{ if UI == "MVC" - DB="ef" - DB_Text="Entity Framework Core" UI_Text="mvc" else if UI == "NG" - DB="mongodb" - DB_Text="MongoDB" UI_Text="angular" -else - DB ="?" +else UI_Text="?" end +if DB == "EF" + DB_Text="Entity Framework Core" +else if DB == "Mongo" + DB_Text="MongoDB" +else + DB_Text="?" +end }} ## About This Tutorial @@ -52,11 +54,11 @@ Each project is used to test the related project. Test projects use the followin * [Shoudly](http://shouldly.readthedocs.io/en/latest/) as the assertion library. * [NSubstitute](http://nsubstitute.github.io/) as the mocking library. -{{if DB="ef"}} +{{if DB="EF"}} > The test projects are configured to use **SQLite in-memory** as the database. A separate database instance is created and seeded (with the data seed system) to prepare a fresh database for every test. -{{else if DB="mongodb"}} +{{else if DB="Mongo"}} > **[Mongo2Go](https://github.com/Mongo2Go/Mongo2Go)** library is used to mock the MongoDB database. A separate database instance is created and seeded (with the data seed system) to prepare a fresh database for every test. diff --git a/docs/en/Tutorials/Part-5.md b/docs/en/Tutorials/Part-5.md index 17dacbd4f7..fcf359d974 100644 --- a/docs/en/Tutorials/Part-5.md +++ b/docs/en/Tutorials/Part-5.md @@ -2,23 +2,25 @@ ````json //[doc-params] { - "UI": ["MVC","NG"] + "UI": ["MVC","NG"], + "DB": ["EF","Mongo"] } ```` - {{ if UI == "MVC" - DB="ef" - DB_Text="Entity Framework Core" UI_Text="mvc" else if UI == "NG" - DB="mongodb" - DB_Text="MongoDB" UI_Text="angular" -else - DB ="?" +else UI_Text="?" end +if DB == "EF" + DB_Text="Entity Framework Core" +else if DB == "Mongo" + DB_Text="MongoDB" +else + DB_Text="?" +end }} ## About This Tutorial From 06cfb503869424186462d489b8b56439b67f01a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Sun, 5 Jul 2020 21:42:17 +0300 Subject: [PATCH 020/137] Update Part-4.md --- docs/en/Tutorials/Part-4.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/en/Tutorials/Part-4.md b/docs/en/Tutorials/Part-4.md index 98900abff8..3f14123cd9 100644 --- a/docs/en/Tutorials/Part-4.md +++ b/docs/en/Tutorials/Part-4.md @@ -54,11 +54,11 @@ Each project is used to test the related project. Test projects use the followin * [Shoudly](http://shouldly.readthedocs.io/en/latest/) as the assertion library. * [NSubstitute](http://nsubstitute.github.io/) as the mocking library. -{{if DB="EF"}} +{{if DB=="EF"}} > The test projects are configured to use **SQLite in-memory** as the database. A separate database instance is created and seeded (with the data seed system) to prepare a fresh database for every test. -{{else if DB="Mongo"}} +{{else if DB=="Mongo"}} > **[Mongo2Go](https://github.com/Mongo2Go/Mongo2Go)** library is used to mock the MongoDB database. A separate database instance is created and seeded (with the data seed system) to prepare a fresh database for every test. From fe20970c322768305f8c83e7dd01aa6bee69be3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Sun, 5 Jul 2020 21:53:38 +0300 Subject: [PATCH 021/137] Update source code sections. --- docs/en/Tutorials/Part-1.md | 7 +++++-- docs/en/Tutorials/Part-2.md | 9 ++++++--- docs/en/Tutorials/Part-3.md | 7 +++++-- docs/en/Tutorials/Part-4.md | 9 ++++++--- docs/en/Tutorials/Part-5.md | 7 +++++-- 5 files changed, 27 insertions(+), 12 deletions(-) diff --git a/docs/en/Tutorials/Part-1.md b/docs/en/Tutorials/Part-1.md index 89236e2a85..c1bd36c74e 100644 --- a/docs/en/Tutorials/Part-1.md +++ b/docs/en/Tutorials/Part-1.md @@ -38,9 +38,12 @@ This tutorial is organized as the following parts; - [Part 4: Integration tests](Part-4.md) - [Part 5: Authorization](Part-5.md) -### Source Code +### Download the Source Code -You can find the completed solution on {{if UI == "MVC"}}[the GitHub repository](https://github.com/abpframework/abp-samples/tree/master/BookStore-Mvc-EfCore){{else}}[the GitHub repository](https://github.com/abpframework/abp-samples/tree/master/BookStore-Angular-MongoDb){{end}}. +This tutorials has multiple versions based on your **UI** and **Database** preferences. We've prepared two combinations of the source code to be downloaded: + +* [MVC (Razor Pages) UI with EF Core](https://github.com/abpframework/abp-samples/tree/master/BookStore-Mvc-EfCore) +* [Angular UI with MongoDB](https://github.com/abpframework/abp-samples/tree/master/BookStore-Angular-MongoDb) ## Creating the Solution diff --git a/docs/en/Tutorials/Part-2.md b/docs/en/Tutorials/Part-2.md index 904d68aa7f..5c8f7ace9a 100644 --- a/docs/en/Tutorials/Part-2.md +++ b/docs/en/Tutorials/Part-2.md @@ -38,9 +38,12 @@ This tutorial is organized as the following parts; - [Part 4: Integration tests](Part-4.md) - [Part 5: Authorization](Part-5.md) -### Source Code +### Download the Source Code -You can find the completed solution on {{if UI == "MVC"}}[the GitHub repository](https://github.com/abpframework/abp-samples/tree/master/BookStore-Mvc-EfCore){{else}}[the GitHub repository](https://github.com/abpframework/abp-samples/tree/master/BookStore-Angular-MongoDb){{end}}. +This tutorials has multiple versions based on your **UI** and **Database** preferences. We've prepared two combinations of the source code to be downloaded: + +* [MVC (Razor Pages) UI with EF Core](https://github.com/abpframework/abp-samples/tree/master/BookStore-Mvc-EfCore) +* [Angular UI with MongoDB](https://github.com/abpframework/abp-samples/tree/master/BookStore-Angular-MongoDb) {{if UI == "MVC"}} @@ -50,7 +53,7 @@ It's common to call the HTTP API endpoints via AJAX from the **JavaScript** side ABP **dynamically** creates **[JavaScript Proxies](../UI/AspNetCore/)** for all API endpoints. So, you can use any **endpoint** just like calling a **JavaScript function**. -### Testing in Developer Console of the Browser +### Testing in the Developer Console You can easily test the JavaScript proxies using your favorite browser's **Developer Console**. Run the application, open your browser's **developer tools** (*shortcut is generally F12*), switch to the **Console** tab, type the following code and press enter: diff --git a/docs/en/Tutorials/Part-3.md b/docs/en/Tutorials/Part-3.md index c19f621ecf..2890db181b 100644 --- a/docs/en/Tutorials/Part-3.md +++ b/docs/en/Tutorials/Part-3.md @@ -38,9 +38,12 @@ This tutorial is organized as the following parts; - [Part 4: Integration tests](Part-4.md) - [Part 5: Authorization](Part-5.md) -### Source Code +### Download the Source Code -You can find the completed solution on {{if UI == "MVC"}}[the GitHub repository](https://github.com/abpframework/abp-samples/tree/master/BookStore-Mvc-EfCore){{else}}[the GitHub repository](https://github.com/abpframework/abp-samples/tree/master/BookStore-Angular-MongoDb){{end}}. +This tutorials has multiple versions based on your **UI** and **Database** preferences. We've prepared two combinations of the source code to be downloaded: + +* [MVC (Razor Pages) UI with EF Core](https://github.com/abpframework/abp-samples/tree/master/BookStore-Mvc-EfCore) +* [Angular UI with MongoDB](https://github.com/abpframework/abp-samples/tree/master/BookStore-Angular-MongoDb) {{if UI == "MVC"}} diff --git a/docs/en/Tutorials/Part-4.md b/docs/en/Tutorials/Part-4.md index 3f14123cd9..0325f3f60a 100644 --- a/docs/en/Tutorials/Part-4.md +++ b/docs/en/Tutorials/Part-4.md @@ -38,9 +38,12 @@ This tutorial is organized as the following parts; - **Part 4: Integration tests (this part)** - [Part 5: Authorization](Part-5.md) -### Source Code +### Download the Source Code -You can find the completed solution on {{if UI == "MVC"}}[the GitHub repository](https://github.com/abpframework/abp-samples/tree/master/BookStore-Mvc-EfCore){{else}}[the GitHub repository](https://github.com/abpframework/abp-samples/tree/master/BookStore-Angular-MongoDb){{end}}. +This tutorials has multiple versions based on your **UI** and **Database** preferences. We've prepared two combinations of the source code to be downloaded: + +* [MVC (Razor Pages) UI with EF Core](https://github.com/abpframework/abp-samples/tree/master/BookStore-Mvc-EfCore) +* [Angular UI with MongoDB](https://github.com/abpframework/abp-samples/tree/master/BookStore-Angular-MongoDb) ## Test Projects in the Solution @@ -68,7 +71,7 @@ Each project is used to test the related project. Test projects use the followin If you had created a data seed contributor as described in the [first part](Part-1.md), the same data will be available in your tests. So, you can skip this section. If you haven't created the seed contributor, you can use the `BookStoreTestDataSeedContributor` to seed the same data to be used in the tests below. -## Testing The Application Service: BookAppService +## Testing the BookAppService Create a test class named `BookAppService_Tests` in the `Acme.BookStore.Application.Tests` project: diff --git a/docs/en/Tutorials/Part-5.md b/docs/en/Tutorials/Part-5.md index fcf359d974..61bb16c534 100644 --- a/docs/en/Tutorials/Part-5.md +++ b/docs/en/Tutorials/Part-5.md @@ -38,9 +38,12 @@ This tutorial is organized as the following parts; - [Part 4: Integration tests](Part-4.md) - **Part 5: Authorization (this part)** -### Source Code +### Download the Source Code -You can find the completed solution on {{if UI == "MVC"}}[the GitHub repository](https://github.com/abpframework/abp-samples/tree/master/BookStore-Mvc-EfCore){{else}}[the GitHub repository](https://github.com/abpframework/abp-samples/tree/master/BookStore-Angular-MongoDb){{end}}. +This tutorials has multiple versions based on your **UI** and **Database** preferences. We've prepared two combinations of the source code to be downloaded: + +* [MVC (Razor Pages) UI with EF Core](https://github.com/abpframework/abp-samples/tree/master/BookStore-Mvc-EfCore) +* [Angular UI with MongoDB](https://github.com/abpframework/abp-samples/tree/master/BookStore-Angular-MongoDb) ## Permissions From 775e1a4252cdf3f2aa71b1520a2a38492c4afacd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Sun, 5 Jul 2020 22:06:26 +0300 Subject: [PATCH 022/137] Update Part-2.md --- docs/en/Tutorials/Part-2.md | 127 ++++++++++++++++++------------------ 1 file changed, 64 insertions(+), 63 deletions(-) diff --git a/docs/en/Tutorials/Part-2.md b/docs/en/Tutorials/Part-2.md index 5c8f7ace9a..90059c4831 100644 --- a/docs/en/Tutorials/Part-2.md +++ b/docs/en/Tutorials/Part-2.md @@ -98,6 +98,59 @@ Check the `Books` table in the database to see the new book row. You can try `ge We will use these dynamic proxy functions in the next sections to communicate to the server. +{{end}} + +## Localization + +Before starting to the UI development, we first want to prepare the localization texts (you normally do when needed while developing your application). + +Localization texts are located under the `Localization/BookStore` folder of the `Acme.BookStore.Domain.Shared` project: + +![bookstore-localization-files](./images/bookstore-localization-files-v2.png) + +Open the `en.json` (*the English translations*) file and change the content as below: + +````json +{ + "Culture": "en", + "Texts": { + "Menu:Home": "Home", + "Welcome": "Welcome", + "LongWelcomeMessage": "Welcome to the application. This is a startup project based on the ABP framework. For more information, visit abp.io.", + "Menu:BookStore": "Book Store", + "Menu:Books": "Books", + "Actions": "Actions", + "Edit": "Edit", + "PublishDate": "Publish date", + "NewBook": "New book", + "Name": "Name", + "Type": "Type", + "Price": "Price", + "CreationTime": "Creation time", + "AreYouSureToDelete": "Are you sure you want to delete this item?", + "Enum:BookType:0": "Undefined", + "Enum:BookType:1": "Adventure", + "Enum:BookType:2": "Biography", + "Enum:BookType:3": "Dystopia", + "Enum:BookType:4": "Fantastic", + "Enum:BookType:5": "Horror", + "Enum:BookType:6": "Science", + "Enum:BookType:7": "Science fiction", + "Enum:BookType:8": "Poetry" + } +} +```` + +* Localization key names are arbitrary. You can set any name. We prefer some conventions for specific text types; + * Add `Menu:` prefix for menu items. + * Use `Enum::` naming convention to localize the enum members. When you do it like that, ABP can automatically localize the enums in some proper cases. + +If a text is not defined in the localization file, it **fallbacks** to the localization key (as ASP.NET Core's standard behavior). + +> ABP's localization system is built on [ASP.NET Core's standard localization](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/localization) system and extends it in many ways. See the [localization document](../Localization.md) for details. + +{{if UI == "MVC"}} + ## Create a Books Page It's time to create something visible and usable! Instead of classic MVC, we will use the [Razor Pages UI](https://docs.microsoft.com/en-us/aspnet/core/tutorials/razor-pages/razor-pages-start) approach which is recommended by Microsoft. @@ -153,57 +206,6 @@ context.Menu.AddItem( ); ```` -{{end}} - -### Localization - -Localization texts are located under the `Localization/BookStore` folder of the `Acme.BookStore.Domain.Shared` project: - -![bookstore-localization-files](./images/bookstore-localization-files-v2.png) - -Open the `en.json` (*the English translations*) file and change the content as below: - -````json -{ - "Culture": "en", - "Texts": { - "Menu:Home": "Home", - "Welcome": "Welcome", - "LongWelcomeMessage": "Welcome to the application. This is a startup project based on the ABP framework. For more information, visit abp.io.", - "Menu:BookStore": "Book Store", - "Menu:Books": "Books", - "Actions": "Actions", - "Edit": "Edit", - "PublishDate": "Publish date", - "NewBook": "New book", - "Name": "Name", - "Type": "Type", - "Price": "Price", - "CreationTime": "Creation time", - "AreYouSureToDelete": "Are you sure you want to delete this item?", - "Enum:BookType:0": "Undefined", - "Enum:BookType:1": "Adventure", - "Enum:BookType:2": "Biography", - "Enum:BookType:3": "Dystopia", - "Enum:BookType:4": "Fantastic", - "Enum:BookType:5": "Horror", - "Enum:BookType:6": "Science", - "Enum:BookType:7": "Science fiction", - "Enum:BookType:8": "Poetry" - } -} -```` - -* Localization key names are arbitrary. You can set any name. We prefer some conventions for specific text types; - * Add `Menu:` prefix for menu items. - * Use `Enum::` naming convention to localize the enum members. When you do it like that, ABP can automatically localize the enums in some proper cases. - -If a text is not defined in the localization file, it **fallbacks** to the localization key (as ASP.NET Core's standard behavior). - -> ABP's localization system is built on [ASP.NET Core's standard localization](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/localization) system and extends it in many ways. See the [localization document](../Localization.md) for details. - -{{if UI == "MVC"}} - Run the project, login to the application with the username `admin` and the password `1q2w3E*` and see the new menu item has been added to the main menu: ![bookstore-menu-items](./images/bookstore-new-menu-item.png) @@ -327,24 +329,23 @@ This is a fully working, server side paged, sorted and localized table of books. {{if UI == "NG"}} -## Angular UI Development -### Create the books page +## Install NPM packages + +If you haven't done it before, open a new command line interface (terminal window) and go to your `angular` folder and then run `yarn` command to install NPM packages: + +```bash +yarn +``` + +## Create a Books Page -It's time to create something visible and usable! There are some tools that we will use when developing ABP Angular frontend application: +It's time to create something visible and usable! There are some tools that we will use when developing the Angular frontend application: - [Angular CLI](https://angular.io/cli) will be used to create modules, components and services. - [Ng Bootstrap](https://ng-bootstrap.github.io/#/home) will be used as the UI component library. - [ngx-datatable](https://swimlane.gitbook.io/ngx-datatable/) will be used as the datatable library. - [Visual Studio Code](https://code.visualstudio.com/) will be used as the code editor (you can use your favorite editor). -### Install NPM packages - -Open a new command line interface (terminal window) and go to your `angular` folder and then run `yarn` command to install NPM packages: - -```bash -yarn -``` - ### BookModule Run the following command line to create a new module, named `BookModule`: @@ -408,7 +409,7 @@ function configureRoutes(routes: RoutesService) { For more information, see the [RoutesService document](https://docs.abp.io/en/abp/latest/UI/Angular/Modifying-the-Menu.md#via-routesservice). -#### Book List Component +### Book List Component Run the command below on the terminal in the root folder to generate a new component, named book-list: From 5a476310fec81c0db018c5e4b4ad5e27530f7dbb Mon Sep 17 00:00:00 2001 From: maliming <6908465+maliming@users.noreply.github.com> Date: Mon, 6 Jul 2020 10:00:22 +0800 Subject: [PATCH 023/137] Rename the text "MY_PROJECT_NAME" when generating a new project Resolve #4592 --- .../Building/Steps/SolutionRenameStep.cs | 3 +- .../System/AbpStringExtensions.cs | 72 ++++++++++++++++++- .../System/StringExtensions_Tests.cs | 12 +++- 3 files changed, 84 insertions(+), 3 deletions(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/SolutionRenameStep.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/SolutionRenameStep.cs index bf5ad938af..abdb9e45f5 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/SolutionRenameStep.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/SolutionRenameStep.cs @@ -64,7 +64,8 @@ namespace Volo.Abp.Cli.ProjectBuilding.Building.Steps RenameHelper.RenameAll(_entries, _projectNamePlaceHolder, _projectName); RenameHelper.RenameAll(_entries, _projectNamePlaceHolder.ToCamelCase(), _projectName.ToCamelCase()); RenameHelper.RenameAll(_entries, _projectNamePlaceHolder.ToKebabCase(), _projectName.ToKebabCase()); + RenameHelper.RenameAll(_entries, _projectNamePlaceHolder.ToSnakeCase().ToUpper(), _projectName.ToSnakeCase().ToUpper()); } } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.Core/System/AbpStringExtensions.cs b/framework/src/Volo.Abp.Core/System/AbpStringExtensions.cs index f8086c8ecd..6aa3deb4f0 100644 --- a/framework/src/Volo.Abp.Core/System/AbpStringExtensions.cs +++ b/framework/src/Volo.Abp.Core/System/AbpStringExtensions.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using System.Globalization; using System.Security.Cryptography; using System.Text; using System.Text.RegularExpressions; @@ -312,6 +313,75 @@ namespace System : Regex.Replace(str, "[a-z][A-Z]", m => m.Value[0] + "-" + char.ToLowerInvariant(m.Value[1])); } + /// + /// Converts given PascalCase/camelCase string to snake case. + /// Example: "ThisIsSampleSentence" is converted to "this_is_a_sample_sentence". + /// https://github.com/npgsql/npgsql/blob/dev/src/Npgsql/NameTranslation/NpgsqlSnakeCaseNameTranslator.cs#L51 + /// + /// String to convert. + /// + public static string ToSnakeCase(this string str) + { + if (string.IsNullOrWhiteSpace(str)) + { + return str; + } + + var builder = new StringBuilder(str.Length + Math.Min(2, str.Length / 5)); + var previousCategory = default(UnicodeCategory?); + + for (var currentIndex = 0; currentIndex < str.Length; currentIndex++) + { + var currentChar = str[currentIndex]; + if (currentChar == '_') + { + builder.Append('_'); + previousCategory = null; + continue; + } + + var currentCategory = char.GetUnicodeCategory(currentChar); + switch (currentCategory) + { + case UnicodeCategory.UppercaseLetter: + case UnicodeCategory.TitlecaseLetter: + if (previousCategory == UnicodeCategory.SpaceSeparator || + previousCategory == UnicodeCategory.LowercaseLetter || + previousCategory != UnicodeCategory.DecimalDigitNumber && + previousCategory != null && + currentIndex > 0 && + currentIndex + 1 < str.Length && + char.IsLower(str[currentIndex + 1])) + { + builder.Append('_'); + } + + currentChar = char.ToLower(currentChar); + break; + + case UnicodeCategory.LowercaseLetter: + case UnicodeCategory.DecimalDigitNumber: + if (previousCategory == UnicodeCategory.SpaceSeparator) + { + builder.Append('_'); + } + break; + + default: + if (previousCategory != null) + { + previousCategory = UnicodeCategory.SpaceSeparator; + } + continue; + } + + builder.Append(currentChar); + previousCategory = currentCategory; + } + + return builder.ToString(); + } + /// /// Converts string to enum value. /// @@ -476,4 +546,4 @@ namespace System return encoding.GetBytes(str); } } -} \ No newline at end of file +} diff --git a/framework/test/Volo.Abp.Core.Tests/System/StringExtensions_Tests.cs b/framework/test/Volo.Abp.Core.Tests/System/StringExtensions_Tests.cs index 23d961dfa7..69b02d07c1 100644 --- a/framework/test/Volo.Abp.Core.Tests/System/StringExtensions_Tests.cs +++ b/framework/test/Volo.Abp.Core.Tests/System/StringExtensions_Tests.cs @@ -83,6 +83,16 @@ namespace System "ThisIsSampleText".ToKebabCase().ShouldBe("this-is-sample-text"); } + [Fact] + public void ToSnakeCase_Test() + { + (null as string).ToSnakeCase().ShouldBe(null); + "helloMoon".ToSnakeCase().ShouldBe("hello_moon"); + "HelloWorld".ToSnakeCase().ShouldBe("hello_world"); + "HelloIsparta".ToSnakeCase().ShouldBe("hello_isparta"); + "ThisIsSampleText".ToSnakeCase().ShouldBe("this_is_sample_text"); + } + [Fact] public void ToSentenceCase_Test() { @@ -247,4 +257,4 @@ namespace System _cultureScope.Dispose(); } } -} \ No newline at end of file +} From 69f919d7aa81ade6377a07c7653cf8b16c44b726 Mon Sep 17 00:00:00 2001 From: Necati Meral Date: Mon, 6 Jul 2020 10:07:26 +0200 Subject: [PATCH 024/137] german language files encoding --- .../Localization/Resources/AbpDdd/de.json | 2 +- .../Volo/Abp/Emailing/Localization/de.json | 12 +-- .../Localization/Resources/AbpUi/de.json | 36 ++++---- .../Volo/Abp/Validation/Localization/de.json | 46 +++++------ .../Mvc/Localization/Resource/de.json | 2 +- .../Account/Localization/Resources/de.json | 24 +++--- .../Blogging/ApplicationContracts/de.json | 2 +- .../Blogging/Localization/Resources/de.json | 12 +-- .../Localization/Domain/de.json | 2 +- .../Volo/Abp/Identity/Localization/de.json | 82 +++++++++---------- .../Localization/Domain/de.json | 2 +- .../Localization/Resources/de.json | 4 +- 12 files changed, 113 insertions(+), 113 deletions(-) diff --git a/framework/src/Volo.Abp.Ddd.Application.Contracts/Volo/Abp/Application/Localization/Resources/AbpDdd/de.json b/framework/src/Volo.Abp.Ddd.Application.Contracts/Volo/Abp/Application/Localization/Resources/AbpDdd/de.json index b96b58c2b3..42bc7edb13 100644 --- a/framework/src/Volo.Abp.Ddd.Application.Contracts/Volo/Abp/Application/Localization/Resources/AbpDdd/de.json +++ b/framework/src/Volo.Abp.Ddd.Application.Contracts/Volo/Abp/Application/Localization/Resources/AbpDdd/de.json @@ -1,6 +1,6 @@ { "culture": "de", "texts": { - "MaxResultCountExceededExceptionMessage": "{0} kann nicht mehr als {1} sein! Erhhen Sie {2}.{3} auf der Serverseite, um mehr Ergebnisse zu ermglichen." + "MaxResultCountExceededExceptionMessage": "{0} kann nicht mehr als {1} sein! Erhöhen Sie {2}.{3} auf der Serverseite, um mehr Ergebnisse zu ermöglichen." } } diff --git a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/de.json b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/de.json index 8d6ae8c9ff..b2de67d39e 100644 --- a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/de.json +++ b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/de.json @@ -12,12 +12,12 @@ "DisplayName:Abp.Mailing.Smtp.UseDefaultCredentials": "Standard-Anmeldeinformationen verwenden", "Description:Abp.Mailing.DefaultFromAddress": "Die Standard-Absenderadresse", "Description:Abp.Mailing.DefaultFromDisplayName": "Der Standard-Absendername", - "Description:Abp.Mailing.Smtp.Host": "Der Name oder die IP-Adresse des fr SMTP-Transaktionen verwendeten Hosts.", - "Description:Abp.Mailing.Smtp.Port": "Der fr SMTP-Transaktionen verwendete Port.", - "Description:Abp.Mailing.Smtp.UserName": "Benutzername, der mit den Anmeldedaten verknpft ist.", - "Description:Abp.Mailing.Smtp.Password": "Das Passwort fr den Benutzernamen, der mit den Anmeldeinformationen verknpft ist.", - "Description:Abp.Mailing.Smtp.Domain": "Die Domne oder der Computername, der die Anmeldeinformationen verifiziert.", - "Description:Abp.Mailing.Smtp.EnableSsl": "Bestimmt, ob der SmptClient Secure Sockets Layer (SSL) zur Verschlsselung der Verbindung verwendet.", + "Description:Abp.Mailing.Smtp.Host": "Der Name oder die IP-Adresse des für SMTP-Transaktionen verwendeten Hosts.", + "Description:Abp.Mailing.Smtp.Port": "Der für SMTP-Transaktionen verwendete Port.", + "Description:Abp.Mailing.Smtp.UserName": "Benutzername, der mit den Anmeldedaten verknüpft ist.", + "Description:Abp.Mailing.Smtp.Password": "Das Passwort für den Benutzernamen, der mit den Anmeldeinformationen verknüpft ist.", + "Description:Abp.Mailing.Smtp.Domain": "Die Domäne oder der Computername, der die Anmeldeinformationen verifiziert.", + "Description:Abp.Mailing.Smtp.EnableSsl": "Bestimmt, ob der SmptClient Secure Sockets Layer (SSL) zur Verschlüsselung der Verbindung verwendet.", "Description:Abp.Mailing.Smtp.UseDefaultCredentials": "Bestimmt, ob die DefaultCredentials mit Anfragen gesendet werden." } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/de.json b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/de.json index a663b772be..c5de3f200c 100644 --- a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/de.json +++ b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/de.json @@ -1,18 +1,18 @@ { "culture": "de", "texts": { - "InternalServerErrorMessage": "Whrend Ihrer Anfrage ist ein interner Fehler aufgetreten!", - "ValidationErrorMessage": "Ihre Anfrage ist nicht gltig!", + "InternalServerErrorMessage": "Während Ihrer Anfrage ist ein interner Fehler aufgetreten!", + "ValidationErrorMessage": "Ihre Anfrage ist nicht gültig!", "ValidationNarrativeErrorMessageTitle": "Die folgenden Fehler wurden bei der Validierung entdeckt.", "DefaultErrorMessage": "Ein Fehler ist aufgetreten!", "DefaultErrorMessageDetail": "Es wurden keine Fehlerdetails vom Server gesendet.", "DefaultErrorMessage401": "Sie sind nicht authentifiziert.", - "DefaultErrorMessage401Detail": "Sie sollten sich anmelden, um diese Operation durchzufhren.", + "DefaultErrorMessage401Detail": "Sie sollten sich anmelden, um diese Operation durchzuführen.", "DefaultErrorMessage403": "Sie sind nicht autorisiert!", - "DefaultErrorMessage403Detail": "Es ist Ihnen nicht erlaubt, diese Operation durchzufhren!", + "DefaultErrorMessage403Detail": "Es ist Ihnen nicht erlaubt, diese Operation durchzuführen!", "DefaultErrorMessage404": "Ressource nicht gefunden!", "DefaultErrorMessage404Detail": "Die angeforderte Ressource konnte auf dem Server nicht gefunden werden!", - "EntityNotFoundErrorMessage": "Es gibt keine Entitt {0} mit id = {1}!", + "EntityNotFoundErrorMessage": "Es gibt keine Entität {0} mit id = {1}!", "Languages": "Sprachen", "Error": "Fehler", "AreYouSure": "Sind Sie sicher?", @@ -20,11 +20,11 @@ "Yes": "Ja", "No": "Nein", "Ok": "Ok", - "Close": "Schlieen", + "Close": "Schließen", "Save": "Speichern", "SavingWithThreeDot": "Speichere...", "Actions": "Aktionen", - "Delete": "Lschen", + "Delete": "Löschen", "Edit": "Bearbeiten", "Refresh": "Aktualisieren", "Language": "Sprache", @@ -36,28 +36,28 @@ "Register": "Registrieren", "Logout": "Abmelden", "Submit": "Absenden", - "Back": "Zurck", + "Back": "Zurück", "PagerSearch": "Suchen", - "PagerNext": "Nchste", + "PagerNext": "Nächste", "PagerPrevious": "Vorherige", "PagerFirst": "Erste", "PagerLast": "Letzte", - "PagerInfo": "Zeige _START_ bis _END_ von _TOTAL_ Eintrgen", - "PagerInfo{0}{1}{2}": "Zeige {0} bis {1} von {2} Eintrgen", - "PagerInfoEmpty": "Zeige 0 bis 0 von 0 Eintrgen", - "PagerInfoFiltered": "(gefiltert von _MAX_ Eintrgen insgesamt)", - "NoDataAvailableInDatatable": "Keine Daten verfgbar", - "PagerShowMenuEntries": "Zeige _MENU_ Eintrge", + "PagerInfo": "Zeige _START_ bis _END_ von _TOTAL_ Einträgen", + "PagerInfo{0}{1}{2}": "Zeige {0} bis {1} von {2} Einträgen", + "PagerInfoEmpty": "Zeige 0 bis 0 von 0 Einträgen", + "PagerInfoFiltered": "(gefiltert von _MAX_ Einträgen insgesamt)", + "NoDataAvailableInDatatable": "Keine Daten verfügbar", + "PagerShowMenuEntries": "Zeige _MENU_ Einträge", "DatatableActionDropdownDefaultText": "Aktionen", - "ChangePassword": "Passwort ndern", + "ChangePassword": "Passwort ändern", "PersonalInfo": "Mein Profil", - "AreYouSureYouWantToCancelEditingWarningMessage": "Sie haben ungespeicherte nderungen.", + "AreYouSureYouWantToCancelEditingWarningMessage": "Sie haben ungespeicherte Änderungen.", "UnhandledException": "Unerwartete Ausnahme!", "401Message": "Unauthorisiert", "403Message": "Verboten", "404Message": "Seite nicht gefunden", "500Message": "Internet Server Fehler", "GoHomePage": "Zur Startseite", - "GoBack": "Zurck" + "GoBack": "Zurück" } } diff --git a/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/de.json b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/de.json index 1e0e10716a..6c48a6c1fa 100644 --- a/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/de.json +++ b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/de.json @@ -1,34 +1,34 @@ { "culture": "de", "texts": { - "'{0}' and '{1}' do not match.": "'{0}' und '{1}' stimmen nicht berein.", - "The {0} field is not a valid credit card number.": "Das Feld {0} ist keine gltige Kreditkartennummer.", - "{0} is not valid.": "{0} ist nicht gltig.", - "The {0} field is not a valid e-mail address.": "Das Feld {0} ist keine gltige E-Mail-Adresse.", + "'{0}' and '{1}' do not match.": "'{0}' und '{1}' stimmen nicht überein.", + "The {0} field is not a valid credit card number.": "Das Feld {0} ist keine gültige Kreditkartennummer.", + "{0} is not valid.": "{0} ist nicht gültig.", + "The {0} field is not a valid e-mail address.": "Das Feld {0} ist keine gültige E-Mail-Adresse.", "The {0} field only accepts files with the following extensions: {1}": "Das Feld {0} akzeptiert nur Dateien mit den folgenden Erweiterungen: {1}", - "The field {0} must be a string or array type with a maximum length of '{1}'.": "Das Feld {0} muss eine Zeichenfolge oder Auflistung mit einer maximalen Lnge von '{1}' sein.", - "The field {0} must be a string or array type with a minimum length of '{1}'.": "Das Feld {0} muss eine Zeichenfolge oder Auflistung mit einer Mindestlnge von '{1}' sein.", - "The {0} field is not a valid phone number.": "Das Feld {0} ist keine gltige Telefonnummer.", + "The field {0} must be a string or array type with a maximum length of '{1}'.": "Das Feld {0} muss eine Zeichenfolge oder Auflistung mit einer maximalen Länge von '{1}' sein.", + "The field {0} must be a string or array type with a minimum length of '{1}'.": "Das Feld {0} muss eine Zeichenfolge oder Auflistung mit einer Mindestlänge von '{1}' sein.", + "The {0} field is not a valid phone number.": "Das Feld {0} ist keine gültige Telefonnummer.", "The field {0} must be between {1} and {2}.": "Das Feld {0} muss zwischen {1} und {2} liegen.", - "The field {0} must match the regular expression '{1}'.": "Das Feld {0} muss dem regulren Ausdruck '{1}' entsprechen.", + "The field {0} must match the regular expression '{1}'.": "Das Feld {0} muss dem regulären Ausdruck '{1}' entsprechen.", "The {0} field is required.": "Das Feld {0} ist erforderlich.", - "The field {0} must be a string with a maximum length of {1}.": "Das Feld {0} muss eine Zeichenfolge mit einer maximalen Lnge von {1} sein.", - "The field {0} must be a string with a minimum length of {2} and a maximum length of {1}.": "Das Feld {0} muss eine Zeichenfolge mit einer minimalen Lnge von {2} und einer maximalen Lnge von {1} sein.", - "The {0} field is not a valid fully-qualified http, https, or ftp URL.": "Das {0}-Feld ist keine gltige vollqualifizierte http-, https- oder ftp-URL.", - "The field {0} is invalid.": "Das Feld {0} ist ungltig.", - "ThisFieldIsNotAValidCreditCardNumber.": "Dieses Feld ist keine gltige Kreditkartennummer.", - "ThisFieldIsNotValid.": "Dieses Feld ist nicht gltig.", - "ThisFieldIsNotAValidEmailAddress.": "Dieses Feld ist keine gltige E-Mail-Adresse.", + "The field {0} must be a string with a maximum length of {1}.": "Das Feld {0} muss eine Zeichenfolge mit einer maximalen Länge von {1} sein.", + "The field {0} must be a string with a minimum length of {2} and a maximum length of {1}.": "Das Feld {0} muss eine Zeichenfolge mit einer minimalen Länge von {2} und einer maximalen Länge von {1} sein.", + "The {0} field is not a valid fully-qualified http, https, or ftp URL.": "Das {0}-Feld ist keine gültige vollqualifizierte http-, https- oder ftp-URL.", + "The field {0} is invalid.": "Das Feld {0} ist ungültig.", + "ThisFieldIsNotAValidCreditCardNumber.": "Dieses Feld ist keine gültige Kreditkartennummer.", + "ThisFieldIsNotValid.": "Dieses Feld ist nicht gültig.", + "ThisFieldIsNotAValidEmailAddress.": "Dieses Feld ist keine gültige E-Mail-Adresse.", "ThisFieldOnlyAcceptsFilesWithTheFollowingExtensions:{0}": "Dieses Feld akzeptiert nur Dateien mit den folgenden Erweiterungen: {0}", - "ThisFieldMustBeAStringOrArrayTypeWithAMaximumLengthOf{0}": "Dieses Feld muss eine Zeichenfolge oder Auflistung mit einer maximalen Lnge von '{0}' sein.", - "ThisFieldMustBeAStringOrArrayTypeWithAMinimumLengthOf{0}": "Dieses Feld muss eine Zeichenfolge oder Auflistung mit einer Mindestlnge von '{0}' sein.", - "ThisFieldIsNotAValidPhoneNumber.": "Dieses Feld ist keine gltige Telefonnummer.", + "ThisFieldMustBeAStringOrArrayTypeWithAMaximumLengthOf{0}": "Dieses Feld muss eine Zeichenfolge oder Auflistung mit einer maximalen Länge von '{0}' sein.", + "ThisFieldMustBeAStringOrArrayTypeWithAMinimumLengthOf{0}": "Dieses Feld muss eine Zeichenfolge oder Auflistung mit einer Mindestlänge von '{0}' sein.", + "ThisFieldIsNotAValidPhoneNumber.": "Dieses Feld ist keine gültige Telefonnummer.", "ThisFieldMustBeBetween{0}And{1}": "Dieses Feld muss zwischen {0} und {1} liegen.", - "ThisFieldMustMatchTheRegularExpression{0}": "Dieses Feld muss dem regulren Ausdruck '{0}' entsprechen.", + "ThisFieldMustMatchTheRegularExpression{0}": "Dieses Feld muss dem regulären Ausdruck '{0}' entsprechen.", "ThisFieldIsRequired.": "Dieses Feld ist erforderlich.", - "ThisFieldMustBeAStringWithAMaximumLengthOf{0}": "Dieses Feld muss eine Zeichenfolge mit einer maximalen Lnge von {0} sein.", - "ThisFieldMustBeAStringWithAMinimumLengthOf{1}AndAMaximumLengthOf{0}": "Dieses Feld muss eine Zeichenfolge mit einer Mindestlnge von '{0}' sein.", - "ThisFieldIsNotAValidFullyQualifiedHttpHttpsOrFtpUrl": "Dieses Feld ist keine gltige vollqualifizierte http-, https- oder ftp-URL.", - "ThisFieldIsInvalid.": "Dieses Feld ist ungltig." + "ThisFieldMustBeAStringWithAMaximumLengthOf{0}": "Dieses Feld muss eine Zeichenfolge mit einer maximalen Länge von {0} sein.", + "ThisFieldMustBeAStringWithAMinimumLengthOf{1}AndAMaximumLengthOf{0}": "Dieses Feld muss eine Zeichenfolge mit einer Mindestlänge von '{0}' sein.", + "ThisFieldIsNotAValidFullyQualifiedHttpHttpsOrFtpUrl": "Dieses Feld ist keine gültige vollqualifizierte http-, https- oder ftp-URL.", + "ThisFieldIsInvalid.": "Dieses Feld ist ungültig." } } \ No newline at end of file diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Localization/Resource/de.json b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Localization/Resource/de.json index e5b59a1915..f5c2e651b5 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Localization/Resource/de.json +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Localization/Resource/de.json @@ -2,6 +2,6 @@ "culture": "de", "texts": { "BirthDate": "Geburtsdatum", - "Value1": "Wert Eins" + "Value1": "Wert Eins" } } \ No newline at end of file diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/de.json b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/de.json index 935fff56a6..d772f2e801 100644 --- a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/de.json +++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/de.json @@ -8,22 +8,22 @@ "RememberMe": "Angemeldet bleiben", "UseAnotherServiceToLogin": "Einen anderen Dienst zum Anmelden verwenden", "UserLockedOutMessage": "Das Benutzerkonto wurde aufgrund fehlgeschlagener Anmeldeversuche gesperrt. Bitte warten Sie eine Weile und versuchen Sie es erneut.", - "InvalidUserNameOrPassword": "Ungltiger Benutzername oder Passwort!", - "LoginIsNotAllowed": "Sie drfen sich nicht anmelden! Sie mssen Ihre E-Mail/Telefonnummer besttigen.", - "SelfRegistrationDisabledMessage": "Die Selbstregistrierung ist fr diese Anwendung deaktiviert. Bitte wenden Sie sich an den Anwendungsadministrator, um einen neuen Benutzer zu registrieren.", - "LocalLoginDisabledMessage": "Die lokale Anmeldung ist fr diese Anwendung deaktiviert.", + "InvalidUserNameOrPassword": "Ungültiger Benutzername oder Passwort!", + "LoginIsNotAllowed": "Sie dürfen sich nicht anmelden! Sie müssen Ihre E-Mail/Telefonnummer bestätigen.", + "SelfRegistrationDisabledMessage": "Die Selbstregistrierung ist für diese Anwendung deaktiviert. Bitte wenden Sie sich an den Anwendungsadministrator, um einen neuen Benutzer zu registrieren.", + "LocalLoginDisabledMessage": "Die lokale Anmeldung ist für diese Anwendung deaktiviert.", "Login": "Anmelden", "Cancel": "Abbrechen", "Register": "Registrieren", "AreYouANewUser": "Neuer Benutzer?", "AlreadyRegistered": "Bereits registriert?", - "InvalidLoginRequest": "Ungltige Login-Anfrage", - "ThereAreNoLoginSchemesConfiguredForThisClient": "Es sind keine Anmeldeschemata fr diesen Client konfiguriert.", + "InvalidLoginRequest": "Ungültige Login-Anfrage", + "ThereAreNoLoginSchemesConfiguredForThisClient": "Es sind keine Anmeldeschemata für diesen Client konfiguriert.", "LogInUsingYourProviderAccount": "Melden Sie sich mit Ihrem {0}-Konto an", "DisplayName:CurrentPassword": "Aktuelles Passwort", "DisplayName:NewPassword": "Neues Passwort", - "DisplayName:NewPasswordConfirm": "Neues Passwort besttigen", - "PasswordChangedMessage": "Ihr Passwort wurde erfolgreich gendert.", + "DisplayName:NewPasswordConfirm": "Neues Passwort bestätigen", + "PasswordChangedMessage": "Ihr Passwort wurde erfolgreich geändert.", "DisplayName:UserName": "Benutzername", "DisplayName:Email": "E-Mail", "DisplayName:Name": "Name", @@ -31,10 +31,10 @@ "DisplayName:Password": "Passwort", "DisplayName:EmailAddress": "E-Mail-Adresse", "DisplayName:PhoneNumber": "Telefonnummer", - "PersonalSettings": "Persnliche Einstellungen", - "PersonalSettingsSaved": "Persnliche Einstellungen gespeichert", - "PasswordChanged": "Passwort gendert", - "NewPasswordConfirmFailed": "Bitte besttigen Sie das neue Passwort.", + "PersonalSettings": "Persönliche Einstellungen", + "PersonalSettingsSaved": "Persönliche Einstellungen gespeichert", + "PasswordChanged": "Passwort geändert", + "NewPasswordConfirmFailed": "Bitte bestätigen Sie das neue Passwort.", "Manage": "Verwalten", "ManageYourProfile": "Ihr profil verwalten", "DisplayName:Abp.Account.IsSelfRegistrationEnabled": "Ist die Selbstregistrierung aktiviert", diff --git a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/de.json b/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/de.json index 9f2a7d4510..148ad9bd63 100644 --- a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/de.json +++ b/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/de.json @@ -3,7 +3,7 @@ "texts": { "Permission:Blogging": "Blog", "Permission:Blogs": "Blogs", - "Permission:Posts": "Beitr�ge", + "Permission:Posts": "Beiträge", "Permission:Tags": "Tags", "Permission:Comments": "Kommentare" } diff --git a/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/de.json b/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/de.json index 6489396692..3fbc74285e 100644 --- a/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/de.json +++ b/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/de.json @@ -4,7 +4,7 @@ "Menu:Blogs": "Blogs", "Menu:BlogManagement": "Blog-Verwaltung", "Title": "Titel", - "Delete": "Lschen", + "Delete": "Löschen", "Reply": "Antwort", "ReplyTo": "Antwort auf {0}", "ContinueReading": "Weiterlesen", @@ -20,15 +20,15 @@ "SeeAll": "Alle anzeigen", "PopularTags": "Beliebte Tags", "WiewsWithCount": "{0} Aufrufe", - "LastPosts": "Letzte Beitrge", + "LastPosts": "Letzte Beiträge", "LeaveComment": "Kommentar hinterlassen", "TagsInThisArticle": "Tags in diesem Artikel", - "Posts": "Beitrge", + "Posts": "Beiträge", "Edit": "Bearbeiten", "BLOG": "BLOG", - "CommentDeletionWarningMessage": "Kommentar wird gelscht.", - "PostDeletionWarningMessage": "Beitrag wird gelscht.", - "BlogDeletionWarningMessage": "Blog wird gelscht.", + "CommentDeletionWarningMessage": "Kommentar wird gelöscht.", + "PostDeletionWarningMessage": "Beitrag wird gelöscht.", + "BlogDeletionWarningMessage": "Blog wird gelöscht.", "AreYouSure": "Sind Sie sicher?", "CommentWithCount": "{0} Kommentare", "Comment": "Kommentar", diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/de.json b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/de.json index 848bd4bb28..12a4e1aef0 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/de.json +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/de.json @@ -2,6 +2,6 @@ "culture": "de", "texts": { "Features": "Funktionen", - "NoFeatureFoundMessage": "Es ist keine Funktion verfgbar." + "NoFeatureFoundMessage": "Es ist keine Funktion verfügbar." } } \ No newline at end of file diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/de.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/de.json index 0c8ba47b66..ccd2b60cfc 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/de.json +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/de.json @@ -1,7 +1,7 @@ { "culture": "de", "texts": { - "Menu:IdentityManagement": "Identittsverwaltung", + "Menu:IdentityManagement": "Identitätsverwaltung", "Users": "Benutzer", "NewUser": "Neuer Benutzer", "UserName": "Benutzername", @@ -10,13 +10,13 @@ "UserInformations": "Benutzerinformationen", "DisplayName:IsDefault": "Standard", "DisplayName:IsStatic": "Statisch", - "DisplayName:IsPublic": "ffentlich", + "DisplayName:IsPublic": "Öffentlich", "Roles": "Rollen", "Password": "Passwort", "PersonalInfo": "Mein Profil", - "PersonalSettings": "Persnliche Einstellungen", - "UserDeletionConfirmationMessage": "Der Benutzer '{0}' wird gelscht. Sind Sie sicher?", - "RoleDeletionConfirmationMessage": "Die Rolle '{0}' wird gelscht. Sind Sie sicher?", + "PersonalSettings": "Persönliche Einstellungen", + "UserDeletionConfirmationMessage": "Der Benutzer '{0}' wird gelöscht. Sind Sie sicher?", + "RoleDeletionConfirmationMessage": "Die Rolle '{0}' wird gelöscht. Sind Sie sicher?", "DisplayName:RoleName": "Rollenname", "DisplayName:UserName": "Benutzername", "DisplayName:Name": "Name", @@ -32,72 +32,72 @@ "Permissions": "Berechtigungen", "DisplayName:CurrentPassword": "Aktuelles Passwort", "DisplayName:NewPassword": "Neues Passwort", - "DisplayName:NewPasswordConfirm": "Neues Passwort besttigen", - "PasswordChangedMessage": "Ihr Passwort wurde erfolgreich gendert.", - "PersonalSettingsSavedMessage": "Ihre persnlichen Einstellungen wurden erfolgreich gespeichert.", + "DisplayName:NewPasswordConfirm": "Neues Passwort bestätigen", + "PasswordChangedMessage": "Ihr Passwort wurde erfolgreich geändert.", + "PersonalSettingsSavedMessage": "Ihre persönlichen Einstellungen wurden erfolgreich gespeichert.", "Identity.DefaultError": "Ein unbekannter Fehler ist aufgetreten.", - "Identity.ConcurrencyFailure": "Optimistischer Nebenlufigkeitsfehler, Objekt wurde gendert.", + "Identity.ConcurrencyFailure": "Optimistischer Nebenläufigkeitsfehler, Objekt wurde geändert.", "Identity.DuplicateEmail": "E-Mail '{0}' ist bereits vergeben.", "Identity.DuplicateRoleName": "Der Rollenname '{0}' ist bereits vergeben.", "Identity.DuplicateUserName": "Der Benutzername '{0}' ist bereits vergeben.", - "Identity.InvalidEmail": "E-Mail '{0}' ist ungltig.", - "Identity.InvalidPasswordHasherCompatibilityMode": "Der angegebene PasswordHasherCompatibilityMode ist ungltig.", + "Identity.InvalidEmail": "E-Mail '{0}' ist ungültig.", + "Identity.InvalidPasswordHasherCompatibilityMode": "Der angegebene PasswordHasherCompatibilityMode ist ungültig.", "Identity.InvalidPasswordHasherIterationCount": "Die Iterationszahl muss eine positive Ganzzahl sein.", - "Identity.InvalidRoleName": "Der Rollenname '{0}' ist ungltig.", - "Identity.InvalidToken": "Ungltiges Token.", - "Identity.InvalidUserName": "Benutzername '{0}' ist ungltig, kann nur Buchstaben oder Ziffern enthalten.", + "Identity.InvalidRoleName": "Der Rollenname '{0}' ist ungültig.", + "Identity.InvalidToken": "Ungültiges Token.", + "Identity.InvalidUserName": "Benutzername '{0}' ist ungültig, kann nur Buchstaben oder Ziffern enthalten.", "Identity.LoginAlreadyAssociated": "Ein Benutzer mit diesem Login existiert bereits.", "Identity.PasswordMismatch": "Falsches Passwort.", - "Identity.PasswordRequiresDigit": "Passwrter mssen mindestens eine Ziffer ('0'-'9') enthalten.", - "Identity.PasswordRequiresLower": "Passwrter mssen mindestens einen Kleinbuchstaben ('a'-'z') enthalten.", - "Identity.PasswordRequiresNonAlphanumeric": "Passwrter mssen mindestens ein Sonderzeichen enthalten.", - "Identity.PasswordRequiresUpper": "Passwrter mssen mindestens einen Grobuchstaben ('A'-'Z') enthalten.", - "Identity.PasswordTooShort": "Passwrter mssen mindestens {0} Zeichen enthalten.", + "Identity.PasswordRequiresDigit": "Passwörter müssen mindestens eine Ziffer ('0'-'9') enthalten.", + "Identity.PasswordRequiresLower": "Passwörter müssen mindestens einen Kleinbuchstaben ('a'-'z') enthalten.", + "Identity.PasswordRequiresNonAlphanumeric": "Passwörter müssen mindestens ein Sonderzeichen enthalten.", + "Identity.PasswordRequiresUpper": "Passwörter müssen mindestens einen Großbuchstaben ('A'-'Z') enthalten.", + "Identity.PasswordTooShort": "Passwörter müssen mindestens {0} Zeichen enthalten.", "Identity.RoleNotFound": "Die Rolle {0} existiert nicht.", "Identity.UserAlreadyHasPassword": "Der Benutzer hat bereits ein Passwort gesetzt.", "Identity.UserAlreadyInRole": "Benutzer ist bereits in der Rolle '{0}'.", "Identity.UserLockedOut": "Benutzer ist ausgesperrt.", - "Identity.UserLockoutNotEnabled": "Aussperrung ist fr diesen Benutzer nicht aktiviert.", + "Identity.UserLockoutNotEnabled": "Aussperrung ist für diesen Benutzer nicht aktiviert.", "Identity.UserNameNotFound": "Benutzer {0} existiert nicht.", "Identity.UserNotInRole": "Benutzer ist nicht in der Rolle '{0}'.", - "Identity.PasswordConfirmationFailed": "Passwort stimmt nicht mit dem Besttigungspasswort berein.", - "Identity.StaticRoleRenamingErrorMessage": "Statische Rollen knnen nicht umbenannt werden.", - "Identity.StaticRoleDeletionErrorMessage": "Statische Rollen knnen nicht gelscht werden.", - "Volo.Abp.Identity:010001": "Sie knnen Ihr eigenes Konto nicht lschen!", - "Permission:IdentityManagement": "Identittsverwaltung", + "Identity.PasswordConfirmationFailed": "Passwort stimmt nicht mit dem Bestätigungspasswort überein.", + "Identity.StaticRoleRenamingErrorMessage": "Statische Rollen können nicht umbenannt werden.", + "Identity.StaticRoleDeletionErrorMessage": "Statische Rollen können nicht gelöscht werden.", + "Volo.Abp.Identity:010001": "Sie können Ihr eigenes Konto nicht löschen!", + "Permission:IdentityManagement": "Identitätsverwaltung", "Permission:RoleManagement": "Rollenverwaltung", "Permission:Create": "Erstellen", "Permission:Edit": "Bearbeiten", - "Permission:Delete": "Lschen", - "Permission:ChangePermissions": "Berechtigungen ndern", + "Permission:Delete": "Löschen", + "Permission:ChangePermissions": "Berechtigungen ändern", "Permission:UserManagement": "Benutzerverwaltung", "Permission:UserLookup": "Benutzer-Lookup", - "DisplayName:Abp.Identity.Password.RequiredLength": "Erforderliche Lnge", + "DisplayName:Abp.Identity.Password.RequiredLength": "Erforderliche Länge", "DisplayName:Abp.Identity.Password.RequiredUniqueChars": "Erforderliche eindeutige Zeichenanzahl", "DisplayName:Abp.Identity.Password.RequireNonAlphanumeric": "Erforderliches Sonderzeichen", "DisplayName:Abp.Identity.Password.RequireLowercase": "Erforderliche Kleinbuchstaben", - "DisplayName:Abp.Identity.Password.RequireUppercase": "Erforderliche Grobuchstaben", + "DisplayName:Abp.Identity.Password.RequireUppercase": "Erforderliche Großbuchstaben", "DisplayName:Abp.Identity.Password.RequireDigit": "Erforderliche Ziffer", - "DisplayName:Abp.Identity.Lockout.AllowedForNewUsers": "Aktiviert fr neue Benutzer", + "DisplayName:Abp.Identity.Lockout.AllowedForNewUsers": "Aktiviert für neue Benutzer", "DisplayName:Abp.Identity.Lockout.LockoutDuration": "Aussperrdauer (Sekunden)", "DisplayName:Abp.Identity.Lockout.MaxFailedAccessAttempts": "Max fehlgeschlagene Zugriffsversuche", - "DisplayName:Abp.Identity.SignIn.RequireConfirmedEmail": "Besttigte E-Mail erforderlich", - "DisplayName:Abp.Identity.SignIn.EnablePhoneNumberConfirmation": "Telefonnummer-Besttigung aktivieren", - "DisplayName:Abp.Identity.SignIn.RequireConfirmedPhoneNumber": "Besttigte Telefonnummer erforderlich", + "DisplayName:Abp.Identity.SignIn.RequireConfirmedEmail": "Bestätigte E-Mail erforderlich", + "DisplayName:Abp.Identity.SignIn.EnablePhoneNumberConfirmation": "Telefonnummer-Bestätigung aktivieren", + "DisplayName:Abp.Identity.SignIn.RequireConfirmedPhoneNumber": "Bestätigte Telefonnummer erforderlich", "DisplayName:Abp.Identity.User.IsUserNameUpdateEnabled": "Ist die Aktualisierung des Benutzernamens aktiviert?", "DisplayName:Abp.Identity.User.IsEmailUpdateEnabled": "Ist die E-Mail-Aktualisierung aktiviert?", - "Description:Abp.Identity.Password.RequiredLength": "Die Mindestlnge, die ein Passwort haben muss.", + "Description:Abp.Identity.Password.RequiredLength": "Die Mindestlänge, die ein Passwort haben muss.", "Description:Abp.Identity.Password.RequiredUniqueChars": "Die Mindestanzahl eindeutiger Zeichen, die ein Passwort enthalten muss.", - "Description:Abp.Identity.Password.RequireNonAlphanumeric": "Ob Passwrter ein nicht-alphanumerisches Zeichen enthalten mssen.", - "Description:Abp.Identity.Password.RequireLowercase": "Ob Passwrter ein kleingeschriebenes ASCII-Zeichen enthalten mssen.", - "Description:Abp.Identity.Password.RequireUppercase": "Ob Passwrter ein ASCII-Zeichen in Grobuchstaben enthalten mssen.", - "Description:Abp.Identity.Password.RequireDigit": "Ob Passwrter eine Ziffer enthalten mssen.", + "Description:Abp.Identity.Password.RequireNonAlphanumeric": "Ob Passwörter ein nicht-alphanumerisches Zeichen enthalten müssen.", + "Description:Abp.Identity.Password.RequireLowercase": "Ob Passwörter ein kleingeschriebenes ASCII-Zeichen enthalten müssen.", + "Description:Abp.Identity.Password.RequireUppercase": "Ob Passwörter ein ASCII-Zeichen in Großbuchstaben enthalten müssen.", + "Description:Abp.Identity.Password.RequireDigit": "Ob Passwörter eine Ziffer enthalten müssen.", "Description:Abp.Identity.Lockout.AllowedForNewUsers": "Ob ein neuer Benutzer ausgesperrt werden kann.", - "Description:Abp.Identity.Lockout.LockoutDuration": "Die Dauer, fr die ein Benutzer ausgesperrt ist, wenn eine Sperre auftritt.", + "Description:Abp.Identity.Lockout.LockoutDuration": "Die Dauer, für die ein Benutzer ausgesperrt ist, wenn eine Sperre auftritt.", "Description:Abp.Identity.Lockout.MaxFailedAccessAttempts": "Die Anzahl der fehlgeschlagenen Zugriffsversuche, die erlaubt sind, bevor ein Benutzer gesperrt wird, vorausgesetzt, die Sperre ist aktiviert.", "Description:Abp.Identity.SignIn.RequireConfirmedEmail": "Whether a confirmed email address is required to sign in.", - "Description:Abp.Identity.SignIn.EnablePhoneNumberConfirmation": "Ob fr die Anmeldung eine besttigte E-Mail-Adresse erforderlich ist.", - "Description:Abp.Identity.SignIn.RequireConfirmedPhoneNumber": "Ob fr die Anmeldung eine besttigte Telefonnummer erforderlich ist.", + "Description:Abp.Identity.SignIn.EnablePhoneNumberConfirmation": "Ob für die Anmeldung eine bestätigte E-Mail-Adresse erforderlich ist.", + "Description:Abp.Identity.SignIn.RequireConfirmedPhoneNumber": "Ob für die Anmeldung eine bestätigte Telefonnummer erforderlich ist.", "Description:Abp.Identity.User.IsUserNameUpdateEnabled": "Ob der Benutzername vom Benutzer aktualisiert werden kann.", "Description:Abp.Identity.User.IsEmailUpdateEnabled": "Ob die E-Mail durch den Benutzer aktualisiert werden kann." } diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/de.json b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/de.json index c556183e4c..434b6cc772 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/de.json +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/de.json @@ -5,6 +5,6 @@ "OnlyProviderPermissons": "Nur dieser Anbieter", "All": "Alle", "SelectAllInAllTabs": "Alle Berechtigungen erteilen", - "SelectAllInThisTab": "Alle auswhlen" + "SelectAllInThisTab": "Alle auswählen" } } \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/de.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/de.json index e0a7730933..d011f8391f 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/de.json +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/de.json @@ -6,14 +6,14 @@ "NewTenant": "Neuer Mandant", "TenantName": "Mandantenname", "DisplayName:TenantName": "Mandantenname", - "TenantDeletionConfirmationMessage": "Der Mandant '{0}' wird gelscht. Sind Sie sicher?", + "TenantDeletionConfirmationMessage": "Der Mandant '{0}' wird gelöscht. Sind Sie sicher?", "ConnectionStrings": "Verbindungszeichenfolgen", "DisplayName:DefaultConnectionString": "Standard Verbindungszeichenfolge", "DisplayName:UseSharedDatabase": "Nutze die gemeinsame Datenbank", "Permission:TenantManagement": "Mandantenverwaltung", "Permission:Create": "Erstellen", "Permission:Edit": "Bearbeiten", - "Permission:Delete": "Lschen", + "Permission:Delete": "Löschen", "Permission:ManageConnectionStrings": "Verbindungszeichenfolgen verwalten", "Permission:ManageFeatures": "Funktionen verwalten", "DisplayName:AdminEmailAddress": "Admin E-Mail-Adresse", From c47e990b1fff626e9ff782b7d72f7ea9685e632b Mon Sep 17 00:00:00 2001 From: Necati Meral Date: Mon, 6 Jul 2020 10:07:55 +0200 Subject: [PATCH 025/137] Added a test for special characters --- .../Volo/Abp/Localization/AbpLocalization_Tests.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/AbpLocalization_Tests.cs b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/AbpLocalization_Tests.cs index 71c2fafe2e..475629b4f0 100644 --- a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/AbpLocalization_Tests.cs +++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/AbpLocalization_Tests.cs @@ -148,7 +148,10 @@ namespace Volo.Abp.Localization _localizer["MaxLenghtErrorMessage", 42].Value.ShouldBe("El campo puede tener un máximo de '42' caracteres"); //Overriden in Source/es.json } - + using (CultureHelper.Use("de")) + { + _localizer["MaxLenghtErrorMessage", 42].Value.ShouldBe("Die Länge dieses Feldes kann maximal '42'-Zeichen betragen"); //Overriden in Source/es.json + } } [Fact] From cdd2573033180602535b3a0d53bbb3a410e21897 Mon Sep 17 00:00:00 2001 From: Necati Meral Date: Mon, 6 Jul 2020 10:13:06 +0200 Subject: [PATCH 026/137] dutch localization files encoding --- .../Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/nl.json | 2 +- .../Abp/Localization/TestResources/Base/CountryNames/nl.json | 2 +- .../Abp/Localization/TestResources/Base/Validation/nl.json | 2 +- .../Volo/Abp/Localization/TestResources/Source/nl.json | 2 +- .../Volo/Abp/Localization/TestResources/SourceExt/nl.json | 2 +- .../VoloDocs.Web/Localization/Resources/VoloDocs/Web/nl.json | 2 +- .../Localization/Resources/Docs/ApplicationContracts/nl.json | 2 +- .../Volo.Docs.Domain/Volo/Docs/Localization/Domain/nl.json | 2 +- .../Volo/Abp/IdentityServer/Localization/Resources/nl.json | 2 +- .../Volo/Abp/TenantManagement/Localization/Resources/nl.json | 4 ++-- 10 files changed, 11 insertions(+), 11 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/nl.json b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/nl.json index 2e3971055e..ea15166b9e 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/nl.json +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/nl.json @@ -1,4 +1,4 @@ -{ +{ "culture": "nl", "texts": { "GivenTenantIsNotAvailable": "Gegeven klant is niet beschikbaar: {0}", diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/nl.json b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/nl.json index 849d1b0df6..3bf13dda13 100644 --- a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/nl.json +++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/nl.json @@ -1,4 +1,4 @@ -{ +{ "culture": "nl", "texts": { "USA": "Verenigde Staten van Amerika", diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/nl.json b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/nl.json index 5875cf7a12..825c54ffec 100644 --- a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/nl.json +++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/nl.json @@ -1,4 +1,4 @@ -{ +{ "culture": "nl", "texts": { "ThisFieldIsRequired": "Dit veld is verplicht", diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/nl.json b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/nl.json index 0e0ba67ef6..804eaf76c9 100644 --- a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/nl.json +++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/nl.json @@ -1,4 +1,4 @@ -{ +{ "culture": "nl", "texts": { "Hello {0}.": "Hallo {0}.", diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/nl.json b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/nl.json index 7e7354d11b..4072732d62 100644 --- a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/nl.json +++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/nl.json @@ -1,4 +1,4 @@ -{ +{ "culture": "nl", "texts": { "SeeYou": "Tot ziens" diff --git a/modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/nl.json b/modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/nl.json index b787dd4474..ccb3446246 100644 --- a/modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/nl.json +++ b/modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/nl.json @@ -1,4 +1,4 @@ -{ +{ "culture": "nl", "texts": { "DocsTitle": "VoloDocs", diff --git a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/nl.json b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/nl.json index 1be125e486..fad3137f04 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/nl.json +++ b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/nl.json @@ -1,4 +1,4 @@ -{ +{ "culture": "nl", "texts": { "Permission:DocumentManagement": "Document beheer", diff --git a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/nl.json b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/nl.json index 56e6800f9f..26aa1b614c 100644 --- a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/nl.json +++ b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/nl.json @@ -1,4 +1,4 @@ -{ +{ "culture": "nl", "texts": { "Documents": "Documenten", diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/nl.json b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/nl.json index 01cccfc567..0ae2ba8cd9 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/nl.json +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/nl.json @@ -1,4 +1,4 @@ -{ +{ "culture": "nl", "texts": { "Volo.IdentityServer:DuplicateIdentityResourceName": "Identiteitsbronnaam bestaat al: {Name}", diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/nl.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/nl.json index c187ad3976..1aeb208560 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/nl.json +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/nl.json @@ -16,7 +16,7 @@ "Permission:Delete": "Verwijder", "Permission:ManageConnectionStrings": "Beheer connection strings", "Permission:ManageFeatures": "Beheer functies", - "DisplayName:AdminEmailAddress": "Admin e-mail adres", - "DisplayName:AdminPassword": "Admin wachtwoord" + "DisplayName:AdminEmailAddress": "Admin e-mail adres", + "DisplayName:AdminPassword": "Admin wachtwoord" } } \ No newline at end of file From 07af4c499a4c2141fa10f7c538ca95060cd17312 Mon Sep 17 00:00:00 2001 From: Necati Meral Date: Mon, 6 Jul 2020 10:43:43 +0200 Subject: [PATCH 027/137] Fixed grammar --- .../Volo/Abp/Account/Localization/Resources/de.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/de.json b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/de.json index d772f2e801..82c9ae3ba8 100644 --- a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/de.json +++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/de.json @@ -36,7 +36,7 @@ "PasswordChanged": "Passwort geändert", "NewPasswordConfirmFailed": "Bitte bestätigen Sie das neue Passwort.", "Manage": "Verwalten", - "ManageYourProfile": "Ihr profil verwalten", + "ManageYourProfile": "Ihr Profil verwalten", "DisplayName:Abp.Account.IsSelfRegistrationEnabled": "Ist die Selbstregistrierung aktiviert", "Description:Abp.Account.IsSelfRegistrationEnabled": "Gibt an, ob ein Benutzer das Konto selbst registrieren kann.", "DisplayName:Abp.Account.EnableLocalLogin": "Authentifizierung mit einem lokalen Konto", From 472077998f570a777300fd187318765e4b6dbcda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Mon, 6 Jul 2020 14:31:00 +0300 Subject: [PATCH 028/137] Fix tutorial --- docs/en/Getting-Started.md | 1 - docs/en/Tutorials/Part-1.md | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/en/Getting-Started.md b/docs/en/Getting-Started.md index 952abc9b70..5f3d79d94a 100644 --- a/docs/en/Getting-Started.md +++ b/docs/en/Getting-Started.md @@ -322,7 +322,6 @@ Once all node modules are loaded, execute `yarn start` (or `npm start`) command: yarn start ``` -Wait `Angular CLI` to launch `Webpack` dev-server with `BrowserSync`. This will take care of compiling your `TypeScript` code, and automatically reloading your browser. After it finishes, `Angular Live Development Server` will be listening on localhost:4200, open your web browser and navigate to [localhost:4200](http://localhost:4200/) diff --git a/docs/en/Tutorials/Part-1.md b/docs/en/Tutorials/Part-1.md index c1bd36c74e..2f21b99e4b 100644 --- a/docs/en/Tutorials/Part-1.md +++ b/docs/en/Tutorials/Part-1.md @@ -90,7 +90,7 @@ namespace Acme.BookStore.Books The `Book` entity uses the `BookType` enum. Create the `BookType` in the `Acme.BookStore.Domain.Shared` project: ````csharp -namespace Acme.BookStore +namespace Acme.BookStore.Books { public enum BookType { From 08bb559b45527b73712cfae3bb126d329f076352 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Mon, 6 Jul 2020 15:20:52 +0300 Subject: [PATCH 029/137] Completed until the menu item. --- docs/en/Tutorials/Part-2.md | 88 +++++++++++------- ...kstore-creating-book-module-terminal-2.png | Bin 0 -> 102672 bytes 2 files changed, 54 insertions(+), 34 deletions(-) create mode 100644 docs/en/Tutorials/images/bookstore-creating-book-module-terminal-2.png diff --git a/docs/en/Tutorials/Part-2.md b/docs/en/Tutorials/Part-2.md index 90059c4831..f96425835e 100644 --- a/docs/en/Tutorials/Part-2.md +++ b/docs/en/Tutorials/Part-2.md @@ -341,58 +341,77 @@ yarn It's time to create something visible and usable! There are some tools that we will use when developing the Angular frontend application: -- [Angular CLI](https://angular.io/cli) will be used to create modules, components and services. - [Ng Bootstrap](https://ng-bootstrap.github.io/#/home) will be used as the UI component library. -- [ngx-datatable](https://swimlane.gitbook.io/ngx-datatable/) will be used as the datatable library. -- [Visual Studio Code](https://code.visualstudio.com/) will be used as the code editor (you can use your favorite editor). +- [Ngx-Datatable](https://swimlane.gitbook.io/ngx-datatable/) will be used as the datatable library. ### BookModule -Run the following command line to create a new module, named `BookModule`: +Run the following command line to create a new module, named `BookModule` in the root folder of the angular application: ```bash -yarn ng generate module book --routing true +yarn ng generate module books --module app --routing --route books ``` -![Generating books module](./images/bookstore-creating-book-module-terminal.png) +This command should produce the following output: + +![Generating books module](./images/bookstore-creating-book-module-terminal-2.png) ### Routing -Open the `app-routing.module.ts` file in `src\app` folder and add a route as shown below: +Generated code places the new route definition to the `src/app/app-routing.module.ts` file as shown below: -```js +````js const routes: Routes = [ -// ... -// added a new route to the routes array { - path: 'books', - loadChildren: () => import('./book/book.module').then(m => m.BookModule) - } -] -``` - -* We added a lazy-loaded route. See the [Lazy-Loading Feature Modules](https://angular.io/guide/lazy-loading-ngmodules#lazy-loading-feature-modules). - -Open the `route.provider.ts` file in `src\app` folder and replace the content as below: + path: '', + component: DynamicLayoutComponent, + children: [ + // ... + ], + }, + { path: 'books', loadChildren: () => import('./books/books.module').then(m => m.BooksModule) }, +]; +```` -```js -import { RoutesService, eLayoutType } from '@abp/ng.core'; -import { APP_INITIALIZER } from '@angular/core'; +We need to **move this route** definition inside the `children` array, so it can use the application layout: -export const APP_ROUTE_PROVIDER = [ - { provide: APP_INITIALIZER, useFactory: configureRoutes, deps: [RoutesService], multi: true }, +````js +const routes: Routes = [ + { + path: '', + component: DynamicLayoutComponent, + children: [ + // ... + { path: 'books', loadChildren: () => import('./books/books.module').then(m => m.BooksModule) }, + ], + }, ]; +```` + +Finally, open the `src/app/route.provider.ts` file replace the `configureRoutes` function declaration as shown below: +```js function configureRoutes(routes: RoutesService) { return () => { routes.add([ - //... - // added below element + { + path: '/', + name: '::Menu:Home', + iconClass: 'fas fa-home', + order: 1, + layout: eLayoutType.application, + }, + { + path: '/book-store', + name: '::Menu:BookStore', + iconClass: 'fas fa-book', + order: 2, + layout: eLayoutType.application, + }, { path: '/books', name: '::Menu:Books', - iconClass: 'fas fa-book', - order: 101, + parentName: '::Menu:BookStore', layout: eLayoutType.application, }, ]); @@ -400,12 +419,13 @@ function configureRoutes(routes: RoutesService) { } ``` -* We added a new route element to show a navigation element labeled "Books" on the menu. - * `path` is the URL of the route. - * `name` is the menu item name. A Localization key can be passed. - * `iconClass` is the icon of the menu item. - * `order` is the order of the menu item. We define 101 to show the route after the "Administration" item. - * `layout` is the layout of the BooksModule's routes. `eLayoutType.application`, `eLayoutType.account` or `eLayoutType.empty` can be defined. +`RoutesService` is a service provided by the ABP Framework to configure the main menu and the routes. + +* `path` is the URL of the route. +* `name` is the localized menu item name (see the [localization document](../UI/Angular/Localization.md) for details). +* `iconClass` is the icon of the menu item (you can use [Font Awesome](https://fontawesome.com/) icons by default). +* `order` is the order of the menu item. +* `layout` is the layout of the BooksModule's routes. `eLayoutType.application`, `eLayoutType.account` or `eLayoutType.empty` can be used. For more information, see the [RoutesService document](https://docs.abp.io/en/abp/latest/UI/Angular/Modifying-the-Menu.md#via-routesservice). diff --git a/docs/en/Tutorials/images/bookstore-creating-book-module-terminal-2.png b/docs/en/Tutorials/images/bookstore-creating-book-module-terminal-2.png new file mode 100644 index 0000000000000000000000000000000000000000..88c4b34bd14d738b077c1b6e26e2142215929cef GIT binary patch literal 102672 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%0AHFEOdt@j1A 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 literal 0 HcmV?d00001 From ccdb83b00dae650292f7869a8232dfb8987cee54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Mon, 6 Jul 2020 15:45:14 +0300 Subject: [PATCH 030/137] Update Part-2.md --- docs/en/Tutorials/Part-2.md | 70 ++----------------------------------- 1 file changed, 2 insertions(+), 68 deletions(-) diff --git a/docs/en/Tutorials/Part-2.md b/docs/en/Tutorials/Part-2.md index f96425835e..1f6223f5c9 100644 --- a/docs/en/Tutorials/Part-2.md +++ b/docs/en/Tutorials/Part-2.md @@ -425,79 +425,13 @@ function configureRoutes(routes: RoutesService) { * `name` is the localized menu item name (see the [localization document](../UI/Angular/Localization.md) for details). * `iconClass` is the icon of the menu item (you can use [Font Awesome](https://fontawesome.com/) icons by default). * `order` is the order of the menu item. -* `layout` is the layout of the BooksModule's routes. `eLayoutType.application`, `eLayoutType.account` or `eLayoutType.empty` can be used. +* `layout` is the layout of the BooksModule's routes (there are three types of pre-defined layouts: `eLayoutType.application`, `eLayoutType.account` or `eLayoutType.empty`). For more information, see the [RoutesService document](https://docs.abp.io/en/abp/latest/UI/Angular/Modifying-the-Menu.md#via-routesservice). -### Book List Component - -Run the command below on the terminal in the root folder to generate a new component, named book-list: - -```bash -yarn ng generate component book/book-list -``` - -![Creating books list](./images/bookstore-creating-book-list-terminal.png) - -Open `book.module.ts` file in the `app\book` folder and replace the content as below: - -```js -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { BookRoutingModule } from './book-routing.module'; -import { BookListComponent } from './book-list/book-list.component'; -import { SharedModule } from '../shared/shared.module'; //<== added this line ==> - -@NgModule({ - declarations: [BookListComponent], - imports: [ - CommonModule, - BookRoutingModule, - SharedModule, //<== added this line ==> - ], -}) -export class BookModule {} -``` - -* We imported `SharedModule` and added to `imports` array. - -Open `book-routing.module.ts` file in the `app\book` folder and replace the content as below: - -```js -import { NgModule } from '@angular/core'; -import { Routes, RouterModule } from '@angular/router'; -import { BookListComponent } from './book-list/book-list.component'; // <== added this line ==> - -// <== replaced routes ==> -const routes: Routes = [ - { - path: '', - component: BookListComponent, - }, -]; - -@NgModule({ - imports: [RouterModule.forChild(routes)], - exports: [RouterModule] -}) -export class BookRoutingModule { } -``` - -* We imported `BookListComponent` and replaced `routes` const. - -Run `yarn start` and wait for Angular to serve the application: - -```bash -yarn start -``` - -Open the browser and navigate to http://localhost:4200/books. We'll see **book-list works!** text on the books page: - -![Initial book list page](./images/bookstore-initial-book-list-page.png) - ### Generate Proxies -ABP CLI provides `generate-proxy` command that generates client proxies for your HTTP APIs to make easy to consume your services from the client side. Before running generate-proxy command, your host must be up and running. See the [CLI documentation](../CLI.md) +[ABP CLI](../CLI.md) provides `generate-proxy` command that generates client proxies for your HTTP APIs to make easy to consume your HTTP APIs from the client side. Before running `generate-proxy` command, your host must be up and running. Run the following command in the `angular` folder: From 871a169b0e92455e3519efff2a420cdad0f37e73 Mon Sep 17 00:00:00 2001 From: Erol Arkat Date: Mon, 6 Jul 2020 16:13:54 +0300 Subject: [PATCH 031/137] generate-proxy environment src fix --- .../Volo/Abp/Cli/Commands/GenerateProxyCommand.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/GenerateProxyCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/GenerateProxyCommand.cs index 58384c8c6a..788ffb4436 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/GenerateProxyCommand.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/GenerateProxyCommand.cs @@ -53,7 +53,7 @@ namespace Volo.Abp.Cli.Commands var apiUrl = commandLineArgs.Options.GetOrNull(Options.ApiUrl.Short, Options.ApiUrl.Long); if (string.IsNullOrWhiteSpace(apiUrl)) { - var environmentJson = File.ReadAllText("projects/dev-app/src/environments/environment.ts").Split("export const environment = ")[1].Replace(";", " "); + var environmentJson = File.ReadAllText("src/environments/environment.ts").Split("export const environment = ")[1].Replace(";", " "); var environment = JObject.Parse(environmentJson); apiUrl = environment["apis"]["default"]["url"].ToString(); } From b6f7991ae13eb03c4b8fd197964fd561b211b607 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Mon, 6 Jul 2020 16:15:05 +0300 Subject: [PATCH 032/137] Fix module name --- docs/en/Tutorials/Part-2.md | 26 ++++++++++++++---- ...kstore-creating-book-module-terminal-2.png | Bin 102672 -> 0 bytes 2 files changed, 21 insertions(+), 5 deletions(-) delete mode 100644 docs/en/Tutorials/images/bookstore-creating-book-module-terminal-2.png diff --git a/docs/en/Tutorials/Part-2.md b/docs/en/Tutorials/Part-2.md index 1f6223f5c9..43541847e7 100644 --- a/docs/en/Tutorials/Part-2.md +++ b/docs/en/Tutorials/Part-2.md @@ -349,12 +349,25 @@ It's time to create something visible and usable! There are some tools that we w Run the following command line to create a new module, named `BookModule` in the root folder of the angular application: ```bash -yarn ng generate module books --module app --routing --route books +yarn ng generate module book --module app --routing --route books ``` This command should produce the following output: -![Generating books module](./images/bookstore-creating-book-module-terminal-2.png) +````bash +> yarn ng generate module book --module app --routing --route books + +yarn run v1.19.1 +$ ng generate module book --module app --routing --route books +CREATE src/app/book/book-routing.module.ts (336 bytes) +CREATE src/app/book/book.module.ts (335 bytes) +CREATE src/app/book/book.component.html (19 bytes) +CREATE src/app/book/book.component.spec.ts (614 bytes) +CREATE src/app/book/book.component.ts (268 bytes) +CREATE src/app/book/book.component.scss (0 bytes) +UPDATE src/app/app-routing.module.ts (1289 bytes) +Done in 3.88s. +```` ### Routing @@ -369,7 +382,7 @@ const routes: Routes = [ // ... ], }, - { path: 'books', loadChildren: () => import('./books/books.module').then(m => m.BooksModule) }, + { path: 'books', loadChildren: () => import('./book/book.module').then(m => m.BookModule) }, ]; ```` @@ -382,7 +395,7 @@ const routes: Routes = [ component: DynamicLayoutComponent, children: [ // ... - { path: 'books', loadChildren: () => import('./books/books.module').then(m => m.BooksModule) }, + { path: 'books', loadChildren: () => import('./book/book.module').then(m => m.BookModule) }, ], }, ]; @@ -436,9 +449,12 @@ For more information, see the [RoutesService document](https://docs.abp.io/en/ab Run the following command in the `angular` folder: ```bash -abp generate-proxy --module app +abp generate-proxy --module app --apiUrl https://localhost:XXXXX ``` +* XXXXX should be replaced with the backend port of your application. +* If you don't specify the `--apiUrl` parameter, it will try to get the URL from the `src/environments/environment.ts` file. + ![Generate proxy command](./images/generate-proxy-command.png) The generated files looks like below: diff --git a/docs/en/Tutorials/images/bookstore-creating-book-module-terminal-2.png b/docs/en/Tutorials/images/bookstore-creating-book-module-terminal-2.png deleted file mode 100644 index 88c4b34bd14d738b077c1b6e26e2142215929cef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 102672 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%0AHFEOdt@j1A zGGClF@^-6IFUrX2emXyP?8J2f&&Y`k)1|K1WN!f+yba4*uQ(-##pqjcKJ$8=3(0x| z4ssob{4jkwTHvU}uYB9SX#Q6E-sbR@{Hd}`*4ySpCFyA3eK0>=F!gj)pFay%*{wio zDE%Y{P?ZEu9GgNm|Jn>Mq)XVa&UeTsGJF-h?Rv%epg>fscVA%*YBo7}doG6o^!Q!d z-HHi5DBX>d#wSeSzOy%6mIx6;FqE|7gw4nkt#0bpA2weFX-;Z9H{O7UiH_tQyg9Zo zj5bpim8W^n)-T&x-mJ!ceIpCj^h-^1KpwfNGxyET>nK$a^xI3^+lf+3lC>Ks-^R*h z!liO~_%dvz(H+M91;QxMT-bnQ7uJ|ywFGAN_UQ1g$FuawMN&w z2tUGVixC1rtyfuZkFL!xOVfit4-J;1vM9b$D(sz=0H+0Z`SkRm&~&?Rk~=eTM3XAi z*|hCzq+gp{qJ}o@7oA$Wz-p6thCoAg9xdmy$&Py3p>6)kq?6^TwcGaYL-Tf>at0S_ zTK-X7bWEbI8l$CDNJ)hryUT3HLlG%dm*(v-n##jh!N;|tyxKety_?W;;Mi#epYwsS ze;P)E+i@i5*$Hz094uPKuqo0}Qy(0 z9@vedMjFl z5?wc|>kRgf;M-y(=^4?}h8L#^>-nY(>vWM?Ph3e2HLSuk%%F>$LTDsoDHk(I>Q8 z-0zE7`jB2sau4(B8ka6p&-*s6KV$I9Q(CbOJacg4!`mYwJ&{W(19T?B8B&Qj%&nDK zDK$Zr1+{A|oZ~-C;a|o@7+c-bKGks~jg*s^9v{r}YB9v#n(B+MY`)4yYO9!P=_<@C zHnLJ+kU(uL?EfZ7-uFq~!ATrw+H8OT{N*^So-cEoWjCF(8{-F_acM+W6sPpP=dN zp72Wf!FEgPSw{L~gHRoH6c#r9NM9~sUOzNk%JswvcIiIjmQR=vK9#0@vTxifi#MXp zcj_yD${aZT)k~+Hh(l{#T**OK*6~+m&Gun2@J^4l=|);9Le$vCBOV>VWT2y!)Gx@) z{s$4z`DvgpkXhZrTxueG0`H}46}hpdHMeBw1U6Vi&b4)%GD0$B4+g-57)$l_qlx_k z*KWP+4ci^^#JR|p?J?D?lf>`Au&ip_e~-U{3KT)$AFg!>Dv^KbCeow&a3A;zx=oLi zZ|hp}l!I$5BSQp^Pv9Txn%#3-ZCUuTi5SwXSolS&dS%amXO5GAZ03k4cY{RnrW0O>N2f z<-G?EpbHN>Y!g=^X5?ij$Gj~szf?Fi@5^oQ$OI=D+f2vEqZ$Afx}t!dFEd@;txAzn z2n4gJ6XEGF;eT@1M9tHy>GQwClXjB&ocxLDIhay(5bqPNhSoLQM9M8ek~JOHDMyMG z9Zpo2?j#%jCZj_!>EA-Py6H^Bf_^M8X=jca6hwd0DXN8fg5-4WD| zuK7i_E)EbHdIps*JF%zc3HIi3V=U%%`gY!eKM(=g1PZ_F&;j9C;62w4&NK<$1mR^M z`&6f{{UTr;;Qh5Q>$j9q=3Q#MIV+_au#*_%q2(WZ7Y*`4vcjX z(LMVy@uwlA{Wf0=#tJ`Ode!3!l1xsVG7aItGmePAnt_K_X{#(>NZ4pgJjqB{)6fsIwI`8Iq z@~yIstCI8L4@2mzKG=U?0X&mvnjH&upuZR8oCd*S30f%5gl^Pr*9>HgB5J3o$lhi+ zz5nG_3dBTrfebP`_z0H|rxVuqd`2$l02exSwBGB0FI6cdZ-^_&wtqz{Wd88<1O(a-u9uWGMzAjK?z5lbmh)G`SD}@U$86DNsI=1&L;^1xDSuydO;WvlRPh z++G)TB^{kaWfUE@E36quN(5dX`v}4;pfce2NfzRI;DUrQ6EfK*?OdcdOEY}QBbIC5 zG?*{~-SD@ao!j`6UNNhJ*1b+zL@E@U(swVBu`6b-Hq6ThrS6^p$L@>t*Xq zOwy;R{75o*-Mfi~lTtuHz-+g*xjDf^fWDH{&91^Y+w309gEJk)ZGsmB#dp8jh$q2f z>v82iil)Gf>~5)V|C>$Pm6!^&#Pb-`TXdAkWHoQvK z61-Dk-Br$22Q_Pf3vu3=TtkBlo{o}0m+Q5eqVv1)6`B6MieKos1K+dH}z(lW|GMZ=fK#zd3(bRJEw4Ym$Rj?fSPHn6#p7@FI; z-0s3y?ZjFaP|e>e3W9j@k7s%9ySr;Bjx>UbMh6b?W|5r&D2(9XSJQu+WyzWK6|829 zH}veHXwuz-{9~F1B;lySL`82Wm^%+1Q>cTiwMq2e3+BhpmNFwB+gGN`s|6gxKEK_8ID5u6URyWcb}q|RxlCiXH$MSXNR!2tN+VpCCO zl#`b{rY%D0L6B9h2lMvC3i$+BL(2r0AU74xTwz!zjGU%!YVTS3Nl*{r7f4K>Am-%l!kBdwkRnb6%0gtdApOa`OBg}e<>%M>?{dR!|Fxma1z3W z0?L5EYQ(@EBmfuf=f$WTe4=UtydJ$-f-n4u}J&DXCqxqjs*~y7foCAD$+wWiN(q}bpg=bU%UGdmuE2)^FTDQ=MWRyQv^8jHLY?z2@=E{U&{Mn$*KY} zyAT;x8Ysgp1Uw%G|2itmm_{Y_BfKDvd|Pw`H!@@y+x422a#~M}BX_Knd8-Rfno%Vz z_e+1off;oz31D3e85!Z&6>VJSe(oD9d~|1dHBc%1iOjiiqBs%3M~NZXV71o0z(K_2 z^}YC!G|(TAyU7G)Oh}xT{IbELJj2(-|^;mhjr$UVnCXjY-IoBySRW8J~{`M=xPzpqv z9v_!TGzx@4G3SlU;|?ZM$b>3eehbm(KI1oq0W^v%EHB|UH0dgdLKF75cvV|)?%2hEC!Ecfh&;U~}Nr{XVtg!#f^7u#ciTRs?` z?#kA4pqn+Eny!+bggK}@0^LzyKw~~Z&zbsg(5{~b`*Q``3CD1-`%nDZVWZCw8 zdm!NpqB|b?e+L7O!}7^5mria zVynwp9?HyOm47tdkc1w~pA_Dj9Sm+YNoZKQ_h4Zo!?tac2_CEMEZ`}g%E73l`SMGk zNP`xqJ>~U&L{^23n}7DDtiOm6X|w5Ufn)Tn9r?tkiI~^v=e7ZSWTwJjdOQyA z1#1180Eh=h5Z2XV__iNqLuN^ERHmJa*s{j$$)B3(glzMZlw{&HIqk7UysxNQ>6o0f z-=oTl%j0m9s~Sub{*3iANzo)4Rt_dsi34;W#rBOEuI|@re8@1LfNJ(&QK#Q_`Mvyn zOn!;?|JGRzeFq6~8S&fFVG$pzEH+bm&S_fnc7G>1D;T=icIOf!Urfqm)Zb5czR0RS z-3qVG=O>W)qu`Wxsc?7sOU63IOL=zdmA@)IPevm;z&XuHK zS^6_~7d}TVPExt4b6xZ{$BDZBXu6X^tNebx%~DWr;Pnwh$2OXYjPS5Mxk-jBfzdLK z?xF-A%F5~v=A7R$CD7y7_-0kOnd-+=`1Iv+1zn$A$}O}<_EcBOTVs453E!x!k#)kD3V&^d`LGuZW`5s0iH!U&k&ZSYV)1g zV;X?wcJU&xmf9TN0gz2-%IzlKR^D_``Q}O->91VSCj(g>TvJdii5bar|O(XOv0GKEK^_+}CuOn`tsDq2@_! zgd=*h-c;5svqv;4ZZ);b+Gb8NSwRp(3I<$W` zbl9LB-nIm_EDOH8l(}i6@uyWh*G|YlE_f@?mpV?bg-xCumHp`HY3P^gbw**APdU)) zm9<-Jyp740$5Ig!`UDZ+KGk+h+L(`%^60L$+1{R=Tk2JJp3aAJX7KSK05% zPR2HFLAQL}VB4E|_P4WP5v0x^RJ_}LjBisNbnw}lI99^9`?$2ro;p3bC;V;?qw}{G z8_yl3Hbgh6m++s880H0A_lvCRb}zm{3b$XJyC$YzXEl(2R&K43Kv640;>mTNB;n3WaLy+3Ckg24KIQ~XLeKjh zpG2GY_qaw{od)8g+gQ|uhXxb41UE}O08y= zo;3~k$~Q#Mr~m%`_PV^TW=J>M?Phvnr#K?!*lEM7mn^v;$=p;-u{*;lbU3Kkrwy%E zZjB3)2C!rZd%vk#jqHf|!YPfeVUvwU&+KM8KmUYS`lVl(jigzV&7b)O}xBl>LC24HrV)U+BK#*!H${j60UzgW~XuD5`Cm9mZeO@VoZhbKA% zOzX>MQav-O^X}+cp-SsJo_U+&tfsPNZrBcnw;x?_7}2z(q3+ zeh3F{@F$n3yB1Eu6j@Rzv1rEB9`xt9P^VL^Z@kVG9;*k1Aen#al+TeNV*8da^DO}y zyCzR_sHt`u$SwGiY};f@Y3uYTkFOJNOonb!vB;=86qr?b6sYkd#`A~LXZQu-dQv$* zsdi!jb#sQZX>_b`1u@Ven!N_Pc#HI+8C`t*;Sobvk73Pj5z9w60DwO=V*HgBhrhZ- zA%H3UYjh|q5eF)pNb?OrhSfKYo|Nv`g?3!CX6FmV0!QuV5B@z^p#hd~AuziQ8g)G2 z(K6_MbP2;BBrrY=DG_dYMtfB}={rM)`W#qAW|eZKtSh7+?!I*B3T*xU=BN$mWQyTa z9n6j3i5S}JwkZ_)vTeTvJBhu^V(O?okj@l~{%Z%C!<1@v+;wapHjX|{(o=ZAQaNMX zG;17VeDiszR|-y4j>KQo#E}QeN4IJh;>B_Lr%y!u1)8Z<#=?`)NxwNjq?nB-DhUqIFgPJAE*1Vaot4r3y(}A7 zjZXphUa2J*8&ypsyS)aZ0}Jf5#iRh~Lov@1YFwxQl3-VTJ3Y7bKHNVd9#oMtbpt^5 z!<+g2gHMqdF-u0)R@#b}OD2sxg`#*^C!Ipv2IGU=!+B{fKYcf0;Yaw5#{%@69s;&J zsx`Y!#w2=;rb=(3Qe2GZD=36%5^a{GFnegCda~!#O*q}a0adyK?R1a}U-Dgo6@%1c zJR)C3Dt&!CKvTI}0kFUOM!z_Epc|@YjpVU>QnoCvMDCWYrBJF`_y2#077C9O<_->{tz%|FqQtNs~+dh9ZjqcH_c(~DGw{_&m*t~yRxWjPX_xtl+-j!Z+BOp2V!Ie zPVv0e;D?!A)o6clVl%c}uIQ+sj%A4+({`bTzm01=r)MMy@G8|$QmOnak3t7be+0z0 zI_sJm0V#?^FT>%%gK>J1TRN}cj>!pk{Ym|XaNtfg`UG2r(JRRzEGBgCt8kyu^e9{(!^V-<~zGUbxWJsK@K6*e`* z{XfCjASXi3jG6lK^61Nhp9^F#8EEWH-nasqWN-e5^7QW$Ey%vJTu%uQLi*9eS59%m zU=#9RPuxEr@5mD46A-`w*iM_Aa}IaYa-sg;x6ol9OLQfZ7(Ayr*ou+=|Mz7v+wBg2 z*`UoUX)L$Ldza?@-)kO&K4W2GdRE3KHz55F5^e+U@5q75pU?Ps(yk!wr{iB3m{ zQ7ghQ09^`+>AL;C!l*4+30>`|q}+~GJ?8Mw;^B90ZL^BXAnkJ`ZRNDj5=5p^`^UT= z21k&3da&eetTwWjUnrvjuqb>%iVL4GFw+{c5Ap1yE4T&}#WYI746r+oGx6TdC7-qd=3V$AOPVF@8fG zzZ+II9k@xAv{mK5yHu=BWa%mM(o~-FYsP;@(fQ(9x3EK+#L+^88j4F9A(d92Fpx)Y zzA*Be{0mn%z4hDq?)SvIaps9yL5Tj&iHr5yQFP%E2Xznz@>}EE)*BUASo(DtH~FWy z@!>{$?HtP@dv2p=3Yf_V!`kDVF&9zfK030$U;`5D{mUSN?WROWQNVK^^a!^81jql^ z+%flqVkYTO5+#G$&t!I-1tiqjHv}6|)#21v_fWoNNM;PaMFr+)=U~7MWk^m=7g2Ws zyDF{?ozvM}<2pllnfKzMgW%g3T+h$%%(ik6j*L5z1lsZKLfk}4x?y${=WxOd#=Y!+ z>%AVV(Rz9q?J6>9+Ij5!wO&6yx_+(fdwPx|NeeCnAS_qPOeyA2FP1e$O#O&j)4u@t zR`*F+y#2iG`d)_= z{O8u!cf|#)WlTWT-xCJv51USCc(-niOz#J0RZIN(mLgPxvn!evI!57BCA`>JqMc@k z_8y31f%tnvNk8JUH7EWXwqI8C;thJmp_60>;il~8)(!Et!BJ3aV$xfSu-RkWxg-Os zdYz-a_QI`!$}t=XXk>G*a;brZw%d%|9S<6+^k97nrcr%>Pv?*r)`Vi;ng(Iob9u$c z_4`C9P0{W8h?SmWd*V`@!#^(A-r01_C9cDU$nWa1vk>mzOs!QP@aTG zA>^jYI?*nV0Xh4xz*lOShrv5X?yvU@N50=haYTy};Y29Iof~8XD+*`l{FQcP&CB)S z7`MzU62ezEv+?E?g${^8%Yts7075lRmmOzj>uXaKcA z1lLb{^&($`8Rl9+6YKwi8PQ<@gB{PU9qJE7A8dWA&Dwj^p#Dz_u(~dc;y>o}5#Zxg zQXW;z)69QF;@?A$`(STl!;n8b5uOBBwOStWtwM+(acjU+x8Aewm9Ed0+o-QJHt$6Z z&xkWzN6`HRIP#Zqth0a@Quy<3s_542I7~hl+NP);(!azAoP8$XP1)W|u=rIoy}e5m zv|vPJ*?v1U#cTi3my{ss6Mb>J!?M5{b@(R59*&i2CJy@Ne%n2Hf93ZQed ze+L_=R?GK$u-~+(rtcWUuAihbA-=?}KZQ;2*%NaUUWr6@ zk(&^_cb1`#IeXb|HnPL;03Z$b5EjF_+#xKL4Mh=6y78}8w6|)wvZSb&Y;JHV&f86k|f3lx; zOzH&(ZC-~zEE?alMV-ToH|4QH;8X2^nwQnjWCPj6Z5}rl{$BLbS0A0*{t^4Q57)eU zzm7No097=tXdVyGP_L`g$&%`5-S+A6RU{Mjo7BMzhyBtz=&ox$O?e~U5&Wf=pw74yjeH&+R0a6m2BF;u1UHH&9 z4V5Me9-lxt)V!;wX0UUbs4?UledxSoeOQNt>L-nt5jv_a*D+J-OQ81@ zK74cMXBKX-q(`i-_kMu{yK(xHMx#$)V>0m&8|b$EJ>_*hy><3-%%^sm+uMF|X zAZLiB-MATsC>DdRR;!=d_58ldipR&W@tgcn*Ps8`ZlB#OefwA3wlH9~2(oOSDGifVBhV3YmBwYJH4i!`MMXB4vctc48}K!v2GA$dmA@#tqO znO9#>O@zj*0V!uBfpH;?In3lHmIayut0O=h>}i>)VS>NqUiq~ZP)KrQr-@UG!; zEn@Sj`jY-xU%fp$De(`2ZULOKWu-N&HxCmB1;(=CHVCsH#b! z`|c^6j#29YZeR~1JlB4x^NOaFq+6-mt5@L`e7(g0bTYm9{djjBilqCt)apvErs2Gt zUgKyhue#d8ETd=m+vf1F^T(p^DI>5{3|qnZgIXm%|N`bdV?gh z>f`mi)oPnj>3c?rG*TMQbo=1OW9s4*?2T84*l@C1?R9#Uh{nLhfA@@w+Mr1uC?RqV zlxViwyhi~$0kYeGwTEhf{uuot-Tv0D?>C4~5re9q(x?^2MB(uq9acr;?BfRgGAzDZ5*6)Uso; zcmoAl>`b#fvDK#CMqH}@fR-r38v!( ze@J%^=s_--%k8=oJ`4rew3UGfsX~3VK2Zg~qiA|Ac{pj!t<)~pGcH!pCQOM)bm6Sm zAUm&74nVjCL4gqRFS>?zTGRZR8`B`4J5kUPJ!=|55eM z;c@L;_~T9mnk8Ruge=}Jw?)Eu(^$O@bi7K!?eV4UKgEAp~c9up|Ysu)hW7LE>O+;9{l2ELpvFtzGIFj zlNKRa+;+K*8XU^s^SMS^aM`H`79oN4Z>uf7bbVx=1!$+{S%c0~MbE3eA^&zI2os!%xdUv@{kdDZKjJQ(jtlqcb=PRbx*9?UY_#N?U9BZgHDT@BFWy4ObL z;V-@tH?m+DiB3`VJK~1(*bA_!W^8^=D<7p$u8>f}F!mfjsbEo0FuI45+<_eiMC(00AN<9+V*s2rpTu?gdC$lF z9{uWT_FGZ}(ne0?qHB&`=Bi1y`7}Z?k(Y@jLVfwev`Fc{LyGBvHgN%|R+^3N0S)-8X+iOBv{yf2kw~dL0dQPC;Kb3_6cCD5U1}sJew$h0qC^C?&4~ZcZWKcI&@^h>F&Yc}z zO{)fO-~bPN^luQ98IvZ=T~WV6pt;2D?&ajHwyLQ@=g$ka3}r1~5RtnEynUvL03Nob z#0Bi+ED6!ZNyEwmQTl30DZBcfyYZ{zwZ{eM$Yr>!JDmOp7sj|34+uc_Izcv`eUtF7 z*_os&jSFKZUd1@))9F5%uBG)}YEfbRM&O%}l&Qqr-`0`}znMc&mUdHf;Dar8I3-bVgdX zZLo7KEU%mWWh|EKpA?ks$vtnZTPA`*3+_msN#hZR77wdqap2;Ihlm-$WJ-e8){EZ$xmk!qnAuXc}&WOw>i%}K~ zfPZ`c5Uo#)AqF9T$&3fM9X>J&nlGZKje!Pia&iBP=V`|@;3Gn48S5Rm8mmN&fQs8? z+(+RP;`*WQYkf4^+WApbwcfnSw6w9xZU7gP%|pjSq4+(tYW*Z?tiH7KW#TL=?{4yy zE4QSjesT`9Zj>$C(&L!Pz9=*EAo$Rmy|AE$h=}O!@<7ky93fuO6Ev5x3Yn$Rc(#lm zBK?qxyxw7cdrA+qz*4uEGWtL zyiv=rv>OKBFLlLCw^Rc+ie>=-Wc`o}{DGAps>i6&QUyBMXg@w8w46P6MM89Gyw~2h z7&p^gAcPaY@#x#W2me=@Gij?$nmj;{DDVk@7BFJ|&IwTh9*z=pv#aA!AH$a6TJ|Db zmK8;N8F%? zODWSH_98(xcdT-1T6)cNeZ}hc^ZI!3T~0^9HOeQ7x{O)>2z z^lRP5uSY56=a6|QI=htnG0g`!Hu$%Z1&G$Oi)nz)c-*a}7~@7{F_VtiW3m(7VEs%& zzsbOu?qMbza}6W`Xn0t%FJ?>DJXiNsFQW^L<1|YNtzMwCxH3wGx%*{9W(^L>apo-m z@W!0XaEmL#Fp!LZ=NAkR9TJEN2`d!Gx@bm~1{OD|PbEkjBZ0g;7k8w?~Hyco$nS6glA*$!G0H{OV|@wMNfclOxY z{5r@KM+C_tC+|0H;wu3SEitHfDAaU*N||)tcCAXQo^Vi6wlw8%b{JAxxp|vS2i!UA zk1qSyUx&mIF~WulW@6;+HSB1Zf`rW|+ZZelTR4C_L%cEH+R+%~uPxEZuA`85oZUiV zz$ldxb;LpY4KL%b!Bl`EpG{i5_KHUNJ4d8ry|8q>kVnRwr5gh3ZB9MnK*T9q<27{&7t zO+MS}X7Tth!=SL$oyegCD=-A0Z4jBO6F2th{jgAAZrdVI_jku_JLu(sd*ii>%`=pn zT?Z$B(6C*WEW^_Lf0_51lu{W8>&4&(G{ig;$>4+-qWe;jf2$`u zt?^3v@@*QQ!+VPG`84z6P*3IKmGK;pL zwiX+y+2J%|%qEzx1~7gJ8gNYJo8uuq6RnF1>}x3f6#ExmRu6^rW#@JHNWeQTQ_CXL z!{hJ=dzd^YIJMLDPD@*c9N}ibuiM-p<#J z&Zmt6>E42s+%JS$IuEj;U^K4kZcc%a2Vek-De1iJFRTac`6T?wQHIrYo+UQjp{SY} zI$y;aI%ger>(hVfw|YL-r%Qa48d^~0jmDtCbe0d3dBFL4NoU9k0e;vmhJkn&o~*j} zzZce)42zK2ELT$yOM?SGi%1I6Z5uA)($X|)XzlK}wyfEM!B){Q2W#^1y@7Nzxp_v> z(tH(rkwlPApL(aFD}8so3)l1yrKW&#jD8qn&s<|qEpZvaQ-)ANHs*?PiJ* z`|`6aXGzqsU?*ZJaB5jvs!znnuB5EaTLW-tReHcC)1ZbC2KzZ-`z4*zEaE4p9S4|@ zzH__8?|SDGmM__mo90#8jiQWAzGc9y8O&~$Eo}+Ga-2L)!3Q5r;W?8JHdP%jrHnM> zt{K1DSrj-hS;Vg%5%VVz5Eb?K=iJ|9gV9yxhIN&+ey=F%TRPSPra&qR)HjXx8YJWn zQ7C)%YrjeJ?bd7{1O5(9&w#R`t5}F_U$V}uIc&UbbO+`p=|cs2sZ_P9nJG0# zNdW;x3xj23Bmfw$G25R>K{be9sHe#SB)_(rSvU8rdbRoim;5*c6lk_?zz)O;_EgI! z8XGoFnP&k^b6WPj%I-Fd(=eWZwz-*_I1D*o+q0k&55!D4JwB_Qq-dI07=Q<#o{n^c z8nK?NDIlOB1uu$>oKdbXJ0IFe*6(V;_GHm+xxIwT>slmgm$J~*5u68+$Oc9O);ckODWUhO8A(Kw27n z%5X8vnye+c-)sS1zut>@FKwX?3Qb^lY>=crN2e!eQ5z^pus>x~-ceefO@= zJx&O!Cm$8%BLKjNZO@gf3@?dMEEW{?4MUOv&KzTw_&T`#tAdZ)>NM<%i!O+fK5aZd zyFwdwyZ&#BjND0XEA)Yy5P4?#{N4KsFTn~F2mGmtTgIADOc~B|h}==E>7#A!NV5hm zJ<`4#?E)7brHVSOG@i!iq6hU3#dkllm+=%$tRZctR`8oPUUy-mZy(X5ze;~WMWDYN zk_i(X)uYZ!xtf|@wX}M)*Yh4JJ1nzutaU>+xjD*Y#c|{saE*F>7Z};`& zlbtG?@H1WDxaa;SjXzNlAONWXq@3a&FE*blqhkyASOy?qrV8p5PyS#(3G8%?9u@04@MZO)`LN>p*PZ#%l*f4q-JbcY_ z8WJL}nOfG4Me=H9yUi$V>KD>qP zh=)yTJFk90W}{Jm@hb$Enn)DQ@FX*`(fd>FSoZH$&rwwHh3)!_kLDDz4{8j2CXeR? zMylts2Oa${V2Pf$*=W{aJ0W4Gz_+}-xMYD2p4fbBB&JPxvaNL)_2WVUQ64-vNRo1t zo99A8?awLd@c1BK-VWzWu}(o*R_pC#RTyj^+=2KzPyQlH0w~cx9rtzO+7$kr2_>n0qzdCf>gW zJ1O2xM>?i6=ksO$zv~k6EI(2G0sp&4$8>K+L`g6S1y|#XmH8LF;nguF8wZ!e-SGUv zaHOJGAtF38jg0%}3;kg(>M@4pI6{dUHfR7}HP@1NS?MsFpP)yyxqOD#=~ab7=Vja^ zp&2%UvF(At+t^nahyW4}`^m!cE7qPJ8I6;~*~YS>H;<6cF3GjpkvnOUbCs#(}eP2Sc|w}~iG;Fvd>dk>=5zfcmJKnS>tras*w z>j8hTQDX!aeGCnsbW<}9@GYD-_-!1sjrY3?rn{Q6=-S@xleco7e!O4HfdT&3>pgE8 z!2?)lT=tB-gpXD-sYhwCllqyEkkbX(5MHQ5DPur?o!f&a9q9n_lA^D?>OgEWHb}I% zoj99mD1z z-7FI+(oNUW4hDscve+PMQj4N}z?WE}Tp?-{dFtpw`f;SHpfqa!x;SW@EgR-fxOktelmYzMWu13|6;jcYMwYS=2Xz zO)Mun9yJ>Q&?s~K>u(X9YV*50*pZq$eA);Px^;PKQBYP653b~M)>VvkYTfQ05=;m! zQ!SzLVHsMBH<}GF5#L`xF(69q*`<_FRaLtxfMbT9SO20x8D@&jJtvqwe2XoUYNovf zR~Hd+hy1kL;db}T$iO|e;*5HBP{K@3%ULXa>{3i{&nX)`PIFv&yei>#q^Znr2H~eZ z#RW2|nwl34LxSf}rPsGEZf0N?hhFtPuZ@wF1m_(6@HcOq-va}5NG8^jEv_rFqiq)K zVW3V_BE>T@*9v`)uDgq3A_6_E#J~@4!Pn~oZ2CA?rl;BYnYK>QYn8W6xRB&qOB&6o z_&WGy2{JRjGG3fnxIS6}P%O}r%}<`wwdB@`008-7Bc<86I&g&i;v8FxE(3zr5*S-) zwbBebs}ooyIzTbHvlCh{y=wG%$wla6+-VzKfrcpH2bj8qcG-bng(yz5Cyn3cdV2$P za|Tm~N_tXa4hkG>PCJ9P!sHJkK6(fAAvSJqOEdyxsu823Q$n|xGq})5W2JZ_R~j%V zwlmh-`_$71MpvajQp1uzM#;#Sz&i6A%Qk8c%UOh^8wq_pP3!j5Kdu8!pGUt1F@8FG z#i$Nzj+h@`;M6@G&>GX|kjYC*M=Fg5V~hXFc+&-`T||w*$Pn;0v9sUqul|a1Ms&fj zHez9k`vVCE@UvDheh}@nR>Drt$U>-BVXdS)aJ;=e&$7;wOn|LeW3WuHfpuR%`5FgL&0!KdmV3ndWi zX5_(6{vEy~N!?T=(9%YA)*p%q=5Co9~%6LPT^ zn)ZIPL%SvT3@zlSvX1Qk>M{!b;n^`>bJ^JG`sYRO#WCq+K(NjG3|Tkco+6y*V3|;W z9H-^(eyeO^Gnspk8h{cM6~z9MUEK6AY(L39Zm0F3bcyl&ld-+jL9O#<-|~R)B?jz2 zLBc$rG2H)H03v_Up-)MF^MV4nI!#>Z66Hi&c()|s{h!t6vlp-H{6_D`9K&CZC-Ez9 zcuD+kKZ|U^zP%FbkD0CxiV$@uyVKXatw{JCkK5=cG!f81kj^PyD6$-te&gNMD`cW9 z1mOl+Zq3(jCLqb&HnxEGgizns4gd0~dFXBKl6wgQPvv zhRL%cVJQ87Z+hN zHb0f(e@NK(j_5GcqpOC?wKrkKnD$XDz$y8$W`&y*t`VVzyZ1h zmNax1zxr)9qQfmFk~0-4tiwb>N4#bvo?P#(?<89V7BOtJ5L@vnS}xfUlvY_gLQ{Qe zr7==%B<5oQ>2F%_bnn=G^Ve}=45WSao>ur`7hU$P>KR2L00Bh4Pa~!!Et+3p8+1CS z%^dr8lamhyWOX;$*z~KcV)#xCAJKl39NnAip}G-1U&_v^V`hE5cs%DZJ?MPf-zDrt z^+<3KPF73!8p#f-bXInzOD@`{AD4t125+=V|AnU?(;h>;@|r)M=KnFci1-e@;RXn{ zcuIocO`-&XT(Q<)Pi`t=EP&X7boR?mB}HY0^N$vA8NuRX^O znSPSG&bO*AAAxMfpuKX>SN}JEf4!tX-C#@zGDCVv*@f^gJ_7n0`1-dqlYZ|#6Z1}} z%=MS$?CD7bMF$nS@g^FVlf^!_^3$KG*P`MwRym#sqqF>%$v8rr!m40aHV3VhN@eI!;uKHii{$z&hA%yA2D))c#Z_`OD$I}lpq40Y`aO#_WPi2HyNp#OBPM7v%Xo$ zz~1ZG@WBQ(PPX~y87{wLEtrZ5uEhPn_`PVBp#L)}rnyD4YoQf3lPqZJ=C*dyW~rv- z?M>O3@wz?fJkopu8bJD`CUk~=@_eaf+Kx|+m8pY5u!Bi?Mpc(uv!0fbvtxR00vsR; zm0kv&4hBFQfgFvS!L`?G=RM765evOuZ+2>#y}8uYc2p`{uu4P&hoCvcXV&id%hjBYLG`i!dT(#;`B>u_{**325*J^o4$_+=z%B+G6AKo4z zcf#}7zm=$j8EW)h)N56I_bS)MrcgYpLmRVkrDmIUqRxhWiKdv<@D;tL%2cwzua;zI zhARQ2T>dqr5}jNlGI)K>E6A9g5@2%r5DBVMEJ=ie1@6dlnKY*H=U%mM$|Nvr?G;<5 z6osjc_H$w3FeAPQBLFTTYf_pl8cVX#t?OxUkP^mioSv}0TEHewU(p!lY>+G*A&e3XK<4r`J(AReuylbM-<9TKlIs4G%4rd}OtutgqnyAGc!vfUsbZS=zV zzkDPnf$3mSWBdviV93W&3&L&ECk^^-nO6@73ucob%~PNuoc^0AcMW3yYE&CNorDxz z{HJLp)U>99aOupE3K||)_NZ9{T<)$G7gViSv+5E`1RtoVQjda7;H;8#3BK$Fn7 zibbhM$iE5Zb5`!qn9H?s3H>%JEeum``8CFm??u>IZFM$cmHP|T4@U`S-XnR1Reei{ zBIZbqYz;`iG}Pt{9;dVU6syfF$GcPkn@4b*RkC*6PtVn*dJ+AqcbU-smpWpa3lhmI z*a00Qq#`zC*gylWWhOkov*A6@E3ENMpxFFZK(9kRhhhZ^0G|y3IR@meBv-CC+?XnN z9!^Vm5V>P?moRv2*vHKCr4qP>`pLO4kQ$%fI;n}oc<1HDqKxF_*P{ub!oF0P$uP0h zCj%&yM33@zeeldl{95OaVdY!1p|z_vtmO6EeXXnB^1lz}O$h#b4h|h~DEu77>T^Wu zb*LI{;1;LcydmbhOAXEM%~~i;4~^JMebVen3#_L6ELLf;?UbF{s#_%|o9#<$HJ@f8^`#SuGKTzFZ%i96?yDLK-NcXrgS{Z5aP9C zZUO*g)yu8!HgXCPnDN*$&=Sz+ulIMXfk!{-Rbef0c&Ew`o-{003k94P!prR%HoAqi%GaJ4PZszdFwJ&`wSH`W?0YHz}CsvSzXbw zM2Utdu(H)__jca<{V0FPBd)lI+%lB+LX!{OIEIPObh&VF5mUT`4D!1}Y*<0n{n^80 z3l1iL4K@V2qqef(*lVE1DN{*!TXrxrl2Trsrzb-t{k`uY>$urTMZbxdSy~?L)WCZ_ zRzX2K2wnoBg&bFZo#^edHgHCc+>r*hdpdLeK!Dqmb_fhmC^ZV|w3SiP!2oXQblD#^ zy{*TV2_*G0Emt1so0V;Nz3I>bP)PbieK%&8s@mSVRb!~^E^49gj0C=4JIGc)7>sC; zhn5OHjfaZ^Hpzw+Iv>jsdST;kkw9-3je>06gS5Slc@b}nqPUgF(l^P45|NTKC#O8u z&y@K20-vV4sb zg09phaBg+2i}Ifx*qs{WJ0##fSpk)YEfQRDPRzFra9j5#t|+3g{tn`vfNaecPxJj5 zs)FB}!tM-&{L0ICIozs7@2oG2YcHpnlUCk?_umtnc8|;(8#6u2@EQH=CaS*z}2LRO-{*PzAZu#^39lNY%! zRd=*pV>vmQ!sh$nc71&mvtf5Sy7svHpQPm5#oGDZ4F>F_zz0a9^rJ7m)9#Rv;_>)a z_U#n<;x+LrxcLo;gC1WJsL=_PPU&E-ZF{z z6!Y9M6oC(&wRWYUFlZ1-4+${R-ELvozMcNWbX|%PFMKU;fLnUKXC2ce+H+Wy!)Vxk z${@jd@*ubLiA=lG6IL;j*D=-AEZZ5z zO^tOVoh4fnLPEt-zSmvfbD!=n-j6s%7#JE|MmsXo@0)D0b?p3v0HL0(A8!{QP#)Xk zlWh&c9FP0Bgy}zLJ2&m#{5v1NT$-e3z4|Td@Ds+5G=!Y%Jx+Fhe61LJ+$v*KEgwJU zR+E58t#{iPpxb+~|L|7MmWgkDFZhWY%INdBRevvbnpb0@`W)W)Ay zPi)moQm;FD`bqmGa%l~`uUe*~)!X)O(Y3yx>+;~ysQa1sYdED&r*|u8+q+Av7m@O# zVTEl%anald~a?14_z+#Euu%n5peBDh}Pm|CL=cA>ktUHwDIC>KMQ;6 z%s|&iSC3Q37PvoYvC}^fz2NKgJTQ2e!v8rsHP2!|OHVV#rMfuy7Z0$TkRa15;+_sA zyA{}3!43XQ-ubxY*E=7x-nzi7xb!$txqN@Sk}#F}@LpdyiksbjT>`;NaHA>6Gm8NQ z=rCJtpqEP7%JhFR&8F{Jq&Vo8G{aY$n02h0ZRf6{I`Qd6u_F1GY3|D0?a8uAUT(9@ z)NJSTXlwhtH)op%n{{B5tU-4NX&0q{{YlIeae z;k(l`{$K(yp-Py`XgfSBGv-dv45QSoS*9)6$J{q^a3FkI4r2z~aL&zpQ|mBbDlnLX zdIymSn`fCv#M|UJt!#riXl?mAwqEa@B?Oy6HiabJz>!tb6dGFJl}8dCJlzJek_){Z zNe}5kc_6zByPHc22`V5ApwQ{Ka()>TFKcBs%ENV{K8q*Lb4OrD$P6F=IWt3 z!~qW8x~6iC?5vau0vksK3%|yN{Vtk?&eqZn z`^s^expo$7e0)YvS8x*{RJhLlP`;v@5Mc{EH()22=IwfI_q>I6{s93aU~<{_NjOnE zO)I0a?{Q{3NatmD%lt< z4-hnos83WsDc$gaVaDX=1{lE5QfV{<#!H-t>dpRrx!I>0a8SHzsb_u_QnfuM>|)aIzLxM~dDL1tWRXFA1w0ZlUn6_(c3PoK zyTXNRN=ws}Vovi&3jpYBuC$emQ~OQQ0|?lm#4w|IK3_<|vLe|_ST2Ki10e%V4jC|0{X3fck2i zBr66ofL&N}Lvam0qk*D=m!eYCmL%$2+1TOLl?-#W|kI%`1 z&*wT}+vkJ=peIFxehbHvv-v^j%8X+lquCO&Hl z%RQP*f)n$y9RaKYLc@(WB7fmjek8g*cg+y6v+5XTiiF zBe+j8MEdHB41q=Y>6owCi!!76gBuRib7`q{MkK!+ODcwW>SVSyXJw9$x>(@R#8u1s zXIlmm8p+?~vo5$Oc+-;&5aXtYQm|P0F**IdaDqxI1?L>8ZtwYO8Rh$-H9C|LGAR@S zfi(CS1BK=22_Dah#k;0vu6JXkS6O)g)Xa=6$+wZvMugAet7Z@%ho-TfM^_XB00OMH z_k;<^QQ*4J!9Nb8S5=px-2@(dTt0qRmtDDuBs24=qc<;J3_5I&dK&-wx8s~PG=zp^ zCWaI?Q&)N9(CP;au(vTYux;Ve^0+n!ggKLpHIu%??CcLmx@$$xwN)LFS2Ndy6^))l z0Q|aZKI=%N(zJ9k1^|FCn4z?v-svYQ7ott3L9w)~aq|gh6%W)B-mbUT*O-_(&BU3@ zEV^yH-|n!wcJ#}>i_OM9#ULw`YIe{yRvj7d+}fZBtBwR-@F!DWHM$~8U?-V!r+i== zV`p>P*WzRgvIdecHrjkKth7JPzV8B}#@TN8y4tqn6y*=1=LLFiQUnfC9`J^eWplnY zyPVP~yk={g6vi%Z^z1)h(h9FaM^%!%RVMrU1WXozpYM;{6qR{*Sd`qHO(Zv`<2fLp z7m~ym^{wjY+T!5(Zc4+$uRIGp&I=Y|RZx!&QR&ncwHb|9H?EiCYmC8T(Fi-nO}2u@ z61B6|sx9lDURR4s!Ijf?%JJtr&x;9O1R0dhJhvpuoxAv_;V#(R=D&dfN-x+1pH>vq zDjDrhxJ-P7^mm)DJo!=(O!ynN7W9;_uCGfcoR^!q7dpJ#F(0-^3`xFwZ4(&Uie!@N zrBiaLF&W#n+$%uP_ml6Hgb#anyu@F3q+j@ZIQ4N#WEKCa;QxQqJ0?uGA8%$7h8<)A z6dewGrO1Ll$%O}gae1T|lxoF~OdMEv1M#K1L5k^#rpwh~xt;GbMXJ5dmEMG*GRjG2 zWjQzUwYUL4j%(5L!Rd6{@@!74aY&y~h|4$_w_4tl2p7)K29y3IT@&pyv?+b9v+Ri57fBt@UyJx-0^7+g z2?h|CG|WI^V~_MV3d~7W5?{;OCPEgcq~ z=$P?f=oM|mMUYu*b+JF6+cEM0)P*05mB9i497t#=DEalKlt8#C#*SPVM%Wa$+!StD z$J=?2bD-fDhVAy%r5ZbbKXGXz@rcT^+Sb`TjwI7&?v+b$%-YBS31};z&RJR&oMFt{ zeZfvWxM%kWy*J110flNz-Gs&DZvPRxp-hbLIrx8zJp@eBcLHk4vwU z4*Oa1SbdeN8rc24-12oMx}I6`b0EPny7%SCNd=9L`_1@tD(jbu(C>h$ZbQd?M7Rt$3W>%tP09-?^+^|2rTT?xmYfXXs-W(iOy_NLM zuucG?$F$QRzG;)6#QM!friOp>s|Q(G-Jz&4Za!&FE(8ZTpL3wCb>g0vR%37e^H*F&91dv z;b9?}BQrY~i_N;e>H0zfRuZ9R^d2y3!jfiN%UVcvJ4{{{IpYLJD;e+ivU;@L)3F|C=xQXdX2wUUV&~(d?^xrtQd*hA*Fhvjy(?q9 zaN%ti?&pXlIO^hB_ctzuUc0eWlmvhhF8V|paThT>%y$)BFbeOie3P6=H=M#wHg3x4 zRs8r`P)#!(MLzt+G?iKl3@|#C@SAer?+>ECO?Ej^hEqecWP|*>7{13*GY1_v*v7@a zCzoOme6ty0qNRJd1m4@Jwi^1XrnQ~}+@z2zuW@o;!h<@z$0z!AE6IrQTATZ(Ems?p zclPg}D~J0k%j@&|A=B!$8wXj=++PYi>7BHq1vsj6B&#sw->{t@79KpE)$M7=rMsCB z1|4;co@avks@?7XsMNYF*I0z0Km&nO!72f)E=(+}Bl`(B+>U(?8$=^iKmWCslB0dB z)Q2gtP7b`L1)#n4-=-BXS{pAuH2Z4<3GhbP(M8Yq(VmfwzlpWMon;{CLODs9r{C~OzP(hb#h`b^~*or_1|VqM9r)OK3*QG z=(rYOdqbYe+)sIOFi{~#L;2lqN_q#QB8LL78yY&^76y46tNichv*WQRLSGBJOF7fD z29m7MoNHZQM@Z{Y&Gu1oEL+tQzbW58DyR!g`~dS7@$b}6<++0orr0V`_j@KAtgiDn z$=S$kartY-H2V!$8cwrw zN2!DFbYLfgcLZ#cS5&*%OI_+RQ()8UQL;MWCKtmt%R?rgUui#=Bk^Y6wJ#$*sMkrz zn+`&KvQ2%qb*V1;26pL1@a=Kw+!j~wsox3#I(u$X7biXAK2f(W@?TvqP&xvzOP?Rr2XO&Jj(Z*I4+-D^c@(a`kKHOb z?tmNnx3febwBDE7p?0^En&`c%w?8RRoA8iq_@|boJg)mSnz2;h=el%o2<{ag;ckXFCn6#)Yup8Zf(fmGTSwAVQFT7f%Q#yCS;D2}E zFXIFN6!|?w;`$;0B-u)M2{uaO!eI?aQ9G-jPLIlLBTs)WuR4GX6*kKf?Tz6J&pGnw4M$Vet39BK?1NTb{o>I1%30c^*%^Shdnb% zNmVBHvHWkbfwi(-0&7p}yp(cTFN)Zh%&Ka4f~~|Q`;V{}QK&5mcQgIC3THY`f__*2 zFi2cL{`-^8a-1Fj$s(|AaHGR{r(1BjcaR&1=wWl0tN{EFH~1q^c3S=R(oY79x91+S zpwHvgX#SiK9&GS*%o6Tx;piRsF9^L3G5ENCF3NWYs_@)SCSP9EufVHU`96R+sUpAw z{saHizQo0T%hY4|w7h_PV@L-{vEl(X|NI~%l;MtQSgx&uCvwp<6!rdV!z!cMTcz|)-+*G za|nffrKy)58FUPfke3GlP*|iyzpDWAee84$Soke1)( zk_h=!JznKilWH@$pv5&B@BDb%;x>=p4^OD(VGne68M1W>&8trfm_5D?0UOFdR1nZE zo#8C7iMfMJY^_f(8ZyiO`CnME=gXmJ!`vp43+0a#eow?|I zy`4&YIDzs3L`_-}x;~kUH94bGxj267sJ8dW0)_;ultd~;IN$|=RgLpVD`thfCUKUM$ZnJ*$h|`I6!Ftgg@o% zax!|=KJBMNOYXwa#_TzkHC?aWvw4f%T=819L?FcDOkDJi8rYxcv)i3d)fW4{ic{s^ zN;9X(?W6E(qAF!447JFrxl7_?5cx;%FZgI@nJ+I~pXj#P1=MlUQ?3xX!I)^AN`T$;#!3!qVvo4=XP z{qlUy_|Kii=20VT?PK>S*)zEzQNDq#=0Q9tejwQ7t{zXJtFQ@9)%bSiTH|!#yER}b=0Kc)wp}icauJ*%K%r9TiL2z<`uIH^eJiJBzI_ZG@CAOa@N)MIi)+# zIZ!&V@4`6Cg+PPI1Q%^6v@%$Q!iv-L#R zQ_OzYr~RO*4o9SQr7bIQwx`8JQ$j(I-Rx!?C#(WNyX6CBZo!t0DQyJQzsC3z+;2Va z)#?~?HyLSc4oE5u1 z&8@WM?~L+CGJkQHOqd|lk?qVmMoS#@(E67oCP=bk=NHKCL;W#n7gg~%{toW@&qc@zZ(<7wCjr0>Y&ezz81Zr0(&4PLXKwrZ!VFZ zs_UaVXKQ;*Y0v+yNj3y5ATXe_`AJV%*_aB$>$33)tyvm_&u`ZXKq_`TCTC4JIXue! zdPE6I+EiCsZDxw~R*!l1o=fU}mr(f>>H|%*kM7v(wpt>KU8`5FzRiK1Ry>qFOJM1+ zQWT|J;5Dr&jiXB>R?>dhwOy-sa+@H|0J`GI5-PQ8X#^)O5X$DQm?n0;#Oo)R+m+;fr9Pteih@OUX}~^c0anOpa`IX}$l9|W6o^?bi( z)T7c*RG-&x-b|x6U$;wr>?9_7tu5KLf~-m!6PI%6fWqjWIjRHlY}+W}%Lf z8D`R{f2pRMc}3m{6A?l%fweVc-~TpIv3d>`B&lSOpw?fHIu z?fSx*V5Gt%87Nz-adGT%05Yb~hXg41@7b*@C1fS0qvS_Vr6}RolYPG)uEw=Xg8&GZ zYqma=s8TC+GKQhf+?C1LWpQgQbJQ4o`J)&v6XE39^nf z?B?kd#4bv`Ie9H;%>t?Azs zYBguadmTf;GC4P@Vf2{rxGHx4>C2Dvn){EdCDcNekQD?!z~6qV^$Aw&upk+lFG20l zV)5m220DmmU}rpfXzk_IS}S7KWB>4@gy=h$HwKQm!P?Z@&TXk4l+@Nr>7t6mNNp1! zlgU&SkXo`C6FvQdLKPsilIsvo(l<79+%uLLds8r+5x-#7*kWg#&3oyW)v@Rg1qiz$ z7H^=u&dlUxjL9;j>syC%x4Gq!?(JRvSnD41S?HB6WkP5-8NZG*4ev+T({1EU%)Vi7 zCZpb!nt`5o+_0!v6IhA_qr$b@c-M!eRlSb;Ml|IBz$HmL2wd-@!}Mr9cW}YW8uWb6 zKOc?a>)$qkSXzoOgOI`Y;yS3o_t#KaD-K}LDQg1Oh#Db}1j;2irDPW9kZwNQp$GV? zCl`HIS7VZ{as6r5^eOH;V%qNUak)TvQxaUI3A6(Vl8;-*9^8a+sau)5tx-CKJ{Rd3 zo9a!S8KQ{XbUAa)SA(`6h@C)|e903$yP{CF=+~3a>Tx}bLF4%?k`xBp)7@j#l%wd3 zAx~=lnEWe4S{li;;jqojFB7?GJ~_%%$=Pc!5yj5NiMEMM9YV0Sf?B7M0mGS`oc|(% zA#A!HAk!UR(^U)rC+fmQDfFm58HOUv!???3l}L}P_>Mi4s^wRcG>_9MhCV|XstoQt^f~E`wUPn5eG+beT8FM zTj-&-3D(a0zy1PvKR{)?8BCjDb0q)7r!j*rEEDBRKCgzJ`jY8C0_oWjOq%`RPGnya zzGi~9zxU7z8@QpHKU9z9FSR2;R4KtF`4%INVA(3wxaLcj5v-QRJ{wwdk$P_STLaqV zVeLsvn{-N?YcsKKb-v+9yzp27guZDTbhq}#al+eDe55AMJoSXxmKu|=KJ_^Ziaxa; zP;{fAKZgB$8sb>6sV=V7J`#o&9a6@hqU>iINh$RxBA$oNRuOra`p9FP3ybvtvg8?5 zW3q#)TmBsc9?)|--HeCqI=(Z5rhV6q8l=(jDZ&Y}tGv0r%hgN?>lqyS97lg!cD+wh z{7fC4mQQ09X`wJgeURXy{FA`yX(=9mJoiGnwb<^<9>rMBhyK_3nu*YBt|RKSU1d zY*#U@@O9_L)@xEW%bxdGrCN#(S7HZ4%BhXfl!hT+C5a<#VX*bN!kOU+*c>I^I>*;o z$;V7Ex#%{WC@onz@ThZk-cRtN&)w~uwnW`;0jIhZFRR#|9e}Nn?cdMOS-O2)=~Pp$ zTx=AKir&)ska@wD)-vyWT{TYM$FO*}y0A6GUflX84CXZCo}7-!ps6~_3H)MJh|U!q za;OreSa!Or07sm7h2={uwguaS1Mwwz>rwC`Di>g9*oh_<=@6M)EL}&j z(BYAVxX~X{T}Yq#^ak{yu$_=~AbjES09PhGIUAW7yivf8HYzJC!!`sZ908bfB?Zdn z5(N-ZQovoCB!7ycO0!K4>(dy}^!ufxB3%;AbQ|0%MvT$2RCS`v z*@NpW&q(Y&$wENg6kdoj{t-aT!AhWi1Dxilx*i+xBY&+Bf3{Iq|HnpM{IiYv|0lwq hF`>>s(@u%2A_?=}i>ijb8o_{g*&-c|mcxA${{knm;EMnN From e08e951acf259275a6f1805afad982ce836d3b3c Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Mon, 6 Jul 2020 16:18:01 +0300 Subject: [PATCH 033/137] Update AngularEnvironmentFilePortChangeForSeparatedIdentityServersStep.cs --- ...ironmentFilePortChangeForSeparatedIdentityServersStep.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AngularEnvironmentFilePortChangeForSeparatedIdentityServersStep.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AngularEnvironmentFilePortChangeForSeparatedIdentityServersStep.cs index b69ce479ac..9a76f9ee21 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AngularEnvironmentFilePortChangeForSeparatedIdentityServersStep.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AngularEnvironmentFilePortChangeForSeparatedIdentityServersStep.cs @@ -10,9 +10,9 @@ namespace Volo.Abp.Cli.ProjectBuilding.Templates.App { var fileEntries = context.Files.Where(x => !x.IsDirectory && - (x.Name.EndsWith("angular/projects/dev-app/src/environments/environment.ts", StringComparison.InvariantCultureIgnoreCase) || - x.Name.EndsWith("angular/projects/dev-app/src/environments/environment.hmr.ts", StringComparison.InvariantCultureIgnoreCase) || - x.Name.EndsWith("angular/projects/dev-app/src/environments/environment.prod.ts", StringComparison.InvariantCultureIgnoreCase)) + (x.Name.EndsWith("angular/src/environments/environment.ts", StringComparison.InvariantCultureIgnoreCase) || + x.Name.EndsWith("angular/src/environments/environment.hmr.ts", StringComparison.InvariantCultureIgnoreCase) || + x.Name.EndsWith("angular/src/environments/environment.prod.ts", StringComparison.InvariantCultureIgnoreCase)) ) .ToList(); From f7cba9a9a029d2efc22a0205226bebb916cb844d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Mon, 6 Jul 2020 16:42:46 +0300 Subject: [PATCH 034/137] Completed the 2nd part of the tutorial for angular UI --- docs/en/Tutorials/Part-2.md | 60 +++++++++++------- .../Tutorials/images/bookstore-book-list.png | Bin 56461 -> 36056 bytes .../Tutorials/images/generated-proxies-2.png | Bin 0 -> 33917 bytes 3 files changed, 37 insertions(+), 23 deletions(-) create mode 100644 docs/en/Tutorials/images/generated-proxies-2.png diff --git a/docs/en/Tutorials/Part-2.md b/docs/en/Tutorials/Part-2.md index 43541847e7..b88a194852 100644 --- a/docs/en/Tutorials/Part-2.md +++ b/docs/en/Tutorials/Part-2.md @@ -369,6 +369,30 @@ UPDATE src/app/app-routing.module.ts (1289 bytes) Done in 3.88s. ```` +### BookModule + +Open the `/src/app/book/book.module.ts` and replace the content as shown below: + +````js +import { NgModule } from '@angular/core'; +import { SharedModule } from '../shared/shared.module'; +import { BookRoutingModule } from './book-routing.module'; +import { BookComponent } from './book.component'; + +@NgModule({ + declarations: [BookComponent], + imports: [ + BookRoutingModule, + SharedModule + ] +}) +export class BookModule { } + +```` + +* Added the `SharedModule`. `SharedModule` exports some common modules needed to create user interfaces. +* `SharedModule` already exports the `CommonModule`, so we've removed the `CommonModule`. + ### Routing Generated code places the new route definition to the `src/app/app-routing.module.ts` file as shown below: @@ -442,42 +466,40 @@ function configureRoutes(routes: RoutesService) { For more information, see the [RoutesService document](https://docs.abp.io/en/abp/latest/UI/Angular/Modifying-the-Menu.md#via-routesservice). -### Generate Proxies +### Service Proxy Generation [ABP CLI](../CLI.md) provides `generate-proxy` command that generates client proxies for your HTTP APIs to make easy to consume your HTTP APIs from the client side. Before running `generate-proxy` command, your host must be up and running. Run the following command in the `angular` folder: ```bash -abp generate-proxy --module app --apiUrl https://localhost:XXXXX +abp generate-proxy --apiUrl https://localhost:XXXXX ``` * XXXXX should be replaced with the backend port of your application. * If you don't specify the `--apiUrl` parameter, it will try to get the URL from the `src/environments/environment.ts` file. -![Generate proxy command](./images/generate-proxy-command.png) - The generated files looks like below: -![Generated files](./images/generated-proxies.png) +![Generated files](./images/generated-proxies-2.png) -### BookListComponent +### BookComponent -Open the `book-list.component.ts` file in `app\book\book-list` folder and replace the content as below: +Open the `/src/app/book/book.component.ts` file and replace the content as below: ```js import { ListService, PagedResultDto } from '@abp/ng.core'; import { Component, OnInit } from '@angular/core'; -import { BookDto, BookType } from '../models'; -import { BookService } from '../services'; +import { BookDto, BookType } from './models'; +import { BookService } from './services'; @Component({ - selector: 'app-book-list', - templateUrl: './book-list.component.html', - styleUrls: ['./book-list.component.scss'], + selector: 'app-book', + templateUrl: './book.component.html', + styleUrls: ['./book.component.scss'], providers: [ListService], }) -export class BookListComponent implements OnInit { +export class BookComponent implements OnInit { book = { items: [], totalCount: 0 } as PagedResultDto; booksType = BookType; @@ -495,9 +517,9 @@ export class BookListComponent implements OnInit { ``` * We imported and injected the generated `BookService`. -* We implemented the [ListService](https://docs.abp.io/en/abp/latest/UI/Angular/List-Service) that is a utility service to provide easy pagination, sorting, and search implementation. +* We are using the [ListService](https://docs.abp.io/en/abp/latest/UI/Angular/List-Service), a utility service of the ABP Framework which provides easy pagination, sorting and searching. -Open the `book-list.component.html` file in `app\book\book-list` folder and replace the content as below: +Open the `/src/app/book/book.component.html` and replace the content as below: ```html
@@ -534,18 +556,10 @@ Open the `book-list.component.html` file in `app\book\book-list` folder and repl
``` -* We added HTML code of book list page. - Now you can see the final result on your browser: ![Book list final result](./images/bookstore-book-list.png) -The file system structure of the project: - -![Book list final result](./images/bookstore-angular-file-tree.png) - -In this tutorial we have applied the rules of official [Angular Style Guide](https://angular.io/guide/styleguide#file-tree). - {{end}} ## The Next Part diff --git a/docs/en/Tutorials/images/bookstore-book-list.png b/docs/en/Tutorials/images/bookstore-book-list.png index ecdb87c737c26af3b187deb4a08eebbbea50505d..4982032e64e5c4f45035b938c4029a7c04f6c581 100644 GIT binary patch literal 36056 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 literal 56461 zcmdS91$!JZ(grwYhL{->$IK8jQ_Rd1GmM#;?Zgx_#mtOjW@g4Q$IKKnowK_i-0pWj z;JT$p)unn>s_yDmORDdR@{%Zs1c(3t07Y6#Oc?-xekURP;bGqkwnX%2003FnQdCq? zT2z!w(b3M#(#8}3koume0jH@ljFYLOENuY+ogcg|b_o3wLnMNXObtEpCp5;_a0KE0 zXhzy5*AFm+Ews4@M~Fk(A6g^6okzf6o9fXoDSBXHOwDU_xOJSbJ~-|D8C&Ir@>l0o zpdA+nK@7!X4gKy3N;OtdPR*C}hnMn4Mec$pF<>+u9FTyJg4z~5Jmv7G9vq$cY9KiA zrZIyJzv~V7$sW!I?dVI=CkfFN@t~{)0q8@gZcNi9Q~UOz&yzKUtZz2)i%du|twSiH z-Ql8i__ok0JRo&od$<-bWfS0NMlOi-IPDEx6Cp;H1jsIca{w6hVG8{MTvoTWd4I}8 zso|eX7HK2?rar(WQ1`keXgnntlgtsW=5m9{Ek>WbcUAbBRq?QqkX(irZiJLd6(`k;4=Mlkq%;s3M-38V*-S3s$d*R_6pBt6ZX^b`iig(qazTBM9C#91XP*^d(|LqR zf(eF4gV#Vf4Nk}G@2@>~#76<=yfM4<<8P=(u83r1x-*}lwTn(RLD(YyazMiii-PMJ z%2XUt+OH_jc(6MnD&I`cEW4p*#7bZd#t^G{TUVY{nsu6rsLk8Bl}xlAFx21 zs=6wlDId=qUP<%AAqJ};CJ;u(GiA_Xntw-3vAM@aXKluKy)csH!sWsRBy3>KTbDkG zyfs3y%skMhpF(#@i5M7c1XR@?CCw1_Z=J+Ydg+bie&8^LA^d!l=I^VLJh2)>l31da#Uxfgz`2x)I3p62 z)6mX*X(93=5mO!q-|8VNB;0au4p{yWd13=4v-0@yy4aba#vq*rH1Xgfx|M5WWkbjN zzScOF6O{F)Z3_C}TMxEWqkZ{czA3wkU%3U(_hElK{v!3B!keLkxN1=6V)Wjpjqpt* z8&eiu9@+phnK|jFc#14Fc>-nw#x16N*V>%0yUa%nlyFxuyCy=F@Z~`1F6!bp`I@AeZd zo+&o#rxy(vi|_~2r%;M)*#i0;n;do}MnxX#c2(k1;`yvJq4C0r9CgLx;?Koy#Z?^a z?DQPo>;o3z9A?(47AMnRDjW>9q2!YHq_(GKED*upz?@(uupHQ$C&N|-Ew^X}=^)~e z+;R{${FYIWQsfQS~WS}x{R=tZYrawRqL+lOcZvY`kOtT_kivI z&H#c$7>UxPd`ww#g+^hcOqE)dj)BI8sGzjp58r}U@)uXAv91Mw>z~%ueTG%t96>Rn zvSHO>@L}{s%3M1$Kixt_QG$>|LJLA$QK|@h*}oBl5bWYHuvsy;SVt1_62!1%+O)0T z2Rke(w&(bYK8VVMoe_JELUTBO{(ab6wX6_b^R29yScQ{>YoS8-R6tJ}%p zZNP2(N!e-D7j$AxRBqH`B1WFv=*(z}!LNfz^2PDV@k^E&Dl5!A%vnZpM)SRuytBWS zCqgDb6L(>R$T0-^d~HVe5g!&Pl_lv39jy9raTStvlNlHr^<4BMn{iq>n>!qxoVQ!m zTJ#)>TEm(r9qpX`4!3s5|7e~&^u}*-gPl6e>-No=?3hwDGBk=BL2fN>iFYnZBy>rj za2IgcCgus-=zjJjoB`7Y9yLR)X`}|ACFZ^G5kBIROggx|MU?_Br9woC;52D8t?&cR_5u&*w1s&(0s>!z_1}HYuc@PKS!NIB6+=f@Fh54b^}a>BSKOPrirt2uxN);^uQ)zB z#yh#~$6n7|qe?k{;*Lx5u6w3=04jgB{9f-9cb=~n-(nhDTj3}spuet}4TpBVkA3?i z3+oOE3Xu+JLqR^R&F;qp)^NhL3ULwRug84q@`Gf{d-m7*y+fSYec4XIAb#UnSrfB? zu{|yIy1ntE6k-9dC!(WYzqtLdTCtdzeA&1>Y-jmqJ?i%PpJ|?pz!>8gTEjOFzSmsz zUAW=6^^DF2O=erk%EE`stjV=kwF(jU5fiT`k52uQJ`rrVjf|JtwZ1eCB_@X;(}2+i zrbR9N`sb}5({x7~tQtv`-gQ>LOWAfwb_vy0H0abDHN@1|D{J)YoX3kmxgZU?AUZdV zR8@v@&qn#`vzf>28y7-Zt_0wHlTzE|K;ebl&3wcBZu<9hBrd`Axcc2Wrg8(T1_C>V zl}C?s6P>5qrc(xvbq)?*Sy%cJacgW)2Jft^{wj8DSDF{EH65FoHJvpBc{Q@My9$yj`?Z6#eT~(B~rZ zJQd1Z%bak+Bcn|4+{5>cG}G_I?#8O3bJHj1GIz4Supt&0#ss6!->O(&sXIqMOIV-p(D9wz(Z9(;^*gh@vl4U`+7W>fz||ar~7@+iM;G7JqyUdUKxBU0w>p-{C_h=|IVu_e*f`S;-6h^XKvw z+}n6ufQ!8%$s)HT#1hmp4l9bIEII%|7~tYYYQizhwzj6)!EOyfruFBheFV-Q@CzzdDje63 zi`(LTx{+k6DQzYv2cUhY;Q=rZ7yzihbCLHG06_qN`3DUEe1#zVZ(13G`d>1T06>`K zKj$v*a@z0t@A30JzoY+ELdAsw;NGt=-g9s^S)} zINv`s{l6;zr=R}>Dq6am+GvVdz9XI9Z4zK*D8RzU^dG!`msd7*va@mdE3Rg1=`8TB<{yxMWB&`q$MpBP{IBQq zPbc^X_uUHw5c!z?+oJ>!rw||q0RSO@w3x7}JH$x_j6ccz&F$oX>Gs*#nM8OjG!i2O zBEuQOlrp%gfT2M3Rkc{SMp-vVM?{KDUYES@`|$v0N9)6cliB2++0_{pQo!2#Fj9M- z(JauJ+U$7N?55mud*-KTA>|MKpGn>VQe6I^Y`Z@efbjD_5*`F1;GXP1`9Hg)h5RA? z<2R|UF{J;GW+4FrP#=XL|2^4bpl1U%KQ;}wiD8gI{Cmm<_)q>v58ieEf`+CBd_k~f zWs3bj44?*Vvi+wfA;`}V?|qjKOdpf^_#c|c{+fmS|5LL9zJ)vxppjrnOViwAkjw?< zTL@pk1zq_$7b8w^t}fGD=GG3m-l^iQ%|U^sVhrxBIC!hsvJ{q+%(! zGh~R&O--fwNLHiUG2_gW{`}+SQu_12xS-Mwjg8Se(fx3$pkw(NAarHIp^tmM+^TSE zsiRb=N<*WRd(XlmJ+->?T~cosCuI-FZ=qfMSRfdXUs*F529D%6x^`ymv3vaV#9l*3|bF+#}xP}&{AFSAFWbjG%_$2K5aSZ zAFzaZV7TEr9z9pBB<=Te;=ds30{o*-k_{>n>#?&)hpV(P50^`G66lqBU{}O{5LIbN z=7)D6U=GSp^WA-ITyJ;cnRSm935xD{l+!VpUbW1rW4GIovr;dkXuUfD$-_Y7m0*ty zlkkTbl4VX9#d?VRb#X~@e~HqR1v)LQ)VKytqj*pG?2o{_XS0JNgyQVIn{8W0YKpPfac6b#q_3$A>MHA{3p;OZ+TowEaL7a~(MG zcB~II66M;YIvh7ssugbo@ssngCLQq=zSV9+K&#HS9bwk~?5-e1K*9Aa@69Ga#}+c= zIq5E)Px4_rV(Z;A5R(Al-Gl@w`}0o$=oqK-Too#cjX827BIyZh0>pg9`_1rz{BIQ6 znL#we6%g1_P%*w0zT-Jj4q2ezV4R&!4m1@WmS~mtPmTc@k+=V^4zC#Gvqeb)F58b! zcgJ1$YoA_XqStS|kR7e^XUl(Zv1~X)~7FL+g zR(}z{e~$^_XV-Tjz&Ri6bL-t12*UdqXWYcxv&FmFIYhNeS4kUWQyH}SyVl}TdAY$j z3_-egfYb%%NM&a3VZHUl=;6YBFkz6P0#4aWP7#Oz7v7J;UgX~K!t)IZVigpq(N6V4^NHEo7J z-OJnT(OmP-w5PR(MAI5d%Q9?p7s|Z12C>OT8xW8 zrqp!zdx?I&*N+W7qVU1{+3Gh|Go2eH${;K3R`c&yy*Ffh&;ZgX5=tZ-#<;JZ3gl!# z!i1;{7<}*qs^=~ryxiCJEm-NV0xzNKe|01yZvZwe9$N)E`m z>+m}8Ad#}c)kE?6_J}p_uWwl8wHqjpCN)gp5$yl&kFbIw9^W(sMAu)~H+7E>aGM3@ z;!@3$5J>HkS){aj)|F?m=^KP%IF4-AeKLL%C{Ztnb4i(Ip{*d^uE{eSV)FB;TXoz< zQ7%)LQvjd1950RvzCKhxUkXl2PjW^T{OWL*OJ|P*@zhm2-tg$npu0>xe-bq(K_h~O zqP8m@H_U)I4bE|-F3CVCeh~S3u;|~^#LoBUAUxOsjSfrUedLYH1gt+{l-|@E@5|RI z2m-U~Ev8ptdE!4S#L~=~k7hKkQJdCNUTzI3v1&~oFO=It>CbuGi^Ao!A4J`>{)f?z$$jXE+PMff&1HT^|3T_RJT)MJVnc}ARgmkODXr1g!frkzB* z1@{-1?9qIMwaa7qvXjYJ(|0fptsMa--csI~Sd&Xm?vjvz*A!9VF`r@HxUgh_&OWMgr#^owt4mt>Mw8Zv)n^o!rbe|P zxYKc0YzgP{8R4V(GP-!d^umYyRC`FEFdoiecu=$~KDOc@%$JMn3u+yA5|UoKvcdpY z#K~cKhU1d<)?@#sIBy=KIK<66@XhBDQiru*%g38m16$7DJ7zt#`#1w@A8;mnBmR&p&tK~Vcm4j(*n1_cEt<`bwrVJ(asg7>#LY-_#D?^9W%FZ+o2M6%j)(D zxttTY0`c-R!b9vO`)Jc5mt>ZWiZoO6DEk=-_P~S=+$NnhKIPeI(*Zp+B*?XWV`Td( z=_EO#zh3<+#wRE#2ord}zSgR_0eAZGsy{1CIw7Vg%C*sNV?8eSF!I4U5abhneB+a_ zn8Wi$N&D;;SbM?Ofz&FL3=ng=(mDCm-QV%nEwx;4nKv<%kl+Y*I4#0>34nSWjj`4L ztl@j^csT1NB9zKsJE1I25onfEap4wMU!V6c}?x4d92m&et#)6Nf;f8_@D zeSn>G!1sw|y$Kkik27+(Jwyu9ilGokU5enbe5K$%&xLT@N3)9`Nu(Ryp~)H!{vJP8 z^;S|Ob!WS_bC$JAW8mE^wN7wZ`@E%qHp1`rrm61(4A%7=?w@hnRK%pphWZh`gQK?G z|JaA99r~lR^oOx?mlA?u5-OD6m_)@&llW+~R!N-l*D6e=eya9RC|dR|7ZLbc8FSia z(+5Tpj6Gq%B)2}G5+_>ZaUi$USE_aLJ)%i% zrl3F<;{C}0m!+##sgKX-H`p|{J-kZJWXq%Ik<`fXGys9b6;UG)X?jD1i@{oJK%NU= zS(>&eTo#q}LU}B%f!FMj2^JuOLswAKPz(16Ou*B++Tvn8FQr3ey=Yf2?3SdTcR6*j z{++t;vbMH4JFig`ZXRT{Fehwatab5#do_Oqaz#_bfp^G@mQiEfF z&6T3a{Ykv}kpFVxw*dB!FJm6XP8Z1MX*4EXrrI7(d0ys zy=-B~33{!r!{yx9r>Vs{MU|>m`g#KCoNM)RWY7xIO5OFlF$+A(1~>Ix@QcyrXp6zd zez53NTu|fK7s7n`-=6~O4HY?8gN#{*(Bh#rVdJ$q=cAR>bqSw;4{($D5K$t(<{H;X zhZAs=rZXd0cAY4mrcJ84*KLk|;%p7A{-DBl+`;})rb>{OZHCRS4aqa|3Au_L`y=`3 zLWTBl4-@WaDd?Dif7KxW`+Xs6dCBj#aDgIUQYBP^_cysm0dUScKw6CQm<86LRV%eP zXZsrMM&z<#&SOtpCbCd^QFlvG8kC(Gb6va^d1O5ozfP66-qY7rDW?M>F3AQe(`i+l zF4|%4v5Rk2&mDJDOu{rs*{ zhzQm#JO3au3W53ZyG8LX_bmY71M#tCyLPAWOR-bnxZF8E?-0pe@wTIhEBN{g?}ha(BwQJr*!fy(8Tb~S6PYhTC2`{bZq&$yyFYV zj`VP;CTM)hEGI7~sNJHAU=GSNTppf4Vocqb6u@qCU`U3x)US43;$8!_uq^c1IDLZR zWExdOi};Vxl+M>}Va4w}us!PRndtf877sZ>wq-?)FyZYmR@EtdnEV)6=OEOn4>*>h z2ihQI7`hm)8JtV&SD|}=iq`yFY}RYzqwDFwsiV-ffVHCF;aXW(B%z>iQl;i6H5qkP zzoMor_a;(MuWhjr$l+*gt6bESFZ(PVGLlIt4ob(R&KOl?fXeag1C|2a}89g)?jYDwpUSFv!KZvq_f)@!%s=<O_C_F508erYav86BKf-yD=^66oNb^Epb+DjCnO?5lBT6mEDG<(|@7t#-)s?$~sq$qB^3RJHu7i5g@|aR4Yf;Friu z6Q7HpZ-QfWo)N0TJSjTzC(Y246>*-@YFKag8ZPBHrblu9q9F>Oe+R7~u%23~N$@R0 zl|^_Y=~O2Y|6T~DNn-x%2nR;sgA;VX8_9g_Qc8o~=g-O&RsPbDd@3n`uG-iiyCa$c zsSkz@&f3U-2OuD(5TT~_(+Qr9C>x4P1j23ognpfChMeLzQqnn5i3kWV7TjWx*# zM*{VtniNsPvh|>XdJ@TY2Qo~kv7iMiqpmj3HCT_=ehue0mU-kU*S=%y{6i6dtiK2p zI;6^62wjJ!$zkre5U)>t0aSRM&5dW7v0gm7=|&OM@s%fVzD#wDOZk|~f}%+to^fhI zXax}y&%)eLu}D-0u>yk1Ymr{xW-)3Q?cV4LD{Z<#$=lVP8In}C_BWo36?R3QLxx@3 zO(n>mG6_}ayHwS zpC;}1WAU{8E2eRL@Vo=Qtn#p^2cO+ucSxEqAFcBp@+8#Ni&5Jj!N-ordY$q5YiUSk zITwMm?~5)Uxgh4m56BG72)%Ou94+?}#KsIpf}+Hknh(5}3(w!eC?!`m8?pL#t;T>TSPNw)X!pwZ%bmfw^7gVn^)@08kPKkp8X zcH77Eu0C4NWggkzb!ntZeI#<(X*aSvC_jy{VyVP(EQLd6F@-7CHUqr!%1IjYqG~l? zOr^)ZmRP1P-5ZKxi2_#4k7P@vp07#BI9kAT7%_j&nYpk>*V;I8E)+=WyDaP{Y1!cI>X6EpV;S4mF%D zl=IvWsB2pM#nM+lMtgj-`u1cnT(tc;Wk7nqRBbo@5>swyx=osr7|=M&S=#2(QvDeX zTFDEP2YyS?FU?UO0rQ+}1nHwc7mfb{2AT8yIKT^my(7Nc9h-eT1{Hy81)SS9qs?)N z1;?V9R5HYBAneEhflJ@XJ^oTz%MS_I-iXsSSvxGwY!}WP`5A7-{(h zfNW7K(6X*Wow&tnX6 z#Y+lsS#UMWK!g;?;8ROuFQ&7goWjWgit%!(9b@3l35L7P0vF2`geZ^E#x#r$`Q|@H zFnzwhK$jIFbU4U{Sg`BLhYGGNwkD_UzqdL1qm`7LC|&hr0ZX186}F3fbG(qm$djrq z3?jHCU8-7a)*a>5d7}6<*6DUvIa3RB)E`%yui<9h*@frT@aJGg3A9j(Zw_DI?bFgw z#H`oq-0(VdG;eKkr8;k=!qA$Th6A3EG{7TYH1N#Cns31)z_RGI@5Eu!&jl_KVGdEC zGΜ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 diff --git a/docs/en/Tutorials/images/generated-proxies-2.png b/docs/en/Tutorials/images/generated-proxies-2.png new file mode 100644 index 0000000000000000000000000000000000000000..adad417c3d98ef1ace1f5367ca8e8e977a64f97c GIT binary patch literal 33917 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 Date: Mon, 6 Jul 2020 16:47:17 +0300 Subject: [PATCH 035/137] Update Part-2.md --- docs/en/Tutorials/Part-2.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/Tutorials/Part-2.md b/docs/en/Tutorials/Part-2.md index b88a194852..892847ca49 100644 --- a/docs/en/Tutorials/Part-2.md +++ b/docs/en/Tutorials/Part-2.md @@ -538,7 +538,7 @@ Open the `/src/app/book/book.component.html` and replace the content as below: - {%{{{ booksType[row.type] }}}%} + {%{{{ '::Enum:BookType:' + row.type | abpLocalization }}}%} From 7290e881f52d5287360b7a26402e1a9c45210b34 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Mon, 6 Jul 2020 17:12:04 +0300 Subject: [PATCH 036/137] fix: add ar locale to webpackInclude comment resolves #4643 --- npm/ng-packs/packages/core/src/lib/utils/initial-utils.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/npm/ng-packs/packages/core/src/lib/utils/initial-utils.ts b/npm/ng-packs/packages/core/src/lib/utils/initial-utils.ts index e8e62ef057..bfca50bcd2 100644 --- a/npm/ng-packs/packages/core/src/lib/utils/initial-utils.ts +++ b/npm/ng-packs/packages/core/src/lib/utils/initial-utils.ts @@ -58,7 +58,8 @@ export function localeInitializer(injector: Injector) { export function registerLocale(locale: string) { return import( - /* webpackInclude: /(af|am|ar-SA|as|az-Latn|be|bg|bn-BD|bn-IN|bs|ca|ca-ES-VALENCIA|cs|cy|da|de|de|el|en-GB|en|es|en|es-US|es-MX|et|eu|fa|fi|en|fr|fr|fr-CA|ga|gd|gl|gu|ha|he|hi|hr|hu|hy|id|ig|is|it|it|ja|ka|kk|km|kn|ko|kok|en|en|lb|lt|lv|en|mk|ml|mn|mr|ms|mt|nb|ne|nl|nl-BE|nn|en|or|pa|pa-Arab|pl|en|pt|pt-PT|en|en|ro|ru|rw|pa-Arab|si|sk|sl|sq|sr-Cyrl-BA|sr-Cyrl|sr-Latn|sv|sw|ta|te|tg|th|ti|tk|tn|tr|tt|ug|uk|ur|uz-Latn|vi|wo|xh|yo|zh-Hans|zh-Hant|zu)\.js$/ */ + /* webpackInclude: /(af|ar|am|ar-SA|as|az-Latn|be|bg|bn-BD|bn-IN|bs|ca|ca-ES-VALENCIA|cs|cy|da|de|de|el|en-GB|en|es|en|es-US|es-MX|et|eu|fa|fi|en|fr|fr|fr-CA|ga|gd|gl|gu|ha|he|hi|hr|hu|hy|id|ig|is|it|it|ja|ka|kk|km|kn|ko|kok|en|en|lb|lt|lv|en|mk|ml|mn|mr|ms|mt|nb|ne|nl|nl-BE|nn|en|or|pa|pa-Arab|pl|en|pt|pt-PT|en|en|ro|ru|rw|pa-Arab|si|sk|sl|sq|sr-Cyrl-BA|sr-Cyrl|sr-Latn|sv|sw|ta|te|tg|th|ti|tk|tn|tr|tt|ug|uk|ur|uz-Latn|vi|wo|xh|yo|zh-Hans|zh-Hant|zu)\.js$/ */ + /* webpackChunkName: "[request]"*/ `@angular/common/locales/${differentLocales[locale] || locale}.js` ).then(module => { registerLocaleData(module.default); From b84eaa5141e1e4c7b3d8939e8f6c9afbfde97146 Mon Sep 17 00:00:00 2001 From: Galip Tolga Erdem Date: Mon, 6 Jul 2020 17:15:01 +0300 Subject: [PATCH 037/137] Fixed not found script and style tags error when logging out --- .../src/Volo.Abp.Account.Web/Pages/Account/LoggedOut.cshtml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/LoggedOut.cshtml b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/LoggedOut.cshtml index 0e7b14236a..fdea548c76 100644 --- a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/LoggedOut.cshtml +++ b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/LoggedOut.cshtml @@ -3,8 +3,12 @@ @using Volo.Abp.Account.Localization @using Microsoft.AspNetCore.Mvc.Localization @using Volo.Abp.Account.Web.Pages.Account +@using Volo.Abp.AspNetCore.Mvc.UI.Theming +@inject IThemeManager ThemeManager @inject IHtmlLocalizer L - +@{ + Layout = ThemeManager.CurrentTheme.GetApplicationLayout(); +} @section scripts { From 083de0c1af4a2b5a856a694d498626edcddf0405 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Mon, 6 Jul 2020 17:30:04 +0300 Subject: [PATCH 038/137] Update Part-3.md --- docs/en/Tutorials/Part-3.md | 67 ++++++++++++++----------------------- 1 file changed, 25 insertions(+), 42 deletions(-) diff --git a/docs/en/Tutorials/Part-3.md b/docs/en/Tutorials/Part-3.md index 2890db181b..d7df0a8568 100644 --- a/docs/en/Tutorials/Part-3.md +++ b/docs/en/Tutorials/Part-3.md @@ -632,32 +632,32 @@ You can run the application and try to delete a book. {{if UI == "NG"}} -## Creating a new book +## Creating a New Book In this section, you will learn how to create a new modal dialog form to create a new book. -### Add a modal to BookListComponent +### BookComponent -Open `book-list.component.ts` file in `app\book\book-list` folder and replace the content as below: +Open `/src/app/book/book.component.ts` and replace the content as below: ```js import { ListService, PagedResultDto } from '@abp/ng.core'; import { Component, OnInit } from '@angular/core'; -import { BookDto, BookType } from '../models'; -import { BookService } from '../services'; +import { BookDto, BookType } from './models'; +import { BookService } from './services'; @Component({ - selector: 'app-book-list', - templateUrl: './book-list.component.html', - styleUrls: ['./book-list.component.scss'], + selector: 'app-book', + templateUrl: './book.component.html', + styleUrls: ['./book.component.scss'], providers: [ListService], }) -export class BookListComponent implements OnInit { +export class BookComponent implements OnInit { book = { items: [], totalCount: 0 } as PagedResultDto; booksType = BookType; - isModalOpen = false; // <== added this line ==> + isModalOpen = false; // add this line constructor(public readonly list: ListService, private bookService: BookService) {} @@ -669,18 +669,17 @@ export class BookListComponent implements OnInit { }); } - // added createBook method + // add new method createBook() { this.isModalOpen = true; } } ``` -* We defined a variable called `isModalOpen` and `createBook` method. -* We added the `createBook` method. +* We defined a property called `isModalOpen` and a method called `createBook`. -Open `book-list.component.html` file in `books\book-list` folder and replace the content as below: +Open `/src/app/book/book.component.html` and make the following changes: ```html
@@ -688,41 +687,26 @@ Open `book-list.component.html` file in `books\book-list` folder and replace the
{%{{{ '::Menu:Books' | abpLocalization }}}%}
-
- +
+ +
+
- - - - - {%{{{ booksType[row.type] }}}%} - - - - - {%{{{ row.publishDate | date }}}%} - - - - - {%{{{ row.price | currency }}}%} - - - +
- +

{%{{{ '::NewBook' | abpLocalization }}}%}

@@ -738,26 +722,25 @@ Open `book-list.component.html` file in `books\book-list` folder and replace the
``` -* We added the `abp-modal` which renders a modal to allow user to create a new book. -* `abp-modal` is a pre-built component to show modals. While you could use another approach to show a modal, `abp-modal` provides additional benefits. -* We added `New book` button to the `AbpContentToolbar`. +* Added `New book` button to the card header.. +* Added the `abp-modal` which renders a modal to allow user to create a new book. `abp-modal` is a pre-built component to show modals. While you could use another approach to show a modal, `abp-modal` provides additional benefits. You can open your browser and click **New book** button to see the new modal. ![Empty modal for new book](./images/bookstore-empty-new-book-modal.png) -### Create a reactive form +### Create a Reactive Form [Reactive forms](https://angular.io/guide/reactive-forms) provide a model-driven approach to handling form inputs whose values change over time. -Open `book-list.component.ts` file in `app\book\book-list` folder and replace the content as below: +Open `/src/app/book/book.component.ts` and replace the content as below: ```js import { ListService, PagedResultDto } from '@abp/ng.core'; import { Component, OnInit } from '@angular/core'; import { BookDto, BookType } from '../models'; import { BookService } from '../services'; -import { FormGroup, FormBuilder, Validators } from '@angular/forms'; // <== added this line ==> +import { FormGroup, FormBuilder, Validators } from '@angular/forms'; // <== added this @Component({ selector: 'app-book-list', @@ -789,7 +772,7 @@ export class BookListComponent implements OnInit { } createBook() { - this.buildForm(); // <== added this line ==> + this.buildForm(); // <== added this line this.isModalOpen = true; } From 9be83bd7e14d566b97bed0c75d22207832288919 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Mon, 6 Jul 2020 18:08:30 +0300 Subject: [PATCH 039/137] Completed adding new book. --- docs/en/Tutorials/Part-3.md | 236 +++++++++++++----------------------- 1 file changed, 83 insertions(+), 153 deletions(-) diff --git a/docs/en/Tutorials/Part-3.md b/docs/en/Tutorials/Part-3.md index d7df0a8568..247dc8ce18 100644 --- a/docs/en/Tutorials/Part-3.md +++ b/docs/en/Tutorials/Part-3.md @@ -738,29 +738,34 @@ Open `/src/app/book/book.component.ts` and replace the content as below: ```js import { ListService, PagedResultDto } from '@abp/ng.core'; import { Component, OnInit } from '@angular/core'; -import { BookDto, BookType } from '../models'; -import { BookService } from '../services'; -import { FormGroup, FormBuilder, Validators } from '@angular/forms'; // <== added this +import { BookDto, BookType } from './models'; +import { BookService } from './services'; +import { FormGroup, FormBuilder, Validators } from '@angular/forms'; // add this @Component({ - selector: 'app-book-list', - templateUrl: './book-list.component.html', - styleUrls: ['./book-list.component.scss'], + selector: 'app-book', + templateUrl: './book.component.html', + styleUrls: ['./book.component.scss'], providers: [ListService], }) -export class BookListComponent implements OnInit { +export class BookComponent implements OnInit { book = { items: [], totalCount: 0 } as PagedResultDto; booksType = BookType; - isModalOpen = false; + form: FormGroup; // add this line + + // add bookTypes as a list of enum members + bookTypes = Object.keys(BookType).filter( + (bookType) => typeof this.booksType[bookType] === 'number' + ); - form: FormGroup; // <== added this line ==> + isModalOpen = false; constructor( public readonly list: ListService, private bookService: BookService, - private fb: FormBuilder // <== injected FormBuilder ==> + private fb: FormBuilder // inject FormBuilder ) {} ngOnInit() { @@ -772,11 +777,11 @@ export class BookListComponent implements OnInit { } createBook() { - this.buildForm(); // <== added this line + this.buildForm(); // add this line this.isModalOpen = true; } - // added buildForm method + // add buildForm method buildForm() { this.form = this.fb.group({ name: ['', Validators.required], @@ -785,23 +790,34 @@ export class BookListComponent implements OnInit { price: [null, Validators.required], }); } + + // add save method + save() { + if (this.form.invalid) { + return; + } + + this.bookService.createByInput(this.form.value).subscribe(() => { + this.isModalOpen = false; + this.form.reset(); + this.list.get(); + }); + } } ``` -* We imported `FormGroup, FormBuilder and Validators`. -* We added `form: FormGroup` variable. -* We injected `fb: FormBuilder` service to the constructor. The [FormBuilder](https://angular.io/api/forms/FormBuilder) service provides convenient methods for generating controls. It reduces the amount of boilerplate needed to build complex forms. -* We added `buildForm` method to the end of the file and executed `buildForm()` in the `createBook` method. This method creates a reactive form to be able to create a new book. - * The `group` method of `FormBuilder`, `fb` creates a `FormGroup`. - * Added `Validators.required` static method which validates the relevant form element. - -### Create the DOM elements of the form +* Imported `FormGroup`, `FormBuilder` and `Validators` from `@angular/forms`. +* Added `form: FormGroup` property. +* Add `bookTypes` as a list of `BookType` enum members. +* Injected `FormBuilder` into the constructor. [FormBuilder](https://angular.io/api/forms/FormBuilder) provides convenient methods for generating form controls. It reduces the amount of boilerplate needed to build complex forms. +* Added `buildForm` method to the end of the file and executed the `buildForm()` in the `createBook` method. +* Added `save` method. -Open `book-list.component.html` in `app\books\book-list` folder and replace ` ` with the following code part: +Open `/src/app/book/book.component.html` and replace ` ` with the following code part: ```html - +
* @@ -835,143 +851,83 @@ Open `book-list.component.html` in `app\books\book-list` folder and replace ` ``` -- This template creates a form with `Name`, `Price`, `Type` and `Publish` date fields. -- We've used [NgBootstrap datepicker](https://ng-bootstrap.github.io/#/components/datepicker/overview) in this component. +Also replace ` ` with the following code part: + +````html + + + + + + +```` + +### Datepicker -### Datepicker requirements +We've used [NgBootstrap datepicker](https://ng-bootstrap.github.io/#/components/datepicker/overview) in this component. So, need to arrange dependencies related to this component. -Open `book.module.ts` file in `app\book` folder and replace the content as below: +Open `/src/app/book/book.module.ts` and replace the content as below: ```js import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { BookRoutingModule } from './book-routing.module'; -import { BookListComponent } from './book-list/book-list.component'; import { SharedModule } from '../shared/shared.module'; -import { NgbDatepickerModule } from '@ng-bootstrap/ng-bootstrap'; //<== added this line ==> +import { BookRoutingModule } from './book-routing.module'; +import { BookComponent } from './book.component'; +import { NgbDatepickerModule } from '@ng-bootstrap/ng-bootstrap'; // add this line @NgModule({ - declarations: [BookListComponent], + declarations: [BookComponent], imports: [ - CommonModule, BookRoutingModule, SharedModule, - NgbDatepickerModule, //<== added this line ==> - ], + NgbDatepickerModule, // add this line + ] }) -export class BookModule {} +export class BookModule { } ``` * We imported `NgbDatepickerModule` to be able to use the date picker. -Open `book-list.component.ts` file in `app\book\book-list` folder and replace the content as below: +Open `/src/app/book/book.component.ts` and replace the content as below: ```js import { ListService, PagedResultDto } from '@abp/ng.core'; import { Component, OnInit } from '@angular/core'; -import { BookDto, BookType } from '../models'; -import { BookService } from '../services'; +import { BookDto, BookType } from './models'; +import { BookService } from './services'; import { FormGroup, FormBuilder, Validators } from '@angular/forms'; -import { NgbDateNativeAdapter, NgbDateAdapter } from '@ng-bootstrap/ng-bootstrap'; // <== added this line ==> - -@Component({ - selector: 'app-book-list', - templateUrl: './book-list.component.html', - styleUrls: ['./book-list.component.scss'], - providers: [ListService, { provide: NgbDateAdapter, useClass: NgbDateNativeAdapter }], // <== added a provide ==> -}) -export class BookListComponent implements OnInit { - book = { items: [], totalCount: 0 } as PagedResultDto; - - booksType = BookType; - - // <== added bookTypeArr array ==> - bookTypeArr = Object.keys(BookType).filter( - (bookType) => typeof this.booksType[bookType] === 'number' - ); - - isModalOpen = false; - form: FormGroup; - - constructor( - public readonly list: ListService, - private bookService: BookService, - private fb: FormBuilder - ) {} - - ngOnInit() { - const bookStreamCreator = (query) => this.bookService.getListByInput(query); - - this.list.hookToQuery(bookStreamCreator).subscribe((response) => { - this.book = response; - }); - } - - createBook() { - this.buildForm(); - this.isModalOpen = true; - } - - buildForm() { - this.form = this.fb.group({ - name: ['', Validators.required], - type: [null, Validators.required], - publishDate: [null, Validators.required], - price: [null, Validators.required], - }); - } -} -``` - -* We imported ` NgbDateNativeAdapter, NgbDateAdapter` - -* We added a new provider `NgbDateAdapter` that converts Datepicker value to `Date` type. See the [datepicker adapters](https://ng-bootstrap.github.io/#/components/datepicker/overview) for more details. - -* We added `bookTypeArr` array to be able to use it in the combobox values. The `bookTypeArr` contains the fields of the `BookType` enum. Resulting array is shown below: - - ```js - ['Adventure', 'Biography', 'Dystopia', 'Fantastic' ...] - ``` - - This array was used in the previous form template in the `ngFor` loop. - -Now, you can open your browser to see the changes: - - -![New book modal](./images/bookstore-new-book-form.png) - -### Saving the book - -Open `book-list.component.ts` file in `app\book\book-list` folder and replace the content as below: - -```js -import { ListService, PagedResultDto } from '@abp/ng.core'; -import { Component, OnInit } from '@angular/core'; -import { BookDto, BookType } from '../models'; -import { BookService } from '../services'; -import { FormGroup, FormBuilder, Validators } from '@angular/forms'; +// added this line import { NgbDateNativeAdapter, NgbDateAdapter } from '@ng-bootstrap/ng-bootstrap'; @Component({ - selector: 'app-book-list', - templateUrl: './book-list.component.html', - styleUrls: ['./book-list.component.scss'], - providers: [ListService, { provide: NgbDateAdapter, useClass: NgbDateNativeAdapter }], + selector: 'app-book', + templateUrl: './book.component.html', + styleUrls: ['./book.component.scss'], + providers: [ + ListService, + { provide: NgbDateAdapter, useClass: NgbDateNativeAdapter } // add this line + ], }) -export class BookListComponent implements OnInit { +export class BookComponent implements OnInit { book = { items: [], totalCount: 0 } as PagedResultDto; booksType = BookType; - bookTypeArr = Object.keys(BookType).filter( + form: FormGroup; + + // <== added bookTypeArr array ==> + bookTypes = Object.keys(BookType).filter( (bookType) => typeof this.booksType[bookType] === 'number' ); isModalOpen = false; - form: FormGroup; - constructor( public readonly list: ListService, private bookService: BookService, @@ -1000,7 +956,6 @@ export class BookListComponent implements OnInit { }); } - // <== added save ==> save() { if (this.form.invalid) { return; @@ -1015,35 +970,10 @@ export class BookListComponent implements OnInit { } ``` -* We added `save` method - -Open `book-list.component.html` in `app\book\book-list` folder, find the `` element and replace this element with the following to create a new book. - -```html - - - - - - -``` - -Find the `` tag and replace below content: - -```html - -``` - - -* We added the `(ngSubmit)="save()"` to `` element to save a new book by pressing the enter. -* We added `abp-button` to the bottom area of the modal to save a new book. +* Imported ` NgbDateNativeAdapter` and `NgbDateAdapter`. +* We added a new provider `NgbDateAdapter` that converts Datepicker value to `Date` type. See the [datepicker adapters](https://ng-bootstrap.github.io/#/components/datepicker/overview) for more details. -The final modal UI looks like below: +Now, you can open your browser to see the changes: ![Save button to the modal](./images/bookstore-new-book-form-v2.png) From a4869cc0f9cd71d18b917f0ca25cf1d2961a68fd Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Mon, 6 Jul 2020 23:39:39 +0300 Subject: [PATCH 040/137] refactor: place abp-dynamic-layout to the app.component --- npm/ng-packs/apps/dev-app/src/app/app.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/npm/ng-packs/apps/dev-app/src/app/app.component.ts b/npm/ng-packs/apps/dev-app/src/app/app.component.ts index bf2a27962a..a26e745334 100644 --- a/npm/ng-packs/apps/dev-app/src/app/app.component.ts +++ b/npm/ng-packs/apps/dev-app/src/app/app.component.ts @@ -4,7 +4,7 @@ import { Component } from '@angular/core'; selector: 'app-root', template: ` - + `, }) export class AppComponent {} From d904e8df6cee346a911ed12710364f31c30452a6 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Mon, 6 Jul 2020 23:40:00 +0300 Subject: [PATCH 041/137] refactor: remove DynamicLayoutComponent from app-routing.module --- .../dev-app/src/app/app-routing.module.ts | 48 ++++++++----------- 1 file changed, 21 insertions(+), 27 deletions(-) diff --git a/npm/ng-packs/apps/dev-app/src/app/app-routing.module.ts b/npm/ng-packs/apps/dev-app/src/app/app-routing.module.ts index 8f6973079d..6394c6dd1b 100644 --- a/npm/ng-packs/apps/dev-app/src/app/app-routing.module.ts +++ b/npm/ng-packs/apps/dev-app/src/app/app-routing.module.ts @@ -5,33 +5,27 @@ import { RouterModule, Routes } from '@angular/router'; const routes: Routes = [ { path: '', - component: DynamicLayoutComponent, - children: [ - { - path: '', - pathMatch: 'full', - loadChildren: () => import('./home/home.module').then(m => m.HomeModule), - }, - { - path: 'account', - loadChildren: () => - import('@abp/ng.account').then(m => m.AccountModule.forLazy({ redirectUrl: '/' })), - }, - { - path: 'identity', - loadChildren: () => import('@abp/ng.identity').then(m => m.IdentityModule.forLazy()), - }, - { - path: 'tenant-management', - loadChildren: () => - import('@abp/ng.tenant-management').then(m => m.TenantManagementModule.forLazy()), - }, - { - path: 'setting-management', - loadChildren: () => - import('@abp/ng.setting-management').then(m => m.SettingManagementModule.forLazy()), - }, - ], + pathMatch: 'full', + loadChildren: () => import('./home/home.module').then(m => m.HomeModule), + }, + { + path: 'account', + loadChildren: () => + import('@abp/ng.account').then(m => m.AccountModule.forLazy({ redirectUrl: '/' })), + }, + { + path: 'identity', + loadChildren: () => import('@abp/ng.identity').then(m => m.IdentityModule.forLazy()), + }, + { + path: 'tenant-management', + loadChildren: () => + import('@abp/ng.tenant-management').then(m => m.TenantManagementModule.forLazy()), + }, + { + path: 'setting-management', + loadChildren: () => + import('@abp/ng.setting-management').then(m => m.SettingManagementModule.forLazy()), }, ]; From aac30ceeca1dd9f12a6a3efd164be54cb09e83fa Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Mon, 6 Jul 2020 23:57:16 +0300 Subject: [PATCH 042/137] chore: organize imports --- npm/ng-packs/apps/dev-app/src/app/app-routing.module.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/npm/ng-packs/apps/dev-app/src/app/app-routing.module.ts b/npm/ng-packs/apps/dev-app/src/app/app-routing.module.ts index 6394c6dd1b..5bfedf645b 100644 --- a/npm/ng-packs/apps/dev-app/src/app/app-routing.module.ts +++ b/npm/ng-packs/apps/dev-app/src/app/app-routing.module.ts @@ -1,4 +1,3 @@ -import { ABP, DynamicLayoutComponent } from '@abp/ng.core'; import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; From 06c148ad210d794aad4436735a3b64dbbc938849 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Mon, 6 Jul 2020 23:57:40 +0300 Subject: [PATCH 043/137] docs: update the v2.9 to v3.0 Angular UI Migration Guide --- docs/en/UI/Angular/Migration-Guide-v3.md | 71 +++++++++++++----------- 1 file changed, 39 insertions(+), 32 deletions(-) diff --git a/docs/en/UI/Angular/Migration-Guide-v3.md b/docs/en/UI/Angular/Migration-Guide-v3.md index 987632571a..6c56536065 100644 --- a/docs/en/UI/Angular/Migration-Guide-v3.md +++ b/docs/en/UI/Angular/Migration-Guide-v3.md @@ -145,42 +145,33 @@ export class AppModule {} AppRoutingModule: ```js -import { DynamicLayoutComponent } from '@abp/ng.core'; import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; const routes: Routes = [ { path: '', - component: DynamicLayoutComponent, - children: [ - { - path: '', - pathMatch: 'full', - loadChildren: () => import('./home/home.module') - .then(m => m.HomeModule), - }, - { - path: 'account', - loadChildren: () => import('@abp/ng.account') - .then(m => m.AccountModule.forLazy({ redirectUrl: '/' })), - }, - { - path: 'identity', - loadChildren: () => import('@abp/ng.identity') - .then(m => m.IdentityModule.forLazy()), - }, - { - path: 'tenant-management', - loadChildren: () => import('@abp/ng.tenant-management') - .then(m => m.TenantManagementModule.forLazy()), - }, - { - path: 'setting-management', - loadChildren: () => import('@abp/ng.setting-management') - .then(m => m.SettingManagementModule.forLazy()), - }, - ], + pathMatch: 'full', + loadChildren: () => import('./home/home.module').then(m => m.HomeModule), + }, + { + path: 'account', + loadChildren: () => + import('@abp/ng.account').then(m => m.AccountModule.forLazy({ redirectUrl: '/' })), + }, + { + path: 'identity', + loadChildren: () => import('@abp/ng.identity').then(m => m.IdentityModule.forLazy()), + }, + { + path: 'tenant-management', + loadChildren: () => + import('@abp/ng.tenant-management').then(m => m.TenantManagementModule.forLazy()), + }, + { + path: 'setting-management', + loadChildren: () => + import('@abp/ng.setting-management').then(m => m.SettingManagementModule.forLazy()), }, ]; @@ -191,7 +182,23 @@ const routes: Routes = [ export class AppRoutingModule {} ``` -> You may have noticed that we used `DynamicLayoutComponent` at top level route component. We made this change in order to avoid unnecessary renders and flickering. It is not mandatory, but we recommend doing the same in your app routing. +AppComponent: + +```js +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-root', + template: ` + + + `, +}) +export class AppComponent {} +``` + + +> You may have noticed that we used `` instead of `` in the AppComponent template. We made this change in order to avoid unnecessary renders and flickering. It is not mandatory, but we recommend doing the same in your AppComponent. #### What to Do When Migrating? @@ -201,7 +208,7 @@ export class AppRoutingModule {} - Call static `forRoot` method of `ThemeBasicModule` (or `ThemeLeptonModule` if commercial) and remove `SharedModule` from imports (unless you have added anything that is necessary for your root module in it). - Import lazy ABP modules directly in app routing module (e.g. `() => import('@abp/ng.identity').then(...)`). - Call static `forLazy` method of all lazy modules inside `then`, even if a configuration is not passed. -- [OPTIONAL] Add an empty parent route with `DynamicLayoutComponent` for better performance and UX. +- [OPTIONAL] Add the `` to the AppComponent template and remove the `` for better performance and UX. ### RoutesService From 250b7b845a298877fde9fd0ae714045ee49cede5 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Tue, 7 Jul 2020 00:04:33 +0300 Subject: [PATCH 044/137] refactor(module-template): add dynamic layout to app.component --- .../dev-app/src/app/app-routing.module.ts | 78 +++++++++---------- .../projects/dev-app/src/app/app.component.ts | 2 +- 2 files changed, 36 insertions(+), 44 deletions(-) diff --git a/templates/module/angular/projects/dev-app/src/app/app-routing.module.ts b/templates/module/angular/projects/dev-app/src/app/app-routing.module.ts index 47b7ce8ecd..759fad9ebc 100644 --- a/templates/module/angular/projects/dev-app/src/app/app-routing.module.ts +++ b/templates/module/angular/projects/dev-app/src/app/app-routing.module.ts @@ -1,52 +1,44 @@ -import { ABP, DynamicLayoutComponent } from '@abp/ng.core'; import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; const routes: Routes = [ { path: '', - component: DynamicLayoutComponent, - children: [ - { - path: '', - pathMatch: 'full', - loadChildren: () => - import('./home/home.module').then((m) => m.HomeModule), - }, - { - path: 'account', - loadChildren: () => - import('@abp/ng.account').then((m) => - m.AccountModule.forLazy({ redirectUrl: '/' }) - ), - }, - { - path: 'identity', - loadChildren: () => - import('@abp/ng.identity').then((m) => m.IdentityModule.forLazy()), - }, - { - path: 'tenant-management', - loadChildren: () => - import('@abp/ng.tenant-management').then((m) => - m.TenantManagementModule.forLazy() - ), - }, - { - path: 'setting-management', - loadChildren: () => - import('@abp/ng.setting-management').then((m) => - m.SettingManagementModule.forLazy() - ), - }, - { - path: 'my-project-name', - loadChildren: () => - import('@my-company-name/my-project-name').then((m) => - m.MyProjectNameModule.forLazy() - ), - }, - ], + pathMatch: 'full', + loadChildren: () => import('./home/home.module').then((m) => m.HomeModule), + }, + { + path: 'account', + loadChildren: () => + import('@abp/ng.account').then((m) => + m.AccountModule.forLazy({ redirectUrl: '/' }) + ), + }, + { + path: 'identity', + loadChildren: () => + import('@abp/ng.identity').then((m) => m.IdentityModule.forLazy()), + }, + { + path: 'tenant-management', + loadChildren: () => + import('@abp/ng.tenant-management').then((m) => + m.TenantManagementModule.forLazy() + ), + }, + { + path: 'setting-management', + loadChildren: () => + import('@abp/ng.setting-management').then((m) => + m.SettingManagementModule.forLazy() + ), + }, + { + path: 'my-project-name', + loadChildren: () => + import('@my-company-name/my-project-name').then((m) => + m.MyProjectNameModule.forLazy() + ), }, ]; diff --git a/templates/module/angular/projects/dev-app/src/app/app.component.ts b/templates/module/angular/projects/dev-app/src/app/app.component.ts index bf2a27962a..a26e745334 100644 --- a/templates/module/angular/projects/dev-app/src/app/app.component.ts +++ b/templates/module/angular/projects/dev-app/src/app/app.component.ts @@ -4,7 +4,7 @@ import { Component } from '@angular/core'; selector: 'app-root', template: ` - + `, }) export class AppComponent {} From 27d1f11b964570262cd39e6c84d1b83e4da30bda Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Tue, 7 Jul 2020 00:05:35 +0300 Subject: [PATCH 045/137] refactor: define DynamicLayoutComponent as root component --- .../src/lib/my-project-name-routing.module.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/templates/module/angular/projects/my-project-name/src/lib/my-project-name-routing.module.ts b/templates/module/angular/projects/my-project-name/src/lib/my-project-name-routing.module.ts index e698be1973..75934a9b70 100644 --- a/templates/module/angular/projects/my-project-name/src/lib/my-project-name-routing.module.ts +++ b/templates/module/angular/projects/my-project-name/src/lib/my-project-name-routing.module.ts @@ -7,7 +7,13 @@ const routes: Routes = [ { path: '', pathMatch: 'full', - component: MyProjectNameComponent, + component: DynamicLayoutComponent, + children: [ + { + path: '', + component: MyProjectNameComponent, + }, + ], }, ]; From a9695fac6c3a677d891131b5dad0b0b0398a6445 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Tue, 7 Jul 2020 00:12:32 +0300 Subject: [PATCH 046/137] refactor(module-template): add dynamic layout to app.component --- .../app/angular/src/app/app-routing.module.ts | 49 ++++++++----------- .../app/angular/src/app/app.component.ts | 2 +- 2 files changed, 22 insertions(+), 29 deletions(-) diff --git a/templates/app/angular/src/app/app-routing.module.ts b/templates/app/angular/src/app/app-routing.module.ts index 793703a3ad..7e731d1f47 100644 --- a/templates/app/angular/src/app/app-routing.module.ts +++ b/templates/app/angular/src/app/app-routing.module.ts @@ -1,37 +1,30 @@ -import { ABP, DynamicLayoutComponent } from '@abp/ng.core'; import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; const routes: Routes = [ { path: '', - component: DynamicLayoutComponent, - children: [ - { - path: '', - pathMatch: 'full', - loadChildren: () => import('./home/home.module').then((m) => m.HomeModule), - }, - { - path: 'account', - loadChildren: () => - import('@abp/ng.account').then((m) => m.AccountModule.forLazy({ redirectUrl: '/' })), - }, - { - path: 'identity', - loadChildren: () => import('@abp/ng.identity').then((m) => m.IdentityModule.forLazy()), - }, - { - path: 'tenant-management', - loadChildren: () => - import('@abp/ng.tenant-management').then((m) => m.TenantManagementModule.forLazy()), - }, - { - path: 'setting-management', - loadChildren: () => - import('@abp/ng.setting-management').then((m) => m.SettingManagementModule.forLazy()), - }, - ], + pathMatch: 'full', + loadChildren: () => import('./home/home.module').then((m) => m.HomeModule), + }, + { + path: 'account', + loadChildren: () => + import('@abp/ng.account').then((m) => m.AccountModule.forLazy({ redirectUrl: '/' })), + }, + { + path: 'identity', + loadChildren: () => import('@abp/ng.identity').then((m) => m.IdentityModule.forLazy()), + }, + { + path: 'tenant-management', + loadChildren: () => + import('@abp/ng.tenant-management').then((m) => m.TenantManagementModule.forLazy()), + }, + { + path: 'setting-management', + loadChildren: () => + import('@abp/ng.setting-management').then((m) => m.SettingManagementModule.forLazy()), }, ]; diff --git a/templates/app/angular/src/app/app.component.ts b/templates/app/angular/src/app/app.component.ts index bf2a27962a..a26e745334 100644 --- a/templates/app/angular/src/app/app.component.ts +++ b/templates/app/angular/src/app/app.component.ts @@ -4,7 +4,7 @@ import { Component } from '@angular/core'; selector: 'app-root', template: ` - + `, }) export class AppComponent {} From 5d599066359c6214f31c714278b10cbe184a876d Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Tue, 7 Jul 2020 00:51:45 +0300 Subject: [PATCH 047/137] chore: remove a blank line --- templates/app/angular/angular.json | 1 - 1 file changed, 1 deletion(-) diff --git a/templates/app/angular/angular.json b/templates/app/angular/angular.json index 09eb7f4cc7..e3c0dbb2c3 100644 --- a/templates/app/angular/angular.json +++ b/templates/app/angular/angular.json @@ -51,7 +51,6 @@ "inject": true, "bundleName": "ngx-datatable-material" }, - { "input": "node_modules/@abp/ng.theme.shared/styles/bootstrap-rtl.min.css", "inject": false, From 6f62b277d3f79a5425bc93b5a80c0e025226807f Mon Sep 17 00:00:00 2001 From: htlsmile Date: Tue, 7 Jul 2020 11:44:38 +0800 Subject: [PATCH 048/137] Update docs-nav.json Fixing translation errors --- docs/zh-Hans/docs-nav.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/zh-Hans/docs-nav.json b/docs/zh-Hans/docs-nav.json index 66229da6da..732acc8806 100644 --- a/docs/zh-Hans/docs-nav.json +++ b/docs/zh-Hans/docs-nav.json @@ -34,7 +34,7 @@ "path": "Tutorials/Part-1.md" }, { - "text": "第一章: 增删改查操作", + "text": "第二章: 增删改查操作", "path": "Tutorials/Part-2.md" }, { From d62ee8ff8d568472784f69041387d99af7a18a1a Mon Sep 17 00:00:00 2001 From: htlsmile Date: Tue, 7 Jul 2020 13:31:25 +0800 Subject: [PATCH 049/137] Update Repositories.md Fixing translation errors --- docs/zh-Hans/Repositories.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/docs/zh-Hans/Repositories.md b/docs/zh-Hans/Repositories.md index 86d2f2e43d..18bfa5f77d 100644 --- a/docs/zh-Hans/Repositories.md +++ b/docs/zh-Hans/Repositories.md @@ -248,6 +248,4 @@ ABP框架使用实际数据库提供程序的API异步执行查询.虽然这不 * 如果你正在构建一个没有数据库提供程序集成包的**可重用库**,但是在某些情况下需要执行 `IQueryable`对象. -For example, ABP Framework uses the `IAsyncQueryableExecuter` in the `CrudAppService` base class (see the [application services](Application-Services.md) document). - -例如,ABP框架在 `CrudAppService` 基类中(参阅[应用程序](Application-Services.md)文档)使用 `IAsyncQueryableExecuter`. \ No newline at end of file +例如,ABP框架在 `CrudAppService` 基类中(参阅[应用程序](Application-Services.md)文档)使用 `IAsyncQueryableExecuter`. From 02dbdc7b15fcec2ba5f10657ef9f0014596acf42 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Tue, 7 Jul 2020 10:51:38 +0300 Subject: [PATCH 050/137] fix: Expression has changed after it was checked error in loader-bar resolves #4652 --- .../src/lib/components/loader-bar/loader-bar.component.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/loader-bar/loader-bar.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/loader-bar/loader-bar.component.ts index 512d959c5f..5f2e922263 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/loader-bar/loader-bar.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/loader-bar/loader-bar.component.ts @@ -31,7 +31,7 @@ export class LoaderBarComponent implements OnDestroy, OnInit { color = '#77b6ff'; @Input() - isLoading = false; + isLoading: boolean; progressLevel = 0; @@ -122,7 +122,7 @@ export class LoaderBarComponent implements OnDestroy, OnInit { if (this.interval) this.interval.unsubscribe(); this.progressLevel = 100; - this.isLoading = false; + setTimeout(() => (this.isLoading = false), 0); if (this.timer && !this.timer.closed) return; From 746aa22561bfd2e73235bebefc752be81437998e Mon Sep 17 00:00:00 2001 From: Alper Ebicoglu Date: Tue, 7 Jul 2020 10:57:18 +0300 Subject: [PATCH 051/137] add layout to loggedout.cshtml #4647 --- .../Pages/Account/LoggedOut.cshtml | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/LoggedOut.cshtml b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/LoggedOut.cshtml index 0e7b14236a..abeaf25610 100644 --- a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/LoggedOut.cshtml +++ b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/LoggedOut.cshtml @@ -3,16 +3,20 @@ @using Volo.Abp.Account.Localization @using Microsoft.AspNetCore.Mvc.Localization @using Volo.Abp.Account.Web.Pages.Account +@using Volo.Abp.AspNetCore.Mvc.UI.Theming +@inject IThemeManager ThemeManager @inject IHtmlLocalizer L - +@{ + Layout = ThemeManager.CurrentTheme.GetApplicationLayout(); +} @section scripts { - + } @section styles { - + } @@ -28,4 +32,4 @@ } - + \ No newline at end of file From ce7a1bf774c5e60a9ea9167da3a460c24eb2734a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Tue, 7 Jul 2020 11:41:25 +0300 Subject: [PATCH 052/137] Updating book. --- docs/en/Tutorials/Part-2.md | 27 ++------ docs/en/Tutorials/Part-3.md | 122 ++++++++++++++---------------------- 2 files changed, 51 insertions(+), 98 deletions(-) diff --git a/docs/en/Tutorials/Part-2.md b/docs/en/Tutorials/Part-2.md index 892847ca49..0029eb466d 100644 --- a/docs/en/Tutorials/Part-2.md +++ b/docs/en/Tutorials/Part-2.md @@ -331,6 +331,8 @@ This is a fully working, server side paged, sorted and localized table of books. ## Install NPM packages +> Notice: This tutorial is based on the ABP Framework v3.0.3+ If your project version is older, then please upgrade your solution. See the [migration guide](../UI/Angular/Migration-Guide-v3.md) if you are upgrading an existing project with v2.x. + If you haven't done it before, open a new command line interface (terminal window) and go to your `angular` folder and then run `yarn` command to install NPM packages: ```bash @@ -399,33 +401,12 @@ Generated code places the new route definition to the `src/app/app-routing.modul ````js const routes: Routes = [ - { - path: '', - component: DynamicLayoutComponent, - children: [ - // ... - ], - }, + // other route definitions... { path: 'books', loadChildren: () => import('./book/book.module').then(m => m.BookModule) }, ]; ```` -We need to **move this route** definition inside the `children` array, so it can use the application layout: - -````js -const routes: Routes = [ - { - path: '', - component: DynamicLayoutComponent, - children: [ - // ... - { path: 'books', loadChildren: () => import('./book/book.module').then(m => m.BookModule) }, - ], - }, -]; -```` - -Finally, open the `src/app/route.provider.ts` file replace the `configureRoutes` function declaration as shown below: +Now, open the `src/app/route.provider.ts` file replace the `configureRoutes` function declaration as shown below: ```js function configureRoutes(routes: RoutesService) { diff --git a/docs/en/Tutorials/Part-3.md b/docs/en/Tutorials/Part-3.md index 247dc8ce18..2a8d8ec34b 100644 --- a/docs/en/Tutorials/Part-3.md +++ b/docs/en/Tutorials/Part-3.md @@ -977,39 +977,39 @@ Now, you can open your browser to see the changes: ![Save button to the modal](./images/bookstore-new-book-form-v2.png) -## Updating a book +## Updating a Book -Open `book-list.component.ts` in `app\book\book-list` folder and add a variable named `selectedBook`. +Open `/src/app/book/book.component.ts` and replace the content as shown below: ```js import { ListService, PagedResultDto } from '@abp/ng.core'; import { Component, OnInit } from '@angular/core'; -import { BookDto, BookType } from '../models'; -import { BookService } from '../services'; +import { BookDto, BookType, CreateUpdateBookDto } from './models'; +import { BookService } from './services'; import { FormGroup, FormBuilder, Validators } from '@angular/forms'; import { NgbDateNativeAdapter, NgbDateAdapter } from '@ng-bootstrap/ng-bootstrap'; @Component({ - selector: 'app-book-list', - templateUrl: './book-list.component.html', - styleUrls: ['./book-list.component.scss'], + selector: 'app-book', + templateUrl: './book.component.html', + styleUrls: ['./book.component.scss'], providers: [ListService, { provide: NgbDateAdapter, useClass: NgbDateNativeAdapter }], }) -export class BookListComponent implements OnInit { +export class BookComponent implements OnInit { book = { items: [], totalCount: 0 } as PagedResultDto; booksType = BookType; - bookTypeArr = Object.keys(BookType).filter( + form: FormGroup; + + selectedBook = new BookDto(); // declare selectedBook + + bookTypes = Object.keys(BookType).filter( (bookType) => typeof this.booksType[bookType] === 'number' ); isModalOpen = false; - form: FormGroup; - - selectedBook = {} as BookDto; // <== declared selectedBook ==> - constructor( public readonly list: ListService, private bookService: BookService, @@ -1024,14 +1024,13 @@ export class BookListComponent implements OnInit { }); } - // <== this method is replaced ==> createBook() { - this.selectedBook = {} as BookDto; // <== added ==> + this.selectedBook = new BookDto(); // reset the selected book this.buildForm(); this.isModalOpen = true; } - // <== added editBook method ==> + // Add editBook method editBook(id: string) { this.bookService.getById(id).subscribe((book) => { this.selectedBook = book; @@ -1040,7 +1039,6 @@ export class BookListComponent implements OnInit { }); } - // <== this method is replaced ==> buildForm() { this.form = this.fb.group({ name: [this.selectedBook.name || '', Validators.required], @@ -1053,13 +1051,12 @@ export class BookListComponent implements OnInit { }); } - // <== this method is replaced ==> + // change the save method save() { if (this.form.invalid) { return; } - // <== added request ==> const request = this.selectedBook.id ? this.bookService.updateByIdAndInput(this.form.value, this.selectedBook.id) : this.bookService.createByInput(this.form.value); @@ -1074,71 +1071,46 @@ export class BookListComponent implements OnInit { ``` * We declared a variable named `selectedBook` as `BookDto`. -* We added `editBook` method. This method fetches the book with the given `Id` and sets it to `selectedBook` object. +* We added `editBook` method. This method fetches the book with the given `id` and sets it to `selectedBook` object. * We replaced the `buildForm` method so that it creates the form with the `selectedBook` data. * We replaced the `createBook` method so it sets `selectedBook` to an empty object. -* We replaced the `save` method. +* We changed the `save` method to handle both of create and update operations. -### Add "Actions" dropdown to the table +### Add "Actions" Dropdown to the Table -Open the `book-list.component.html` in `app\book\book-list` folder and replace the `
` tag as below: +Open the `/src/app/book/book.component.html`  and add the following `ngx-datatable-column` definition as the first column in the `ngx-datatable`: ```html -
- - - - -
- -
- -
-
-
-
- - - - {%{{{ booksType[row.type] }}}%} - - - - - {%{{{ row.publishDate | date }}}%} - - - - - {%{{{ row.price | currency }}}%} - - -
-
+ + +
+ +
+ +
+
+
+
``` -- We added a `ngx-datatable-column` for the "Actions" column. -- We added `button` with `ngbDropdownToggle` to open actions when clicked the button. -- We have used to [NgbDropdown](https://ng-bootstrap.github.io/#/components/dropdown/examples) for the dropdown menu of actions. - -The final UI looks like as below: +Added an "Actions" dropdown as the first column of the table that is shown below: ![Action buttons](./images/bookstore-actions-buttons.png) -Open `book-list.component.html` in `app\book\book-list` folder and find the `` tag and replace the content as below. +Also, change the `ng-template #abpHeader` section as shown below: ```html @@ -1146,9 +1118,9 @@ Open `book-list.component.html` in `app\book\book-list` folder and find the ` ``` -* This template will show **Edit** text for edit record operation, **New Book** for new record operation in the title. +This template will show **Edit** text for edit record operation, **New Book** for new record operation in the title. -## Deleting a book +## Deleting a Book ### Delete confirmation popup From ac62b8cb07cec4b50d8ce6fb8a6ec3bd2baab5fa Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Tue, 7 Jul 2020 11:45:13 +0300 Subject: [PATCH 053/137] refactor(theme-shared): run detectChanges in isLoading setter --- .../loader-bar/loader-bar.component.ts | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/loader-bar/loader-bar.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/loader-bar/loader-bar.component.ts index 5f2e922263..47ff4d057d 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/loader-bar/loader-bar.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/loader-bar/loader-bar.component.ts @@ -24,14 +24,22 @@ import { filter } from 'rxjs/operators'; styleUrls: ['./loader-bar.component.scss'], }) export class LoaderBarComponent implements OnDestroy, OnInit { + protected _isLoading: boolean; + @Input() - containerClass = 'abp-loader-bar'; + set isLoading(value: boolean) { + this._isLoading = value; + this.cdRef.detectChanges(); + } + get isLoading(): boolean { + return this._isLoading; + } @Input() - color = '#77b6ff'; + containerClass = 'abp-loader-bar'; @Input() - isLoading: boolean; + color = '#77b6ff'; progressLevel = 0; @@ -122,7 +130,7 @@ export class LoaderBarComponent implements OnDestroy, OnInit { if (this.interval) this.interval.unsubscribe(); this.progressLevel = 100; - setTimeout(() => (this.isLoading = false), 0); + this.isLoading = false; if (this.timer && !this.timer.closed) return; From a8cd52f08b13bd15a7771621cb7e31c64f53921f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Tue, 7 Jul 2020 11:52:18 +0300 Subject: [PATCH 054/137] Complete the part 3 --- docs/en/Tutorials/Part-3.md | 45 ++++++++++++++++--------------------- 1 file changed, 19 insertions(+), 26 deletions(-) diff --git a/docs/en/Tutorials/Part-3.md b/docs/en/Tutorials/Part-3.md index 2a8d8ec34b..275f1b9730 100644 --- a/docs/en/Tutorials/Part-3.md +++ b/docs/en/Tutorials/Part-3.md @@ -1122,36 +1122,25 @@ This template will show **Edit** text for edit record operation, **New Book** fo ## Deleting a Book -### Delete confirmation popup - -Open `book-list.component.ts` in `app\book\book-list` folder and inject the `ConfirmationService`. +Open the `/src/app/book/book.component.ts` and inject the `ConfirmationService`. Replace the constructor as below: ```js -import { ConfirmationService } from '@abp/ng.theme.shared'; -//... +// ... + +// add new imports +import { ConfirmationService, Confirmation } from '@abp/ng.theme.shared'; +//change the constructor constructor( public readonly list: ListService, private bookService: BookService, private fb: FormBuilder, - private confirmation: ConfirmationService // <== added this line ==> + private confirmation: ConfirmationService // inject the ConfirmationService ) {} -``` - -* We imported `ConfirmationService`. -* We injected `ConfirmationService` to the constructor. - -See the [Confirmation Popup documentation](https://docs.abp.io/en/abp/latest/UI/Angular/Confirmation-Service) - -In the `book-list.component.ts` add a delete method: - -```js -import { ConfirmationService, Confirmation } from '@abp/ng.theme.shared'; //<== imported Confirmation namespace ==> - -//... +// Add a delete method delete(id: string) { this.confirmation.warn('::AreYouSureToDelete', 'AbpAccount::AreYouSure').subscribe((status) => { if (status === Confirmation.Status.confirm) { @@ -1161,20 +1150,20 @@ delete(id: string) { } ``` +* We imported `ConfirmationService`. +* We injected `ConfirmationService` to the constructor. +* Added a `delete` method. -The `delete` method shows a confirmation popup and subscribes for the user response. The `deleteById` method of `BookService` called only if user clicks to the `Yes` button. The confirmation popup looks like below: - -![bookstore-confirmation-popup](./images/bookstore-confirmation-popup.png) - +> See the [Confirmation Popup documentation](../UI/Angular/Confirmation-Service) for more about this service. -### Add a delete button +### Add a Delete Button -Open `book-list.component.html` in `app\book\book-list` folder and modify the `ngbDropdownMenu` to add the delete button as shown below: +Open `/src/app/book/book.component.html` and modify the `ngbDropdownMenu` to add the delete button as shown below: ```html
- + @@ -1185,6 +1174,10 @@ The final actions dropdown UI looks like below: ![bookstore-final-actions-dropdown](./images/bookstore-final-actions-dropdown.png) +Clicking the "Delete" action calls the `delete` method which then shows a confirmation popup as shown below: + +![bookstore-confirmation-popup](./images/bookstore-confirmation-popup.png) + {{end}} ## The Next Part From ae360eb734b8a3819ac440a6cd62180286cfc426 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Tue, 7 Jul 2020 12:07:41 +0300 Subject: [PATCH 055/137] chore: remove isLoading subscription form list directive --- .../src/lib/directives/ngx-datatable-list.directive.ts | 9 --------- 1 file changed, 9 deletions(-) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/directives/ngx-datatable-list.directive.ts b/npm/ng-packs/packages/theme-shared/src/lib/directives/ngx-datatable-list.directive.ts index 131ae88fc5..b721e1142a 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/directives/ngx-datatable-list.directive.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/directives/ngx-datatable-list.directive.ts @@ -66,14 +66,6 @@ export class NgxDatatableListDirective implements OnChanges, OnDestroy, OnInit { this.subscription.add(sub); } - private subscribeToIsLoading() { - const sub = this.list.isLoading$.subscribe(loading => { - this.table.loadingIndicator = loading; - this.cdRef.detectChanges(); - }); - this.subscription.add(sub); - } - ngOnChanges({ list }: SimpleChanges) { if (!list.firstChange) return; @@ -89,6 +81,5 @@ export class NgxDatatableListDirective implements OnChanges, OnDestroy, OnInit { ngOnInit() { this.subscribeToPage(); this.subscribeToSort(); - this.subscribeToIsLoading(); } } From 1834514a365d6a35eb05735c54dc2b6aa7f2d7d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Tue, 7 Jul 2020 13:13:01 +0300 Subject: [PATCH 056/137] Delete the samples folder --- samples/README.MD | 1 - 1 file changed, 1 deletion(-) delete mode 100644 samples/README.MD diff --git a/samples/README.MD b/samples/README.MD deleted file mode 100644 index ded57eb30d..0000000000 --- a/samples/README.MD +++ /dev/null @@ -1 +0,0 @@ -See other samples: https://github.com/abpframework/abp-samples From 934f5029195c4153697557bac002362a0201b2f2 Mon Sep 17 00:00:00 2001 From: Galip Tolga Erdem Date: Tue, 7 Jul 2020 13:35:47 +0300 Subject: [PATCH 057/137] Fixed broken msdemo links on docs --- docs/en/Samples/Index.md | 2 +- docs/en/Samples/Microservice-Demo.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/en/Samples/Index.md b/docs/en/Samples/Index.md index ee9369b387..e715d3d1ca 100644 --- a/docs/en/Samples/Index.md +++ b/docs/en/Samples/Index.md @@ -7,7 +7,7 @@ Here, a list of official samples built with the ABP Framework. Most of these sam A complete solution to demonstrate how to build systems based on the microservice architecture. * [The complete documentation for this sample](Microservice-Demo.md) -* [Source code](https://github.com/abpframework/abp/tree/dev/samples/MicroserviceDemo) +* [Source code](https://github.com/abpframework/abp-samples/tree/master/MicroserviceDemo) * [Microservice architecture document](../Microservice-Architecture.md) ### Book Store diff --git a/docs/en/Samples/Microservice-Demo.md b/docs/en/Samples/Microservice-Demo.md index 25eaf68055..30059a9379 100644 --- a/docs/en/Samples/Microservice-Demo.md +++ b/docs/en/Samples/Microservice-Demo.md @@ -28,7 +28,7 @@ The diagram below shows the system: ### Source Code -You can get the source code from [the GitHub repository](https://github.com/abpframework/abp/tree/master/samples/MicroserviceDemo). +You can get the source code from [the GitHub repository](https://github.com/abpframework/abp-samples/tree/master/MicroserviceDemo). ## Running the Solution From 4751f58d60c091b528b9f0065231d7c9e9461684 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Tue, 7 Jul 2020 13:56:13 +0300 Subject: [PATCH 058/137] Update Part-5.md --- docs/en/Tutorials/Part-5.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/en/Tutorials/Part-5.md b/docs/en/Tutorials/Part-5.md index 61bb16c534..af87e5723a 100644 --- a/docs/en/Tutorials/Part-5.md +++ b/docs/en/Tutorials/Part-5.md @@ -53,7 +53,7 @@ ABP Framework provides an [authorization system](../Authorization.md) based on t A permission must have a unique name (a `string`). The best way is to define it as a `const`, so we can reuse the permission name. -Open the `BookStorePermissions` class and change the content as shown below: +Open the `BookStorePermissions` class inside the `Acme.BookStore.Application.Contracts` project and change the content as shown below: ````csharp namespace Acme.BookStore.Permissions @@ -316,6 +316,6 @@ if (await context.IsGrantedAsync(BookStorePermissions.Books.Default)) {{else if UI == "NG"}} -***Angular UI authorization document is being prepared...*** + {{end}} \ No newline at end of file From a2d909efd5bf1e79c8ae60b834ad8b02f64ba846 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Tue, 7 Jul 2020 14:07:42 +0300 Subject: [PATCH 059/137] Update Part-5.md --- docs/en/Tutorials/Part-5.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/Tutorials/Part-5.md b/docs/en/Tutorials/Part-5.md index af87e5723a..54fd012233 100644 --- a/docs/en/Tutorials/Part-5.md +++ b/docs/en/Tutorials/Part-5.md @@ -165,7 +165,7 @@ namespace Acme.BookStore.Books GetListPolicyName = BookStorePermissions.Books.Default; CreatePolicyName = BookStorePermissions.Books.Create; UpdatePolicyName = BookStorePermissions.Books.Edit; - DeletePolicyName = BookStorePermissions.Books.Create; + DeletePolicyName = BookStorePermissions.Books.Delete; } } } From 7a762728a90a94a4b8b614c53b1a580cfa3af9f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Tue, 7 Jul 2020 14:24:52 +0300 Subject: [PATCH 060/137] Added Angular Guard Configuration section. --- docs/en/Tutorials/Part-5.md | 38 +++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/docs/en/Tutorials/Part-5.md b/docs/en/Tutorials/Part-5.md index 54fd012233..c4aeb97361 100644 --- a/docs/en/Tutorials/Part-5.md +++ b/docs/en/Tutorials/Part-5.md @@ -316,6 +316,44 @@ if (await context.IsGrantedAsync(BookStorePermissions.Books.Default)) {{else if UI == "NG"}} +### Angular Guard Configuration + +First step of the UI is to prevent unauthorized users to see the "Books" menu item and enter to the book management page. + +Open the `/src/app/book/book-routing.module.ts` and replace with the following content: + +````js +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; +import { AuthGuard, PermissionGuard } from '@abp/ng.core'; +import { BookComponent } from './book.component'; + +const routes: Routes = [ + { path: '', component: BookComponent, canActivate: [AuthGuard, PermissionGuard] }, +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule], +}) +export class BookRoutingModule {} +```` + +* Imported `AuthGuard` and `PermissionGuard` from the `@abp/ng.core`. +* Added `canActivate: [AuthGuard, PermissionGuard]` to the route definition. + +Open the `/src/app/route.provider.ts` and add `requiredPolicy: 'BookStore.Books'` to the `/books` route. The `/books` route block should be following: + +````js +{ + path: '/books', + name: '::Menu:Books', + parentName: '::Menu:BookStore', + layout: eLayoutType.application, + requiredPolicy: 'BookStore.Books', +} +```` + {{end}} \ No newline at end of file From 766f615d83e428323ac464ca9622bb0f6c238c43 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ahmet=20=C3=87otur?= Date: Tue, 7 Jul 2020 14:31:42 +0300 Subject: [PATCH 061/137] Returning 200 for non-found files fixed --- .../src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs index 0acd12531f..a86d895c90 100644 --- a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs +++ b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs @@ -105,6 +105,7 @@ namespace Volo.Docs.Pages.Documents.Project Logger.LogWarning(exception.Message); DocumentFound = false; + Response.StatusCode = 404; return Page(); } } @@ -123,6 +124,7 @@ namespace Volo.Docs.Pages.Documents.Project { Logger.LogWarning(e.Message); ProjectFound = false; + Response.StatusCode = 404; return Page(); } From 03a473ef5b5e63e5da87773871d42dc2cc19ed00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Tue, 7 Jul 2020 14:34:00 +0300 Subject: [PATCH 062/137] Hide the New Book Button section completed. --- docs/en/Tutorials/Part-5.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/docs/en/Tutorials/Part-5.md b/docs/en/Tutorials/Part-5.md index c4aeb97361..67b124bb33 100644 --- a/docs/en/Tutorials/Part-5.md +++ b/docs/en/Tutorials/Part-5.md @@ -354,6 +354,22 @@ Open the `/src/app/route.provider.ts` and add `requiredPolicy: 'BookStore.Books' } ```` +### Hide the New Book Button +The book management page has a *New Book* button that should be invisible if the current user has no *Book Creation* permission. + +![bookstore-new-book-button-small](images/bookstore-new-book-button-small.png) + +Open the `/src/app/book/book.component.html` file and replace the create button HTML content as shown below: + +````html + + +```` + +* Just added `abpPermission="BookStore.Books.Create"` that hides the button if the current user has no permission. {{end}} \ No newline at end of file From 5644ad89e4247f2d134226995f976229ccde7bad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Tue, 7 Jul 2020 14:41:16 +0300 Subject: [PATCH 063/137] Update Part-5.md --- docs/en/Tutorials/Part-5.md | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/docs/en/Tutorials/Part-5.md b/docs/en/Tutorials/Part-5.md index 67b124bb33..441db14638 100644 --- a/docs/en/Tutorials/Part-5.md +++ b/docs/en/Tutorials/Part-5.md @@ -243,7 +243,7 @@ Open the `Pages/Books/Index.cshtml` file and change the content as shown below: ### JavaScript Side -Books table in the book management page has an actions button for each row. The actions button includes *Edit* and *Delete* action: +Books table in the book management page has an actions button for each row. The actions button includes *Edit* and *Delete* actions: ![bookstore-edit-delete-actions](images/bookstore-edit-delete-actions.png) @@ -372,4 +372,30 @@ Open the `/src/app/book/book.component.html` file and replace the create button * Just added `abpPermission="BookStore.Books.Create"` that hides the button if the current user has no permission. -{{end}} \ No newline at end of file +### Hide the Edit and Delete Actions + +Books table in the book management page has an actions button for each row. The actions button includes *Edit* and *Delete* actions: + +![bookstore-edit-delete-actions](images/bookstore-edit-delete-actions.png) + +We should hide an action if the current user has not granted for the related permission. + +Open the `/src/app/book/book.component.html` file and replace the edit and delete buttons contents as shown below: + +````html + + + + + +```` + +* Added `abpPermission="BookStore.Books.Edit"` that hides the edit action if the current user has no editing permission. +* Added `abpPermission="BookStore.Books.Delete"` that hides the delete action if the current user has no delete permission. + +{{end}} + From 854f3e5551224436e53de0ead6ae6936efd81df2 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Tue, 7 Jul 2020 15:37:03 +0300 Subject: [PATCH 064/137] refactor(core): get the required policy in PermissionGuard from RoutesService resolves #4662 --- .../core/src/lib/guards/permission.guard.ts | 33 +++++++++---------- .../core/src/lib/utils/route-utils.ts | 4 +-- 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/npm/ng-packs/packages/core/src/lib/guards/permission.guard.ts b/npm/ng-packs/packages/core/src/lib/guards/permission.guard.ts index c4b70d0b7b..6ba6bd18b5 100644 --- a/npm/ng-packs/packages/core/src/lib/guards/permission.guard.ts +++ b/npm/ng-packs/packages/core/src/lib/guards/permission.guard.ts @@ -1,34 +1,33 @@ import { Injectable } from '@angular/core'; -import { ActivatedRouteSnapshot, CanActivate, RouterStateSnapshot } from '@angular/router'; +import { ActivatedRouteSnapshot, CanActivate, RouterStateSnapshot, Router } from '@angular/router'; import { Store } from '@ngxs/store'; import { Observable, of } from 'rxjs'; import { tap } from 'rxjs/operators'; import snq from 'snq'; -import { RestOccurError } from '../actions'; -import { ConfigState } from '../states'; +import { RestOccurError } from '../actions/rest.actions'; +import { ConfigState } from '../states/config.state'; +import { RoutesService } from '../services/routes.service'; +import { findRoute, getRoutePath } from '../utils/route-utils'; @Injectable({ providedIn: 'root', }) export class PermissionGuard implements CanActivate { - constructor(private store: Store) {} + constructor(private router: Router, private routes: RoutesService, private store: Store) {} - canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { - let resource = - snq(() => route.data.routes.requiredPolicy) || snq(() => route.data.requiredPolicy as string); - if (!resource) { - resource = snq( - () => - route.routeConfig.children.find(child => state.url.indexOf(child.path) > -1).data - .requiredPolicy, - ); + canActivate( + route: ActivatedRouteSnapshot, + state: RouterStateSnapshot, + ): Observable | boolean { + let { requiredPolicy } = route.data || {}; - if (!resource) { - return of(true); - } + if (!requiredPolicy) { + requiredPolicy = findRoute(this.routes, getRoutePath(this.router, state.url))?.requiredPolicy; + + if (!requiredPolicy) return true; } - return this.store.select(ConfigState.getGrantedPolicy(resource)).pipe( + return this.store.select(ConfigState.getGrantedPolicy(requiredPolicy)).pipe( tap(access => { if (!access) { this.store.dispatch(new RestOccurError({ status: 403 })); diff --git a/npm/ng-packs/packages/core/src/lib/utils/route-utils.ts b/npm/ng-packs/packages/core/src/lib/utils/route-utils.ts index 57ffdd5285..5c98a929e7 100644 --- a/npm/ng-packs/packages/core/src/lib/utils/route-utils.ts +++ b/npm/ng-packs/packages/core/src/lib/utils/route-utils.ts @@ -17,9 +17,9 @@ export function findRoute(routes: RoutesService, path: string): TreeNode path).join('/'); } From b254f6dff2a1166ee333e663c3a5248fff757ea5 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Tue, 7 Jul 2020 15:39:01 +0300 Subject: [PATCH 065/137] fix: localization problem in dynamic layout when language changed --- .../lib/components/dynamic-layout.component.ts | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/npm/ng-packs/packages/core/src/lib/components/dynamic-layout.component.ts b/npm/ng-packs/packages/core/src/lib/components/dynamic-layout.component.ts index 49a0868967..bd09876ba6 100644 --- a/npm/ng-packs/packages/core/src/lib/components/dynamic-layout.component.ts +++ b/npm/ng-packs/packages/core/src/lib/components/dynamic-layout.component.ts @@ -1,9 +1,10 @@ -import { Component, Injector, OnDestroy, Type, Optional, SkipSelf } from '@angular/core'; +import { Component, Injector, OnDestroy, Optional, SkipSelf, Type } from '@angular/core'; import { ActivatedRoute, NavigationEnd, Router } from '@angular/router'; import { Store } from '@ngxs/store'; import { eLayoutType } from '../enums/common'; import { ABP } from '../models'; import { ReplaceableComponents } from '../models/replaceable-components'; +import { LocalizationService } from '../services/localization.service'; import { RoutesService } from '../services/routes.service'; import { ReplaceableComponentsState } from '../states/replaceable-components.state'; import { findRoute, getRoutePath } from '../utils/route-utils'; @@ -16,15 +17,18 @@ import { TreeNode } from '../utils/tree-utils'; `, }) export class DynamicLayoutComponent implements OnDestroy { layout: Type; + isLayoutShow = true; + constructor( injector: Injector, + private localizationService: LocalizationService, private store: Store, @Optional() @SkipSelf() dynamicLayoutComponent: DynamicLayoutComponent, ) { @@ -61,6 +65,15 @@ export class DynamicLayoutComponent implements OnDestroy { this.layout = layouts[expectedLayout].component; } }); + + this.listenToLanguageChange(); + } + + private listenToLanguageChange() { + this.localizationService.languageChange.pipe(takeUntilDestroy(this)).subscribe(() => { + this.isLayoutShow = false; + setTimeout(() => (this.isLayoutShow = true), 0); + }); } private getComponent(key: string): ReplaceableComponents.ReplaceableComponent { From caa822ed6f0e7023b86d16e3d2644350b9db609a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Levent=20Arman=20=C3=96zak?= Date: Tue, 7 Jul 2020 15:45:00 +0300 Subject: [PATCH 066/137] style: replace isLayoutShow with isLayoutVisible --- .../core/src/lib/components/dynamic-layout.component.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/npm/ng-packs/packages/core/src/lib/components/dynamic-layout.component.ts b/npm/ng-packs/packages/core/src/lib/components/dynamic-layout.component.ts index bd09876ba6..2548cfece6 100644 --- a/npm/ng-packs/packages/core/src/lib/components/dynamic-layout.component.ts +++ b/npm/ng-packs/packages/core/src/lib/components/dynamic-layout.component.ts @@ -17,14 +17,14 @@ import { TreeNode } from '../utils/tree-utils'; `, }) export class DynamicLayoutComponent implements OnDestroy { layout: Type; - isLayoutShow = true; + isLayoutVisible = true; constructor( injector: Injector, @@ -71,8 +71,8 @@ export class DynamicLayoutComponent implements OnDestroy { private listenToLanguageChange() { this.localizationService.languageChange.pipe(takeUntilDestroy(this)).subscribe(() => { - this.isLayoutShow = false; - setTimeout(() => (this.isLayoutShow = true), 0); + this.isLayoutVisible = false; + setTimeout(() => (this.isLayoutVisible = true), 0); }); } From a5a641fb71d4492708e7afde86f5ad6b3d747e3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Levent=20Arman=20=C3=96zak?= Date: Tue, 7 Jul 2020 15:48:19 +0300 Subject: [PATCH 067/137] refactor: use default value for url paramater --- npm/ng-packs/packages/core/src/lib/utils/route-utils.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/npm/ng-packs/packages/core/src/lib/utils/route-utils.ts b/npm/ng-packs/packages/core/src/lib/utils/route-utils.ts index 5c98a929e7..a749090695 100644 --- a/npm/ng-packs/packages/core/src/lib/utils/route-utils.ts +++ b/npm/ng-packs/packages/core/src/lib/utils/route-utils.ts @@ -17,9 +17,9 @@ export function findRoute(routes: RoutesService, path: string): TreeNode path).join('/'); } From 75aa35f9590094f4534aad3d0aee41d285213b26 Mon Sep 17 00:00:00 2001 From: Erol Arkat Date: Tue, 7 Jul 2020 16:09:22 +0300 Subject: [PATCH 068/137] generate-proxy multiple angular model fix --- .../Volo/Abp/Cli/Commands/GenerateProxyCommand.cs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/GenerateProxyCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/GenerateProxyCommand.cs index 788ffb4436..f2941c9ce8 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/GenerateProxyCommand.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/GenerateProxyCommand.cs @@ -294,7 +294,7 @@ namespace Volo.Abp.Cli.Commands if (firstType == "List" && !File.Exists(secondTypeModelPath)) { secondType = "any"; - } + } serviceFileText.AppendLine( firstType == "List" @@ -322,13 +322,15 @@ namespace Volo.Abp.Cli.Commands "String" => "string", "IActionResult" => "void", "ActionResult" => "void", + "Int64" => "number", + "Int32" => "number", _ => type - }; + }; serviceFileText.AppendLine( $" {actionName}({parametersText}): Observable<{type}> {{"); - if (type != "void" && type != "string") + if (type != "void" && type != "string" && type != "number") { secondTypeList.Add(type); } @@ -503,6 +505,11 @@ namespace Volo.Abp.Cli.Commands var path = output + $"{outputPrefix}/{rootPath}/{controllerPathName}/models/{typeModelName}"; + if (File.Exists(path)) + { + return null; + } + var modelFileText = new StringBuilder(); var baseType = (string)type["baseType"]; From bf5fcb8a800993a77eaa2ff04150363fc4d88a33 Mon Sep 17 00:00:00 2001 From: Erol Arkat Date: Tue, 7 Jul 2020 16:36:50 +0300 Subject: [PATCH 069/137] version update --- common.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common.props b/common.props index 71fb40da0d..ec343d0a98 100644 --- a/common.props +++ b/common.props @@ -1,7 +1,7 @@ latest - 3.0.2 + 3.0.3 $(NoWarn);CS1591 https://abp.io/assets/abp_nupkg.png https://abp.io From 6b4257033a2f55f949c7630aafbc3ffc969084a2 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Tue, 7 Jul 2020 17:12:26 +0300 Subject: [PATCH 070/137] docs: remove route patching and adding topics from Config-State.md --- docs/en/UI/Angular/Config-State.md | 71 ------------------------------ 1 file changed, 71 deletions(-) diff --git a/docs/en/UI/Angular/Config-State.md b/docs/en/UI/Angular/Config-State.md index 71a5da01f0..089697f064 100644 --- a/docs/en/UI/Angular/Config-State.md +++ b/docs/en/UI/Angular/Config-State.md @@ -201,77 +201,6 @@ this.config.dispatchGetAppConfiguration(); Note that **you do not have to call this method at application initiation**, because the application configuration is already being received from the server at start. -### How to Patch Route Configuration - -The `dispatchPatchRouteByName` finds a route by its name and replaces its configuration in the `Store` with the new configuration passed as the second parameter. - -```js -// this.config is instance of ConfigStateService - -const newRouteConfig: Partial = { - name: "Home", - path: "home", - children: [ - { - name: "Dashboard", - path: "dashboard" - } - ] -}; - -this.config.dispatchPatchRouteByName("::Menu:Home", newRouteConfig); -// returns a state stream which emits after dispatch action is complete -``` - -### How to Add a New Route Configuration - -The `dispatchAddRoute` adds a new route to the configuration state in the `Store`. For this, the route config should be passed as the parameter of the method. - -```js -// this.config is instance of ConfigStateService - -const newRoute: ABP.Route = { - name: "My New Page", - iconClass: "fa fa-dashboard", - path: "page", - invisible: false, - order: 2, - requiredPolicy: "MyProjectName.MyNewPage" -}; - -this.config.dispatchAddRoute(newRoute); -// returns a state stream which emits after dispatch action is complete -``` - -The `newRoute` will be placed as at root level, i.e. without any parent routes and its url will be stored as `'/path'`. - -If you want **to add a child route, you can do this:** - -```js -import { eIdentityRouteNames } from '@abp/ng.identity'; - -// this.config is instance of ConfigStateService - -const newRoute: ABP.Route = { - parentName: eIdentityRouteNames.IdentityManagement, - name: "My New Page", - iconClass: "fa fa-dashboard", - path: "page", - invisible: false, - order: 2, - requiredPolicy: "MyProjectName.MyNewPage" -}; - -this.config.dispatchAddRoute(newRoute); -// returns a state stream which emits after dispatch action is complete -``` - -The `newRoute` will then be placed as a child of the parent route named `eIdentityRouteNames.IdentityManagement` and its url will be set as `'/identity/page'`. - -#### Route Configuration Properties - -Please refer to `ABP.Route` type for all the properties you can pass to `dispatchSetEnvironment` in its parameter. It can be found in the [common.ts file](https://github.com/abpframework/abp/blob/dev/npm/ng-packs/packages/core/src/lib/models/common.ts#L27). - ### How to Set the Environment The `dispatchSetEnvironment` places environment variables passed to it in the `Store` under the configuration state. Here is how it is used: From b76a23fe4399bdf7acd0efc9385245ff230862b4 Mon Sep 17 00:00:00 2001 From: erolarkat Date: Tue, 7 Jul 2020 18:36:44 +0300 Subject: [PATCH 071/137] Upgrade ng package versions --- npm/ng-packs/lerna.version.json | 2 +- npm/ng-packs/packages/account/package.json | 4 ++-- npm/ng-packs/packages/core/package.json | 2 +- npm/ng-packs/packages/feature-management/package.json | 4 ++-- npm/ng-packs/packages/identity/package.json | 6 +++--- npm/ng-packs/packages/permission-management/package.json | 4 ++-- npm/ng-packs/packages/setting-management/package.json | 4 ++-- npm/ng-packs/packages/tenant-management/package.json | 6 +++--- npm/ng-packs/packages/theme-basic/package.json | 4 ++-- npm/ng-packs/packages/theme-shared/package.json | 4 ++-- 10 files changed, 20 insertions(+), 20 deletions(-) diff --git a/npm/ng-packs/lerna.version.json b/npm/ng-packs/lerna.version.json index f695127299..c6671ada20 100644 --- a/npm/ng-packs/lerna.version.json +++ b/npm/ng-packs/lerna.version.json @@ -1,5 +1,5 @@ { - "version": "3.0.2", + "version": "3.0.3", "packages": [ "packages/*" ], diff --git a/npm/ng-packs/packages/account/package.json b/npm/ng-packs/packages/account/package.json index f235c4c6c2..ec1046111e 100644 --- a/npm/ng-packs/packages/account/package.json +++ b/npm/ng-packs/packages/account/package.json @@ -1,13 +1,13 @@ { "name": "@abp/ng.account", - "version": "3.0.2", + "version": "3.0.3", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.theme.shared": "~3.0.2", + "@abp/ng.theme.shared": "~3.0.3", "tslib": "^2.0.0" }, "publishConfig": { diff --git a/npm/ng-packs/packages/core/package.json b/npm/ng-packs/packages/core/package.json index d5e165861c..f039923e09 100644 --- a/npm/ng-packs/packages/core/package.json +++ b/npm/ng-packs/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@abp/ng.core", - "version": "3.0.2", + "version": "3.0.3", "homepage": "https://abp.io", "repository": { "type": "git", diff --git a/npm/ng-packs/packages/feature-management/package.json b/npm/ng-packs/packages/feature-management/package.json index 3d84f9f6ce..8daad68be0 100644 --- a/npm/ng-packs/packages/feature-management/package.json +++ b/npm/ng-packs/packages/feature-management/package.json @@ -1,13 +1,13 @@ { "name": "@abp/ng.feature-management", - "version": "3.0.2", + "version": "3.0.3", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.theme.shared": "~3.0.2", + "@abp/ng.theme.shared": "~3.0.3", "tslib": "^2.0.0" }, "publishConfig": { diff --git a/npm/ng-packs/packages/identity/package.json b/npm/ng-packs/packages/identity/package.json index 57d32f0cde..7e8044ff20 100644 --- a/npm/ng-packs/packages/identity/package.json +++ b/npm/ng-packs/packages/identity/package.json @@ -1,14 +1,14 @@ { "name": "@abp/ng.identity", - "version": "3.0.2", + "version": "3.0.3", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.permission-management": "~3.0.2", - "@abp/ng.theme.shared": "~3.0.2", + "@abp/ng.permission-management": "~3.0.3", + "@abp/ng.theme.shared": "~3.0.3", "tslib": "^2.0.0" }, "publishConfig": { diff --git a/npm/ng-packs/packages/permission-management/package.json b/npm/ng-packs/packages/permission-management/package.json index 07e256bd1b..6c4d5c5f3b 100644 --- a/npm/ng-packs/packages/permission-management/package.json +++ b/npm/ng-packs/packages/permission-management/package.json @@ -1,13 +1,13 @@ { "name": "@abp/ng.permission-management", - "version": "3.0.2", + "version": "3.0.3", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.theme.shared": "~3.0.2", + "@abp/ng.theme.shared": "~3.0.3", "tslib": "^2.0.0" }, "publishConfig": { diff --git a/npm/ng-packs/packages/setting-management/package.json b/npm/ng-packs/packages/setting-management/package.json index b167570d93..b072f1524f 100644 --- a/npm/ng-packs/packages/setting-management/package.json +++ b/npm/ng-packs/packages/setting-management/package.json @@ -1,13 +1,13 @@ { "name": "@abp/ng.setting-management", - "version": "3.0.2", + "version": "3.0.3", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.theme.shared": "~3.0.2", + "@abp/ng.theme.shared": "~3.0.3", "tslib": "^2.0.0" }, "publishConfig": { diff --git a/npm/ng-packs/packages/tenant-management/package.json b/npm/ng-packs/packages/tenant-management/package.json index 7ed439d3a2..3368c928af 100644 --- a/npm/ng-packs/packages/tenant-management/package.json +++ b/npm/ng-packs/packages/tenant-management/package.json @@ -1,14 +1,14 @@ { "name": "@abp/ng.tenant-management", - "version": "3.0.2", + "version": "3.0.3", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.feature-management": "~3.0.2", - "@abp/ng.theme.shared": "~3.0.2", + "@abp/ng.feature-management": "~3.0.3", + "@abp/ng.theme.shared": "~3.0.3", "tslib": "^2.0.0" }, "publishConfig": { diff --git a/npm/ng-packs/packages/theme-basic/package.json b/npm/ng-packs/packages/theme-basic/package.json index f82f038516..ab2b2a4fcf 100644 --- a/npm/ng-packs/packages/theme-basic/package.json +++ b/npm/ng-packs/packages/theme-basic/package.json @@ -1,13 +1,13 @@ { "name": "@abp/ng.theme.basic", - "version": "3.0.2", + "version": "3.0.3", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.theme.shared": "~3.0.2", + "@abp/ng.theme.shared": "~3.0.3", "tslib": "^2.0.0" }, "publishConfig": { diff --git a/npm/ng-packs/packages/theme-shared/package.json b/npm/ng-packs/packages/theme-shared/package.json index 43ec42eaaf..d99a4c1e6d 100644 --- a/npm/ng-packs/packages/theme-shared/package.json +++ b/npm/ng-packs/packages/theme-shared/package.json @@ -1,13 +1,13 @@ { "name": "@abp/ng.theme.shared", - "version": "3.0.2", + "version": "3.0.3", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.core": "~3.0.2", + "@abp/ng.core": "~3.0.3", "@fortawesome/fontawesome-free": "^5.13.1", "@ng-bootstrap/ng-bootstrap": "^6.1.0", "@ngx-validate/core": "^0.0.9", From 8a01d214a6da41b436c01932bc346e938e20789b Mon Sep 17 00:00:00 2001 From: erolarkat Date: Tue, 7 Jul 2020 18:41:36 +0300 Subject: [PATCH 072/137] npm packages 3.0.3 --- npm/lerna.json | 2 +- npm/packs/anchor-js/package.json | 4 +- .../package.json | 4 +- .../package.json | 30 +-- npm/packs/aspnetcore.mvc.ui/package.json | 2 +- npm/packs/blogging/package.json | 10 +- npm/packs/bootstrap-datepicker/package.json | 2 +- npm/packs/bootstrap/package.json | 4 +- npm/packs/chart.js/package.json | 2 +- npm/packs/clipboard/package.json | 4 +- npm/packs/codemirror/package.json | 4 +- npm/packs/core/package.json | 2 +- npm/packs/datatables.net-bs4/package.json | 4 +- npm/packs/datatables.net/package.json | 4 +- npm/packs/docs/package.json | 12 +- npm/packs/flag-icon-css/package.json | 2 +- npm/packs/font-awesome/package.json | 4 +- npm/packs/highlight.js/package.json | 4 +- npm/packs/jquery-form/package.json | 4 +- .../package.json | 4 +- npm/packs/jquery-validation/package.json | 4 +- npm/packs/jquery/package.json | 4 +- npm/packs/jstree/package.json | 4 +- npm/packs/lodash/package.json | 4 +- npm/packs/luxon/package.json | 2 +- .../package.json | 4 +- npm/packs/markdown-it/package.json | 4 +- npm/packs/owl.carousel/package.json | 4 +- npm/packs/popper.js/package.json | 4 +- npm/packs/prismjs/package.json | 6 +- npm/packs/select2/package.json | 4 +- npm/packs/signalr/package.json | 4 +- npm/packs/sweetalert/package.json | 4 +- npm/packs/timeago/package.json | 4 +- npm/packs/toastr/package.json | 4 +- npm/packs/tui-editor/package.json | 10 +- npm/packs/uppy/package.json | 4 +- npm/packs/utils/package.json | 2 +- npm/packs/virtual-file-explorer/package.json | 6 +- templates/app/angular/package.json | 10 +- .../package.json | 2 +- .../yarn.lock | 222 +++++++++--------- .../package.json | 2 +- .../yarn.lock | 222 +++++++++--------- .../package.json | 2 +- .../yarn.lock | 222 +++++++++--------- .../package.json | 2 +- .../MyCompanyName.MyProjectName.Web/yarn.lock | 222 +++++++++--------- templates/module/angular/package.json | 10 +- .../projects/my-project-name/package.json | 4 +- .../package.json | 2 +- .../yarn.lock | 222 +++++++++--------- .../package.json | 2 +- .../yarn.lock | 222 +++++++++--------- .../package.json | 2 +- .../yarn.lock | 222 +++++++++--------- 56 files changed, 891 insertions(+), 891 deletions(-) diff --git a/npm/lerna.json b/npm/lerna.json index 90a8b29a08..95cb52942f 100644 --- a/npm/lerna.json +++ b/npm/lerna.json @@ -1,5 +1,5 @@ { - "version": "3.0.2", + "version": "3.0.3", "packages": [ "packs/*" ], diff --git a/npm/packs/anchor-js/package.json b/npm/packs/anchor-js/package.json index a5d86b2980..fbf3c31cb4 100644 --- a/npm/packs/anchor-js/package.json +++ b/npm/packs/anchor-js/package.json @@ -1,11 +1,11 @@ { - "version": "3.0.2", + "version": "3.0.3", "name": "@abp/anchor-js", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~3.0.2", + "@abp/core": "~3.0.3", "anchor-js": "^4.2.2" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/aspnetcore.mvc.ui.theme.basic/package.json b/npm/packs/aspnetcore.mvc.ui.theme.basic/package.json index 9ee83cb96e..b7b7809d3b 100644 --- a/npm/packs/aspnetcore.mvc.ui.theme.basic/package.json +++ b/npm/packs/aspnetcore.mvc.ui.theme.basic/package.json @@ -1,11 +1,11 @@ { - "version": "3.0.2", + "version": "3.0.3", "name": "@abp/aspnetcore.mvc.ui.theme.basic", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.shared": "~3.0.2" + "@abp/aspnetcore.mvc.ui.theme.shared": "~3.0.3" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" } diff --git a/npm/packs/aspnetcore.mvc.ui.theme.shared/package.json b/npm/packs/aspnetcore.mvc.ui.theme.shared/package.json index f74096c766..de6dd2b228 100644 --- a/npm/packs/aspnetcore.mvc.ui.theme.shared/package.json +++ b/npm/packs/aspnetcore.mvc.ui.theme.shared/package.json @@ -1,24 +1,24 @@ { - "version": "3.0.2", + "version": "3.0.3", "name": "@abp/aspnetcore.mvc.ui.theme.shared", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/aspnetcore.mvc.ui": "~3.0.2", - "@abp/bootstrap": "~3.0.2", - "@abp/bootstrap-datepicker": "~3.0.2", - "@abp/datatables.net-bs4": "~3.0.2", - "@abp/font-awesome": "~3.0.2", - "@abp/jquery-form": "~3.0.2", - "@abp/jquery-validation-unobtrusive": "~3.0.2", - "@abp/lodash": "~3.0.2", - "@abp/luxon": "~3.0.2", - "@abp/malihu-custom-scrollbar-plugin": "~3.0.2", - "@abp/select2": "~3.0.2", - "@abp/sweetalert": "~3.0.2", - "@abp/timeago": "~3.0.2", - "@abp/toastr": "~3.0.2" + "@abp/aspnetcore.mvc.ui": "~3.0.3", + "@abp/bootstrap": "~3.0.3", + "@abp/bootstrap-datepicker": "~3.0.3", + "@abp/datatables.net-bs4": "~3.0.3", + "@abp/font-awesome": "~3.0.3", + "@abp/jquery-form": "~3.0.3", + "@abp/jquery-validation-unobtrusive": "~3.0.3", + "@abp/lodash": "~3.0.3", + "@abp/luxon": "~3.0.3", + "@abp/malihu-custom-scrollbar-plugin": "~3.0.3", + "@abp/select2": "~3.0.3", + "@abp/sweetalert": "~3.0.3", + "@abp/timeago": "~3.0.3", + "@abp/toastr": "~3.0.3" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" } diff --git a/npm/packs/aspnetcore.mvc.ui/package.json b/npm/packs/aspnetcore.mvc.ui/package.json index 9d74d2184e..cc93ee408e 100644 --- a/npm/packs/aspnetcore.mvc.ui/package.json +++ b/npm/packs/aspnetcore.mvc.ui/package.json @@ -1,5 +1,5 @@ { - "version": "3.0.2", + "version": "3.0.3", "name": "@abp/aspnetcore.mvc.ui", "publishConfig": { "access": "public" diff --git a/npm/packs/blogging/package.json b/npm/packs/blogging/package.json index 9bb0fb2830..5c3fb05c48 100644 --- a/npm/packs/blogging/package.json +++ b/npm/packs/blogging/package.json @@ -1,14 +1,14 @@ { - "version": "3.0.2", + "version": "3.0.3", "name": "@abp/blogging", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.shared": "~3.0.2", - "@abp/owl.carousel": "~3.0.2", - "@abp/prismjs": "~3.0.2", - "@abp/tui-editor": "~3.0.2" + "@abp/aspnetcore.mvc.ui.theme.shared": "~3.0.3", + "@abp/owl.carousel": "~3.0.3", + "@abp/prismjs": "~3.0.3", + "@abp/tui-editor": "~3.0.3" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" } diff --git a/npm/packs/bootstrap-datepicker/package.json b/npm/packs/bootstrap-datepicker/package.json index c0e3e17b94..14fb2bf809 100644 --- a/npm/packs/bootstrap-datepicker/package.json +++ b/npm/packs/bootstrap-datepicker/package.json @@ -1,5 +1,5 @@ { - "version": "3.0.2", + "version": "3.0.3", "name": "@abp/bootstrap-datepicker", "publishConfig": { "access": "public" diff --git a/npm/packs/bootstrap/package.json b/npm/packs/bootstrap/package.json index 91fbcfc264..9a81f60bd0 100644 --- a/npm/packs/bootstrap/package.json +++ b/npm/packs/bootstrap/package.json @@ -1,11 +1,11 @@ { - "version": "3.0.2", + "version": "3.0.3", "name": "@abp/bootstrap", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~3.0.2", + "@abp/core": "~3.0.3", "bootstrap": "^4.5.0", "bootstrap-v4-rtl": "4.4.1-2" }, diff --git a/npm/packs/chart.js/package.json b/npm/packs/chart.js/package.json index b898f40863..2a843dc8bd 100644 --- a/npm/packs/chart.js/package.json +++ b/npm/packs/chart.js/package.json @@ -1,5 +1,5 @@ { - "version": "3.0.2", + "version": "3.0.3", "name": "@abp/chart.js", "publishConfig": { "access": "public" diff --git a/npm/packs/clipboard/package.json b/npm/packs/clipboard/package.json index 00c3b7ddcd..71b94fb755 100644 --- a/npm/packs/clipboard/package.json +++ b/npm/packs/clipboard/package.json @@ -1,11 +1,11 @@ { - "version": "3.0.2", + "version": "3.0.3", "name": "@abp/clipboard", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~3.0.2", + "@abp/core": "~3.0.3", "clipboard": "^2.0.6" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/codemirror/package.json b/npm/packs/codemirror/package.json index fb0f19adcb..0251d15c78 100644 --- a/npm/packs/codemirror/package.json +++ b/npm/packs/codemirror/package.json @@ -1,11 +1,11 @@ { - "version": "3.0.2", + "version": "3.0.3", "name": "@abp/codemirror", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~3.0.2", + "@abp/core": "~3.0.3", "codemirror": "^5.54.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/core/package.json b/npm/packs/core/package.json index cd689a3da5..ebf850f06d 100644 --- a/npm/packs/core/package.json +++ b/npm/packs/core/package.json @@ -1,5 +1,5 @@ { - "version": "3.0.2", + "version": "3.0.3", "name": "@abp/core", "publishConfig": { "access": "public" diff --git a/npm/packs/datatables.net-bs4/package.json b/npm/packs/datatables.net-bs4/package.json index edf6879c93..281aae2a37 100644 --- a/npm/packs/datatables.net-bs4/package.json +++ b/npm/packs/datatables.net-bs4/package.json @@ -1,11 +1,11 @@ { - "version": "3.0.2", + "version": "3.0.3", "name": "@abp/datatables.net-bs4", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/datatables.net": "~3.0.2", + "@abp/datatables.net": "~3.0.3", "datatables.net-bs4": "^1.10.21" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/datatables.net/package.json b/npm/packs/datatables.net/package.json index e442c7066e..be92433319 100644 --- a/npm/packs/datatables.net/package.json +++ b/npm/packs/datatables.net/package.json @@ -1,11 +1,11 @@ { - "version": "3.0.2", + "version": "3.0.3", "name": "@abp/datatables.net", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/jquery": "~3.0.2", + "@abp/jquery": "~3.0.3", "datatables.net": "^1.10.21" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/docs/package.json b/npm/packs/docs/package.json index e20d30d0d7..dd3f63835d 100644 --- a/npm/packs/docs/package.json +++ b/npm/packs/docs/package.json @@ -1,15 +1,15 @@ { - "version": "3.0.2", + "version": "3.0.3", "name": "@abp/docs", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/anchor-js": "~3.0.2", - "@abp/clipboard": "~3.0.2", - "@abp/malihu-custom-scrollbar-plugin": "~3.0.2", - "@abp/popper.js": "~3.0.2", - "@abp/prismjs": "~3.0.2" + "@abp/anchor-js": "~3.0.3", + "@abp/clipboard": "~3.0.3", + "@abp/malihu-custom-scrollbar-plugin": "~3.0.3", + "@abp/popper.js": "~3.0.3", + "@abp/prismjs": "~3.0.3" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" } diff --git a/npm/packs/flag-icon-css/package.json b/npm/packs/flag-icon-css/package.json index b03f436110..6446aa548c 100644 --- a/npm/packs/flag-icon-css/package.json +++ b/npm/packs/flag-icon-css/package.json @@ -1,5 +1,5 @@ { - "version": "3.0.2", + "version": "3.0.3", "name": "@abp/flag-icon-css", "publishConfig": { "access": "public" diff --git a/npm/packs/font-awesome/package.json b/npm/packs/font-awesome/package.json index 07696dc4a5..b3ebd059f7 100644 --- a/npm/packs/font-awesome/package.json +++ b/npm/packs/font-awesome/package.json @@ -1,11 +1,11 @@ { - "version": "3.0.2", + "version": "3.0.3", "name": "@abp/font-awesome", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~3.0.2", + "@abp/core": "~3.0.3", "@fortawesome/fontawesome-free": "^5.13.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/highlight.js/package.json b/npm/packs/highlight.js/package.json index 2639867005..154ee907f2 100644 --- a/npm/packs/highlight.js/package.json +++ b/npm/packs/highlight.js/package.json @@ -1,11 +1,11 @@ { - "version": "3.0.2", + "version": "3.0.3", "name": "@abp/highlight.js", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~3.0.2" + "@abp/core": "~3.0.3" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" } diff --git a/npm/packs/jquery-form/package.json b/npm/packs/jquery-form/package.json index 9712017bf2..4696d59b08 100644 --- a/npm/packs/jquery-form/package.json +++ b/npm/packs/jquery-form/package.json @@ -1,11 +1,11 @@ { - "version": "3.0.2", + "version": "3.0.3", "name": "@abp/jquery-form", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/jquery": "~3.0.2", + "@abp/jquery": "~3.0.3", "jquery-form": "^4.3.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/jquery-validation-unobtrusive/package.json b/npm/packs/jquery-validation-unobtrusive/package.json index 8557d67f96..3c5d4b9528 100644 --- a/npm/packs/jquery-validation-unobtrusive/package.json +++ b/npm/packs/jquery-validation-unobtrusive/package.json @@ -1,11 +1,11 @@ { - "version": "3.0.2", + "version": "3.0.3", "name": "@abp/jquery-validation-unobtrusive", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/jquery-validation": "~3.0.2", + "@abp/jquery-validation": "~3.0.3", "jquery-validation-unobtrusive": "^3.2.11" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/jquery-validation/package.json b/npm/packs/jquery-validation/package.json index 0d2c0c3c41..e2304f5e41 100644 --- a/npm/packs/jquery-validation/package.json +++ b/npm/packs/jquery-validation/package.json @@ -1,11 +1,11 @@ { - "version": "3.0.2", + "version": "3.0.3", "name": "@abp/jquery-validation", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/jquery": "~3.0.2", + "@abp/jquery": "~3.0.3", "jquery-validation": "^1.19.2" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/jquery/package.json b/npm/packs/jquery/package.json index 078a778787..2e3b11397f 100644 --- a/npm/packs/jquery/package.json +++ b/npm/packs/jquery/package.json @@ -1,11 +1,11 @@ { - "version": "3.0.2", + "version": "3.0.3", "name": "@abp/jquery", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~3.0.2", + "@abp/core": "~3.0.3", "jquery": "~3.5.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/jstree/package.json b/npm/packs/jstree/package.json index 26871e45d0..bdfffec2ee 100644 --- a/npm/packs/jstree/package.json +++ b/npm/packs/jstree/package.json @@ -1,11 +1,11 @@ { - "version": "3.0.2", + "version": "3.0.3", "name": "@abp/jstree", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/jquery": "~3.0.2", + "@abp/jquery": "~3.0.3", "jstree": "^3.3.9" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/lodash/package.json b/npm/packs/lodash/package.json index 82171476e3..2246e9a160 100644 --- a/npm/packs/lodash/package.json +++ b/npm/packs/lodash/package.json @@ -1,11 +1,11 @@ { - "version": "3.0.2", + "version": "3.0.3", "name": "@abp/lodash", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~3.0.2", + "@abp/core": "~3.0.3", "lodash": "^4.17.15" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/luxon/package.json b/npm/packs/luxon/package.json index 0d11b5954f..74122cc0fe 100644 --- a/npm/packs/luxon/package.json +++ b/npm/packs/luxon/package.json @@ -1,5 +1,5 @@ { - "version": "3.0.2", + "version": "3.0.3", "name": "@abp/luxon", "publishConfig": { "access": "public" diff --git a/npm/packs/malihu-custom-scrollbar-plugin/package.json b/npm/packs/malihu-custom-scrollbar-plugin/package.json index a56ba4aec6..0b94c760dd 100644 --- a/npm/packs/malihu-custom-scrollbar-plugin/package.json +++ b/npm/packs/malihu-custom-scrollbar-plugin/package.json @@ -1,11 +1,11 @@ { - "version": "3.0.2", + "version": "3.0.3", "name": "@abp/malihu-custom-scrollbar-plugin", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~3.0.2", + "@abp/core": "~3.0.3", "malihu-custom-scrollbar-plugin": "^3.1.5" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/markdown-it/package.json b/npm/packs/markdown-it/package.json index 4f8494f924..e88fb99a08 100644 --- a/npm/packs/markdown-it/package.json +++ b/npm/packs/markdown-it/package.json @@ -1,11 +1,11 @@ { - "version": "3.0.2", + "version": "3.0.3", "name": "@abp/markdown-it", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~3.0.2", + "@abp/core": "~3.0.3", "markdown-it": "^11.0.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/owl.carousel/package.json b/npm/packs/owl.carousel/package.json index fbff287a3d..eaa13a3c86 100644 --- a/npm/packs/owl.carousel/package.json +++ b/npm/packs/owl.carousel/package.json @@ -1,11 +1,11 @@ { - "version": "3.0.2", + "version": "3.0.3", "name": "@abp/owl.carousel", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~3.0.2", + "@abp/core": "~3.0.3", "owl.carousel": "^2.3.4" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/popper.js/package.json b/npm/packs/popper.js/package.json index e22c222814..b5b78d1b4d 100644 --- a/npm/packs/popper.js/package.json +++ b/npm/packs/popper.js/package.json @@ -1,11 +1,11 @@ { - "version": "3.0.2", + "version": "3.0.3", "name": "@abp/popper.js", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~3.0.2", + "@abp/core": "~3.0.3", "popper.js": "^1.16.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/prismjs/package.json b/npm/packs/prismjs/package.json index 97ddad7581..a402ccf74c 100644 --- a/npm/packs/prismjs/package.json +++ b/npm/packs/prismjs/package.json @@ -1,12 +1,12 @@ { - "version": "3.0.2", + "version": "3.0.3", "name": "@abp/prismjs", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/clipboard": "~3.0.2", - "@abp/core": "~3.0.2", + "@abp/clipboard": "~3.0.3", + "@abp/core": "~3.0.3", "prismjs": "^1.20.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/select2/package.json b/npm/packs/select2/package.json index ae587cec43..dfb12094c6 100644 --- a/npm/packs/select2/package.json +++ b/npm/packs/select2/package.json @@ -1,11 +1,11 @@ { - "version": "3.0.2", + "version": "3.0.3", "name": "@abp/select2", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~3.0.2", + "@abp/core": "~3.0.3", "select2": "^4.0.13" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/signalr/package.json b/npm/packs/signalr/package.json index b6c004fed9..74c00e7092 100644 --- a/npm/packs/signalr/package.json +++ b/npm/packs/signalr/package.json @@ -1,11 +1,11 @@ { - "version": "3.0.2", + "version": "3.0.3", "name": "@abp/signalr", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~3.0.2", + "@abp/core": "~3.0.3", "@microsoft/signalr": "~3.1.5" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/sweetalert/package.json b/npm/packs/sweetalert/package.json index 8fa9194c73..25b7f80d72 100644 --- a/npm/packs/sweetalert/package.json +++ b/npm/packs/sweetalert/package.json @@ -1,11 +1,11 @@ { - "version": "3.0.2", + "version": "3.0.3", "name": "@abp/sweetalert", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~3.0.2", + "@abp/core": "~3.0.3", "sweetalert": "^2.1.2" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/timeago/package.json b/npm/packs/timeago/package.json index 86d977b384..e92b0d9ea4 100644 --- a/npm/packs/timeago/package.json +++ b/npm/packs/timeago/package.json @@ -1,11 +1,11 @@ { - "version": "3.0.2", + "version": "3.0.3", "name": "@abp/timeago", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/jquery": "~3.0.2", + "@abp/jquery": "~3.0.3", "timeago": "^1.6.7" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/toastr/package.json b/npm/packs/toastr/package.json index 05c4079650..eed79e9df9 100644 --- a/npm/packs/toastr/package.json +++ b/npm/packs/toastr/package.json @@ -1,11 +1,11 @@ { - "version": "3.0.2", + "version": "3.0.3", "name": "@abp/toastr", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/jquery": "~3.0.2", + "@abp/jquery": "~3.0.3", "toastr": "^2.1.4" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/tui-editor/package.json b/npm/packs/tui-editor/package.json index 284354d382..f2863bb085 100644 --- a/npm/packs/tui-editor/package.json +++ b/npm/packs/tui-editor/package.json @@ -1,14 +1,14 @@ { - "version": "3.0.2", + "version": "3.0.3", "name": "@abp/tui-editor", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/codemirror": "~3.0.2", - "@abp/highlight.js": "~3.0.2", - "@abp/jquery": "~3.0.2", - "@abp/markdown-it": "~3.0.2", + "@abp/codemirror": "~3.0.3", + "@abp/highlight.js": "~3.0.3", + "@abp/jquery": "~3.0.3", + "@abp/markdown-it": "~3.0.3", "tui-editor": "^1.4.10" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/uppy/package.json b/npm/packs/uppy/package.json index e21d21deba..7963686361 100644 --- a/npm/packs/uppy/package.json +++ b/npm/packs/uppy/package.json @@ -1,11 +1,11 @@ { - "version": "3.0.2", + "version": "3.0.3", "name": "@abp/uppy", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~3.0.2", + "@abp/core": "~3.0.3", "uppy": "^1.16.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/utils/package.json b/npm/packs/utils/package.json index 33114c4ff2..70b65b85c0 100644 --- a/npm/packs/utils/package.json +++ b/npm/packs/utils/package.json @@ -1,6 +1,6 @@ { "name": "@abp/utils", - "version": "3.0.2", + "version": "3.0.3", "scripts": { "prepublish": "yarn install --ignore-scripts && node prepublish.js", "ng": "ng", diff --git a/npm/packs/virtual-file-explorer/package.json b/npm/packs/virtual-file-explorer/package.json index f519769d11..9bcf847aec 100644 --- a/npm/packs/virtual-file-explorer/package.json +++ b/npm/packs/virtual-file-explorer/package.json @@ -1,12 +1,12 @@ { - "version": "3.0.2", + "version": "3.0.3", "name": "@abp/virtual-file-explorer", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/clipboard": "~3.0.2", - "@abp/prismjs": "~3.0.2" + "@abp/clipboard": "~3.0.3", + "@abp/prismjs": "~3.0.3" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" } diff --git a/templates/app/angular/package.json b/templates/app/angular/package.json index 6e0a283dcb..4843ccb7d8 100644 --- a/templates/app/angular/package.json +++ b/templates/app/angular/package.json @@ -12,11 +12,11 @@ }, "private": true, "dependencies": { - "@abp/ng.account": "~3.0.2", - "@abp/ng.identity": "~3.0.2", - "@abp/ng.setting-management": "~3.0.2", - "@abp/ng.tenant-management": "~3.0.2", - "@abp/ng.theme.basic": "~3.0.2", + "@abp/ng.account": "~3.0.3", + "@abp/ng.identity": "~3.0.3", + "@abp/ng.setting-management": "~3.0.3", + "@abp/ng.tenant-management": "~3.0.3", + "@abp/ng.theme.basic": "~3.0.3", "@angular/animations": "~10.0.1", "@angular/common": "~10.0.1", "@angular/compiler": "~10.0.1", diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/package.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/package.json index 5a4bf0be41..4de8e26049 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/package.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^3.0.2" + "@abp/aspnetcore.mvc.ui.theme.basic": "^3.0.3" } } \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/yarn.lock b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/yarn.lock index 06749cd92d..d3d85df4fb 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/yarn.lock +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.0.2.tgz#f971fc6afabf66cf73470e08ee8ed9ad5ac36d70" - integrity sha512-54/4SqG1Kqcj7hl4/DI5TE6ksnecKp/JNeIl/SE/Kpha23J9xothiyFVE+fE7ymZFPIy+HouGN+MIg+TDdqYTQ== +"@abp/aspnetcore.mvc.ui.theme.basic@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.0.3.tgz#d891bcff681544f759ee715f6423130bffd1a05c" + integrity sha512-iXbK+wnPqTrkyzs0MfXxOjqEptJSZC/TdCukfeOI4ozJET1Y+g+r4SOcHCagLCSljIcO7E1Y79z6LPP0/x9fJw== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~3.0.2" + "@abp/aspnetcore.mvc.ui.theme.shared" "~3.0.3" -"@abp/aspnetcore.mvc.ui.theme.shared@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.0.2.tgz#b0d6c38dc97d0bd4a010a7cc5c035ecd31c2ac87" - integrity sha512-KoltFRaJYZ6X8UB9actvkNF6TvsoftPDthyVMw/D+nstNwueWo4loYyiH7ukhZ3EpEYz7ROxDB04jQ9FaByPpw== - dependencies: - "@abp/aspnetcore.mvc.ui" "~3.0.2" - "@abp/bootstrap" "~3.0.2" - "@abp/bootstrap-datepicker" "~3.0.2" - "@abp/datatables.net-bs4" "~3.0.2" - "@abp/font-awesome" "~3.0.2" - "@abp/jquery-form" "~3.0.2" - "@abp/jquery-validation-unobtrusive" "~3.0.2" - "@abp/lodash" "~3.0.2" - "@abp/luxon" "~3.0.2" - "@abp/malihu-custom-scrollbar-plugin" "~3.0.2" - "@abp/select2" "~3.0.2" - "@abp/sweetalert" "~3.0.2" - "@abp/timeago" "~3.0.2" - "@abp/toastr" "~3.0.2" - -"@abp/aspnetcore.mvc.ui@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.0.2.tgz#2a7a481488681f41ed756b434a18a3a03181d366" - integrity sha512-TfJhqNSC66crMyJSRWswTP6bli2WYOZsBmkMH7ziei/uSp7KMUUM16n47qPGEye/jx7E4P3NYG0WH7wCyhgS6A== +"@abp/aspnetcore.mvc.ui.theme.shared@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.0.3.tgz#fcea3dcea6a85dd88aa370578dca6e77fc80891c" + integrity sha512-ZuBBpH4Rlvr2Y6FpYt7FIiJwZLBmrnB8xJmP993AQtx+s39sLK3enb+poipkUBnq1N3yxmct06j7wsIlsstKXw== + dependencies: + "@abp/aspnetcore.mvc.ui" "~3.0.3" + "@abp/bootstrap" "~3.0.3" + "@abp/bootstrap-datepicker" "~3.0.3" + "@abp/datatables.net-bs4" "~3.0.3" + "@abp/font-awesome" "~3.0.3" + "@abp/jquery-form" "~3.0.3" + "@abp/jquery-validation-unobtrusive" "~3.0.3" + "@abp/lodash" "~3.0.3" + "@abp/luxon" "~3.0.3" + "@abp/malihu-custom-scrollbar-plugin" "~3.0.3" + "@abp/select2" "~3.0.3" + "@abp/sweetalert" "~3.0.3" + "@abp/timeago" "~3.0.3" + "@abp/toastr" "~3.0.3" + +"@abp/aspnetcore.mvc.ui@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.0.3.tgz#88e3350a839434cee38f9497d160e5f23ef5ac28" + integrity sha512-C4cSlnhGYNGQul/0WD9HP87knBQ/bj2q45Jt73ugn9RygEJVjhXPv30+H4sl1GZXmEg+kLgdAoNjM/Iipe+egQ== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,138 +41,138 @@ path "^0.12.7" rimraf "^3.0.2" -"@abp/bootstrap-datepicker@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.0.2.tgz#4c4bc2d667d82f299df753a741de0de3333db244" - integrity sha512-vlsKrW0XraHnVJlkv5zm4xVO/+LX9Fz9x6x2B5nHS2DnMnusENaCyvynWwIrm95/lQyXbkUQ1rjnNpI8/5p5TQ== +"@abp/bootstrap-datepicker@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.0.3.tgz#866d4b3b83bb548e7d71066408c5ab344ce33473" + integrity sha512-nnzm9rxu/vKIUdQQMlN/kGqL+DbOg8FmN81KyWJ23KmisViLVqDeTEJBHPOJ3WuzRN+SacoreiL4f3C+7YiiXQ== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.0.2.tgz#129b119594cf1ff211736b4295c254bcd7d2174f" - integrity sha512-cbJSsaxVEkP+pvVH+2GaYDn/u2u2sPF8oOQb89ZYOy46d+gVph8ZMuJ4f6pefei8Ps2h+q1JPbb8UPkzyI53Ig== +"@abp/bootstrap@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.0.3.tgz#1d0ce60eff1dc67642147f0f2897eb13f6353d09" + integrity sha512-Vd/bdyh4bnp3vz4QsPjlc8Wi1qfaRSBDekWbHWkNq568BLXSMkK6ucugGAvC7kshBj3bbSpHd9xWUImim0+Q/w== dependencies: - "@abp/core" "~3.0.2" + "@abp/core" "~3.0.3" bootstrap "^4.5.0" bootstrap-v4-rtl "4.4.1-2" -"@abp/core@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.0.2.tgz#88f4c8484a743f50c8980c1bb26cb79f453b9e3f" - integrity sha512-qMwY3YCpzTRmAkPH1u5ViduWjZdRgS9uu7chV+E+Iq7wknJ/JPtE/TrAUYbz/QhA7LFXoA74ZjbOeBW48x/cQA== +"@abp/core@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.0.3.tgz#05e45a5533f5a6f9014b4a4a87c73d96b7c071dc" + integrity sha512-lNrG0cYbHQHH6i2B5yfBL7iU3rl3TL66H+tDVCBqXNlnGAFOS48RG/jE2mMw54U8xgtwNczwBpgGVWAqU3uKig== dependencies: "@abp/utils" "~2.9.0" -"@abp/datatables.net-bs4@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.0.2.tgz#f16291b21352a07fe509daeec5b18da56c366157" - integrity sha512-jXM1B2hcNQzAhnMvCyeBc1UWeNWKTtChLk5QYQuQFbxifIT9WPT1Rs9+Q4QlV1VgTq2xzkOnZmXFjCmeQvMWgg== +"@abp/datatables.net-bs4@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.0.3.tgz#627a64f4fdc8c7fb7f4e51232c4147b5f2cfe041" + integrity sha512-seZR/yu8p0SJMafVCwYA5YAi7F2IMMo6cBJsF+phTBrPGBaXd63arNK7ZiXYp3RfwnafglotKNgswO0lYRMXKw== dependencies: - "@abp/datatables.net" "~3.0.2" + "@abp/datatables.net" "~3.0.3" datatables.net-bs4 "^1.10.21" -"@abp/datatables.net@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.0.2.tgz#13b0812f448e4cde29518fd38855d4eb285e8d52" - integrity sha512-KKJ11FxJmMuY+/5MqECnyUfVGrap0M4RYfVzt4wunfNA8xOufSMdsak1AbZU9/f6ygc4BTvVQV+ikmDpeaNHiQ== +"@abp/datatables.net@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.0.3.tgz#2a8eed257f943cc9d477eabe2501ead9fcc37d76" + integrity sha512-ULmYJZ3RU1kisMDCtB1Wq8tBmIn09QKW+asB33y9bT4td/cEDqULyJXbwNZYIzqA6VPzHenxiJbciFkFwPwkaQ== dependencies: - "@abp/jquery" "~3.0.2" + "@abp/jquery" "~3.0.3" datatables.net "^1.10.21" -"@abp/font-awesome@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.0.2.tgz#85abed5014e1324925142ee3e81f23f9fbffd264" - integrity sha512-z4sw7LPQ2meajQbfCNu1I7lLho6K5cDCU1RZzHfTvry3FWRNrG5I5amvqEgC7/IAzz8WcRk/6O93rJFDuXKiHg== +"@abp/font-awesome@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.0.3.tgz#e0fb803c04c2f3f36017aa8a065a7f20245a2b50" + integrity sha512-UY9i35H+3EMqBszLdLyM72TRVp+hDe8CFs8q2PBNzoIsrMGqx4mKFSTxUsts03USqQ+4v6D08M056D3a0oS+DQ== dependencies: - "@abp/core" "~3.0.2" + "@abp/core" "~3.0.3" "@fortawesome/fontawesome-free" "^5.13.0" -"@abp/jquery-form@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.0.2.tgz#6c1a3e1ae19add336bdf0c0d7ec8ff041303002d" - integrity sha512-UhjfO2h4ZnaYEncZ3ez8AnLzhg6D0oHy1GFjs3se+0u7rFR2iJ7YN3VlEeHweZokAzlVwoSrNXOKYRkhL8V75g== +"@abp/jquery-form@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.0.3.tgz#bcb6ca18c5671914fd87bb9651feef57142f9ae3" + integrity sha512-VokAc7jgBQAEcu15FSJPWLJcL+/mrFFwia/DdpkPyU+SrXHgD35Gu7Kb+/knQcVKNCM80mCH5gZXDbaA5Hrt3w== dependencies: - "@abp/jquery" "~3.0.2" + "@abp/jquery" "~3.0.3" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.0.2.tgz#50dc6b9b0366b83790ec9d342eb9bd397037102b" - integrity sha512-xx2A0E5I7KFPU1wRK7edvwYk+gcjMFRnnhJYwg1CELAmzeaYORDo6gwXqywcyIIEpFSIKcqIMih4A/mFObq85w== +"@abp/jquery-validation-unobtrusive@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.0.3.tgz#e4247a56149306aa69a8df1017f7da9a07abce26" + integrity sha512-Ig3UyfPj5qyP2BCLYeaihMzzj2p4Hkh1uJX6Bm2qShRKDW3Br5D0z3JIEXiGvzukGTdCnTG+mwGQowZfdxgdUQ== dependencies: - "@abp/jquery-validation" "~3.0.2" + "@abp/jquery-validation" "~3.0.3" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.0.2.tgz#9477215ae684b394ab6c5a0deeac7a3615c2ff18" - integrity sha512-gJQrjScSJeAEMtR348QdsjtdMFut2GCrt070VaNrm0PpM7lhEue6Qq+M6/HJt44puRyyJxoxg6NJvnFm2RKbVQ== +"@abp/jquery-validation@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.0.3.tgz#c95f5b9fa5d6ec973bffb0e98d08317707a95b83" + integrity sha512-Ss38QtC4IrDbICNJT9fTNWka6ekmhrfCrArOeVR8O47BIx9FRl2IBX8TBjuC3ZXv9c1oNxTICmmSCgQYfdQ02A== dependencies: - "@abp/jquery" "~3.0.2" + "@abp/jquery" "~3.0.3" jquery-validation "^1.19.2" -"@abp/jquery@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.0.2.tgz#d0e2bc7cecb4e6b4841b34779c81996b8f58e208" - integrity sha512-Xx/Qavk0khWu8H6vFi8IvrDu3LtWQCXo+NXi6qF2hPFgC2i9iWu9NQLAO5Wp9rZ+ZcAoLiQfSLYe2ZA9gNufcg== +"@abp/jquery@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.0.3.tgz#b9b6b5c110c116d484b090a485503eb1e5f7f8fb" + integrity sha512-EVkCdy8bGHZ1Za/H7Iw5e/maiihx3Hn8VvU//D6U3FlC3D/Fo7hYEPOVvlVtpco6J1e0wMe9dUnCQxjPDBfQGw== dependencies: - "@abp/core" "~3.0.2" + "@abp/core" "~3.0.3" jquery "~3.5.1" -"@abp/lodash@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.0.2.tgz#922fcf503952df0ec9944529d2c5cda1c274eaa5" - integrity sha512-RxboDnNPz8VZQiOW6gu51sbZ7lkXJ7snUyYn1luKk6IVZUoQf3l+LmJ1rLYiyprMniwIcjHfUNYJOu3sk02lig== +"@abp/lodash@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.0.3.tgz#4289cc71d83ed3ec29beacd784ee68b6ac575274" + integrity sha512-7UIagvq204xsyNQq7yucSHRj3BPE/yvTUELLEDWmjBQPkjB9GukeoeYqUxderEbVboCLIPYgGCwAWz9IyBtvFQ== dependencies: - "@abp/core" "~3.0.2" + "@abp/core" "~3.0.3" lodash "^4.17.15" -"@abp/luxon@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.0.2.tgz#5c57ac2bd834804e725bc3ceb4014cbf2ac7afac" - integrity sha512-ysQ4/MWFWxXdu+QFSBSAufrTCyFF5yZC8ByMYk9ezvkRzzUl+Q4mO1cKV7IXDD+saQeAljKEehvyXS9hpGqf0A== +"@abp/luxon@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.0.3.tgz#e2eb7db08c07efbd877a7216bf4f6aca18e24473" + integrity sha512-L7rzo7LLV9Kn92Fdk8g0+CqVsxedRs1cLmDA2QDn4idJ728kYJjSZpRWPjLW087dkSBen0Gtr7gxUn6HiXizpA== dependencies: luxon "^1.24.1" -"@abp/malihu-custom-scrollbar-plugin@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.0.2.tgz#809c20a750b82872fa8e3a57d67c4e50ccb12ce5" - integrity sha512-7GkH4HhxnSciZa/hLR78AB1KYKoic0skU0A/MEYl3E/LWoQ5KpvRDsbhQw90ZKnfXOV+shb7P1sxNlz3bdI/hQ== +"@abp/malihu-custom-scrollbar-plugin@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.0.3.tgz#77d45ac9044ebbe5a80a5764f4a55f1943c813f1" + integrity sha512-cJfdJexrZjJfoz+mMWXCFgi6gDa0fq9OAcpxZGz5aVeIrNOnWdEvjT02beowU9Rhl6vL6jWxpqaWt3H4jiGOSw== dependencies: - "@abp/core" "~3.0.2" + "@abp/core" "~3.0.3" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.0.2.tgz#8f970c99c1203a43c0651c0a5c27f6b056442386" - integrity sha512-YgIbaZWoaUzoz8TJQOi7ltPjLHtP0x7unPVnzs94hEPsIHaIBuITZNws93UpF5OJ0peVYCcdPpJXBjGW79kK1A== +"@abp/select2@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.0.3.tgz#5545502067f12bd9e502133dc9c0f7b73adf0d18" + integrity sha512-tmQN1TfO3szU6iw/K+YjoIqKeD6hnCVNIedg0l2YqTyZfo9QREEzY8CRqQELphhGkHmsMOl5tjXeD9BJVMna2g== dependencies: - "@abp/core" "~3.0.2" + "@abp/core" "~3.0.3" select2 "^4.0.13" -"@abp/sweetalert@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.0.2.tgz#c3f1fb7c56ba965ea0717ab80e4cae83b01c7bc2" - integrity sha512-HDNFt9PfFZDYMQ72m4l9M56WlDsG9k9Y51LnXp6hQIbQcw/e2wBi7CGfd6qsspQhoiyjhelz2/EDpBsubE5J7w== +"@abp/sweetalert@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.0.3.tgz#a167d49303833d0821d63e47e3882b9dcb5a66f4" + integrity sha512-RMBkZ4Tmm2qcW88noswsrnD1cik0R3q2GCDV1Ngm2V+u2KbbSbtLN2B+YQEU1SwDop0Miml8eNk2GeRLYT6kbA== dependencies: - "@abp/core" "~3.0.2" + "@abp/core" "~3.0.3" sweetalert "^2.1.2" -"@abp/timeago@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.0.2.tgz#f7aa843c8a934982af4e58a9e3a4bc4860ba2d84" - integrity sha512-PCTBRKqbHq3Qu8WPHIvNz2M+LY4tlR5URmJjvxuK+ckJzPI8bd7XsonJ1naf2BYyC1THlmRH1jA45yaTP8/juw== +"@abp/timeago@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.0.3.tgz#1fa2f4814babc965a2a95149b432f1fc466ad18a" + integrity sha512-iUG9RfV8vSernjMoojlnManZ+QTaRlMOvikeHQR8MaPYH/XC2sRLNoLN0sYTC5F/xzLQU4MSQFXZ54dobUyYfA== dependencies: - "@abp/jquery" "~3.0.2" + "@abp/jquery" "~3.0.3" timeago "^1.6.7" -"@abp/toastr@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.0.2.tgz#97e74c2bb5c86b400c831ad7c8543a7caea8c6c1" - integrity sha512-UqQX/1PZ0scm5Agparb8raM/L6yiVVuksfS7WKpeq3YtAp1Wd2og+7PxnAxeUlWchzHXgfsuBioPjLMvVTK0VQ== +"@abp/toastr@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.0.3.tgz#1f4421f03c6c69bd4ca93123953cdc4ac3abfd99" + integrity sha512-phMAFhJcLbti09da3WdDx5YZ2zzkh/Xgag2iJWunnnt5G+dH/4WTN1sLdIo06WwDLjArz19c2ZHqV52uwb2vXA== dependencies: - "@abp/jquery" "~3.0.2" + "@abp/jquery" "~3.0.3" toastr "^2.1.4" "@abp/utils@~2.9.0": diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/package.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/package.json index 782e4f2330..dc3297a937 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/package.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/package.json @@ -3,6 +3,6 @@ "name": "my-app-identityserver", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^3.0.2" + "@abp/aspnetcore.mvc.ui.theme.basic": "^3.0.3" } } \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/yarn.lock b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/yarn.lock index 6207b7dea1..422897f2bf 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/yarn.lock +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.0.2.tgz#f971fc6afabf66cf73470e08ee8ed9ad5ac36d70" - integrity sha512-54/4SqG1Kqcj7hl4/DI5TE6ksnecKp/JNeIl/SE/Kpha23J9xothiyFVE+fE7ymZFPIy+HouGN+MIg+TDdqYTQ== +"@abp/aspnetcore.mvc.ui.theme.basic@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.0.3.tgz#d891bcff681544f759ee715f6423130bffd1a05c" + integrity sha512-iXbK+wnPqTrkyzs0MfXxOjqEptJSZC/TdCukfeOI4ozJET1Y+g+r4SOcHCagLCSljIcO7E1Y79z6LPP0/x9fJw== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~3.0.2" + "@abp/aspnetcore.mvc.ui.theme.shared" "~3.0.3" -"@abp/aspnetcore.mvc.ui.theme.shared@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.0.2.tgz#b0d6c38dc97d0bd4a010a7cc5c035ecd31c2ac87" - integrity sha512-KoltFRaJYZ6X8UB9actvkNF6TvsoftPDthyVMw/D+nstNwueWo4loYyiH7ukhZ3EpEYz7ROxDB04jQ9FaByPpw== - dependencies: - "@abp/aspnetcore.mvc.ui" "~3.0.2" - "@abp/bootstrap" "~3.0.2" - "@abp/bootstrap-datepicker" "~3.0.2" - "@abp/datatables.net-bs4" "~3.0.2" - "@abp/font-awesome" "~3.0.2" - "@abp/jquery-form" "~3.0.2" - "@abp/jquery-validation-unobtrusive" "~3.0.2" - "@abp/lodash" "~3.0.2" - "@abp/luxon" "~3.0.2" - "@abp/malihu-custom-scrollbar-plugin" "~3.0.2" - "@abp/select2" "~3.0.2" - "@abp/sweetalert" "~3.0.2" - "@abp/timeago" "~3.0.2" - "@abp/toastr" "~3.0.2" - -"@abp/aspnetcore.mvc.ui@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.0.2.tgz#2a7a481488681f41ed756b434a18a3a03181d366" - integrity sha512-TfJhqNSC66crMyJSRWswTP6bli2WYOZsBmkMH7ziei/uSp7KMUUM16n47qPGEye/jx7E4P3NYG0WH7wCyhgS6A== +"@abp/aspnetcore.mvc.ui.theme.shared@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.0.3.tgz#fcea3dcea6a85dd88aa370578dca6e77fc80891c" + integrity sha512-ZuBBpH4Rlvr2Y6FpYt7FIiJwZLBmrnB8xJmP993AQtx+s39sLK3enb+poipkUBnq1N3yxmct06j7wsIlsstKXw== + dependencies: + "@abp/aspnetcore.mvc.ui" "~3.0.3" + "@abp/bootstrap" "~3.0.3" + "@abp/bootstrap-datepicker" "~3.0.3" + "@abp/datatables.net-bs4" "~3.0.3" + "@abp/font-awesome" "~3.0.3" + "@abp/jquery-form" "~3.0.3" + "@abp/jquery-validation-unobtrusive" "~3.0.3" + "@abp/lodash" "~3.0.3" + "@abp/luxon" "~3.0.3" + "@abp/malihu-custom-scrollbar-plugin" "~3.0.3" + "@abp/select2" "~3.0.3" + "@abp/sweetalert" "~3.0.3" + "@abp/timeago" "~3.0.3" + "@abp/toastr" "~3.0.3" + +"@abp/aspnetcore.mvc.ui@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.0.3.tgz#88e3350a839434cee38f9497d160e5f23ef5ac28" + integrity sha512-C4cSlnhGYNGQul/0WD9HP87knBQ/bj2q45Jt73ugn9RygEJVjhXPv30+H4sl1GZXmEg+kLgdAoNjM/Iipe+egQ== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,138 +41,138 @@ path "^0.12.7" rimraf "^3.0.2" -"@abp/bootstrap-datepicker@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.0.2.tgz#4c4bc2d667d82f299df753a741de0de3333db244" - integrity sha512-vlsKrW0XraHnVJlkv5zm4xVO/+LX9Fz9x6x2B5nHS2DnMnusENaCyvynWwIrm95/lQyXbkUQ1rjnNpI8/5p5TQ== +"@abp/bootstrap-datepicker@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.0.3.tgz#866d4b3b83bb548e7d71066408c5ab344ce33473" + integrity sha512-nnzm9rxu/vKIUdQQMlN/kGqL+DbOg8FmN81KyWJ23KmisViLVqDeTEJBHPOJ3WuzRN+SacoreiL4f3C+7YiiXQ== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.0.2.tgz#129b119594cf1ff211736b4295c254bcd7d2174f" - integrity sha512-cbJSsaxVEkP+pvVH+2GaYDn/u2u2sPF8oOQb89ZYOy46d+gVph8ZMuJ4f6pefei8Ps2h+q1JPbb8UPkzyI53Ig== +"@abp/bootstrap@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.0.3.tgz#1d0ce60eff1dc67642147f0f2897eb13f6353d09" + integrity sha512-Vd/bdyh4bnp3vz4QsPjlc8Wi1qfaRSBDekWbHWkNq568BLXSMkK6ucugGAvC7kshBj3bbSpHd9xWUImim0+Q/w== dependencies: - "@abp/core" "~3.0.2" + "@abp/core" "~3.0.3" bootstrap "^4.5.0" bootstrap-v4-rtl "4.4.1-2" -"@abp/core@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.0.2.tgz#88f4c8484a743f50c8980c1bb26cb79f453b9e3f" - integrity sha512-qMwY3YCpzTRmAkPH1u5ViduWjZdRgS9uu7chV+E+Iq7wknJ/JPtE/TrAUYbz/QhA7LFXoA74ZjbOeBW48x/cQA== +"@abp/core@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.0.3.tgz#05e45a5533f5a6f9014b4a4a87c73d96b7c071dc" + integrity sha512-lNrG0cYbHQHH6i2B5yfBL7iU3rl3TL66H+tDVCBqXNlnGAFOS48RG/jE2mMw54U8xgtwNczwBpgGVWAqU3uKig== dependencies: "@abp/utils" "~2.9.0" -"@abp/datatables.net-bs4@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.0.2.tgz#f16291b21352a07fe509daeec5b18da56c366157" - integrity sha512-jXM1B2hcNQzAhnMvCyeBc1UWeNWKTtChLk5QYQuQFbxifIT9WPT1Rs9+Q4QlV1VgTq2xzkOnZmXFjCmeQvMWgg== +"@abp/datatables.net-bs4@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.0.3.tgz#627a64f4fdc8c7fb7f4e51232c4147b5f2cfe041" + integrity sha512-seZR/yu8p0SJMafVCwYA5YAi7F2IMMo6cBJsF+phTBrPGBaXd63arNK7ZiXYp3RfwnafglotKNgswO0lYRMXKw== dependencies: - "@abp/datatables.net" "~3.0.2" + "@abp/datatables.net" "~3.0.3" datatables.net-bs4 "^1.10.21" -"@abp/datatables.net@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.0.2.tgz#13b0812f448e4cde29518fd38855d4eb285e8d52" - integrity sha512-KKJ11FxJmMuY+/5MqECnyUfVGrap0M4RYfVzt4wunfNA8xOufSMdsak1AbZU9/f6ygc4BTvVQV+ikmDpeaNHiQ== +"@abp/datatables.net@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.0.3.tgz#2a8eed257f943cc9d477eabe2501ead9fcc37d76" + integrity sha512-ULmYJZ3RU1kisMDCtB1Wq8tBmIn09QKW+asB33y9bT4td/cEDqULyJXbwNZYIzqA6VPzHenxiJbciFkFwPwkaQ== dependencies: - "@abp/jquery" "~3.0.2" + "@abp/jquery" "~3.0.3" datatables.net "^1.10.21" -"@abp/font-awesome@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.0.2.tgz#85abed5014e1324925142ee3e81f23f9fbffd264" - integrity sha512-z4sw7LPQ2meajQbfCNu1I7lLho6K5cDCU1RZzHfTvry3FWRNrG5I5amvqEgC7/IAzz8WcRk/6O93rJFDuXKiHg== +"@abp/font-awesome@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.0.3.tgz#e0fb803c04c2f3f36017aa8a065a7f20245a2b50" + integrity sha512-UY9i35H+3EMqBszLdLyM72TRVp+hDe8CFs8q2PBNzoIsrMGqx4mKFSTxUsts03USqQ+4v6D08M056D3a0oS+DQ== dependencies: - "@abp/core" "~3.0.2" + "@abp/core" "~3.0.3" "@fortawesome/fontawesome-free" "^5.13.0" -"@abp/jquery-form@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.0.2.tgz#6c1a3e1ae19add336bdf0c0d7ec8ff041303002d" - integrity sha512-UhjfO2h4ZnaYEncZ3ez8AnLzhg6D0oHy1GFjs3se+0u7rFR2iJ7YN3VlEeHweZokAzlVwoSrNXOKYRkhL8V75g== +"@abp/jquery-form@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.0.3.tgz#bcb6ca18c5671914fd87bb9651feef57142f9ae3" + integrity sha512-VokAc7jgBQAEcu15FSJPWLJcL+/mrFFwia/DdpkPyU+SrXHgD35Gu7Kb+/knQcVKNCM80mCH5gZXDbaA5Hrt3w== dependencies: - "@abp/jquery" "~3.0.2" + "@abp/jquery" "~3.0.3" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.0.2.tgz#50dc6b9b0366b83790ec9d342eb9bd397037102b" - integrity sha512-xx2A0E5I7KFPU1wRK7edvwYk+gcjMFRnnhJYwg1CELAmzeaYORDo6gwXqywcyIIEpFSIKcqIMih4A/mFObq85w== +"@abp/jquery-validation-unobtrusive@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.0.3.tgz#e4247a56149306aa69a8df1017f7da9a07abce26" + integrity sha512-Ig3UyfPj5qyP2BCLYeaihMzzj2p4Hkh1uJX6Bm2qShRKDW3Br5D0z3JIEXiGvzukGTdCnTG+mwGQowZfdxgdUQ== dependencies: - "@abp/jquery-validation" "~3.0.2" + "@abp/jquery-validation" "~3.0.3" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.0.2.tgz#9477215ae684b394ab6c5a0deeac7a3615c2ff18" - integrity sha512-gJQrjScSJeAEMtR348QdsjtdMFut2GCrt070VaNrm0PpM7lhEue6Qq+M6/HJt44puRyyJxoxg6NJvnFm2RKbVQ== +"@abp/jquery-validation@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.0.3.tgz#c95f5b9fa5d6ec973bffb0e98d08317707a95b83" + integrity sha512-Ss38QtC4IrDbICNJT9fTNWka6ekmhrfCrArOeVR8O47BIx9FRl2IBX8TBjuC3ZXv9c1oNxTICmmSCgQYfdQ02A== dependencies: - "@abp/jquery" "~3.0.2" + "@abp/jquery" "~3.0.3" jquery-validation "^1.19.2" -"@abp/jquery@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.0.2.tgz#d0e2bc7cecb4e6b4841b34779c81996b8f58e208" - integrity sha512-Xx/Qavk0khWu8H6vFi8IvrDu3LtWQCXo+NXi6qF2hPFgC2i9iWu9NQLAO5Wp9rZ+ZcAoLiQfSLYe2ZA9gNufcg== +"@abp/jquery@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.0.3.tgz#b9b6b5c110c116d484b090a485503eb1e5f7f8fb" + integrity sha512-EVkCdy8bGHZ1Za/H7Iw5e/maiihx3Hn8VvU//D6U3FlC3D/Fo7hYEPOVvlVtpco6J1e0wMe9dUnCQxjPDBfQGw== dependencies: - "@abp/core" "~3.0.2" + "@abp/core" "~3.0.3" jquery "~3.5.1" -"@abp/lodash@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.0.2.tgz#922fcf503952df0ec9944529d2c5cda1c274eaa5" - integrity sha512-RxboDnNPz8VZQiOW6gu51sbZ7lkXJ7snUyYn1luKk6IVZUoQf3l+LmJ1rLYiyprMniwIcjHfUNYJOu3sk02lig== +"@abp/lodash@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.0.3.tgz#4289cc71d83ed3ec29beacd784ee68b6ac575274" + integrity sha512-7UIagvq204xsyNQq7yucSHRj3BPE/yvTUELLEDWmjBQPkjB9GukeoeYqUxderEbVboCLIPYgGCwAWz9IyBtvFQ== dependencies: - "@abp/core" "~3.0.2" + "@abp/core" "~3.0.3" lodash "^4.17.15" -"@abp/luxon@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.0.2.tgz#5c57ac2bd834804e725bc3ceb4014cbf2ac7afac" - integrity sha512-ysQ4/MWFWxXdu+QFSBSAufrTCyFF5yZC8ByMYk9ezvkRzzUl+Q4mO1cKV7IXDD+saQeAljKEehvyXS9hpGqf0A== +"@abp/luxon@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.0.3.tgz#e2eb7db08c07efbd877a7216bf4f6aca18e24473" + integrity sha512-L7rzo7LLV9Kn92Fdk8g0+CqVsxedRs1cLmDA2QDn4idJ728kYJjSZpRWPjLW087dkSBen0Gtr7gxUn6HiXizpA== dependencies: luxon "^1.24.1" -"@abp/malihu-custom-scrollbar-plugin@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.0.2.tgz#809c20a750b82872fa8e3a57d67c4e50ccb12ce5" - integrity sha512-7GkH4HhxnSciZa/hLR78AB1KYKoic0skU0A/MEYl3E/LWoQ5KpvRDsbhQw90ZKnfXOV+shb7P1sxNlz3bdI/hQ== +"@abp/malihu-custom-scrollbar-plugin@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.0.3.tgz#77d45ac9044ebbe5a80a5764f4a55f1943c813f1" + integrity sha512-cJfdJexrZjJfoz+mMWXCFgi6gDa0fq9OAcpxZGz5aVeIrNOnWdEvjT02beowU9Rhl6vL6jWxpqaWt3H4jiGOSw== dependencies: - "@abp/core" "~3.0.2" + "@abp/core" "~3.0.3" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.0.2.tgz#8f970c99c1203a43c0651c0a5c27f6b056442386" - integrity sha512-YgIbaZWoaUzoz8TJQOi7ltPjLHtP0x7unPVnzs94hEPsIHaIBuITZNws93UpF5OJ0peVYCcdPpJXBjGW79kK1A== +"@abp/select2@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.0.3.tgz#5545502067f12bd9e502133dc9c0f7b73adf0d18" + integrity sha512-tmQN1TfO3szU6iw/K+YjoIqKeD6hnCVNIedg0l2YqTyZfo9QREEzY8CRqQELphhGkHmsMOl5tjXeD9BJVMna2g== dependencies: - "@abp/core" "~3.0.2" + "@abp/core" "~3.0.3" select2 "^4.0.13" -"@abp/sweetalert@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.0.2.tgz#c3f1fb7c56ba965ea0717ab80e4cae83b01c7bc2" - integrity sha512-HDNFt9PfFZDYMQ72m4l9M56WlDsG9k9Y51LnXp6hQIbQcw/e2wBi7CGfd6qsspQhoiyjhelz2/EDpBsubE5J7w== +"@abp/sweetalert@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.0.3.tgz#a167d49303833d0821d63e47e3882b9dcb5a66f4" + integrity sha512-RMBkZ4Tmm2qcW88noswsrnD1cik0R3q2GCDV1Ngm2V+u2KbbSbtLN2B+YQEU1SwDop0Miml8eNk2GeRLYT6kbA== dependencies: - "@abp/core" "~3.0.2" + "@abp/core" "~3.0.3" sweetalert "^2.1.2" -"@abp/timeago@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.0.2.tgz#f7aa843c8a934982af4e58a9e3a4bc4860ba2d84" - integrity sha512-PCTBRKqbHq3Qu8WPHIvNz2M+LY4tlR5URmJjvxuK+ckJzPI8bd7XsonJ1naf2BYyC1THlmRH1jA45yaTP8/juw== +"@abp/timeago@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.0.3.tgz#1fa2f4814babc965a2a95149b432f1fc466ad18a" + integrity sha512-iUG9RfV8vSernjMoojlnManZ+QTaRlMOvikeHQR8MaPYH/XC2sRLNoLN0sYTC5F/xzLQU4MSQFXZ54dobUyYfA== dependencies: - "@abp/jquery" "~3.0.2" + "@abp/jquery" "~3.0.3" timeago "^1.6.7" -"@abp/toastr@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.0.2.tgz#97e74c2bb5c86b400c831ad7c8543a7caea8c6c1" - integrity sha512-UqQX/1PZ0scm5Agparb8raM/L6yiVVuksfS7WKpeq3YtAp1Wd2og+7PxnAxeUlWchzHXgfsuBioPjLMvVTK0VQ== +"@abp/toastr@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.0.3.tgz#1f4421f03c6c69bd4ca93123953cdc4ac3abfd99" + integrity sha512-phMAFhJcLbti09da3WdDx5YZ2zzkh/Xgag2iJWunnnt5G+dH/4WTN1sLdIo06WwDLjArz19c2ZHqV52uwb2vXA== dependencies: - "@abp/jquery" "~3.0.2" + "@abp/jquery" "~3.0.3" toastr "^2.1.4" "@abp/utils@~2.9.0": diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/package.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/package.json index 5a4bf0be41..4de8e26049 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/package.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^3.0.2" + "@abp/aspnetcore.mvc.ui.theme.basic": "^3.0.3" } } \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/yarn.lock b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/yarn.lock index 6207b7dea1..422897f2bf 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/yarn.lock +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.0.2.tgz#f971fc6afabf66cf73470e08ee8ed9ad5ac36d70" - integrity sha512-54/4SqG1Kqcj7hl4/DI5TE6ksnecKp/JNeIl/SE/Kpha23J9xothiyFVE+fE7ymZFPIy+HouGN+MIg+TDdqYTQ== +"@abp/aspnetcore.mvc.ui.theme.basic@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.0.3.tgz#d891bcff681544f759ee715f6423130bffd1a05c" + integrity sha512-iXbK+wnPqTrkyzs0MfXxOjqEptJSZC/TdCukfeOI4ozJET1Y+g+r4SOcHCagLCSljIcO7E1Y79z6LPP0/x9fJw== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~3.0.2" + "@abp/aspnetcore.mvc.ui.theme.shared" "~3.0.3" -"@abp/aspnetcore.mvc.ui.theme.shared@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.0.2.tgz#b0d6c38dc97d0bd4a010a7cc5c035ecd31c2ac87" - integrity sha512-KoltFRaJYZ6X8UB9actvkNF6TvsoftPDthyVMw/D+nstNwueWo4loYyiH7ukhZ3EpEYz7ROxDB04jQ9FaByPpw== - dependencies: - "@abp/aspnetcore.mvc.ui" "~3.0.2" - "@abp/bootstrap" "~3.0.2" - "@abp/bootstrap-datepicker" "~3.0.2" - "@abp/datatables.net-bs4" "~3.0.2" - "@abp/font-awesome" "~3.0.2" - "@abp/jquery-form" "~3.0.2" - "@abp/jquery-validation-unobtrusive" "~3.0.2" - "@abp/lodash" "~3.0.2" - "@abp/luxon" "~3.0.2" - "@abp/malihu-custom-scrollbar-plugin" "~3.0.2" - "@abp/select2" "~3.0.2" - "@abp/sweetalert" "~3.0.2" - "@abp/timeago" "~3.0.2" - "@abp/toastr" "~3.0.2" - -"@abp/aspnetcore.mvc.ui@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.0.2.tgz#2a7a481488681f41ed756b434a18a3a03181d366" - integrity sha512-TfJhqNSC66crMyJSRWswTP6bli2WYOZsBmkMH7ziei/uSp7KMUUM16n47qPGEye/jx7E4P3NYG0WH7wCyhgS6A== +"@abp/aspnetcore.mvc.ui.theme.shared@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.0.3.tgz#fcea3dcea6a85dd88aa370578dca6e77fc80891c" + integrity sha512-ZuBBpH4Rlvr2Y6FpYt7FIiJwZLBmrnB8xJmP993AQtx+s39sLK3enb+poipkUBnq1N3yxmct06j7wsIlsstKXw== + dependencies: + "@abp/aspnetcore.mvc.ui" "~3.0.3" + "@abp/bootstrap" "~3.0.3" + "@abp/bootstrap-datepicker" "~3.0.3" + "@abp/datatables.net-bs4" "~3.0.3" + "@abp/font-awesome" "~3.0.3" + "@abp/jquery-form" "~3.0.3" + "@abp/jquery-validation-unobtrusive" "~3.0.3" + "@abp/lodash" "~3.0.3" + "@abp/luxon" "~3.0.3" + "@abp/malihu-custom-scrollbar-plugin" "~3.0.3" + "@abp/select2" "~3.0.3" + "@abp/sweetalert" "~3.0.3" + "@abp/timeago" "~3.0.3" + "@abp/toastr" "~3.0.3" + +"@abp/aspnetcore.mvc.ui@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.0.3.tgz#88e3350a839434cee38f9497d160e5f23ef5ac28" + integrity sha512-C4cSlnhGYNGQul/0WD9HP87knBQ/bj2q45Jt73ugn9RygEJVjhXPv30+H4sl1GZXmEg+kLgdAoNjM/Iipe+egQ== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,138 +41,138 @@ path "^0.12.7" rimraf "^3.0.2" -"@abp/bootstrap-datepicker@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.0.2.tgz#4c4bc2d667d82f299df753a741de0de3333db244" - integrity sha512-vlsKrW0XraHnVJlkv5zm4xVO/+LX9Fz9x6x2B5nHS2DnMnusENaCyvynWwIrm95/lQyXbkUQ1rjnNpI8/5p5TQ== +"@abp/bootstrap-datepicker@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.0.3.tgz#866d4b3b83bb548e7d71066408c5ab344ce33473" + integrity sha512-nnzm9rxu/vKIUdQQMlN/kGqL+DbOg8FmN81KyWJ23KmisViLVqDeTEJBHPOJ3WuzRN+SacoreiL4f3C+7YiiXQ== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.0.2.tgz#129b119594cf1ff211736b4295c254bcd7d2174f" - integrity sha512-cbJSsaxVEkP+pvVH+2GaYDn/u2u2sPF8oOQb89ZYOy46d+gVph8ZMuJ4f6pefei8Ps2h+q1JPbb8UPkzyI53Ig== +"@abp/bootstrap@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.0.3.tgz#1d0ce60eff1dc67642147f0f2897eb13f6353d09" + integrity sha512-Vd/bdyh4bnp3vz4QsPjlc8Wi1qfaRSBDekWbHWkNq568BLXSMkK6ucugGAvC7kshBj3bbSpHd9xWUImim0+Q/w== dependencies: - "@abp/core" "~3.0.2" + "@abp/core" "~3.0.3" bootstrap "^4.5.0" bootstrap-v4-rtl "4.4.1-2" -"@abp/core@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.0.2.tgz#88f4c8484a743f50c8980c1bb26cb79f453b9e3f" - integrity sha512-qMwY3YCpzTRmAkPH1u5ViduWjZdRgS9uu7chV+E+Iq7wknJ/JPtE/TrAUYbz/QhA7LFXoA74ZjbOeBW48x/cQA== +"@abp/core@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.0.3.tgz#05e45a5533f5a6f9014b4a4a87c73d96b7c071dc" + integrity sha512-lNrG0cYbHQHH6i2B5yfBL7iU3rl3TL66H+tDVCBqXNlnGAFOS48RG/jE2mMw54U8xgtwNczwBpgGVWAqU3uKig== dependencies: "@abp/utils" "~2.9.0" -"@abp/datatables.net-bs4@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.0.2.tgz#f16291b21352a07fe509daeec5b18da56c366157" - integrity sha512-jXM1B2hcNQzAhnMvCyeBc1UWeNWKTtChLk5QYQuQFbxifIT9WPT1Rs9+Q4QlV1VgTq2xzkOnZmXFjCmeQvMWgg== +"@abp/datatables.net-bs4@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.0.3.tgz#627a64f4fdc8c7fb7f4e51232c4147b5f2cfe041" + integrity sha512-seZR/yu8p0SJMafVCwYA5YAi7F2IMMo6cBJsF+phTBrPGBaXd63arNK7ZiXYp3RfwnafglotKNgswO0lYRMXKw== dependencies: - "@abp/datatables.net" "~3.0.2" + "@abp/datatables.net" "~3.0.3" datatables.net-bs4 "^1.10.21" -"@abp/datatables.net@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.0.2.tgz#13b0812f448e4cde29518fd38855d4eb285e8d52" - integrity sha512-KKJ11FxJmMuY+/5MqECnyUfVGrap0M4RYfVzt4wunfNA8xOufSMdsak1AbZU9/f6ygc4BTvVQV+ikmDpeaNHiQ== +"@abp/datatables.net@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.0.3.tgz#2a8eed257f943cc9d477eabe2501ead9fcc37d76" + integrity sha512-ULmYJZ3RU1kisMDCtB1Wq8tBmIn09QKW+asB33y9bT4td/cEDqULyJXbwNZYIzqA6VPzHenxiJbciFkFwPwkaQ== dependencies: - "@abp/jquery" "~3.0.2" + "@abp/jquery" "~3.0.3" datatables.net "^1.10.21" -"@abp/font-awesome@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.0.2.tgz#85abed5014e1324925142ee3e81f23f9fbffd264" - integrity sha512-z4sw7LPQ2meajQbfCNu1I7lLho6K5cDCU1RZzHfTvry3FWRNrG5I5amvqEgC7/IAzz8WcRk/6O93rJFDuXKiHg== +"@abp/font-awesome@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.0.3.tgz#e0fb803c04c2f3f36017aa8a065a7f20245a2b50" + integrity sha512-UY9i35H+3EMqBszLdLyM72TRVp+hDe8CFs8q2PBNzoIsrMGqx4mKFSTxUsts03USqQ+4v6D08M056D3a0oS+DQ== dependencies: - "@abp/core" "~3.0.2" + "@abp/core" "~3.0.3" "@fortawesome/fontawesome-free" "^5.13.0" -"@abp/jquery-form@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.0.2.tgz#6c1a3e1ae19add336bdf0c0d7ec8ff041303002d" - integrity sha512-UhjfO2h4ZnaYEncZ3ez8AnLzhg6D0oHy1GFjs3se+0u7rFR2iJ7YN3VlEeHweZokAzlVwoSrNXOKYRkhL8V75g== +"@abp/jquery-form@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.0.3.tgz#bcb6ca18c5671914fd87bb9651feef57142f9ae3" + integrity sha512-VokAc7jgBQAEcu15FSJPWLJcL+/mrFFwia/DdpkPyU+SrXHgD35Gu7Kb+/knQcVKNCM80mCH5gZXDbaA5Hrt3w== dependencies: - "@abp/jquery" "~3.0.2" + "@abp/jquery" "~3.0.3" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.0.2.tgz#50dc6b9b0366b83790ec9d342eb9bd397037102b" - integrity sha512-xx2A0E5I7KFPU1wRK7edvwYk+gcjMFRnnhJYwg1CELAmzeaYORDo6gwXqywcyIIEpFSIKcqIMih4A/mFObq85w== +"@abp/jquery-validation-unobtrusive@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.0.3.tgz#e4247a56149306aa69a8df1017f7da9a07abce26" + integrity sha512-Ig3UyfPj5qyP2BCLYeaihMzzj2p4Hkh1uJX6Bm2qShRKDW3Br5D0z3JIEXiGvzukGTdCnTG+mwGQowZfdxgdUQ== dependencies: - "@abp/jquery-validation" "~3.0.2" + "@abp/jquery-validation" "~3.0.3" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.0.2.tgz#9477215ae684b394ab6c5a0deeac7a3615c2ff18" - integrity sha512-gJQrjScSJeAEMtR348QdsjtdMFut2GCrt070VaNrm0PpM7lhEue6Qq+M6/HJt44puRyyJxoxg6NJvnFm2RKbVQ== +"@abp/jquery-validation@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.0.3.tgz#c95f5b9fa5d6ec973bffb0e98d08317707a95b83" + integrity sha512-Ss38QtC4IrDbICNJT9fTNWka6ekmhrfCrArOeVR8O47BIx9FRl2IBX8TBjuC3ZXv9c1oNxTICmmSCgQYfdQ02A== dependencies: - "@abp/jquery" "~3.0.2" + "@abp/jquery" "~3.0.3" jquery-validation "^1.19.2" -"@abp/jquery@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.0.2.tgz#d0e2bc7cecb4e6b4841b34779c81996b8f58e208" - integrity sha512-Xx/Qavk0khWu8H6vFi8IvrDu3LtWQCXo+NXi6qF2hPFgC2i9iWu9NQLAO5Wp9rZ+ZcAoLiQfSLYe2ZA9gNufcg== +"@abp/jquery@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.0.3.tgz#b9b6b5c110c116d484b090a485503eb1e5f7f8fb" + integrity sha512-EVkCdy8bGHZ1Za/H7Iw5e/maiihx3Hn8VvU//D6U3FlC3D/Fo7hYEPOVvlVtpco6J1e0wMe9dUnCQxjPDBfQGw== dependencies: - "@abp/core" "~3.0.2" + "@abp/core" "~3.0.3" jquery "~3.5.1" -"@abp/lodash@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.0.2.tgz#922fcf503952df0ec9944529d2c5cda1c274eaa5" - integrity sha512-RxboDnNPz8VZQiOW6gu51sbZ7lkXJ7snUyYn1luKk6IVZUoQf3l+LmJ1rLYiyprMniwIcjHfUNYJOu3sk02lig== +"@abp/lodash@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.0.3.tgz#4289cc71d83ed3ec29beacd784ee68b6ac575274" + integrity sha512-7UIagvq204xsyNQq7yucSHRj3BPE/yvTUELLEDWmjBQPkjB9GukeoeYqUxderEbVboCLIPYgGCwAWz9IyBtvFQ== dependencies: - "@abp/core" "~3.0.2" + "@abp/core" "~3.0.3" lodash "^4.17.15" -"@abp/luxon@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.0.2.tgz#5c57ac2bd834804e725bc3ceb4014cbf2ac7afac" - integrity sha512-ysQ4/MWFWxXdu+QFSBSAufrTCyFF5yZC8ByMYk9ezvkRzzUl+Q4mO1cKV7IXDD+saQeAljKEehvyXS9hpGqf0A== +"@abp/luxon@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.0.3.tgz#e2eb7db08c07efbd877a7216bf4f6aca18e24473" + integrity sha512-L7rzo7LLV9Kn92Fdk8g0+CqVsxedRs1cLmDA2QDn4idJ728kYJjSZpRWPjLW087dkSBen0Gtr7gxUn6HiXizpA== dependencies: luxon "^1.24.1" -"@abp/malihu-custom-scrollbar-plugin@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.0.2.tgz#809c20a750b82872fa8e3a57d67c4e50ccb12ce5" - integrity sha512-7GkH4HhxnSciZa/hLR78AB1KYKoic0skU0A/MEYl3E/LWoQ5KpvRDsbhQw90ZKnfXOV+shb7P1sxNlz3bdI/hQ== +"@abp/malihu-custom-scrollbar-plugin@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.0.3.tgz#77d45ac9044ebbe5a80a5764f4a55f1943c813f1" + integrity sha512-cJfdJexrZjJfoz+mMWXCFgi6gDa0fq9OAcpxZGz5aVeIrNOnWdEvjT02beowU9Rhl6vL6jWxpqaWt3H4jiGOSw== dependencies: - "@abp/core" "~3.0.2" + "@abp/core" "~3.0.3" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.0.2.tgz#8f970c99c1203a43c0651c0a5c27f6b056442386" - integrity sha512-YgIbaZWoaUzoz8TJQOi7ltPjLHtP0x7unPVnzs94hEPsIHaIBuITZNws93UpF5OJ0peVYCcdPpJXBjGW79kK1A== +"@abp/select2@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.0.3.tgz#5545502067f12bd9e502133dc9c0f7b73adf0d18" + integrity sha512-tmQN1TfO3szU6iw/K+YjoIqKeD6hnCVNIedg0l2YqTyZfo9QREEzY8CRqQELphhGkHmsMOl5tjXeD9BJVMna2g== dependencies: - "@abp/core" "~3.0.2" + "@abp/core" "~3.0.3" select2 "^4.0.13" -"@abp/sweetalert@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.0.2.tgz#c3f1fb7c56ba965ea0717ab80e4cae83b01c7bc2" - integrity sha512-HDNFt9PfFZDYMQ72m4l9M56WlDsG9k9Y51LnXp6hQIbQcw/e2wBi7CGfd6qsspQhoiyjhelz2/EDpBsubE5J7w== +"@abp/sweetalert@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.0.3.tgz#a167d49303833d0821d63e47e3882b9dcb5a66f4" + integrity sha512-RMBkZ4Tmm2qcW88noswsrnD1cik0R3q2GCDV1Ngm2V+u2KbbSbtLN2B+YQEU1SwDop0Miml8eNk2GeRLYT6kbA== dependencies: - "@abp/core" "~3.0.2" + "@abp/core" "~3.0.3" sweetalert "^2.1.2" -"@abp/timeago@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.0.2.tgz#f7aa843c8a934982af4e58a9e3a4bc4860ba2d84" - integrity sha512-PCTBRKqbHq3Qu8WPHIvNz2M+LY4tlR5URmJjvxuK+ckJzPI8bd7XsonJ1naf2BYyC1THlmRH1jA45yaTP8/juw== +"@abp/timeago@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.0.3.tgz#1fa2f4814babc965a2a95149b432f1fc466ad18a" + integrity sha512-iUG9RfV8vSernjMoojlnManZ+QTaRlMOvikeHQR8MaPYH/XC2sRLNoLN0sYTC5F/xzLQU4MSQFXZ54dobUyYfA== dependencies: - "@abp/jquery" "~3.0.2" + "@abp/jquery" "~3.0.3" timeago "^1.6.7" -"@abp/toastr@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.0.2.tgz#97e74c2bb5c86b400c831ad7c8543a7caea8c6c1" - integrity sha512-UqQX/1PZ0scm5Agparb8raM/L6yiVVuksfS7WKpeq3YtAp1Wd2og+7PxnAxeUlWchzHXgfsuBioPjLMvVTK0VQ== +"@abp/toastr@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.0.3.tgz#1f4421f03c6c69bd4ca93123953cdc4ac3abfd99" + integrity sha512-phMAFhJcLbti09da3WdDx5YZ2zzkh/Xgag2iJWunnnt5G+dH/4WTN1sLdIo06WwDLjArz19c2ZHqV52uwb2vXA== dependencies: - "@abp/jquery" "~3.0.2" + "@abp/jquery" "~3.0.3" toastr "^2.1.4" "@abp/utils@~2.9.0": diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/package.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/package.json index 5a4bf0be41..4de8e26049 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/package.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^3.0.2" + "@abp/aspnetcore.mvc.ui.theme.basic": "^3.0.3" } } \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/yarn.lock b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/yarn.lock index 06749cd92d..d3d85df4fb 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/yarn.lock +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.0.2.tgz#f971fc6afabf66cf73470e08ee8ed9ad5ac36d70" - integrity sha512-54/4SqG1Kqcj7hl4/DI5TE6ksnecKp/JNeIl/SE/Kpha23J9xothiyFVE+fE7ymZFPIy+HouGN+MIg+TDdqYTQ== +"@abp/aspnetcore.mvc.ui.theme.basic@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.0.3.tgz#d891bcff681544f759ee715f6423130bffd1a05c" + integrity sha512-iXbK+wnPqTrkyzs0MfXxOjqEptJSZC/TdCukfeOI4ozJET1Y+g+r4SOcHCagLCSljIcO7E1Y79z6LPP0/x9fJw== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~3.0.2" + "@abp/aspnetcore.mvc.ui.theme.shared" "~3.0.3" -"@abp/aspnetcore.mvc.ui.theme.shared@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.0.2.tgz#b0d6c38dc97d0bd4a010a7cc5c035ecd31c2ac87" - integrity sha512-KoltFRaJYZ6X8UB9actvkNF6TvsoftPDthyVMw/D+nstNwueWo4loYyiH7ukhZ3EpEYz7ROxDB04jQ9FaByPpw== - dependencies: - "@abp/aspnetcore.mvc.ui" "~3.0.2" - "@abp/bootstrap" "~3.0.2" - "@abp/bootstrap-datepicker" "~3.0.2" - "@abp/datatables.net-bs4" "~3.0.2" - "@abp/font-awesome" "~3.0.2" - "@abp/jquery-form" "~3.0.2" - "@abp/jquery-validation-unobtrusive" "~3.0.2" - "@abp/lodash" "~3.0.2" - "@abp/luxon" "~3.0.2" - "@abp/malihu-custom-scrollbar-plugin" "~3.0.2" - "@abp/select2" "~3.0.2" - "@abp/sweetalert" "~3.0.2" - "@abp/timeago" "~3.0.2" - "@abp/toastr" "~3.0.2" - -"@abp/aspnetcore.mvc.ui@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.0.2.tgz#2a7a481488681f41ed756b434a18a3a03181d366" - integrity sha512-TfJhqNSC66crMyJSRWswTP6bli2WYOZsBmkMH7ziei/uSp7KMUUM16n47qPGEye/jx7E4P3NYG0WH7wCyhgS6A== +"@abp/aspnetcore.mvc.ui.theme.shared@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.0.3.tgz#fcea3dcea6a85dd88aa370578dca6e77fc80891c" + integrity sha512-ZuBBpH4Rlvr2Y6FpYt7FIiJwZLBmrnB8xJmP993AQtx+s39sLK3enb+poipkUBnq1N3yxmct06j7wsIlsstKXw== + dependencies: + "@abp/aspnetcore.mvc.ui" "~3.0.3" + "@abp/bootstrap" "~3.0.3" + "@abp/bootstrap-datepicker" "~3.0.3" + "@abp/datatables.net-bs4" "~3.0.3" + "@abp/font-awesome" "~3.0.3" + "@abp/jquery-form" "~3.0.3" + "@abp/jquery-validation-unobtrusive" "~3.0.3" + "@abp/lodash" "~3.0.3" + "@abp/luxon" "~3.0.3" + "@abp/malihu-custom-scrollbar-plugin" "~3.0.3" + "@abp/select2" "~3.0.3" + "@abp/sweetalert" "~3.0.3" + "@abp/timeago" "~3.0.3" + "@abp/toastr" "~3.0.3" + +"@abp/aspnetcore.mvc.ui@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.0.3.tgz#88e3350a839434cee38f9497d160e5f23ef5ac28" + integrity sha512-C4cSlnhGYNGQul/0WD9HP87knBQ/bj2q45Jt73ugn9RygEJVjhXPv30+H4sl1GZXmEg+kLgdAoNjM/Iipe+egQ== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,138 +41,138 @@ path "^0.12.7" rimraf "^3.0.2" -"@abp/bootstrap-datepicker@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.0.2.tgz#4c4bc2d667d82f299df753a741de0de3333db244" - integrity sha512-vlsKrW0XraHnVJlkv5zm4xVO/+LX9Fz9x6x2B5nHS2DnMnusENaCyvynWwIrm95/lQyXbkUQ1rjnNpI8/5p5TQ== +"@abp/bootstrap-datepicker@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.0.3.tgz#866d4b3b83bb548e7d71066408c5ab344ce33473" + integrity sha512-nnzm9rxu/vKIUdQQMlN/kGqL+DbOg8FmN81KyWJ23KmisViLVqDeTEJBHPOJ3WuzRN+SacoreiL4f3C+7YiiXQ== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.0.2.tgz#129b119594cf1ff211736b4295c254bcd7d2174f" - integrity sha512-cbJSsaxVEkP+pvVH+2GaYDn/u2u2sPF8oOQb89ZYOy46d+gVph8ZMuJ4f6pefei8Ps2h+q1JPbb8UPkzyI53Ig== +"@abp/bootstrap@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.0.3.tgz#1d0ce60eff1dc67642147f0f2897eb13f6353d09" + integrity sha512-Vd/bdyh4bnp3vz4QsPjlc8Wi1qfaRSBDekWbHWkNq568BLXSMkK6ucugGAvC7kshBj3bbSpHd9xWUImim0+Q/w== dependencies: - "@abp/core" "~3.0.2" + "@abp/core" "~3.0.3" bootstrap "^4.5.0" bootstrap-v4-rtl "4.4.1-2" -"@abp/core@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.0.2.tgz#88f4c8484a743f50c8980c1bb26cb79f453b9e3f" - integrity sha512-qMwY3YCpzTRmAkPH1u5ViduWjZdRgS9uu7chV+E+Iq7wknJ/JPtE/TrAUYbz/QhA7LFXoA74ZjbOeBW48x/cQA== +"@abp/core@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.0.3.tgz#05e45a5533f5a6f9014b4a4a87c73d96b7c071dc" + integrity sha512-lNrG0cYbHQHH6i2B5yfBL7iU3rl3TL66H+tDVCBqXNlnGAFOS48RG/jE2mMw54U8xgtwNczwBpgGVWAqU3uKig== dependencies: "@abp/utils" "~2.9.0" -"@abp/datatables.net-bs4@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.0.2.tgz#f16291b21352a07fe509daeec5b18da56c366157" - integrity sha512-jXM1B2hcNQzAhnMvCyeBc1UWeNWKTtChLk5QYQuQFbxifIT9WPT1Rs9+Q4QlV1VgTq2xzkOnZmXFjCmeQvMWgg== +"@abp/datatables.net-bs4@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.0.3.tgz#627a64f4fdc8c7fb7f4e51232c4147b5f2cfe041" + integrity sha512-seZR/yu8p0SJMafVCwYA5YAi7F2IMMo6cBJsF+phTBrPGBaXd63arNK7ZiXYp3RfwnafglotKNgswO0lYRMXKw== dependencies: - "@abp/datatables.net" "~3.0.2" + "@abp/datatables.net" "~3.0.3" datatables.net-bs4 "^1.10.21" -"@abp/datatables.net@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.0.2.tgz#13b0812f448e4cde29518fd38855d4eb285e8d52" - integrity sha512-KKJ11FxJmMuY+/5MqECnyUfVGrap0M4RYfVzt4wunfNA8xOufSMdsak1AbZU9/f6ygc4BTvVQV+ikmDpeaNHiQ== +"@abp/datatables.net@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.0.3.tgz#2a8eed257f943cc9d477eabe2501ead9fcc37d76" + integrity sha512-ULmYJZ3RU1kisMDCtB1Wq8tBmIn09QKW+asB33y9bT4td/cEDqULyJXbwNZYIzqA6VPzHenxiJbciFkFwPwkaQ== dependencies: - "@abp/jquery" "~3.0.2" + "@abp/jquery" "~3.0.3" datatables.net "^1.10.21" -"@abp/font-awesome@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.0.2.tgz#85abed5014e1324925142ee3e81f23f9fbffd264" - integrity sha512-z4sw7LPQ2meajQbfCNu1I7lLho6K5cDCU1RZzHfTvry3FWRNrG5I5amvqEgC7/IAzz8WcRk/6O93rJFDuXKiHg== +"@abp/font-awesome@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.0.3.tgz#e0fb803c04c2f3f36017aa8a065a7f20245a2b50" + integrity sha512-UY9i35H+3EMqBszLdLyM72TRVp+hDe8CFs8q2PBNzoIsrMGqx4mKFSTxUsts03USqQ+4v6D08M056D3a0oS+DQ== dependencies: - "@abp/core" "~3.0.2" + "@abp/core" "~3.0.3" "@fortawesome/fontawesome-free" "^5.13.0" -"@abp/jquery-form@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.0.2.tgz#6c1a3e1ae19add336bdf0c0d7ec8ff041303002d" - integrity sha512-UhjfO2h4ZnaYEncZ3ez8AnLzhg6D0oHy1GFjs3se+0u7rFR2iJ7YN3VlEeHweZokAzlVwoSrNXOKYRkhL8V75g== +"@abp/jquery-form@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.0.3.tgz#bcb6ca18c5671914fd87bb9651feef57142f9ae3" + integrity sha512-VokAc7jgBQAEcu15FSJPWLJcL+/mrFFwia/DdpkPyU+SrXHgD35Gu7Kb+/knQcVKNCM80mCH5gZXDbaA5Hrt3w== dependencies: - "@abp/jquery" "~3.0.2" + "@abp/jquery" "~3.0.3" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.0.2.tgz#50dc6b9b0366b83790ec9d342eb9bd397037102b" - integrity sha512-xx2A0E5I7KFPU1wRK7edvwYk+gcjMFRnnhJYwg1CELAmzeaYORDo6gwXqywcyIIEpFSIKcqIMih4A/mFObq85w== +"@abp/jquery-validation-unobtrusive@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.0.3.tgz#e4247a56149306aa69a8df1017f7da9a07abce26" + integrity sha512-Ig3UyfPj5qyP2BCLYeaihMzzj2p4Hkh1uJX6Bm2qShRKDW3Br5D0z3JIEXiGvzukGTdCnTG+mwGQowZfdxgdUQ== dependencies: - "@abp/jquery-validation" "~3.0.2" + "@abp/jquery-validation" "~3.0.3" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.0.2.tgz#9477215ae684b394ab6c5a0deeac7a3615c2ff18" - integrity sha512-gJQrjScSJeAEMtR348QdsjtdMFut2GCrt070VaNrm0PpM7lhEue6Qq+M6/HJt44puRyyJxoxg6NJvnFm2RKbVQ== +"@abp/jquery-validation@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.0.3.tgz#c95f5b9fa5d6ec973bffb0e98d08317707a95b83" + integrity sha512-Ss38QtC4IrDbICNJT9fTNWka6ekmhrfCrArOeVR8O47BIx9FRl2IBX8TBjuC3ZXv9c1oNxTICmmSCgQYfdQ02A== dependencies: - "@abp/jquery" "~3.0.2" + "@abp/jquery" "~3.0.3" jquery-validation "^1.19.2" -"@abp/jquery@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.0.2.tgz#d0e2bc7cecb4e6b4841b34779c81996b8f58e208" - integrity sha512-Xx/Qavk0khWu8H6vFi8IvrDu3LtWQCXo+NXi6qF2hPFgC2i9iWu9NQLAO5Wp9rZ+ZcAoLiQfSLYe2ZA9gNufcg== +"@abp/jquery@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.0.3.tgz#b9b6b5c110c116d484b090a485503eb1e5f7f8fb" + integrity sha512-EVkCdy8bGHZ1Za/H7Iw5e/maiihx3Hn8VvU//D6U3FlC3D/Fo7hYEPOVvlVtpco6J1e0wMe9dUnCQxjPDBfQGw== dependencies: - "@abp/core" "~3.0.2" + "@abp/core" "~3.0.3" jquery "~3.5.1" -"@abp/lodash@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.0.2.tgz#922fcf503952df0ec9944529d2c5cda1c274eaa5" - integrity sha512-RxboDnNPz8VZQiOW6gu51sbZ7lkXJ7snUyYn1luKk6IVZUoQf3l+LmJ1rLYiyprMniwIcjHfUNYJOu3sk02lig== +"@abp/lodash@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.0.3.tgz#4289cc71d83ed3ec29beacd784ee68b6ac575274" + integrity sha512-7UIagvq204xsyNQq7yucSHRj3BPE/yvTUELLEDWmjBQPkjB9GukeoeYqUxderEbVboCLIPYgGCwAWz9IyBtvFQ== dependencies: - "@abp/core" "~3.0.2" + "@abp/core" "~3.0.3" lodash "^4.17.15" -"@abp/luxon@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.0.2.tgz#5c57ac2bd834804e725bc3ceb4014cbf2ac7afac" - integrity sha512-ysQ4/MWFWxXdu+QFSBSAufrTCyFF5yZC8ByMYk9ezvkRzzUl+Q4mO1cKV7IXDD+saQeAljKEehvyXS9hpGqf0A== +"@abp/luxon@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.0.3.tgz#e2eb7db08c07efbd877a7216bf4f6aca18e24473" + integrity sha512-L7rzo7LLV9Kn92Fdk8g0+CqVsxedRs1cLmDA2QDn4idJ728kYJjSZpRWPjLW087dkSBen0Gtr7gxUn6HiXizpA== dependencies: luxon "^1.24.1" -"@abp/malihu-custom-scrollbar-plugin@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.0.2.tgz#809c20a750b82872fa8e3a57d67c4e50ccb12ce5" - integrity sha512-7GkH4HhxnSciZa/hLR78AB1KYKoic0skU0A/MEYl3E/LWoQ5KpvRDsbhQw90ZKnfXOV+shb7P1sxNlz3bdI/hQ== +"@abp/malihu-custom-scrollbar-plugin@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.0.3.tgz#77d45ac9044ebbe5a80a5764f4a55f1943c813f1" + integrity sha512-cJfdJexrZjJfoz+mMWXCFgi6gDa0fq9OAcpxZGz5aVeIrNOnWdEvjT02beowU9Rhl6vL6jWxpqaWt3H4jiGOSw== dependencies: - "@abp/core" "~3.0.2" + "@abp/core" "~3.0.3" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.0.2.tgz#8f970c99c1203a43c0651c0a5c27f6b056442386" - integrity sha512-YgIbaZWoaUzoz8TJQOi7ltPjLHtP0x7unPVnzs94hEPsIHaIBuITZNws93UpF5OJ0peVYCcdPpJXBjGW79kK1A== +"@abp/select2@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.0.3.tgz#5545502067f12bd9e502133dc9c0f7b73adf0d18" + integrity sha512-tmQN1TfO3szU6iw/K+YjoIqKeD6hnCVNIedg0l2YqTyZfo9QREEzY8CRqQELphhGkHmsMOl5tjXeD9BJVMna2g== dependencies: - "@abp/core" "~3.0.2" + "@abp/core" "~3.0.3" select2 "^4.0.13" -"@abp/sweetalert@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.0.2.tgz#c3f1fb7c56ba965ea0717ab80e4cae83b01c7bc2" - integrity sha512-HDNFt9PfFZDYMQ72m4l9M56WlDsG9k9Y51LnXp6hQIbQcw/e2wBi7CGfd6qsspQhoiyjhelz2/EDpBsubE5J7w== +"@abp/sweetalert@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.0.3.tgz#a167d49303833d0821d63e47e3882b9dcb5a66f4" + integrity sha512-RMBkZ4Tmm2qcW88noswsrnD1cik0R3q2GCDV1Ngm2V+u2KbbSbtLN2B+YQEU1SwDop0Miml8eNk2GeRLYT6kbA== dependencies: - "@abp/core" "~3.0.2" + "@abp/core" "~3.0.3" sweetalert "^2.1.2" -"@abp/timeago@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.0.2.tgz#f7aa843c8a934982af4e58a9e3a4bc4860ba2d84" - integrity sha512-PCTBRKqbHq3Qu8WPHIvNz2M+LY4tlR5URmJjvxuK+ckJzPI8bd7XsonJ1naf2BYyC1THlmRH1jA45yaTP8/juw== +"@abp/timeago@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.0.3.tgz#1fa2f4814babc965a2a95149b432f1fc466ad18a" + integrity sha512-iUG9RfV8vSernjMoojlnManZ+QTaRlMOvikeHQR8MaPYH/XC2sRLNoLN0sYTC5F/xzLQU4MSQFXZ54dobUyYfA== dependencies: - "@abp/jquery" "~3.0.2" + "@abp/jquery" "~3.0.3" timeago "^1.6.7" -"@abp/toastr@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.0.2.tgz#97e74c2bb5c86b400c831ad7c8543a7caea8c6c1" - integrity sha512-UqQX/1PZ0scm5Agparb8raM/L6yiVVuksfS7WKpeq3YtAp1Wd2og+7PxnAxeUlWchzHXgfsuBioPjLMvVTK0VQ== +"@abp/toastr@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.0.3.tgz#1f4421f03c6c69bd4ca93123953cdc4ac3abfd99" + integrity sha512-phMAFhJcLbti09da3WdDx5YZ2zzkh/Xgag2iJWunnnt5G+dH/4WTN1sLdIo06WwDLjArz19c2ZHqV52uwb2vXA== dependencies: - "@abp/jquery" "~3.0.2" + "@abp/jquery" "~3.0.3" toastr "^2.1.4" "@abp/utils@~2.9.0": diff --git a/templates/module/angular/package.json b/templates/module/angular/package.json index 6ce5913188..1e6da4a31b 100644 --- a/templates/module/angular/package.json +++ b/templates/module/angular/package.json @@ -15,11 +15,11 @@ }, "private": true, "dependencies": { - "@abp/ng.account": "~3.0.2", - "@abp/ng.identity": "~3.0.2", - "@abp/ng.setting-management": "~3.0.2", - "@abp/ng.tenant-management": "~3.0.2", - "@abp/ng.theme.basic": "~3.0.2", + "@abp/ng.account": "~3.0.3", + "@abp/ng.identity": "~3.0.3", + "@abp/ng.setting-management": "~3.0.3", + "@abp/ng.tenant-management": "~3.0.3", + "@abp/ng.theme.basic": "~3.0.3", "@angular/animations": "~10.0.0", "@angular/common": "~10.0.0", "@angular/compiler": "~10.0.0", diff --git a/templates/module/angular/projects/my-project-name/package.json b/templates/module/angular/projects/my-project-name/package.json index a724ff7c30..b66c14e3cf 100644 --- a/templates/module/angular/projects/my-project-name/package.json +++ b/templates/module/angular/projects/my-project-name/package.json @@ -4,8 +4,8 @@ "peerDependencies": { "@angular/common": "^9.1.11", "@angular/core": "^9.1.11", - "@abp/ng.core": ">=3.0.2", - "@abp/ng.theme.shared": ">=3.0.2" + "@abp/ng.core": ">=3.0.3", + "@abp/ng.theme.shared": ">=3.0.3" }, "dependencies": { "tslib": "^2.0.0" diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/package.json b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/package.json index 782e4f2330..dc3297a937 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/package.json +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/package.json @@ -3,6 +3,6 @@ "name": "my-app-identityserver", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^3.0.2" + "@abp/aspnetcore.mvc.ui.theme.basic": "^3.0.3" } } \ No newline at end of file diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/yarn.lock b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/yarn.lock index 6207b7dea1..422897f2bf 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/yarn.lock +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.0.2.tgz#f971fc6afabf66cf73470e08ee8ed9ad5ac36d70" - integrity sha512-54/4SqG1Kqcj7hl4/DI5TE6ksnecKp/JNeIl/SE/Kpha23J9xothiyFVE+fE7ymZFPIy+HouGN+MIg+TDdqYTQ== +"@abp/aspnetcore.mvc.ui.theme.basic@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.0.3.tgz#d891bcff681544f759ee715f6423130bffd1a05c" + integrity sha512-iXbK+wnPqTrkyzs0MfXxOjqEptJSZC/TdCukfeOI4ozJET1Y+g+r4SOcHCagLCSljIcO7E1Y79z6LPP0/x9fJw== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~3.0.2" + "@abp/aspnetcore.mvc.ui.theme.shared" "~3.0.3" -"@abp/aspnetcore.mvc.ui.theme.shared@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.0.2.tgz#b0d6c38dc97d0bd4a010a7cc5c035ecd31c2ac87" - integrity sha512-KoltFRaJYZ6X8UB9actvkNF6TvsoftPDthyVMw/D+nstNwueWo4loYyiH7ukhZ3EpEYz7ROxDB04jQ9FaByPpw== - dependencies: - "@abp/aspnetcore.mvc.ui" "~3.0.2" - "@abp/bootstrap" "~3.0.2" - "@abp/bootstrap-datepicker" "~3.0.2" - "@abp/datatables.net-bs4" "~3.0.2" - "@abp/font-awesome" "~3.0.2" - "@abp/jquery-form" "~3.0.2" - "@abp/jquery-validation-unobtrusive" "~3.0.2" - "@abp/lodash" "~3.0.2" - "@abp/luxon" "~3.0.2" - "@abp/malihu-custom-scrollbar-plugin" "~3.0.2" - "@abp/select2" "~3.0.2" - "@abp/sweetalert" "~3.0.2" - "@abp/timeago" "~3.0.2" - "@abp/toastr" "~3.0.2" - -"@abp/aspnetcore.mvc.ui@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.0.2.tgz#2a7a481488681f41ed756b434a18a3a03181d366" - integrity sha512-TfJhqNSC66crMyJSRWswTP6bli2WYOZsBmkMH7ziei/uSp7KMUUM16n47qPGEye/jx7E4P3NYG0WH7wCyhgS6A== +"@abp/aspnetcore.mvc.ui.theme.shared@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.0.3.tgz#fcea3dcea6a85dd88aa370578dca6e77fc80891c" + integrity sha512-ZuBBpH4Rlvr2Y6FpYt7FIiJwZLBmrnB8xJmP993AQtx+s39sLK3enb+poipkUBnq1N3yxmct06j7wsIlsstKXw== + dependencies: + "@abp/aspnetcore.mvc.ui" "~3.0.3" + "@abp/bootstrap" "~3.0.3" + "@abp/bootstrap-datepicker" "~3.0.3" + "@abp/datatables.net-bs4" "~3.0.3" + "@abp/font-awesome" "~3.0.3" + "@abp/jquery-form" "~3.0.3" + "@abp/jquery-validation-unobtrusive" "~3.0.3" + "@abp/lodash" "~3.0.3" + "@abp/luxon" "~3.0.3" + "@abp/malihu-custom-scrollbar-plugin" "~3.0.3" + "@abp/select2" "~3.0.3" + "@abp/sweetalert" "~3.0.3" + "@abp/timeago" "~3.0.3" + "@abp/toastr" "~3.0.3" + +"@abp/aspnetcore.mvc.ui@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.0.3.tgz#88e3350a839434cee38f9497d160e5f23ef5ac28" + integrity sha512-C4cSlnhGYNGQul/0WD9HP87knBQ/bj2q45Jt73ugn9RygEJVjhXPv30+H4sl1GZXmEg+kLgdAoNjM/Iipe+egQ== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,138 +41,138 @@ path "^0.12.7" rimraf "^3.0.2" -"@abp/bootstrap-datepicker@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.0.2.tgz#4c4bc2d667d82f299df753a741de0de3333db244" - integrity sha512-vlsKrW0XraHnVJlkv5zm4xVO/+LX9Fz9x6x2B5nHS2DnMnusENaCyvynWwIrm95/lQyXbkUQ1rjnNpI8/5p5TQ== +"@abp/bootstrap-datepicker@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.0.3.tgz#866d4b3b83bb548e7d71066408c5ab344ce33473" + integrity sha512-nnzm9rxu/vKIUdQQMlN/kGqL+DbOg8FmN81KyWJ23KmisViLVqDeTEJBHPOJ3WuzRN+SacoreiL4f3C+7YiiXQ== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.0.2.tgz#129b119594cf1ff211736b4295c254bcd7d2174f" - integrity sha512-cbJSsaxVEkP+pvVH+2GaYDn/u2u2sPF8oOQb89ZYOy46d+gVph8ZMuJ4f6pefei8Ps2h+q1JPbb8UPkzyI53Ig== +"@abp/bootstrap@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.0.3.tgz#1d0ce60eff1dc67642147f0f2897eb13f6353d09" + integrity sha512-Vd/bdyh4bnp3vz4QsPjlc8Wi1qfaRSBDekWbHWkNq568BLXSMkK6ucugGAvC7kshBj3bbSpHd9xWUImim0+Q/w== dependencies: - "@abp/core" "~3.0.2" + "@abp/core" "~3.0.3" bootstrap "^4.5.0" bootstrap-v4-rtl "4.4.1-2" -"@abp/core@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.0.2.tgz#88f4c8484a743f50c8980c1bb26cb79f453b9e3f" - integrity sha512-qMwY3YCpzTRmAkPH1u5ViduWjZdRgS9uu7chV+E+Iq7wknJ/JPtE/TrAUYbz/QhA7LFXoA74ZjbOeBW48x/cQA== +"@abp/core@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.0.3.tgz#05e45a5533f5a6f9014b4a4a87c73d96b7c071dc" + integrity sha512-lNrG0cYbHQHH6i2B5yfBL7iU3rl3TL66H+tDVCBqXNlnGAFOS48RG/jE2mMw54U8xgtwNczwBpgGVWAqU3uKig== dependencies: "@abp/utils" "~2.9.0" -"@abp/datatables.net-bs4@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.0.2.tgz#f16291b21352a07fe509daeec5b18da56c366157" - integrity sha512-jXM1B2hcNQzAhnMvCyeBc1UWeNWKTtChLk5QYQuQFbxifIT9WPT1Rs9+Q4QlV1VgTq2xzkOnZmXFjCmeQvMWgg== +"@abp/datatables.net-bs4@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.0.3.tgz#627a64f4fdc8c7fb7f4e51232c4147b5f2cfe041" + integrity sha512-seZR/yu8p0SJMafVCwYA5YAi7F2IMMo6cBJsF+phTBrPGBaXd63arNK7ZiXYp3RfwnafglotKNgswO0lYRMXKw== dependencies: - "@abp/datatables.net" "~3.0.2" + "@abp/datatables.net" "~3.0.3" datatables.net-bs4 "^1.10.21" -"@abp/datatables.net@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.0.2.tgz#13b0812f448e4cde29518fd38855d4eb285e8d52" - integrity sha512-KKJ11FxJmMuY+/5MqECnyUfVGrap0M4RYfVzt4wunfNA8xOufSMdsak1AbZU9/f6ygc4BTvVQV+ikmDpeaNHiQ== +"@abp/datatables.net@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.0.3.tgz#2a8eed257f943cc9d477eabe2501ead9fcc37d76" + integrity sha512-ULmYJZ3RU1kisMDCtB1Wq8tBmIn09QKW+asB33y9bT4td/cEDqULyJXbwNZYIzqA6VPzHenxiJbciFkFwPwkaQ== dependencies: - "@abp/jquery" "~3.0.2" + "@abp/jquery" "~3.0.3" datatables.net "^1.10.21" -"@abp/font-awesome@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.0.2.tgz#85abed5014e1324925142ee3e81f23f9fbffd264" - integrity sha512-z4sw7LPQ2meajQbfCNu1I7lLho6K5cDCU1RZzHfTvry3FWRNrG5I5amvqEgC7/IAzz8WcRk/6O93rJFDuXKiHg== +"@abp/font-awesome@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.0.3.tgz#e0fb803c04c2f3f36017aa8a065a7f20245a2b50" + integrity sha512-UY9i35H+3EMqBszLdLyM72TRVp+hDe8CFs8q2PBNzoIsrMGqx4mKFSTxUsts03USqQ+4v6D08M056D3a0oS+DQ== dependencies: - "@abp/core" "~3.0.2" + "@abp/core" "~3.0.3" "@fortawesome/fontawesome-free" "^5.13.0" -"@abp/jquery-form@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.0.2.tgz#6c1a3e1ae19add336bdf0c0d7ec8ff041303002d" - integrity sha512-UhjfO2h4ZnaYEncZ3ez8AnLzhg6D0oHy1GFjs3se+0u7rFR2iJ7YN3VlEeHweZokAzlVwoSrNXOKYRkhL8V75g== +"@abp/jquery-form@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.0.3.tgz#bcb6ca18c5671914fd87bb9651feef57142f9ae3" + integrity sha512-VokAc7jgBQAEcu15FSJPWLJcL+/mrFFwia/DdpkPyU+SrXHgD35Gu7Kb+/knQcVKNCM80mCH5gZXDbaA5Hrt3w== dependencies: - "@abp/jquery" "~3.0.2" + "@abp/jquery" "~3.0.3" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.0.2.tgz#50dc6b9b0366b83790ec9d342eb9bd397037102b" - integrity sha512-xx2A0E5I7KFPU1wRK7edvwYk+gcjMFRnnhJYwg1CELAmzeaYORDo6gwXqywcyIIEpFSIKcqIMih4A/mFObq85w== +"@abp/jquery-validation-unobtrusive@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.0.3.tgz#e4247a56149306aa69a8df1017f7da9a07abce26" + integrity sha512-Ig3UyfPj5qyP2BCLYeaihMzzj2p4Hkh1uJX6Bm2qShRKDW3Br5D0z3JIEXiGvzukGTdCnTG+mwGQowZfdxgdUQ== dependencies: - "@abp/jquery-validation" "~3.0.2" + "@abp/jquery-validation" "~3.0.3" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.0.2.tgz#9477215ae684b394ab6c5a0deeac7a3615c2ff18" - integrity sha512-gJQrjScSJeAEMtR348QdsjtdMFut2GCrt070VaNrm0PpM7lhEue6Qq+M6/HJt44puRyyJxoxg6NJvnFm2RKbVQ== +"@abp/jquery-validation@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.0.3.tgz#c95f5b9fa5d6ec973bffb0e98d08317707a95b83" + integrity sha512-Ss38QtC4IrDbICNJT9fTNWka6ekmhrfCrArOeVR8O47BIx9FRl2IBX8TBjuC3ZXv9c1oNxTICmmSCgQYfdQ02A== dependencies: - "@abp/jquery" "~3.0.2" + "@abp/jquery" "~3.0.3" jquery-validation "^1.19.2" -"@abp/jquery@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.0.2.tgz#d0e2bc7cecb4e6b4841b34779c81996b8f58e208" - integrity sha512-Xx/Qavk0khWu8H6vFi8IvrDu3LtWQCXo+NXi6qF2hPFgC2i9iWu9NQLAO5Wp9rZ+ZcAoLiQfSLYe2ZA9gNufcg== +"@abp/jquery@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.0.3.tgz#b9b6b5c110c116d484b090a485503eb1e5f7f8fb" + integrity sha512-EVkCdy8bGHZ1Za/H7Iw5e/maiihx3Hn8VvU//D6U3FlC3D/Fo7hYEPOVvlVtpco6J1e0wMe9dUnCQxjPDBfQGw== dependencies: - "@abp/core" "~3.0.2" + "@abp/core" "~3.0.3" jquery "~3.5.1" -"@abp/lodash@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.0.2.tgz#922fcf503952df0ec9944529d2c5cda1c274eaa5" - integrity sha512-RxboDnNPz8VZQiOW6gu51sbZ7lkXJ7snUyYn1luKk6IVZUoQf3l+LmJ1rLYiyprMniwIcjHfUNYJOu3sk02lig== +"@abp/lodash@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.0.3.tgz#4289cc71d83ed3ec29beacd784ee68b6ac575274" + integrity sha512-7UIagvq204xsyNQq7yucSHRj3BPE/yvTUELLEDWmjBQPkjB9GukeoeYqUxderEbVboCLIPYgGCwAWz9IyBtvFQ== dependencies: - "@abp/core" "~3.0.2" + "@abp/core" "~3.0.3" lodash "^4.17.15" -"@abp/luxon@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.0.2.tgz#5c57ac2bd834804e725bc3ceb4014cbf2ac7afac" - integrity sha512-ysQ4/MWFWxXdu+QFSBSAufrTCyFF5yZC8ByMYk9ezvkRzzUl+Q4mO1cKV7IXDD+saQeAljKEehvyXS9hpGqf0A== +"@abp/luxon@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.0.3.tgz#e2eb7db08c07efbd877a7216bf4f6aca18e24473" + integrity sha512-L7rzo7LLV9Kn92Fdk8g0+CqVsxedRs1cLmDA2QDn4idJ728kYJjSZpRWPjLW087dkSBen0Gtr7gxUn6HiXizpA== dependencies: luxon "^1.24.1" -"@abp/malihu-custom-scrollbar-plugin@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.0.2.tgz#809c20a750b82872fa8e3a57d67c4e50ccb12ce5" - integrity sha512-7GkH4HhxnSciZa/hLR78AB1KYKoic0skU0A/MEYl3E/LWoQ5KpvRDsbhQw90ZKnfXOV+shb7P1sxNlz3bdI/hQ== +"@abp/malihu-custom-scrollbar-plugin@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.0.3.tgz#77d45ac9044ebbe5a80a5764f4a55f1943c813f1" + integrity sha512-cJfdJexrZjJfoz+mMWXCFgi6gDa0fq9OAcpxZGz5aVeIrNOnWdEvjT02beowU9Rhl6vL6jWxpqaWt3H4jiGOSw== dependencies: - "@abp/core" "~3.0.2" + "@abp/core" "~3.0.3" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.0.2.tgz#8f970c99c1203a43c0651c0a5c27f6b056442386" - integrity sha512-YgIbaZWoaUzoz8TJQOi7ltPjLHtP0x7unPVnzs94hEPsIHaIBuITZNws93UpF5OJ0peVYCcdPpJXBjGW79kK1A== +"@abp/select2@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.0.3.tgz#5545502067f12bd9e502133dc9c0f7b73adf0d18" + integrity sha512-tmQN1TfO3szU6iw/K+YjoIqKeD6hnCVNIedg0l2YqTyZfo9QREEzY8CRqQELphhGkHmsMOl5tjXeD9BJVMna2g== dependencies: - "@abp/core" "~3.0.2" + "@abp/core" "~3.0.3" select2 "^4.0.13" -"@abp/sweetalert@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.0.2.tgz#c3f1fb7c56ba965ea0717ab80e4cae83b01c7bc2" - integrity sha512-HDNFt9PfFZDYMQ72m4l9M56WlDsG9k9Y51LnXp6hQIbQcw/e2wBi7CGfd6qsspQhoiyjhelz2/EDpBsubE5J7w== +"@abp/sweetalert@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.0.3.tgz#a167d49303833d0821d63e47e3882b9dcb5a66f4" + integrity sha512-RMBkZ4Tmm2qcW88noswsrnD1cik0R3q2GCDV1Ngm2V+u2KbbSbtLN2B+YQEU1SwDop0Miml8eNk2GeRLYT6kbA== dependencies: - "@abp/core" "~3.0.2" + "@abp/core" "~3.0.3" sweetalert "^2.1.2" -"@abp/timeago@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.0.2.tgz#f7aa843c8a934982af4e58a9e3a4bc4860ba2d84" - integrity sha512-PCTBRKqbHq3Qu8WPHIvNz2M+LY4tlR5URmJjvxuK+ckJzPI8bd7XsonJ1naf2BYyC1THlmRH1jA45yaTP8/juw== +"@abp/timeago@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.0.3.tgz#1fa2f4814babc965a2a95149b432f1fc466ad18a" + integrity sha512-iUG9RfV8vSernjMoojlnManZ+QTaRlMOvikeHQR8MaPYH/XC2sRLNoLN0sYTC5F/xzLQU4MSQFXZ54dobUyYfA== dependencies: - "@abp/jquery" "~3.0.2" + "@abp/jquery" "~3.0.3" timeago "^1.6.7" -"@abp/toastr@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.0.2.tgz#97e74c2bb5c86b400c831ad7c8543a7caea8c6c1" - integrity sha512-UqQX/1PZ0scm5Agparb8raM/L6yiVVuksfS7WKpeq3YtAp1Wd2og+7PxnAxeUlWchzHXgfsuBioPjLMvVTK0VQ== +"@abp/toastr@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.0.3.tgz#1f4421f03c6c69bd4ca93123953cdc4ac3abfd99" + integrity sha512-phMAFhJcLbti09da3WdDx5YZ2zzkh/Xgag2iJWunnnt5G+dH/4WTN1sLdIo06WwDLjArz19c2ZHqV52uwb2vXA== dependencies: - "@abp/jquery" "~3.0.2" + "@abp/jquery" "~3.0.3" toastr "^2.1.4" "@abp/utils@~2.9.0": diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/package.json b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/package.json index 5a4bf0be41..4de8e26049 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/package.json +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^3.0.2" + "@abp/aspnetcore.mvc.ui.theme.basic": "^3.0.3" } } \ No newline at end of file diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/yarn.lock b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/yarn.lock index 6207b7dea1..422897f2bf 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/yarn.lock +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.0.2.tgz#f971fc6afabf66cf73470e08ee8ed9ad5ac36d70" - integrity sha512-54/4SqG1Kqcj7hl4/DI5TE6ksnecKp/JNeIl/SE/Kpha23J9xothiyFVE+fE7ymZFPIy+HouGN+MIg+TDdqYTQ== +"@abp/aspnetcore.mvc.ui.theme.basic@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.0.3.tgz#d891bcff681544f759ee715f6423130bffd1a05c" + integrity sha512-iXbK+wnPqTrkyzs0MfXxOjqEptJSZC/TdCukfeOI4ozJET1Y+g+r4SOcHCagLCSljIcO7E1Y79z6LPP0/x9fJw== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~3.0.2" + "@abp/aspnetcore.mvc.ui.theme.shared" "~3.0.3" -"@abp/aspnetcore.mvc.ui.theme.shared@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.0.2.tgz#b0d6c38dc97d0bd4a010a7cc5c035ecd31c2ac87" - integrity sha512-KoltFRaJYZ6X8UB9actvkNF6TvsoftPDthyVMw/D+nstNwueWo4loYyiH7ukhZ3EpEYz7ROxDB04jQ9FaByPpw== - dependencies: - "@abp/aspnetcore.mvc.ui" "~3.0.2" - "@abp/bootstrap" "~3.0.2" - "@abp/bootstrap-datepicker" "~3.0.2" - "@abp/datatables.net-bs4" "~3.0.2" - "@abp/font-awesome" "~3.0.2" - "@abp/jquery-form" "~3.0.2" - "@abp/jquery-validation-unobtrusive" "~3.0.2" - "@abp/lodash" "~3.0.2" - "@abp/luxon" "~3.0.2" - "@abp/malihu-custom-scrollbar-plugin" "~3.0.2" - "@abp/select2" "~3.0.2" - "@abp/sweetalert" "~3.0.2" - "@abp/timeago" "~3.0.2" - "@abp/toastr" "~3.0.2" - -"@abp/aspnetcore.mvc.ui@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.0.2.tgz#2a7a481488681f41ed756b434a18a3a03181d366" - integrity sha512-TfJhqNSC66crMyJSRWswTP6bli2WYOZsBmkMH7ziei/uSp7KMUUM16n47qPGEye/jx7E4P3NYG0WH7wCyhgS6A== +"@abp/aspnetcore.mvc.ui.theme.shared@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.0.3.tgz#fcea3dcea6a85dd88aa370578dca6e77fc80891c" + integrity sha512-ZuBBpH4Rlvr2Y6FpYt7FIiJwZLBmrnB8xJmP993AQtx+s39sLK3enb+poipkUBnq1N3yxmct06j7wsIlsstKXw== + dependencies: + "@abp/aspnetcore.mvc.ui" "~3.0.3" + "@abp/bootstrap" "~3.0.3" + "@abp/bootstrap-datepicker" "~3.0.3" + "@abp/datatables.net-bs4" "~3.0.3" + "@abp/font-awesome" "~3.0.3" + "@abp/jquery-form" "~3.0.3" + "@abp/jquery-validation-unobtrusive" "~3.0.3" + "@abp/lodash" "~3.0.3" + "@abp/luxon" "~3.0.3" + "@abp/malihu-custom-scrollbar-plugin" "~3.0.3" + "@abp/select2" "~3.0.3" + "@abp/sweetalert" "~3.0.3" + "@abp/timeago" "~3.0.3" + "@abp/toastr" "~3.0.3" + +"@abp/aspnetcore.mvc.ui@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.0.3.tgz#88e3350a839434cee38f9497d160e5f23ef5ac28" + integrity sha512-C4cSlnhGYNGQul/0WD9HP87knBQ/bj2q45Jt73ugn9RygEJVjhXPv30+H4sl1GZXmEg+kLgdAoNjM/Iipe+egQ== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,138 +41,138 @@ path "^0.12.7" rimraf "^3.0.2" -"@abp/bootstrap-datepicker@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.0.2.tgz#4c4bc2d667d82f299df753a741de0de3333db244" - integrity sha512-vlsKrW0XraHnVJlkv5zm4xVO/+LX9Fz9x6x2B5nHS2DnMnusENaCyvynWwIrm95/lQyXbkUQ1rjnNpI8/5p5TQ== +"@abp/bootstrap-datepicker@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.0.3.tgz#866d4b3b83bb548e7d71066408c5ab344ce33473" + integrity sha512-nnzm9rxu/vKIUdQQMlN/kGqL+DbOg8FmN81KyWJ23KmisViLVqDeTEJBHPOJ3WuzRN+SacoreiL4f3C+7YiiXQ== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.0.2.tgz#129b119594cf1ff211736b4295c254bcd7d2174f" - integrity sha512-cbJSsaxVEkP+pvVH+2GaYDn/u2u2sPF8oOQb89ZYOy46d+gVph8ZMuJ4f6pefei8Ps2h+q1JPbb8UPkzyI53Ig== +"@abp/bootstrap@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.0.3.tgz#1d0ce60eff1dc67642147f0f2897eb13f6353d09" + integrity sha512-Vd/bdyh4bnp3vz4QsPjlc8Wi1qfaRSBDekWbHWkNq568BLXSMkK6ucugGAvC7kshBj3bbSpHd9xWUImim0+Q/w== dependencies: - "@abp/core" "~3.0.2" + "@abp/core" "~3.0.3" bootstrap "^4.5.0" bootstrap-v4-rtl "4.4.1-2" -"@abp/core@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.0.2.tgz#88f4c8484a743f50c8980c1bb26cb79f453b9e3f" - integrity sha512-qMwY3YCpzTRmAkPH1u5ViduWjZdRgS9uu7chV+E+Iq7wknJ/JPtE/TrAUYbz/QhA7LFXoA74ZjbOeBW48x/cQA== +"@abp/core@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.0.3.tgz#05e45a5533f5a6f9014b4a4a87c73d96b7c071dc" + integrity sha512-lNrG0cYbHQHH6i2B5yfBL7iU3rl3TL66H+tDVCBqXNlnGAFOS48RG/jE2mMw54U8xgtwNczwBpgGVWAqU3uKig== dependencies: "@abp/utils" "~2.9.0" -"@abp/datatables.net-bs4@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.0.2.tgz#f16291b21352a07fe509daeec5b18da56c366157" - integrity sha512-jXM1B2hcNQzAhnMvCyeBc1UWeNWKTtChLk5QYQuQFbxifIT9WPT1Rs9+Q4QlV1VgTq2xzkOnZmXFjCmeQvMWgg== +"@abp/datatables.net-bs4@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.0.3.tgz#627a64f4fdc8c7fb7f4e51232c4147b5f2cfe041" + integrity sha512-seZR/yu8p0SJMafVCwYA5YAi7F2IMMo6cBJsF+phTBrPGBaXd63arNK7ZiXYp3RfwnafglotKNgswO0lYRMXKw== dependencies: - "@abp/datatables.net" "~3.0.2" + "@abp/datatables.net" "~3.0.3" datatables.net-bs4 "^1.10.21" -"@abp/datatables.net@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.0.2.tgz#13b0812f448e4cde29518fd38855d4eb285e8d52" - integrity sha512-KKJ11FxJmMuY+/5MqECnyUfVGrap0M4RYfVzt4wunfNA8xOufSMdsak1AbZU9/f6ygc4BTvVQV+ikmDpeaNHiQ== +"@abp/datatables.net@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.0.3.tgz#2a8eed257f943cc9d477eabe2501ead9fcc37d76" + integrity sha512-ULmYJZ3RU1kisMDCtB1Wq8tBmIn09QKW+asB33y9bT4td/cEDqULyJXbwNZYIzqA6VPzHenxiJbciFkFwPwkaQ== dependencies: - "@abp/jquery" "~3.0.2" + "@abp/jquery" "~3.0.3" datatables.net "^1.10.21" -"@abp/font-awesome@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.0.2.tgz#85abed5014e1324925142ee3e81f23f9fbffd264" - integrity sha512-z4sw7LPQ2meajQbfCNu1I7lLho6K5cDCU1RZzHfTvry3FWRNrG5I5amvqEgC7/IAzz8WcRk/6O93rJFDuXKiHg== +"@abp/font-awesome@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.0.3.tgz#e0fb803c04c2f3f36017aa8a065a7f20245a2b50" + integrity sha512-UY9i35H+3EMqBszLdLyM72TRVp+hDe8CFs8q2PBNzoIsrMGqx4mKFSTxUsts03USqQ+4v6D08M056D3a0oS+DQ== dependencies: - "@abp/core" "~3.0.2" + "@abp/core" "~3.0.3" "@fortawesome/fontawesome-free" "^5.13.0" -"@abp/jquery-form@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.0.2.tgz#6c1a3e1ae19add336bdf0c0d7ec8ff041303002d" - integrity sha512-UhjfO2h4ZnaYEncZ3ez8AnLzhg6D0oHy1GFjs3se+0u7rFR2iJ7YN3VlEeHweZokAzlVwoSrNXOKYRkhL8V75g== +"@abp/jquery-form@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.0.3.tgz#bcb6ca18c5671914fd87bb9651feef57142f9ae3" + integrity sha512-VokAc7jgBQAEcu15FSJPWLJcL+/mrFFwia/DdpkPyU+SrXHgD35Gu7Kb+/knQcVKNCM80mCH5gZXDbaA5Hrt3w== dependencies: - "@abp/jquery" "~3.0.2" + "@abp/jquery" "~3.0.3" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.0.2.tgz#50dc6b9b0366b83790ec9d342eb9bd397037102b" - integrity sha512-xx2A0E5I7KFPU1wRK7edvwYk+gcjMFRnnhJYwg1CELAmzeaYORDo6gwXqywcyIIEpFSIKcqIMih4A/mFObq85w== +"@abp/jquery-validation-unobtrusive@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.0.3.tgz#e4247a56149306aa69a8df1017f7da9a07abce26" + integrity sha512-Ig3UyfPj5qyP2BCLYeaihMzzj2p4Hkh1uJX6Bm2qShRKDW3Br5D0z3JIEXiGvzukGTdCnTG+mwGQowZfdxgdUQ== dependencies: - "@abp/jquery-validation" "~3.0.2" + "@abp/jquery-validation" "~3.0.3" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.0.2.tgz#9477215ae684b394ab6c5a0deeac7a3615c2ff18" - integrity sha512-gJQrjScSJeAEMtR348QdsjtdMFut2GCrt070VaNrm0PpM7lhEue6Qq+M6/HJt44puRyyJxoxg6NJvnFm2RKbVQ== +"@abp/jquery-validation@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.0.3.tgz#c95f5b9fa5d6ec973bffb0e98d08317707a95b83" + integrity sha512-Ss38QtC4IrDbICNJT9fTNWka6ekmhrfCrArOeVR8O47BIx9FRl2IBX8TBjuC3ZXv9c1oNxTICmmSCgQYfdQ02A== dependencies: - "@abp/jquery" "~3.0.2" + "@abp/jquery" "~3.0.3" jquery-validation "^1.19.2" -"@abp/jquery@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.0.2.tgz#d0e2bc7cecb4e6b4841b34779c81996b8f58e208" - integrity sha512-Xx/Qavk0khWu8H6vFi8IvrDu3LtWQCXo+NXi6qF2hPFgC2i9iWu9NQLAO5Wp9rZ+ZcAoLiQfSLYe2ZA9gNufcg== +"@abp/jquery@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.0.3.tgz#b9b6b5c110c116d484b090a485503eb1e5f7f8fb" + integrity sha512-EVkCdy8bGHZ1Za/H7Iw5e/maiihx3Hn8VvU//D6U3FlC3D/Fo7hYEPOVvlVtpco6J1e0wMe9dUnCQxjPDBfQGw== dependencies: - "@abp/core" "~3.0.2" + "@abp/core" "~3.0.3" jquery "~3.5.1" -"@abp/lodash@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.0.2.tgz#922fcf503952df0ec9944529d2c5cda1c274eaa5" - integrity sha512-RxboDnNPz8VZQiOW6gu51sbZ7lkXJ7snUyYn1luKk6IVZUoQf3l+LmJ1rLYiyprMniwIcjHfUNYJOu3sk02lig== +"@abp/lodash@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.0.3.tgz#4289cc71d83ed3ec29beacd784ee68b6ac575274" + integrity sha512-7UIagvq204xsyNQq7yucSHRj3BPE/yvTUELLEDWmjBQPkjB9GukeoeYqUxderEbVboCLIPYgGCwAWz9IyBtvFQ== dependencies: - "@abp/core" "~3.0.2" + "@abp/core" "~3.0.3" lodash "^4.17.15" -"@abp/luxon@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.0.2.tgz#5c57ac2bd834804e725bc3ceb4014cbf2ac7afac" - integrity sha512-ysQ4/MWFWxXdu+QFSBSAufrTCyFF5yZC8ByMYk9ezvkRzzUl+Q4mO1cKV7IXDD+saQeAljKEehvyXS9hpGqf0A== +"@abp/luxon@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.0.3.tgz#e2eb7db08c07efbd877a7216bf4f6aca18e24473" + integrity sha512-L7rzo7LLV9Kn92Fdk8g0+CqVsxedRs1cLmDA2QDn4idJ728kYJjSZpRWPjLW087dkSBen0Gtr7gxUn6HiXizpA== dependencies: luxon "^1.24.1" -"@abp/malihu-custom-scrollbar-plugin@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.0.2.tgz#809c20a750b82872fa8e3a57d67c4e50ccb12ce5" - integrity sha512-7GkH4HhxnSciZa/hLR78AB1KYKoic0skU0A/MEYl3E/LWoQ5KpvRDsbhQw90ZKnfXOV+shb7P1sxNlz3bdI/hQ== +"@abp/malihu-custom-scrollbar-plugin@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.0.3.tgz#77d45ac9044ebbe5a80a5764f4a55f1943c813f1" + integrity sha512-cJfdJexrZjJfoz+mMWXCFgi6gDa0fq9OAcpxZGz5aVeIrNOnWdEvjT02beowU9Rhl6vL6jWxpqaWt3H4jiGOSw== dependencies: - "@abp/core" "~3.0.2" + "@abp/core" "~3.0.3" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.0.2.tgz#8f970c99c1203a43c0651c0a5c27f6b056442386" - integrity sha512-YgIbaZWoaUzoz8TJQOi7ltPjLHtP0x7unPVnzs94hEPsIHaIBuITZNws93UpF5OJ0peVYCcdPpJXBjGW79kK1A== +"@abp/select2@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.0.3.tgz#5545502067f12bd9e502133dc9c0f7b73adf0d18" + integrity sha512-tmQN1TfO3szU6iw/K+YjoIqKeD6hnCVNIedg0l2YqTyZfo9QREEzY8CRqQELphhGkHmsMOl5tjXeD9BJVMna2g== dependencies: - "@abp/core" "~3.0.2" + "@abp/core" "~3.0.3" select2 "^4.0.13" -"@abp/sweetalert@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.0.2.tgz#c3f1fb7c56ba965ea0717ab80e4cae83b01c7bc2" - integrity sha512-HDNFt9PfFZDYMQ72m4l9M56WlDsG9k9Y51LnXp6hQIbQcw/e2wBi7CGfd6qsspQhoiyjhelz2/EDpBsubE5J7w== +"@abp/sweetalert@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.0.3.tgz#a167d49303833d0821d63e47e3882b9dcb5a66f4" + integrity sha512-RMBkZ4Tmm2qcW88noswsrnD1cik0R3q2GCDV1Ngm2V+u2KbbSbtLN2B+YQEU1SwDop0Miml8eNk2GeRLYT6kbA== dependencies: - "@abp/core" "~3.0.2" + "@abp/core" "~3.0.3" sweetalert "^2.1.2" -"@abp/timeago@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.0.2.tgz#f7aa843c8a934982af4e58a9e3a4bc4860ba2d84" - integrity sha512-PCTBRKqbHq3Qu8WPHIvNz2M+LY4tlR5URmJjvxuK+ckJzPI8bd7XsonJ1naf2BYyC1THlmRH1jA45yaTP8/juw== +"@abp/timeago@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.0.3.tgz#1fa2f4814babc965a2a95149b432f1fc466ad18a" + integrity sha512-iUG9RfV8vSernjMoojlnManZ+QTaRlMOvikeHQR8MaPYH/XC2sRLNoLN0sYTC5F/xzLQU4MSQFXZ54dobUyYfA== dependencies: - "@abp/jquery" "~3.0.2" + "@abp/jquery" "~3.0.3" timeago "^1.6.7" -"@abp/toastr@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.0.2.tgz#97e74c2bb5c86b400c831ad7c8543a7caea8c6c1" - integrity sha512-UqQX/1PZ0scm5Agparb8raM/L6yiVVuksfS7WKpeq3YtAp1Wd2og+7PxnAxeUlWchzHXgfsuBioPjLMvVTK0VQ== +"@abp/toastr@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.0.3.tgz#1f4421f03c6c69bd4ca93123953cdc4ac3abfd99" + integrity sha512-phMAFhJcLbti09da3WdDx5YZ2zzkh/Xgag2iJWunnnt5G+dH/4WTN1sLdIo06WwDLjArz19c2ZHqV52uwb2vXA== dependencies: - "@abp/jquery" "~3.0.2" + "@abp/jquery" "~3.0.3" toastr "^2.1.4" "@abp/utils@~2.9.0": diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/package.json b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/package.json index 5a4bf0be41..4de8e26049 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/package.json +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^3.0.2" + "@abp/aspnetcore.mvc.ui.theme.basic": "^3.0.3" } } \ No newline at end of file diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/yarn.lock b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/yarn.lock index 774a784424..f8ea1c4cb0 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/yarn.lock +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.0.2.tgz#f971fc6afabf66cf73470e08ee8ed9ad5ac36d70" - integrity sha512-54/4SqG1Kqcj7hl4/DI5TE6ksnecKp/JNeIl/SE/Kpha23J9xothiyFVE+fE7ymZFPIy+HouGN+MIg+TDdqYTQ== +"@abp/aspnetcore.mvc.ui.theme.basic@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.0.3.tgz#d891bcff681544f759ee715f6423130bffd1a05c" + integrity sha512-iXbK+wnPqTrkyzs0MfXxOjqEptJSZC/TdCukfeOI4ozJET1Y+g+r4SOcHCagLCSljIcO7E1Y79z6LPP0/x9fJw== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~3.0.2" + "@abp/aspnetcore.mvc.ui.theme.shared" "~3.0.3" -"@abp/aspnetcore.mvc.ui.theme.shared@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.0.2.tgz#b0d6c38dc97d0bd4a010a7cc5c035ecd31c2ac87" - integrity sha512-KoltFRaJYZ6X8UB9actvkNF6TvsoftPDthyVMw/D+nstNwueWo4loYyiH7ukhZ3EpEYz7ROxDB04jQ9FaByPpw== - dependencies: - "@abp/aspnetcore.mvc.ui" "~3.0.2" - "@abp/bootstrap" "~3.0.2" - "@abp/bootstrap-datepicker" "~3.0.2" - "@abp/datatables.net-bs4" "~3.0.2" - "@abp/font-awesome" "~3.0.2" - "@abp/jquery-form" "~3.0.2" - "@abp/jquery-validation-unobtrusive" "~3.0.2" - "@abp/lodash" "~3.0.2" - "@abp/luxon" "~3.0.2" - "@abp/malihu-custom-scrollbar-plugin" "~3.0.2" - "@abp/select2" "~3.0.2" - "@abp/sweetalert" "~3.0.2" - "@abp/timeago" "~3.0.2" - "@abp/toastr" "~3.0.2" - -"@abp/aspnetcore.mvc.ui@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.0.2.tgz#2a7a481488681f41ed756b434a18a3a03181d366" - integrity sha512-TfJhqNSC66crMyJSRWswTP6bli2WYOZsBmkMH7ziei/uSp7KMUUM16n47qPGEye/jx7E4P3NYG0WH7wCyhgS6A== +"@abp/aspnetcore.mvc.ui.theme.shared@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.0.3.tgz#fcea3dcea6a85dd88aa370578dca6e77fc80891c" + integrity sha512-ZuBBpH4Rlvr2Y6FpYt7FIiJwZLBmrnB8xJmP993AQtx+s39sLK3enb+poipkUBnq1N3yxmct06j7wsIlsstKXw== + dependencies: + "@abp/aspnetcore.mvc.ui" "~3.0.3" + "@abp/bootstrap" "~3.0.3" + "@abp/bootstrap-datepicker" "~3.0.3" + "@abp/datatables.net-bs4" "~3.0.3" + "@abp/font-awesome" "~3.0.3" + "@abp/jquery-form" "~3.0.3" + "@abp/jquery-validation-unobtrusive" "~3.0.3" + "@abp/lodash" "~3.0.3" + "@abp/luxon" "~3.0.3" + "@abp/malihu-custom-scrollbar-plugin" "~3.0.3" + "@abp/select2" "~3.0.3" + "@abp/sweetalert" "~3.0.3" + "@abp/timeago" "~3.0.3" + "@abp/toastr" "~3.0.3" + +"@abp/aspnetcore.mvc.ui@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.0.3.tgz#88e3350a839434cee38f9497d160e5f23ef5ac28" + integrity sha512-C4cSlnhGYNGQul/0WD9HP87knBQ/bj2q45Jt73ugn9RygEJVjhXPv30+H4sl1GZXmEg+kLgdAoNjM/Iipe+egQ== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,138 +41,138 @@ path "^0.12.7" rimraf "^3.0.2" -"@abp/bootstrap-datepicker@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.0.2.tgz#4c4bc2d667d82f299df753a741de0de3333db244" - integrity sha512-vlsKrW0XraHnVJlkv5zm4xVO/+LX9Fz9x6x2B5nHS2DnMnusENaCyvynWwIrm95/lQyXbkUQ1rjnNpI8/5p5TQ== +"@abp/bootstrap-datepicker@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.0.3.tgz#866d4b3b83bb548e7d71066408c5ab344ce33473" + integrity sha512-nnzm9rxu/vKIUdQQMlN/kGqL+DbOg8FmN81KyWJ23KmisViLVqDeTEJBHPOJ3WuzRN+SacoreiL4f3C+7YiiXQ== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.0.2.tgz#129b119594cf1ff211736b4295c254bcd7d2174f" - integrity sha512-cbJSsaxVEkP+pvVH+2GaYDn/u2u2sPF8oOQb89ZYOy46d+gVph8ZMuJ4f6pefei8Ps2h+q1JPbb8UPkzyI53Ig== +"@abp/bootstrap@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.0.3.tgz#1d0ce60eff1dc67642147f0f2897eb13f6353d09" + integrity sha512-Vd/bdyh4bnp3vz4QsPjlc8Wi1qfaRSBDekWbHWkNq568BLXSMkK6ucugGAvC7kshBj3bbSpHd9xWUImim0+Q/w== dependencies: - "@abp/core" "~3.0.2" + "@abp/core" "~3.0.3" bootstrap "^4.5.0" bootstrap-v4-rtl "4.4.1-2" -"@abp/core@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.0.2.tgz#88f4c8484a743f50c8980c1bb26cb79f453b9e3f" - integrity sha512-qMwY3YCpzTRmAkPH1u5ViduWjZdRgS9uu7chV+E+Iq7wknJ/JPtE/TrAUYbz/QhA7LFXoA74ZjbOeBW48x/cQA== +"@abp/core@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.0.3.tgz#05e45a5533f5a6f9014b4a4a87c73d96b7c071dc" + integrity sha512-lNrG0cYbHQHH6i2B5yfBL7iU3rl3TL66H+tDVCBqXNlnGAFOS48RG/jE2mMw54U8xgtwNczwBpgGVWAqU3uKig== dependencies: "@abp/utils" "~2.9.0" -"@abp/datatables.net-bs4@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.0.2.tgz#f16291b21352a07fe509daeec5b18da56c366157" - integrity sha512-jXM1B2hcNQzAhnMvCyeBc1UWeNWKTtChLk5QYQuQFbxifIT9WPT1Rs9+Q4QlV1VgTq2xzkOnZmXFjCmeQvMWgg== +"@abp/datatables.net-bs4@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.0.3.tgz#627a64f4fdc8c7fb7f4e51232c4147b5f2cfe041" + integrity sha512-seZR/yu8p0SJMafVCwYA5YAi7F2IMMo6cBJsF+phTBrPGBaXd63arNK7ZiXYp3RfwnafglotKNgswO0lYRMXKw== dependencies: - "@abp/datatables.net" "~3.0.2" + "@abp/datatables.net" "~3.0.3" datatables.net-bs4 "^1.10.21" -"@abp/datatables.net@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.0.2.tgz#13b0812f448e4cde29518fd38855d4eb285e8d52" - integrity sha512-KKJ11FxJmMuY+/5MqECnyUfVGrap0M4RYfVzt4wunfNA8xOufSMdsak1AbZU9/f6ygc4BTvVQV+ikmDpeaNHiQ== +"@abp/datatables.net@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.0.3.tgz#2a8eed257f943cc9d477eabe2501ead9fcc37d76" + integrity sha512-ULmYJZ3RU1kisMDCtB1Wq8tBmIn09QKW+asB33y9bT4td/cEDqULyJXbwNZYIzqA6VPzHenxiJbciFkFwPwkaQ== dependencies: - "@abp/jquery" "~3.0.2" + "@abp/jquery" "~3.0.3" datatables.net "^1.10.21" -"@abp/font-awesome@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.0.2.tgz#85abed5014e1324925142ee3e81f23f9fbffd264" - integrity sha512-z4sw7LPQ2meajQbfCNu1I7lLho6K5cDCU1RZzHfTvry3FWRNrG5I5amvqEgC7/IAzz8WcRk/6O93rJFDuXKiHg== +"@abp/font-awesome@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.0.3.tgz#e0fb803c04c2f3f36017aa8a065a7f20245a2b50" + integrity sha512-UY9i35H+3EMqBszLdLyM72TRVp+hDe8CFs8q2PBNzoIsrMGqx4mKFSTxUsts03USqQ+4v6D08M056D3a0oS+DQ== dependencies: - "@abp/core" "~3.0.2" + "@abp/core" "~3.0.3" "@fortawesome/fontawesome-free" "^5.13.0" -"@abp/jquery-form@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.0.2.tgz#6c1a3e1ae19add336bdf0c0d7ec8ff041303002d" - integrity sha512-UhjfO2h4ZnaYEncZ3ez8AnLzhg6D0oHy1GFjs3se+0u7rFR2iJ7YN3VlEeHweZokAzlVwoSrNXOKYRkhL8V75g== +"@abp/jquery-form@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.0.3.tgz#bcb6ca18c5671914fd87bb9651feef57142f9ae3" + integrity sha512-VokAc7jgBQAEcu15FSJPWLJcL+/mrFFwia/DdpkPyU+SrXHgD35Gu7Kb+/knQcVKNCM80mCH5gZXDbaA5Hrt3w== dependencies: - "@abp/jquery" "~3.0.2" + "@abp/jquery" "~3.0.3" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.0.2.tgz#50dc6b9b0366b83790ec9d342eb9bd397037102b" - integrity sha512-xx2A0E5I7KFPU1wRK7edvwYk+gcjMFRnnhJYwg1CELAmzeaYORDo6gwXqywcyIIEpFSIKcqIMih4A/mFObq85w== +"@abp/jquery-validation-unobtrusive@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.0.3.tgz#e4247a56149306aa69a8df1017f7da9a07abce26" + integrity sha512-Ig3UyfPj5qyP2BCLYeaihMzzj2p4Hkh1uJX6Bm2qShRKDW3Br5D0z3JIEXiGvzukGTdCnTG+mwGQowZfdxgdUQ== dependencies: - "@abp/jquery-validation" "~3.0.2" + "@abp/jquery-validation" "~3.0.3" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.0.2.tgz#9477215ae684b394ab6c5a0deeac7a3615c2ff18" - integrity sha512-gJQrjScSJeAEMtR348QdsjtdMFut2GCrt070VaNrm0PpM7lhEue6Qq+M6/HJt44puRyyJxoxg6NJvnFm2RKbVQ== +"@abp/jquery-validation@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.0.3.tgz#c95f5b9fa5d6ec973bffb0e98d08317707a95b83" + integrity sha512-Ss38QtC4IrDbICNJT9fTNWka6ekmhrfCrArOeVR8O47BIx9FRl2IBX8TBjuC3ZXv9c1oNxTICmmSCgQYfdQ02A== dependencies: - "@abp/jquery" "~3.0.2" + "@abp/jquery" "~3.0.3" jquery-validation "^1.19.2" -"@abp/jquery@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.0.2.tgz#d0e2bc7cecb4e6b4841b34779c81996b8f58e208" - integrity sha512-Xx/Qavk0khWu8H6vFi8IvrDu3LtWQCXo+NXi6qF2hPFgC2i9iWu9NQLAO5Wp9rZ+ZcAoLiQfSLYe2ZA9gNufcg== +"@abp/jquery@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.0.3.tgz#b9b6b5c110c116d484b090a485503eb1e5f7f8fb" + integrity sha512-EVkCdy8bGHZ1Za/H7Iw5e/maiihx3Hn8VvU//D6U3FlC3D/Fo7hYEPOVvlVtpco6J1e0wMe9dUnCQxjPDBfQGw== dependencies: - "@abp/core" "~3.0.2" + "@abp/core" "~3.0.3" jquery "~3.5.1" -"@abp/lodash@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.0.2.tgz#922fcf503952df0ec9944529d2c5cda1c274eaa5" - integrity sha512-RxboDnNPz8VZQiOW6gu51sbZ7lkXJ7snUyYn1luKk6IVZUoQf3l+LmJ1rLYiyprMniwIcjHfUNYJOu3sk02lig== +"@abp/lodash@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.0.3.tgz#4289cc71d83ed3ec29beacd784ee68b6ac575274" + integrity sha512-7UIagvq204xsyNQq7yucSHRj3BPE/yvTUELLEDWmjBQPkjB9GukeoeYqUxderEbVboCLIPYgGCwAWz9IyBtvFQ== dependencies: - "@abp/core" "~3.0.2" + "@abp/core" "~3.0.3" lodash "^4.17.15" -"@abp/luxon@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.0.2.tgz#5c57ac2bd834804e725bc3ceb4014cbf2ac7afac" - integrity sha512-ysQ4/MWFWxXdu+QFSBSAufrTCyFF5yZC8ByMYk9ezvkRzzUl+Q4mO1cKV7IXDD+saQeAljKEehvyXS9hpGqf0A== +"@abp/luxon@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.0.3.tgz#e2eb7db08c07efbd877a7216bf4f6aca18e24473" + integrity sha512-L7rzo7LLV9Kn92Fdk8g0+CqVsxedRs1cLmDA2QDn4idJ728kYJjSZpRWPjLW087dkSBen0Gtr7gxUn6HiXizpA== dependencies: luxon "^1.24.1" -"@abp/malihu-custom-scrollbar-plugin@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.0.2.tgz#809c20a750b82872fa8e3a57d67c4e50ccb12ce5" - integrity sha512-7GkH4HhxnSciZa/hLR78AB1KYKoic0skU0A/MEYl3E/LWoQ5KpvRDsbhQw90ZKnfXOV+shb7P1sxNlz3bdI/hQ== +"@abp/malihu-custom-scrollbar-plugin@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.0.3.tgz#77d45ac9044ebbe5a80a5764f4a55f1943c813f1" + integrity sha512-cJfdJexrZjJfoz+mMWXCFgi6gDa0fq9OAcpxZGz5aVeIrNOnWdEvjT02beowU9Rhl6vL6jWxpqaWt3H4jiGOSw== dependencies: - "@abp/core" "~3.0.2" + "@abp/core" "~3.0.3" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.0.2.tgz#8f970c99c1203a43c0651c0a5c27f6b056442386" - integrity sha512-YgIbaZWoaUzoz8TJQOi7ltPjLHtP0x7unPVnzs94hEPsIHaIBuITZNws93UpF5OJ0peVYCcdPpJXBjGW79kK1A== +"@abp/select2@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.0.3.tgz#5545502067f12bd9e502133dc9c0f7b73adf0d18" + integrity sha512-tmQN1TfO3szU6iw/K+YjoIqKeD6hnCVNIedg0l2YqTyZfo9QREEzY8CRqQELphhGkHmsMOl5tjXeD9BJVMna2g== dependencies: - "@abp/core" "~3.0.2" + "@abp/core" "~3.0.3" select2 "^4.0.13" -"@abp/sweetalert@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.0.2.tgz#c3f1fb7c56ba965ea0717ab80e4cae83b01c7bc2" - integrity sha512-HDNFt9PfFZDYMQ72m4l9M56WlDsG9k9Y51LnXp6hQIbQcw/e2wBi7CGfd6qsspQhoiyjhelz2/EDpBsubE5J7w== +"@abp/sweetalert@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.0.3.tgz#a167d49303833d0821d63e47e3882b9dcb5a66f4" + integrity sha512-RMBkZ4Tmm2qcW88noswsrnD1cik0R3q2GCDV1Ngm2V+u2KbbSbtLN2B+YQEU1SwDop0Miml8eNk2GeRLYT6kbA== dependencies: - "@abp/core" "~3.0.2" + "@abp/core" "~3.0.3" sweetalert "^2.1.2" -"@abp/timeago@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.0.2.tgz#f7aa843c8a934982af4e58a9e3a4bc4860ba2d84" - integrity sha512-PCTBRKqbHq3Qu8WPHIvNz2M+LY4tlR5URmJjvxuK+ckJzPI8bd7XsonJ1naf2BYyC1THlmRH1jA45yaTP8/juw== +"@abp/timeago@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.0.3.tgz#1fa2f4814babc965a2a95149b432f1fc466ad18a" + integrity sha512-iUG9RfV8vSernjMoojlnManZ+QTaRlMOvikeHQR8MaPYH/XC2sRLNoLN0sYTC5F/xzLQU4MSQFXZ54dobUyYfA== dependencies: - "@abp/jquery" "~3.0.2" + "@abp/jquery" "~3.0.3" timeago "^1.6.7" -"@abp/toastr@~3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.0.2.tgz#97e74c2bb5c86b400c831ad7c8543a7caea8c6c1" - integrity sha512-UqQX/1PZ0scm5Agparb8raM/L6yiVVuksfS7WKpeq3YtAp1Wd2og+7PxnAxeUlWchzHXgfsuBioPjLMvVTK0VQ== +"@abp/toastr@~3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.0.3.tgz#1f4421f03c6c69bd4ca93123953cdc4ac3abfd99" + integrity sha512-phMAFhJcLbti09da3WdDx5YZ2zzkh/Xgag2iJWunnnt5G+dH/4WTN1sLdIo06WwDLjArz19c2ZHqV52uwb2vXA== dependencies: - "@abp/jquery" "~3.0.2" + "@abp/jquery" "~3.0.3" toastr "^2.1.4" "@abp/utils@~2.9.0": From 84168daa1e987f1b69fd6a22d9f9cfa391383d0d Mon Sep 17 00:00:00 2001 From: maliming <6908465+maliming@users.noreply.github.com> Date: Wed, 8 Jul 2020 11:18:53 +0800 Subject: [PATCH 073/137] Update Part-5.md --- docs/en/Tutorials/Part-5.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/en/Tutorials/Part-5.md b/docs/en/Tutorials/Part-5.md index 441db14638..e49d53388a 100644 --- a/docs/en/Tutorials/Part-5.md +++ b/docs/en/Tutorials/Part-5.md @@ -366,7 +366,7 @@ Open the `/src/app/book/book.component.html` file and replace the create button ```` @@ -385,12 +385,12 @@ Open the `/src/app/book/book.component.html` file and replace the edit and delet ````html ```` From af6db568cc042b357f71c983cfb782840a66c237 Mon Sep 17 00:00:00 2001 From: maliming <6908465+maliming@users.noreply.github.com> Date: Wed, 8 Jul 2020 11:33:05 +0800 Subject: [PATCH 074/137] Rename bookTypeArr to bookTypes. --- docs/en/Tutorials/Part-3.md | 4 ++-- docs/pt-BR/Tutorials/Angular/Part-II.md | 8 ++++---- docs/zh-Hans/Tutorials/Part-2.md | 12 ++++++------ 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/docs/en/Tutorials/Part-3.md b/docs/en/Tutorials/Part-3.md index 275f1b9730..ef1f903c51 100644 --- a/docs/en/Tutorials/Part-3.md +++ b/docs/en/Tutorials/Part-3.md @@ -832,7 +832,7 @@ Open `/src/app/book/book.component.html` and replace ` Type *
@@ -921,7 +921,7 @@ export class BookComponent implements OnInit { form: FormGroup; - // <== added bookTypeArr array ==> + // <== added bookTypes array ==> bookTypes = Object.keys(BookType).filter( (bookType) => typeof this.booksType[bookType] === 'number' ); diff --git a/docs/pt-BR/Tutorials/Angular/Part-II.md b/docs/pt-BR/Tutorials/Angular/Part-II.md index 44c00e6370..b75fa9e21c 100644 --- a/docs/pt-BR/Tutorials/Angular/Part-II.md +++ b/docs/pt-BR/Tutorials/Angular/Part-II.md @@ -195,7 +195,7 @@ Abra `book-list.component.html`e adicione o formulário no modelo de corpo do mo *
@@ -218,18 +218,18 @@ Abra `book-list.component.html`e adicione o formulário no modelo de corpo do mo > Usamos o [datepicker do NgBootstrap](https://ng-bootstrap.github.io/#/components/datepicker/overview) neste componente. -Abra o `book-list.component.ts`e crie uma matriz chamada `bookTypeArr`: +Abra o `book-list.component.ts`e crie uma matriz chamada `bookTypes`: ```js //... form: FormGroup; -bookTypeArr = Object.keys(Books.BookType).filter( +bookTypes = Object.keys(Books.BookType).filter( bookType => typeof this.booksType[bookType] === 'number' ); ``` -O `bookTypeArr`contém os campos da `BookType`enumeração. A matriz resultante é mostrada abaixo: +O `bookTypes`contém os campos da `BookType`enumeração. A matriz resultante é mostrada abaixo: ```js ['Adventure', 'Biography', 'Dystopia', 'Fantastic' ...] diff --git a/docs/zh-Hans/Tutorials/Part-2.md b/docs/zh-Hans/Tutorials/Part-2.md index 5ddc8c2a66..751bd85ece 100644 --- a/docs/zh-Hans/Tutorials/Part-2.md +++ b/docs/zh-Hans/Tutorials/Part-2.md @@ -650,7 +650,7 @@ export class BookListComponent implements OnInit { *
@@ -721,8 +721,8 @@ export class BookListComponent implements OnInit { booksType = BookType; - // <== added bookTypeArr array ==> - bookTypeArr = Object.keys(BookType).filter( + // <== added bookTypes array ==> + bookTypes = Object.keys(BookType).filter( (bookType) => typeof this.booksType[bookType] === 'number' ); @@ -764,7 +764,7 @@ export class BookListComponent implements OnInit { * 我们添加了一个新的 `NgbDateAdapter` 提供程序,它将Datepicker值转换为Date类型. 有关更多详细信息,请参见[datepicker adapters](https://ng-bootstrap.github.io/#/components/datepicker/overview). -* 我们添加了 `bookTypeArr` 数组,以便能够在combobox值中使用它. `bookTypeArr` 包含 `BookType` 枚举的字段. 得到的数组如下所示: +* 我们添加了 `bookTypes` 数组,以便能够在combobox值中使用它. `bookTypes` 包含 `BookType` 枚举的字段. 得到的数组如下所示: ```js ['Adventure', 'Biography', 'Dystopia', 'Fantastic' ...] @@ -799,7 +799,7 @@ export class BookListComponent implements OnInit { booksType = BookType; - bookTypeArr = Object.keys(BookType).filter( + bookTypes = Object.keys(BookType).filter( (bookType) => typeof this.booksType[bookType] === 'number' ); @@ -904,7 +904,7 @@ export class BookListComponent implements OnInit { booksType = BookType; - bookTypeArr = Object.keys(BookType).filter( + bookTypes = Object.keys(BookType).filter( (bookType) => typeof this.booksType[bookType] === 'number' ); From c5a6caa13938cf8fe79de92626fd1dea944471af Mon Sep 17 00:00:00 2001 From: maliming <6908465+maliming@users.noreply.github.com> Date: Wed, 8 Jul 2020 11:40:24 +0800 Subject: [PATCH 075/137] Update Part-5.md --- docs/en/Tutorials/Part-5.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/Tutorials/Part-5.md b/docs/en/Tutorials/Part-5.md index e49d53388a..5dd6a55e30 100644 --- a/docs/en/Tutorials/Part-5.md +++ b/docs/en/Tutorials/Part-5.md @@ -390,7 +390,7 @@ Open the `/src/app/book/book.component.html` file and replace the edit and delet ```` From 3ba4f33da1cc1dcc3b6c228c5af513085c22802c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ahmet=20=C3=87otur?= Date: Wed, 8 Jul 2020 13:57:20 +0300 Subject: [PATCH 076/137] Demo view components converted to embedded resource --- .../AbpAspNetCoreMvcUiThemeSharedDemoModule.cs | 2 +- ...Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo.csproj | 10 ++++++++++ .../Pages/Components/Dropdowns/Index.cshtml | 6 +++--- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo/AbpAspNetCoreMvcUiThemeSharedDemoModule.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo/AbpAspNetCoreMvcUiThemeSharedDemoModule.cs index cd312db532..30265019c4 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo/AbpAspNetCoreMvcUiThemeSharedDemoModule.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo/AbpAspNetCoreMvcUiThemeSharedDemoModule.cs @@ -12,7 +12,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo { Configure(options => { - options.FileSets.AddEmbedded("Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo"); + options.FileSets.AddEmbedded(); }); } } diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo.csproj b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo.csproj index 8c098c3300..8ce2077235 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo.csproj +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Demo.csproj @@ -12,6 +12,7 @@ false false false + true true Library @@ -23,5 +24,14 @@ + + + + + + + + + diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/Pages/Components/Dropdowns/Index.cshtml b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/Pages/Components/Dropdowns/Index.cshtml index 2b8c7f387e..9bdf7abe38 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/Pages/Components/Dropdowns/Index.cshtml +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/Pages/Components/Dropdowns/Index.cshtml @@ -4,10 +4,10 @@ @model Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo.Pages.Components.Dropdowns.IndexModel @inject IPageLayout PageLayout @{ - PageLayout.Content.Title = "DrowDowns"; + PageLayout.Content.Title = "Dropdowns"; } -

Cards

-
+

Dropdowns

+

Based on Bootstrap Dropdown.

Check the ABP Documentation.

@await Component.InvokeAsync(typeof(DropdownsDemoViewComponent)) \ No newline at end of file From 106683530c9f4160bee1523916522fe47e9e6dfd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 8 Jul 2020 17:43:04 +0300 Subject: [PATCH 077/137] Add BookStoreTestConsts.CollectionDefinitionName --- docs/en/Tutorials/Part-4.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/en/Tutorials/Part-4.md b/docs/en/Tutorials/Part-4.md index 0325f3f60a..95fdacc69f 100644 --- a/docs/en/Tutorials/Part-4.md +++ b/docs/en/Tutorials/Part-4.md @@ -83,6 +83,9 @@ using Xunit; namespace Acme.BookStore.Books { +{{if DB=="Mongo"}} + [Collection(BookStoreTestConsts.CollectionDefinitionName)] +{{end}} public class BookAppService_Tests : BookStoreApplicationTestBase { private readonly IBookAppService _bookAppService; @@ -173,6 +176,9 @@ using Xunit; namespace Acme.BookStore.Books { +{{if DB=="Mongo"}} + [Collection(BookStoreTestConsts.CollectionDefinitionName)] +{{end}} public class BookAppService_Tests : BookStoreApplicationTestBase { private readonly IBookAppService _bookAppService; From 2778e023a4b87bed93399a0d949d2de9167d4458 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 8 Jul 2020 17:46:34 +0300 Subject: [PATCH 078/137] Update Part-4.md --- docs/en/Tutorials/Part-4.md | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/docs/en/Tutorials/Part-4.md b/docs/en/Tutorials/Part-4.md index 95fdacc69f..5e87d18653 100644 --- a/docs/en/Tutorials/Part-4.md +++ b/docs/en/Tutorials/Part-4.md @@ -82,10 +82,8 @@ using Volo.Abp.Application.Dtos; using Xunit; namespace Acme.BookStore.Books -{ -{{if DB=="Mongo"}} - [Collection(BookStoreTestConsts.CollectionDefinitionName)] -{{end}} +{ {{if DB=="Mongo"}} + [Collection(BookStoreTestConsts.CollectionDefinitionName)]{{end}} public class BookAppService_Tests : BookStoreApplicationTestBase { private readonly IBookAppService _bookAppService; @@ -175,10 +173,8 @@ using Volo.Abp.Validation; using Xunit; namespace Acme.BookStore.Books -{ -{{if DB=="Mongo"}} - [Collection(BookStoreTestConsts.CollectionDefinitionName)] -{{end}} +{ {{if DB=="Mongo"}} + [Collection(BookStoreTestConsts.CollectionDefinitionName)]{{end}} public class BookAppService_Tests : BookStoreApplicationTestBase { private readonly IBookAppService _bookAppService; From e7562a28d2d024d0b5a19de02a97dd9f60d6184e Mon Sep 17 00:00:00 2001 From: Xeevis Date: Wed, 8 Jul 2020 19:05:01 +0200 Subject: [PATCH 079/137] Update Czech translations --- .../Localization/Resources/AbpUi/cs.json | 2 ++ .../Account/Localization/Resources/cs.json | 5 +++- .../Admin/ApplicationContracts/cs.json | 2 +- .../Blogging/Localization/Resources/cs.json | 2 +- .../Docs/ApplicationContracts/cs.json | 23 ++++++++++++++++++- .../Localization/MyProjectName/cs.json | 3 ++- 6 files changed, 32 insertions(+), 5 deletions(-) diff --git a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/cs.json b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/cs.json index 2e4095ceae..b42cc1ebe3 100644 --- a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/cs.json +++ b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/cs.json @@ -47,6 +47,8 @@ "PagerInfoEmpty": "Zobrazeno od 0 do 0 z celkem 0 záznamů", "PagerInfoFiltered": "(filtrováno ze všech _MAX_ záznamů)", "NoDataAvailableInDatatable": "Nejsou žádná data", + "Total": "celkem", + "Selected": "vybráno", "PagerShowMenuEntries": "Zobrazit _MENU_ záznamů", "DatatableActionDropdownDefaultText": "Akce", "ChangePassword": "Změnit heslo", diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/cs.json b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/cs.json index 120060c4f4..ba7979dc65 100644 --- a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/cs.json +++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/cs.json @@ -40,6 +40,9 @@ "DisplayName:Abp.Account.IsSelfRegistrationEnabled": "Je povolena automatická registrace", "Description:Abp.Account.IsSelfRegistrationEnabled": "Zda si uživatel může účet zaregistrovat sám.", "DisplayName:Abp.Account.EnableLocalLogin": "Ověření pomocí místního účtu", - "Description:Abp.Account.EnableLocalLogin": "Označuje, zda server umožní uživatelům ověřovat se pomocí místního účtu." + "Description:Abp.Account.EnableLocalLogin": "Označuje, zda server umožní uživatelům ověřovat se pomocí místního účtu.", + "LoggedOutTitle": "Odhlášeno", + "LoggedOutText": "Byli jste odhlášeni a brzy budete přesměrováni.", + "ReturnToText": "Kliknutím sem přejdete na {0}" } } diff --git a/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Localization/Resources/Blogging/Admin/ApplicationContracts/cs.json b/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Localization/Resources/Blogging/Admin/ApplicationContracts/cs.json index 1c8657c85c..b56e842ddc 100644 --- a/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Localization/Resources/Blogging/Admin/ApplicationContracts/cs.json +++ b/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Localization/Resources/Blogging/Admin/ApplicationContracts/cs.json @@ -1,7 +1,7 @@ { "culture": "cs", "texts": { - "Permission:BloggingAdmin": "Blog", + "Permission:BloggingAdmin": "Blogování", "Permission:Blogs": "Blogy", "Permission:Management": "Správa", "Permission:Edit": "Upravit", diff --git a/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/cs.json b/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/cs.json index 2761ca0278..109a695ea2 100644 --- a/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/cs.json +++ b/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/cs.json @@ -2,7 +2,7 @@ "culture": "cs", "texts": { "Menu:Blogs": "Blogy", - "Menu:BlogManagement": "Správa blogu", + "Menu:BlogManagement": "Blogování", "Title": "Nadpis", "Delete": "Smazat", "Reply": "Odpovědět", diff --git a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/cs.json b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/cs.json index 64ecaa2f47..081a5f2cd4 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/cs.json +++ b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/cs.json @@ -7,6 +7,7 @@ "Permission:Delete": "Smazat", "Permission:Create": "Vytvořit", "Permission:Documents": "Dokumenty", + "Menu:Documents": "Dokumenty", "Menu:DocumentManagement": "Dokumenty", "Menu:ProjectManagement": "Projekty", "CreateANewProject": "Vytvořit nový projekt", @@ -32,6 +33,26 @@ "DisplayName:GitHubUserAgent": "GitHub user agent", "DisplayName:All": "Pull všeho", "DisplayName:LanguageCode": "Kód jazyka", - "DisplayName:Version": "Verze" + "DisplayName:Version": "Verze", + "Documents": "Dokumenty", + "RemoveFromCache": "Odebrat z mezipaměti", + "Reindex": "Reindex", + "ReindexCompleted": "Reindex dokončen", + "RemovedFromCache": "Odebráno z mezipaměti", + "RemoveFromCacheConfirmation": "Opravdu chcete tuto položku odebrat z mezipaměti?", + "ReIndexDocumentConfirmation": "Opravdu chcete tuto položku reindexovat?", + "DeleteDocumentFromDbConfirmation": "Opravdu chcete tuto položku odstranit z databáze?", + "DeleteFromDatabase": "Odstranit z databáze", + "Deleted": "Vymazáno", + "Search": "Vyhledávání", + "StartDate": "Počáteční datum", + "EndDate": "Datum ukončení", + "CreationTime": "Čas vytvoření", + "LastUpdateTime": "Poslední aktualizace", + "LastSignificantUpdateTime": "Poslední významná aktualizace", + "Version": "Verze", + "LanguageCode": "Kód jazyka", + "FileName": "Název souboru", + "LastCachedTime": "Čas uložení v mezipaměti" } } diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/cs.json b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/cs.json index 7e0fbb38b3..a975797eb2 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/cs.json +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/cs.json @@ -1,6 +1,7 @@ { "culture": "cs", "texts": { - "ManageYourProfile": "Spravovat profil" + "ManageYourProfile": "Spravovat profil", + "SamplePageMessage": "Ukázková stránka pro modul MyProjectName" } } From 750f81bd97fb6c0306424c592b904793417200cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 8 Jul 2020 21:19:49 +0300 Subject: [PATCH 080/137] Revise the index page. Add packages link to the nav menu. --- docs/en/Getting-Started.md | 2 +- docs/en/Index.md | 20 +++++--------------- docs/en/docs-nav.json | 4 ++++ 3 files changed, 10 insertions(+), 16 deletions(-) diff --git a/docs/en/Getting-Started.md b/docs/en/Getting-Started.md index 5f3d79d94a..4a597181d0 100644 --- a/docs/en/Getting-Started.md +++ b/docs/en/Getting-Started.md @@ -344,6 +344,6 @@ If you don't plan to develop a mobile application with React Native, you can saf See the "[Getting Started with the React Native](Getting-Started-React-Native.md)" document to learn how to configure and run the React Native application. -## See Also +## Next * [Web Application Development Tutorial](Tutorials/Part-1.md) \ No newline at end of file diff --git a/docs/en/Index.md b/docs/en/Index.md index 8eeb7aeb72..5fe44625ad 100644 --- a/docs/en/Index.md +++ b/docs/en/Index.md @@ -1,28 +1,18 @@ # ABP Documentation -ABP is an **open source application framework** focused on ASP.NET Core based web application development, but also supports developing other type of applications. +ABP is an **open source application framework** focused on **ASP.NET Core** based **web application development**. It also supports developing other type of applications. -Explore the left navigation menu to deep dive in the documentation. +Explore the navigation menu to deep dive in the documentation. ## Getting Started -Easiest way to start a new project with ABP is to use the startup templates: +The easiest way to start a new web application with the ABP Framework is to use the [getting started](Getting-Started.md) tutorial. -* [ASP.NET Core MVC (Razor Pages) UI Startup Template](Getting-Started.md?UI=MVC&DB=EF&Tiered=No) -* [Angular UI Startup Template](Getting-Started.md?UI=NG&DB=EF&Tiered=No) - -If you want to start from scratch (with an empty project) then manually install the ABP Framework and use the following tutorials: - -* [Console Application](Getting-Started-Console-Application.md) -* [ASP.NET Core Web Application](Getting-Started-AspNetCore-Application.md) - -## Packages - -ABP Framework is distributed as NuGet and NPM packages. See [this page](http://abp.io/packages) for the complete list of the packages. +Then you can continue with the [web application development tutorial](Tutorials/Part-1.md). ## Source Code -ABP is hosted on GitHub. See [the source code](https://github.com/abpframework/abp). +ABP is hosted on GitHub. See [the source code](https://github.com/abpframework). ## Want to Contribute? diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json index 239f071619..a6ab09dfee 100644 --- a/docs/en/docs-nav.json +++ b/docs/en/docs-nav.json @@ -626,6 +626,10 @@ { "text": "API Documentation", "path": "{ApiDocumentationUrl}" + }, + { + "text": "Official Packages", + "path": "https://abp.io/packages" } ] } From efe8bca28cfd928d7807bd345150261341ead490 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 9 Jul 2020 09:21:05 +0300 Subject: [PATCH 081/137] Update CLI.md --- docs/en/CLI.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/CLI.md b/docs/en/CLI.md index 160bb549c3..bfa787cdd1 100644 --- a/docs/en/CLI.md +++ b/docs/en/CLI.md @@ -82,7 +82,7 @@ abp new Acme.BookStore * `--mobile` or `-m`: Specifies the mobile application framework. Default framework is `react-native`. Available frameworks: * `none`: no mobile application. * `react-native`: React Native. - * `--database-provider` or `-d`: Specifies the database provider. Default provider is `ef`. Available providers: + * `--database-provider` or `-d`: Specifies the database provider. Default provider is `ef`. Available providers: * `ef`: Entity Framework Core. * `mongodb`: MongoDB. * **`module`**: [Module template](Startup-Templates/Module.md). Additional options: From 25e362a43b9ead745b1233282d671989f3308453 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 9 Jul 2020 09:32:31 +0300 Subject: [PATCH 082/137] Update CLI.md --- docs/en/CLI.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/en/CLI.md b/docs/en/CLI.md index 160bb549c3..dda95d571a 100644 --- a/docs/en/CLI.md +++ b/docs/en/CLI.md @@ -90,10 +90,10 @@ abp new Acme.BookStore * **`console`**: [Console template](Startup-Templates/Console.md). * `--output-folder` or `-o`: Specifies the output folder. Default value is the current directory. * `--version` or `-v`: Specifies the ABP & template version. It can be a [release tag](https://github.com/abpframework/abp/releases) or a [branch name](https://github.com/abpframework/abp/branches). Uses the latest release if not specified. Most of the times, you will want to use the latest version. -* `--template-source` or `-ts`: Specifies a custom template source to use to build the project. Local and network sources can be used(Like `D\localTemplate` or `https://.zip`). +* `--template-source` or `-ts`: Specifies a custom template source to use to build the project. Local and network sources can be used(Like `D:\local-template` or `https://.../my-template-file.zip`). * `--create-solution-folder` or `-csf`: Specifies if the project will be in a new folder in the output folder or directly the output folder. -* `--connection-string` or `-cs`: Overwrites the default connection strings in all `appsettings.json` files. The default connection string is `Server=localhost;Database=MyProjectName;Trusted_Connection=True;MultipleActiveResultSets=true`. You can set your own connection string if you don't want to use the default. Be aware that the default database provider is `SQL Server`, therefore you can only enter connection string for SQL Server! -* `--local-framework-ref --abp-path`: keeps local references to projects instead of replacing with NuGet package references. +* `--connection-string` or `-cs`: Overwrites the default connection strings in all `appsettings.json` files. The default connection string is `Server=localhost;Database=MyProjectName;Trusted_Connection=True;MultipleActiveResultSets=true` for EF Core and it is configured to use the SQL Server. If you want to use the EF Core, but need to change the DBMS, you can change it as [described here](Entity-Framework-Core-Other-DBMS.md) (after creating the solution). +* `--local-framework-ref --abp-path`: Uses local projects references to the ABP framework instead of using the NuGet packages. This can be useful if you download the ABP Framework source code and have a local reference to the framework from your application. ### update From 75fe3f484c5ee7b349142f2df872e8fb0b6bfb70 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Thu, 9 Jul 2020 09:46:58 +0300 Subject: [PATCH 083/137] cli createSolutionFolder option resolves https://github.com/abpframework/abp/issues/4690 --- .../Volo/Abp/Cli/Commands/NewCommand.cs | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs index 4c9a074cd2..8a6d944226 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs @@ -104,7 +104,7 @@ namespace Volo.Abp.Cli.Commands Logger.LogInformation("Template Source: " + templateSource); } - var createSolutionFolder = (commandLineArgs.Options.GetOrNull(Options.CreateSolutionFolder.Short, Options.CreateSolutionFolder.Long) ?? "true").ToLowerInvariant() != "false"; + var createSolutionFolder = GetCreateSolutionFolderPreference(commandLineArgs); if (!createSolutionFolder) { Logger.LogInformation("Create Solution Folder: no"); @@ -183,6 +183,18 @@ namespace Volo.Abp.Cli.Commands Logger.LogInformation($"'{projectName}' has been successfully created to '{outputFolder}'"); } + private bool GetCreateSolutionFolderPreference(CommandLineArgs commandLineArgs) + { + var longKey = commandLineArgs.Options.ContainsKey(Options.CreateSolutionFolder.Long); + + if (longKey == false) + { + return commandLineArgs.Options.ContainsKey(Options.CreateSolutionFolder.Short); + } + + return longKey; + } + private static string GetConnectionString(CommandLineArgs commandLineArgs) { var connectionString = commandLineArgs.Options.GetOrNull(Options.ConnectionString.Short, Options.ConnectionString.Long); From 221d5c7eabd93a746c0176eb453799e2bbdeac8b Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Thu, 9 Jul 2020 10:45:18 +0300 Subject: [PATCH 084/137] created Blogging.Application.Contracts.Shared and moved permission to there resolves https://github.com/volosoft/volo/issues/2743 --- modules/blogging/Volo.Blogging.sln | 10 +++++++ ...logging.Admin.Application.Contracts.csproj | 12 ++------ ...BloggingAdminApplicationContractsModule.cs | 14 ++------- ...oggingAdminPermissionDefinitionProvider.cs | 25 ---------------- .../Admin/BloggingAdminPermissions.cs | 23 -------------- .../Admin/ApplicationContracts/cs.json | 11 ------- .../Admin/ApplicationContracts/de.json | 11 ------- .../Admin/ApplicationContracts/en.json | 11 ------- .../Admin/ApplicationContracts/nl.json | 11 ------- .../Admin/ApplicationContracts/pl-PL.json | 11 ------- .../Admin/ApplicationContracts/pt-BR.json | 11 ------- .../Admin/ApplicationContracts/sl.json | 11 ------- .../Admin/ApplicationContracts/tr.json | 11 ------- .../Admin/ApplicationContracts/vi.json | 11 ------- .../Admin/ApplicationContracts/zh-Hans.json | 11 ------- .../Admin/ApplicationContracts/zh-Hant.json | 11 ------- .../Admin/Blogs/BlogManagementAppService.cs | 6 ++-- .../BloggingAdminMenuContributor.cs | 4 +-- .../Blogging/Admin/Blogs/Create.cshtml.cs | 2 +- .../Pages/Blogging/Admin/Blogs/Edit.cshtml.cs | 2 +- .../Pages/Blogging/Admin/Blogs/Index.cshtml | 2 +- .../Blogging/Admin/Blogs/Index.cshtml.cs | 2 +- .../Pages/Blogging/Admin/Blogs/index.js | 4 +-- .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++++++ ...ogging.Application.Contracts.Shared.csproj | 18 +++++++++++ ...loggingApplicationContractsSharedModule.cs | 15 ++++++++++ .../BloggingPermissionDefinitionProvider.cs | 6 ++++ .../Volo/Blogging/BloggingPermissions.cs | 9 ++++++ ...Volo.Blogging.Application.Contracts.csproj | 12 +------- .../BloggingApplicationContractsModule.cs | 13 ++------ .../Blogging/ApplicationContracts/cs.json | 10 ------- .../Blogging/ApplicationContracts/de.json | 10 ------- .../Blogging/ApplicationContracts/en.json | 10 ------- .../Blogging/ApplicationContracts/nl.json | 10 ------- .../Blogging/ApplicationContracts/pl-PL.json | 10 ------- .../Blogging/ApplicationContracts/pt-BR.json | 10 ------- .../Blogging/ApplicationContracts/sl.json | 10 ------- .../Blogging/ApplicationContracts/tr.json | 10 ------- .../Blogging/ApplicationContracts/vi.json | 10 ------- .../ApplicationContracts/zh-Hans.json | 10 ------- .../ApplicationContracts/zh-Hant.json | 10 ------- .../Blogging/Localization/Resources/cs.json | 9 ++++++ .../Blogging/Localization/Resources/de.json | 23 +++++++++----- .../Blogging/Localization/Resources/en.json | 9 ++++++ .../Blogging/Localization/Resources/nl.json | 11 ++++++- .../Localization/Resources/pl-PL.json | 11 ++++++- .../Localization/Resources/pt-BR.json | 11 ++++++- .../Blogging/Localization/Resources/sl.json | 11 ++++++- .../Blogging/Localization/Resources/tr.json | 11 ++++++- .../Blogging/Localization/Resources/vi.json | 9 ++++++ .../Localization/Resources/zh-Hans.json | 11 ++++++- .../Localization/Resources/zh-Hant.json | 11 ++++++- nupkg/common.ps1 | 1 + 54 files changed, 223 insertions(+), 348 deletions(-) delete mode 100644 modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/BloggingAdminPermissionDefinitionProvider.cs delete mode 100644 modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/BloggingAdminPermissions.cs delete mode 100644 modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Localization/Resources/Blogging/Admin/ApplicationContracts/cs.json delete mode 100644 modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Localization/Resources/Blogging/Admin/ApplicationContracts/de.json delete mode 100644 modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Localization/Resources/Blogging/Admin/ApplicationContracts/en.json delete mode 100644 modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Localization/Resources/Blogging/Admin/ApplicationContracts/nl.json delete mode 100644 modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Localization/Resources/Blogging/Admin/ApplicationContracts/pl-PL.json delete mode 100644 modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Localization/Resources/Blogging/Admin/ApplicationContracts/pt-BR.json delete mode 100644 modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Localization/Resources/Blogging/Admin/ApplicationContracts/sl.json delete mode 100644 modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Localization/Resources/Blogging/Admin/ApplicationContracts/tr.json delete mode 100644 modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Localization/Resources/Blogging/Admin/ApplicationContracts/vi.json delete mode 100644 modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Localization/Resources/Blogging/Admin/ApplicationContracts/zh-Hans.json delete mode 100644 modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Localization/Resources/Blogging/Admin/ApplicationContracts/zh-Hant.json create mode 100644 modules/blogging/src/Volo.Blogging.Application.Contracts.Shared/FodyWeavers.xml create mode 100644 modules/blogging/src/Volo.Blogging.Application.Contracts.Shared/FodyWeavers.xsd create mode 100644 modules/blogging/src/Volo.Blogging.Application.Contracts.Shared/Volo.Blogging.Application.Contracts.Shared.csproj create mode 100644 modules/blogging/src/Volo.Blogging.Application.Contracts.Shared/Volo/Blogging/BloggingApplicationContractsSharedModule.cs rename modules/blogging/src/{Volo.Blogging.Application.Contracts => Volo.Blogging.Application.Contracts.Shared}/Volo/Blogging/BloggingPermissionDefinitionProvider.cs (78%) rename modules/blogging/src/{Volo.Blogging.Application.Contracts => Volo.Blogging.Application.Contracts.Shared}/Volo/Blogging/BloggingPermissions.cs (76%) delete mode 100644 modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/cs.json delete mode 100644 modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/de.json delete mode 100644 modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/en.json delete mode 100644 modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/nl.json delete mode 100644 modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/pl-PL.json delete mode 100644 modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/pt-BR.json delete mode 100644 modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/sl.json delete mode 100644 modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/tr.json delete mode 100644 modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/vi.json delete mode 100644 modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/zh-Hans.json delete mode 100644 modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/zh-Hant.json diff --git a/modules/blogging/Volo.Blogging.sln b/modules/blogging/Volo.Blogging.sln index 607d2c3b1b..ad5c0fa895 100644 --- a/modules/blogging/Volo.Blogging.sln +++ b/modules/blogging/Volo.Blogging.sln @@ -59,6 +59,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Blogging.Admin.HttpApi EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Blogging.Admin.Web", "src\Volo.Blogging.Admin.Web\Volo.Blogging.Admin.Web.csproj", "{DB75CA32-96A5-4D10-8DD0-E62A3D0DDBCB}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Shared", "Shared", "{9FAD5B78-0577-4500-92D5-DC86E05F773C}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Blogging.Application.Contracts.Shared", "src\Volo.Blogging.Application.Contracts.Shared\Volo.Blogging.Application.Contracts.Shared.csproj", "{E28EBBE0-8EB7-4FC1-9267-E6D30993EAE4}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -153,6 +157,10 @@ Global {DB75CA32-96A5-4D10-8DD0-E62A3D0DDBCB}.Debug|Any CPU.Build.0 = Debug|Any CPU {DB75CA32-96A5-4D10-8DD0-E62A3D0DDBCB}.Release|Any CPU.ActiveCfg = Release|Any CPU {DB75CA32-96A5-4D10-8DD0-E62A3D0DDBCB}.Release|Any CPU.Build.0 = Release|Any CPU + {E28EBBE0-8EB7-4FC1-9267-E6D30993EAE4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E28EBBE0-8EB7-4FC1-9267-E6D30993EAE4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E28EBBE0-8EB7-4FC1-9267-E6D30993EAE4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E28EBBE0-8EB7-4FC1-9267-E6D30993EAE4}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -183,6 +191,8 @@ Global {59BBAF94-CC8E-4313-9143-F2F5C36A7C45} = {BE2A423C-271E-469A-AD90-5640DEBEE9C1} {58A63CC9-C886-448B-AB4E-068600294D86} = {BE2A423C-271E-469A-AD90-5640DEBEE9C1} {DB75CA32-96A5-4D10-8DD0-E62A3D0DDBCB} = {BE2A423C-271E-469A-AD90-5640DEBEE9C1} + {9FAD5B78-0577-4500-92D5-DC86E05F773C} = {42BF26EF-B8C7-42DC-9FFB-3653109B7776} + {E28EBBE0-8EB7-4FC1-9267-E6D30993EAE4} = {9FAD5B78-0577-4500-92D5-DC86E05F773C} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {F2BAE819-78D4-407A-9201-22473B2850B0} diff --git a/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo.Blogging.Admin.Application.Contracts.csproj b/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo.Blogging.Admin.Application.Contracts.csproj index 3fd2a7c98b..2af8db519c 100644 --- a/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo.Blogging.Admin.Application.Contracts.csproj +++ b/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo.Blogging.Admin.Application.Contracts.csproj @@ -2,7 +2,7 @@ - + netstandard2.0 Volo.Blogging.Admin.Application.Contracts @@ -12,15 +12,7 @@ - - + - - - - - - - diff --git a/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/BloggingAdminApplicationContractsModule.cs b/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/BloggingAdminApplicationContractsModule.cs index fa246dc753..5f255f3c01 100644 --- a/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/BloggingAdminApplicationContractsModule.cs +++ b/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/BloggingAdminApplicationContractsModule.cs @@ -5,22 +5,12 @@ using Volo.Blogging.Localization; namespace Volo.Blogging.Admin { - [DependsOn(typeof(BloggingDomainSharedModule))] + [DependsOn(typeof(BloggingApplicationContractsSharedModule))] public class BloggingAdminApplicationContractsModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) { - Configure(options => - { - options.FileSets.AddEmbedded(); - }); - - Configure(options => - { - options.Resources - .Get() - .AddVirtualJson("Volo/Blogging/Admin/Localization/Resources/Blogging/Admin/ApplicationContracts"); - }); + } } } diff --git a/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/BloggingAdminPermissionDefinitionProvider.cs b/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/BloggingAdminPermissionDefinitionProvider.cs deleted file mode 100644 index 77c8f98e62..0000000000 --- a/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/BloggingAdminPermissionDefinitionProvider.cs +++ /dev/null @@ -1,25 +0,0 @@ -using Volo.Abp.Authorization.Permissions; -using Volo.Abp.Localization; -using Volo.Blogging.Localization; - -namespace Volo.Blogging.Admin -{ - public class BloggingAdminPermissionDefinitionProvider : PermissionDefinitionProvider - { - public override void Define(IPermissionDefinitionContext context) - { - var bloggingGroup = context.AddGroup(BloggingAdminPermissions.GroupName, L("Permission:BloggingAdmin")); - - var blogs = bloggingGroup.AddPermission(BloggingAdminPermissions.Blogs.Default, L("Permission:Blogs")); - blogs.AddChild(BloggingAdminPermissions.Blogs.Management, L("Permission:Management")); - blogs.AddChild(BloggingAdminPermissions.Blogs.Update, L("Permission:Edit")); - blogs.AddChild(BloggingAdminPermissions.Blogs.Delete, L("Permission:Delete")); - blogs.AddChild(BloggingAdminPermissions.Blogs.Create, L("Permission:Create")); - } - - private static LocalizableString L(string name) - { - return LocalizableString.Create(name); - } - } -} diff --git a/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/BloggingAdminPermissions.cs b/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/BloggingAdminPermissions.cs deleted file mode 100644 index 9150af601b..0000000000 --- a/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/BloggingAdminPermissions.cs +++ /dev/null @@ -1,23 +0,0 @@ -using Volo.Abp.Reflection; - -namespace Volo.Blogging.Admin -{ - public class BloggingAdminPermissions - { - public const string GroupName = "Blogging.Admin"; - - public static class Blogs - { - public const string Default = GroupName + ".Blog"; - public const string Management = Default + ".Management"; - public const string Delete = Default + ".Delete"; - public const string Update = Default + ".Update"; - public const string Create = Default + ".Create"; - } - - public static string[] GetAll() - { - return ReflectionHelper.GetPublicConstantsRecursively(typeof(BloggingAdminPermissions)); - } - } -} diff --git a/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Localization/Resources/Blogging/Admin/ApplicationContracts/cs.json b/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Localization/Resources/Blogging/Admin/ApplicationContracts/cs.json deleted file mode 100644 index b56e842ddc..0000000000 --- a/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Localization/Resources/Blogging/Admin/ApplicationContracts/cs.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "culture": "cs", - "texts": { - "Permission:BloggingAdmin": "Blogování", - "Permission:Blogs": "Blogy", - "Permission:Management": "Správa", - "Permission:Edit": "Upravit", - "Permission:Create": "Vytvořit", - "Permission:Delete": "Smazat" - } -} diff --git a/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Localization/Resources/Blogging/Admin/ApplicationContracts/de.json b/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Localization/Resources/Blogging/Admin/ApplicationContracts/de.json deleted file mode 100644 index 5666cbb368..0000000000 --- a/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Localization/Resources/Blogging/Admin/ApplicationContracts/de.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "culture": "de", - "texts": { - "Permission:BloggingAdmin": "Blog", - "Permission:Blogs": "Blogs", - "Permission:Management": "Verwaltung", - "Permission:Edit": "Bearbeiten", - "Permission:Create": "Erstellen", - "Permission:Delete": "Löschen" - } -} diff --git a/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Localization/Resources/Blogging/Admin/ApplicationContracts/en.json b/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Localization/Resources/Blogging/Admin/ApplicationContracts/en.json deleted file mode 100644 index f3708eacad..0000000000 --- a/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Localization/Resources/Blogging/Admin/ApplicationContracts/en.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "culture": "en", - "texts": { - "Permission:BloggingAdmin": "Blogging", - "Permission:Blogs": "Blogs", - "Permission:Management": "Management", - "Permission:Edit": "Edit", - "Permission:Create": "Create", - "Permission:Delete": "Delete" - } -} diff --git a/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Localization/Resources/Blogging/Admin/ApplicationContracts/nl.json b/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Localization/Resources/Blogging/Admin/ApplicationContracts/nl.json deleted file mode 100644 index c1174611c1..0000000000 --- a/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Localization/Resources/Blogging/Admin/ApplicationContracts/nl.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "culture": "nl", - "texts": { - "Permission:BloggingAdmin": "Blog", - "Permission:Blogs": "Blogs", - "Permission:Management": "Beheer", - "Permission:Edit": "Bewerk", - "Permission:Create": "Maak aan", - "Permission:Delete": "Verwijder" - } -} diff --git a/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Localization/Resources/Blogging/Admin/ApplicationContracts/pl-PL.json b/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Localization/Resources/Blogging/Admin/ApplicationContracts/pl-PL.json deleted file mode 100644 index e8f6135456..0000000000 --- a/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Localization/Resources/Blogging/Admin/ApplicationContracts/pl-PL.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "culture": "pl-PL", - "texts": { - "Permission:BloggingAdmin": "Blog", - "Permission:Blogs": "Blogi", - "Permission:Management": "Zarządzanie", - "Permission:Edit": "Edytuj", - "Permission:Create": "Utwórz", - "Permission:Delete": "Usuń" - } -} diff --git a/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Localization/Resources/Blogging/Admin/ApplicationContracts/pt-BR.json b/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Localization/Resources/Blogging/Admin/ApplicationContracts/pt-BR.json deleted file mode 100644 index 09fd08fe5a..0000000000 --- a/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Localization/Resources/Blogging/Admin/ApplicationContracts/pt-BR.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "culture": "pt-BR", - "texts": { - "Permission:BloggingAdmin": "Blog", - "Permission:Blogs": "Blogs", - "Permission:Management": "Gerenciamento", - "Permission:Edit": "Editar", - "Permission:Create": "Criar", - "Permission:Delete": "Excluir" - } -} diff --git a/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Localization/Resources/Blogging/Admin/ApplicationContracts/sl.json b/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Localization/Resources/Blogging/Admin/ApplicationContracts/sl.json deleted file mode 100644 index 455c49008c..0000000000 --- a/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Localization/Resources/Blogging/Admin/ApplicationContracts/sl.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "culture": "sl", - "texts": { - "Permission:BloggingAdmin": "Blog", - "Permission:Blogs": "Blogi", - "Permission:Management": "Upravljanje", - "Permission:Edit": "Urejanje", - "Permission:Create": "Ustvarjanje", - "Permission:Delete": "Brisanje" - } -} diff --git a/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Localization/Resources/Blogging/Admin/ApplicationContracts/tr.json b/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Localization/Resources/Blogging/Admin/ApplicationContracts/tr.json deleted file mode 100644 index dedb5d3dd6..0000000000 --- a/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Localization/Resources/Blogging/Admin/ApplicationContracts/tr.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "culture": "tr", - "texts": { - "Permission:BloggingAdmin": "Blog", - "Permission:Blogs": "Bloglar", - "Permission:Management": "Yönetme", - "Permission:Edit": "Düzenle", - "Permission:Create": "Ekle", - "Permission:Delete": "Sil" - } -} diff --git a/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Localization/Resources/Blogging/Admin/ApplicationContracts/vi.json b/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Localization/Resources/Blogging/Admin/ApplicationContracts/vi.json deleted file mode 100644 index 387083b100..0000000000 --- a/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Localization/Resources/Blogging/Admin/ApplicationContracts/vi.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "culture": "vi", - "texts": { - "Permission:BloggingAdmin": "Blog", - "Permission:Blogs": "Blogs", - "Permission:Management": "Quản lý", - "Permission:Edit": "Sửa", - "Permission:Create": "Tạo", - "Permission:Delete": "Xóa" - } -} diff --git a/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Localization/Resources/Blogging/Admin/ApplicationContracts/zh-Hans.json b/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Localization/Resources/Blogging/Admin/ApplicationContracts/zh-Hans.json deleted file mode 100644 index a17bb45c09..0000000000 --- a/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Localization/Resources/Blogging/Admin/ApplicationContracts/zh-Hans.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "culture": "zh-Hans", - "texts": { - "Permission:BloggingAdmin": "博客", - "Permission:Blogs": "博客", - "Permission:Management": "管理", - "Permission:Edit": "编辑", - "Permission:Create": "创建", - "Permission:Delete": "删除" - } - } diff --git a/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Localization/Resources/Blogging/Admin/ApplicationContracts/zh-Hant.json b/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Localization/Resources/Blogging/Admin/ApplicationContracts/zh-Hant.json deleted file mode 100644 index 2d2d28dcbb..0000000000 --- a/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo/Blogging/Admin/Localization/Resources/Blogging/Admin/ApplicationContracts/zh-Hant.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "culture": "zh-Hant", - "texts": { - "Permission:BloggingAdmin": "部落格", - "Permission:Blogs": "部落格", - "Permission:Management": "管理", - "Permission:Edit": "標及", - "Permission:Create": "新增", - "Permission:Delete": "刪除" - } - } diff --git a/modules/blogging/src/Volo.Blogging.Admin.Application/Volo/Blogging/Admin/Blogs/BlogManagementAppService.cs b/modules/blogging/src/Volo.Blogging.Admin.Application/Volo/Blogging/Admin/Blogs/BlogManagementAppService.cs index 1df6f52c9b..242ccb6330 100644 --- a/modules/blogging/src/Volo.Blogging.Admin.Application/Volo/Blogging/Admin/Blogs/BlogManagementAppService.cs +++ b/modules/blogging/src/Volo.Blogging.Admin.Application/Volo/Blogging/Admin/Blogs/BlogManagementAppService.cs @@ -32,7 +32,7 @@ namespace Volo.Blogging.Admin.Blogs return ObjectMapper.Map(blog); } - [Authorize(BloggingAdminPermissions.Blogs.Create)] + [Authorize(BloggingPermissions.Blogs.Create)] public async Task CreateAsync(CreateBlogDto input) { var newBlog = await _blogRepository.InsertAsync(new Blog(GuidGenerator.Create(), input.Name, input.ShortName) @@ -43,7 +43,7 @@ namespace Volo.Blogging.Admin.Blogs return ObjectMapper.Map(newBlog); } - [Authorize(BloggingAdminPermissions.Blogs.Update)] + [Authorize(BloggingPermissions.Blogs.Update)] public async Task UpdateAsync(Guid id, UpdateBlogDto input) { var blog = await _blogRepository.GetAsync(id); @@ -55,7 +55,7 @@ namespace Volo.Blogging.Admin.Blogs return ObjectMapper.Map(blog); } - [Authorize(BloggingAdminPermissions.Blogs.Delete)] + [Authorize(BloggingPermissions.Blogs.Delete)] public async Task DeleteAsync(Guid id) { await _blogRepository.DeleteAsync(id); diff --git a/modules/blogging/src/Volo.Blogging.Admin.Web/BloggingAdminMenuContributor.cs b/modules/blogging/src/Volo.Blogging.Admin.Web/BloggingAdminMenuContributor.cs index 0058738299..cd8b073429 100644 --- a/modules/blogging/src/Volo.Blogging.Admin.Web/BloggingAdminMenuContributor.cs +++ b/modules/blogging/src/Volo.Blogging.Admin.Web/BloggingAdminMenuContributor.cs @@ -18,12 +18,12 @@ namespace Volo.Blogging.Admin { var l = context.GetLocalizer(); - if (await context.IsGrantedAsync(BloggingAdminPermissions.Blogs.Management)) + if (await context.IsGrantedAsync(BloggingPermissions.Blogs.Management)) { var managementRootMenuItem = new ApplicationMenuItem("BlogManagement", l["Menu:BlogManagement"]); //TODO: Using the same permission. Reconsider. - if (await context.IsGrantedAsync(BloggingAdminPermissions.Blogs.Management)) + if (await context.IsGrantedAsync(BloggingPermissions.Blogs.Management)) { managementRootMenuItem.AddItem(new ApplicationMenuItem("BlogManagement.Blogs", l["Menu:Blogs"], "~/Blogging/Admin/Blogs")); } diff --git a/modules/blogging/src/Volo.Blogging.Admin.Web/Pages/Blogging/Admin/Blogs/Create.cshtml.cs b/modules/blogging/src/Volo.Blogging.Admin.Web/Pages/Blogging/Admin/Blogs/Create.cshtml.cs index 6f4bae5e63..d3d66656b2 100644 --- a/modules/blogging/src/Volo.Blogging.Admin.Web/Pages/Blogging/Admin/Blogs/Create.cshtml.cs +++ b/modules/blogging/src/Volo.Blogging.Admin.Web/Pages/Blogging/Admin/Blogs/Create.cshtml.cs @@ -24,7 +24,7 @@ namespace Volo.Blogging.Admin.Pages.Blogging.Admin.Blogs public virtual async Task OnGetAsync() { - if (!await _authorization.IsGrantedAsync(BloggingAdminPermissions.Blogs.Create)) + if (!await _authorization.IsGrantedAsync(BloggingPermissions.Blogs.Create)) { return Redirect("/"); } diff --git a/modules/blogging/src/Volo.Blogging.Admin.Web/Pages/Blogging/Admin/Blogs/Edit.cshtml.cs b/modules/blogging/src/Volo.Blogging.Admin.Web/Pages/Blogging/Admin/Blogs/Edit.cshtml.cs index 8d0b2ba978..ae275cd4e6 100644 --- a/modules/blogging/src/Volo.Blogging.Admin.Web/Pages/Blogging/Admin/Blogs/Edit.cshtml.cs +++ b/modules/blogging/src/Volo.Blogging.Admin.Web/Pages/Blogging/Admin/Blogs/Edit.cshtml.cs @@ -28,7 +28,7 @@ namespace Volo.Blogging.Admin.Pages.Blogging.Admin.Blogs public virtual async Task OnGetAsync() { - if (!await _authorization.IsGrantedAsync(BloggingAdminPermissions.Blogs.Update)) + if (!await _authorization.IsGrantedAsync(BloggingPermissions.Blogs.Update)) { return Redirect("/"); } diff --git a/modules/blogging/src/Volo.Blogging.Admin.Web/Pages/Blogging/Admin/Blogs/Index.cshtml b/modules/blogging/src/Volo.Blogging.Admin.Web/Pages/Blogging/Admin/Blogs/Index.cshtml index bd0d4a0bfb..1c2b823852 100644 --- a/modules/blogging/src/Volo.Blogging.Admin.Web/Pages/Blogging/Admin/Blogs/Index.cshtml +++ b/modules/blogging/src/Volo.Blogging.Admin.Web/Pages/Blogging/Admin/Blogs/Index.cshtml @@ -28,7 +28,7 @@

@L["Blogs"]

- @if (await Authorization.IsGrantedAsync(BloggingAdminPermissions.Blogs.Create)) + @if (await Authorization.IsGrantedAsync(BloggingPermissions.Blogs.Create)) { } diff --git a/modules/blogging/src/Volo.Blogging.Admin.Web/Pages/Blogging/Admin/Blogs/Index.cshtml.cs b/modules/blogging/src/Volo.Blogging.Admin.Web/Pages/Blogging/Admin/Blogs/Index.cshtml.cs index 22a09389ef..ebeca3425d 100644 --- a/modules/blogging/src/Volo.Blogging.Admin.Web/Pages/Blogging/Admin/Blogs/Index.cshtml.cs +++ b/modules/blogging/src/Volo.Blogging.Admin.Web/Pages/Blogging/Admin/Blogs/Index.cshtml.cs @@ -15,7 +15,7 @@ namespace Volo.Blogging.Admin.Pages.Blogging.Admin.Blogs public virtual async Task OnGetAsync() { - if (!await _authorization.IsGrantedAsync(BloggingAdminPermissions.Blogs.Management)) + if (!await _authorization.IsGrantedAsync(BloggingPermissions.Blogs.Management)) { return Redirect("/"); } diff --git a/modules/blogging/src/Volo.Blogging.Admin.Web/Pages/Blogging/Admin/Blogs/index.js b/modules/blogging/src/Volo.Blogging.Admin.Web/Pages/Blogging/Admin/Blogs/index.js index a89f4cf995..74ca458614 100644 --- a/modules/blogging/src/Volo.Blogging.Admin.Web/Pages/Blogging/Admin/Blogs/index.js +++ b/modules/blogging/src/Volo.Blogging.Admin.Web/Pages/Blogging/Admin/Blogs/index.js @@ -22,7 +22,7 @@ [ { text: l('Edit'), - visible: abp.auth.isGranted('Blogging.Admin.Blog.Update'), + visible: abp.auth.isGranted('Blogging.Blog.Update'), action: function (data) { _editModal.open({ blogId: data.record.id @@ -31,7 +31,7 @@ }, { text: l('Delete'), - visible: abp.auth.isGranted('Blogging.Admin.Blog.Delete'), + visible: abp.auth.isGranted('Blogging.Blog.Delete'), confirmMessage: function (data) { return l('BlogDeletionWarningMessage') }, action: function (data) { volo.blogging.admin.blogManagement diff --git a/modules/blogging/src/Volo.Blogging.Application.Contracts.Shared/FodyWeavers.xml b/modules/blogging/src/Volo.Blogging.Application.Contracts.Shared/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/blogging/src/Volo.Blogging.Application.Contracts.Shared/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/blogging/src/Volo.Blogging.Application.Contracts.Shared/FodyWeavers.xsd b/modules/blogging/src/Volo.Blogging.Application.Contracts.Shared/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/blogging/src/Volo.Blogging.Application.Contracts.Shared/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/blogging/src/Volo.Blogging.Application.Contracts.Shared/Volo.Blogging.Application.Contracts.Shared.csproj b/modules/blogging/src/Volo.Blogging.Application.Contracts.Shared/Volo.Blogging.Application.Contracts.Shared.csproj new file mode 100644 index 0000000000..70f0218a37 --- /dev/null +++ b/modules/blogging/src/Volo.Blogging.Application.Contracts.Shared/Volo.Blogging.Application.Contracts.Shared.csproj @@ -0,0 +1,18 @@ + + + + + + + netstandard2.0 + Volo.Blogging.Application.Contracts.Shared + Volo.Blogging.Application.Contracts.Shared + + + + + + + + + diff --git a/modules/blogging/src/Volo.Blogging.Application.Contracts.Shared/Volo/Blogging/BloggingApplicationContractsSharedModule.cs b/modules/blogging/src/Volo.Blogging.Application.Contracts.Shared/Volo/Blogging/BloggingApplicationContractsSharedModule.cs new file mode 100644 index 0000000000..f90c504c0e --- /dev/null +++ b/modules/blogging/src/Volo.Blogging.Application.Contracts.Shared/Volo/Blogging/BloggingApplicationContractsSharedModule.cs @@ -0,0 +1,15 @@ +using Volo.Abp.Application; +using Volo.Abp.Modularity; + +namespace Volo.Blogging +{ + [DependsOn(typeof(BloggingDomainSharedModule), + typeof(AbpDddApplicationModule))] + public class BloggingApplicationContractsSharedModule : AbpModule + { + public override void ConfigureServices(ServiceConfigurationContext context) + { + + } + } +} diff --git a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/BloggingPermissionDefinitionProvider.cs b/modules/blogging/src/Volo.Blogging.Application.Contracts.Shared/Volo/Blogging/BloggingPermissionDefinitionProvider.cs similarity index 78% rename from modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/BloggingPermissionDefinitionProvider.cs rename to modules/blogging/src/Volo.Blogging.Application.Contracts.Shared/Volo/Blogging/BloggingPermissionDefinitionProvider.cs index 6c2361230d..65a6ab1ab7 100644 --- a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/BloggingPermissionDefinitionProvider.cs +++ b/modules/blogging/src/Volo.Blogging.Application.Contracts.Shared/Volo/Blogging/BloggingPermissionDefinitionProvider.cs @@ -10,6 +10,12 @@ namespace Volo.Blogging { var bloggingGroup = context.AddGroup(BloggingPermissions.GroupName, L("Permission:Blogging")); + var blogs = bloggingGroup.AddPermission(BloggingPermissions.Blogs.Default, L("Permission:Blogs")); + blogs.AddChild(BloggingPermissions.Blogs.Management, L("Permission:Management")); + blogs.AddChild(BloggingPermissions.Blogs.Update, L("Permission:Edit")); + blogs.AddChild(BloggingPermissions.Blogs.Delete, L("Permission:Delete")); + blogs.AddChild(BloggingPermissions.Blogs.Create, L("Permission:Create")); + var posts = bloggingGroup.AddPermission(BloggingPermissions.Posts.Default, L("Permission:Posts")); posts.AddChild(BloggingPermissions.Posts.Update, L("Permission:Edit")); posts.AddChild(BloggingPermissions.Posts.Delete, L("Permission:Delete")); diff --git a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/BloggingPermissions.cs b/modules/blogging/src/Volo.Blogging.Application.Contracts.Shared/Volo/Blogging/BloggingPermissions.cs similarity index 76% rename from modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/BloggingPermissions.cs rename to modules/blogging/src/Volo.Blogging.Application.Contracts.Shared/Volo/Blogging/BloggingPermissions.cs index 7aa05452e3..fae85acf88 100644 --- a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/BloggingPermissions.cs +++ b/modules/blogging/src/Volo.Blogging.Application.Contracts.Shared/Volo/Blogging/BloggingPermissions.cs @@ -6,6 +6,15 @@ namespace Volo.Blogging { public const string GroupName = "Blogging"; + public static class Blogs + { + public const string Default = GroupName + ".Blog"; + public const string Management = Default + ".Management"; + public const string Delete = Default + ".Delete"; + public const string Update = Default + ".Update"; + public const string Create = Default + ".Create"; + } + public static class Posts { public const string Default = GroupName + ".Post"; diff --git a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo.Blogging.Application.Contracts.csproj b/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo.Blogging.Application.Contracts.csproj index 80ea1db8b7..2483d728b4 100644 --- a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo.Blogging.Application.Contracts.csproj +++ b/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo.Blogging.Application.Contracts.csproj @@ -12,17 +12,7 @@ - - + - - - - - - - - - diff --git a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/BloggingApplicationContractsModule.cs b/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/BloggingApplicationContractsModule.cs index 74b675187d..641659a7c0 100644 --- a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/BloggingApplicationContractsModule.cs +++ b/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/BloggingApplicationContractsModule.cs @@ -5,21 +5,12 @@ using Volo.Blogging.Localization; namespace Volo.Blogging { - [DependsOn(typeof(BloggingDomainSharedModule))] + [DependsOn(typeof(BloggingApplicationContractsSharedModule))] public class BloggingApplicationContractsModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) { - Configure(options => - { - options.FileSets.AddEmbedded(); - }); - Configure(options => - { - options.Resources - .Get() - .AddVirtualJson("Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts"); - }); + } } } diff --git a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/cs.json b/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/cs.json deleted file mode 100644 index 30063c1d6d..0000000000 --- a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/cs.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "culture": "cs", - "texts": { - "Permission:Blogging": "Blog", - "Permission:Blogs": "Blogy", - "Permission:Posts": "Příspěvky", - "Permission:Tags": "Tagy", - "Permission:Comments": "Komentáře" - } -} diff --git a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/de.json b/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/de.json deleted file mode 100644 index 9f2a7d4510..0000000000 --- a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/de.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "culture": "de", - "texts": { - "Permission:Blogging": "Blog", - "Permission:Blogs": "Blogs", - "Permission:Posts": "Beitr�ge", - "Permission:Tags": "Tags", - "Permission:Comments": "Kommentare" - } -} diff --git a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/en.json b/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/en.json deleted file mode 100644 index eb70a98276..0000000000 --- a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/en.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "culture": "en", - "texts": { - "Permission:Blogging": "Blog", - "Permission:Blogs": "Blogs", - "Permission:Posts": "Posts", - "Permission:Tags": "Tags", - "Permission:Comments": "Comments" - } -} diff --git a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/nl.json b/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/nl.json deleted file mode 100644 index 70440c8470..0000000000 --- a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/nl.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "culture": "nl", - "texts": { - "Permission:Blogging": "Blog", - "Permission:Blogs": "Blogs", - "Permission:Posts": "Posts", - "Permission:Tags": "Tags", - "Permission:Comments": "Kommentaar" - } -} diff --git a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/pl-PL.json b/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/pl-PL.json deleted file mode 100644 index 2a223d536b..0000000000 --- a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/pl-PL.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "culture": "pl-PL", - "texts": { - "Permission:Blogging": "Blog", - "Permission:Blogs": "Blogi", - "Permission:Posts": "Posty", - "Permission:Tags": "Tagi", - "Permission:Comments": "Komentarze" - } -} diff --git a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/pt-BR.json b/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/pt-BR.json deleted file mode 100644 index 9dd2977079..0000000000 --- a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/pt-BR.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "culture": "pt-BR", - "texts": { - "Permission:Blogging": "Blog", - "Permission:Blogs": "Blogs", - "Permission:Posts": "Postagens", - "Permission:Tags": "Etiquetas", - "Permission:Comments": "Comentários" - } -} diff --git a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/sl.json b/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/sl.json deleted file mode 100644 index cad2be999f..0000000000 --- a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/sl.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "culture": "sl", - "texts": { - "Permission:Blogging": "Blog", - "Permission:Blogs": "Blogi", - "Permission:Posts": "Objave", - "Permission:Tags": "Oznake", - "Permission:Comments": "Komentarji" - } -} diff --git a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/tr.json b/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/tr.json deleted file mode 100644 index 1d158bc664..0000000000 --- a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/tr.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "culture": "tr", - "texts": { - "Permission:Blogging": "Blog", - "Permission:Blogs": "Bloglar", - "Permission:Posts": "Yazılar", - "Permission:Tags": "Etiketler", - "Permission:Comments": "Yorumlar" - } -} diff --git a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/vi.json b/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/vi.json deleted file mode 100644 index 2f65d48fae..0000000000 --- a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/vi.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "culture": "vi", - "texts": { - "Permission:Blogging": "Blog", - "Permission:Blogs": "Blogs", - "Permission:Posts": "Bài viết", - "Permission:Tags": "Thẻ", - "Permission:Comments": "Bình luận" - } -} diff --git a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/zh-Hans.json b/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/zh-Hans.json deleted file mode 100644 index afc509cd35..0000000000 --- a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/zh-Hans.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "culture": "zh-Hans", - "texts": { - "Permission:Blogging": "博客", - "Permission:Blogs": "博客", - "Permission:Posts": "帖子", - "Permission:Tags": "标签", - "Permission:Comments": "评论" - } -} diff --git a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/zh-Hant.json b/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/zh-Hant.json deleted file mode 100644 index 487be120e5..0000000000 --- a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/zh-Hant.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "culture": "zh-Hant", - "texts": { - "Permission:Blogging": "部落格", - "Permission:Blogs": "部落格", - "Permission:Posts": "文章", - "Permission:Tags": "標籤", - "Permission:Comments": "評論" - } -} diff --git a/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/cs.json b/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/cs.json index 109a695ea2..917050d28d 100644 --- a/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/cs.json +++ b/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/cs.json @@ -3,6 +3,15 @@ "texts": { "Menu:Blogs": "Blogy", "Menu:BlogManagement": "Blogování", + "Permission:Blogs": "Blogy", + "Permission:Management": "Správa", + "Permission:Edit": "Upravit", + "Permission:Create": "Vytvořit", + "Permission:Delete": "Smazat", + "Permission:Blogging": "Blog", + "Permission:Posts": "Příspěvky", + "Permission:Tags": "Tagy", + "Permission:Comments": "Komentáře", "Title": "Nadpis", "Delete": "Smazat", "Reply": "Odpovědět", diff --git a/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/de.json b/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/de.json index 6489396692..751a1b0222 100644 --- a/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/de.json +++ b/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/de.json @@ -3,8 +3,17 @@ "texts": { "Menu:Blogs": "Blogs", "Menu:BlogManagement": "Blog-Verwaltung", + "Permission:Blogs": "Blogs", + "Permission:Management": "Verwaltung", + "Permission:Edit": "Bearbeiten", + "Permission:Create": "Erstellen", + "Permission:Delete": "Löschen", + "Permission:Blogging": "Blog", + "Permission:Posts": "Beitr�ge", + "Permission:Tags": "Tags", + "Permission:Comments": "Kommentare", "Title": "Titel", - "Delete": "Lschen", + "Delete": "L�schen", "Reply": "Antwort", "ReplyTo": "Antwort auf {0}", "ContinueReading": "Weiterlesen", @@ -20,15 +29,15 @@ "SeeAll": "Alle anzeigen", "PopularTags": "Beliebte Tags", "WiewsWithCount": "{0} Aufrufe", - "LastPosts": "Letzte Beitrge", + "LastPosts": "Letzte Beitr�ge", "LeaveComment": "Kommentar hinterlassen", "TagsInThisArticle": "Tags in diesem Artikel", - "Posts": "Beitrge", + "Posts": "Beitr�ge", "Edit": "Bearbeiten", "BLOG": "BLOG", - "CommentDeletionWarningMessage": "Kommentar wird gelscht.", - "PostDeletionWarningMessage": "Beitrag wird gelscht.", - "BlogDeletionWarningMessage": "Blog wird gelscht.", + "CommentDeletionWarningMessage": "Kommentar wird gel�scht.", + "PostDeletionWarningMessage": "Beitrag wird gel�scht.", + "BlogDeletionWarningMessage": "Blog wird gel�scht.", "AreYouSure": "Sind Sie sicher?", "CommentWithCount": "{0} Kommentare", "Comment": "Kommentar", @@ -46,4 +55,4 @@ "ShareOn": "Teilen auf", "TitleLengthWarning": "Halten Sie Ihren Titel unter 60 Zeichen, um SEO-freundlich zu sein!" } -} \ No newline at end of file +} diff --git a/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/en.json b/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/en.json index 8ffe3d8fa7..5ebdf25d9f 100644 --- a/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/en.json +++ b/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/en.json @@ -3,6 +3,15 @@ "texts": { "Menu:Blogs": "Blogs", "Menu:BlogManagement": "Blogging", + "Permission:Management": "Management", + "Permission:Edit": "Edit", + "Permission:Create": "Create", + "Permission:Delete": "Delete", + "Permission:Blogging": "Blog", + "Permission:Blogs": "Blogs", + "Permission:Posts": "Posts", + "Permission:Tags": "Tags", + "Permission:Comments": "Comments", "Title": "Title", "Delete": "Delete", "Reply": "Reply", diff --git a/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/nl.json b/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/nl.json index 6548e4c0a8..a1c0b72de8 100644 --- a/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/nl.json +++ b/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/nl.json @@ -3,6 +3,15 @@ "texts": { "Menu:Blogs": "Blogs", "Menu:BlogManagement": "Blog Beheer", + "Permission:Management": "Beheer", + "Permission:Edit": "Bewerk", + "Permission:Create": "Maak aan", + "Permission:Delete": "Verwijder", + "Permission:Blogging": "Blog", + "Permission:Blogs": "Blogs", + "Permission:Posts": "Posts", + "Permission:Tags": "Tags", + "Permission:Comments": "Kommentaar", "Title": "Titel", "Delete": "Verwijder", "Reply": "Antwoord", @@ -46,4 +55,4 @@ "ShareOn": "Delen op", "TitleLengthWarning": "Houd uw titel kleiner dan 60 tekens om SEO-vriendelijk te zijn!" } -} \ No newline at end of file +} diff --git a/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/pl-PL.json b/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/pl-PL.json index 3795ab93d3..5e6fd41c36 100644 --- a/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/pl-PL.json +++ b/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/pl-PL.json @@ -3,6 +3,15 @@ "texts": { "Menu:Blogs": "Blogi", "Menu:BlogManagement": "Zarządzanie blogiem", + "Permission:Management": "Zarządzanie", + "Permission:Edit": "Edytuj", + "Permission:Create": "Utwórz", + "Permission:Delete": "Usuń", + "Permission:Blogging": "Blog", + "Permission:Blogs": "Blogi", + "Permission:Posts": "Posty", + "Permission:Tags": "Tagi", + "Permission:Comments": "Komentarze", "Title": "Tytuł", "Delete": "Usuń", "Reply": "Odpowiedz", @@ -44,4 +53,4 @@ "Blogs": "Blogi", "Tags": "Tagi" } -} \ No newline at end of file +} diff --git a/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/pt-BR.json b/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/pt-BR.json index 62416f49a5..a5fb209b0a 100644 --- a/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/pt-BR.json +++ b/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/pt-BR.json @@ -3,6 +3,15 @@ "texts": { "Menu:Blogs": "Blogs", "Menu:BlogManagement": "Gerenciar Blog", + "Permission:Management": "Gerenciamento", + "Permission:Edit": "Editar", + "Permission:Create": "Criar", + "Permission:Delete": "Excluir", + "Permission:Blogging": "Blog", + "Permission:Blogs": "Blogs", + "Permission:Posts": "Postagens", + "Permission:Tags": "Etiquetas", + "Permission:Comments": "Comentários", "Title": "Título", "Delete": "Excluir", "Reply": "Responder", @@ -44,4 +53,4 @@ "Blogs": "Blogs", "Tags": "Etiquetas" } -} \ No newline at end of file +} diff --git a/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/sl.json b/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/sl.json index 74672336f5..6946cefc55 100644 --- a/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/sl.json +++ b/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/sl.json @@ -3,6 +3,15 @@ "texts": { "Menu:Blogs": "Blogi", "Menu:BlogManagement": "Upravljanje bloga", + "Permission:Management": "Upravljanje", + "Permission:Edit": "Urejanje", + "Permission:Create": "Ustvarjanje", + "Permission:Delete": "Brisanje", + "Permission:Blogging": "Blog", + "Permission:Blogs": "Blogi", + "Permission:Posts": "Objave", + "Permission:Tags": "Oznake", + "Permission:Comments": "Komentarji", "Title": "Naslov", "Delete": "Izbriši", "Reply": "Odgovori", @@ -44,4 +53,4 @@ "Blogs": "Blogi", "Tags": "Oznake" } -} \ No newline at end of file +} diff --git a/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/tr.json b/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/tr.json index 78e18601ff..4a9a38b040 100644 --- a/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/tr.json +++ b/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/tr.json @@ -3,6 +3,15 @@ "texts": { "Menu:Blogs": "Bloglar", "Menu:BlogManagement": "Blog Yönetimi", + "Permission:Management": "Yönetme", + "Permission:Edit": "Düzenle", + "Permission:Create": "Ekle", + "Permission:Delete": "Sil", + "Permission:Blogging": "Blog", + "Permission:Blogs": "Bloglar", + "Permission:Posts": "Yazılar", + "Permission:Tags": "Etiketler", + "Permission:Comments": "Yorumlar", "Title": "Başlık", "Delete": "Sil", "Reply": "Yanıtla", @@ -46,4 +55,4 @@ "ShareOn": "Paylaş", "TitleLengthWarning": "Başlığınınz SEO dostu olabilmesi için 60 karakterden az olmasını sağlayın!" } -} \ No newline at end of file +} diff --git a/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/vi.json b/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/vi.json index 1405337271..28b832d87e 100644 --- a/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/vi.json +++ b/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/vi.json @@ -3,6 +3,15 @@ "texts": { "Menu:Blogs": "Blogs", "Menu:BlogManagement": "Quản lý Blog", + "Permission:Management": "Quản lý", + "Permission:Edit": "Sửa", + "Permission:Create": "Tạo", + "Permission:Delete": "Xóa", + "Permission:Blogging": "Blog", + "Permission:Blogs": "Blogs", + "Permission:Posts": "Bài viết", + "Permission:Tags": "Thẻ", + "Permission:Comments": "Bình luận", "Title": "Tiêu đề", "Delete": "Xóa", "Reply": "Trả lời", diff --git a/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/zh-Hans.json b/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/zh-Hans.json index 2ea614b648..4b94db0607 100644 --- a/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/zh-Hans.json +++ b/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/zh-Hans.json @@ -3,6 +3,15 @@ "texts": { "Menu:Blogs": "博客", "Menu:BlogManagement": "博客管理", + "Permission:Management": "管理", + "Permission:Edit": "编辑", + "Permission:Create": "创建", + "Permission:Delete": "删除", + "Permission:Blogging": "博客", + "Permission:Blogs": "博客", + "Permission:Posts": "帖子", + "Permission:Tags": "标签", + "Permission:Comments": "评论", "Title": "标题", "Delete": "删除", "Reply": "回复", @@ -44,4 +53,4 @@ "Blogs": "博客", "Tags": "标签" } -} \ No newline at end of file +} diff --git a/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/zh-Hant.json b/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/zh-Hant.json index b5781d305e..f51f088be5 100644 --- a/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/zh-Hant.json +++ b/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/zh-Hant.json @@ -3,6 +3,15 @@ "texts": { "Menu:Blogs": "部落格", "Menu:BlogManagement": "部落格管理", + "Permission:Management": "管理", + "Permission:Edit": "標及", + "Permission:Create": "新增", + "Permission:Delete": "刪除", + "Permission:Blogging": "部落格", + "Permission:Blogs": "部落格", + "Permission:Posts": "文章", + "Permission:Tags": "標籤", + "Permission:Comments": "評論", "Title": "標題", "Delete": "刪除", "Reply": "回覆", @@ -46,4 +55,4 @@ "ShareOn": "分享在", "TitleLengthWarning": "為了優化搜索引擎,標題建議保持在60個字元以內" } -} \ No newline at end of file +} diff --git a/nupkg/common.ps1 b/nupkg/common.ps1 index 0d20f447d9..d35f1355f5 100644 --- a/nupkg/common.ps1 +++ b/nupkg/common.ps1 @@ -141,6 +141,7 @@ $projects = ( "modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB", # modules/blogging + "modules/blogging/src/Volo.Blogging.Application.Contracts.Shared", "modules/blogging/src/Volo.Blogging.Application.Contracts", "modules/blogging/src/Volo.Blogging.Application", "modules/blogging/src/Volo.Blogging.Domain", From 20621c0f536af440cc7f1cc354cc1dd63af25897 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Thu, 9 Jul 2020 11:09:51 +0300 Subject: [PATCH 085/137] Blogging: prevent submitting before image is uploaded --- .../src/Volo.Blogging.Web/Pages/Blogs/Posts/Edit.cshtml | 2 +- .../src/Volo.Blogging.Web/Pages/Blogs/Posts/New.cshtml | 2 +- .../src/Volo.Blogging.Web/Pages/Blogs/Posts/edit.js | 6 ++++-- .../blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/new.js | 3 +++ 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Edit.cshtml b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Edit.cshtml index 6909b6526b..ad00452e26 100644 --- a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Edit.cshtml +++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Edit.cshtml @@ -79,7 +79,7 @@ diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/New.cshtml b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/New.cshtml index bcb41d8fc7..bcb35c9b54 100644 --- a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/New.cshtml +++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/New.cshtml @@ -77,7 +77,7 @@ diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/edit.js b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/edit.js index e02ec975fe..8d668019c3 100644 --- a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/edit.js +++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/edit.js @@ -12,11 +12,12 @@ var $coverImage = $("#CoverImage"); var $postCoverImage = $('#Post_CoverImage'); var $coverImageFile = $('#CoverImageFile'); - + var $postFormSubmitButton = $('#PostFormSubmitButton'); var setCoverImage = function (file) { $postCoverImage.val(file.fileUrl); $coverImage.attr("src", file.fileUrl); + $postFormSubmitButton.removeAttr('disabled'); }; var uploadCoverImage = function (file) { @@ -56,6 +57,7 @@ return; } + $postFormSubmitButton.attr('disabled',true); var file = $coverImageFile.prop('files')[0]; uploadCoverImage(file); }); @@ -113,7 +115,7 @@ var validationResult = $form.validate(); abp.message.warn(validationResult.errorList[0].message); //TODO: errors can be merged into lines. make sweetalert accept HTML. e.preventDefault(); - return false; //for old browsers + return false; //for old browsers } $submitButton.buttonBusy(); diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/new.js b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/new.js index 5e5c38d895..798430f6cd 100644 --- a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/new.js +++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/new.js @@ -12,11 +12,13 @@ var $coverImage = $("#CoverImage"); var $postCoverImage = $('#Post_CoverImage'); var $coverImageFile = $('#CoverImageFile'); + var $postFormSubmitButton = $('#PostFormSubmitButton'); var setCoverImage = function (file) { $postCoverImage.val(file.fileUrl); $coverImage.attr("src", file.fileUrl); $coverImage.show(); + $postFormSubmitButton.removeAttr('disabled'); }; var uploadCoverImage = function (file) { @@ -39,6 +41,7 @@ if (!$coverImageFile.prop('files').length) { return; } + $postFormSubmitButton.attr('disabled',true); var file = $coverImageFile.prop('files')[0]; uploadCoverImage(file); }); From a41e2adc2367ef593e407dbbdaba5cf445e1a994 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 9 Jul 2020 11:51:54 +0300 Subject: [PATCH 086/137] Added arabic to the host projects --- .../MyProjectNameHttpApiHostModule.cs | 3 ++- .../MyProjectNameHttpApiHostModule.cs | 5 +++-- .../MyProjectNameIdentityServerModule.cs | 3 ++- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs index 6bab8b24f2..7e7817ae87 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs @@ -111,6 +111,7 @@ namespace MyCompanyName.MyProjectName { Configure(options => { + options.Languages.Add(new LanguageInfo("ar", "ar", "العربية")); options.Languages.Add(new LanguageInfo("cs", "cs", "Čeština")); options.Languages.Add(new LanguageInfo("en", "en", "English")); options.Languages.Add(new LanguageInfo("pt-BR", "pt-BR", "Português")); @@ -176,7 +177,7 @@ namespace MyCompanyName.MyProjectName app.UseRouting(); app.UseCors(DefaultCorsPolicyName); app.UseAuthentication(); - + if (MultiTenancyConsts.IsEnabled) { app.UseMultiTenancy(); diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs index 0cd3762047..c671d0f223 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs @@ -118,6 +118,7 @@ namespace MyCompanyName.MyProjectName { Configure(options => { + options.Languages.Add(new LanguageInfo("ar", "ar", "العربية")); options.Languages.Add(new LanguageInfo("cs", "cs", "Čeština")); options.Languages.Add(new LanguageInfo("en", "en", "English")); options.Languages.Add(new LanguageInfo("pt-BR", "pt-BR", "Português")); @@ -169,8 +170,8 @@ namespace MyCompanyName.MyProjectName app.UseRouting(); app.UseCors(DefaultCorsPolicyName); app.UseAuthentication(); - app.UseJwtTokenMiddleware(); - + app.UseJwtTokenMiddleware(); + if (MultiTenancyConsts.IsEnabled) { app.UseMultiTenancy(); diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs index 1da9619803..df28fe0ccd 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs @@ -58,6 +58,7 @@ namespace MyCompanyName.MyProjectName typeof(AbpUiResource) ); + options.Languages.Add(new LanguageInfo("ar", "ar", "العربية")); options.Languages.Add(new LanguageInfo("cs", "cs", "Čeština")); options.Languages.Add(new LanguageInfo("en", "en", "English")); options.Languages.Add(new LanguageInfo("pt-BR", "pt-BR", "Português")); @@ -157,7 +158,7 @@ namespace MyCompanyName.MyProjectName { app.UseMultiTenancy(); } - + app.UseAbpRequestLocalization(); app.UseIdentityServer(); app.UseAuthorization(); From a96ce6505044f6265492b9205f275ea64f600db1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 9 Jul 2020 12:46:53 +0300 Subject: [PATCH 087/137] Add note about the mobile app --- docs/en/Getting-Started.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/en/Getting-Started.md b/docs/en/Getting-Started.md index 4a597181d0..ac9cd2dcb9 100644 --- a/docs/en/Getting-Started.md +++ b/docs/en/Getting-Started.md @@ -64,6 +64,8 @@ Use the `new` command of the ABP CLI to create a new project: abp new Acme.BookStore{{if UI == "NG"}} -u angular {{end}}{{if DB == "Mongo"}} -d mongodb{{end}}{{if Tiered == "Yes" && UI != "NG"}} --tiered {{else if Tiered == "Yes" && UI == "NG"}}--separate-identity-server{{end}} ```` +> This command also creates a React Native mobile application inside the solution folder. If you don't want it, you can safely delete it or specify the `-m none` option to the `abp new` command to not include it in the solution at all. + {{ if UI == "NG" }} * `-u` argument specifies the UI framework, `angular` in this case. @@ -340,7 +342,7 @@ When you create a new application, the solution includes `react-native` folder b If you don't plan to develop a mobile application with React Native, you can safely delete the `react-native` folder. -> You can specifying the `--mobile none` option to the ABP CLI to not create the `react-native` folder in the beginning. +> You can specifying the `-m none` option to the ABP CLI to not create the `react-native` folder in the beginning. See the "[Getting Started with the React Native](Getting-Started-React-Native.md)" document to learn how to configure and run the React Native application. From fe9814c92cdded26f9dbde814f65f1ff71922e87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Levent=20Arman=20=C3=96zak?= Date: Thu, 9 Jul 2020 13:53:49 +0300 Subject: [PATCH 088/137] update node and yarn versions --- docs/en/Getting-Started.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/docs/en/Getting-Started.md b/docs/en/Getting-Started.md index ac9cd2dcb9..00e8206cff 100644 --- a/docs/en/Getting-Started.md +++ b/docs/en/Getting-Started.md @@ -20,19 +20,20 @@ First things first! Let's setup your development environment before creating the The following tools should be installed on your development machine: -* [Visual Studio 2019 (v16.4+)](https://visualstudio.microsoft.com/vs/) for Windows / [Visual Studio for Mac](https://visualstudio.microsoft.com/vs/mac/).* +* [Visual Studio 2019 (v16.4+)](https://visualstudio.microsoft.com/vs/) for Windows / [Visual Studio for Mac](https://visualstudio.microsoft.com/vs/mac/). [1](#f-yarn) * [.NET Core 3.1+](https://www.microsoft.com/net/download/dotnet-core/) -* [Node v12+](https://nodejs.org) -* [Yarn v1.19+](https://classic.yarnpkg.com/) +* [Node v12 or v14](https://nodejs.org/en/) +* [Yarn v1.20+ (not v2)](https://classic.yarnpkg.com/en/docs/install) [2](#f-yarn) or npm v6+ (installed with Node) {{ if Tiered == "Yes" }} * [Redis](https://redis.io/) (the startup solution uses the Redis as the [distributed cache](Caching.md)). {{ end }} +1 _You can use another editor instead of Visual Studio as long as it supports .NET Core and ASP.NET Core._ [↩](#a-editor) -> *You can use another editor instead of Visual Studio as long as it supports .NET Core and ASP.NET Core. +2 _Yarn v2 works differently and is not supported._ [↩](#a-yarn) ### Install the ABP CLI @@ -348,4 +349,4 @@ See the "[Getting Started with the React Native](Getting-Started-React-Native.md ## Next -* [Web Application Development Tutorial](Tutorials/Part-1.md) \ No newline at end of file +* [Web Application Development Tutorial](Tutorials/Part-1.md) From 48be49845ab23631955fc73a356a52910af021d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Levent=20Arman=20=C3=96zak?= Date: Thu, 9 Jul 2020 13:55:48 +0300 Subject: [PATCH 089/137] update editor footnote link --- docs/en/Getting-Started.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/Getting-Started.md b/docs/en/Getting-Started.md index 00e8206cff..57981d3233 100644 --- a/docs/en/Getting-Started.md +++ b/docs/en/Getting-Started.md @@ -20,7 +20,7 @@ First things first! Let's setup your development environment before creating the The following tools should be installed on your development machine: -* [Visual Studio 2019 (v16.4+)](https://visualstudio.microsoft.com/vs/) for Windows / [Visual Studio for Mac](https://visualstudio.microsoft.com/vs/mac/). [1](#f-yarn) +* [Visual Studio 2019 (v16.4+)](https://visualstudio.microsoft.com/vs/) for Windows / [Visual Studio for Mac](https://visualstudio.microsoft.com/vs/mac/). [1](#f-editor) * [.NET Core 3.1+](https://www.microsoft.com/net/download/dotnet-core/) * [Node v12 or v14](https://nodejs.org/en/) From 4e8516b8ed682de7c1dcf7690c85e86a41dd61f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ahmet=20=C3=87otur?= Date: Thu, 9 Jul 2020 14:43:52 +0300 Subject: [PATCH 090/137] Identity Module - prettier settings added and js files reformatted --- modules/identity/.prettierrc | 4 + .../Pages/Identity/Roles/index.js | 192 ++++++++++-------- .../Pages/Identity/Users/index.js | 169 ++++++++------- 3 files changed, 200 insertions(+), 165 deletions(-) create mode 100644 modules/identity/.prettierrc diff --git a/modules/identity/.prettierrc b/modules/identity/.prettierrc new file mode 100644 index 0000000000..7d1b8aa721 --- /dev/null +++ b/modules/identity/.prettierrc @@ -0,0 +1,4 @@ +{ + "singleQuote": true, + "useTabs": true +} diff --git a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Roles/index.js b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Roles/index.js index 8332a95ac7..c5c15136e3 100644 --- a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Roles/index.js +++ b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Roles/index.js @@ -1,94 +1,114 @@ (function ($) { + var l = abp.localization.getResource('AbpIdentity'); - var l = abp.localization.getResource('AbpIdentity'); + var _identityRoleAppService = volo.abp.identity.identityRole; + var _permissionsModal = new abp.ModalManager( + abp.appPath + 'AbpPermissionManagement/PermissionManagementModal' + ); + var _editModal = new abp.ModalManager( + abp.appPath + 'Identity/Roles/EditModal' + ); + var _createModal = new abp.ModalManager( + abp.appPath + 'Identity/Roles/CreateModal' + ); - var _identityRoleAppService = volo.abp.identity.identityRole; - var _permissionsModal = new abp.ModalManager(abp.appPath + 'AbpPermissionManagement/PermissionManagementModal'); - var _editModal = new abp.ModalManager(abp.appPath + 'Identity/Roles/EditModal'); - var _createModal = new abp.ModalManager(abp.appPath + 'Identity/Roles/CreateModal'); + $(function () { + var _$wrapper = $('#IdentityRolesWrapper'); + var _$table = _$wrapper.find('table'); - $(function () { + var _dataTable = _$table.DataTable( + abp.libs.datatables.normalizeConfiguration({ + order: [[1, 'asc']], + searching: false, + processing: true, + serverSide: true, + scrollX: true, + paging: true, + ajax: abp.libs.datatables.createAjax(_identityRoleAppService.getList), + columnDefs: [ + { + rowAction: { + items: [ + { + text: l('Edit'), + visible: abp.auth.isGranted('AbpIdentity.Roles.Update'), + action: function (data) { + _editModal.open({ + id: data.record.id, + }); + }, + }, + { + text: l('Permissions'), + visible: abp.auth.isGranted( + 'AbpIdentity.Roles.ManagePermissions' + ), + action: function (data) { + _permissionsModal.open({ + providerName: 'R', + providerKey: data.record.name, + }); + }, + }, + { + text: l('Delete'), + visible: function (data) { + return ( + !data.isStatic && + abp.auth.isGranted('AbpIdentity.Roles.Delete') + ); //TODO: Check permission + }, + confirmMessage: function (data) { + return l( + 'RoleDeletionConfirmationMessage', + data.record.name + ); + }, + action: function (data) { + _identityRoleAppService + .delete(data.record.id) + .then(function () { + _dataTable.ajax.reload(); + }); + }, + }, + ], + }, + }, + { + data: 'name', + render: function (data, type, row) { + var name = '' + data + ''; + if (row.isDefault) { + name += + '' + + l('DisplayName:IsDefault') + + ''; + } + if (row.isPublic) { + name += + '' + + l('DisplayName:IsPublic') + + ''; + } + return name; + }, + }, + ], + }) + ); - var _$wrapper = $('#IdentityRolesWrapper'); - var _$table = _$wrapper.find('table'); + _createModal.onResult(function () { + _dataTable.ajax.reload(); + }); - var _dataTable = _$table.DataTable(abp.libs.datatables.normalizeConfiguration({ - order: [[1, "asc"]], - searching: false, - processing: true, - serverSide: true, - scrollX: true, - paging: true, - ajax: abp.libs.datatables.createAjax(_identityRoleAppService.getList), - columnDefs: [ - { - rowAction: { - items: - [ - { - text: l('Edit'), - visible: abp.auth.isGranted('AbpIdentity.Roles.Update'), - action: function (data) { - _editModal.open({ - id: data.record.id - }); - } - }, - { - text: l('Permissions'), - visible: abp.auth.isGranted('AbpIdentity.Roles.ManagePermissions'), - action: function (data) { - _permissionsModal.open({ - providerName: 'R', - providerKey: data.record.name - }); - } - }, - { - text: l('Delete'), - visible: function (data) { - return !data.isStatic && abp.auth.isGranted('AbpIdentity.Roles.Delete'); //TODO: Check permission - }, - confirmMessage: function (data) { return l('RoleDeletionConfirmationMessage', data.record.name)}, - action: function (data) { - _identityRoleAppService - .delete(data.record.id) - .then(function () { - _dataTable.ajax.reload(); - }); - } - } - ] - } - }, - { - data: "name", - render: function (data, type, row) { - var name = '' + data + ''; - if (row.isDefault) { - name += '' + l('DisplayName:IsDefault') + ''; - } - if (row.isPublic) { - name += '' + l('DisplayName:IsPublic') + ''; - } - return name; - } - } - ] - })); - - _createModal.onResult(function () { - _dataTable.ajax.reload(); - }); - - _editModal.onResult(function () { - _dataTable.ajax.reload(); - }); - - _$wrapper.find('button[name=CreateRole]').click(function (e) { - e.preventDefault(); - _createModal.open(); - }); - }); + _editModal.onResult(function () { + _dataTable.ajax.reload(); + }); + _$wrapper.find('button[name=CreateRole]').click(function (e) { + e.preventDefault(); + _createModal.open(); + }); + }); })(jQuery); diff --git a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/index.js b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/index.js index 64505509ba..40e1c1b3c1 100644 --- a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/index.js +++ b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/index.js @@ -1,86 +1,97 @@ (function ($) { + var l = abp.localization.getResource('AbpIdentity'); - var l = abp.localization.getResource('AbpIdentity'); + var _identityUserAppService = volo.abp.identity.identityUser; + var _editModal = new abp.ModalManager( + abp.appPath + 'Identity/Users/EditModal' + ); + var _createModal = new abp.ModalManager( + abp.appPath + 'Identity/Users/CreateModal' + ); + var _permissionsModal = new abp.ModalManager( + abp.appPath + 'AbpPermissionManagement/PermissionManagementModal' + ); - var _identityUserAppService = volo.abp.identity.identityUser; - var _editModal = new abp.ModalManager(abp.appPath + 'Identity/Users/EditModal'); - var _createModal = new abp.ModalManager(abp.appPath + 'Identity/Users/CreateModal'); - var _permissionsModal = new abp.ModalManager(abp.appPath + 'AbpPermissionManagement/PermissionManagementModal'); + $(function () { + var _$wrapper = $('#IdentityUsersWrapper'); + var _$table = _$wrapper.find('table'); + var _dataTable = _$table.DataTable( + abp.libs.datatables.normalizeConfiguration({ + order: [[1, 'asc']], + processing: true, + serverSide: true, + scrollX: true, + paging: true, + ajax: abp.libs.datatables.createAjax(_identityUserAppService.getList), + columnDefs: [ + { + rowAction: { + items: [ + { + text: l('Edit'), + visible: abp.auth.isGranted('AbpIdentity.Users.Update'), + action: function (data) { + _editModal.open({ + id: data.record.id, + }); + }, + }, + { + text: l('Permissions'), + visible: abp.auth.isGranted( + 'AbpIdentity.Users.ManagePermissions' + ), + action: function (data) { + _permissionsModal.open({ + providerName: 'U', + providerKey: data.record.id, + }); + }, + }, + { + text: l('Delete'), + visible: abp.auth.isGranted('AbpIdentity.Users.Delete'), + confirmMessage: function (data) { + return l( + 'UserDeletionConfirmationMessage', + data.record.userName + ); + }, + action: function (data) { + _identityUserAppService + .delete(data.record.id) + .then(function () { + _dataTable.ajax.reload(); + }); + }, + }, + ], + }, + }, + { + data: 'userName', + }, + { + data: 'email', + }, + { + data: 'phoneNumber', + }, + ], + }) + ); - $(function () { + _createModal.onResult(function () { + _dataTable.ajax.reload(); + }); - var _$wrapper = $('#IdentityUsersWrapper'); - var _$table = _$wrapper.find('table'); - var _dataTable = _$table.DataTable(abp.libs.datatables.normalizeConfiguration({ - order: [[1, "asc"]], - processing: true, - serverSide: true, - scrollX: true, - paging: true, - ajax: abp.libs.datatables.createAjax(_identityUserAppService.getList), - columnDefs: [ - { - rowAction: { - items: - [ - { - text: l('Edit'), - visible: abp.auth.isGranted('AbpIdentity.Users.Update'), - action: function (data) { - _editModal.open({ - id: data.record.id - }); - } - }, - { - text: l('Permissions'), - visible: abp.auth.isGranted('AbpIdentity.Users.ManagePermissions'), - action: function (data) { - _permissionsModal.open({ - providerName: 'U', - providerKey: data.record.id - }); - } - }, - { - text: l('Delete'), - visible: abp.auth.isGranted('AbpIdentity.Users.Delete'), - confirmMessage: function (data) { return l('UserDeletionConfirmationMessage', data.record.userName); }, - action: function (data) { - _identityUserAppService - .delete(data.record.id) - .then(function () { - _dataTable.ajax.reload(); - }); - } - } - ] - } - }, - { - data: "userName" - }, - { - data: "email" - }, - { - data: "phoneNumber" - } - ] - })); - - _createModal.onResult(function () { - _dataTable.ajax.reload(); - }); - - _editModal.onResult(function () { - _dataTable.ajax.reload(); - }); - - _$wrapper.find('button[name=CreateUser]').click(function (e) { - e.preventDefault(); - _createModal.open(); - }); - }); + _editModal.onResult(function () { + _dataTable.ajax.reload(); + }); + _$wrapper.find('button[name=CreateUser]').click(function (e) { + e.preventDefault(); + _createModal.open(); + }); + }); })(jQuery); From b72d903412bcb09d7cf3520f878026bdd2f39bc1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ahmet=20=C3=87otur?= Date: Thu, 9 Jul 2020 14:44:14 +0300 Subject: [PATCH 091/137] Permission Management Module - prettier settings added and js files reformatted --- modules/permission-management/.prettierrc | 4 + .../permission-management-modal.js | 495 ++++++++++-------- 2 files changed, 269 insertions(+), 230 deletions(-) create mode 100644 modules/permission-management/.prettierrc diff --git a/modules/permission-management/.prettierrc b/modules/permission-management/.prettierrc new file mode 100644 index 0000000000..7d1b8aa721 --- /dev/null +++ b/modules/permission-management/.prettierrc @@ -0,0 +1,4 @@ +{ + "singleQuote": true, + "useTabs": true +} diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/permission-management-modal.js b/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/permission-management-modal.js index 860d6f8bfb..6cba3cdb35 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/permission-management-modal.js +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/permission-management-modal.js @@ -1,233 +1,268 @@ var abp = abp || {}; (function ($) { - abp.modals = abp.modals || {}; - - abp.modals.PermissionManagement = function () { - function checkParents($tab, $checkBox) { - var parentName = $checkBox.closest('.custom-checkbox').attr('data-parent-name'); - if (!parentName) { - return; - } - - $tab.find('.custom-checkbox') - .filter('[data-permission-name="' + parentName + '"]') - .find('input[type="checkbox"]') - .each(function () { - var $parent = $(this); - $parent.prop('checked', true); - checkParents($tab, $parent); - }); - } - - function uncheckChildren($tab, $checkBox) { - var permissionName = $checkBox.closest('.custom-checkbox').attr('data-permission-name'); - if (!permissionName) { - return; - } - - $tab.find('.custom-checkbox') - .filter('[data-parent-name="' + permissionName + '"]') - .find('input[type="checkbox"]') - .each(function () { - var $child = $(this); - $child.prop('checked', false); - uncheckChildren($tab, $child); - }); - } - - function handleTabCheckedCheckboxCount($tab) { - var newCount = 0; - $tab.find('input[type="checkbox"]').not('[name="SelectAllInThisTab"]').each(function () { - if ($(this).is(':checked') === true) { - newCount++; - } - }); - - var $tabTitle = $('#' + $tab.attr('id') + '-tab'); - var title = $tabTitle.html() - .replace('','').replace('','') - .replace('','').replace('',''); - - var titleSplitted = title.split(' '); - if (titleSplitted[titleSplitted.length-1].startsWith('(')){ - titleSplitted.pop(); - } - var titleWithoutCount = titleSplitted.join(' '); - var newTitle = titleWithoutCount + ' (' + (newCount) + ')'; - if (newCount > 0){ - newTitle = '' + newTitle + '' - } - else { - newTitle = '' + newTitle + '' - } - $tabTitle.html(newTitle) - }; - - function handleUncheck($tab) { - var $checkBox = $tab.find('input[name="SelectAllInThisTab"]'); - - if ($checkBox.is(':checked')) { - if ($tab.find('input[type="checkbox"]').not('[name="SelectAllInThisTab"]').length > 1) { - $($checkBox).prop('indeterminate', true); - } else { - $checkBox.prop('checked', false); - } - } else if ($checkBox.is(':indeterminate')) { - var allUnchecked = true; - - $tab.find('input[type="checkbox"]').not('[name="SelectAllInThisTab"]').each(function () { - if ($(this).is(':checked') === true) { - allUnchecked = false; - } - }); - - if (allUnchecked) { - $($checkBox).prop('indeterminate', false); - $checkBox.prop('checked', false); - } - } - } - - function handleCheck($tab) { - var $checkBox = $tab.find('input[name="SelectAllInThisTab"]'); - - var allChecked = true; - - $tab.find('input[type="checkbox"]').not('[name="SelectAllInThisTab"]').each(function () { - if ($(this).is(':checked') === false) { - allChecked = false; - } - }); - - if (allChecked) { - $($checkBox).prop('indeterminate', false); - $checkBox.prop('checked', true); - } else { - $($checkBox).prop('indeterminate', true); - } - } - - - function initSelectAllInThisTab() { - var tabs = $('.tab-pane'); - for (var i = 0; i < tabs.length; i++) { - var $tab = $(tabs[i]); - var $checkBox = $tab.find('input[name="SelectAllInThisTab"]'); - - var allChecked = true; - var allUnChecked = true; - - $tab.find('input[type="checkbox"]').not('[name="SelectAllInThisTab"]').each(function () { - if ($(this).is(':checked') === true) { - allUnChecked = false; - } else { - allChecked = false; - } - }); - - if (allChecked) { - $($checkBox).prop('checked', true); - } else if (allUnChecked) { - $($checkBox).prop('checked', false); - } else { - $($checkBox).prop('indeterminate', true); - } - } - } - - function setSelectAllInAllTabs() { - var $checkBox = $('#SelectAllInAllTabs'); - - var anyIndeterminate = false; - var allChecked = true; - var allUnChecked = true; - - $('input[name="SelectAllInThisTab"]').each(function () { - if ($(this).is(':checked') === true) { - allUnChecked = false; - } else { - allChecked = false; - } - - if ($(this).is(':indeterminate') === true) { - anyIndeterminate = true; - } - }); - - if (anyIndeterminate) { - $($checkBox).prop('indeterminate', true); - return; - } else { - $($checkBox).prop('indeterminate', false); - } - - if (allChecked) { - $($checkBox).prop('checked', true); - } else if (allUnChecked) { - $($checkBox).prop('checked', false); - } else { - $($checkBox).prop('indeterminate', true); - } - } - - this.initDom = function ($el) { - $el.find('.tab-pane').each(function () { - var $tab = $(this); - handleTabCheckedCheckboxCount($tab); - $tab.find('input[type="checkbox"]').not('[name="SelectAllInThisTab"]').each(function () { - var $checkBox = $(this); - $checkBox.change(function () { - if ($checkBox.is(':checked')) { - checkParents($tab, $checkBox); - handleCheck($tab); - } else { - uncheckChildren($tab, $checkBox); - handleUncheck($tab); - } - setSelectAllInAllTabs(); - handleTabCheckedCheckboxCount($tab); - }); - }); - }); - - $('input[name="SelectAllInThisTab"]').change(function () { - var $checkBox = $(this); - var $tab = $('#' + $checkBox.attr('data-tab-id')); - if ($checkBox.is(':checked')) { - $tab.find('input[type="checkbox"]').not(':disabled').prop('checked', true); - } else { - $tab.find('input[type="checkbox"]').not(':disabled').prop('checked', false); - } - $($checkBox).prop('indeterminate', false); - setSelectAllInAllTabs(); - handleTabCheckedCheckboxCount($tab) - }); - - $('input[name="SelectAllInAllTabs"]').change(function () { - var $checkBox = $(this); - if ($checkBox.is(':checked')) { - $('.tab-pane input[type="checkbox"]').not(':disabled').prop('checked', true); - } else { - $('.tab-pane input[type="checkbox"]').not(':disabled').prop('checked', false); - } - $($checkBox).prop('indeterminate', false); - - $el.find('.tab-pane').each(function () { - handleTabCheckedCheckboxCount($(this)) - }); - }); - - $(function () { - $(".custom-scroll-content").mCustomScrollbar({ - theme: "minimal-dark" - }); - $(".custom-scroll-container > .col-4").mCustomScrollbar({ - theme: "minimal-dark" - }); - }); - - initSelectAllInThisTab(); - setSelectAllInAllTabs(); - }; - }; + abp.modals = abp.modals || {}; + + abp.modals.PermissionManagement = function () { + function checkParents($tab, $checkBox) { + var parentName = $checkBox + .closest('.custom-checkbox') + .attr('data-parent-name'); + if (!parentName) { + return; + } + + $tab + .find('.custom-checkbox') + .filter('[data-permission-name="' + parentName + '"]') + .find('input[type="checkbox"]') + .each(function () { + var $parent = $(this); + $parent.prop('checked', true); + checkParents($tab, $parent); + }); + } + + function uncheckChildren($tab, $checkBox) { + var permissionName = $checkBox + .closest('.custom-checkbox') + .attr('data-permission-name'); + if (!permissionName) { + return; + } + + $tab + .find('.custom-checkbox') + .filter('[data-parent-name="' + permissionName + '"]') + .find('input[type="checkbox"]') + .each(function () { + var $child = $(this); + $child.prop('checked', false); + uncheckChildren($tab, $child); + }); + } + + function handleTabCheckedCheckboxCount($tab) { + var newCount = 0; + $tab + .find('input[type="checkbox"]') + .not('[name="SelectAllInThisTab"]') + .each(function () { + if ($(this).is(':checked') === true) { + newCount++; + } + }); + + var $tabTitle = $('#' + $tab.attr('id') + '-tab'); + var title = $tabTitle + .html() + .replace('', '') + .replace('', '') + .replace('', '') + .replace('', ''); + + var titleSplitted = title.split(' '); + if (titleSplitted[titleSplitted.length - 1].startsWith('(')) { + titleSplitted.pop(); + } + var titleWithoutCount = titleSplitted.join(' '); + var newTitle = titleWithoutCount + ' (' + newCount + ')'; + if (newCount > 0) { + newTitle = '' + newTitle + ''; + } else { + newTitle = '' + newTitle + ''; + } + $tabTitle.html(newTitle); + } + + function handleUncheck($tab) { + var $checkBox = $tab.find('input[name="SelectAllInThisTab"]'); + + if ($checkBox.is(':checked')) { + if ( + $tab.find('input[type="checkbox"]').not('[name="SelectAllInThisTab"]') + .length > 1 + ) { + $($checkBox).prop('indeterminate', true); + } else { + $checkBox.prop('checked', false); + } + } else if ($checkBox.is(':indeterminate')) { + var allUnchecked = true; + + $tab + .find('input[type="checkbox"]') + .not('[name="SelectAllInThisTab"]') + .each(function () { + if ($(this).is(':checked') === true) { + allUnchecked = false; + } + }); + + if (allUnchecked) { + $($checkBox).prop('indeterminate', false); + $checkBox.prop('checked', false); + } + } + } + + function handleCheck($tab) { + var $checkBox = $tab.find('input[name="SelectAllInThisTab"]'); + + var allChecked = true; + + $tab + .find('input[type="checkbox"]') + .not('[name="SelectAllInThisTab"]') + .each(function () { + if ($(this).is(':checked') === false) { + allChecked = false; + } + }); + + if (allChecked) { + $($checkBox).prop('indeterminate', false); + $checkBox.prop('checked', true); + } else { + $($checkBox).prop('indeterminate', true); + } + } + + function initSelectAllInThisTab() { + var tabs = $('.tab-pane'); + for (var i = 0; i < tabs.length; i++) { + var $tab = $(tabs[i]); + var $checkBox = $tab.find('input[name="SelectAllInThisTab"]'); + + var allChecked = true; + var allUnChecked = true; + + $tab + .find('input[type="checkbox"]') + .not('[name="SelectAllInThisTab"]') + .each(function () { + if ($(this).is(':checked') === true) { + allUnChecked = false; + } else { + allChecked = false; + } + }); + + if (allChecked) { + $($checkBox).prop('checked', true); + } else if (allUnChecked) { + $($checkBox).prop('checked', false); + } else { + $($checkBox).prop('indeterminate', true); + } + } + } + + function setSelectAllInAllTabs() { + var $checkBox = $('#SelectAllInAllTabs'); + + var anyIndeterminate = false; + var allChecked = true; + var allUnChecked = true; + + $('input[name="SelectAllInThisTab"]').each(function () { + if ($(this).is(':checked') === true) { + allUnChecked = false; + } else { + allChecked = false; + } + + if ($(this).is(':indeterminate') === true) { + anyIndeterminate = true; + } + }); + + if (anyIndeterminate) { + $($checkBox).prop('indeterminate', true); + return; + } else { + $($checkBox).prop('indeterminate', false); + } + + if (allChecked) { + $($checkBox).prop('checked', true); + } else if (allUnChecked) { + $($checkBox).prop('checked', false); + } else { + $($checkBox).prop('indeterminate', true); + } + } + + this.initDom = function ($el) { + $el.find('.tab-pane').each(function () { + var $tab = $(this); + handleTabCheckedCheckboxCount($tab); + $tab + .find('input[type="checkbox"]') + .not('[name="SelectAllInThisTab"]') + .each(function () { + var $checkBox = $(this); + $checkBox.change(function () { + if ($checkBox.is(':checked')) { + checkParents($tab, $checkBox); + handleCheck($tab); + } else { + uncheckChildren($tab, $checkBox); + handleUncheck($tab); + } + setSelectAllInAllTabs(); + handleTabCheckedCheckboxCount($tab); + }); + }); + }); + + $('input[name="SelectAllInThisTab"]').change(function () { + var $checkBox = $(this); + var $tab = $('#' + $checkBox.attr('data-tab-id')); + if ($checkBox.is(':checked')) { + $tab + .find('input[type="checkbox"]') + .not(':disabled') + .prop('checked', true); + } else { + $tab + .find('input[type="checkbox"]') + .not(':disabled') + .prop('checked', false); + } + $($checkBox).prop('indeterminate', false); + setSelectAllInAllTabs(); + handleTabCheckedCheckboxCount($tab); + }); + + $('input[name="SelectAllInAllTabs"]').change(function () { + var $checkBox = $(this); + if ($checkBox.is(':checked')) { + $('.tab-pane input[type="checkbox"]') + .not(':disabled') + .prop('checked', true); + } else { + $('.tab-pane input[type="checkbox"]') + .not(':disabled') + .prop('checked', false); + } + $($checkBox).prop('indeterminate', false); + + $el.find('.tab-pane').each(function () { + handleTabCheckedCheckboxCount($(this)); + }); + }); + + $(function () { + $('.custom-scroll-content').mCustomScrollbar({ + theme: 'minimal-dark', + }); + $('.custom-scroll-container > .col-4').mCustomScrollbar({ + theme: 'minimal-dark', + }); + }); + + initSelectAllInThisTab(); + setSelectAllInAllTabs(); + }; + }; })(jQuery); From f2032ff7a4436871fdb9302662e495356afb3ed3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ahmet=20=C3=87otur?= Date: Thu, 9 Jul 2020 14:48:02 +0300 Subject: [PATCH 092/137] Account Module - prettier settings added and js files reformatted --- modules/account/.prettierrc | 4 + .../Pages/Account/LoggedOut.js | 10 ++- .../Pages/Account/Manage.js | 73 +++++++++---------- 3 files changed, 45 insertions(+), 42 deletions(-) create mode 100644 modules/account/.prettierrc diff --git a/modules/account/.prettierrc b/modules/account/.prettierrc new file mode 100644 index 0000000000..7d1b8aa721 --- /dev/null +++ b/modules/account/.prettierrc @@ -0,0 +1,4 @@ +{ + "singleQuote": true, + "useTabs": true +} diff --git a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/LoggedOut.js b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/LoggedOut.js index 950bf65719..6b5d0bb0af 100644 --- a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/LoggedOut.js +++ b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/LoggedOut.js @@ -1,5 +1,7 @@ -document.addEventListener("DOMContentLoaded", function (event) { - setTimeout(function () { - window.location = document.getElementById("redirectButton").getAttribute("href"); - }, 3000) +document.addEventListener('DOMContentLoaded', function (event) { + setTimeout(function () { + window.location = document + .getElementById('redirectButton') + .getAttribute('href'); + }, 3000); }); diff --git a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Manage.js b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Manage.js index 844151c71b..015d481df4 100644 --- a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Manage.js +++ b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Manage.js @@ -1,50 +1,47 @@ (function ($) { + var l = abp.localization.getResource('AbpAccount'); - var l = abp.localization.getResource('AbpAccount'); + var _profileService = volo.abp.identity.profile; - var _profileService = volo.abp.identity.profile; + $('#ChangePasswordForm').submit(function (e) { + e.preventDefault(); - $("#ChangePasswordForm").submit(function (e) { - e.preventDefault(); + if (!$('#ChangePasswordForm').valid()) { + return false; + } - if (!$("#ChangePasswordForm").valid()) { - return false; - } + var input = $('#ChangePasswordForm').serializeFormToObject() + .changePasswordInfoModel; - var input = $("#ChangePasswordForm").serializeFormToObject().changePasswordInfoModel; + if ( + input.newPassword != input.newPasswordConfirm || + input.currentPassword == '' + ) { + abp.message.error(l('NewPasswordConfirmFailed')); + return; + } - if (input.newPassword != input.newPasswordConfirm || input.currentPassword == '') { - abp.message.error(l("NewPasswordConfirmFailed")); - return; - } + if (input.currentPassword == '') { + return; + } - if (input.currentPassword == '') { - return; - } + _profileService.changePassword(input).then(function (result) { + abp.message.success(l('PasswordChanged')); + }); + }); - _profileService.changePassword( - input - ).then(function (result) { - abp.message.success(l("PasswordChanged")); - }); + $('#PersonalSettingsForm').submit(function (e) { + e.preventDefault(); - }); + if (!$('#PersonalSettingsForm').valid()) { + return false; + } - $("#PersonalSettingsForm").submit(function (e) { - e.preventDefault(); + var input = $('#PersonalSettingsForm').serializeFormToObject() + .personalSettingsInfoModel; - if (!$("#PersonalSettingsForm").valid()) { - return false; - } - - var input = $("#PersonalSettingsForm").serializeFormToObject().personalSettingsInfoModel; - - _profileService.update( - input - ).then(function (result) { - abp.notify.success(l("PersonalSettingsSaved")); - }); - - }); - -})(jQuery); \ No newline at end of file + _profileService.update(input).then(function (result) { + abp.notify.success(l('PersonalSettingsSaved')); + }); + }); +})(jQuery); From 2606520715faa807911fe608034128136c0ffd24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ahmet=20=C3=87otur?= Date: Thu, 9 Jul 2020 14:49:21 +0300 Subject: [PATCH 093/137] Blogging Module - prettier settings added and js files reformatted --- modules/blogging/.prettierrc | 4 + .../Pages/Blogging/Admin/Blogs/create.js | 20 +- .../Pages/Blogging/Admin/Blogs/edit.js | 20 +- .../Pages/Blogging/Admin/Blogs/index.js | 158 ++++---- .../Pages/Blogs/Posts/detail.js | 350 +++++++++--------- .../Pages/Blogs/Posts/edit.js | 247 ++++++------ .../Pages/Blogs/Shared/Scripts/blog.js | 122 +++--- 7 files changed, 469 insertions(+), 452 deletions(-) create mode 100644 modules/blogging/.prettierrc diff --git a/modules/blogging/.prettierrc b/modules/blogging/.prettierrc new file mode 100644 index 0000000000..7d1b8aa721 --- /dev/null +++ b/modules/blogging/.prettierrc @@ -0,0 +1,4 @@ +{ + "singleQuote": true, + "useTabs": true +} diff --git a/modules/blogging/src/Volo.Blogging.Admin.Web/Pages/Blogging/Admin/Blogs/create.js b/modules/blogging/src/Volo.Blogging.Admin.Web/Pages/Blogging/Admin/Blogs/create.js index 276523c14d..7e6c7117e9 100644 --- a/modules/blogging/src/Volo.Blogging.Admin.Web/Pages/Blogging/Admin/Blogs/create.js +++ b/modules/blogging/src/Volo.Blogging.Admin.Web/Pages/Blogging/Admin/Blogs/create.js @@ -1,14 +1,12 @@ var abp = abp || {}; $(function () { - abp.modals.blogCreate = function () { - var initModal = function (publicApi, args) { - var $form = publicApi.getForm(); + abp.modals.blogCreate = function () { + var initModal = function (publicApi, args) { + var $form = publicApi.getForm(); + }; - - }; - - return { - initModal: initModal - } - }; -}); \ No newline at end of file + return { + initModal: initModal, + }; + }; +}); diff --git a/modules/blogging/src/Volo.Blogging.Admin.Web/Pages/Blogging/Admin/Blogs/edit.js b/modules/blogging/src/Volo.Blogging.Admin.Web/Pages/Blogging/Admin/Blogs/edit.js index 8d3cffb6c8..dd0712ec27 100644 --- a/modules/blogging/src/Volo.Blogging.Admin.Web/Pages/Blogging/Admin/Blogs/edit.js +++ b/modules/blogging/src/Volo.Blogging.Admin.Web/Pages/Blogging/Admin/Blogs/edit.js @@ -1,14 +1,12 @@ var abp = abp || {}; $(function () { - abp.modals.blogEdit = function () { - var initModal = function (publicApi, args) { - var $form = publicApi.getForm(); + abp.modals.blogEdit = function () { + var initModal = function (publicApi, args) { + var $form = publicApi.getForm(); + }; - - }; - - return { - initModal: initModal - } - }; -}); \ No newline at end of file + return { + initModal: initModal, + }; + }; +}); diff --git a/modules/blogging/src/Volo.Blogging.Admin.Web/Pages/Blogging/Admin/Blogs/index.js b/modules/blogging/src/Volo.Blogging.Admin.Web/Pages/Blogging/Admin/Blogs/index.js index 74ca458614..46751de899 100644 --- a/modules/blogging/src/Volo.Blogging.Admin.Web/Pages/Blogging/Admin/Blogs/index.js +++ b/modules/blogging/src/Volo.Blogging.Admin.Web/Pages/Blogging/Admin/Blogs/index.js @@ -1,82 +1,88 @@ $(function () { + var l = abp.localization.getResource('Blogging'); + var _createModal = new abp.ModalManager( + abp.appPath + 'Blogging/Admin/Blogs/Create' + ); + var _editModal = new abp.ModalManager( + abp.appPath + 'Blogging/Admin/Blogs/Edit' + ); - var l = abp.localization.getResource('Blogging'); - var _createModal = new abp.ModalManager(abp.appPath + 'Blogging/Admin/Blogs/Create'); - var _editModal = new abp.ModalManager(abp.appPath + 'Blogging/Admin/Blogs/Edit'); + var _dataTable = $('#BlogsTable').DataTable( + abp.libs.datatables.normalizeConfiguration({ + processing: true, + serverSide: true, + paging: false, + info: false, + scrollX: true, + searching: false, + autoWidth: false, + scrollCollapse: true, + order: [[3, 'desc']], + ajax: abp.libs.datatables.createAjax( + volo.blogging.admin.blogManagement.getList + ), + columnDefs: [ + { + rowAction: { + items: [ + { + text: l('Edit'), + visible: abp.auth.isGranted('Blogging.Blog.Update'), + action: function (data) { + _editModal.open({ + blogId: data.record.id, + }); + }, + }, + { + text: l('Delete'), + visible: abp.auth.isGranted('Blogging.Blog.Delete'), + confirmMessage: function (data) { + return l('BlogDeletionWarningMessage'); + }, + action: function (data) { + volo.blogging.admin.blogManagement + .delete(data.record.id) + .then(function () { + _dataTable.ajax.reload(); + }); + }, + }, + ], + }, + }, + { + target: 1, + data: 'name', + }, + { + target: 2, + data: 'shortName', + }, + { + target: 3, + data: 'creationTime', + render: function (date) { + return date; + }, + }, + { + target: 4, + data: 'description', + }, + ], + }) + ); - var _dataTable = $('#BlogsTable').DataTable(abp.libs.datatables.normalizeConfiguration({ - processing: true, - serverSide: true, - paging: false, - info: false, - scrollX: true, - searching: false, - autoWidth: false, - scrollCollapse: true, - order: [[3, "desc"]], - ajax: abp.libs.datatables.createAjax(volo.blogging.admin.blogManagement.getList), - columnDefs: [ - { - rowAction: { - items: - [ - { - text: l('Edit'), - visible: abp.auth.isGranted('Blogging.Blog.Update'), - action: function (data) { - _editModal.open({ - blogId: data.record.id - }); - } - }, - { - text: l('Delete'), - visible: abp.auth.isGranted('Blogging.Blog.Delete'), - confirmMessage: function (data) { return l('BlogDeletionWarningMessage') }, - action: function (data) { - volo.blogging.admin.blogManagement - .delete(data.record.id) - .then(function () { - _dataTable.ajax.reload(); - }); - } - } - ] - } - }, - { - target: 1, - data: "name" - }, - { - target: 2, - data: "shortName" - }, - { - target: 3, - data: "creationTime", - render: function (date) { - return date; - } - }, - { - target: 4, - data: "description" - } - ] - })); + $('#CreateNewBlogButtonId').click(function () { + _createModal.open(); + }); + _createModal.onClose(function () { + _dataTable.ajax.reload(); + }); - $("#CreateNewBlogButtonId").click(function () { - _createModal.open(); - }); - - _createModal.onClose(function () { - _dataTable.ajax.reload(); - }); - - _editModal.onResult(function () { - _dataTable.ajax.reload(); - }); - + _editModal.onResult(function () { + _dataTable.ajax.reload(); + }); }); diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/detail.js b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/detail.js index 571484bdac..a5061457d0 100644 --- a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/detail.js +++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/detail.js @@ -1,170 +1,184 @@ (function ($) { - - var l = abp.localization.getResource('Blogging'); - - var initSocialShareLinks = function () { - - var re = new RegExp(/^.*\//); - var rootUrl = re.exec(window.location.href); - - var pageHeader = $("#PostTitle").text(); - var blogName = $('#BlogFullName').attr('name'); - - $('#TwitterShareLink').attr('href', - 'https://twitter.com/intent/tweet?text=' + encodeURI(pageHeader + " | " + blogName + " | " + window.location.href) - ); - - $('#LinkedinShareLink').attr('href', - 'https://www.linkedin.com/shareArticle?' - + 'url=' + encodeURI(window.location.href) + '&' - + 'mini=true&' - + "summary=" + encodeURI(blogName) + '&' - + "title=" + encodeURI(pageHeader) + '&' - + "source=" + encodeURI(rootUrl) - ); - - $('#EmailShareLink').attr('href', - 'mailto:?' - + 'body=' + encodeURI('I want you to look at ' + window.location.href) + '&' - + "subject=" + encodeURI(pageHeader + ' | ' + blogName) + '&' - ); - }; - - $('div .replyForm').hide(); - - $('div .editForm').hide(); - - $('form[class="editFormClass"]').submit(function (event) { - event.preventDefault(); - var form = $(this).serializeFormToObject(); - - $.ajax({ - type: "POST", - url: "/Blog/Comments/Update", - data: { - id: form.commentId, - commentDto: { - text: form.text - } - }, - success: function (response) { - $('div .editForm').hide(); - $('#' + form.commentId).text(form.text); - } - }); - }); - - $('.editCancelButton').click(function (event) { - event.preventDefault(); - $('div .editForm').hide(); - }); - - $('.replyCancelButton').click(function (event) { - event.preventDefault(); - $('div .replyForm').hide(); - }); - - $('.replyLink').click(function (event) { - event.preventDefault(); - $('div .editForm').hide(); - var linkElement = $(this); - var replyCommentId = linkElement.attr('data-relpyid'); - - if (replyCommentId != '' && replyCommentId !== undefined) { - var div = linkElement.parent().next(); - - if (div.is(":hidden")) { - $('div .replyForm').hide(); - div.show(); - } else { - div.hide(); - } - return; - } - }); - - $('.deleteLink').click(function (event) { - event.preventDefault(); - var linkElement = $(this); - var deleteCommentId = linkElement.attr('data-deleteid'); - - if (deleteCommentId != '' && deleteCommentId !== undefined) { - abp.message.confirm( - l('CommentDeletionWarningMessage'), // TODO: localize - l('Are you sure?'), - function (isConfirmed) { - if (isConfirmed) { - $.ajax({ - type: "POST", - url: "/Blog/Comments/Delete", - data: { id: deleteCommentId }, - success: function (response) { - linkElement.parent().parent().parent().remove(); - } - }); - } - } - ); - } - }); - - $('#DeletePostLink').click(function (event) { - event.preventDefault(); - var linkElement = $(this); - var deleteCommentId = linkElement.attr('data-postid'); - var blogShortName = linkElement.attr('data-blogShortName'); - - if (deleteCommentId != '' && deleteCommentId !== undefined) { - abp.message.confirm( - l('PostDeletionWarningMessage'), - l('AreYouSure'), - function (isConfirmed) { - if (isConfirmed) { - $.ajax({ - type: "POST", - url: "/Blog/Posts/Delete", - data: { id: deleteCommentId }, - success: function () { - var url = window.location.pathname; - var postNameBeginning = url.lastIndexOf('/'); - window.location.replace(url.substring(0, postNameBeginning)); - } - }); - } - } - ); - } - }); - - $('.updateLink').click(function (event) { - event.preventDefault(); - $('div .replyForm').hide(); - - var linkElement = $(this); - var updateCommentId = $(this).attr('data-updateid'); - - if (updateCommentId != '' && updateCommentId !== undefined) { - - var div = linkElement.parent().next().next(); - - if (div.is(":hidden")) { - $('div .editForm').hide(); - div.show(); - } else { - div.hide(); - } - return; - } - }); - - if ($('#FocusCommentId').val() != '00000000-0000-0000-0000-000000000000') { - $('html, body').animate({ - scrollTop: ($('#' + $('#FocusCommentId').val()).offset().top - 150) - }, 500); - } - - $(".post-content a[href^='http']").attr('target', '_blank'); - - initSocialShareLinks(); - + var l = abp.localization.getResource('Blogging'); + + var initSocialShareLinks = function () { + var re = new RegExp(/^.*\//); + var rootUrl = re.exec(window.location.href); + + var pageHeader = $('#PostTitle').text(); + var blogName = $('#BlogFullName').attr('name'); + + $('#TwitterShareLink').attr( + 'href', + 'https://twitter.com/intent/tweet?text=' + + encodeURI(pageHeader + ' | ' + blogName + ' | ' + window.location.href) + ); + + $('#LinkedinShareLink').attr( + 'href', + 'https://www.linkedin.com/shareArticle?' + + 'url=' + + encodeURI(window.location.href) + + '&' + + 'mini=true&' + + 'summary=' + + encodeURI(blogName) + + '&' + + 'title=' + + encodeURI(pageHeader) + + '&' + + 'source=' + + encodeURI(rootUrl) + ); + + $('#EmailShareLink').attr( + 'href', + 'mailto:?' + + 'body=' + + encodeURI('I want you to look at ' + window.location.href) + + '&' + + 'subject=' + + encodeURI(pageHeader + ' | ' + blogName) + + '&' + ); + }; + + $('div .replyForm').hide(); + + $('div .editForm').hide(); + + $('form[class="editFormClass"]').submit(function (event) { + event.preventDefault(); + var form = $(this).serializeFormToObject(); + + $.ajax({ + type: 'POST', + url: '/Blog/Comments/Update', + data: { + id: form.commentId, + commentDto: { + text: form.text, + }, + }, + success: function (response) { + $('div .editForm').hide(); + $('#' + form.commentId).text(form.text); + }, + }); + }); + + $('.editCancelButton').click(function (event) { + event.preventDefault(); + $('div .editForm').hide(); + }); + + $('.replyCancelButton').click(function (event) { + event.preventDefault(); + $('div .replyForm').hide(); + }); + + $('.replyLink').click(function (event) { + event.preventDefault(); + $('div .editForm').hide(); + var linkElement = $(this); + var replyCommentId = linkElement.attr('data-relpyid'); + + if (replyCommentId != '' && replyCommentId !== undefined) { + var div = linkElement.parent().next(); + + if (div.is(':hidden')) { + $('div .replyForm').hide(); + div.show(); + } else { + div.hide(); + } + return; + } + }); + + $('.deleteLink').click(function (event) { + event.preventDefault(); + var linkElement = $(this); + var deleteCommentId = linkElement.attr('data-deleteid'); + + if (deleteCommentId != '' && deleteCommentId !== undefined) { + abp.message.confirm( + l('CommentDeletionWarningMessage'), // TODO: localize + l('Are you sure?'), + function (isConfirmed) { + if (isConfirmed) { + $.ajax({ + type: 'POST', + url: '/Blog/Comments/Delete', + data: { id: deleteCommentId }, + success: function (response) { + linkElement.parent().parent().parent().remove(); + }, + }); + } + } + ); + } + }); + + $('#DeletePostLink').click(function (event) { + event.preventDefault(); + var linkElement = $(this); + var deleteCommentId = linkElement.attr('data-postid'); + var blogShortName = linkElement.attr('data-blogShortName'); + + if (deleteCommentId != '' && deleteCommentId !== undefined) { + abp.message.confirm( + l('PostDeletionWarningMessage'), + l('AreYouSure'), + function (isConfirmed) { + if (isConfirmed) { + $.ajax({ + type: 'POST', + url: '/Blog/Posts/Delete', + data: { id: deleteCommentId }, + success: function () { + var url = window.location.pathname; + var postNameBeginning = url.lastIndexOf('/'); + window.location.replace(url.substring(0, postNameBeginning)); + }, + }); + } + } + ); + } + }); + + $('.updateLink').click(function (event) { + event.preventDefault(); + $('div .replyForm').hide(); + + var linkElement = $(this); + var updateCommentId = $(this).attr('data-updateid'); + + if (updateCommentId != '' && updateCommentId !== undefined) { + var div = linkElement.parent().next().next(); + + if (div.is(':hidden')) { + $('div .editForm').hide(); + div.show(); + } else { + div.hide(); + } + return; + } + }); + + if ($('#FocusCommentId').val() != '00000000-0000-0000-0000-000000000000') { + $('html, body').animate( + { + scrollTop: $('#' + $('#FocusCommentId').val()).offset().top - 150, + }, + 500 + ); + } + + $(".post-content a[href^='http']").attr('target', '_blank'); + + initSocialShareLinks(); })(jQuery); diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/edit.js b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/edit.js index 8d668019c3..c8d0bb9b26 100644 --- a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/edit.js +++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/edit.js @@ -1,127 +1,124 @@ $(function () { - - var $container = $("#edit-post-container"); - var $editorContainer = $container.find(".edit-post-editor"); - var $submitButton = $container.find("button[type=submit]"); - var $form = $container.find("form#edit-post-form"); - var editorDataKey = "tuiEditor"; - var $titleLengthWarning = $("#title-length-warning"); - var maxTitleLength = parseInt($titleLengthWarning.data("max-length")); - - var $title = $('#Post_Title'); - var $coverImage = $("#CoverImage"); - var $postCoverImage = $('#Post_CoverImage'); - var $coverImageFile = $('#CoverImageFile'); - var $postFormSubmitButton = $('#PostFormSubmitButton'); - - var setCoverImage = function (file) { - $postCoverImage.val(file.fileUrl); - $coverImage.attr("src", file.fileUrl); - $postFormSubmitButton.removeAttr('disabled'); - }; - - var uploadCoverImage = function (file) { - var formData = new FormData(); - formData.append('file', file); - - $.ajax({ - type: "POST", - url: "/api/blogging/files/images/upload", - data: formData, - contentType: false, - processData: false, - success: function (response) { - setCoverImage(response); - } - }); - }; - - var checkTitleLength = function () { - var title = $title.val(); - - if (title.length > maxTitleLength) { - $titleLengthWarning.show(); - } else { - $titleLengthWarning.hide(); - } - }; - - checkTitleLength(); - - $title.on("change paste keyup", function () { - checkTitleLength(); - }); - - $coverImageFile.change(function () { - if (!$coverImageFile.prop('files').length) { - return; - } - - $postFormSubmitButton.attr('disabled',true); - var file = $coverImageFile.prop('files')[0]; - uploadCoverImage(file); - }); - - - var uploadImage = function (file, callbackFn) { - var formData = new FormData(); - formData.append('file', file); - - $.ajax({ - type: "POST", - url: "/api/blogging/files/images/upload", - data: formData, - contentType: false, - processData: false, - success: function (response) { - callbackFn(response.fileUrl); - } - }); - }; - - var newPostEditor = $editorContainer.tuiEditor({ - usageStatistics: false, - initialEditType: 'markdown', - previewStyle: 'tab', - height: "auto", - initialValue: $form.find("input[name='Post.Content']").val(), - hooks: { - addImageBlobHook: function (blob, callback, source) { - var imageAltText = blob.name; - - uploadImage(blob, - function (fileUrl) { - callback(fileUrl, imageAltText); - }); - } - }, - events: { - load: function () { - $editorContainer.find(".loading-cover").remove(); - $submitButton.prop("disabled", false); - $form.data("validator").settings.ignore = '.ignore'; - $editorContainer.find(':input').addClass('ignore'); - } - } - }).data(editorDataKey); - - $container.find("form#edit-post-form").submit(function (e) { - var $postTextInput = $form.find("input[name='Post.Content']"); - - var postText = newPostEditor.getMarkdown(); - $postTextInput.val(postText); - - if (!$form.valid()) { - var validationResult = $form.validate(); - abp.message.warn(validationResult.errorList[0].message); //TODO: errors can be merged into lines. make sweetalert accept HTML. - e.preventDefault(); - return false; //for old browsers - } - - $submitButton.buttonBusy(); - $(this).off('submit').submit(); - return true; - }); - + var $container = $('#edit-post-container'); + var $editorContainer = $container.find('.edit-post-editor'); + var $submitButton = $container.find('button[type=submit]'); + var $form = $container.find('form#edit-post-form'); + var editorDataKey = 'tuiEditor'; + var $titleLengthWarning = $('#title-length-warning'); + var maxTitleLength = parseInt($titleLengthWarning.data('max-length')); + + var $title = $('#Post_Title'); + var $coverImage = $('#CoverImage'); + var $postCoverImage = $('#Post_CoverImage'); + var $coverImageFile = $('#CoverImageFile'); + var $postFormSubmitButton = $('#PostFormSubmitButton'); + + var setCoverImage = function (file) { + $postCoverImage.val(file.fileUrl); + $coverImage.attr('src', file.fileUrl); + $postFormSubmitButton.removeAttr('disabled'); + }; + + var uploadCoverImage = function (file) { + var formData = new FormData(); + formData.append('file', file); + + $.ajax({ + type: 'POST', + url: '/api/blogging/files/images/upload', + data: formData, + contentType: false, + processData: false, + success: function (response) { + setCoverImage(response); + }, + }); + }; + + var checkTitleLength = function () { + var title = $title.val(); + + if (title.length > maxTitleLength) { + $titleLengthWarning.show(); + } else { + $titleLengthWarning.hide(); + } + }; + + checkTitleLength(); + + $title.on('change paste keyup', function () { + checkTitleLength(); + }); + + $coverImageFile.change(function () { + if (!$coverImageFile.prop('files').length) { + return; + } + + $postFormSubmitButton.attr('disabled', true); + var file = $coverImageFile.prop('files')[0]; + uploadCoverImage(file); + }); + + var uploadImage = function (file, callbackFn) { + var formData = new FormData(); + formData.append('file', file); + + $.ajax({ + type: 'POST', + url: '/api/blogging/files/images/upload', + data: formData, + contentType: false, + processData: false, + success: function (response) { + callbackFn(response.fileUrl); + }, + }); + }; + + var newPostEditor = $editorContainer + .tuiEditor({ + usageStatistics: false, + initialEditType: 'markdown', + previewStyle: 'tab', + height: 'auto', + initialValue: $form.find("input[name='Post.Content']").val(), + hooks: { + addImageBlobHook: function (blob, callback, source) { + var imageAltText = blob.name; + + uploadImage(blob, function (fileUrl) { + callback(fileUrl, imageAltText); + }); + }, + }, + events: { + load: function () { + $editorContainer.find('.loading-cover').remove(); + $submitButton.prop('disabled', false); + $form.data('validator').settings.ignore = '.ignore'; + $editorContainer.find(':input').addClass('ignore'); + }, + }, + }) + .data(editorDataKey); + + $container.find('form#edit-post-form').submit(function (e) { + var $postTextInput = $form.find("input[name='Post.Content']"); + + var postText = newPostEditor.getMarkdown(); + $postTextInput.val(postText); + + if (!$form.valid()) { + var validationResult = $form.validate(); + abp.message.warn(validationResult.errorList[0].message); //TODO: errors can be merged into lines. make sweetalert accept HTML. + e.preventDefault(); + return false; //for old browsers + } + + $submitButton.buttonBusy(); + $(this).off('submit').submit(); + return true; + }); }); - diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Shared/Scripts/blog.js b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Shared/Scripts/blog.js index b78c8132aa..53eadbf21c 100644 --- a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Shared/Scripts/blog.js +++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Shared/Scripts/blog.js @@ -1,67 +1,67 @@ -(function() { - function handleArrows() { - var herosWidth = $(".hero-articles").width(); - var arrowsPosition = (herosWidth / 2 - 90); - $(".owl-next").css("right", arrowsPosition); - $(".owl-prev").css("left", arrowsPosition); - } +(function () { + function handleArrows() { + var herosWidth = $('.hero-articles').width(); + var arrowsPosition = herosWidth / 2 - 90; + $('.owl-next').css('right', arrowsPosition); + $('.owl-prev').css('left', arrowsPosition); + } - function handleImages() { - //if ($(window).width() > 767) { - // $(".box-articles .img-container").each(function () { - // var squareWidth = $(this).width(); - // $(this).css("height", squareWidth); - // }); - //} - //else { - // $(".box-articles .img-container").css("height", "auto"); - //} - } + function handleImages() { + //if ($(window).width() > 767) { + // $(".box-articles .img-container").each(function () { + // var squareWidth = $(this).width(); + // $(this).css("height", squareWidth); + // }); + //} + //else { + // $(".box-articles .img-container").css("height", "auto"); + //} + } - function handleOwlCarousel() { - $('.hero-section .owl-carousel').owlCarousel({ - loop: true, - margin: 0, - nav: false, - dots: false, - //center: true, - autoplay: true, - autoHeight: true, - autoplaySpeed: 1000, - items: 1, - }); - $('.card-article-container .owl-carousel').owlCarousel({ - loop: true, - margin: 0, - nav: false, - dots: false, - autoplay: true, - autoplaySpeed: 1000, - responsive: { - 0: { - items: 1 - } - } - }); - } + function handleOwlCarousel() { + $('.hero-section .owl-carousel').owlCarousel({ + loop: true, + margin: 0, + nav: false, + dots: false, + //center: true, + autoplay: true, + autoHeight: true, + autoplaySpeed: 1000, + items: 1, + }); + $('.card-article-container .owl-carousel').owlCarousel({ + loop: true, + margin: 0, + nav: false, + dots: false, + autoplay: true, + autoplaySpeed: 1000, + responsive: { + 0: { + items: 1, + }, + }, + }); + } - $(function () { - handleImages(); - handleOwlCarousel(); + $(function () { + handleImages(); + handleOwlCarousel(); - $(".nav-link").on("click", function () { - $(this).parent().parent(); - }); + $('.nav-link').on('click', function () { + $(this).parent().parent(); + }); - $(window).resize(function () { - setTimeout(function () { - handleArrows(); - handleImages(); - }, 500); - }); + $(window).resize(function () { + setTimeout(function () { + handleArrows(); + handleImages(); + }, 500); + }); - setTimeout(function () { - handleArrows(); - }, 500); - }); -})(); \ No newline at end of file + setTimeout(function () { + handleArrows(); + }, 500); + }); +})(); From d766d36d6aeb4b183a42e9f3049f3ec1efd3ed79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ahmet=20=C3=87otur?= Date: Thu, 9 Jul 2020 14:50:00 +0300 Subject: [PATCH 094/137] Client Simulation - prettier settings added and js files reformatted --- modules/client-simulation/.prettierrc | 4 +++ .../Pages/ClientSimulation/Index.js | 8 ++--- .../Pages/ClientSimulation/SimulationArea.js | 32 +++++++++---------- 3 files changed, 23 insertions(+), 21 deletions(-) create mode 100644 modules/client-simulation/.prettierrc diff --git a/modules/client-simulation/.prettierrc b/modules/client-simulation/.prettierrc new file mode 100644 index 0000000000..7d1b8aa721 --- /dev/null +++ b/modules/client-simulation/.prettierrc @@ -0,0 +1,4 @@ +{ + "singleQuote": true, + "useTabs": true +} diff --git a/modules/client-simulation/src/Volo.ClientSimulation.Web/Pages/ClientSimulation/Index.js b/modules/client-simulation/src/Volo.ClientSimulation.Web/Pages/ClientSimulation/Index.js index 39a9dc61f7..fbdf917f91 100644 --- a/modules/client-simulation/src/Volo.ClientSimulation.Web/Pages/ClientSimulation/Index.js +++ b/modules/client-simulation/src/Volo.ClientSimulation.Web/Pages/ClientSimulation/Index.js @@ -1,5 +1,5 @@ (function ($) { - $(function () { - SimulationArea.init($('#SimulationArea')); - }); -})(jQuery); \ No newline at end of file + $(function () { + SimulationArea.init($('#SimulationArea')); + }); +})(jQuery); diff --git a/modules/client-simulation/src/Volo.ClientSimulation.Web/Pages/ClientSimulation/SimulationArea.js b/modules/client-simulation/src/Volo.ClientSimulation.Web/Pages/ClientSimulation/SimulationArea.js index 24a4d46460..de15f8a63c 100644 --- a/modules/client-simulation/src/Volo.ClientSimulation.Web/Pages/ClientSimulation/SimulationArea.js +++ b/modules/client-simulation/src/Volo.ClientSimulation.Web/Pages/ClientSimulation/SimulationArea.js @@ -1,21 +1,19 @@ var SimulationArea = {}; (function ($) { + var $mainContainer = null; - var $mainContainer = null; + function refreshSimulationArea() { + $.get('/ClientSimulation/SimulationArea') + .done(function (result) { + $mainContainer.html(result); + }) + .always(function () { + setTimeout(refreshSimulationArea, 1000); + }); + } - function refreshSimulationArea() { - $.get('/ClientSimulation/SimulationArea') - .done(function(result) { - $mainContainer.html(result); - }) - .always(function() { - setTimeout(refreshSimulationArea, 1000); - }); - } - - SimulationArea.init = function ($container) { - $mainContainer = $container; - setTimeout(refreshSimulationArea, 1000); - }; - -})(jQuery); \ No newline at end of file + SimulationArea.init = function ($container) { + $mainContainer = $container; + setTimeout(refreshSimulationArea, 1000); + }; +})(jQuery); From 2c36e51ff3a87e4e6294e7cd16a7ff3b50732e26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ahmet=20=C3=87otur?= Date: Thu, 9 Jul 2020 14:51:53 +0300 Subject: [PATCH 095/137] Docs Module - prettier settings added and js files reformatted --- modules/docs/.prettierrc | 4 + .../Pages/Docs/Admin/Documents/index.js | 320 +++++---- .../Pages/Docs/Admin/Projects/Pull.js | 36 +- .../Pages/Docs/Admin/Projects/create.js | 20 +- .../Pages/Docs/Admin/Projects/edit.js | 20 +- .../Pages/Docs/Admin/Projects/index.js | 279 ++++---- .../Pages/Documents/Project/index.js | 652 +++++++++--------- .../Documents/Shared/ErrorComponent/error.js | 32 +- .../Pages/Documents/Shared/Scripts/vs.js | 315 +++++---- 9 files changed, 872 insertions(+), 806 deletions(-) create mode 100644 modules/docs/.prettierrc diff --git a/modules/docs/.prettierrc b/modules/docs/.prettierrc new file mode 100644 index 0000000000..7d1b8aa721 --- /dev/null +++ b/modules/docs/.prettierrc @@ -0,0 +1,4 @@ +{ + "singleQuote": true, + "useTabs": true +} diff --git a/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Documents/index.js b/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Documents/index.js index dc77bbc687..03d6fee850 100644 --- a/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Documents/index.js +++ b/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Documents/index.js @@ -1,164 +1,178 @@ $(function () { + var l = abp.localization.getResource('Docs'); + var service = window.volo.docs.admin.documentsAdmin; - var l = abp.localization.getResource('Docs'); - var service = window.volo.docs.admin.documentsAdmin; + var getFormattedDate = function ($datePicker) { + return $datePicker.data().datepicker.getFormattedDate('yyyy-mm-dd'); + }; - var getFormattedDate = function ($datePicker) { - return $datePicker.data().datepicker.getFormattedDate("yyyy-mm-dd"); - }; + var getFilter = function () { + return { + projectId: $('#ProjectId').val(), + name: $('#Name').val(), + version: $('#Version').val(), + languageCode: $('#LanguageCode').val(), + fileName: $('#FileName').val(), + format: $('#Format').val(), + creationTimeMin: getFormattedDate($('#CreationTimeMin')), + creationTimeMax: getFormattedDate($('#CreationTimeMax')), + lastUpdatedTimeMin: getFormattedDate($('#LastUpdatedTimeMin')), + lastUpdatedTimeMax: getFormattedDate($('#LastUpdatedTimeMax')), + lastSignificantUpdateTimeMin: getFormattedDate( + $('#LastSignificantUpdateTimeMin') + ), + lastSignificantUpdateTimeMax: getFormattedDate( + $('#LastSignificantUpdateTimeMax') + ), + lastCachedTimeMin: getFormattedDate($('#LastCachedTimeMin')), + lastCachedTimeMax: getFormattedDate($('#LastCachedTimeMax')), + }; + }; - var getFilter = function () { - return { - projectId: $("#ProjectId").val(), - name: $("#Name").val(), - version: $("#Version").val(), - languageCode: $("#LanguageCode").val(), - fileName: $("#FileName").val(), - format: $("#Format").val(), - creationTimeMin: getFormattedDate($("#CreationTimeMin")), - creationTimeMax: getFormattedDate($("#CreationTimeMax")), - lastUpdatedTimeMin: getFormattedDate($("#LastUpdatedTimeMin")), - lastUpdatedTimeMax: getFormattedDate($("#LastUpdatedTimeMax")), - lastSignificantUpdateTimeMin: getFormattedDate($("#LastSignificantUpdateTimeMin")), - lastSignificantUpdateTimeMax: getFormattedDate($("#LastSignificantUpdateTimeMax")), - lastCachedTimeMin: getFormattedDate($("#LastCachedTimeMin")), - lastCachedTimeMax: getFormattedDate($("#LastCachedTimeMax")) - }; - }; + var dataTable = $('#DocumentsTable').DataTable( + abp.libs.datatables.normalizeConfiguration({ + processing: true, + serverSide: true, + scrollX: true, + paging: true, + searching: false, + autoWidth: false, + scrollCollapse: true, + ajax: abp.libs.datatables.createAjax(service.getAll, getFilter), + columnDefs: [ + { + rowAction: { + items: [ + { + text: l('RemoveFromCache'), + visible: abp.auth.isGranted('Docs.Admin.Documents'), + confirmMessage: function (data) { + return l('RemoveFromCacheConfirmation'); + }, + action: function (data) { + service.removeFromCache(data.record.id).then(function () { + abp.message.success(l('RemovedFromCache')); + dataTable.ajax.reload(); + }); + }, + }, + { + text: l('ReIndex'), + visible: abp.auth.isGranted('Docs.Admin.Documents'), + confirmMessage: function (data) { + return l('ReIndexDocumentConfirmation'); + }, + action: function (data) { + service.reindex(data.record.id).then(function () { + abp.message.success(l('ReindexCompleted')); + dataTable.ajax.reload(); + }); + }, + }, + { + text: l('DeleteFromDatabase'), + visible: abp.auth.isGranted('Docs.Admin.Documents'), + confirmMessage: function (data) { + return l('DeleteDocumentFromDbConfirmation'); + }, + action: function (data) { + service.deleteFromDatabase(data.record.id).then(function () { + abp.message.success(l('Deleted')); + dataTable.ajax.reload(); + }); + }, + }, + ], + }, + }, + { + target: 1, + data: 'name', + }, + { + target: 2, + data: 'version', + }, + { + target: 3, + data: 'languageCode', + }, + { + target: 4, + data: 'fileName', + }, + { + target: 5, + data: 'format', + }, + { + target: 6, + data: 'creationTime', + render: function (creationTime) { + if (!creationTime) { + return ''; + } - var dataTable = $('#DocumentsTable').DataTable(abp.libs.datatables.normalizeConfiguration({ - processing: true, - serverSide: true, - scrollX: true, - paging: true, - searching: false, - autoWidth: false, - scrollCollapse: true, - ajax: abp.libs.datatables.createAjax(service.getAll, getFilter), - columnDefs: [ - { - rowAction: { - items: - [ - { - text: l('RemoveFromCache'), - visible: abp.auth.isGranted('Docs.Admin.Documents'), - confirmMessage: function (data) { return l('RemoveFromCacheConfirmation'); }, - action: function (data) { - service.removeFromCache(data.record.id) - .then(function () { - abp.message.success(l('RemovedFromCache')); - dataTable.ajax.reload(); - }); - } - }, - { - text: l('ReIndex'), - visible: abp.auth.isGranted('Docs.Admin.Documents'), - confirmMessage: function (data) { return l('ReIndexDocumentConfirmation'); }, - action: function (data) { - service.reindex(data.record.id) - .then(function () { - abp.message.success(l('ReindexCompleted')); - dataTable.ajax.reload(); - }); - } - }, - { - text: l('DeleteFromDatabase'), - visible: abp.auth.isGranted('Docs.Admin.Documents'), - confirmMessage: function (data) { return l('DeleteDocumentFromDbConfirmation'); }, - action: function (data) { - service.deleteFromDatabase(data.record.id) - .then(function () { - abp.message.success(l('Deleted')); - dataTable.ajax.reload(); - }); - } - } - ] - } - }, - { - target: 1, - data: "name" - }, - { - target: 2, - data: "version" - }, - { - target: 3, - data: "languageCode" - }, - { - target: 4, - data: "fileName" - }, - { - target: 5, - data: "format" - }, - { - target: 6, - data: "creationTime", - render: function (creationTime) { - if (!creationTime) { - return ""; - } + var date = Date.parse(creationTime); + return new Date(date).toLocaleDateString( + abp.localization.currentCulture.name + ); + }, + }, + { + target: 7, + data: 'lastUpdatedTime', + render: function (lastUpdatedTime) { + if (!lastUpdatedTime) { + return ''; + } - var date = Date.parse(creationTime); - return (new Date(date)).toLocaleDateString(abp.localization.currentCulture.name); - } - }, - { - target: 7, - data: "lastUpdatedTime", - render: function (lastUpdatedTime) { - if (!lastUpdatedTime) { - return ""; - } + var date = Date.parse(lastUpdatedTime); + return new Date(date).toLocaleDateString( + abp.localization.currentCulture.name + ); + }, + }, + { + target: 8, + data: 'lastSignificantUpdateTime', + render: function (lastSignificantUpdateTime) { + if (!lastSignificantUpdateTime) { + return ''; + } - var date = Date.parse(lastUpdatedTime); - return (new Date(date)).toLocaleDateString(abp.localization.currentCulture.name); - } - }, - { - target: 8, - data: "lastSignificantUpdateTime", - render: function (lastSignificantUpdateTime) { - if (!lastSignificantUpdateTime) { - return ""; - } + var date = Date.parse(lastSignificantUpdateTime); + return new Date(date).toLocaleDateString( + abp.localization.currentCulture.name + ); + }, + }, + { + target: 9, + data: 'lastCachedTime', + render: function (lastCachedTime) { + if (!lastCachedTime) { + return ''; + } - var date = Date.parse(lastSignificantUpdateTime); - return (new Date(date)).toLocaleDateString(abp.localization.currentCulture.name); - } - }, - { - target: 9, - data: "lastCachedTime", - render: function (lastCachedTime) { - if (!lastCachedTime) { - return ""; - } + var date = Date.parse(lastCachedTime); + return new Date(date).toLocaleDateString( + abp.localization.currentCulture.name + ); + }, + }, + ], + }) + ); - var date = Date.parse(lastCachedTime); - return (new Date(date)).toLocaleDateString(abp.localization.currentCulture.name); - } - } - ] - })); - - $("#FilterForm input[type='text']").keypress(function (e) { - if (e.which === 13) { - dataTable.ajax.reload(); - } - }); - - $("#SearchButton").click(function (e) { - e.preventDefault(); - dataTable.ajax.reload(); - }); + $("#FilterForm input[type='text']").keypress(function (e) { + if (e.which === 13) { + dataTable.ajax.reload(); + } + }); + $('#SearchButton').click(function (e) { + e.preventDefault(); + dataTable.ajax.reload(); + }); }); diff --git a/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/Pull.js b/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/Pull.js index 8c62b5de34..db4fa9b662 100644 --- a/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/Pull.js +++ b/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/Pull.js @@ -1,23 +1,23 @@ var abp = abp || {}; $(function () { - abp.modals.projectPull = function () { - var initModal = function (publicApi, args) { - var $form = publicApi.getForm(); - var fg = $form.find("#PullDocument_Name").parent(); - var nameInput = fg.html(); + abp.modals.projectPull = function () { + var initModal = function (publicApi, args) { + var $form = publicApi.getForm(); + var fg = $form.find('#PullDocument_Name').parent(); + var nameInput = fg.html(); - $form.find("input:checkbox").change(function() { - if ($(this).prop("checked")) { - fg.html(""); - } else { - fg.html(nameInput); - } - }); - }; + $form.find('input:checkbox').change(function () { + if ($(this).prop('checked')) { + fg.html(''); + } else { + fg.html(nameInput); + } + }); + }; - return { - initModal: initModal - }; - }; -}); \ No newline at end of file + return { + initModal: initModal, + }; + }; +}); diff --git a/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/create.js b/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/create.js index bf06d0750d..1b78f44791 100644 --- a/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/create.js +++ b/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/create.js @@ -1,14 +1,12 @@ var abp = abp || {}; $(function () { - abp.modals.projectCreate = function () { - var initModal = function (publicApi, args) { - var $form = publicApi.getForm(); + abp.modals.projectCreate = function () { + var initModal = function (publicApi, args) { + var $form = publicApi.getForm(); + }; - - }; - - return { - initModal: initModal - } - }; -}); \ No newline at end of file + return { + initModal: initModal, + }; + }; +}); diff --git a/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/edit.js b/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/edit.js index 14987552fb..287ea898d7 100644 --- a/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/edit.js +++ b/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/edit.js @@ -1,14 +1,12 @@ var abp = abp || {}; $(function () { - abp.modals.projectEdit = function () { - var initModal = function (publicApi, args) { - var $form = publicApi.getForm(); + abp.modals.projectEdit = function () { + var initModal = function (publicApi, args) { + var $form = publicApi.getForm(); + }; - - }; - - return { - initModal: initModal - } - }; -}); \ No newline at end of file + return { + initModal: initModal, + }; + }; +}); diff --git a/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/index.js b/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/index.js index baf4c6b646..e7b57b116e 100644 --- a/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/index.js +++ b/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/index.js @@ -1,146 +1,155 @@ $(function () { + var l = abp.localization.getResource('Docs'); - var l = abp.localization.getResource('Docs'); + var _createModal = new abp.ModalManager({ + viewUrl: abp.appPath + 'Docs/Admin/Projects/Create', + modalClass: 'projectCreate', + }); - var _createModal = new abp.ModalManager({ - viewUrl: abp.appPath + 'Docs/Admin/Projects/Create', - modalClass: 'projectCreate' - }); + var _editModal = new abp.ModalManager({ + viewUrl: abp.appPath + 'Docs/Admin/Projects/Edit', + modalClass: 'projectEdit', + }); - var _editModal = new abp.ModalManager({ - viewUrl: abp.appPath + 'Docs/Admin/Projects/Edit', - modalClass: 'projectEdit' - }); + var _pullModal = new abp.ModalManager({ + viewUrl: abp.appPath + 'Docs/Admin/Projects/Pull', + modalClass: 'projectPull', + }); - var _pullModal = new abp.ModalManager({ - viewUrl: abp.appPath + 'Docs/Admin/Projects/Pull', - modalClass: 'projectPull' - }); + var _dataTable = $('#ProjectsTable').DataTable( + abp.libs.datatables.normalizeConfiguration({ + processing: true, + serverSide: true, + scrollX: true, + paging: true, + searching: false, + autoWidth: false, + scrollCollapse: true, + order: [[2, 'desc']], + ajax: abp.libs.datatables.createAjax( + volo.docs.admin.projectsAdmin.getList + ), + columnDefs: [ + { + rowAction: { + items: [ + { + text: l('Edit'), + visible: abp.auth.isGranted('Docs.Admin.Projects.Update'), + action: function (data) { + _editModal.open({ + Id: data.record.id, + }); + }, + }, + { + text: l('Delete'), + visible: abp.auth.isGranted('Docs.Admin.Projects.Delete'), + confirmMessage: function (data) { + return l('ProjectDeletionWarningMessage'); + }, + action: function (data) { + volo.docs.admin.projectsAdmin + .delete(data.record.id) + .then(function () { + _dataTable.ajax.reload(); + }); + }, + }, + { + text: l('Pull'), + visible: abp.auth.isGranted('Docs.Admin.Documents'), + action: function (data) { + _pullModal.open({ + Id: data.record.id, + }); + }, + }, + { + text: l('ClearCache'), + visible: abp.auth.isGranted('Docs.Admin.Documents'), + confirmMessage: function (data) { + return l('ClearCacheConfirmationMessage', data.record.name); + }, + action: function (data) { + volo.docs.admin.documentsAdmin + .clearCache({ projectId: data.record.id }) + .then(function () { + _dataTable.ajax.reload(); + }); + }, + }, + { + text: l('ReIndexProject'), + visible: abp.auth.isGranted('Docs.Admin.Documents'), + confirmMessage: function (data) { + return l( + 'ReIndexProjectConfirmationMessage', + data.record.name + ); + }, + action: function (data) { + volo.docs.admin.projectsAdmin + .reindex({ projectId: data.record.id }) + .then(function () { + abp.message.success( + l('SuccessfullyReIndexProject', data.record.name) + ); + }); + }, + }, + ], + }, + }, + { + target: 1, + data: 'name', + }, + { + target: 2, + data: 'shortName', + }, + { + target: 3, + data: 'documentStoreType', + }, + { + target: 4, + data: 'format', + render: function (data) { + if (data === 'md') { + return 'markdown'; + } + return data; + }, + }, + ], + }) + ); - var _dataTable = $('#ProjectsTable').DataTable(abp.libs.datatables.normalizeConfiguration({ - processing: true, - serverSide: true, - scrollX: true, - paging: true, - searching: false, - autoWidth: false, - scrollCollapse: true, - order: [[2, "desc"]], - ajax: abp.libs.datatables.createAjax(volo.docs.admin.projectsAdmin.getList), - columnDefs: [ - { - rowAction: { - items: - [ - { - text: l('Edit'), - visible: abp.auth.isGranted('Docs.Admin.Projects.Update'), - action: function (data) { - _editModal.open({ - Id: data.record.id - }); - } - }, - { - text: l('Delete'), - visible: abp.auth.isGranted('Docs.Admin.Projects.Delete'), - confirmMessage: function (data) { return l('ProjectDeletionWarningMessage') }, - action: function (data) { - volo.docs.admin.projectsAdmin - .delete(data.record.id) - .then(function () { - _dataTable.ajax.reload(); - }); - } - }, - { - text: l('Pull'), - visible: abp.auth.isGranted('Docs.Admin.Documents'), - action: function (data) { - _pullModal.open({ - Id: data.record.id - }); - } - }, - { - text: l('ClearCache'), - visible: abp.auth.isGranted('Docs.Admin.Documents'), - confirmMessage: function (data) { return l('ClearCacheConfirmationMessage', data.record.name); }, - action: function (data) { - volo.docs.admin.documentsAdmin - .clearCache({ projectId: data.record.id}) - .then(function () { - _dataTable.ajax.reload(); - }); - } - }, - { - text: l('ReIndexProject'), - visible: abp.auth.isGranted('Docs.Admin.Documents'), - confirmMessage: function (data) { return l('ReIndexProjectConfirmationMessage', data.record.name); }, - action: function (data) { - volo.docs.admin.projectsAdmin - .reindex({ projectId: data.record.id}) - .then(function () { - abp.message.success(l('SuccessfullyReIndexProject', data.record.name)); - }); - } - } - ] - } - }, - { - target: 1, - data: "name" - }, - { - target: 2, - data: "shortName" - }, - { - target: 3, - data: "documentStoreType" - }, - { - target: 4, - data: "format", - render: function (data) { - if (data === 'md') { - return 'markdown'; - } + $('#CreateNewGithubProjectButtonId').click(function (event) { + event.preventDefault(); + _createModal.open({ source: 'GitHub' }); + }); - return data; - } - } - ] - })); + $('#ReIndexAllProjects').click(function (event) { + abp.message + .confirm(l('ReIndexAllProjectConfirmationMessage')) + .done(function (accepted) { + if (accepted) { + volo.docs.admin.projectsAdmin.reindexAll().then(function () { + abp.message.success(l('SuccessfullyReIndexAllProject')); + }); + } + }); + }); + _createModal.onClose(function () { + _dataTable.ajax.reload(); + }); - $("#CreateNewGithubProjectButtonId").click(function (event) { - event.preventDefault(); - _createModal.open({source:"GitHub"}); - }); - - $("#ReIndexAllProjects").click(function (event) { - abp.message.confirm(l('ReIndexAllProjectConfirmationMessage')) - .done(function (accepted) { - if (accepted) { - volo.docs.admin.projectsAdmin - .reindexAll() - .then(function () { - abp.message.success(l('SuccessfullyReIndexAllProject')); - }); - } - }); - }); - - _createModal.onClose(function () { - _dataTable.ajax.reload(); - }); - - _editModal.onResult(function () { - _dataTable.ajax.reload(); - }); - + _editModal.onResult(function () { + _dataTable.ajax.reload(); + }); }); diff --git a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/index.js b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/index.js index 71fb550539..915428048f 100644 --- a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/index.js +++ b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/index.js @@ -1,311 +1,343 @@ (function ($) { - - $(function () { - var initNavigationFilter = function (navigationContainerId) { - - var $navigation = $("#" + navigationContainerId); - - var getShownDocumentLinks = function () { - return $navigation.find(".mCSB_container > li a:visible").not(".tree-toggle"); - }; - - var gotoFilteredDocumentIfThereIsOnlyOne = function () { - var $links = getShownDocumentLinks(); - if ($links.length === 1) { - var url = $links.first().attr("href"); - if (url === "javascript:;") { - return; - } - - window.location = url; - } - }; - - var filterDocumentItems = function (filterText) { - $navigation.find(".mCSB_container .opened").removeClass("opened"); - $navigation.find(".mCSB_container > li, .mCSB_container > li ul").hide(); - - if (!filterText) { - $navigation.find(".mCSB_container > li").show(); - $navigation.find(".mCSB_container .selected-tree > ul").show(); - return; - } - - var filteredItems = $navigation.find("li > a").filter(function () { - return $(this).text().toUpperCase().indexOf(filterText.toUpperCase()) > -1; - }); - - filteredItems.each(function () { - - var $el = $(this); - $el.show(); - var $parent = $el.parent(); - - var hasParent = true; - while (hasParent) { - if ($parent.attr("id") === navigationContainerId) { - break; - } - - $parent.show(); - $parent.find("> li > label").not(".last-link").addClass("opened"); - - $parent = $parent.parent(); - hasParent = $parent.length > 0; - } - }); - }; - - $("#filter").keyup(function (e) { - filterDocumentItems(e.target.value); - - if (e.key === "Enter") { - gotoFilteredDocumentIfThereIsOnlyOne(); - } - }); - - $("#fullsearch").keyup(function (e) { - if (e.key === "Enter") { - window.open($(this).data("fullsearch-url") + this.value); - } - }); - }; - - var initAnchorTags = function (container) { - anchors.options = { - placement: 'left' - }; - - var anchorTags = ["h1", "h2", "h3", "h4", "h5", "h6"]; - anchorTags.forEach(function (tag) { - anchors.add(container + " " + tag); - }); - }; - - var initSocialShareLinks = function () { - var pageHeader = $(".docs-body").find("h1, h2").first().text(); - - var projectName = $('#ProjectName')[0].innerText; - - $('#TwitterShareLink').attr('href', - 'https://twitter.com/intent/tweet?text=' + encodeURI(pageHeader + " | " + projectName + " | " + window.location.href) - ); - - $('#LinkedinShareLink').attr('href', - 'https://www.linkedin.com/shareArticle?' - + 'url=' + encodeURI(window.location.href) + '&' - + 'mini=true&' - + "summary=" + encodeURI(projectName) + '&' - + "title=" + encodeURI(pageHeader) + '&' - + "source=" + encodeURI($('#GoToMainWebSite').attr('href')) - ); - - $('#EmailShareLink').attr('href', - 'mailto:?' - + 'body=' + encodeURI('I want you to look at ' + window.location.href) + '&' - + "subject=" + encodeURI(pageHeader + ' | ' + projectName) + '&' - ); - }; - - var initSections = function () { - var clearQueryString = function () { - var uri = window.location.href.toString(); - - if (uri.indexOf("?") > 0) { - uri = uri.substring(0, uri.indexOf("?")); - } - - window.history.replaceState({}, document.title, uri); - }; - - var setQueryString = function () { - var comboboxes = $(".doc-section-combobox"); - if (comboboxes.length < 1) { - return; - } - - var hash = document.location.hash; - - clearQueryString(); - - var uri = window.location.href.toString(); - - var new_uri = uri + "?"; - - for (var i = 0; i < comboboxes.length; i++) { - var key = $(comboboxes[i]).data('key'); - var value = comboboxes[i].value; - - new_uri += key + "=" + value; - - if (i !== comboboxes.length - 1) { - new_uri += "&"; - } - } - - window.history.replaceState({}, document.title, new_uri + hash); - }; - - var getTenYearsLater = function () { - var tenYearsLater = new Date(); - tenYearsLater.setTime(tenYearsLater.getTime() + (365 * 10 * 24 * 60 * 60 * 1000)); - return tenYearsLater; - }; - - var setCookies = function () { - var cookie = abp.utils.getCookieValue("AbpDocsPreferences"); - - if (!cookie || cookie == null || cookie === null) { - cookie = ""; - } - var keyValues = cookie.split("|"); - - var comboboxes = $(".doc-section-combobox"); - - for (var i = 0; i < comboboxes.length; i++) { - var key = $(comboboxes[i]).data('key'); - var value = comboboxes[i].value; - - var changed = false; - var keyValueslength = keyValues.length; - for (var k = 0; k < keyValueslength; k++) { - var splitted = keyValues[k].split("="); - - if (splitted.length > 0 && splitted[0] === key) { - keyValues[k] = key + "=" + value; - changed = true; - } - } - - if (!changed) { - keyValues.push(key + "=" + value); - } - } - - abp.utils.setCookieValue("AbpDocsPreferences", keyValues.join('|'), getTenYearsLater(), '/'); - }; - - $(".doc-section-combobox").change(function () { - setCookies(); - clearQueryString(); - location.reload(); - }); - - setQueryString(); - }; - - var initCrawlerLinks = function () { - - var isCrawler = function () { - var crawlers = [ - 'Google', - 'Googlebot', - 'YandexBot', - 'msnbot', - 'Rambler', - 'Yahoo', - 'AbachoBOT', - 'accoona', - 'AcoiRobot', - 'ASPSeek', - 'CrocCrawler', - 'Dumbot', - 'FAST-WebCrawler', - 'GeonaBot', - 'Gigabot', - 'Lycos', - 'MSRBOT', - 'Scooter', - 'AltaVista', - 'IDBot', - 'eStyle', - 'Scrubby', - 'Slurp', - 'DuckDuckBot', - 'Baiduspider', - 'VoilaBot', - 'ExaLead', - 'Search Dog', - 'MSN Bot', - 'BingBot' - ]; - - var agent = navigator.userAgent; - - for (var i = 0; i < crawlers.length; i++) { - - if (agent.indexOf(crawlers[i]) >= 0) { - return true; - } - } - - return false; - }; - - if (!isCrawler()) { - return; - } - - var comboboxes = $(".doc-section-combobox"); - - if (comboboxes.length <= 0) { - return; - } - - $("#crawler_link").show(); - - var html = ''; - - var currentUrl = window.location.href.toString(); - - if (currentUrl.indexOf("?") > 0) { - currentUrl = currentUrl.substring(0, currentUrl.indexOf("?")); - } - - var getQueryStringsFromComboboxes = function (x) { - if (x >= comboboxes.length) { - return []; - } - - var key = $(comboboxes[x]).data("key"); - - var queryStrings = getQueryStringsFromComboboxes(x + 1); - var returnList = []; - - $(comboboxes[x]).find("option").each(function () { - - if (queryStrings.length <= 0) { - returnList.push(key + "=" + $(this).val()); - - } else { - for (var k = 0; k < queryStrings.length; k++) { - returnList.push(key + "=" + $(this).val() + "&" + queryStrings[k]); - } - } - }); - - return returnList; - }; - - var queryStrings = getQueryStringsFromComboboxes(0); - - for (var i = 0; i < queryStrings.length; i++) { - html += "" + queryStrings[i] + " " - } - - $("#crawler_link").html(html); - }; - - initNavigationFilter("sidebar-scroll"); - - initAnchorTags(".docs-page .docs-body"); - - initSocialShareLinks(); - - initSections(); - - initCrawlerLinks(); - - }); - -})(jQuery); \ No newline at end of file + $(function () { + var initNavigationFilter = function (navigationContainerId) { + var $navigation = $('#' + navigationContainerId); + + var getShownDocumentLinks = function () { + return $navigation + .find('.mCSB_container > li a:visible') + .not('.tree-toggle'); + }; + + var gotoFilteredDocumentIfThereIsOnlyOne = function () { + var $links = getShownDocumentLinks(); + if ($links.length === 1) { + var url = $links.first().attr('href'); + if (url === 'javascript:;') { + return; + } + + window.location = url; + } + }; + + var filterDocumentItems = function (filterText) { + $navigation.find('.mCSB_container .opened').removeClass('opened'); + $navigation + .find('.mCSB_container > li, .mCSB_container > li ul') + .hide(); + + if (!filterText) { + $navigation.find('.mCSB_container > li').show(); + $navigation.find('.mCSB_container .selected-tree > ul').show(); + return; + } + + var filteredItems = $navigation.find('li > a').filter(function () { + return ( + $(this).text().toUpperCase().indexOf(filterText.toUpperCase()) > -1 + ); + }); + + filteredItems.each(function () { + var $el = $(this); + $el.show(); + var $parent = $el.parent(); + + var hasParent = true; + while (hasParent) { + if ($parent.attr('id') === navigationContainerId) { + break; + } + + $parent.show(); + $parent.find('> li > label').not('.last-link').addClass('opened'); + + $parent = $parent.parent(); + hasParent = $parent.length > 0; + } + }); + }; + + $('#filter').keyup(function (e) { + filterDocumentItems(e.target.value); + + if (e.key === 'Enter') { + gotoFilteredDocumentIfThereIsOnlyOne(); + } + }); + + $('#fullsearch').keyup(function (e) { + if (e.key === 'Enter') { + window.open($(this).data('fullsearch-url') + this.value); + } + }); + }; + + var initAnchorTags = function (container) { + anchors.options = { + placement: 'left', + }; + + var anchorTags = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6']; + anchorTags.forEach(function (tag) { + anchors.add(container + ' ' + tag); + }); + }; + + var initSocialShareLinks = function () { + var pageHeader = $('.docs-body').find('h1, h2').first().text(); + + var projectName = $('#ProjectName')[0].innerText; + + $('#TwitterShareLink').attr( + 'href', + 'https://twitter.com/intent/tweet?text=' + + encodeURI( + pageHeader + ' | ' + projectName + ' | ' + window.location.href + ) + ); + + $('#LinkedinShareLink').attr( + 'href', + 'https://www.linkedin.com/shareArticle?' + + 'url=' + + encodeURI(window.location.href) + + '&' + + 'mini=true&' + + 'summary=' + + encodeURI(projectName) + + '&' + + 'title=' + + encodeURI(pageHeader) + + '&' + + 'source=' + + encodeURI($('#GoToMainWebSite').attr('href')) + ); + + $('#EmailShareLink').attr( + 'href', + 'mailto:?' + + 'body=' + + encodeURI('I want you to look at ' + window.location.href) + + '&' + + 'subject=' + + encodeURI(pageHeader + ' | ' + projectName) + + '&' + ); + }; + + var initSections = function () { + var clearQueryString = function () { + var uri = window.location.href.toString(); + + if (uri.indexOf('?') > 0) { + uri = uri.substring(0, uri.indexOf('?')); + } + + window.history.replaceState({}, document.title, uri); + }; + + var setQueryString = function () { + var comboboxes = $('.doc-section-combobox'); + if (comboboxes.length < 1) { + return; + } + + var hash = document.location.hash; + + clearQueryString(); + + var uri = window.location.href.toString(); + + var new_uri = uri + '?'; + + for (var i = 0; i < comboboxes.length; i++) { + var key = $(comboboxes[i]).data('key'); + var value = comboboxes[i].value; + + new_uri += key + '=' + value; + + if (i !== comboboxes.length - 1) { + new_uri += '&'; + } + } + + window.history.replaceState({}, document.title, new_uri + hash); + }; + + var getTenYearsLater = function () { + var tenYearsLater = new Date(); + tenYearsLater.setTime( + tenYearsLater.getTime() + 365 * 10 * 24 * 60 * 60 * 1000 + ); + return tenYearsLater; + }; + + var setCookies = function () { + var cookie = abp.utils.getCookieValue('AbpDocsPreferences'); + + if (!cookie || cookie == null || cookie === null) { + cookie = ''; + } + var keyValues = cookie.split('|'); + + var comboboxes = $('.doc-section-combobox'); + + for (var i = 0; i < comboboxes.length; i++) { + var key = $(comboboxes[i]).data('key'); + var value = comboboxes[i].value; + + var changed = false; + var keyValueslength = keyValues.length; + for (var k = 0; k < keyValueslength; k++) { + var splitted = keyValues[k].split('='); + + if (splitted.length > 0 && splitted[0] === key) { + keyValues[k] = key + '=' + value; + changed = true; + } + } + + if (!changed) { + keyValues.push(key + '=' + value); + } + } + + abp.utils.setCookieValue( + 'AbpDocsPreferences', + keyValues.join('|'), + getTenYearsLater(), + '/' + ); + }; + + $('.doc-section-combobox').change(function () { + setCookies(); + clearQueryString(); + location.reload(); + }); + + setQueryString(); + }; + + var initCrawlerLinks = function () { + var isCrawler = function () { + var crawlers = [ + 'Google', + 'Googlebot', + 'YandexBot', + 'msnbot', + 'Rambler', + 'Yahoo', + 'AbachoBOT', + 'accoona', + 'AcoiRobot', + 'ASPSeek', + 'CrocCrawler', + 'Dumbot', + 'FAST-WebCrawler', + 'GeonaBot', + 'Gigabot', + 'Lycos', + 'MSRBOT', + 'Scooter', + 'AltaVista', + 'IDBot', + 'eStyle', + 'Scrubby', + 'Slurp', + 'DuckDuckBot', + 'Baiduspider', + 'VoilaBot', + 'ExaLead', + 'Search Dog', + 'MSN Bot', + 'BingBot', + ]; + + var agent = navigator.userAgent; + + for (var i = 0; i < crawlers.length; i++) { + if (agent.indexOf(crawlers[i]) >= 0) { + return true; + } + } + + return false; + }; + + if (!isCrawler()) { + return; + } + + var comboboxes = $('.doc-section-combobox'); + + if (comboboxes.length <= 0) { + return; + } + + $('#crawler_link').show(); + + var html = ''; + + var currentUrl = window.location.href.toString(); + + if (currentUrl.indexOf('?') > 0) { + currentUrl = currentUrl.substring(0, currentUrl.indexOf('?')); + } + + var getQueryStringsFromComboboxes = function (x) { + if (x >= comboboxes.length) { + return []; + } + + var key = $(comboboxes[x]).data('key'); + + var queryStrings = getQueryStringsFromComboboxes(x + 1); + var returnList = []; + + $(comboboxes[x]) + .find('option') + .each(function () { + if (queryStrings.length <= 0) { + returnList.push(key + '=' + $(this).val()); + } else { + for (var k = 0; k < queryStrings.length; k++) { + returnList.push( + key + '=' + $(this).val() + '&' + queryStrings[k] + ); + } + } + }); + + return returnList; + }; + + var queryStrings = getQueryStringsFromComboboxes(0); + + for (var i = 0; i < queryStrings.length; i++) { + html += + '' + + queryStrings[i] + + ' '; + } + + $('#crawler_link').html(html); + }; + + initNavigationFilter('sidebar-scroll'); + + initAnchorTags('.docs-page .docs-body'); + + initSocialShareLinks(); + + initSections(); + + initCrawlerLinks(); + }); +})(jQuery); diff --git a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/ErrorComponent/error.js b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/ErrorComponent/error.js index edc010aa9f..6b4fc7a217 100644 --- a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/ErrorComponent/error.js +++ b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/ErrorComponent/error.js @@ -1,20 +1,18 @@ (function ($) { + $(function () { + var errorPageRedirect = function () { + var second = 3; + var close = setInterval(() => { + $('#ErrorRedirectSeconds').text(`(${--second})`); + if (second === 0) { + clearInterval(close); + $('#ErrorRedirect')[0].click(); + } + }, 1000); + }; - $(function () { - var errorPageRedirect = function () { - var second = 3; - var close = setInterval(() => { - $("#ErrorRedirectSeconds").text(`(${--second})`); - if (second === 0) { - clearInterval(close); - $("#ErrorRedirect")[0].click(); - } - }, 1000); - } - - if (document.getElementById("ErrorRedirect")) { - errorPageRedirect(); - } - }); - + if (document.getElementById('ErrorRedirect')) { + errorPageRedirect(); + } + }); })(jQuery); diff --git a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/Scripts/vs.js b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/Scripts/vs.js index aaffc53ddf..2d185498a1 100644 --- a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/Scripts/vs.js +++ b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/Scripts/vs.js @@ -1,152 +1,165 @@ (function ($) { - $(function () { - $('li:not(.last-link) a.tree-toggle').click(function () { - $(this).parent().children('ul.tree').toggle(100); - $(this).closest("li").toggleClass("selected-tree"); - }); - - $('li:not(.last-link) span.plus-icon i.fa-chevron-right').click(function () { - - var $element = $(this).parent(); - - $element.parent().children('ul.tree').toggle(100); - $element.closest("li").toggleClass("selected-tree"); - }); - - var scrollTopBtn = $(".scroll-top-btn"); - var enoughHeight = $(".docs-sidebar-wrapper > .docs-top").height() + 60; - var enoughHeightPlus = 500; - - $(window).scroll(function () { - var topPos = $(window).scrollTop(); - if (topPos > enoughHeight) { - $(scrollTopBtn).addClass("showup"); - $("body").addClass("scrolled"); - } else { - $(scrollTopBtn).removeClass("showup"); - $("body").removeClass("scrolled"); - } - if (topPos > enoughHeightPlus) { - $("body").addClass("scrolledMore"); - } else { - $("body").removeClass("scrolledMore"); - } - }); - - $(scrollTopBtn).click(function () { - $('html, body').animate({ - scrollTop: 0 - }, 500); - return false; - }); - - var scrollToHashLink = function () { - var hash = window.location.hash; - - if (!hash || hash === "#") { - return; - } - - var $targetElement = $(decodeURIComponent(hash)); - - $targetElement = $targetElement.length ? $targetElement : $('[name=' + this.hash.slice(1) + ']'); - - if (!$targetElement.length) { - return; - } - - $('html,body').stop().animate({ - scrollTop: $targetElement.offset().top - }, 200); - - return; - }; - - $(document).ready(function () { - handleCustomScrolls(); - - var $myNav = $("#docs-sticky-index"); - Toc.init($myNav); - - $("body").scrollspy({ - target: $myNav - }); - - $("#docs-sticky-index a").on('click', function (event) { - if (this.hash !== "") { - event.preventDefault(); - var hash = this.hash; - $('html, body').animate({ - scrollTop: $(decodeURIComponent(hash)).offset().top - }, 500, function () { - window.location.hash = hash; - }); - } - }); - - $(".btn-toggle").on("click", function () { - $(".toggle-row").slideToggle(400); - $(this).toggleClass("less"); - }); - - $(".close-mmenu").on("click", function () { - $(".navbar-collapse").removeClass("show"); - }); - - $(".open-dmenu").on("click", function () { - $(".docs-tree-list").slideToggle(); - }); - - scrollToHashLink(); - }); - - $(window).resize(function () { - handleCustomScrolls(); - }); - }); - - function handleCustomScrolls() { - var wWidth = $(window).width(); - if (wWidth > 766) { - $("#sidebar-scroll").mCustomScrollbar({ - theme: "minimal", - alwaysShowScrollbar: 0, - }); - - $("#scroll-index").mCustomScrollbar({ - theme: "minimal-dark", - alwaysShowScrollbar: 0, - }); - } - } - - window.Toc.helpers.createNavList = function () { - return $(''); - }; - - window.Toc.helpers.createChildNavList = function ($parent) { - var $childList = this.createNavList(); - $parent.append($childList); - return $childList; - }; - - window.Toc.helpers.generateNavEl = function (anchor, text) { - var $a = $(''); - $a.attr('href', '#' + anchor); - $a.text(text); - var $li = $(''); - $li.append($a); - return $li; - }; - - function docsCriteria() { - var docsContentWidth = $(".docs-content").width() - 20; - $(".alert-criteria").width(docsContentWidth); - } - $(document).ready(function () { - docsCriteria(); - }); - $(window).resize(function () { - docsCriteria(); - }); -})(jQuery); \ No newline at end of file + $(function () { + $('li:not(.last-link) a.tree-toggle').click(function () { + $(this).parent().children('ul.tree').toggle(100); + $(this).closest('li').toggleClass('selected-tree'); + }); + + $('li:not(.last-link) span.plus-icon i.fa-chevron-right').click( + function () { + var $element = $(this).parent(); + + $element.parent().children('ul.tree').toggle(100); + $element.closest('li').toggleClass('selected-tree'); + } + ); + + var scrollTopBtn = $('.scroll-top-btn'); + var enoughHeight = $('.docs-sidebar-wrapper > .docs-top').height() + 60; + var enoughHeightPlus = 500; + + $(window).scroll(function () { + var topPos = $(window).scrollTop(); + if (topPos > enoughHeight) { + $(scrollTopBtn).addClass('showup'); + $('body').addClass('scrolled'); + } else { + $(scrollTopBtn).removeClass('showup'); + $('body').removeClass('scrolled'); + } + if (topPos > enoughHeightPlus) { + $('body').addClass('scrolledMore'); + } else { + $('body').removeClass('scrolledMore'); + } + }); + + $(scrollTopBtn).click(function () { + $('html, body').animate( + { + scrollTop: 0, + }, + 500 + ); + return false; + }); + + var scrollToHashLink = function () { + var hash = window.location.hash; + + if (!hash || hash === '#') { + return; + } + + var $targetElement = $(decodeURIComponent(hash)); + + $targetElement = $targetElement.length + ? $targetElement + : $('[name=' + this.hash.slice(1) + ']'); + + if (!$targetElement.length) { + return; + } + + $('html,body').stop().animate( + { + scrollTop: $targetElement.offset().top, + }, + 200 + ); + + return; + }; + + $(document).ready(function () { + handleCustomScrolls(); + + var $myNav = $('#docs-sticky-index'); + Toc.init($myNav); + + $('body').scrollspy({ + target: $myNav, + }); + + $('#docs-sticky-index a').on('click', function (event) { + if (this.hash !== '') { + event.preventDefault(); + var hash = this.hash; + $('html, body').animate( + { + scrollTop: $(decodeURIComponent(hash)).offset().top, + }, + 500, + function () { + window.location.hash = hash; + } + ); + } + }); + + $('.btn-toggle').on('click', function () { + $('.toggle-row').slideToggle(400); + $(this).toggleClass('less'); + }); + + $('.close-mmenu').on('click', function () { + $('.navbar-collapse').removeClass('show'); + }); + + $('.open-dmenu').on('click', function () { + $('.docs-tree-list').slideToggle(); + }); + + scrollToHashLink(); + }); + + $(window).resize(function () { + handleCustomScrolls(); + }); + }); + + function handleCustomScrolls() { + var wWidth = $(window).width(); + if (wWidth > 766) { + $('#sidebar-scroll').mCustomScrollbar({ + theme: 'minimal', + alwaysShowScrollbar: 0, + }); + + $('#scroll-index').mCustomScrollbar({ + theme: 'minimal-dark', + alwaysShowScrollbar: 0, + }); + } + } + + window.Toc.helpers.createNavList = function () { + return $(''); + }; + + window.Toc.helpers.createChildNavList = function ($parent) { + var $childList = this.createNavList(); + $parent.append($childList); + return $childList; + }; + + window.Toc.helpers.generateNavEl = function (anchor, text) { + var $a = $(''); + $a.attr('href', '#' + anchor); + $a.text(text); + var $li = $(''); + $li.append($a); + return $li; + }; + + function docsCriteria() { + var docsContentWidth = $('.docs-content').width() - 20; + $('.alert-criteria').width(docsContentWidth); + } + $(document).ready(function () { + docsCriteria(); + }); + $(window).resize(function () { + docsCriteria(); + }); +})(jQuery); From d8dd4f7468cd53c946ff85a38a0045a6170c68ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ahmet=20=C3=87otur?= Date: Thu, 9 Jul 2020 14:52:16 +0300 Subject: [PATCH 096/137] Feature Management - prettier settings added and js files reformatted --- modules/feature-management/.prettierrc | 4 +++ .../feature-management-modal.js | 25 ++++++++----------- 2 files changed, 15 insertions(+), 14 deletions(-) create mode 100644 modules/feature-management/.prettierrc diff --git a/modules/feature-management/.prettierrc b/modules/feature-management/.prettierrc new file mode 100644 index 0000000000..7d1b8aa721 --- /dev/null +++ b/modules/feature-management/.prettierrc @@ -0,0 +1,4 @@ +{ + "singleQuote": true, + "useTabs": true +} diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Pages/FeatureManagement/feature-management-modal.js b/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Pages/FeatureManagement/feature-management-modal.js index 74b66f467d..0df9d50775 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Pages/FeatureManagement/feature-management-modal.js +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Pages/FeatureManagement/feature-management-modal.js @@ -1,17 +1,14 @@ var abp = abp || {}; (function ($) { - abp.modals = abp.modals || {}; + abp.modals = abp.modals || {}; - abp.modals.FeatureManagement = function () { - - $('.FeatureValueCheckbox').change(function () { - if (this.checked) { - $(this).val("true"); - } - else { - $(this).val("false"); - } - }); - - }; -})(jQuery); \ No newline at end of file + abp.modals.FeatureManagement = function () { + $('.FeatureValueCheckbox').change(function () { + if (this.checked) { + $(this).val('true'); + } else { + $(this).val('false'); + } + }); + }; +})(jQuery); From 751ee5b77970eeab444d2e29c9007fc10d0dba5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ahmet=20=C3=87otur?= Date: Thu, 9 Jul 2020 14:52:38 +0300 Subject: [PATCH 097/137] Settings Management - prettier settings added and js files reformatted --- modules/setting-management/.prettierrc | 4 ++++ .../Pages/SettingManagement/Index.js | 10 +++++----- 2 files changed, 9 insertions(+), 5 deletions(-) create mode 100644 modules/setting-management/.prettierrc diff --git a/modules/setting-management/.prettierrc b/modules/setting-management/.prettierrc new file mode 100644 index 0000000000..7d1b8aa721 --- /dev/null +++ b/modules/setting-management/.prettierrc @@ -0,0 +1,4 @@ +{ + "singleQuote": true, + "useTabs": true +} diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Index.js b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Index.js index 346c2f2ce4..6a72d6872e 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Index.js +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Index.js @@ -1,7 +1,7 @@ (function ($) { - var l = abp.localization.getResource('AbpSettingManagement'); + var l = abp.localization.getResource('AbpSettingManagement'); - $(document).on("AbpSettingSaved", function () { - abp.notify.success(l("SuccessfullySaved")); - }); -})(jQuery); \ No newline at end of file + $(document).on('AbpSettingSaved', function () { + abp.notify.success(l('SuccessfullySaved')); + }); +})(jQuery); From b6f4aef7ef92e7f3e1735547f958bdbf9dd3ba45 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ahmet=20=C3=87otur?= Date: Thu, 9 Jul 2020 14:53:11 +0300 Subject: [PATCH 098/137] Tenant Management - prettier settings added and js files reformatted --- modules/tenant-management/.prettierrc | 4 + .../Tenants/ConnectionStringsModal.js | 34 ++-- .../Pages/TenantManagement/Tenants/Index.js | 185 ++++++++++-------- 3 files changed, 120 insertions(+), 103 deletions(-) create mode 100644 modules/tenant-management/.prettierrc diff --git a/modules/tenant-management/.prettierrc b/modules/tenant-management/.prettierrc new file mode 100644 index 0000000000..7d1b8aa721 --- /dev/null +++ b/modules/tenant-management/.prettierrc @@ -0,0 +1,4 @@ +{ + "singleQuote": true, + "useTabs": true +} 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 index b72d2b3505..0fdba0a660 100644 --- 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 @@ -1,20 +1,18 @@ (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')); + }); + }; - 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); \ No newline at end of file + 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 0dc1861790..c3f00dcd24 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 @@ -1,93 +1,108 @@ (function () { + var l = abp.localization.getResource('AbpTenantManagement'); + var _tenantAppService = volo.abp.tenantManagement.tenant; - var l = abp.localization.getResource('AbpTenantManagement'); - var _tenantAppService = volo.abp.tenantManagement.tenant; + var _editModal = new abp.ModalManager( + abp.appPath + 'TenantManagement/Tenants/EditModal' + ); + var _createModal = new abp.ModalManager( + abp.appPath + 'TenantManagement/Tenants/CreateModal' + ); + var _featuresModal = new abp.ModalManager( + abp.appPath + 'FeatureManagement/FeatureManagementModal' + ); + var _connectionStringsModal = new abp.ModalManager({ + viewUrl: abp.appPath + 'TenantManagement/Tenants/ConnectionStringsModal', + modalClass: 'TenantConnectionStringManagement', + }); - var _editModal = new abp.ModalManager(abp.appPath + 'TenantManagement/Tenants/EditModal'); - var _createModal = new abp.ModalManager(abp.appPath + 'TenantManagement/Tenants/CreateModal'); - var _featuresModal = new abp.ModalManager(abp.appPath + 'FeatureManagement/FeatureManagementModal'); - var _connectionStringsModal = new abp.ModalManager({ - viewUrl: abp.appPath + 'TenantManagement/Tenants/ConnectionStringsModal', - modalClass: 'TenantConnectionStringManagement' - }); + $(function () { + var _$wrapper = $('#TenantsWrapper'); - $(function () { + var _dataTable = _$wrapper.find('table').DataTable( + abp.libs.datatables.normalizeConfiguration({ + order: [[1, 'asc']], + processing: true, + paging: true, + scrollX: true, + serverSide: true, + ajax: abp.libs.datatables.createAjax(_tenantAppService.getList), + columnDefs: [ + { + rowAction: { + items: [ + { + text: l('Edit'), + visible: abp.auth.isGranted( + 'AbpTenantManagement.Tenants.Update' + ), + action: function (data) { + _editModal.open({ + id: data.record.id, + }); + }, + }, + { + 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( + 'AbpTenantManagement.Tenants.ManageFeatures' + ), + action: function (data) { + _featuresModal.open({ + providerName: 'T', + providerKey: data.record.id, + }); + }, + }, + { + text: l('Delete'), + visible: abp.auth.isGranted( + 'AbpTenantManagement.Tenants.Delete' + ), + confirmMessage: function (data) { + return l( + 'TenantDeletionConfirmationMessage', + data.record.name + ); + }, + action: function (data) { + _tenantAppService.delete(data.record.id).then(function () { + _dataTable.ajax.reload(); + }); + }, + }, + ], + }, + }, + { + data: 'name', + }, + ], + }) + ); - var _$wrapper = $('#TenantsWrapper'); + _createModal.onResult(function () { + _dataTable.ajax.reload(); + }); - var _dataTable = _$wrapper.find('table').DataTable(abp.libs.datatables.normalizeConfiguration({ - order: [[1, "asc"]], - processing: true, - paging: true, - scrollX: true, - serverSide: true, - ajax: abp.libs.datatables.createAjax(_tenantAppService.getList), - columnDefs: [ - { - rowAction: { - items: - [ - { - text: l('Edit'), - visible: abp.auth.isGranted('AbpTenantManagement.Tenants.Update'), - action: function (data) { - _editModal.open({ - id: data.record.id - }); - } - }, - { - 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('AbpTenantManagement.Tenants.ManageFeatures'), - action: function (data) { - _featuresModal.open({ - providerName: 'T', - providerKey: data.record.id - }); - } - }, - { - text: l('Delete'), - visible: abp.auth.isGranted('AbpTenantManagement.Tenants.Delete'), - confirmMessage: function (data) { return l('TenantDeletionConfirmationMessage', data.record.name)}, - action: function (data) { - _tenantAppService - .delete(data.record.id) - .then(function () { - _dataTable.ajax.reload(); - }); - } - } - ] - } - }, - { - data: "name" - } - ] - })); - - _createModal.onResult(function () { - _dataTable.ajax.reload(); - }); - - _editModal.onResult(function () { - _dataTable.ajax.reload(); - }); - - _$wrapper.find('button[name=CreateTenant]').click(function (e) { - e.preventDefault(); - _createModal.open(); - }); - }); + _editModal.onResult(function () { + _dataTable.ajax.reload(); + }); + _$wrapper.find('button[name=CreateTenant]').click(function (e) { + e.preventDefault(); + _createModal.open(); + }); + }); })(); From d570f5060b7ca3c84e69b21494395e60b10ff1df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ahmet=20=C3=87otur?= Date: Thu, 9 Jul 2020 14:53:36 +0300 Subject: [PATCH 099/137] Virtual File Explorer - prettier settings added and js files reformatted --- modules/virtual-file-explorer/.prettierrc | 4 ++++ .../Pages/VirtualFileExplorer/index.js | 10 ++++++---- 2 files changed, 10 insertions(+), 4 deletions(-) create mode 100644 modules/virtual-file-explorer/.prettierrc diff --git a/modules/virtual-file-explorer/.prettierrc b/modules/virtual-file-explorer/.prettierrc new file mode 100644 index 0000000000..7d1b8aa721 --- /dev/null +++ b/modules/virtual-file-explorer/.prettierrc @@ -0,0 +1,4 @@ +{ + "singleQuote": true, + "useTabs": true +} diff --git a/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/Pages/VirtualFileExplorer/index.js b/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/Pages/VirtualFileExplorer/index.js index a67939ca43..e535b810e8 100644 --- a/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/Pages/VirtualFileExplorer/index.js +++ b/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/Pages/VirtualFileExplorer/index.js @@ -1,7 +1,9 @@ -var _fileContentModal = new abp.ModalManager(abp.appPath + 'VirtualFileExplorer/FileContentModal'); +var _fileContentModal = new abp.ModalManager( + abp.appPath + 'VirtualFileExplorer/FileContentModal' +); function showContent(filePath) { - _fileContentModal.open({ - filePath: filePath - }); + _fileContentModal.open({ + filePath: filePath, + }); } From e9f8aa27614f6b83927520e02caa3db9c897a82e Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Thu, 9 Jul 2020 21:20:06 +0800 Subject: [PATCH 100/137] Use CompleteAsync instead of SaveChangesAsync --- .../Volo/Abp/AuditLogging/AuditingStore.cs | 4 ++-- .../Volo/Abp/Users/UserLookupService.cs | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo/Abp/AuditLogging/AuditingStore.cs b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo/Abp/AuditLogging/AuditingStore.cs index faaf01120e..f6c4343261 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo/Abp/AuditLogging/AuditingStore.cs +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo/Abp/AuditLogging/AuditingStore.cs @@ -57,8 +57,8 @@ namespace Volo.Abp.AuditLogging using (var uow = UnitOfWorkManager.Begin(true)) { await AuditLogRepository.InsertAsync(new AuditLog(GuidGenerator, auditInfo)); - await uow.SaveChangesAsync(); + await uow.CompleteAsync(); } } } -} +} \ No newline at end of file diff --git a/modules/users/src/Volo.Abp.Users.Domain/Volo/Abp/Users/UserLookupService.cs b/modules/users/src/Volo.Abp.Users.Domain/Volo/Abp/Users/UserLookupService.cs index 8311263f3e..ee679de7a6 100644 --- a/modules/users/src/Volo.Abp.Users.Domain/Volo/Abp/Users/UserLookupService.cs +++ b/modules/users/src/Volo.Abp.Users.Domain/Volo/Abp/Users/UserLookupService.cs @@ -167,14 +167,14 @@ namespace Volo.Abp.Users filter, cancellationToken ); - + return localUsers .Cast() .ToList(); } public async Task GetCountAsync( - string filter = null, + string filter = null, CancellationToken cancellationToken = default) { if (ExternalUserLookupServiceProvider != null) @@ -200,7 +200,7 @@ namespace Volo.Abp.Users using (var uow = _unitOfWorkManager.Begin(requiresNew: true)) { await func(); - await uow.SaveChangesAsync(); + await uow.CompleteAsync(); } } } From 0253eeaa72c9c61ef5f42324e6d1ca2c143d5328 Mon Sep 17 00:00:00 2001 From: maliming <6908465+maliming@users.noreply.github.com> Date: Thu, 9 Jul 2020 22:13:58 +0800 Subject: [PATCH 101/137] Convert special characters in LanguageCode. --- .../FullSearch/Elastic/ElasticDocumentFullSearch.cs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/FullSearch/Elastic/ElasticDocumentFullSearch.cs b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/FullSearch/Elastic/ElasticDocumentFullSearch.cs index cbe5905d3a..05a3f1c4c8 100644 --- a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/FullSearch/Elastic/ElasticDocumentFullSearch.cs +++ b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/FullSearch/Elastic/ElasticDocumentFullSearch.cs @@ -72,7 +72,7 @@ namespace Volo.Docs.Documents.FullSearch.Elastic Name = document.Name, FileName = document.FileName, Content = document.Content, - LanguageCode = document.LanguageCode, + LanguageCode = ConvertLanguageCode(document.LanguageCode), Version = document.Version }; @@ -178,7 +178,7 @@ namespace Volo.Docs.Documents.FullSearch.Elastic new TermQuery { Field = "languageCode", - Value = languageCode + Value = ConvertLanguageCode(languageCode) } } } @@ -232,5 +232,10 @@ namespace Volo.Docs.Documents.FullSearch.Elastic throw new BusinessException(DocsDomainErrorCodes.ElasticSearchNotEnabled); } } + + protected string ConvertLanguageCode(string languageCode) + { + return languageCode.Replace("-", "").ToLower(); + } } } From 54394b30f286fb92055e99d04197f479ed5d1054 Mon Sep 17 00:00:00 2001 From: maliming <6908465+maliming@users.noreply.github.com> Date: Thu, 9 Jul 2020 22:38:19 +0800 Subject: [PATCH 102/137] Filter Navigation and Parameters in the search results. --- .../Volo/Docs/Documents/DocumentAppService.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/docs/src/Volo.Docs.Application/Volo/Docs/Documents/DocumentAppService.cs b/modules/docs/src/Volo.Docs.Application/Volo/Docs/Documents/DocumentAppService.cs index 02bb535f50..6cacf9d3e3 100644 --- a/modules/docs/src/Volo.Docs.Application/Volo/Docs/Documents/DocumentAppService.cs +++ b/modules/docs/src/Volo.Docs.Application/Volo/Docs/Documents/DocumentAppService.cs @@ -176,7 +176,7 @@ namespace Volo.Docs.Documents Version = esDoc.Version, LanguageCode = esDoc.LanguageCode, Highlight = esDoc.Highlight - }).ToList(); + }).Where(x => x.FileName != project.NavigationDocumentName && x.FileName != project.ParametersDocumentName).ToList(); } public async Task FullSearchEnabledAsync() @@ -338,4 +338,4 @@ namespace Volo.Docs.Documents return TimeSpan.Parse(value); } } -} \ No newline at end of file +} From 9cacd42e35789130417db1a58aac8cee894b58bd Mon Sep 17 00:00:00 2001 From: Super Date: Fri, 10 Jul 2020 02:06:39 +0800 Subject: [PATCH 103/137] Update Local-Event-Bus.md --- docs/zh-Hans/Local-Event-Bus.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/zh-Hans/Local-Event-Bus.md b/docs/zh-Hans/Local-Event-Bus.md index b5c472734b..44e21d0384 100644 --- a/docs/zh-Hans/Local-Event-Bus.md +++ b/docs/zh-Hans/Local-Event-Bus.md @@ -203,9 +203,9 @@ namespace AbpDemo 事件类型; -* `EntityCreatedEventData` 当实体创建创建成功后发布. -* `EntityUpdatedEventData` 当实体创建更新成功后发布. -* `EntityDeletedEventData` 当实体创建删除成功后发布. +* `EntityCreatedEventData` 当实体创建成功后发布. +* `EntityUpdatedEventData` 当实体更新成功后发布. +* `EntityDeletedEventData` 当实体删除成功后发布. * `EntityChangedEventData` 当实体创建,更新,删除后发布. 如果你需要监听任何类型的更改,它是一种快捷方式 - 而不是订阅单个事件. ### 用于进行时态事件 @@ -224,4 +224,4 @@ namespace AbpDemo 在将更改保存到数据库时发布预构建事件; * 对于 EF Core, 他们在 `DbContext.SaveChanges` 发布. -* 对于 MongoDB, 在你调用仓储的 `InsertAsync`, `UpdateAsync` 或 `DeleteAsync` 方法发布(因为MongoDB没有更改追踪系统). \ No newline at end of file +* 对于 MongoDB, 在你调用仓储的 `InsertAsync`, `UpdateAsync` 或 `DeleteAsync` 方法发布(因为MongoDB没有更改追踪系统). From b38ef874681d5d1bdc672e6d27bc4d86dc60308b Mon Sep 17 00:00:00 2001 From: maliming <6908465+maliming@users.noreply.github.com> Date: Fri, 10 Jul 2020 09:02:58 +0800 Subject: [PATCH 104/137] Improve search list page and Pull function. --- .../Documents/DocumentAdminAppService.cs | 45 +++++++++++-------- .../Pages/Documents/Search.cshtml.cs | 25 +++++++++-- 2 files changed, 48 insertions(+), 22 deletions(-) diff --git a/modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/Documents/DocumentAdminAppService.cs b/modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/Documents/DocumentAdminAppService.cs index cb6443d268..ff6c7bc654 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/Documents/DocumentAdminAppService.cs +++ b/modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/Documents/DocumentAdminAppService.cs @@ -3,7 +3,9 @@ using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Authorization; +using Microsoft.Extensions.Logging; using Volo.Abp; +using Volo.Abp.Uow; using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Services; using Volo.Abp.Caching; @@ -96,28 +98,35 @@ namespace Volo.Docs.Admin.Documents var source = _documentStoreFactory.Create(project.DocumentStoreType); - var documents = new List(); foreach (var leaf in leafs) { - if (leaf.Path.StartsWith("http://", StringComparison.OrdinalIgnoreCase) || - leaf.Path.StartsWith("https://", StringComparison.OrdinalIgnoreCase)) + using (var uow = UnitOfWorkManager.Begin(requiresNew: true)) { - continue; + if (leaf.Path.StartsWith("http://", StringComparison.OrdinalIgnoreCase) || + leaf.Path.StartsWith("https://", StringComparison.OrdinalIgnoreCase) || + (leaf.Path.StartsWith("{{") && leaf.Path.EndsWith("}}"))) + { + continue; + } + + try + { + var sourceDocument = await source.GetDocumentAsync(project, leaf.Path, input.LanguageCode, input.Version); + + await _documentRepository.DeleteAsync(sourceDocument.ProjectId, sourceDocument.Name, + sourceDocument.LanguageCode, + sourceDocument.Version); + + await _documentRepository.InsertAsync(sourceDocument, true); + await UpdateDocumentUpdateInfoCache(sourceDocument); + + await uow.CompleteAsync(); + } + catch (Exception e) + { + Logger.LogException(e); + } } - - var sourceDocument = - await source.GetDocumentAsync(project, leaf.Path, input.LanguageCode, input.Version); - documents.Add(sourceDocument); - } - - foreach (var document in documents) - { - await _documentRepository.DeleteAsync(document.ProjectId, document.Name, - document.LanguageCode, - document.Version); - - await _documentRepository.InsertAsync(document, true); - await UpdateDocumentUpdateInfoCache(document); } } diff --git a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Search.cshtml.cs b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Search.cshtml.cs index 702141bc1e..1e4e797e73 100644 --- a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Search.cshtml.cs +++ b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Search.cshtml.cs @@ -1,7 +1,9 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Text.Encodings.Web; using System.Threading.Tasks; +using System.Web; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; using Volo.Docs.Documents; @@ -29,12 +31,15 @@ namespace Volo.Docs.Pages.Documents private readonly IProjectAppService _projectAppService; private readonly IDocumentAppService _documentAppService; + private readonly HtmlEncoder _encoder; - public SearchModel(IProjectAppService projectAppService, - IDocumentAppService documentAppService) + public SearchModel(IProjectAppService projectAppService, + IDocumentAppService documentAppService, + HtmlEncoder encoder) { _projectAppService = projectAppService; _documentAppService = documentAppService; + _encoder = encoder; } public List SearchOutputs { get; set; } = new List(); @@ -45,7 +50,7 @@ namespace Volo.Docs.Pages.Documents { return RedirectToPage("Index"); } - + KeyWord = keyword; Project = await _projectAppService.GetAsync(ProjectName); @@ -67,7 +72,19 @@ namespace Volo.Docs.Pages.Documents Version = Version }); + var highlightTag1 = Guid.NewGuid().ToString(); + var highlightTag2 = Guid.NewGuid().ToString(); + foreach (var searchOutput in SearchOutputs) + { + for (var i = 0; i < searchOutput.Highlight.Count; i++) + { + searchOutput.Highlight[i] = _encoder + .Encode(searchOutput.Highlight[i].Replace("", highlightTag1).Replace("", highlightTag2)) + .Replace(highlightTag1, "").Replace(highlightTag2, ""); + } + } + return Page(); } } -} \ No newline at end of file +} From 865be7ae78d55052228b4fb0e39955ac09235c84 Mon Sep 17 00:00:00 2001 From: maliming <6908465+maliming@users.noreply.github.com> Date: Fri, 10 Jul 2020 09:12:56 +0800 Subject: [PATCH 105/137] Update DocumentAdminAppService. --- .../Documents/DocumentAdminAppService.cs | 50 +++++++++---------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/Documents/DocumentAdminAppService.cs b/modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/Documents/DocumentAdminAppService.cs index ff6c7bc654..c6758127cf 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/Documents/DocumentAdminAppService.cs +++ b/modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/Documents/DocumentAdminAppService.cs @@ -98,35 +98,35 @@ namespace Volo.Docs.Admin.Documents var source = _documentStoreFactory.Create(project.DocumentStoreType); + var documents = new List(); foreach (var leaf in leafs) { - using (var uow = UnitOfWorkManager.Begin(requiresNew: true)) + if (leaf.Path.StartsWith("http://", StringComparison.OrdinalIgnoreCase) || + leaf.Path.StartsWith("https://", StringComparison.OrdinalIgnoreCase) || + (leaf.Path.StartsWith("{{") && leaf.Path.EndsWith("}}"))) { - if (leaf.Path.StartsWith("http://", StringComparison.OrdinalIgnoreCase) || - leaf.Path.StartsWith("https://", StringComparison.OrdinalIgnoreCase) || - (leaf.Path.StartsWith("{{") && leaf.Path.EndsWith("}}"))) - { - continue; - } - - try - { - var sourceDocument = await source.GetDocumentAsync(project, leaf.Path, input.LanguageCode, input.Version); - - await _documentRepository.DeleteAsync(sourceDocument.ProjectId, sourceDocument.Name, - sourceDocument.LanguageCode, - sourceDocument.Version); - - await _documentRepository.InsertAsync(sourceDocument, true); - await UpdateDocumentUpdateInfoCache(sourceDocument); - - await uow.CompleteAsync(); - } - catch (Exception e) - { - Logger.LogException(e); - } + continue; } + + try + { + var sourceDocument = await source.GetDocumentAsync(project, leaf.Path, input.LanguageCode, input.Version); + documents.Add(sourceDocument); + } + catch (Exception e) + { + Logger.LogException(e); + } + } + + foreach (var document in documents) + { + await _documentRepository.DeleteAsync(document.ProjectId, document.Name, + document.LanguageCode, + document.Version); + + await _documentRepository.InsertAsync(document, true); + await UpdateDocumentUpdateInfoCache(document); } } From fb9e14a6204bfd19eb5ef83a6f249178a81399f8 Mon Sep 17 00:00:00 2001 From: maliming <6908465+maliming@users.noreply.github.com> Date: Fri, 10 Jul 2020 10:58:04 +0800 Subject: [PATCH 106/137] Update TZConvertTimezoneProvider.cs --- .../Volo/Abp/Timing/TZConvertTimezoneProvider.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.Timing/Volo/Abp/Timing/TZConvertTimezoneProvider.cs b/framework/src/Volo.Abp.Timing/Volo/Abp/Timing/TZConvertTimezoneProvider.cs index 551b26e488..9713ea0f5c 100644 --- a/framework/src/Volo.Abp.Timing/Volo/Abp/Timing/TZConvertTimezoneProvider.cs +++ b/framework/src/Volo.Abp.Timing/Volo/Abp/Timing/TZConvertTimezoneProvider.cs @@ -10,7 +10,7 @@ namespace Volo.Abp.Timing { public virtual List GetWindowsTimezones() { - return TZConvert.KnownIanaTimeZoneNames.OrderBy(x => x).Select(x => new NameValue(x, x)).ToList(); + return TZConvert.KnownWindowsTimeZoneIds.OrderBy(x => x).Select(x => new NameValue(x, x)).ToList(); } public virtual List GetIanaTimezones() From 6717b3861a3561a016eeefffdc7b85e533e0259c Mon Sep 17 00:00:00 2001 From: maliming <6908465+maliming@users.noreply.github.com> Date: Fri, 10 Jul 2020 11:09:26 +0800 Subject: [PATCH 107/137] Update abp.js --- npm/packs/core/src/abp.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/npm/packs/core/src/abp.js b/npm/packs/core/src/abp.js index 41837d2368..f8cdf1ea2c 100644 --- a/npm/packs/core/src/abp.js +++ b/npm/packs/core/src/abp.js @@ -717,7 +717,7 @@ var abp = abp || {}; }; var toUtc = function (date) { - Date.UTC( + return Date.UTC( date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), From f568ff84c129d251252aa3ccf224930b0b07b3a4 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Fri, 10 Jul 2020 11:17:22 +0800 Subject: [PATCH 108/137] Added form-elements.md --- docs/zh-Hans/UI/AspNetCore/Tag-Helpers/Form-elements.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 docs/zh-Hans/UI/AspNetCore/Tag-Helpers/Form-elements.md diff --git a/docs/zh-Hans/UI/AspNetCore/Tag-Helpers/Form-elements.md b/docs/zh-Hans/UI/AspNetCore/Tag-Helpers/Form-elements.md new file mode 100644 index 0000000000..cb82a640d5 --- /dev/null +++ b/docs/zh-Hans/UI/AspNetCore/Tag-Helpers/Form-elements.md @@ -0,0 +1 @@ +TODO... \ No newline at end of file From 85f382da195c0bfe4bc53b9c7c57d83d4647bde6 Mon Sep 17 00:00:00 2001 From: maliming <6908465+maliming@users.noreply.github.com> Date: Fri, 10 Jul 2020 13:08:14 +0800 Subject: [PATCH 109/137] fix toLocal function problem. --- npm/packs/core/src/abp.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/npm/packs/core/src/abp.js b/npm/packs/core/src/abp.js index f8cdf1ea2c..20bd92147a 100644 --- a/npm/packs/core/src/abp.js +++ b/npm/packs/core/src/abp.js @@ -706,13 +706,13 @@ var abp = abp || {}; var toLocal = function (date) { return new Date( - date.getUTCFullYear(), - date.getUTCMonth(), - date.getUTCDate(), - date.getUTCHours(), - date.getUTCMinutes(), - date.getUTCSeconds(), - date.getUTCMilliseconds() + date.getFullYear(), + date.getMonth(), + date.getDate(), + date.getHours(), + date.getMinutes(), + date.getSeconds(), + date.getMilliseconds() ); }; From 0a906bac7e7818b60704aa8968f3e4e50bcd4674 Mon Sep 17 00:00:00 2001 From: Necati Meral Date: Fri, 10 Jul 2020 13:23:56 +0200 Subject: [PATCH 110/137] Fixed typo --- framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/de.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/de.json b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/de.json index c5de3f200c..9727a11823 100644 --- a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/de.json +++ b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/de.json @@ -56,7 +56,7 @@ "401Message": "Unauthorisiert", "403Message": "Verboten", "404Message": "Seite nicht gefunden", - "500Message": "Internet Server Fehler", + "500Message": "Interner Server Fehler", "GoHomePage": "Zur Startseite", "GoBack": "Zurück" } From 06b68bd03380af79aa123fe8fe5c5e33b30ea573 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 10 Jul 2020 15:09:19 +0300 Subject: [PATCH 111/137] Move AbpUiResource inheritance to the MyProjectNameHttpApiModule --- .../MyProjectNameHttpApiModule.cs | 22 +++++++++++++++++-- .../MyProjectNameWebModule.cs | 6 ----- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/MyProjectNameHttpApiModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/MyProjectNameHttpApiModule.cs index bc3426c5f1..0a4de2bf50 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/MyProjectNameHttpApiModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi/MyProjectNameHttpApiModule.cs @@ -1,6 +1,9 @@ -using Volo.Abp.Account; +using Localization.Resources.AbpUi; +using MyCompanyName.MyProjectName.Localization; +using Volo.Abp.Account; using Volo.Abp.FeatureManagement; using Volo.Abp.Identity; +using Volo.Abp.Localization; using Volo.Abp.Modularity; using Volo.Abp.PermissionManagement.HttpApi; using Volo.Abp.TenantManagement; @@ -17,6 +20,21 @@ namespace MyCompanyName.MyProjectName )] public class MyProjectNameHttpApiModule : AbpModule { - + public override void ConfigureServices(ServiceConfigurationContext context) + { + ConfigureLocalization(); + } + + private void ConfigureLocalization() + { + Configure(options => + { + options.Resources + .Get() + .AddBaseTypes( + typeof(AbpUiResource) + ); + }); + } } } diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs index 454893da55..1bafd38d5a 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs @@ -143,12 +143,6 @@ namespace MyCompanyName.MyProjectName.Web { Configure(options => { - options.Resources - .Get() - .AddBaseTypes( - typeof(AbpUiResource) - ); - options.Languages.Add(new LanguageInfo("ar", "ar", "العربية")); options.Languages.Add(new LanguageInfo("cs", "cs", "Čeština")); options.Languages.Add(new LanguageInfo("en", "en", "English")); From d165dcc2ad794494b503b4ceb2ef7981ae2a5655 Mon Sep 17 00:00:00 2001 From: Hamza Date: Fri, 10 Jul 2020 21:02:48 +0500 Subject: [PATCH 112/137] .browserslistrc typo --- docs/en/UI/Angular/Migration-Guide-v3.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/UI/Angular/Migration-Guide-v3.md b/docs/en/UI/Angular/Migration-Guide-v3.md index 6c56536065..0039aa33a6 100644 --- a/docs/en/UI/Angular/Migration-Guide-v3.md +++ b/docs/en/UI/Angular/Migration-Guide-v3.md @@ -18,7 +18,7 @@ This will make the following modifications: - Update your package.json and install new packages - Revise tsconfig.json files to create a "Solution Style" configuration -- Rename `browserlist` as `.browserlistrc` +- Rename `browserlist` as `.browserslistrc` On the other hand, it would be better if you check which packages to update first with `yarn ng update` command alone. Angular will give you a list of packages to update. From 2fe03041f6062b8b8efed7e278a74e6c8402ae61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Sat, 11 Jul 2020 01:44:47 +0300 Subject: [PATCH 113/137] Added empty CmsKit module --- modules/cms-kit/.gitattributes | 1 + modules/cms-kit/.gitignore | 258 + modules/cms-kit/Volo.CmsKit.sln | 167 + modules/cms-kit/Volo.CmsKit.sln.DotSettings | 23 + modules/cms-kit/angular/.editorconfig | 16 + modules/cms-kit/angular/.gitignore | 48 + modules/cms-kit/angular/README.md | 27 + modules/cms-kit/angular/angular.json | 202 + modules/cms-kit/angular/package.json | 58 + .../angular/projects/cms-kit/README.md | 24 + .../projects/cms-kit/config/ng-package.json | 7 + .../config/src/cms-kit-config.module.ts | 12 + .../cms-kit/config/src/enums/index.ts | 1 + .../cms-kit/config/src/enums/route-names.ts | 3 + .../cms-kit/config/src/providers/index.ts | 1 + .../config/src/providers/route.provider.ts | 27 + .../projects/cms-kit/config/src/public-api.ts | 3 + .../angular/projects/cms-kit/karma.conf.js | 32 + .../angular/projects/cms-kit/ng-package.json | 7 + .../angular/projects/cms-kit/ngcc.config.js | 7 + .../angular/projects/cms-kit/package.json | 13 + .../cms-kit/src/lib/cms-kit-routing.module.ts | 24 + .../cms-kit/src/lib/cms-kit.component.spec.ts | 25 + .../cms-kit/src/lib/cms-kit.module.ts | 23 + .../cms-kit/src/lib/cms-kit.service.spec.ts | 16 + .../src/lib/components/cms-kit.component.ts | 15 + .../src/lib/services/cms-kit.service.ts | 18 + .../projects/cms-kit/src/public-api.ts | 7 + .../angular/projects/cms-kit/src/test.ts | 26 + .../projects/cms-kit/tsconfig.lib.json | 17 + .../projects/cms-kit/tsconfig.lib.prod.json | 6 + .../projects/cms-kit/tsconfig.spec.json | 17 + .../angular/projects/cms-kit/tslint.json | 17 + .../angular/projects/dev-app/.browserslistrc | 12 + .../projects/dev-app/e2e/protractor.conf.js | 32 + .../projects/dev-app/e2e/src/app.e2e-spec.ts | 23 + .../projects/dev-app/e2e/src/app.po.ts | 11 + .../projects/dev-app/e2e/tsconfig.json | 13 + .../angular/projects/dev-app/favicon.ico | Bin 0 -> 102968 bytes .../angular/projects/dev-app/karma.conf.js | 32 + .../dev-app/src/app/app-routing.module.ts | 49 + .../projects/dev-app/src/app/app.component.ts | 10 + .../projects/dev-app/src/app/app.module.ts | 41 + .../src/app/home/home-routing.module.ts | 16 + .../dev-app/src/app/home/home.component.html | 0 .../dev-app/src/app/home/home.component.ts | 7 + .../dev-app/src/app/home/home.module.ts | 10 + .../dev-app/src/app/route.provider.ts | 25 + .../dev-app/src/app/shared/shared.module.ts | 26 + .../projects/dev-app/src/assets/.gitkeep | 0 .../src/environments/environment.prod.ts | 24 + .../dev-app/src/environments/environment.ts | 24 + .../angular/projects/dev-app/src/index.html | 13 + .../angular/projects/dev-app/src/main.ts | 12 + .../angular/projects/dev-app/src/polyfills.ts | 66 + .../angular/projects/dev-app/src/styles.scss | 1 + .../angular/projects/dev-app/src/test.ts | 25 + .../projects/dev-app/tsconfig.app.json | 14 + .../projects/dev-app/tsconfig.prod.json | 9 + .../projects/dev-app/tsconfig.spec.json | 18 + .../angular/projects/dev-app/tslint.json | 17 + modules/cms-kit/angular/tsconfig.base.json | 13 + modules/cms-kit/angular/tsconfig.json | 23 + modules/cms-kit/angular/tsconfig.prod.json | 20 + modules/cms-kit/angular/tslint.json | 136 + modules/cms-kit/common.props | 13 + modules/cms-kit/database/Dockerfile | 20 + modules/cms-kit/database/entrypoint.sh | 12 + modules/cms-kit/docker-compose.migrations.yml | 13 + modules/cms-kit/docker-compose.override.yml | 29 + modules/cms-kit/docker-compose.yml | 25 + .../MultiTenancy/MultiTenancyConsts.cs | 10 + .../Volo.CmsKit.Host.Shared.csproj | 10 + .../CmsKitHttpApiHostModule.cs | 185 + .../Controllers/HomeController.cs | 13 + .../host/Volo.CmsKit.HttpApi.Host/Dockerfile | 18 + .../CmsKitHttpApiHostMigrationsDbContext.cs | 21 + ...itHttpApiHostMigrationsDbContextFactory.cs | 29 + .../host/Volo.CmsKit.HttpApi.Host/Program.cs | 51 + .../Properties/launchSettings.json | 27 + .../host/Volo.CmsKit.HttpApi.Host/Startup.cs | 21 + .../Volo.CmsKit.HttpApi.Host.csproj | 43 + .../Volo.CmsKit.HttpApi.Host/appsettings.json | 15 + .../host/Volo.CmsKit.HttpApi.Host/yarn.lock | 4 + .../CmsKitIdentityServerModule.cs | 222 + .../Volo.CmsKit.IdentityServer/Dockerfile | 18 + .../IdentityServerHostMigrationsDbContext.cs | 32 + ...ityServerHostMigrationsDbContextFactory.cs | 29 + .../IdentityServerDataSeedContributor.cs | 218 + .../20200624023331_Initial.Designer.cs | 1861 ++ .../Migrations/20200624023331_Initial.cs | 1135 ++ ...verHostMigrationsDbContextModelSnapshot.cs | 1859 ++ .../Pages/Index.cshtml | 34 + .../Pages/Index.cshtml.cs | 11 + .../Pages/_ViewImports.cshtml | 4 + .../Volo.CmsKit.IdentityServer/Program.cs | 51 + .../Properties/launchSettings.json | 27 + .../Volo.CmsKit.IdentityServer/Startup.cs | 21 + .../Volo.CmsKit.IdentityServer.csproj | 62 + .../abp.resourcemapping.js | 11 + .../appsettings.json | 28 + .../Volo.CmsKit.IdentityServer/gulpfile.js | 9 + .../Volo.CmsKit.IdentityServer/package.json | 8 + .../Volo.CmsKit.IdentityServer/tempkey.rsa | 1 + .../@fortawesome/fontawesome-free/css/all.css | 4586 +++++ .../fontawesome-free/css/v4-shims.css | 2172 +++ .../webfonts/fa-brands-400.eot | Bin 0 -> 134878 bytes .../webfonts/fa-brands-400.svg | 3633 ++++ .../webfonts/fa-brands-400.ttf | Bin 0 -> 134572 bytes .../webfonts/fa-brands-400.woff | Bin 0 -> 90872 bytes .../webfonts/fa-brands-400.woff2 | Bin 0 -> 77444 bytes .../webfonts/fa-regular-400.eot | Bin 0 -> 34390 bytes .../webfonts/fa-regular-400.svg | 803 + .../webfonts/fa-regular-400.ttf | Bin 0 -> 34092 bytes .../webfonts/fa-regular-400.woff | Bin 0 -> 16800 bytes .../webfonts/fa-regular-400.woff2 | Bin 0 -> 13596 bytes .../webfonts/fa-solid-900.eot | Bin 0 -> 204866 bytes .../webfonts/fa-solid-900.svg | 5000 +++++ .../webfonts/fa-solid-900.ttf | Bin 0 -> 204580 bytes .../webfonts/fa-solid-900.woff | Bin 0 -> 104252 bytes .../webfonts/fa-solid-900.woff2 | Bin 0 -> 80328 bytes .../wwwroot/libs/abp/core/abp.css | 56 + .../wwwroot/libs/abp/core/abp.js | 754 + .../wwwroot/libs/abp/jquery/abp.jquery.js | 393 + .../wwwroot/libs/abp/utils/abp-utils.umd.js | 600 + .../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 | 10278 +++++++++++ .../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 | 7033 +++++++ .../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 | 212 + .../js/dataTables.bootstrap4.js | 184 + .../datatables.net/js/jquery.dataTables.js | 15354 ++++++++++++++++ .../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 | 1650 ++ .../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 | 63 + .../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 | 35 + .../localization/messages_sr.min.js | 4 + .../localization/messages_sr_lat.js | 35 + .../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 | 36 + .../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 | 36 + .../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 | 10598 +++++++++++ .../wwwroot/libs/lodash/lodash.min.js | 137 + .../wwwroot/libs/luxon/luxon.js | 8258 +++++++++ .../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 + .../host/Volo.CmsKit.IdentityServer/yarn.lock | 2763 +++ .../CmsKitBrandingProvider.cs | 11 + .../CmsKitWebAutoMapperProfile.cs | 12 + .../CmsKitWebHostMenuContributor.cs | 60 + .../CmsKitWebHostModule.cs | 246 + .../Controllers/AccountController.cs | 9 + .../Pages/CmsKitPageModel.cs | 13 + .../Volo.CmsKit.Web.Host/Pages/Index.cshtml | 26 + .../Pages/Index.cshtml.cs | 18 + .../Pages/_ViewImports.cshtml | 4 + .../host/Volo.CmsKit.Web.Host/Program.cs | 51 + .../Properties/launchSettings.json | 27 + .../host/Volo.CmsKit.Web.Host/Startup.cs | 19 + .../Views/_ViewImports.cshtml | 4 + .../Volo.CmsKit.Web.Host.csproj | 56 + .../abp.resourcemapping.js | 8 + .../appsettings.Development.json | 3 + .../Volo.CmsKit.Web.Host/appsettings.json | 21 + .../host/Volo.CmsKit.Web.Host/gulpfile.js | 9 + .../host/Volo.CmsKit.Web.Host/package.json | 8 + .../@fortawesome/fontawesome-free/css/all.css | 4586 +++++ .../fontawesome-free/css/v4-shims.css | 2172 +++ .../webfonts/fa-brands-400.eot | Bin 0 -> 134878 bytes .../webfonts/fa-brands-400.svg | 3633 ++++ .../webfonts/fa-brands-400.ttf | Bin 0 -> 134572 bytes .../webfonts/fa-brands-400.woff | Bin 0 -> 90872 bytes .../webfonts/fa-brands-400.woff2 | Bin 0 -> 77444 bytes .../webfonts/fa-regular-400.eot | Bin 0 -> 34390 bytes .../webfonts/fa-regular-400.svg | 803 + .../webfonts/fa-regular-400.ttf | Bin 0 -> 34092 bytes .../webfonts/fa-regular-400.woff | Bin 0 -> 16800 bytes .../webfonts/fa-regular-400.woff2 | Bin 0 -> 13596 bytes .../webfonts/fa-solid-900.eot | Bin 0 -> 204866 bytes .../webfonts/fa-solid-900.svg | 5000 +++++ .../webfonts/fa-solid-900.ttf | Bin 0 -> 204580 bytes .../webfonts/fa-solid-900.woff | Bin 0 -> 104252 bytes .../webfonts/fa-solid-900.woff2 | Bin 0 -> 80328 bytes .../wwwroot/libs/abp/core/abp.css | 56 + .../wwwroot/libs/abp/core/abp.js | 754 + .../wwwroot/libs/abp/jquery/abp.jquery.js | 393 + .../wwwroot/libs/abp/utils/abp-utils.umd.js | 600 + .../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 | 10278 +++++++++++ .../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 | 7033 +++++++ .../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 | 212 + .../js/dataTables.bootstrap4.js | 184 + .../datatables.net/js/jquery.dataTables.js | 15354 ++++++++++++++++ .../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 | 1650 ++ .../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 | 63 + .../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 | 35 + .../localization/messages_sr.min.js | 4 + .../localization/messages_sr_lat.js | 35 + .../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 | 36 + .../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 | 36 + .../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 | 10598 +++++++++++ .../wwwroot/libs/lodash/lodash.min.js | 137 + .../wwwroot/libs/luxon/luxon.js | 8258 +++++++++ .../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 + .../host/Volo.CmsKit.Web.Host/yarn.lock | 2763 +++ .../CmsKitWebUnifiedModule.cs | 161 + .../EntityFrameworkCore/UnifiedDbContext.cs | 31 + .../UnifiedDbContextFactory.cs | 29 + .../20200624023340_Initial.Designer.cs | 1043 ++ .../Migrations/20200624023340_Initial.cs | 629 + .../UnifiedDbContextModelSnapshot.cs | 1041 ++ .../Pages/Index.cshtml | 7 + .../Pages/Index.cshtml.cs | 11 + .../Pages/_ViewImports.cshtml | 4 + .../host/Volo.CmsKit.Web.Unified/Program.cs | 47 + .../Properties/launchSettings.json | 27 + .../host/Volo.CmsKit.Web.Unified/Startup.cs | 20 + .../Volo.CmsKit.Web.Unified.csproj | 60 + .../abp.resourcemapping.js | 12 + .../Volo.CmsKit.Web.Unified/appsettings.json | 5 + .../host/Volo.CmsKit.Web.Unified/gulpfile.js | 9 + .../host/Volo.CmsKit.Web.Unified/package.json | 8 + .../@fortawesome/fontawesome-free/css/all.css | 4586 +++++ .../fontawesome-free/css/v4-shims.css | 2172 +++ .../webfonts/fa-brands-400.eot | Bin 0 -> 134878 bytes .../webfonts/fa-brands-400.svg | 3633 ++++ .../webfonts/fa-brands-400.ttf | Bin 0 -> 134572 bytes .../webfonts/fa-brands-400.woff | Bin 0 -> 90872 bytes .../webfonts/fa-brands-400.woff2 | Bin 0 -> 77444 bytes .../webfonts/fa-regular-400.eot | Bin 0 -> 34390 bytes .../webfonts/fa-regular-400.svg | 803 + .../webfonts/fa-regular-400.ttf | Bin 0 -> 34092 bytes .../webfonts/fa-regular-400.woff | Bin 0 -> 16800 bytes .../webfonts/fa-regular-400.woff2 | Bin 0 -> 13596 bytes .../webfonts/fa-solid-900.eot | Bin 0 -> 204866 bytes .../webfonts/fa-solid-900.svg | 5000 +++++ .../webfonts/fa-solid-900.ttf | Bin 0 -> 204580 bytes .../webfonts/fa-solid-900.woff | Bin 0 -> 104252 bytes .../webfonts/fa-solid-900.woff2 | Bin 0 -> 80328 bytes .../wwwroot/libs/abp/core/abp.css | 56 + .../wwwroot/libs/abp/core/abp.js | 754 + .../wwwroot/libs/abp/jquery/abp.jquery.js | 393 + .../wwwroot/libs/abp/utils/abp-utils.umd.js | 600 + .../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 | 10278 +++++++++++ .../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 | 7033 +++++++ .../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 | 212 + .../js/dataTables.bootstrap4.js | 184 + .../datatables.net/js/jquery.dataTables.js | 15354 ++++++++++++++++ .../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 | 1601 ++ .../localization/messages_ar.js | 35 + .../localization/messages_az.js | 35 + .../localization/messages_bg.js | 35 + .../localization/messages_bn_BD.js | 35 + .../localization/messages_ca.js | 35 + .../localization/messages_cs.js | 35 + .../localization/messages_da.js | 32 + .../localization/messages_de.js | 32 + .../localization/messages_el.js | 35 + .../localization/messages_es.js | 38 + .../localization/messages_es_AR.js | 39 + .../localization/messages_es_PE.js | 39 + .../localization/messages_et.js | 33 + .../localization/messages_eu.js | 35 + .../localization/messages_fa.js | 38 + .../localization/messages_fi.js | 33 + .../localization/messages_fr.js | 63 + .../localization/messages_ge.js | 35 + .../localization/messages_gl.js | 40 + .../localization/messages_he.js | 35 + .../localization/messages_hr.js | 35 + .../localization/messages_hu.js | 35 + .../localization/messages_hy_AM.js | 35 + .../localization/messages_id.js | 34 + .../localization/messages_is.js | 33 + .../localization/messages_it.js | 39 + .../localization/messages_ja.js | 36 + .../localization/messages_ka.js | 35 + .../localization/messages_kk.js | 35 + .../localization/messages_ko.js | 35 + .../localization/messages_lt.js | 35 + .../localization/messages_lv.js | 35 + .../localization/messages_mk.js | 35 + .../localization/messages_my.js | 35 + .../localization/messages_nl.js | 46 + .../localization/messages_no.js | 36 + .../localization/messages_pl.js | 37 + .../localization/messages_pt_BR.js | 88 + .../localization/messages_pt_PT.js | 39 + .../localization/messages_ro.js | 35 + .../localization/messages_ru.js | 35 + .../localization/messages_sd.js | 35 + .../localization/messages_si.js | 35 + .../localization/messages_sk.js | 32 + .../localization/messages_sl.js | 35 + .../localization/messages_sr.js | 35 + .../localization/messages_sr_lat.js | 35 + .../localization/messages_sv.js | 33 + .../localization/messages_th.js | 35 + .../localization/messages_tj.js | 35 + .../localization/messages_tr.js | 36 + .../localization/messages_uk.js | 35 + .../localization/messages_ur.js | 35 + .../localization/messages_vi.js | 35 + .../localization/messages_zh.js | 35 + .../localization/messages_zh_TW.js | 36 + .../localization/methods_de.js | 24 + .../localization/methods_es_CL.js | 24 + .../localization/methods_fi.js | 24 + .../localization/methods_nl.js | 24 + .../localization/methods_pt.js | 21 + .../wwwroot/libs/jquery/jquery.js | 10364 +++++++++++ .../wwwroot/libs/lodash/lodash.min.js | 137 + .../wwwroot/libs/luxon/luxon.js | 8258 +++++++++ .../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 + .../host/Volo.CmsKit.Web.Unified/yarn.lock | 2640 +++ .../CmsKitApplicationContractsModule.cs | 16 + .../CmsKitPermissionDefinitionProvider.cs | 19 + .../Permissions/CmsKitPermissions.cs | 14 + .../Samples/ISampleAppService.cs | 12 + .../Samples/SampleDto.cs | 7 + .../Volo.CmsKit.Application.Contracts.csproj | 16 + .../CmsKitAppService.cs | 14 + .../CmsKitApplicationAutoMapperProfile.cs | 14 + .../CmsKitApplicationModule.cs | 25 + .../Samples/SampleAppService.cs | 29 + .../Volo.CmsKit.Application.csproj | 17 + .../CmsKitDomainSharedModule.cs | 37 + .../CmsKitErrorCodes.cs | 7 + .../Localization/CmsKit/cs.json | 6 + .../Localization/CmsKit/en.json | 7 + .../Localization/CmsKit/pl-PL.json | 6 + .../Localization/CmsKit/pt-BR.json | 6 + .../Localization/CmsKit/sl.json | 6 + .../Localization/CmsKit/tr.json | 7 + .../Localization/CmsKit/vi.json | 6 + .../Localization/CmsKit/zh-Hans.json | 6 + .../Localization/CmsKit/zh-Hant.json | 6 + .../Localization/CmsKitResource.cs | 10 + .../Volo.CmsKit.Domain.Shared.csproj | 24 + .../Volo.CmsKit.Domain/CmsKitDbProperties.cs | 11 + .../Volo.CmsKit.Domain/CmsKitDomainModule.cs | 12 + .../CmsKitSettingDefinitionProvider.cs | 14 + .../Settings/CmsKitSettings.cs | 11 + .../Volo.CmsKit.Domain.csproj | 15 + .../EntityFrameworkCore/CmsKitDbContext.cs | 27 + .../CmsKitDbContextModelCreatingExtensions.cs | 43 + .../CmsKitEntityFrameworkCoreModule.cs | 23 + .../CmsKitModelBuilderConfigurationOptions.cs | 18 + .../EntityFrameworkCore/ICmsKitDbContext.cs | 13 + .../Volo.CmsKit.EntityFrameworkCore.csproj | 15 + .../CmsKitHttpApiClientModule.cs | 22 + .../Volo.CmsKit.HttpApi.Client.csproj | 15 + .../Volo.CmsKit.HttpApi/CmsKitController.cs | 13 + .../CmsKitHttpApiModule.cs | 33 + .../Samples/SampleController.cs | 33 + .../Volo.CmsKit.HttpApi.csproj | 15 + .../MongoDB/CmsKitMongoDbContext.cs | 20 + .../MongoDB/CmsKitMongoDbContextExtensions.cs | 22 + .../MongoDB/CmsKitMongoDbModule.cs | 23 + ...itMongoModelBuilderConfigurationOptions.cs | 14 + .../MongoDB/ICmsKitMongoDbContext.cs | 13 + .../Volo.CmsKit.MongoDB.csproj | 15 + .../CmsKitWebAutoMapperProfile.cs | 14 + .../src/Volo.CmsKit.Web/CmsKitWebModule.cs | 59 + .../Menus/CmsKitMenuContributor.cs | 23 + .../src/Volo.CmsKit.Web/Menus/CmsKitMenus.cs | 11 + .../Volo.CmsKit.Web/Pages/CmsKit/Index.cshtml | 9 + .../Pages/CmsKit/Index.cshtml.cs | 9 + .../Pages/CmsKit/_ViewImports.cshtml | 4 + .../Volo.CmsKit.Web/Pages/CmsKitPageModel.cs | 16 + .../Volo.CmsKit.Web/Volo.CmsKit.Web.csproj | 40 + .../CmsKitApplicationTestBase.cs | 10 + .../CmsKitApplicationTestModule.cs | 13 + .../Samples/SampleAppService_Tests.cs | 30 + .../Volo.CmsKit.Application.Tests.csproj | 16 + .../CmsKitDomainTestBase.cs | 10 + .../CmsKitDomainTestModule.cs | 17 + .../Samples/SampleManager_Tests.cs | 21 + .../Volo.CmsKit.Domain.Tests.csproj | 15 + .../CmsKitEntityFrameworkCoreTestBase.cs | 10 + .../CmsKitEntityFrameworkCoreTestModule.cs | 43 + .../Samples/SampleRepository_Tests.cs | 12 + ...lo.CmsKit.EntityFrameworkCore.Tests.csproj | 18 + .../ClientDemoService.cs | 156 + .../CmsKitConsoleApiClientModule.cs | 14 + .../ConsoleTestAppHostedService.cs | 26 + .../Program.cs | 21 + ...msKit.HttpApi.Client.ConsoleTestApp.csproj | 26 + .../appsettings.json | 21 + .../MongoDB/CmsKitMongoDbTestBase.cs | 10 + .../MongoDB/CmsKitMongoDbTestModule.cs | 25 + .../MongoDB/MongoDbFixture.cs | 22 + .../MongoDB/MongoTestCollection.cs | 10 + .../MongoDB/Samples/SampleRepository_Tests.cs | 14 + .../Volo.CmsKit.MongoDB.Tests.csproj | 17 + .../CmsKitDataSeedContributor.cs | 27 + .../Volo.CmsKit.TestBase/CmsKitTestBase.cs | 60 + .../CmsKitTestBaseModule.cs | 42 + .../Samples/SampleRepository_Tests.cs | 27 + .../Security/FakeCurrentPrincipalAccessor.cs | 43 + .../Volo.CmsKit.TestBase.csproj | 23 + 1378 files changed, 300152 insertions(+) create mode 100644 modules/cms-kit/.gitattributes create mode 100644 modules/cms-kit/.gitignore create mode 100644 modules/cms-kit/Volo.CmsKit.sln create mode 100644 modules/cms-kit/Volo.CmsKit.sln.DotSettings create mode 100644 modules/cms-kit/angular/.editorconfig create mode 100644 modules/cms-kit/angular/.gitignore create mode 100644 modules/cms-kit/angular/README.md create mode 100644 modules/cms-kit/angular/angular.json create mode 100644 modules/cms-kit/angular/package.json create mode 100644 modules/cms-kit/angular/projects/cms-kit/README.md create mode 100644 modules/cms-kit/angular/projects/cms-kit/config/ng-package.json create mode 100644 modules/cms-kit/angular/projects/cms-kit/config/src/cms-kit-config.module.ts create mode 100644 modules/cms-kit/angular/projects/cms-kit/config/src/enums/index.ts create mode 100644 modules/cms-kit/angular/projects/cms-kit/config/src/enums/route-names.ts create mode 100644 modules/cms-kit/angular/projects/cms-kit/config/src/providers/index.ts create mode 100644 modules/cms-kit/angular/projects/cms-kit/config/src/providers/route.provider.ts create mode 100644 modules/cms-kit/angular/projects/cms-kit/config/src/public-api.ts create mode 100644 modules/cms-kit/angular/projects/cms-kit/karma.conf.js create mode 100644 modules/cms-kit/angular/projects/cms-kit/ng-package.json create mode 100644 modules/cms-kit/angular/projects/cms-kit/ngcc.config.js create mode 100644 modules/cms-kit/angular/projects/cms-kit/package.json create mode 100644 modules/cms-kit/angular/projects/cms-kit/src/lib/cms-kit-routing.module.ts create mode 100644 modules/cms-kit/angular/projects/cms-kit/src/lib/cms-kit.component.spec.ts create mode 100644 modules/cms-kit/angular/projects/cms-kit/src/lib/cms-kit.module.ts create mode 100644 modules/cms-kit/angular/projects/cms-kit/src/lib/cms-kit.service.spec.ts create mode 100644 modules/cms-kit/angular/projects/cms-kit/src/lib/components/cms-kit.component.ts create mode 100644 modules/cms-kit/angular/projects/cms-kit/src/lib/services/cms-kit.service.ts create mode 100644 modules/cms-kit/angular/projects/cms-kit/src/public-api.ts create mode 100644 modules/cms-kit/angular/projects/cms-kit/src/test.ts create mode 100644 modules/cms-kit/angular/projects/cms-kit/tsconfig.lib.json create mode 100644 modules/cms-kit/angular/projects/cms-kit/tsconfig.lib.prod.json create mode 100644 modules/cms-kit/angular/projects/cms-kit/tsconfig.spec.json create mode 100644 modules/cms-kit/angular/projects/cms-kit/tslint.json create mode 100644 modules/cms-kit/angular/projects/dev-app/.browserslistrc create mode 100644 modules/cms-kit/angular/projects/dev-app/e2e/protractor.conf.js create mode 100644 modules/cms-kit/angular/projects/dev-app/e2e/src/app.e2e-spec.ts create mode 100644 modules/cms-kit/angular/projects/dev-app/e2e/src/app.po.ts create mode 100644 modules/cms-kit/angular/projects/dev-app/e2e/tsconfig.json create mode 100644 modules/cms-kit/angular/projects/dev-app/favicon.ico create mode 100644 modules/cms-kit/angular/projects/dev-app/karma.conf.js create mode 100644 modules/cms-kit/angular/projects/dev-app/src/app/app-routing.module.ts create mode 100644 modules/cms-kit/angular/projects/dev-app/src/app/app.component.ts create mode 100644 modules/cms-kit/angular/projects/dev-app/src/app/app.module.ts create mode 100644 modules/cms-kit/angular/projects/dev-app/src/app/home/home-routing.module.ts create mode 100644 modules/cms-kit/angular/projects/dev-app/src/app/home/home.component.html create mode 100644 modules/cms-kit/angular/projects/dev-app/src/app/home/home.component.ts create mode 100644 modules/cms-kit/angular/projects/dev-app/src/app/home/home.module.ts create mode 100644 modules/cms-kit/angular/projects/dev-app/src/app/route.provider.ts create mode 100644 modules/cms-kit/angular/projects/dev-app/src/app/shared/shared.module.ts create mode 100644 modules/cms-kit/angular/projects/dev-app/src/assets/.gitkeep create mode 100644 modules/cms-kit/angular/projects/dev-app/src/environments/environment.prod.ts create mode 100644 modules/cms-kit/angular/projects/dev-app/src/environments/environment.ts create mode 100644 modules/cms-kit/angular/projects/dev-app/src/index.html create mode 100644 modules/cms-kit/angular/projects/dev-app/src/main.ts create mode 100644 modules/cms-kit/angular/projects/dev-app/src/polyfills.ts create mode 100644 modules/cms-kit/angular/projects/dev-app/src/styles.scss create mode 100644 modules/cms-kit/angular/projects/dev-app/src/test.ts create mode 100644 modules/cms-kit/angular/projects/dev-app/tsconfig.app.json create mode 100644 modules/cms-kit/angular/projects/dev-app/tsconfig.prod.json create mode 100644 modules/cms-kit/angular/projects/dev-app/tsconfig.spec.json create mode 100644 modules/cms-kit/angular/projects/dev-app/tslint.json create mode 100644 modules/cms-kit/angular/tsconfig.base.json create mode 100644 modules/cms-kit/angular/tsconfig.json create mode 100644 modules/cms-kit/angular/tsconfig.prod.json create mode 100644 modules/cms-kit/angular/tslint.json create mode 100644 modules/cms-kit/common.props create mode 100644 modules/cms-kit/database/Dockerfile create mode 100644 modules/cms-kit/database/entrypoint.sh create mode 100644 modules/cms-kit/docker-compose.migrations.yml create mode 100644 modules/cms-kit/docker-compose.override.yml create mode 100644 modules/cms-kit/docker-compose.yml create mode 100644 modules/cms-kit/host/Volo.CmsKit.Host.Shared/MultiTenancy/MultiTenancyConsts.cs create mode 100644 modules/cms-kit/host/Volo.CmsKit.Host.Shared/Volo.CmsKit.Host.Shared.csproj create mode 100644 modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/CmsKitHttpApiHostModule.cs create mode 100644 modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/Controllers/HomeController.cs create mode 100644 modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/Dockerfile create mode 100644 modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/EntityFrameworkCore/CmsKitHttpApiHostMigrationsDbContext.cs create mode 100644 modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/EntityFrameworkCore/CmsKitHttpApiHostMigrationsDbContextFactory.cs create mode 100644 modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/Program.cs create mode 100644 modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/Properties/launchSettings.json create mode 100644 modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/Startup.cs create mode 100644 modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/Volo.CmsKit.HttpApi.Host.csproj create mode 100644 modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/appsettings.json create mode 100644 modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/yarn.lock create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/CmsKitIdentityServerModule.cs create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/Dockerfile create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/EntityFrameworkCore/IdentityServerHostMigrationsDbContext.cs create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/EntityFrameworkCore/IdentityServerHostMigrationsDbContextFactory.cs create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/IdentityServer/IdentityServerDataSeedContributor.cs create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/Migrations/20200624023331_Initial.Designer.cs create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/Migrations/20200624023331_Initial.cs create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/Migrations/IdentityServerHostMigrationsDbContextModelSnapshot.cs create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/Pages/Index.cshtml create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/Pages/Index.cshtml.cs create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/Pages/_ViewImports.cshtml create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/Program.cs create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/Properties/launchSettings.json create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/Startup.cs create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/Volo.CmsKit.IdentityServer.csproj create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/abp.resourcemapping.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/appsettings.json create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/gulpfile.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/package.json create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/tempkey.rsa create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/@fortawesome/fontawesome-free/css/all.css create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/@fortawesome/fontawesome-free/css/v4-shims.css create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-brands-400.eot create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-brands-400.svg create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-brands-400.ttf create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-brands-400.woff create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-brands-400.woff2 create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-regular-400.eot create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-regular-400.svg create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-regular-400.ttf create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-regular-400.woff create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-regular-400.woff2 create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-solid-900.eot create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-solid-900.svg create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-solid-900.ttf create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-solid-900.woff create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-solid-900.woff2 create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/abp/core/abp.css create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/abp/core/abp.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/abp/jquery/abp.jquery.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/abp/utils/abp-utils.umd.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/abp/utils/abp-utils.umd.js.map create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/abp/utils/abp-utils.umd.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/abp/utils/abp-utils.umd.min.js.map create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/bootstrap-datepicker.css.map create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/bootstrap-datepicker.min.css create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/bootstrap-datepicker.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker-en-CA.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ar-tn.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ar.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.az.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.bg.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.bm.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.bn.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.br.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.bs.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ca.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.cs.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.cy.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.da.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.de.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.el.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.en-AU.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.en-CA.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.en-GB.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.en-IE.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.en-NZ.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.en-ZA.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.eo.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.es.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.et.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.eu.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.fa.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.fi.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.fo.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.fr-CH.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.fr.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.gl.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.he.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.hi.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.hr.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.hu.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.hy.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.id.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.is.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.it-CH.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.it.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ja.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ka.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.kh.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.kk.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.km.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ko.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.kr.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.lt.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.lv.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.me.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.mk.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.mn.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ms.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.nl-BE.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.nl.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.no.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.oc.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.pl.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.pt-BR.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.pt.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ro.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.rs-latin.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.rs.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ru.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.si.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.sk.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.sl.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.sq.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.sr-latin.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.sr.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.sv.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.sw.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ta.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.tg.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.th.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.tk.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.tr.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.uk.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.uz-cyrl.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.uz-latn.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.vi.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.zh-CN.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.zh-TW.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap/css/bootstrap-rtl.css create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap/css/bootstrap-rtl.css.map create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap/css/bootstrap-rtl.min.css create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap/css/bootstrap-rtl.min.css.map create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap/css/bootstrap.css create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap/css/bootstrap.css.map create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap/css/bootstrap.min.css create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap/css/bootstrap.min.css.map create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap/js/bootstrap.bundle.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap/js/bootstrap.bundle.js.map create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap/js/bootstrap.bundle.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap/js/bootstrap.bundle.min.js.map create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/datatables.net-bs4/css/dataTables.bootstrap4.css create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/datatables.net-bs4/js/dataTables.bootstrap4.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/datatables.net/js/jquery.dataTables.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-form/jquery.form.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-form/jquery.form.min.js.map create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/jquery.validate.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_ar.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_ar.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_az.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_az.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_bg.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_bg.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_bn_BD.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_bn_BD.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_ca.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_ca.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_cs.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_cs.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_da.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_da.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_de.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_de.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_el.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_el.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_es.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_es.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_es_AR.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_es_AR.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_es_PE.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_es_PE.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_et.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_et.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_eu.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_eu.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_fa.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_fa.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_fi.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_fi.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_fr.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_fr.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_ge.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_ge.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_gl.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_gl.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_he.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_he.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_hr.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_hr.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_hu.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_hu.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_hy_AM.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_hy_AM.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_id.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_id.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_is.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_is.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_it.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_it.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_ja.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_ja.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_ka.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_ka.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_kk.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_kk.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_ko.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_ko.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_lt.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_lt.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_lv.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_lv.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_mk.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_mk.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_my.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_my.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_nl.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_nl.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_no.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_no.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_pl.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_pl.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_pt_BR.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_pt_BR.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_pt_PT.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_pt_PT.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_ro.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_ro.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_ru.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_ru.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_sd.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_sd.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_si.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_si.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_sk.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_sk.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_sl.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_sl.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_sr.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_sr.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_sr_lat.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_sr_lat.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_sv.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_sv.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_th.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_th.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_tj.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_tj.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_tr.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_tr.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_uk.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_uk.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_ur.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_ur.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_vi.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_vi.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_zh.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_zh.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_zh_TW.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/messages_zh_TW.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/methods_de.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/methods_de.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/methods_es_CL.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/methods_es_CL.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/methods_fi.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/methods_fi.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/methods_it.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/methods_it.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/methods_nl.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/methods_nl.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/methods_pt.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery-validation/localization/methods_pt.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/jquery/jquery.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/lodash/lodash.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/luxon/luxon.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/luxon/luxon.js.map create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/luxon/luxon.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/luxon/luxon.min.js.map create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/malihu-custom-scrollbar-plugin/jquery.mCustomScrollbar.concat.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/malihu-custom-scrollbar-plugin/jquery.mCustomScrollbar.css create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/malihu-custom-scrollbar-plugin/jquery.mCustomScrollbar.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/malihu-custom-scrollbar-plugin/mCSB_buttons.png create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/malihu-custom-scrollbar-plugin/package.json create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/malihu-custom-scrollbar-plugin/readme.md create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/select2/css/select2.min.css create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/select2/js/i18n/af.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/select2/js/i18n/ar.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/select2/js/i18n/az.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/select2/js/i18n/bg.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/select2/js/i18n/bn.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/select2/js/i18n/bs.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/select2/js/i18n/ca.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/select2/js/i18n/cs.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/select2/js/i18n/da.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/select2/js/i18n/de.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/select2/js/i18n/dsb.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/select2/js/i18n/el.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/select2/js/i18n/en.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/select2/js/i18n/es.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/select2/js/i18n/et.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/select2/js/i18n/eu.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/select2/js/i18n/fa.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/select2/js/i18n/fi.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/select2/js/i18n/fr.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/select2/js/i18n/gl.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/select2/js/i18n/he.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/select2/js/i18n/hi.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/select2/js/i18n/hr.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/select2/js/i18n/hsb.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/select2/js/i18n/hu.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/select2/js/i18n/hy.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/select2/js/i18n/id.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/select2/js/i18n/is.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/select2/js/i18n/it.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/select2/js/i18n/ja.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/select2/js/i18n/ka.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/select2/js/i18n/km.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/select2/js/i18n/ko.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/select2/js/i18n/lt.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/select2/js/i18n/lv.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/select2/js/i18n/mk.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/select2/js/i18n/ms.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/select2/js/i18n/nb.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/select2/js/i18n/ne.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/select2/js/i18n/nl.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/select2/js/i18n/pl.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/select2/js/i18n/ps.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/select2/js/i18n/pt-BR.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/select2/js/i18n/pt.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/select2/js/i18n/ro.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/select2/js/i18n/ru.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/select2/js/i18n/sk.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/select2/js/i18n/sl.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/select2/js/i18n/sq.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/select2/js/i18n/sr-Cyrl.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/select2/js/i18n/sr.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/select2/js/i18n/sv.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/select2/js/i18n/th.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/select2/js/i18n/tk.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/select2/js/i18n/tr.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/select2/js/i18n/uk.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/select2/js/i18n/vi.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/select2/js/i18n/zh-CN.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/select2/js/i18n/zh-TW.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/select2/js/select2-bootstrap-modal-patch.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/select2/js/select2.full.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/select2/js/select2.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/sweetalert/sweetalert.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/jquery.timeago.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/locales/README.md create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/locales/jquery.timeago.af.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/locales/jquery.timeago.am.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/locales/jquery.timeago.ar.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/locales/jquery.timeago.az-short.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/locales/jquery.timeago.az.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/locales/jquery.timeago.be.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/locales/jquery.timeago.bg.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/locales/jquery.timeago.bs.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/locales/jquery.timeago.ca.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/locales/jquery.timeago.cs.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/locales/jquery.timeago.cy.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/locales/jquery.timeago.da.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/locales/jquery.timeago.de-short.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/locales/jquery.timeago.de.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/locales/jquery.timeago.dv.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/locales/jquery.timeago.el.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/locales/jquery.timeago.en-short.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/locales/jquery.timeago.en.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/locales/jquery.timeago.es-short.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/locales/jquery.timeago.es.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/locales/jquery.timeago.et.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/locales/jquery.timeago.eu.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/locales/jquery.timeago.fa-short.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/locales/jquery.timeago.fa.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/locales/jquery.timeago.fi.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/locales/jquery.timeago.fr-short.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/locales/jquery.timeago.fr.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/locales/jquery.timeago.gl.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/locales/jquery.timeago.he.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/locales/jquery.timeago.hr.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/locales/jquery.timeago.hu.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/locales/jquery.timeago.hy.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/locales/jquery.timeago.id.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/locales/jquery.timeago.is.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/locales/jquery.timeago.it-short.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/locales/jquery.timeago.it.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/locales/jquery.timeago.ja.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/locales/jquery.timeago.jv.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/locales/jquery.timeago.ko.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/locales/jquery.timeago.ky.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/locales/jquery.timeago.lt.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/locales/jquery.timeago.lv.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/locales/jquery.timeago.mk.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/locales/jquery.timeago.nl.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/locales/jquery.timeago.no.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/locales/jquery.timeago.pl.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/locales/jquery.timeago.pt-br-short.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/locales/jquery.timeago.pt-br.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/locales/jquery.timeago.pt-short.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/locales/jquery.timeago.pt.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/locales/jquery.timeago.ro.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/locales/jquery.timeago.rs.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/locales/jquery.timeago.ru.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/locales/jquery.timeago.rw.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/locales/jquery.timeago.si.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/locales/jquery.timeago.sk.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/locales/jquery.timeago.sl.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/locales/jquery.timeago.sq.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/locales/jquery.timeago.sr.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/locales/jquery.timeago.sv.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/locales/jquery.timeago.th.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/locales/jquery.timeago.tr-short.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/locales/jquery.timeago.tr.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/locales/jquery.timeago.uk.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/locales/jquery.timeago.ur.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/locales/jquery.timeago.uz.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/locales/jquery.timeago.vi.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/locales/jquery.timeago.zh-CN.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/timeago/locales/jquery.timeago.zh-TW.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/toastr/toastr.css create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/toastr/toastr.js.map create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/toastr/toastr.min.css create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/toastr/toastr.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.IdentityServer/yarn.lock create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/CmsKitBrandingProvider.cs create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/CmsKitWebAutoMapperProfile.cs create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/CmsKitWebHostMenuContributor.cs create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/CmsKitWebHostModule.cs create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/Controllers/AccountController.cs create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/Pages/CmsKitPageModel.cs create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/Pages/Index.cshtml create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/Pages/Index.cshtml.cs create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/Pages/_ViewImports.cshtml create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/Program.cs create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/Properties/launchSettings.json create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/Startup.cs create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/Views/_ViewImports.cshtml create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/Volo.CmsKit.Web.Host.csproj create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/abp.resourcemapping.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/appsettings.Development.json create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/appsettings.json create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/gulpfile.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/package.json create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/@fortawesome/fontawesome-free/css/all.css create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/@fortawesome/fontawesome-free/css/v4-shims.css create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-brands-400.eot create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-brands-400.svg create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-brands-400.ttf create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-brands-400.woff create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-brands-400.woff2 create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-regular-400.eot create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-regular-400.svg create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-regular-400.ttf create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-regular-400.woff create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-regular-400.woff2 create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-solid-900.eot create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-solid-900.svg create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-solid-900.ttf create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-solid-900.woff create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-solid-900.woff2 create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/abp/core/abp.css create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/abp/core/abp.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/abp/jquery/abp.jquery.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/abp/utils/abp-utils.umd.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/abp/utils/abp-utils.umd.js.map create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/abp/utils/abp-utils.umd.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/abp/utils/abp-utils.umd.min.js.map create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/bootstrap-datepicker.css.map create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/bootstrap-datepicker.min.css create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/bootstrap-datepicker.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker-en-CA.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ar-tn.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ar.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.az.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.bg.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.bm.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.bn.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.br.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.bs.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ca.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.cs.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.cy.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.da.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.de.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.el.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.en-AU.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.en-CA.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.en-GB.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.en-IE.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.en-NZ.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.en-ZA.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.eo.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.es.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.et.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.eu.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.fa.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.fi.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.fo.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.fr-CH.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.fr.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.gl.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.he.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.hi.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.hr.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.hu.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.hy.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.id.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.is.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.it-CH.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.it.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ja.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ka.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.kh.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.kk.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.km.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ko.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.kr.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.lt.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.lv.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.me.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.mk.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.mn.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ms.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.nl-BE.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.nl.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.no.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.oc.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.pl.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.pt-BR.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.pt.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ro.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.rs-latin.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.rs.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ru.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.si.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.sk.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.sl.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.sq.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.sr-latin.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.sr.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.sv.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.sw.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ta.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.tg.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.th.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.tk.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.tr.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.uk.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.uz-cyrl.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.uz-latn.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.vi.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.zh-CN.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.zh-TW.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap/css/bootstrap-rtl.css create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap/css/bootstrap-rtl.css.map create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap/css/bootstrap-rtl.min.css create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap/css/bootstrap-rtl.min.css.map create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap/css/bootstrap.css create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap/css/bootstrap.css.map create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap/css/bootstrap.min.css create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap/css/bootstrap.min.css.map create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap/js/bootstrap.bundle.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap/js/bootstrap.bundle.js.map create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap/js/bootstrap.bundle.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/bootstrap/js/bootstrap.bundle.min.js.map create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/datatables.net-bs4/css/dataTables.bootstrap4.css create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/datatables.net-bs4/js/dataTables.bootstrap4.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/datatables.net/js/jquery.dataTables.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-form/jquery.form.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-form/jquery.form.min.js.map create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/jquery.validate.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_ar.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_ar.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_az.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_az.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_bg.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_bg.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_bn_BD.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_bn_BD.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_ca.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_ca.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_cs.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_cs.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_da.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_da.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_de.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_de.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_el.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_el.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_es.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_es.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_es_AR.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_es_AR.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_es_PE.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_es_PE.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_et.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_et.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_eu.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_eu.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_fa.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_fa.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_fi.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_fi.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_fr.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_fr.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_ge.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_ge.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_gl.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_gl.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_he.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_he.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_hr.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_hr.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_hu.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_hu.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_hy_AM.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_hy_AM.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_id.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_id.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_is.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_is.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_it.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_it.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_ja.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_ja.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_ka.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_ka.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_kk.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_kk.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_ko.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_ko.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_lt.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_lt.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_lv.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_lv.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_mk.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_mk.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_my.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_my.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_nl.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_nl.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_no.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_no.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_pl.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_pl.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_pt_BR.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_pt_BR.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_pt_PT.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_pt_PT.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_ro.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_ro.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_ru.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_ru.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_sd.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_sd.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_si.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_si.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_sk.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_sk.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_sl.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_sl.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_sr.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_sr.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_sr_lat.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_sr_lat.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_sv.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_sv.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_th.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_th.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_tj.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_tj.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_tr.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_tr.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_uk.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_uk.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_ur.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_ur.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_vi.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_vi.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_zh.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_zh.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_zh_TW.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/messages_zh_TW.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/methods_de.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/methods_de.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/methods_es_CL.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/methods_es_CL.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/methods_fi.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/methods_fi.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/methods_it.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/methods_it.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/methods_nl.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/methods_nl.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/methods_pt.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery-validation/localization/methods_pt.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/jquery/jquery.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/lodash/lodash.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/luxon/luxon.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/luxon/luxon.js.map create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/luxon/luxon.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/luxon/luxon.min.js.map create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/malihu-custom-scrollbar-plugin/jquery.mCustomScrollbar.concat.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/malihu-custom-scrollbar-plugin/jquery.mCustomScrollbar.css create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/malihu-custom-scrollbar-plugin/jquery.mCustomScrollbar.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/malihu-custom-scrollbar-plugin/mCSB_buttons.png create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/malihu-custom-scrollbar-plugin/package.json create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/malihu-custom-scrollbar-plugin/readme.md create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/select2/css/select2.min.css create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/select2/js/i18n/af.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/select2/js/i18n/ar.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/select2/js/i18n/az.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/select2/js/i18n/bg.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/select2/js/i18n/bn.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/select2/js/i18n/bs.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/select2/js/i18n/ca.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/select2/js/i18n/cs.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/select2/js/i18n/da.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/select2/js/i18n/de.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/select2/js/i18n/dsb.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/select2/js/i18n/el.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/select2/js/i18n/en.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/select2/js/i18n/es.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/select2/js/i18n/et.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/select2/js/i18n/eu.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/select2/js/i18n/fa.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/select2/js/i18n/fi.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/select2/js/i18n/fr.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/select2/js/i18n/gl.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/select2/js/i18n/he.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/select2/js/i18n/hi.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/select2/js/i18n/hr.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/select2/js/i18n/hsb.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/select2/js/i18n/hu.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/select2/js/i18n/hy.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/select2/js/i18n/id.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/select2/js/i18n/is.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/select2/js/i18n/it.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/select2/js/i18n/ja.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/select2/js/i18n/ka.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/select2/js/i18n/km.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/select2/js/i18n/ko.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/select2/js/i18n/lt.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/select2/js/i18n/lv.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/select2/js/i18n/mk.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/select2/js/i18n/ms.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/select2/js/i18n/nb.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/select2/js/i18n/ne.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/select2/js/i18n/nl.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/select2/js/i18n/pl.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/select2/js/i18n/ps.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/select2/js/i18n/pt-BR.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/select2/js/i18n/pt.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/select2/js/i18n/ro.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/select2/js/i18n/ru.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/select2/js/i18n/sk.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/select2/js/i18n/sl.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/select2/js/i18n/sq.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/select2/js/i18n/sr-Cyrl.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/select2/js/i18n/sr.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/select2/js/i18n/sv.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/select2/js/i18n/th.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/select2/js/i18n/tk.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/select2/js/i18n/tr.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/select2/js/i18n/uk.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/select2/js/i18n/vi.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/select2/js/i18n/zh-CN.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/select2/js/i18n/zh-TW.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/select2/js/select2-bootstrap-modal-patch.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/select2/js/select2.full.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/select2/js/select2.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/sweetalert/sweetalert.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/jquery.timeago.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/locales/README.md create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/locales/jquery.timeago.af.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/locales/jquery.timeago.am.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/locales/jquery.timeago.ar.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/locales/jquery.timeago.az-short.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/locales/jquery.timeago.az.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/locales/jquery.timeago.be.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/locales/jquery.timeago.bg.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/locales/jquery.timeago.bs.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/locales/jquery.timeago.ca.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/locales/jquery.timeago.cs.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/locales/jquery.timeago.cy.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/locales/jquery.timeago.da.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/locales/jquery.timeago.de-short.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/locales/jquery.timeago.de.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/locales/jquery.timeago.dv.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/locales/jquery.timeago.el.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/locales/jquery.timeago.en-short.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/locales/jquery.timeago.en.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/locales/jquery.timeago.es-short.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/locales/jquery.timeago.es.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/locales/jquery.timeago.et.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/locales/jquery.timeago.eu.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/locales/jquery.timeago.fa-short.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/locales/jquery.timeago.fa.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/locales/jquery.timeago.fi.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/locales/jquery.timeago.fr-short.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/locales/jquery.timeago.fr.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/locales/jquery.timeago.gl.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/locales/jquery.timeago.he.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/locales/jquery.timeago.hr.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/locales/jquery.timeago.hu.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/locales/jquery.timeago.hy.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/locales/jquery.timeago.id.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/locales/jquery.timeago.is.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/locales/jquery.timeago.it-short.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/locales/jquery.timeago.it.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/locales/jquery.timeago.ja.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/locales/jquery.timeago.jv.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/locales/jquery.timeago.ko.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/locales/jquery.timeago.ky.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/locales/jquery.timeago.lt.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/locales/jquery.timeago.lv.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/locales/jquery.timeago.mk.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/locales/jquery.timeago.nl.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/locales/jquery.timeago.no.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/locales/jquery.timeago.pl.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/locales/jquery.timeago.pt-br-short.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/locales/jquery.timeago.pt-br.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/locales/jquery.timeago.pt-short.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/locales/jquery.timeago.pt.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/locales/jquery.timeago.ro.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/locales/jquery.timeago.rs.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/locales/jquery.timeago.ru.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/locales/jquery.timeago.rw.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/locales/jquery.timeago.si.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/locales/jquery.timeago.sk.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/locales/jquery.timeago.sl.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/locales/jquery.timeago.sq.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/locales/jquery.timeago.sr.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/locales/jquery.timeago.sv.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/locales/jquery.timeago.th.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/locales/jquery.timeago.tr-short.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/locales/jquery.timeago.tr.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/locales/jquery.timeago.uk.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/locales/jquery.timeago.ur.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/locales/jquery.timeago.uz.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/locales/jquery.timeago.vi.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/locales/jquery.timeago.zh-CN.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/timeago/locales/jquery.timeago.zh-TW.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/toastr/toastr.css create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/toastr/toastr.js.map create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/toastr/toastr.min.css create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/wwwroot/libs/toastr/toastr.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Host/yarn.lock create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/CmsKitWebUnifiedModule.cs create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/EntityFrameworkCore/UnifiedDbContext.cs create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/EntityFrameworkCore/UnifiedDbContextFactory.cs create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20200624023340_Initial.Designer.cs create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20200624023340_Initial.cs create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/Pages/Index.cshtml create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/Pages/Index.cshtml.cs create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/Pages/_ViewImports.cshtml create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/Program.cs create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/Properties/launchSettings.json create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/Startup.cs create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/Volo.CmsKit.Web.Unified.csproj create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/abp.resourcemapping.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/appsettings.json create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/gulpfile.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/package.json create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/@fortawesome/fontawesome-free/css/all.css create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/@fortawesome/fontawesome-free/css/v4-shims.css create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-brands-400.eot create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-brands-400.svg create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-brands-400.ttf create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-brands-400.woff create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-brands-400.woff2 create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-regular-400.eot create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-regular-400.svg create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-regular-400.ttf create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-regular-400.woff create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-regular-400.woff2 create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-solid-900.eot create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-solid-900.svg create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-solid-900.ttf create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-solid-900.woff create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-solid-900.woff2 create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/abp/core/abp.css create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/abp/core/abp.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/abp/jquery/abp.jquery.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/abp/utils/abp-utils.umd.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/abp/utils/abp-utils.umd.js.map create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/abp/utils/abp-utils.umd.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/abp/utils/abp-utils.umd.min.js.map create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/bootstrap-datepicker.css.map create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/bootstrap-datepicker.min.css create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/bootstrap-datepicker.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker-en-CA.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ar-tn.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ar.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.az.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.bg.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.bm.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.bn.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.br.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.bs.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ca.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.cs.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.cy.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.da.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.de.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.el.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.en-AU.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.en-CA.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.en-GB.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.en-IE.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.en-NZ.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.en-ZA.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.eo.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.es.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.et.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.eu.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.fa.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.fi.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.fo.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.fr-CH.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.fr.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.gl.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.he.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.hi.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.hr.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.hu.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.hy.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.id.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.is.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.it-CH.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.it.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ja.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ka.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.kh.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.kk.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.km.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ko.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.kr.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.lt.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.lv.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.me.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.mk.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.mn.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ms.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.nl-BE.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.nl.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.no.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.oc.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.pl.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.pt-BR.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.pt.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ro.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.rs-latin.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.rs.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ru.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.si.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.sk.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.sl.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.sq.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.sr-latin.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.sr.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.sv.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.sw.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ta.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.tg.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.th.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.tk.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.tr.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.uk.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.uz-cyrl.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.uz-latn.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.vi.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.zh-CN.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.zh-TW.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap/css/bootstrap-rtl.css create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap/css/bootstrap-rtl.css.map create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap/css/bootstrap-rtl.min.css create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap/css/bootstrap-rtl.min.css.map create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap/css/bootstrap.css create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap/css/bootstrap.css.map create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap/css/bootstrap.min.css create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap/css/bootstrap.min.css.map create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap/js/bootstrap.bundle.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap/js/bootstrap.bundle.js.map create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap/js/bootstrap.bundle.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/bootstrap/js/bootstrap.bundle.min.js.map create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/datatables.net-bs4/css/dataTables.bootstrap4.css create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/datatables.net-bs4/js/dataTables.bootstrap4.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/datatables.net/js/jquery.dataTables.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/jquery-form/jquery.form.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/jquery-form/jquery.form.min.js.map create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/jquery-validation/jquery.validate.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/jquery-validation/localization/messages_ar.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/jquery-validation/localization/messages_az.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/jquery-validation/localization/messages_bg.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/jquery-validation/localization/messages_bn_BD.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/jquery-validation/localization/messages_ca.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/jquery-validation/localization/messages_cs.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/jquery-validation/localization/messages_da.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/jquery-validation/localization/messages_de.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/jquery-validation/localization/messages_el.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/jquery-validation/localization/messages_es.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/jquery-validation/localization/messages_es_AR.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/jquery-validation/localization/messages_es_PE.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/jquery-validation/localization/messages_et.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/jquery-validation/localization/messages_eu.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/jquery-validation/localization/messages_fa.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/jquery-validation/localization/messages_fi.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/jquery-validation/localization/messages_fr.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/jquery-validation/localization/messages_ge.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/jquery-validation/localization/messages_gl.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/jquery-validation/localization/messages_he.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/jquery-validation/localization/messages_hr.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/jquery-validation/localization/messages_hu.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/jquery-validation/localization/messages_hy_AM.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/jquery-validation/localization/messages_id.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/jquery-validation/localization/messages_is.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/jquery-validation/localization/messages_it.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/jquery-validation/localization/messages_ja.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/jquery-validation/localization/messages_ka.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/jquery-validation/localization/messages_kk.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/jquery-validation/localization/messages_ko.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/jquery-validation/localization/messages_lt.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/jquery-validation/localization/messages_lv.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/jquery-validation/localization/messages_mk.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/jquery-validation/localization/messages_my.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/jquery-validation/localization/messages_nl.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/jquery-validation/localization/messages_no.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/jquery-validation/localization/messages_pl.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/jquery-validation/localization/messages_pt_BR.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/jquery-validation/localization/messages_pt_PT.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/jquery-validation/localization/messages_ro.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/jquery-validation/localization/messages_ru.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/jquery-validation/localization/messages_sd.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/jquery-validation/localization/messages_si.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/jquery-validation/localization/messages_sk.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/jquery-validation/localization/messages_sl.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/jquery-validation/localization/messages_sr.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/jquery-validation/localization/messages_sr_lat.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/jquery-validation/localization/messages_sv.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/jquery-validation/localization/messages_th.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/jquery-validation/localization/messages_tj.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/jquery-validation/localization/messages_tr.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/jquery-validation/localization/messages_uk.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/jquery-validation/localization/messages_ur.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/jquery-validation/localization/messages_vi.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/jquery-validation/localization/messages_zh.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/jquery-validation/localization/messages_zh_TW.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/jquery-validation/localization/methods_de.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/jquery-validation/localization/methods_es_CL.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/jquery-validation/localization/methods_fi.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/jquery-validation/localization/methods_nl.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/jquery-validation/localization/methods_pt.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/jquery/jquery.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/lodash/lodash.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/luxon/luxon.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/luxon/luxon.js.map create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/luxon/luxon.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/luxon/luxon.min.js.map create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/malihu-custom-scrollbar-plugin/jquery.mCustomScrollbar.concat.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/malihu-custom-scrollbar-plugin/jquery.mCustomScrollbar.css create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/malihu-custom-scrollbar-plugin/jquery.mCustomScrollbar.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/malihu-custom-scrollbar-plugin/mCSB_buttons.png create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/malihu-custom-scrollbar-plugin/package.json create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/malihu-custom-scrollbar-plugin/readme.md create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/select2/css/select2.min.css create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/select2/js/i18n/af.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/select2/js/i18n/ar.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/select2/js/i18n/az.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/select2/js/i18n/bg.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/select2/js/i18n/bn.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/select2/js/i18n/bs.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/select2/js/i18n/ca.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/select2/js/i18n/cs.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/select2/js/i18n/da.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/select2/js/i18n/de.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/select2/js/i18n/dsb.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/select2/js/i18n/el.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/select2/js/i18n/en.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/select2/js/i18n/es.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/select2/js/i18n/et.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/select2/js/i18n/eu.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/select2/js/i18n/fa.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/select2/js/i18n/fi.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/select2/js/i18n/fr.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/select2/js/i18n/gl.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/select2/js/i18n/he.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/select2/js/i18n/hi.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/select2/js/i18n/hr.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/select2/js/i18n/hsb.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/select2/js/i18n/hu.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/select2/js/i18n/hy.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/select2/js/i18n/id.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/select2/js/i18n/is.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/select2/js/i18n/it.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/select2/js/i18n/ja.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/select2/js/i18n/ka.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/select2/js/i18n/km.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/select2/js/i18n/ko.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/select2/js/i18n/lt.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/select2/js/i18n/lv.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/select2/js/i18n/mk.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/select2/js/i18n/ms.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/select2/js/i18n/nb.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/select2/js/i18n/ne.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/select2/js/i18n/nl.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/select2/js/i18n/pl.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/select2/js/i18n/ps.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/select2/js/i18n/pt-BR.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/select2/js/i18n/pt.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/select2/js/i18n/ro.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/select2/js/i18n/ru.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/select2/js/i18n/sk.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/select2/js/i18n/sl.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/select2/js/i18n/sq.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/select2/js/i18n/sr-Cyrl.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/select2/js/i18n/sr.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/select2/js/i18n/sv.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/select2/js/i18n/th.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/select2/js/i18n/tk.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/select2/js/i18n/tr.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/select2/js/i18n/uk.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/select2/js/i18n/vi.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/select2/js/i18n/zh-CN.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/select2/js/i18n/zh-TW.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/select2/js/select2-bootstrap-modal-patch.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/select2/js/select2.full.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/select2/js/select2.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/sweetalert/sweetalert.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/jquery.timeago.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/locales/README.md create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/locales/jquery.timeago.af.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/locales/jquery.timeago.am.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/locales/jquery.timeago.ar.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/locales/jquery.timeago.az-short.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/locales/jquery.timeago.az.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/locales/jquery.timeago.be.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/locales/jquery.timeago.bg.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/locales/jquery.timeago.bs.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/locales/jquery.timeago.ca.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/locales/jquery.timeago.cs.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/locales/jquery.timeago.cy.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/locales/jquery.timeago.da.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/locales/jquery.timeago.de-short.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/locales/jquery.timeago.de.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/locales/jquery.timeago.dv.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/locales/jquery.timeago.el.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/locales/jquery.timeago.en-short.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/locales/jquery.timeago.en.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/locales/jquery.timeago.es-short.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/locales/jquery.timeago.es.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/locales/jquery.timeago.et.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/locales/jquery.timeago.eu.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/locales/jquery.timeago.fa-short.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/locales/jquery.timeago.fa.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/locales/jquery.timeago.fi.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/locales/jquery.timeago.fr-short.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/locales/jquery.timeago.fr.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/locales/jquery.timeago.gl.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/locales/jquery.timeago.he.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/locales/jquery.timeago.hr.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/locales/jquery.timeago.hu.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/locales/jquery.timeago.hy.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/locales/jquery.timeago.id.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/locales/jquery.timeago.is.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/locales/jquery.timeago.it-short.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/locales/jquery.timeago.it.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/locales/jquery.timeago.ja.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/locales/jquery.timeago.jv.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/locales/jquery.timeago.ko.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/locales/jquery.timeago.ky.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/locales/jquery.timeago.lt.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/locales/jquery.timeago.lv.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/locales/jquery.timeago.mk.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/locales/jquery.timeago.nl.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/locales/jquery.timeago.no.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/locales/jquery.timeago.pl.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/locales/jquery.timeago.pt-br-short.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/locales/jquery.timeago.pt-br.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/locales/jquery.timeago.pt-short.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/locales/jquery.timeago.pt.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/locales/jquery.timeago.ro.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/locales/jquery.timeago.rs.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/locales/jquery.timeago.ru.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/locales/jquery.timeago.rw.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/locales/jquery.timeago.si.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/locales/jquery.timeago.sk.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/locales/jquery.timeago.sl.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/locales/jquery.timeago.sq.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/locales/jquery.timeago.sr.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/locales/jquery.timeago.sv.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/locales/jquery.timeago.th.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/locales/jquery.timeago.tr-short.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/locales/jquery.timeago.tr.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/locales/jquery.timeago.uk.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/locales/jquery.timeago.ur.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/locales/jquery.timeago.uz.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/locales/jquery.timeago.vi.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/locales/jquery.timeago.zh-CN.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/timeago/locales/jquery.timeago.zh-TW.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/toastr/toastr.css create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/toastr/toastr.js.map create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/toastr/toastr.min.css create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/wwwroot/libs/toastr/toastr.min.js create mode 100644 modules/cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock create mode 100644 modules/cms-kit/src/Volo.CmsKit.Application.Contracts/CmsKitApplicationContractsModule.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Application.Contracts/Permissions/CmsKitPermissionDefinitionProvider.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Application.Contracts/Permissions/CmsKitPermissions.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Application.Contracts/Samples/ISampleAppService.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Application.Contracts/Samples/SampleDto.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Application.Contracts/Volo.CmsKit.Application.Contracts.csproj create mode 100644 modules/cms-kit/src/Volo.CmsKit.Application/CmsKitAppService.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Application/CmsKitApplicationAutoMapperProfile.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Application/CmsKitApplicationModule.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Application/Samples/SampleAppService.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Application/Volo.CmsKit.Application.csproj create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain.Shared/CmsKitDomainSharedModule.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain.Shared/CmsKitErrorCodes.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Localization/CmsKit/cs.json create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Localization/CmsKit/en.json create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Localization/CmsKit/pl-PL.json create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Localization/CmsKit/pt-BR.json create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Localization/CmsKit/sl.json create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Localization/CmsKit/tr.json create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Localization/CmsKit/vi.json create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Localization/CmsKit/zh-Hans.json create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Localization/CmsKit/zh-Hant.json create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Localization/CmsKitResource.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo.CmsKit.Domain.Shared.csproj create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain/CmsKitDbProperties.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain/CmsKitDomainModule.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain/Settings/CmsKitSettingDefinitionProvider.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain/Settings/CmsKitSettings.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain/Volo.CmsKit.Domain.csproj create mode 100644 modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/EntityFrameworkCore/CmsKitDbContext.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/EntityFrameworkCore/CmsKitEntityFrameworkCoreModule.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/EntityFrameworkCore/CmsKitModelBuilderConfigurationOptions.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/EntityFrameworkCore/ICmsKitDbContext.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo.CmsKit.EntityFrameworkCore.csproj create mode 100644 modules/cms-kit/src/Volo.CmsKit.HttpApi.Client/CmsKitHttpApiClientModule.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.HttpApi.Client/Volo.CmsKit.HttpApi.Client.csproj create mode 100644 modules/cms-kit/src/Volo.CmsKit.HttpApi/CmsKitController.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.HttpApi/CmsKitHttpApiModule.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.HttpApi/Samples/SampleController.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.HttpApi/Volo.CmsKit.HttpApi.csproj create mode 100644 modules/cms-kit/src/Volo.CmsKit.MongoDB/MongoDB/CmsKitMongoDbContext.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.MongoDB/MongoDB/CmsKitMongoDbContextExtensions.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.MongoDB/MongoDB/CmsKitMongoDbModule.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.MongoDB/MongoDB/CmsKitMongoModelBuilderConfigurationOptions.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.MongoDB/MongoDB/ICmsKitMongoDbContext.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo.CmsKit.MongoDB.csproj create mode 100644 modules/cms-kit/src/Volo.CmsKit.Web/CmsKitWebAutoMapperProfile.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Web/CmsKitWebModule.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Web/Menus/CmsKitMenuContributor.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Web/Menus/CmsKitMenus.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Web/Pages/CmsKit/Index.cshtml create mode 100644 modules/cms-kit/src/Volo.CmsKit.Web/Pages/CmsKit/Index.cshtml.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Web/Pages/CmsKit/_ViewImports.cshtml create mode 100644 modules/cms-kit/src/Volo.CmsKit.Web/Pages/CmsKitPageModel.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Web/Volo.CmsKit.Web.csproj create mode 100644 modules/cms-kit/test/Volo.CmsKit.Application.Tests/CmsKitApplicationTestBase.cs create mode 100644 modules/cms-kit/test/Volo.CmsKit.Application.Tests/CmsKitApplicationTestModule.cs create mode 100644 modules/cms-kit/test/Volo.CmsKit.Application.Tests/Samples/SampleAppService_Tests.cs create mode 100644 modules/cms-kit/test/Volo.CmsKit.Application.Tests/Volo.CmsKit.Application.Tests.csproj create mode 100644 modules/cms-kit/test/Volo.CmsKit.Domain.Tests/CmsKitDomainTestBase.cs create mode 100644 modules/cms-kit/test/Volo.CmsKit.Domain.Tests/CmsKitDomainTestModule.cs create mode 100644 modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Samples/SampleManager_Tests.cs create mode 100644 modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Volo.CmsKit.Domain.Tests.csproj create mode 100644 modules/cms-kit/test/Volo.CmsKit.EntityFrameworkCore.Tests/EntityFrameworkCore/CmsKitEntityFrameworkCoreTestBase.cs create mode 100644 modules/cms-kit/test/Volo.CmsKit.EntityFrameworkCore.Tests/EntityFrameworkCore/CmsKitEntityFrameworkCoreTestModule.cs create mode 100644 modules/cms-kit/test/Volo.CmsKit.EntityFrameworkCore.Tests/EntityFrameworkCore/Samples/SampleRepository_Tests.cs create mode 100644 modules/cms-kit/test/Volo.CmsKit.EntityFrameworkCore.Tests/Volo.CmsKit.EntityFrameworkCore.Tests.csproj create mode 100644 modules/cms-kit/test/Volo.CmsKit.HttpApi.Client.ConsoleTestApp/ClientDemoService.cs create mode 100644 modules/cms-kit/test/Volo.CmsKit.HttpApi.Client.ConsoleTestApp/CmsKitConsoleApiClientModule.cs create mode 100644 modules/cms-kit/test/Volo.CmsKit.HttpApi.Client.ConsoleTestApp/ConsoleTestAppHostedService.cs create mode 100644 modules/cms-kit/test/Volo.CmsKit.HttpApi.Client.ConsoleTestApp/Program.cs create mode 100644 modules/cms-kit/test/Volo.CmsKit.HttpApi.Client.ConsoleTestApp/Volo.CmsKit.HttpApi.Client.ConsoleTestApp.csproj create mode 100644 modules/cms-kit/test/Volo.CmsKit.HttpApi.Client.ConsoleTestApp/appsettings.json create mode 100644 modules/cms-kit/test/Volo.CmsKit.MongoDB.Tests/MongoDB/CmsKitMongoDbTestBase.cs create mode 100644 modules/cms-kit/test/Volo.CmsKit.MongoDB.Tests/MongoDB/CmsKitMongoDbTestModule.cs create mode 100644 modules/cms-kit/test/Volo.CmsKit.MongoDB.Tests/MongoDB/MongoDbFixture.cs create mode 100644 modules/cms-kit/test/Volo.CmsKit.MongoDB.Tests/MongoDB/MongoTestCollection.cs create mode 100644 modules/cms-kit/test/Volo.CmsKit.MongoDB.Tests/MongoDB/Samples/SampleRepository_Tests.cs create mode 100644 modules/cms-kit/test/Volo.CmsKit.MongoDB.Tests/Volo.CmsKit.MongoDB.Tests.csproj create mode 100644 modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs create mode 100644 modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitTestBase.cs create mode 100644 modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitTestBaseModule.cs create mode 100644 modules/cms-kit/test/Volo.CmsKit.TestBase/Samples/SampleRepository_Tests.cs create mode 100644 modules/cms-kit/test/Volo.CmsKit.TestBase/Security/FakeCurrentPrincipalAccessor.cs create mode 100644 modules/cms-kit/test/Volo.CmsKit.TestBase/Volo.CmsKit.TestBase.csproj diff --git a/modules/cms-kit/.gitattributes b/modules/cms-kit/.gitattributes new file mode 100644 index 0000000000..c941e52669 --- /dev/null +++ b/modules/cms-kit/.gitattributes @@ -0,0 +1 @@ +**/wwwroot/libs/** linguist-vendored diff --git a/modules/cms-kit/.gitignore b/modules/cms-kit/.gitignore new file mode 100644 index 0000000000..e9589dd2d6 --- /dev/null +++ b/modules/cms-kit/.gitignore @@ -0,0 +1,258 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. + +# User-specific files +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ + +# Visual Studio 2015 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUNIT +*.VisualState.xml +TestResult.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# DNX +project.lock.json +artifacts/ + +*_i.c +*_p.c +*_i.h +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# JustCode is a .NET coding add-in +.JustCode + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# TODO: Comment the next line if you want to checkin your web deploy settings +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# The packages folder can be ignored because of Package Restore +**/packages/* +# except build/, which is used as an MSBuild target. +!**/packages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/packages/repositories.config +# NuGet v3's project.json files produces more ignoreable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.pfx +*.publishsettings +node_modules/ +orleans.codegen.cs + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm + +# SQL Server files +*.mdf +*.ldf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# JetBrains Rider +.idea/ +*.sln.iml + +# CmsKit +host/Volo.CmsKit.IdentityServer/Logs/logs.txt +host/Volo.CmsKit.HttpApi.Host/Logs/logs.txt +host/Volo.CmsKit.Web.Host/Logs/logs.txt +host/Volo.CmsKit.Web.Unified/Logs/logs.txt diff --git a/modules/cms-kit/Volo.CmsKit.sln b/modules/cms-kit/Volo.CmsKit.sln new file mode 100644 index 0000000000..478e5c57e8 --- /dev/null +++ b/modules/cms-kit/Volo.CmsKit.sln @@ -0,0 +1,167 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29001.49 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.CmsKit.Domain.Shared", "src\Volo.CmsKit.Domain.Shared\Volo.CmsKit.Domain.Shared.csproj", "{D64C1577-4929-4B60-939E-96DE1534891A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.CmsKit.Domain", "src\Volo.CmsKit.Domain\Volo.CmsKit.Domain.csproj", "{F2840BC7-0188-4606-9126-DADD0F5ABF7A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.CmsKit.Application.Contracts", "src\Volo.CmsKit.Application.Contracts\Volo.CmsKit.Application.Contracts.csproj", "{BD65D04F-08D5-40C1-8C24-77CA0BACB877}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.CmsKit.Application", "src\Volo.CmsKit.Application\Volo.CmsKit.Application.csproj", "{78040F9E-3501-4A40-82DF-00A597710F35}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{649A3FFA-182F-4E56-9717-E6A9A2BEC545}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{CCD2960C-23CC-4AB4-B84D-60C7AAA52F4D}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "host", "host", "{E400416D-2895-4512-9D17-90681EEC7E0A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.CmsKit.EntityFrameworkCore", "src\Volo.CmsKit.EntityFrameworkCore\Volo.CmsKit.EntityFrameworkCore.csproj", "{0CE86223-D31D-4315-A1F5-87BA3EE1B844}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.CmsKit.MongoDB", "src\Volo.CmsKit.MongoDB\Volo.CmsKit.MongoDB.csproj", "{F1C58097-4C08-4D88-8976-6B3389391481}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.CmsKit.HttpApi", "src\Volo.CmsKit.HttpApi\Volo.CmsKit.HttpApi.csproj", "{077AA5F8-8B61-420C-A6B5-0150A66FDB34}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.CmsKit.HttpApi.Client", "src\Volo.CmsKit.HttpApi.Client\Volo.CmsKit.HttpApi.Client.csproj", "{36E2735F-CEAB-44C8-A6D1-2CDAFF399751}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.CmsKit.TestBase", "test\Volo.CmsKit.TestBase\Volo.CmsKit.TestBase.csproj", "{C5BB573D-3030-4BCB-88B7-F6A85C32766C}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.CmsKit.EntityFrameworkCore.Tests", "test\Volo.CmsKit.EntityFrameworkCore.Tests\Volo.CmsKit.EntityFrameworkCore.Tests.csproj", "{527F645C-C1FC-406E-8479-81386C8ECF13}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.CmsKit.MongoDB.Tests", "test\Volo.CmsKit.MongoDB.Tests\Volo.CmsKit.MongoDB.Tests.csproj", "{D0AD9179-125C-40B2-A8EE-CD4C1EE24BB6}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.CmsKit.Domain.Tests", "test\Volo.CmsKit.Domain.Tests\Volo.CmsKit.Domain.Tests.csproj", "{E60895E5-79C4-447D-88B7-85CB5BA336A4}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.CmsKit.Application.Tests", "test\Volo.CmsKit.Application.Tests\Volo.CmsKit.Application.Tests.csproj", "{90CB5DC4-C040-45C7-8900-9688B26405BC}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.CmsKit.HttpApi.Host", "host\Volo.CmsKit.HttpApi.Host\Volo.CmsKit.HttpApi.Host.csproj", "{37B135B0-DAFE-4616-B25C-1BDF32FC44A2}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.CmsKit.Web", "src\Volo.CmsKit.Web\Volo.CmsKit.Web.csproj", "{3B7B6317-1B85-4164-8E11-75574F80AE17}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.CmsKit.HttpApi.Client.ConsoleTestApp", "test\Volo.CmsKit.HttpApi.Client.ConsoleTestApp\Volo.CmsKit.HttpApi.Client.ConsoleTestApp.csproj", "{1EDCD6D4-DF3A-4E3B-ABB6-C0D0B373EAB8}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.CmsKit.Web.Host", "host\Volo.CmsKit.Web.Host\Volo.CmsKit.Web.Host.csproj", "{73513786-B6C6-4A21-89C5-0FBDD0A46107}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.CmsKit.IdentityServer", "host\Volo.CmsKit.IdentityServer\Volo.CmsKit.IdentityServer.csproj", "{690203F4-3CD5-4569-88D9-EE831EEA5F5F}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.CmsKit.Host.Shared", "host\Volo.CmsKit.Host.Shared\Volo.CmsKit.Host.Shared.csproj", "{F6AC8D4A-EDD7-4514-8E8A-5BCB019864DB}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.CmsKit.Web.Unified", "host\Volo.CmsKit.Web.Unified\Volo.CmsKit.Web.Unified.csproj", "{3D872C41-E226-45C8-89C1-9D3DBD7C73F2}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {D64C1577-4929-4B60-939E-96DE1534891A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D64C1577-4929-4B60-939E-96DE1534891A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D64C1577-4929-4B60-939E-96DE1534891A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D64C1577-4929-4B60-939E-96DE1534891A}.Release|Any CPU.Build.0 = Release|Any CPU + {F2840BC7-0188-4606-9126-DADD0F5ABF7A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F2840BC7-0188-4606-9126-DADD0F5ABF7A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F2840BC7-0188-4606-9126-DADD0F5ABF7A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F2840BC7-0188-4606-9126-DADD0F5ABF7A}.Release|Any CPU.Build.0 = Release|Any CPU + {BD65D04F-08D5-40C1-8C24-77CA0BACB877}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BD65D04F-08D5-40C1-8C24-77CA0BACB877}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BD65D04F-08D5-40C1-8C24-77CA0BACB877}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BD65D04F-08D5-40C1-8C24-77CA0BACB877}.Release|Any CPU.Build.0 = Release|Any CPU + {78040F9E-3501-4A40-82DF-00A597710F35}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {78040F9E-3501-4A40-82DF-00A597710F35}.Debug|Any CPU.Build.0 = Debug|Any CPU + {78040F9E-3501-4A40-82DF-00A597710F35}.Release|Any CPU.ActiveCfg = Release|Any CPU + {78040F9E-3501-4A40-82DF-00A597710F35}.Release|Any CPU.Build.0 = Release|Any CPU + {0CE86223-D31D-4315-A1F5-87BA3EE1B844}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0CE86223-D31D-4315-A1F5-87BA3EE1B844}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0CE86223-D31D-4315-A1F5-87BA3EE1B844}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0CE86223-D31D-4315-A1F5-87BA3EE1B844}.Release|Any CPU.Build.0 = Release|Any CPU + {F1C58097-4C08-4D88-8976-6B3389391481}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F1C58097-4C08-4D88-8976-6B3389391481}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F1C58097-4C08-4D88-8976-6B3389391481}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F1C58097-4C08-4D88-8976-6B3389391481}.Release|Any CPU.Build.0 = Release|Any CPU + {077AA5F8-8B61-420C-A6B5-0150A66FDB34}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {077AA5F8-8B61-420C-A6B5-0150A66FDB34}.Debug|Any CPU.Build.0 = Debug|Any CPU + {077AA5F8-8B61-420C-A6B5-0150A66FDB34}.Release|Any CPU.ActiveCfg = Release|Any CPU + {077AA5F8-8B61-420C-A6B5-0150A66FDB34}.Release|Any CPU.Build.0 = Release|Any CPU + {36E2735F-CEAB-44C8-A6D1-2CDAFF399751}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {36E2735F-CEAB-44C8-A6D1-2CDAFF399751}.Debug|Any CPU.Build.0 = Debug|Any CPU + {36E2735F-CEAB-44C8-A6D1-2CDAFF399751}.Release|Any CPU.ActiveCfg = Release|Any CPU + {36E2735F-CEAB-44C8-A6D1-2CDAFF399751}.Release|Any CPU.Build.0 = Release|Any CPU + {C5BB573D-3030-4BCB-88B7-F6A85C32766C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C5BB573D-3030-4BCB-88B7-F6A85C32766C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C5BB573D-3030-4BCB-88B7-F6A85C32766C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C5BB573D-3030-4BCB-88B7-F6A85C32766C}.Release|Any CPU.Build.0 = Release|Any CPU + {527F645C-C1FC-406E-8479-81386C8ECF13}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {527F645C-C1FC-406E-8479-81386C8ECF13}.Debug|Any CPU.Build.0 = Debug|Any CPU + {527F645C-C1FC-406E-8479-81386C8ECF13}.Release|Any CPU.ActiveCfg = Release|Any CPU + {527F645C-C1FC-406E-8479-81386C8ECF13}.Release|Any CPU.Build.0 = Release|Any CPU + {D0AD9179-125C-40B2-A8EE-CD4C1EE24BB6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D0AD9179-125C-40B2-A8EE-CD4C1EE24BB6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D0AD9179-125C-40B2-A8EE-CD4C1EE24BB6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D0AD9179-125C-40B2-A8EE-CD4C1EE24BB6}.Release|Any CPU.Build.0 = Release|Any CPU + {E60895E5-79C4-447D-88B7-85CB5BA336A4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E60895E5-79C4-447D-88B7-85CB5BA336A4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E60895E5-79C4-447D-88B7-85CB5BA336A4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E60895E5-79C4-447D-88B7-85CB5BA336A4}.Release|Any CPU.Build.0 = Release|Any CPU + {90CB5DC4-C040-45C7-8900-9688B26405BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {90CB5DC4-C040-45C7-8900-9688B26405BC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {90CB5DC4-C040-45C7-8900-9688B26405BC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {90CB5DC4-C040-45C7-8900-9688B26405BC}.Release|Any CPU.Build.0 = Release|Any CPU + {37B135B0-DAFE-4616-B25C-1BDF32FC44A2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {37B135B0-DAFE-4616-B25C-1BDF32FC44A2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {37B135B0-DAFE-4616-B25C-1BDF32FC44A2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {37B135B0-DAFE-4616-B25C-1BDF32FC44A2}.Release|Any CPU.Build.0 = Release|Any CPU + {3B7B6317-1B85-4164-8E11-75574F80AE17}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3B7B6317-1B85-4164-8E11-75574F80AE17}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3B7B6317-1B85-4164-8E11-75574F80AE17}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3B7B6317-1B85-4164-8E11-75574F80AE17}.Release|Any CPU.Build.0 = Release|Any CPU + {1EDCD6D4-DF3A-4E3B-ABB6-C0D0B373EAB8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1EDCD6D4-DF3A-4E3B-ABB6-C0D0B373EAB8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1EDCD6D4-DF3A-4E3B-ABB6-C0D0B373EAB8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1EDCD6D4-DF3A-4E3B-ABB6-C0D0B373EAB8}.Release|Any CPU.Build.0 = Release|Any CPU + {73513786-B6C6-4A21-89C5-0FBDD0A46107}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {73513786-B6C6-4A21-89C5-0FBDD0A46107}.Debug|Any CPU.Build.0 = Debug|Any CPU + {73513786-B6C6-4A21-89C5-0FBDD0A46107}.Release|Any CPU.ActiveCfg = Release|Any CPU + {73513786-B6C6-4A21-89C5-0FBDD0A46107}.Release|Any CPU.Build.0 = Release|Any CPU + {690203F4-3CD5-4569-88D9-EE831EEA5F5F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {690203F4-3CD5-4569-88D9-EE831EEA5F5F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {690203F4-3CD5-4569-88D9-EE831EEA5F5F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {690203F4-3CD5-4569-88D9-EE831EEA5F5F}.Release|Any CPU.Build.0 = Release|Any CPU + {F6AC8D4A-EDD7-4514-8E8A-5BCB019864DB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F6AC8D4A-EDD7-4514-8E8A-5BCB019864DB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F6AC8D4A-EDD7-4514-8E8A-5BCB019864DB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F6AC8D4A-EDD7-4514-8E8A-5BCB019864DB}.Release|Any CPU.Build.0 = Release|Any CPU + {3D872C41-E226-45C8-89C1-9D3DBD7C73F2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3D872C41-E226-45C8-89C1-9D3DBD7C73F2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3D872C41-E226-45C8-89C1-9D3DBD7C73F2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3D872C41-E226-45C8-89C1-9D3DBD7C73F2}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {D64C1577-4929-4B60-939E-96DE1534891A} = {649A3FFA-182F-4E56-9717-E6A9A2BEC545} + {F2840BC7-0188-4606-9126-DADD0F5ABF7A} = {649A3FFA-182F-4E56-9717-E6A9A2BEC545} + {BD65D04F-08D5-40C1-8C24-77CA0BACB877} = {649A3FFA-182F-4E56-9717-E6A9A2BEC545} + {78040F9E-3501-4A40-82DF-00A597710F35} = {649A3FFA-182F-4E56-9717-E6A9A2BEC545} + {0CE86223-D31D-4315-A1F5-87BA3EE1B844} = {649A3FFA-182F-4E56-9717-E6A9A2BEC545} + {F1C58097-4C08-4D88-8976-6B3389391481} = {649A3FFA-182F-4E56-9717-E6A9A2BEC545} + {077AA5F8-8B61-420C-A6B5-0150A66FDB34} = {649A3FFA-182F-4E56-9717-E6A9A2BEC545} + {36E2735F-CEAB-44C8-A6D1-2CDAFF399751} = {649A3FFA-182F-4E56-9717-E6A9A2BEC545} + {C5BB573D-3030-4BCB-88B7-F6A85C32766C} = {CCD2960C-23CC-4AB4-B84D-60C7AAA52F4D} + {527F645C-C1FC-406E-8479-81386C8ECF13} = {CCD2960C-23CC-4AB4-B84D-60C7AAA52F4D} + {D0AD9179-125C-40B2-A8EE-CD4C1EE24BB6} = {CCD2960C-23CC-4AB4-B84D-60C7AAA52F4D} + {E60895E5-79C4-447D-88B7-85CB5BA336A4} = {CCD2960C-23CC-4AB4-B84D-60C7AAA52F4D} + {90CB5DC4-C040-45C7-8900-9688B26405BC} = {CCD2960C-23CC-4AB4-B84D-60C7AAA52F4D} + {37B135B0-DAFE-4616-B25C-1BDF32FC44A2} = {E400416D-2895-4512-9D17-90681EEC7E0A} + {3B7B6317-1B85-4164-8E11-75574F80AE17} = {649A3FFA-182F-4E56-9717-E6A9A2BEC545} + {1EDCD6D4-DF3A-4E3B-ABB6-C0D0B373EAB8} = {CCD2960C-23CC-4AB4-B84D-60C7AAA52F4D} + {73513786-B6C6-4A21-89C5-0FBDD0A46107} = {E400416D-2895-4512-9D17-90681EEC7E0A} + {690203F4-3CD5-4569-88D9-EE831EEA5F5F} = {E400416D-2895-4512-9D17-90681EEC7E0A} + {F6AC8D4A-EDD7-4514-8E8A-5BCB019864DB} = {E400416D-2895-4512-9D17-90681EEC7E0A} + {3D872C41-E226-45C8-89C1-9D3DBD7C73F2} = {E400416D-2895-4512-9D17-90681EEC7E0A} + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {4324B3B4-B60B-4E3C-91D8-59576B4E26DD} + EndGlobalSection +EndGlobal diff --git a/modules/cms-kit/Volo.CmsKit.sln.DotSettings b/modules/cms-kit/Volo.CmsKit.sln.DotSettings new file mode 100644 index 0000000000..cb0b2c919f --- /dev/null +++ b/modules/cms-kit/Volo.CmsKit.sln.DotSettings @@ -0,0 +1,23 @@ + + True + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + Required + Required + Required + Required + False + True + False + False + True + False + False + SQL + \ No newline at end of file diff --git a/modules/cms-kit/angular/.editorconfig b/modules/cms-kit/angular/.editorconfig new file mode 100644 index 0000000000..59d9a3a3e7 --- /dev/null +++ b/modules/cms-kit/angular/.editorconfig @@ -0,0 +1,16 @@ +# Editor configuration, see https://editorconfig.org +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +insert_final_newline = true +trim_trailing_whitespace = true + +[*.ts] +quote_type = single + +[*.md] +max_line_length = off +trim_trailing_whitespace = false diff --git a/modules/cms-kit/angular/.gitignore b/modules/cms-kit/angular/.gitignore new file mode 100644 index 0000000000..a8e3c659a1 --- /dev/null +++ b/modules/cms-kit/angular/.gitignore @@ -0,0 +1,48 @@ +# See http://help.github.com/ignore-files/ for more about ignoring files. + +# compiled output +/dist +/tmp +/out-tsc +# Only exists if Bazel was run +/bazel-out + +# dependencies +/node_modules + +# profiling files +chrome-profiler-events*.json +speed-measure-plugin*.json + +# IDEs and editors +/.idea +.project +.classpath +.c9/ +*.launch +.settings/ +*.sublime-workspace + +# IDE - VSCode +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +.history/* + +# misc +/.sass-cache +/connect.lock +/coverage +/libpeerconnection.log +npm-debug.log +yarn-error.log +testem.log +/typings + +# System Files +.DS_Store +Thumbs.db + +yarn.lock \ No newline at end of file diff --git a/modules/cms-kit/angular/README.md b/modules/cms-kit/angular/README.md new file mode 100644 index 0000000000..38d90cb368 --- /dev/null +++ b/modules/cms-kit/angular/README.md @@ -0,0 +1,27 @@ +# CmsKit + +This is a startup project based on the ABP framework. For more information, visit abp.io + +## Development server + +Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The app will automatically reload if you change any of the source files. + +## Code scaffolding + +Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`. + +## Build + +Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory. Use the `--prod` flag for a production build. + +## Running unit tests + +Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io). + +## Running end-to-end tests + +Run `ng e2e` to execute the end-to-end tests via [Protractor](http://www.protractortest.org/). + +## Further help + +To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI README](https://github.com/angular/angular-cli/blob/master/README.md). diff --git a/modules/cms-kit/angular/angular.json b/modules/cms-kit/angular/angular.json new file mode 100644 index 0000000000..b5692b9aec --- /dev/null +++ b/modules/cms-kit/angular/angular.json @@ -0,0 +1,202 @@ +{ + "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "version": 1, + "newProjectRoot": "projects", + "projects": { + "cms-kit": { + "projectType": "library", + "root": "projects/cms-kit", + "sourceRoot": "projects/cms-kit/src", + "prefix": "lib", + "architect": { + "build": { + "builder": "@angular-devkit/build-ng-packagr:build", + "options": { + "tsConfig": "projects/cms-kit/tsconfig.lib.json", + "project": "projects/cms-kit/ng-package.json" + }, + "configurations": { + "production": { + "tsConfig": "projects/cms-kit/tsconfig.lib.prod.json" + } + } + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "main": "projects/cms-kit/src/test.ts", + "tsConfig": "projects/cms-kit/tsconfig.spec.json", + "karmaConfig": "projects/cms-kit/karma.conf.js" + } + }, + "lint": { + "builder": "@angular-devkit/build-angular:tslint", + "options": { + "tsConfig": [ + "projects/cms-kit/tsconfig.lib.json", + "projects/cms-kit/tsconfig.spec.json" + ], + "exclude": ["**/node_modules/**"] + } + } + } + }, + "dev-app": { + "projectType": "application", + "schematics": { + "@schematics/angular:component": { + "style": "scss" + } + }, + "root": "projects/dev-app", + "sourceRoot": "projects/dev-app/src", + "prefix": "app", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:browser", + "options": { + "outputPath": "dist/dev-app", + "index": "projects/dev-app/src/index.html", + "main": "projects/dev-app/src/main.ts", + "polyfills": "projects/dev-app/src/polyfills.ts", + "tsConfig": "projects/dev-app/tsconfig.app.json", + "aot": true, + "assets": [ + "projects/dev-app/src/favicon.ico", + "projects/dev-app/src/assets" + ], + "styles": [ + { + "input": "node_modules/@fortawesome/fontawesome-free/css/all.min.css", + "inject": true, + "bundleName": "fontawesome-all.min" + }, + { + "input": "node_modules/@fortawesome/fontawesome-free/css/v4-shims.min.css", + "inject": true, + "bundleName": "fontawesome-v4-shims.min" + }, + { + "input": "node_modules/@swimlane/ngx-datatable/index.css", + "inject": true, + "bundleName": "ngx-datatable-index" + }, + { + "input": "node_modules/@swimlane/ngx-datatable/assets/icons.css", + "inject": true, + "bundleName": "ngx-datatable-icons" + }, + { + "input": "node_modules/@swimlane/ngx-datatable/themes/material.css", + "inject": true, + "bundleName": "ngx-datatable-material" + }, + { + "input": "node_modules/@abp/ng.theme.shared/styles/bootstrap-rtl.min.css", + "inject": false, + "bundleName": "bootstrap-rtl.min" + }, + { + "input": "node_modules/bootstrap/dist/css/bootstrap.min.css", + "inject": true, + "bundleName": "bootstrap-ltr.min" + }, + "projects/dev-app/src/styles.scss" + ], + "scripts": [] + }, + "configurations": { + "production": { + "tsConfig": "projects/dev-app/tsconfig.prod.json", + "fileReplacements": [ + { + "replace": "projects/dev-app/src/environments/environment.ts", + "with": "projects/dev-app/src/environments/environment.prod.ts" + } + ], + "optimization": true, + "outputHashing": "all", + "sourceMap": false, + "extractCss": true, + "namedChunks": false, + "extractLicenses": true, + "vendorChunk": false, + "buildOptimizer": true, + "budgets": [ + { + "type": "initial", + "maximumWarning": "2mb", + "maximumError": "5mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "6kb", + "maximumError": "10kb" + } + ] + } + } + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "options": { + "browserTarget": "dev-app:build" + }, + "configurations": { + "production": { + "browserTarget": "dev-app:build:production" + } + } + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "browserTarget": "dev-app:build" + } + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "main": "projects/dev-app/src/test.ts", + "polyfills": "projects/dev-app/src/polyfills.ts", + "tsConfig": "projects/dev-app/tsconfig.spec.json", + "karmaConfig": "projects/dev-app/karma.conf.js", + "assets": [ + "projects/dev-app/src/favicon.ico", + "projects/dev-app/src/assets" + ], + "styles": ["projects/dev-app/src/styles.scss"], + "scripts": [] + } + }, + "lint": { + "builder": "@angular-devkit/build-angular:tslint", + "options": { + "tsConfig": [ + "projects/dev-app/tsconfig.app.json", + "projects/dev-app/tsconfig.spec.json", + "projects/dev-app/e2e/tsconfig.json" + ], + "exclude": ["**/node_modules/**"] + } + }, + "e2e": { + "builder": "@angular-devkit/build-angular:protractor", + "options": { + "protractorConfig": "projects/dev-app/e2e/protractor.conf.js", + "devServerTarget": "dev-app:serve" + }, + "configurations": { + "production": { + "devServerTarget": "dev-app:serve:production" + } + } + } + } + } + }, + "cli": { + "analytics": false + }, + "defaultProject": "dev-app" +} diff --git a/modules/cms-kit/angular/package.json b/modules/cms-kit/angular/package.json new file mode 100644 index 0000000000..f162ebd366 --- /dev/null +++ b/modules/cms-kit/angular/package.json @@ -0,0 +1,58 @@ +{ + "name": "cms-kit", + "version": "0.0.0", + "scripts": { + "ng": "ng", + "start": "ng serve dev-app --open", + "build": "ng build cms-kit --prod", + "build:app": "npm run symlink:copy -- --no-watch && ng build dev-app --prod", + "symlink:copy": "symlink copy --angular --packages @my-company-name/cms-kit --prod", + "test": "ng test", + "lint": "ng lint", + "e2e": "ng e2e", + "compile:ivy": "yarn ngcc --properties es2015 browser module main --first-only --create-ivy-entry-points --tsconfig './tsconfig.prod.json' --source node_modules --async false", + "postinstall": "npm run compile:ivy" + }, + "private": true, + "dependencies": { + "@abp/ng.account": "~3.0.3", + "@abp/ng.identity": "~3.0.3", + "@abp/ng.setting-management": "~3.0.3", + "@abp/ng.tenant-management": "~3.0.3", + "@abp/ng.theme.basic": "~3.0.3", + "@angular/animations": "~10.0.0", + "@angular/common": "~10.0.0", + "@angular/compiler": "~10.0.0", + "@angular/core": "~10.0.0", + "@angular/forms": "~10.0.0", + "@angular/platform-browser": "~10.0.0", + "@angular/platform-browser-dynamic": "~10.0.0", + "@angular/router": "~10.0.0", + "rxjs": "~6.5.4", + "tslib": "^2.0.0", + "zone.js": "~0.10.2" + }, + "devDependencies": { + "@angular-devkit/build-angular": "~0.1000.0", + "@angular-devkit/build-ng-packagr": "~0.1000.0", + "@angular/cli": "~10.0.0", + "@angular/compiler-cli": "~10.0.0", + "@types/jasmine": "~3.5.0", + "@types/jasminewd2": "~2.0.3", + "@types/node": "^12.11.1", + "codelyzer": "^5.1.2", + "jasmine-core": "~3.5.0", + "jasmine-spec-reporter": "~5.0.0", + "karma": "~5.0.0", + "karma-chrome-launcher": "~3.1.0", + "karma-coverage-istanbul-reporter": "~3.0.2", + "karma-jasmine": "~3.3.0", + "karma-jasmine-html-reporter": "^1.5.0", + "ng-packagr": "^10.0.0", + "protractor": "~7.0.0", + "symlink-manager": "^1.5.0", + "ts-node": "~8.3.0", + "tslint": "~6.1.0", + "typescript": "~3.9.5" + } +} \ No newline at end of file diff --git a/modules/cms-kit/angular/projects/cms-kit/README.md b/modules/cms-kit/angular/projects/cms-kit/README.md new file mode 100644 index 0000000000..4174520f2c --- /dev/null +++ b/modules/cms-kit/angular/projects/cms-kit/README.md @@ -0,0 +1,24 @@ +# CmsKit + +This is a startup project based on the ABP framework. For more information, visit abp.io Note: Don't forget to add `--project cms-kit` or else it will be added to the default project in your `angular.json` file. + +## Build + +Run `ng build cms-kit` to build the project. The build artifacts will be stored in the `dist/` directory. + +## Publishing + +After building your library with `ng build cms-kit`, go to the dist folder `cd dist/cms-kit` and run `npm publish`. + +## Running unit tests + +Run `ng test cms-kit` to execute the unit tests via [Karma](https://karma-runner.github.io). + +## Further help + +To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI README](https://github.com/angular/angular-cli/blob/master/README.md). diff --git a/modules/cms-kit/angular/projects/cms-kit/config/ng-package.json b/modules/cms-kit/angular/projects/cms-kit/config/ng-package.json new file mode 100644 index 0000000000..c2e5f0483f --- /dev/null +++ b/modules/cms-kit/angular/projects/cms-kit/config/ng-package.json @@ -0,0 +1,7 @@ +{ + "$schema": "../../../node_modules/ng-packagr/ng-package.schema.json", + "dest": "../../dist/cms-kit/config", + "lib": { + "entryFile": "src/public-api.ts" + } +} diff --git a/modules/cms-kit/angular/projects/cms-kit/config/src/cms-kit-config.module.ts b/modules/cms-kit/angular/projects/cms-kit/config/src/cms-kit-config.module.ts new file mode 100644 index 0000000000..6f20218868 --- /dev/null +++ b/modules/cms-kit/angular/projects/cms-kit/config/src/cms-kit-config.module.ts @@ -0,0 +1,12 @@ +import { ModuleWithProviders, NgModule } from '@angular/core'; +import { MY_PROJECT_NAME_ROUTE_PROVIDERS } from './providers/route.provider'; + +@NgModule() +export class CmsKitConfigModule { + static forRoot(): ModuleWithProviders { + return { + ngModule: CmsKitConfigModule, + providers: [MY_PROJECT_NAME_ROUTE_PROVIDERS], + }; + } +} diff --git a/modules/cms-kit/angular/projects/cms-kit/config/src/enums/index.ts b/modules/cms-kit/angular/projects/cms-kit/config/src/enums/index.ts new file mode 100644 index 0000000000..3bda94b078 --- /dev/null +++ b/modules/cms-kit/angular/projects/cms-kit/config/src/enums/index.ts @@ -0,0 +1 @@ +export * from './route-names'; diff --git a/modules/cms-kit/angular/projects/cms-kit/config/src/enums/route-names.ts b/modules/cms-kit/angular/projects/cms-kit/config/src/enums/route-names.ts new file mode 100644 index 0000000000..c05735b0ec --- /dev/null +++ b/modules/cms-kit/angular/projects/cms-kit/config/src/enums/route-names.ts @@ -0,0 +1,3 @@ +export const enum eCmsKitRouteNames { + CmsKit = 'CmsKit', +} diff --git a/modules/cms-kit/angular/projects/cms-kit/config/src/providers/index.ts b/modules/cms-kit/angular/projects/cms-kit/config/src/providers/index.ts new file mode 100644 index 0000000000..fe08efba8c --- /dev/null +++ b/modules/cms-kit/angular/projects/cms-kit/config/src/providers/index.ts @@ -0,0 +1 @@ +export * from './route.provider'; diff --git a/modules/cms-kit/angular/projects/cms-kit/config/src/providers/route.provider.ts b/modules/cms-kit/angular/projects/cms-kit/config/src/providers/route.provider.ts new file mode 100644 index 0000000000..2fa8ce1bb8 --- /dev/null +++ b/modules/cms-kit/angular/projects/cms-kit/config/src/providers/route.provider.ts @@ -0,0 +1,27 @@ +import { eLayoutType, RoutesService } from '@abp/ng.core'; +import { eThemeSharedRouteNames } from '@abp/ng.theme.shared'; +import { APP_INITIALIZER } from '@angular/core'; +import { eCmsKitRouteNames } from '../enums/route-names'; + +export const MY_PROJECT_NAME_ROUTE_PROVIDERS = [ + { + provide: APP_INITIALIZER, + useFactory: configureRoutes, + deps: [RoutesService], + multi: true, + }, +]; + +export function configureRoutes(routes: RoutesService) { + return () => { + routes.add([ + { + path: '/cms-kit', + name: eCmsKitRouteNames.CmsKit, + iconClass: 'fas fa-book', + layout: eLayoutType.application, + order: 3, + }, + ]); + }; +} diff --git a/modules/cms-kit/angular/projects/cms-kit/config/src/public-api.ts b/modules/cms-kit/angular/projects/cms-kit/config/src/public-api.ts new file mode 100644 index 0000000000..a77eadc283 --- /dev/null +++ b/modules/cms-kit/angular/projects/cms-kit/config/src/public-api.ts @@ -0,0 +1,3 @@ +export * from './enums'; +export * from './cms-kit-config.module'; +export * from './providers'; diff --git a/modules/cms-kit/angular/projects/cms-kit/karma.conf.js b/modules/cms-kit/angular/projects/cms-kit/karma.conf.js new file mode 100644 index 0000000000..5a1214c588 --- /dev/null +++ b/modules/cms-kit/angular/projects/cms-kit/karma.conf.js @@ -0,0 +1,32 @@ +// Karma configuration file, see link for more information +// https://karma-runner.github.io/1.0/config/configuration-file.html + +module.exports = function (config) { + config.set({ + basePath: '', + frameworks: ['jasmine', '@angular-devkit/build-angular'], + plugins: [ + require('karma-jasmine'), + require('karma-chrome-launcher'), + require('karma-jasmine-html-reporter'), + require('karma-coverage-istanbul-reporter'), + require('@angular-devkit/build-angular/plugins/karma') + ], + client: { + clearContext: false // leave Jasmine Spec Runner output visible in browser + }, + coverageIstanbulReporter: { + dir: require('path').join(__dirname, '../../coverage/cms-kit'), + reports: ['html', 'lcovonly', 'text-summary'], + fixWebpackSourcePaths: true + }, + reporters: ['progress', 'kjhtml'], + port: 9876, + colors: true, + logLevel: config.LOG_INFO, + autoWatch: true, + browsers: ['Chrome'], + singleRun: false, + restartOnFileChange: true + }); +}; diff --git a/modules/cms-kit/angular/projects/cms-kit/ng-package.json b/modules/cms-kit/angular/projects/cms-kit/ng-package.json new file mode 100644 index 0000000000..26aa884e57 --- /dev/null +++ b/modules/cms-kit/angular/projects/cms-kit/ng-package.json @@ -0,0 +1,7 @@ +{ + "$schema": "../../node_modules/ng-packagr/ng-package.schema.json", + "dest": "../../dist/cms-kit", + "lib": { + "entryFile": "src/public-api.ts" + } +} \ No newline at end of file diff --git a/modules/cms-kit/angular/projects/cms-kit/ngcc.config.js b/modules/cms-kit/angular/projects/cms-kit/ngcc.config.js new file mode 100644 index 0000000000..c34df8ab72 --- /dev/null +++ b/modules/cms-kit/angular/projects/cms-kit/ngcc.config.js @@ -0,0 +1,7 @@ +module.exports = { + entryPoints: { + ".": {}, + "./config": {}, + "./dist": { ignore: true }, + }, +}; diff --git a/modules/cms-kit/angular/projects/cms-kit/package.json b/modules/cms-kit/angular/projects/cms-kit/package.json new file mode 100644 index 0000000000..1dea156a57 --- /dev/null +++ b/modules/cms-kit/angular/projects/cms-kit/package.json @@ -0,0 +1,13 @@ +{ + "name": "@my-company-name/cms-kit", + "version": "0.0.1", + "peerDependencies": { + "@angular/common": "^9.1.11", + "@angular/core": "^9.1.11", + "@abp/ng.core": ">=3.0.3", + "@abp/ng.theme.shared": ">=3.0.3" + }, + "dependencies": { + "tslib": "^2.0.0" +} +} diff --git a/modules/cms-kit/angular/projects/cms-kit/src/lib/cms-kit-routing.module.ts b/modules/cms-kit/angular/projects/cms-kit/src/lib/cms-kit-routing.module.ts new file mode 100644 index 0000000000..7079b008ff --- /dev/null +++ b/modules/cms-kit/angular/projects/cms-kit/src/lib/cms-kit-routing.module.ts @@ -0,0 +1,24 @@ +import { NgModule } from '@angular/core'; +import { DynamicLayoutComponent } from '@abp/ng.core'; +import { Routes, RouterModule } from '@angular/router'; +import { CmsKitComponent } from './components/cms-kit.component'; + +const routes: Routes = [ + { + path: '', + pathMatch: 'full', + component: DynamicLayoutComponent, + children: [ + { + path: '', + component: CmsKitComponent, + }, + ], + }, +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule], +}) +export class CmsKitRoutingModule {} diff --git a/modules/cms-kit/angular/projects/cms-kit/src/lib/cms-kit.component.spec.ts b/modules/cms-kit/angular/projects/cms-kit/src/lib/cms-kit.component.spec.ts new file mode 100644 index 0000000000..acd7e447a2 --- /dev/null +++ b/modules/cms-kit/angular/projects/cms-kit/src/lib/cms-kit.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { CmsKitComponent } from './cms-kit.component'; + +describe('CmsKitComponent', () => { + let component: CmsKitComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ CmsKitComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(CmsKitComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/modules/cms-kit/angular/projects/cms-kit/src/lib/cms-kit.module.ts b/modules/cms-kit/angular/projects/cms-kit/src/lib/cms-kit.module.ts new file mode 100644 index 0000000000..951dd8f33e --- /dev/null +++ b/modules/cms-kit/angular/projects/cms-kit/src/lib/cms-kit.module.ts @@ -0,0 +1,23 @@ +import { NgModule, NgModuleFactory, ModuleWithProviders } from '@angular/core'; +import { CoreModule, LazyModuleFactory } from '@abp/ng.core'; +import { ThemeSharedModule } from '@abp/ng.theme.shared'; +import { CmsKitComponent } from './components/cms-kit.component'; +import { CmsKitRoutingModule } from './cms-kit-routing.module'; + +@NgModule({ + declarations: [CmsKitComponent], + imports: [CoreModule, ThemeSharedModule, CmsKitRoutingModule], + exports: [CmsKitComponent], +}) +export class CmsKitModule { + static forChild(): ModuleWithProviders { + return { + ngModule: CmsKitModule, + providers: [], + }; + } + + static forLazy(): NgModuleFactory { + return new LazyModuleFactory(CmsKitModule.forChild()); + } +} diff --git a/modules/cms-kit/angular/projects/cms-kit/src/lib/cms-kit.service.spec.ts b/modules/cms-kit/angular/projects/cms-kit/src/lib/cms-kit.service.spec.ts new file mode 100644 index 0000000000..f488c97994 --- /dev/null +++ b/modules/cms-kit/angular/projects/cms-kit/src/lib/cms-kit.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { CmsKitService } from './cms-kit.service'; + +describe('CmsKitService', () => { + let service: CmsKitService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(CmsKitService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/modules/cms-kit/angular/projects/cms-kit/src/lib/components/cms-kit.component.ts b/modules/cms-kit/angular/projects/cms-kit/src/lib/components/cms-kit.component.ts new file mode 100644 index 0000000000..b6ef6589c5 --- /dev/null +++ b/modules/cms-kit/angular/projects/cms-kit/src/lib/components/cms-kit.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; +import { CmsKitService } from '../services/cms-kit.service'; + +@Component({ + selector: 'lib-cms-kit', + template: `

cms-kit works!

`, + styles: [], +}) +export class CmsKitComponent implements OnInit { + constructor(private service: CmsKitService) {} + + ngOnInit(): void { + this.service.sample().subscribe(console.log); + } +} diff --git a/modules/cms-kit/angular/projects/cms-kit/src/lib/services/cms-kit.service.ts b/modules/cms-kit/angular/projects/cms-kit/src/lib/services/cms-kit.service.ts new file mode 100644 index 0000000000..9e966cfbe1 --- /dev/null +++ b/modules/cms-kit/angular/projects/cms-kit/src/lib/services/cms-kit.service.ts @@ -0,0 +1,18 @@ +import { Injectable } from '@angular/core'; +import { RestService } from '@abp/ng.core'; + +@Injectable({ + providedIn: 'root', +}) +export class CmsKitService { + apiName = 'CmsKit'; + + constructor(private restService: RestService) {} + + sample() { + return this.restService.request( + { method: 'GET', url: '/api/CmsKit/sample' }, + { apiName: this.apiName } + ); + } +} diff --git a/modules/cms-kit/angular/projects/cms-kit/src/public-api.ts b/modules/cms-kit/angular/projects/cms-kit/src/public-api.ts new file mode 100644 index 0000000000..b07b030e09 --- /dev/null +++ b/modules/cms-kit/angular/projects/cms-kit/src/public-api.ts @@ -0,0 +1,7 @@ +/* + * Public API Surface of cms-kit + */ + +export * from './lib/components/cms-kit.component'; +export * from './lib/services/cms-kit.service'; +export * from './lib/cms-kit.module'; diff --git a/modules/cms-kit/angular/projects/cms-kit/src/test.ts b/modules/cms-kit/angular/projects/cms-kit/src/test.ts new file mode 100644 index 0000000000..303b32a220 --- /dev/null +++ b/modules/cms-kit/angular/projects/cms-kit/src/test.ts @@ -0,0 +1,26 @@ +// This file is required by karma.conf.js and loads recursively all the .spec and framework files + +import 'zone.js/dist/zone'; +import 'zone.js/dist/zone-testing'; +import { getTestBed } from '@angular/core/testing'; +import { + BrowserDynamicTestingModule, + platformBrowserDynamicTesting +} from '@angular/platform-browser-dynamic/testing'; + +declare const require: { + context(path: string, deep?: boolean, filter?: RegExp): { + keys(): string[]; + (id: string): T; + }; +}; + +// First, initialize the Angular testing environment. +getTestBed().initTestEnvironment( + BrowserDynamicTestingModule, + platformBrowserDynamicTesting() +); +// Then we find all the tests. +const context = require.context('./', true, /\.spec\.ts$/); +// And load the modules. +context.keys().map(context); diff --git a/modules/cms-kit/angular/projects/cms-kit/tsconfig.lib.json b/modules/cms-kit/angular/projects/cms-kit/tsconfig.lib.json new file mode 100644 index 0000000000..c433a69f62 --- /dev/null +++ b/modules/cms-kit/angular/projects/cms-kit/tsconfig.lib.json @@ -0,0 +1,17 @@ +{ + "extends": "../../tsconfig.prod.json", + "compilerOptions": { + "outDir": "../../out-tsc/lib", + "target": "es2015", + "declaration": true, + "inlineSources": true, + "types": [], + "lib": ["dom", "es2018"] + }, + "angularCompilerOptions": { + "skipTemplateCodegen": true, + "strictMetadataEmit": true, + "enableResourceInlining": true + }, + "exclude": ["src/test.ts", "**/*.spec.ts"] +} diff --git a/modules/cms-kit/angular/projects/cms-kit/tsconfig.lib.prod.json b/modules/cms-kit/angular/projects/cms-kit/tsconfig.lib.prod.json new file mode 100644 index 0000000000..cbae794224 --- /dev/null +++ b/modules/cms-kit/angular/projects/cms-kit/tsconfig.lib.prod.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.lib.json", + "angularCompilerOptions": { + "enableIvy": false + } +} diff --git a/modules/cms-kit/angular/projects/cms-kit/tsconfig.spec.json b/modules/cms-kit/angular/projects/cms-kit/tsconfig.spec.json new file mode 100644 index 0000000000..a9ea5ea114 --- /dev/null +++ b/modules/cms-kit/angular/projects/cms-kit/tsconfig.spec.json @@ -0,0 +1,17 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "../../out-tsc/spec", + "types": [ + "jasmine", + "node" + ] + }, + "files": [ + "src/test.ts" + ], + "include": [ + "**/*.spec.ts", + "**/*.d.ts" + ] +} diff --git a/modules/cms-kit/angular/projects/cms-kit/tslint.json b/modules/cms-kit/angular/projects/cms-kit/tslint.json new file mode 100644 index 0000000000..124133f849 --- /dev/null +++ b/modules/cms-kit/angular/projects/cms-kit/tslint.json @@ -0,0 +1,17 @@ +{ + "extends": "../../tslint.json", + "rules": { + "directive-selector": [ + true, + "attribute", + "lib", + "camelCase" + ], + "component-selector": [ + true, + "element", + "lib", + "kebab-case" + ] + } +} diff --git a/modules/cms-kit/angular/projects/dev-app/.browserslistrc b/modules/cms-kit/angular/projects/dev-app/.browserslistrc new file mode 100644 index 0000000000..80848532e4 --- /dev/null +++ b/modules/cms-kit/angular/projects/dev-app/.browserslistrc @@ -0,0 +1,12 @@ +# This file is used by the build system to adjust CSS and JS output to support the specified browsers below. +# For additional information regarding the format and rule options, please see: +# https://github.com/browserslist/browserslist#queries + +# You can see what browsers were selected by your queries by running: +# npx browserslist + +> 0.5% +last 2 versions +Firefox ESR +not dead +not IE 9-11 # For IE 9-11 support, remove 'not'. \ No newline at end of file diff --git a/modules/cms-kit/angular/projects/dev-app/e2e/protractor.conf.js b/modules/cms-kit/angular/projects/dev-app/e2e/protractor.conf.js new file mode 100644 index 0000000000..7c798cfff0 --- /dev/null +++ b/modules/cms-kit/angular/projects/dev-app/e2e/protractor.conf.js @@ -0,0 +1,32 @@ +// @ts-check +// Protractor configuration file, see link for more information +// https://github.com/angular/protractor/blob/master/lib/config.ts + +const { SpecReporter } = require('jasmine-spec-reporter'); + +/** + * @type { import("protractor").Config } + */ +exports.config = { + allScriptsTimeout: 11000, + specs: [ + './src/**/*.e2e-spec.ts' + ], + capabilities: { + browserName: 'chrome' + }, + directConnect: true, + baseUrl: 'http://localhost:4200/', + framework: 'jasmine', + jasmineNodeOpts: { + showColors: true, + defaultTimeoutInterval: 30000, + print: function() {} + }, + onPrepare() { + require('ts-node').register({ + project: require('path').join(__dirname, './tsconfig.json') + }); + jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } })); + } +}; \ No newline at end of file diff --git a/modules/cms-kit/angular/projects/dev-app/e2e/src/app.e2e-spec.ts b/modules/cms-kit/angular/projects/dev-app/e2e/src/app.e2e-spec.ts new file mode 100644 index 0000000000..e8eda49d2a --- /dev/null +++ b/modules/cms-kit/angular/projects/dev-app/e2e/src/app.e2e-spec.ts @@ -0,0 +1,23 @@ +import { AppPage } from './app.po'; +import { browser, logging } from 'protractor'; + +describe('workspace-project App', () => { + let page: AppPage; + + beforeEach(() => { + page = new AppPage(); + }); + + it('should display welcome message', () => { + page.navigateTo(); + expect(page.getTitleText()).toEqual('dev-app app is running!'); + }); + + afterEach(async () => { + // Assert that there are no errors emitted from the browser + const logs = await browser.manage().logs().get(logging.Type.BROWSER); + expect(logs).not.toContain(jasmine.objectContaining({ + level: logging.Level.SEVERE, + } as logging.Entry)); + }); +}); diff --git a/modules/cms-kit/angular/projects/dev-app/e2e/src/app.po.ts b/modules/cms-kit/angular/projects/dev-app/e2e/src/app.po.ts new file mode 100644 index 0000000000..b68475e0fc --- /dev/null +++ b/modules/cms-kit/angular/projects/dev-app/e2e/src/app.po.ts @@ -0,0 +1,11 @@ +import { browser, by, element } from 'protractor'; + +export class AppPage { + navigateTo(): Promise { + return browser.get(browser.baseUrl) as Promise; + } + + getTitleText(): Promise { + return element(by.css('app-root .content span')).getText() as Promise; + } +} diff --git a/modules/cms-kit/angular/projects/dev-app/e2e/tsconfig.json b/modules/cms-kit/angular/projects/dev-app/e2e/tsconfig.json new file mode 100644 index 0000000000..746a242801 --- /dev/null +++ b/modules/cms-kit/angular/projects/dev-app/e2e/tsconfig.json @@ -0,0 +1,13 @@ +{ + "extends": "../../../tsconfig.base.json", + "compilerOptions": { + "outDir": "../../../out-tsc/e2e", + "module": "commonjs", + "target": "es2018", + "types": [ + "jasmine", + "jasminewd2", + "node" + ] + } +} diff --git a/modules/cms-kit/angular/projects/dev-app/favicon.ico b/modules/cms-kit/angular/projects/dev-app/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..39695854d21146f87f3c65b27b9baef29b609255 GIT binary patch literal 102968 zcmeI537pq+{>Q&#(w&J=Nlo~pW0Qn59Wxb$bSNuPvRT%hqf4s;ZCSZ(OWK-7Y)i-r zZEQ`BWU(4$h17J>bWX=~%{0yb`I^3;@t%*GgB-i_?eTc}yx-r?{dphX@9!Ex5EGOS z^e-l;AAC?X2(CpQHEO@!pkhpLdbJ=(N(%M%L2%hITswWg{Go3(h~chiXMdP2K1AzcFXkM=vQ{WM`>iK5IQHnHPQRzt zxkvx;s7jSiY*7E1QRg0e@=fmruisv=!i!UmiT(7r-c?Q>^;)%O7fpC5@2#Ahhc^GJ zc5>$0C7GKhH6QZVg@0M|&$Vr0QyMMH=rZ<+jg^Mi%Dysf$mp&MT9hAtOjga5#7eo% zGP;fLU+3RXrM>z31*vgKJ@U>8o_Y89phy2Bf`-j1jQZ1)u}K$x6jT4?v(qwTGiKeA zHD<-h+f$OuP5Lb6qfu?Y7@Ji-V?ffhLFHz3NS$`{((5kWxw^xI2B+jSed3wQ-T>bO zj~sPJaQ+{=WDg3KW!zk;Y3|K(S*CgxBl++`JUy(6z(p?=ty|YGk=d|n7^S(%X_z(L|&WIn=HLt>ZQ_|ydUtr;T zdSyLY#Igrv4-by~9>>cSTZimE4LMSznFLY?oLkyLnpE zd)n5`UYXYPwE4GW&AoEptxvsn@modAv*ozES`5p2szyqSw75|tnh*SPR_=#sv+f=d zlXd;YV<*Sw)yg_Kt>4{U6VqF!?Yg&ZTtb^&qtfoEaN6A?nq)0b=~sSu#q5NPDi{9! z!EeU=ZAI;GUCnMqo>=FOrrDd*)+MxBwy?{Rtv608KRhmDU~0~B8C6pH#SZWN_11rn z?wXu8krq2UO-Zga>9YxGcN}@zg9(ZE&aIL)qusQ%NBpJl{mU}iT*ApMeBzBF40H2G z38NlQ!Drq%XJp*HX>X3t?6zw|a)sPpY3pXk^lG0TpRjB|w++Fi?MIf&ZaO77Cih_~ zf>*n)XrIxoL*9`Czsy{9b=vilKB#oog0)3#D0W%KC)=0CkLtRx6MnPg?*s0>vemnn zcIX%69+C08c0|)_Ip6GBS~+82-MnELucp8AHIBA#e%ix#cU`h>#+a@f`qUdcVqn8z z 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 Kp#2tJdH+9GLJime literal 0 HcmV?d00001 diff --git a/modules/cms-kit/angular/projects/dev-app/karma.conf.js b/modules/cms-kit/angular/projects/dev-app/karma.conf.js new file mode 100644 index 0000000000..6059f553f2 --- /dev/null +++ b/modules/cms-kit/angular/projects/dev-app/karma.conf.js @@ -0,0 +1,32 @@ +// Karma configuration file, see link for more information +// https://karma-runner.github.io/1.0/config/configuration-file.html + +module.exports = function (config) { + config.set({ + basePath: '', + frameworks: ['jasmine', '@angular-devkit/build-angular'], + plugins: [ + require('karma-jasmine'), + require('karma-chrome-launcher'), + require('karma-jasmine-html-reporter'), + require('karma-coverage-istanbul-reporter'), + require('@angular-devkit/build-angular/plugins/karma') + ], + client: { + clearContext: false // leave Jasmine Spec Runner output visible in browser + }, + coverageIstanbulReporter: { + dir: require('path').join(__dirname, '../../coverage/dev-app'), + reports: ['html', 'lcovonly', 'text-summary'], + fixWebpackSourcePaths: true + }, + reporters: ['progress', 'kjhtml'], + port: 9876, + colors: true, + logLevel: config.LOG_INFO, + autoWatch: true, + browsers: ['Chrome'], + singleRun: false, + restartOnFileChange: true + }); +}; diff --git a/modules/cms-kit/angular/projects/dev-app/src/app/app-routing.module.ts b/modules/cms-kit/angular/projects/dev-app/src/app/app-routing.module.ts new file mode 100644 index 0000000000..b2c95094c1 --- /dev/null +++ b/modules/cms-kit/angular/projects/dev-app/src/app/app-routing.module.ts @@ -0,0 +1,49 @@ +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; + +const routes: Routes = [ + { + path: '', + pathMatch: 'full', + loadChildren: () => import('./home/home.module').then((m) => m.HomeModule), + }, + { + path: 'account', + loadChildren: () => + import('@abp/ng.account').then((m) => + m.AccountModule.forLazy({ redirectUrl: '/' }) + ), + }, + { + path: 'identity', + loadChildren: () => + import('@abp/ng.identity').then((m) => m.IdentityModule.forLazy()), + }, + { + path: 'tenant-management', + loadChildren: () => + import('@abp/ng.tenant-management').then((m) => + m.TenantManagementModule.forLazy() + ), + }, + { + path: 'setting-management', + loadChildren: () => + import('@abp/ng.setting-management').then((m) => + m.SettingManagementModule.forLazy() + ), + }, + { + path: 'cms-kit', + loadChildren: () => + import('@my-company-name/cms-kit').then((m) => + m.CmsKitModule.forLazy() + ), + }, +]; + +@NgModule({ + imports: [RouterModule.forRoot(routes)], + exports: [RouterModule], +}) +export class AppRoutingModule {} diff --git a/modules/cms-kit/angular/projects/dev-app/src/app/app.component.ts b/modules/cms-kit/angular/projects/dev-app/src/app/app.component.ts new file mode 100644 index 0000000000..a26e745334 --- /dev/null +++ b/modules/cms-kit/angular/projects/dev-app/src/app/app.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-root', + template: ` + + + `, +}) +export class AppComponent {} diff --git a/modules/cms-kit/angular/projects/dev-app/src/app/app.module.ts b/modules/cms-kit/angular/projects/dev-app/src/app/app.module.ts new file mode 100644 index 0000000000..e97243133f --- /dev/null +++ b/modules/cms-kit/angular/projects/dev-app/src/app/app.module.ts @@ -0,0 +1,41 @@ +import { AccountConfigModule } from '@abp/ng.account/config'; +import { CoreModule } from '@abp/ng.core'; +import { IdentityConfigModule } from '@abp/ng.identity/config'; +import { SettingManagementConfigModule } from '@abp/ng.setting-management/config'; +import { TenantManagementConfigModule } from '@abp/ng.tenant-management/config'; +import { ThemeSharedModule } from '@abp/ng.theme.shared'; +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; +import { CmsKitConfigModule } from '@my-company-name/cms-kit/config'; +import { NgxsModule } from '@ngxs/store'; +import { environment } from '../environments/environment'; +import { AppRoutingModule } from './app-routing.module'; +import { AppComponent } from './app.component'; +import { APP_ROUTE_PROVIDER } from './route.provider'; +import { ThemeBasicModule } from '@abp/ng.theme.basic'; + +@NgModule({ + imports: [ + BrowserModule, + BrowserAnimationsModule, + AppRoutingModule, + CoreModule.forRoot({ + environment, + sendNullsAsQueryParam: false, + skipGetAppConfiguration: false, + }), + ThemeSharedModule.forRoot(), + AccountConfigModule.forRoot(), + IdentityConfigModule.forRoot(), + CmsKitConfigModule.forRoot(), + TenantManagementConfigModule.forRoot(), + SettingManagementConfigModule.forRoot(), + NgxsModule.forRoot(), + ThemeBasicModule.forRoot(), + ], + providers: [APP_ROUTE_PROVIDER], + declarations: [AppComponent], + bootstrap: [AppComponent], +}) +export class AppModule {} diff --git a/modules/cms-kit/angular/projects/dev-app/src/app/home/home-routing.module.ts b/modules/cms-kit/angular/projects/dev-app/src/app/home/home-routing.module.ts new file mode 100644 index 0000000000..634706a36c --- /dev/null +++ b/modules/cms-kit/angular/projects/dev-app/src/app/home/home-routing.module.ts @@ -0,0 +1,16 @@ +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; +import { HomeComponent } from './home.component'; + +const routes: Routes = [ + { + path: '', + children: [{ path: '', component: HomeComponent }], + }, +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule], +}) +export class HomeRoutingModule {} diff --git a/modules/cms-kit/angular/projects/dev-app/src/app/home/home.component.html b/modules/cms-kit/angular/projects/dev-app/src/app/home/home.component.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/modules/cms-kit/angular/projects/dev-app/src/app/home/home.component.ts b/modules/cms-kit/angular/projects/dev-app/src/app/home/home.component.ts new file mode 100644 index 0000000000..ab1f354e89 --- /dev/null +++ b/modules/cms-kit/angular/projects/dev-app/src/app/home/home.component.ts @@ -0,0 +1,7 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-home', + templateUrl: './home.component.html', +}) +export class HomeComponent {} diff --git a/modules/cms-kit/angular/projects/dev-app/src/app/home/home.module.ts b/modules/cms-kit/angular/projects/dev-app/src/app/home/home.module.ts new file mode 100644 index 0000000000..72d20ccc65 --- /dev/null +++ b/modules/cms-kit/angular/projects/dev-app/src/app/home/home.module.ts @@ -0,0 +1,10 @@ +import { NgModule } from '@angular/core'; +import { SharedModule } from '../shared/shared.module'; +import { HomeRoutingModule } from './home-routing.module'; +import { HomeComponent } from './home.component'; + +@NgModule({ + declarations: [HomeComponent], + imports: [SharedModule, HomeRoutingModule], +}) +export class HomeModule {} diff --git a/modules/cms-kit/angular/projects/dev-app/src/app/route.provider.ts b/modules/cms-kit/angular/projects/dev-app/src/app/route.provider.ts new file mode 100644 index 0000000000..a412259466 --- /dev/null +++ b/modules/cms-kit/angular/projects/dev-app/src/app/route.provider.ts @@ -0,0 +1,25 @@ +import { RoutesService, eLayoutType } from '@abp/ng.core'; +import { APP_INITIALIZER } from '@angular/core'; + +export const APP_ROUTE_PROVIDER = [ + { + provide: APP_INITIALIZER, + useFactory: configureRoutes, + deps: [RoutesService], + multi: true, + }, +]; + +function configureRoutes(routes: RoutesService) { + return () => { + routes.add([ + { + path: '/', + name: 'Home', + iconClass: 'fas fa-home', + order: 1, + layout: eLayoutType.application, + }, + ]); + }; +} diff --git a/modules/cms-kit/angular/projects/dev-app/src/app/shared/shared.module.ts b/modules/cms-kit/angular/projects/dev-app/src/app/shared/shared.module.ts new file mode 100644 index 0000000000..1f268b4572 --- /dev/null +++ b/modules/cms-kit/angular/projects/dev-app/src/app/shared/shared.module.ts @@ -0,0 +1,26 @@ +import { CoreModule } from '@abp/ng.core'; +import { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap'; +import { NgModule } from '@angular/core'; +import { ThemeBasicModule } from '@abp/ng.theme.basic'; +import { ThemeSharedModule } from '@abp/ng.theme.shared'; +import { NgxValidateCoreModule } from '@ngx-validate/core'; + +@NgModule({ + declarations: [], + imports: [ + CoreModule, + ThemeSharedModule, + ThemeBasicModule, + NgbDropdownModule, + NgxValidateCoreModule, + ], + exports: [ + CoreModule, + ThemeSharedModule, + ThemeBasicModule, + NgbDropdownModule, + NgxValidateCoreModule, + ], + providers: [], +}) +export class SharedModule {} diff --git a/modules/cms-kit/angular/projects/dev-app/src/assets/.gitkeep b/modules/cms-kit/angular/projects/dev-app/src/assets/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/modules/cms-kit/angular/projects/dev-app/src/environments/environment.prod.ts b/modules/cms-kit/angular/projects/dev-app/src/environments/environment.prod.ts new file mode 100644 index 0000000000..6850f7102a --- /dev/null +++ b/modules/cms-kit/angular/projects/dev-app/src/environments/environment.prod.ts @@ -0,0 +1,24 @@ +export const environment = { + production: true, + application: { + name: 'CmsKit', + logoUrl: '', + }, + oAuthConfig: { + issuer: 'https://localhost:44318', + clientId: 'CmsKit_ConsoleTestApp', + dummyClientSecret: '1q2w3e*', + scope: 'CmsKit', + showDebugInformation: true, + oidc: false, + requireHttps: true, + }, + apis: { + default: { + url: 'https://localhost:44318', + }, + CmsKit: { + url: 'https://localhost:44371', + }, + }, +}; diff --git a/modules/cms-kit/angular/projects/dev-app/src/environments/environment.ts b/modules/cms-kit/angular/projects/dev-app/src/environments/environment.ts new file mode 100644 index 0000000000..f1381092b1 --- /dev/null +++ b/modules/cms-kit/angular/projects/dev-app/src/environments/environment.ts @@ -0,0 +1,24 @@ +export const environment = { + production: false, + application: { + name: 'CmsKit', + logoUrl: '', + }, + oAuthConfig: { + issuer: 'https://localhost:44318', + clientId: 'CmsKit_ConsoleTestApp', + dummyClientSecret: '1q2w3e*', + scope: 'CmsKit', + showDebugInformation: true, + oidc: false, + requireHttps: true, + }, + apis: { + default: { + url: 'https://localhost:44318', + }, + CmsKit: { + url: 'https://localhost:44371', + }, + }, +}; diff --git a/modules/cms-kit/angular/projects/dev-app/src/index.html b/modules/cms-kit/angular/projects/dev-app/src/index.html new file mode 100644 index 0000000000..067936da71 --- /dev/null +++ b/modules/cms-kit/angular/projects/dev-app/src/index.html @@ -0,0 +1,13 @@ + + + + + DevApp + + + + + + + + diff --git a/modules/cms-kit/angular/projects/dev-app/src/main.ts b/modules/cms-kit/angular/projects/dev-app/src/main.ts new file mode 100644 index 0000000000..c7b673cf44 --- /dev/null +++ b/modules/cms-kit/angular/projects/dev-app/src/main.ts @@ -0,0 +1,12 @@ +import { enableProdMode } from '@angular/core'; +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; + +import { AppModule } from './app/app.module'; +import { environment } from './environments/environment'; + +if (environment.production) { + enableProdMode(); +} + +platformBrowserDynamic().bootstrapModule(AppModule) + .catch(err => console.error(err)); diff --git a/modules/cms-kit/angular/projects/dev-app/src/polyfills.ts b/modules/cms-kit/angular/projects/dev-app/src/polyfills.ts new file mode 100644 index 0000000000..6e00c561ed --- /dev/null +++ b/modules/cms-kit/angular/projects/dev-app/src/polyfills.ts @@ -0,0 +1,66 @@ +/*************************************************************************************************** + * Load `$localize` onto the global scope - used if i18n tags appear in Angular templates. + */ +import '@angular/localize/init'; +/** + * This file includes polyfills needed by Angular and is loaded before the app. + * You can add your own extra polyfills to this file. + * + * This file is divided into 2 sections: + * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers. + * 2. Application imports. Files imported after ZoneJS that should be loaded before your main + * file. + * + * The current setup is for so-called "evergreen" browsers; the last versions of browsers that + * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera), + * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile. + * + * Learn more in https://angular.io/guide/browser-support + */ + +/*************************************************************************************************** + * BROWSER POLYFILLS + */ + +/** IE10 and IE11 requires the following for NgClass support on SVG elements */ +// import 'classlist.js'; // Run `npm install --save classlist.js`. + +/** + * Web Animations `@angular/platform-browser/animations` + * Only required if AnimationBuilder is used within the application and using IE/Edge or Safari. + * Standard animation support in Angular DOES NOT require any polyfills (as of Angular 6.0). + */ +// import 'web-animations-js'; // Run `npm install --save web-animations-js`. + +/** + * By default, zone.js will patch all possible macroTask and DomEvents + * user can disable parts of macroTask/DomEvents patch by setting following flags + * because those flags need to be set before `zone.js` being loaded, and webpack + * will put import in the top of bundle, so user need to create a separate file + * in this directory (for example: zone-flags.ts), and put the following flags + * into that file, and then add the following code before importing zone.js. + * import './zone-flags'; + * + * The flags allowed in zone-flags.ts are listed here. + * + * The following flags will work for all browsers. + * + * (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame + * (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick + * (window as any).__zone_symbol__UNPATCHED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames + * + * in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js + * with the following flag, it will bypass `zone.js` patch for IE/Edge + * + * (window as any).__Zone_enable_cross_context_check = true; + * + */ + +/*************************************************************************************************** + * Zone JS is required by default for Angular itself. + */ +import 'zone.js/dist/zone'; // Included with Angular CLI. + +/*************************************************************************************************** + * APPLICATION IMPORTS + */ diff --git a/modules/cms-kit/angular/projects/dev-app/src/styles.scss b/modules/cms-kit/angular/projects/dev-app/src/styles.scss new file mode 100644 index 0000000000..90d4ee0072 --- /dev/null +++ b/modules/cms-kit/angular/projects/dev-app/src/styles.scss @@ -0,0 +1 @@ +/* You can add global styles to this file, and also import other style files */ diff --git a/modules/cms-kit/angular/projects/dev-app/src/test.ts b/modules/cms-kit/angular/projects/dev-app/src/test.ts new file mode 100644 index 0000000000..50193eb0f2 --- /dev/null +++ b/modules/cms-kit/angular/projects/dev-app/src/test.ts @@ -0,0 +1,25 @@ +// This file is required by karma.conf.js and loads recursively all the .spec and framework files + +import 'zone.js/dist/zone-testing'; +import { getTestBed } from '@angular/core/testing'; +import { + BrowserDynamicTestingModule, + platformBrowserDynamicTesting +} from '@angular/platform-browser-dynamic/testing'; + +declare const require: { + context(path: string, deep?: boolean, filter?: RegExp): { + keys(): string[]; + (id: string): T; + }; +}; + +// First, initialize the Angular testing environment. +getTestBed().initTestEnvironment( + BrowserDynamicTestingModule, + platformBrowserDynamicTesting() +); +// Then we find all the tests. +const context = require.context('./', true, /\.spec\.ts$/); +// And load the modules. +context.keys().map(context); diff --git a/modules/cms-kit/angular/projects/dev-app/tsconfig.app.json b/modules/cms-kit/angular/projects/dev-app/tsconfig.app.json new file mode 100644 index 0000000000..406dd61a4a --- /dev/null +++ b/modules/cms-kit/angular/projects/dev-app/tsconfig.app.json @@ -0,0 +1,14 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "../../out-tsc/app", + "types": [] + }, + "files": [ + "src/main.ts", + "src/polyfills.ts" + ], + "include": [ + "src/**/*.d.ts" + ] +} diff --git a/modules/cms-kit/angular/projects/dev-app/tsconfig.prod.json b/modules/cms-kit/angular/projects/dev-app/tsconfig.prod.json new file mode 100644 index 0000000000..3d4cab2c18 --- /dev/null +++ b/modules/cms-kit/angular/projects/dev-app/tsconfig.prod.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.prod.json", + "compilerOptions": { + "outDir": "../../out-tsc/app", + "types": [] + }, + "files": ["src/main.ts", "src/polyfills.ts"], + "include": ["src/**/*.d.ts"] +} diff --git a/modules/cms-kit/angular/projects/dev-app/tsconfig.spec.json b/modules/cms-kit/angular/projects/dev-app/tsconfig.spec.json new file mode 100644 index 0000000000..ed5461c09c --- /dev/null +++ b/modules/cms-kit/angular/projects/dev-app/tsconfig.spec.json @@ -0,0 +1,18 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "../../out-tsc/spec", + "types": [ + "jasmine", + "node" + ] + }, + "files": [ + "src/test.ts", + "src/polyfills.ts" + ], + "include": [ + "src/**/*.spec.ts", + "src/**/*.d.ts" + ] +} diff --git a/modules/cms-kit/angular/projects/dev-app/tslint.json b/modules/cms-kit/angular/projects/dev-app/tslint.json new file mode 100644 index 0000000000..19e8161a0b --- /dev/null +++ b/modules/cms-kit/angular/projects/dev-app/tslint.json @@ -0,0 +1,17 @@ +{ + "extends": "../../tslint.json", + "rules": { + "directive-selector": [ + true, + "attribute", + "app", + "camelCase" + ], + "component-selector": [ + true, + "element", + "app", + "kebab-case" + ] + } +} diff --git a/modules/cms-kit/angular/tsconfig.base.json b/modules/cms-kit/angular/tsconfig.base.json new file mode 100644 index 0000000000..c315ff5654 --- /dev/null +++ b/modules/cms-kit/angular/tsconfig.base.json @@ -0,0 +1,13 @@ +{ + "extends": "./tsconfig.prod.json", + "compilerOptions": { + "paths": { + "@my-company-name/cms-kit": [ + "projects/cms-kit/src/public-api.ts" + ], + "@my-company-name/cms-kit/config": [ + "projects/cms-kit/config/src/public-api.ts" + ] + } + } +} diff --git a/modules/cms-kit/angular/tsconfig.json b/modules/cms-kit/angular/tsconfig.json new file mode 100644 index 0000000000..3e169eac5c --- /dev/null +++ b/modules/cms-kit/angular/tsconfig.json @@ -0,0 +1,23 @@ +/* + This is a "Solution Style" tsconfig.json file, and is used by editors and TypeScript’s language server to improve development experience. + It is not intended to be used to perform a compilation. + + To learn more about this file see: https://angular.io/config/solution-tsconfig. +*/ +{ + "files": [], + "references": [ + { + "path": "./projects/cms-kit/tsconfig.lib.json" + }, + { + "path": "./projects/cms-kit/tsconfig.spec.json" + }, + { + "path": "./projects/dev-app/tsconfig.app.json" + }, + { + "path": "./projects/dev-app/tsconfig.spec.json" + } + ] +} \ No newline at end of file diff --git a/modules/cms-kit/angular/tsconfig.prod.json b/modules/cms-kit/angular/tsconfig.prod.json new file mode 100644 index 0000000000..8cbc5cd8a7 --- /dev/null +++ b/modules/cms-kit/angular/tsconfig.prod.json @@ -0,0 +1,20 @@ +{ + "compileOnSave": false, + "compilerOptions": { + "baseUrl": "./", + "outDir": "./dist/out-tsc", + "sourceMap": true, + "declaration": false, + "downlevelIteration": true, + "experimentalDecorators": true, + "module": "esnext", + "moduleResolution": "node", + "importHelpers": true, + "target": "es2015", + "lib": ["es2018", "dom"] + }, + "angularCompilerOptions": { + "fullTemplateTypeCheck": true, + "strictInjectionParameters": true + } +} diff --git a/modules/cms-kit/angular/tslint.json b/modules/cms-kit/angular/tslint.json new file mode 100644 index 0000000000..def88d1c87 --- /dev/null +++ b/modules/cms-kit/angular/tslint.json @@ -0,0 +1,136 @@ +{ + "extends": "tslint:recommended", + "rulesDirectory": [ + "codelyzer" + ], + "rules": { + "align": { + "options": [ + "parameters", + "statements" + ] + }, + "array-type": false, + "arrow-return-shorthand": true, + "curly": true, + "deprecation": { + "severity": "warning" + }, + "eofline": true, + "import-blacklist": [ + true, + "rxjs/Rx" + ], + "import-spacing": true, + "indent": { + "options": [ + "spaces" + ] + }, + "max-classes-per-file": false, + "max-line-length": [ + true, + 140 + ], + "member-ordering": [ + true, + { + "order": [ + "static-field", + "instance-field", + "static-method", + "instance-method" + ] + } + ], + "no-console": [ + true, + "debug", + "info", + "time", + "timeEnd", + "trace" + ], + "no-empty": false, + "no-inferrable-types": [ + true, + "ignore-params" + ], + "no-non-null-assertion": true, + "no-redundant-jsdoc": true, + "no-switch-case-fall-through": true, + "no-var-requires": false, + "object-literal-key-quotes": [ + true, + "as-needed" + ], + "quotemark": [ + true, + "single" + ], + "semicolon": { + "options": [ + "always" + ] + }, + "space-before-function-paren": { + "options": { + "anonymous": "never", + "asyncArrow": "always", + "constructor": "never", + "method": "never", + "named": "never" + } + }, + "typedef-whitespace": { + "options": [ + { + "call-signature": "nospace", + "index-signature": "nospace", + "parameter": "nospace", + "property-declaration": "nospace", + "variable-declaration": "nospace" + }, + { + "call-signature": "onespace", + "index-signature": "onespace", + "parameter": "onespace", + "property-declaration": "onespace", + "variable-declaration": "onespace" + } + ] + }, + "variable-name": { + "options": [ + "ban-keywords", + "check-format", + "allow-pascal-case" + ] + }, + "whitespace": { + "options": [ + "check-branch", + "check-decl", + "check-operator", + "check-separator", + "check-type", + "check-typecast" + ] + }, + "component-class-suffix": true, + "contextual-lifecycle": true, + "directive-class-suffix": true, + "no-conflicting-lifecycle": true, + "no-host-metadata-property": true, + "no-input-rename": true, + "no-inputs-metadata-property": true, + "no-output-native": true, + "no-output-on-prefix": true, + "no-output-rename": true, + "no-outputs-metadata-property": true, + "template-banana-in-box": true, + "template-no-negated-async": true, + "use-lifecycle-interface": true, + "use-pipe-transform-interface": true + } +} diff --git a/modules/cms-kit/common.props b/modules/cms-kit/common.props new file mode 100644 index 0000000000..0e2bf35066 --- /dev/null +++ b/modules/cms-kit/common.props @@ -0,0 +1,13 @@ + + + latest + 0.1.0 + $(NoWarn);CS1591 + module + + + + + + + \ No newline at end of file diff --git a/modules/cms-kit/database/Dockerfile b/modules/cms-kit/database/Dockerfile new file mode 100644 index 0000000000..6257db9899 --- /dev/null +++ b/modules/cms-kit/database/Dockerfile @@ -0,0 +1,20 @@ +FROM mcr.microsoft.com/dotnet/core/sdk:3.0-buster AS build +COPY . . + +WORKDIR /templates/service/host/IdentityServerHost +RUN dotnet restore +RUN dotnet ef migrations script -i -o migrations-IdentityServerHost.sql + +WORKDIR /templates/service/host/Volo.CmsKit.Host +RUN dotnet restore +RUN dotnet ef migrations script -i -o migrations-CmsKit.sql + +FROM mcr.microsoft.com/mssql-tools AS final +WORKDIR /src +COPY --from=build /templates/service/host/IdentityServerHost/migrations-IdentityServerHost.sql migrations-IdentityServerHost.sql +COPY --from=build /templates/service/host/Volo.CmsKit.Host/migrations-CmsKit.sql migrations-CmsKit.sql +COPY --from=build /templates/service/database/entrypoint.sh . +RUN /bin/bash -c "sed -i $'s/\r$//' entrypoint.sh" +RUN chmod +x ./entrypoint.sh + +ENTRYPOINT ["./entrypoint.sh"] \ No newline at end of file diff --git a/modules/cms-kit/database/entrypoint.sh b/modules/cms-kit/database/entrypoint.sh new file mode 100644 index 0000000000..dd9e4d6610 --- /dev/null +++ b/modules/cms-kit/database/entrypoint.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +until /opt/mssql-tools/bin/sqlcmd -S sqlserver -U SA -P $SA_PASSWORD -Q 'SELECT name FROM master.sys.databases'; do +>&2 echo "SQL Server is starting up" +sleep 1 +done + +/opt/mssql-tools/bin/sqlcmd -S sqlserver -U SA -P $SA_PASSWORD -Q "CREATE DATABASE [$IdentityServer_DB]" +/opt/mssql-tools/bin/sqlcmd -S sqlserver -U SA -P $SA_PASSWORD -Q "CREATE DATABASE [$CmsKit_DB]" + +/opt/mssql-tools/bin/sqlcmd -d $IdentityServer_DB -S sqlserver -U sa -P $SA_PASSWORD -i migrations-IdentityServerHost.sql +/opt/mssql-tools/bin/sqlcmd -d $CmsKit_DB -S sqlserver -U sa -P $SA_PASSWORD -i migrations-CmsKit.sql \ No newline at end of file diff --git a/modules/cms-kit/docker-compose.migrations.yml b/modules/cms-kit/docker-compose.migrations.yml new file mode 100644 index 0000000000..7897fdc250 --- /dev/null +++ b/modules/cms-kit/docker-compose.migrations.yml @@ -0,0 +1,13 @@ +version: '3.4' + +services: + migrations: + build: + context: ../../ + dockerfile: templates/service/database/Dockerfile + depends_on: + - sqlserver + environment: + - IdentityServer_DB=CmsKit_Identity + - CmsKit_DB=CmsKit_ModuleDb + - SA_PASSWORD=yourStrong(!)Password diff --git a/modules/cms-kit/docker-compose.override.yml b/modules/cms-kit/docker-compose.override.yml new file mode 100644 index 0000000000..94b9df0c22 --- /dev/null +++ b/modules/cms-kit/docker-compose.override.yml @@ -0,0 +1,29 @@ +version: '3.4' + +services: + sqlserver: + environment: + - SA_PASSWORD=yourStrong(!)Password + - ACCEPT_EULA=Y + ports: + - "51599:1433" + + identity-server: + environment: + - ASPNETCORE_URLS=http://0.0.0.0:80 + - ConnectionStrings__Default=Server=sqlserver;Database=CmsKit_Identity;Trusted_Connection=True;MultipleActiveResultSets=true;User=sa;Password=yourStrong(!)Password;Integrated Security=false + - ConnectionStrings__SqlServerCache=Server=sqlserver;Database=CmsKit_Cache;Trusted_Connection=True;MultipleActiveResultSets=true;User=sa;Password=yourStrong(!)Password;Integrated Security=false + ports: + - "51600:80" + + cms-kit: + environment: + - ASPNETCORE_URLS=http://0.0.0.0:80 + - ConnectionStrings__Default=Server=sqlserver;Database=CmsKit_ModuleDb;Trusted_Connection=True;MultipleActiveResultSets=true;User=sa;Password=yourStrong(!)Password;Integrated Security=false + - ConnectionStrings__AbpSettingManagement=Server=sqlserver;Database=CmsKit_Identity;Trusted_Connection=True;MultipleActiveResultSets=true;User=sa;Password=yourStrong(!)Password;Integrated Security=false + - ConnectionStrings__AbpPermissionManagement=Server=sqlserver;Database=CmsKit_Identity;Trusted_Connection=True;MultipleActiveResultSets=true;User=sa;Password=yourStrong(!)Password;Integrated Security=false + - ConnectionStrings__AbpAuditLogging=Server=sqlserver;Database=CmsKit_Identity;Trusted_Connection=True;MultipleActiveResultSets=true;User=sa;Password=yourStrong(!)Password;Integrated Security=false + - ConnectionStrings__SqlServerCache=Server=sqlserver;Database=CmsKit_Cache;Trusted_Connection=True;MultipleActiveResultSets=true;User=sa;Password=yourStrong(!)Password;Integrated Security=false + - AuthServer__Authority=http://identity-server + ports: + - "51601:80" \ No newline at end of file diff --git a/modules/cms-kit/docker-compose.yml b/modules/cms-kit/docker-compose.yml new file mode 100644 index 0000000000..564fd5ac06 --- /dev/null +++ b/modules/cms-kit/docker-compose.yml @@ -0,0 +1,25 @@ +version: '3.4' + +services: + sqlserver: + image: mcr.microsoft.com/mssql/server + volumes: + - dbdata:/var/opt/mssql + + identity-server: + build: + context: ../../ + dockerfile: templates/service/host/IdentityServerHost/Dockerfile + depends_on: + - sqlserver + + cms-kit: + build: + context: ../../ + dockerfile: templates/service/host/Volo.CmsKit.Host/Dockerfile + depends_on: + - sqlserver + - identity-server + +volumes: + dbdata: \ No newline at end of file diff --git a/modules/cms-kit/host/Volo.CmsKit.Host.Shared/MultiTenancy/MultiTenancyConsts.cs b/modules/cms-kit/host/Volo.CmsKit.Host.Shared/MultiTenancy/MultiTenancyConsts.cs new file mode 100644 index 0000000000..8c222ee1ce --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Host.Shared/MultiTenancy/MultiTenancyConsts.cs @@ -0,0 +1,10 @@ +namespace Volo.CmsKit.MultiTenancy +{ + public static class MultiTenancyConsts + { + /* Enable/disable multi-tenancy in a single point + * to test your module with multi-tenancy. + */ + public const bool IsEnabled = false; + } +} diff --git a/modules/cms-kit/host/Volo.CmsKit.Host.Shared/Volo.CmsKit.Host.Shared.csproj b/modules/cms-kit/host/Volo.CmsKit.Host.Shared/Volo.CmsKit.Host.Shared.csproj new file mode 100644 index 0000000000..3f8c167b98 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Host.Shared/Volo.CmsKit.Host.Shared.csproj @@ -0,0 +1,10 @@ + + + + + + netstandard2.0 + Volo.CmsKit + + + diff --git a/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/CmsKitHttpApiHostModule.cs b/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/CmsKitHttpApiHostModule.cs new file mode 100644 index 0000000000..c63d28081f --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/CmsKitHttpApiHostModule.cs @@ -0,0 +1,185 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Security.Claims; +using IdentityModel; +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Cors; +using Microsoft.AspNetCore.DataProtection; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; +using Volo.CmsKit.EntityFrameworkCore; +using Volo.CmsKit.MultiTenancy; +using StackExchange.Redis; +using Microsoft.OpenApi.Models; +using Swashbuckle.AspNetCore.Swagger; +using Volo.Abp; +using Volo.Abp.AspNetCore.MultiTenancy; +using Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy; +using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared; +using Volo.Abp.AspNetCore.Serilog; +using Volo.Abp.AuditLogging.EntityFrameworkCore; +using Volo.Abp.Autofac; +using Volo.Abp.Caching; +using Volo.Abp.Caching.StackExchangeRedis; +using Volo.Abp.EntityFrameworkCore; +using Volo.Abp.EntityFrameworkCore.SqlServer; +using Volo.Abp.Localization; +using Volo.Abp.Modularity; +using Volo.Abp.MultiTenancy; +using Volo.Abp.PermissionManagement.EntityFrameworkCore; +using Volo.Abp.Security.Claims; +using Volo.Abp.SettingManagement.EntityFrameworkCore; +using Volo.Abp.VirtualFileSystem; + +namespace Volo.CmsKit +{ + [DependsOn( + typeof(CmsKitApplicationModule), + typeof(CmsKitEntityFrameworkCoreModule), + typeof(CmsKitHttpApiModule), + typeof(AbpAspNetCoreMvcUiMultiTenancyModule), + typeof(AbpAutofacModule), + typeof(AbpCachingStackExchangeRedisModule), + typeof(AbpEntityFrameworkCoreSqlServerModule), + typeof(AbpAuditLoggingEntityFrameworkCoreModule), + typeof(AbpPermissionManagementEntityFrameworkCoreModule), + typeof(AbpSettingManagementEntityFrameworkCoreModule), + typeof(AbpAspNetCoreSerilogModule) + )] + public class CmsKitHttpApiHostModule : AbpModule + { + private const string DefaultCorsPolicyName = "Default"; + + public override void ConfigureServices(ServiceConfigurationContext context) + { + var hostingEnvironment = context.Services.GetHostingEnvironment(); + var configuration = context.Services.GetConfiguration(); + + Configure(options => + { + options.UseSqlServer(); + }); + + Configure(options => + { + options.IsEnabled = MultiTenancyConsts.IsEnabled; + }); + + if (hostingEnvironment.IsDevelopment()) + { + Configure(options => + { + options.FileSets.ReplaceEmbeddedByPhysical(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}..{0}src{0}Volo.CmsKit.Domain.Shared", Path.DirectorySeparatorChar))); + options.FileSets.ReplaceEmbeddedByPhysical(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}..{0}src{0}Volo.CmsKit.Domain", Path.DirectorySeparatorChar))); + options.FileSets.ReplaceEmbeddedByPhysical(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}..{0}src{0}Volo.CmsKit.Application.Contracts", Path.DirectorySeparatorChar))); + options.FileSets.ReplaceEmbeddedByPhysical(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}..{0}src{0}Volo.CmsKit.Application", Path.DirectorySeparatorChar))); + }); + } + + context.Services.AddSwaggerGen( + options => + { + options.SwaggerDoc("v1", new OpenApiInfo { Title = "CmsKit API", Version = "v1" }); + options.DocInclusionPredicate((docName, description) => true); + options.CustomSchemaIds(type => type.FullName); + }); + + Configure(options => + { + options.Languages.Add(new LanguageInfo("cs", "cs", "Čeština")); + options.Languages.Add(new LanguageInfo("en", "en", "English")); + options.Languages.Add(new LanguageInfo("pt-BR", "pt-BR", "Português")); + options.Languages.Add(new LanguageInfo("ru", "ru", "Русский")); + options.Languages.Add(new LanguageInfo("tr", "tr", "Türkçe")); + options.Languages.Add(new LanguageInfo("zh-Hans", "zh-Hans", "简体中文")); + options.Languages.Add(new LanguageInfo("zh-Hant", "zh-Hant", "繁體中文")); + }); + + //Updates AbpClaimTypes to be compatible with identity server claims. + AbpClaimTypes.UserId = JwtClaimTypes.Subject; + AbpClaimTypes.UserName = JwtClaimTypes.Name; + AbpClaimTypes.Role = JwtClaimTypes.Role; + AbpClaimTypes.Email = JwtClaimTypes.Email; + + context.Services.AddAuthentication("Bearer") + .AddIdentityServerAuthentication(options => + { + options.Authority = configuration["AuthServer:Authority"]; + options.RequireHttpsMetadata = false; + options.ApiName = "CmsKit"; + }); + + Configure(options => + { + options.KeyPrefix = "CmsKit:"; + }); + + if (!hostingEnvironment.IsDevelopment()) + { + var redis = ConnectionMultiplexer.Connect(configuration["Redis:Configuration"]); + context.Services + .AddDataProtection() + .PersistKeysToStackExchangeRedis(redis, "CmsKit-Protection-Keys"); + } + + context.Services.AddCors(options => + { + options.AddPolicy(DefaultCorsPolicyName, builder => + { + builder + .WithOrigins( + configuration["App:CorsOrigins"] + .Split(",", StringSplitOptions.RemoveEmptyEntries) + .Select(o => o.RemovePostFix("/")) + .ToArray() + ) + .WithAbpExposedHeaders() + .SetIsOriginAllowedToAllowWildcardSubdomains() + .AllowAnyHeader() + .AllowAnyMethod() + .AllowCredentials(); + }); + }); + } + + public override void OnApplicationInitialization(ApplicationInitializationContext context) + { + var app = context.GetApplicationBuilder(); + var env = context.GetEnvironment(); + + if (env.IsDevelopment()) + { + app.UseDeveloperExceptionPage(); + } + else + { + app.UseErrorPage(); + app.UseHsts(); + } + + app.UseHttpsRedirection(); + app.UseCorrelationId(); + app.UseVirtualFiles(); + app.UseRouting(); + app.UseCors(DefaultCorsPolicyName); + app.UseAuthentication(); + app.UseAbpClaimsMap(); + if (MultiTenancyConsts.IsEnabled) + { + app.UseMultiTenancy(); + } + app.UseAbpRequestLocalization(); + app.UseAuthorization(); + app.UseSwagger(); + app.UseSwaggerUI(options => + { + options.SwaggerEndpoint("/swagger/v1/swagger.json", "Support APP API"); + }); + app.UseAuditing(); + app.UseAbpSerilogEnrichers(); + app.UseConfiguredEndpoints(); + } + } +} diff --git a/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/Controllers/HomeController.cs b/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/Controllers/HomeController.cs new file mode 100644 index 0000000000..a9d544e8af --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/Controllers/HomeController.cs @@ -0,0 +1,13 @@ +using Microsoft.AspNetCore.Mvc; +using Volo.Abp.AspNetCore.Mvc; + +namespace Volo.CmsKit.Controllers +{ + public class HomeController : AbpController + { + public ActionResult Index() + { + return Redirect("~/swagger"); + } + } +} diff --git a/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/Dockerfile b/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/Dockerfile new file mode 100644 index 0000000000..c13abce9a3 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/Dockerfile @@ -0,0 +1,18 @@ +FROM mcr.microsoft.com/dotnet/core/aspnet:3.0-buster-slim AS base +WORKDIR /app +EXPOSE 80 + +FROM mcr.microsoft.com/dotnet/core/sdk:3.0-buster AS build +WORKDIR /src +COPY . . +WORKDIR /src/templates/service/host/Volo.CmsKit.HttpApi.Host +RUN dotnet restore -nowarn:msb3202,nu1503 +RUN dotnet build --no-restore -c Release -o /app + +FROM build AS publish +RUN dotnet publish --no-restore -c Release -o /app + +FROM base AS final +WORKDIR /app +COPY --from=publish /app . +ENTRYPOINT ["dotnet", "Volo.CmsKit.HttpApi.Host.dll"] diff --git a/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/EntityFrameworkCore/CmsKitHttpApiHostMigrationsDbContext.cs b/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/EntityFrameworkCore/CmsKitHttpApiHostMigrationsDbContext.cs new file mode 100644 index 0000000000..c31c977ebe --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/EntityFrameworkCore/CmsKitHttpApiHostMigrationsDbContext.cs @@ -0,0 +1,21 @@ +using Microsoft.EntityFrameworkCore; +using Volo.Abp.EntityFrameworkCore; + +namespace Volo.CmsKit.EntityFrameworkCore +{ + public class CmsKitHttpApiHostMigrationsDbContext : AbpDbContext + { + public CmsKitHttpApiHostMigrationsDbContext(DbContextOptions options) + : base(options) + { + + } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + + modelBuilder.ConfigureCmsKit(); + } + } +} diff --git a/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/EntityFrameworkCore/CmsKitHttpApiHostMigrationsDbContextFactory.cs b/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/EntityFrameworkCore/CmsKitHttpApiHostMigrationsDbContextFactory.cs new file mode 100644 index 0000000000..3a6dbb47ad --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/EntityFrameworkCore/CmsKitHttpApiHostMigrationsDbContextFactory.cs @@ -0,0 +1,29 @@ +using System.IO; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Design; +using Microsoft.Extensions.Configuration; + +namespace Volo.CmsKit.EntityFrameworkCore +{ + public class CmsKitHttpApiHostMigrationsDbContextFactory : IDesignTimeDbContextFactory + { + public CmsKitHttpApiHostMigrationsDbContext CreateDbContext(string[] args) + { + var configuration = BuildConfiguration(); + + var builder = new DbContextOptionsBuilder() + .UseSqlServer(configuration.GetConnectionString("CmsKit")); + + return new CmsKitHttpApiHostMigrationsDbContext(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/cms-kit/host/Volo.CmsKit.HttpApi.Host/Program.cs b/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/Program.cs new file mode 100644 index 0000000000..7349f8eb0c --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/Program.cs @@ -0,0 +1,51 @@ +using System; +using System.IO; +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Hosting; +using Serilog; +using Serilog.Events; + +namespace Volo.CmsKit +{ + public class Program + { + public static int Main(string[] args) + { + Log.Logger = new LoggerConfiguration() +#if DEBUG + .MinimumLevel.Debug() +#else + .MinimumLevel.Information() +#endif + .MinimumLevel.Override("Microsoft", LogEventLevel.Information) + .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/cms-kit/host/Volo.CmsKit.HttpApi.Host/Properties/launchSettings.json b/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/Properties/launchSettings.json new file mode 100644 index 0000000000..48d1823cea --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/Properties/launchSettings.json @@ -0,0 +1,27 @@ +{ + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "https://localhost:44371", + "sslPort": 44371 + } + }, + "profiles": { + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "Volo.CmsKit.DemoApp": { + "commandName": "Project", + "launchBrowser": true, + "applicationUrl": "https://localhost:44371", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} \ No newline at end of file diff --git a/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/Startup.cs b/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/Startup.cs new file mode 100644 index 0000000000..bfbaaadfa4 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/Startup.cs @@ -0,0 +1,21 @@ +using System; +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; + +namespace Volo.CmsKit +{ + 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/cms-kit/host/Volo.CmsKit.HttpApi.Host/Volo.CmsKit.HttpApi.Host.csproj b/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/Volo.CmsKit.HttpApi.Host.csproj new file mode 100644 index 0000000000..3fb091137d --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/Volo.CmsKit.HttpApi.Host.csproj @@ -0,0 +1,43 @@ + + + + + + netcoreapp3.1 + Volo.CmsKit + true + Volo.CmsKit-c2d31439-b723-48e2-b061-5ebd7aeb6010 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/appsettings.json b/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/appsettings.json new file mode 100644 index 0000000000..e7fade92a5 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/appsettings.json @@ -0,0 +1,15 @@ +{ + "App": { + "CorsOrigins": "https://*.CmsKit.com,http://localhost:4200" + }, + "ConnectionStrings": { + "Default": "Server=(LocalDb)\\MSSQLLocalDB;Database=CmsKit_Main;Trusted_Connection=True;MultipleActiveResultSets=true", + "CmsKit": "Server=(LocalDb)\\MSSQLLocalDB;Database=CmsKit_Module;Trusted_Connection=True;MultipleActiveResultSets=true" + }, + "Redis": { + "Configuration": "127.0.0.1" + }, + "AuthServer": { + "Authority": "https://localhost:44318/" + } +} diff --git a/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/yarn.lock b/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/yarn.lock new file mode 100644 index 0000000000..fb57ccd13a --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/yarn.lock @@ -0,0 +1,4 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/CmsKitIdentityServerModule.cs b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/CmsKitIdentityServerModule.cs new file mode 100644 index 0000000000..faf90a3fc2 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/CmsKitIdentityServerModule.cs @@ -0,0 +1,222 @@ +using System; +using System.Linq; +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Cors; +using Microsoft.AspNetCore.DataProtection; +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; +using Volo.CmsKit.MultiTenancy; +using StackExchange.Redis; +using Microsoft.OpenApi.Models; +using Swashbuckle.AspNetCore.Swagger; +using Volo.Abp; +using Volo.Abp.Account; +using Volo.Abp.Account.Web; +using Volo.Abp.AspNetCore.Authentication.JwtBearer; +using Volo.Abp.AspNetCore.Mvc; +using Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy; +using Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic; +using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared; +using Volo.Abp.AspNetCore.Serilog; +using Volo.Abp.Auditing; +using Volo.Abp.AuditLogging.EntityFrameworkCore; +using Volo.Abp.Autofac; +using Volo.Abp.Caching; +using Volo.Abp.Caching.StackExchangeRedis; +using Volo.Abp.Data; +using Volo.Abp.EntityFrameworkCore; +using Volo.Abp.EntityFrameworkCore.SqlServer; +using Volo.Abp.FeatureManagement; +using Volo.Abp.Identity; +using Volo.Abp.Identity.EntityFrameworkCore; +using Volo.Abp.IdentityServer.EntityFrameworkCore; +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.HttpApi; +using Volo.Abp.PermissionManagement.Identity; +using Volo.Abp.SettingManagement.EntityFrameworkCore; +using Volo.Abp.TenantManagement; +using Volo.Abp.TenantManagement.EntityFrameworkCore; +using Volo.Abp.Threading; +using Volo.Abp.UI.Navigation.Urls; + +namespace Volo.CmsKit +{ + [DependsOn( + typeof(AbpAccountWebIdentityServerModule), + typeof(AbpAccountApplicationModule), + typeof(AbpAspNetCoreMvcUiMultiTenancyModule), + typeof(AbpAspNetCoreMvcModule), + typeof(AbpAspNetCoreMvcUiBasicThemeModule), + typeof(AbpAuditLoggingEntityFrameworkCoreModule), + typeof(AbpAutofacModule), + typeof(AbpCachingStackExchangeRedisModule), + typeof(AbpEntityFrameworkCoreSqlServerModule), + typeof(AbpIdentityEntityFrameworkCoreModule), + typeof(AbpIdentityApplicationModule), + typeof(AbpIdentityHttpApiModule), + typeof(AbpIdentityServerEntityFrameworkCoreModule), + typeof(AbpPermissionManagementDomainIdentityModule), + typeof(AbpPermissionManagementEntityFrameworkCoreModule), + typeof(AbpPermissionManagementApplicationModule), + typeof(AbpPermissionManagementHttpApiModule), + typeof(AbpSettingManagementEntityFrameworkCoreModule), + typeof(AbpFeatureManagementApplicationModule), + typeof(AbpTenantManagementEntityFrameworkCoreModule), + typeof(AbpTenantManagementApplicationModule), + typeof(AbpTenantManagementHttpApiModule), + typeof(AbpAspNetCoreAuthenticationJwtBearerModule), + typeof(CmsKitApplicationContractsModule), + typeof(AbpAspNetCoreSerilogModule) + )] + public class CmsKitIdentityServerModule : AbpModule + { + private const string DefaultCorsPolicyName = "Default"; + + public override void ConfigureServices(ServiceConfigurationContext context) + { + var hostingEnvironment = context.Services.GetHostingEnvironment(); + var configuration = context.Services.GetConfiguration(); + + Configure(options => + { + options.UseSqlServer(); + }); + + context.Services.AddSwaggerGen( + options => + { + options.SwaggerDoc("v1", new OpenApiInfo { Title = "CmsKit API", Version = "v1" }); + options.DocInclusionPredicate((docName, description) => true); + options.CustomSchemaIds(type => type.FullName); + }); + + Configure(options => + { + options.Languages.Add(new LanguageInfo("cs", "cs", "Čeština")); + options.Languages.Add(new LanguageInfo("en", "en", "English")); + options.Languages.Add(new LanguageInfo("pt-BR", "pt-BR", "Português")); + options.Languages.Add(new LanguageInfo("ru", "ru", "Русский")); + options.Languages.Add(new LanguageInfo("tr", "tr", "Türkçe")); + options.Languages.Add(new LanguageInfo("zh-Hans", "zh-Hans", "简体中文")); + options.Languages.Add(new LanguageInfo("zh-Hant", "zh-Hant", "繁體中文")); + }); + + Configure(options => + { + //options.IsEnabledForGetRequests = true; + options.ApplicationName = "AuthServer"; + }); + + Configure(options => + { + options.Applications["MVC"].RootUrl = configuration["App:SelfUrl"]; + }); + + context.Services.AddAuthentication() + .AddIdentityServerAuthentication(options => + { + options.Authority = configuration["AuthServer:Authority"]; + options.RequireHttpsMetadata = false; + options.ApiName = configuration["AuthServer:ApiName"]; + }); + + Configure(options => + { + options.KeyPrefix = "CmsKit:"; + }); + + Configure(options => + { + options.IsEnabled = MultiTenancyConsts.IsEnabled; + }); + + if (!hostingEnvironment.IsDevelopment()) + { + var redis = ConnectionMultiplexer.Connect(configuration["Redis:Configuration"]); + context.Services + .AddDataProtection() + .PersistKeysToStackExchangeRedis(redis, "CmsKit-Protection-Keys"); + } + + context.Services.AddCors(options => + { + options.AddPolicy(DefaultCorsPolicyName, builder => + { + builder + .WithOrigins( + configuration["App:CorsOrigins"] + .Split(",", StringSplitOptions.RemoveEmptyEntries) + .Select(o => o.RemovePostFix("/")) + .ToArray() + ) + .WithAbpExposedHeaders() + .SetIsOriginAllowedToAllowWildcardSubdomains() + .AllowAnyHeader() + .AllowAnyMethod() + .AllowCredentials(); + }); + }); + } + + public override void OnApplicationInitialization(ApplicationInitializationContext context) + { + var app = context.GetApplicationBuilder(); + var env = context.GetEnvironment(); + + if (env.IsDevelopment()) + { + app.UseDeveloperExceptionPage(); + } + else + { + app.UseErrorPage(); + app.UseHsts(); + } + + app.UseHttpsRedirection(); + app.UseCorrelationId(); + app.UseVirtualFiles(); + app.UseRouting(); + app.UseCors(DefaultCorsPolicyName); + app.UseAuthentication(); + app.UseJwtTokenMiddleware(); + + if (MultiTenancyConsts.IsEnabled) + { + app.UseMultiTenancy(); + } + + app.UseAbpRequestLocalization(); + app.UseIdentityServer(); + app.UseAuthorization(); + app.UseSwagger(); + app.UseSwaggerUI(options => + { + options.SwaggerEndpoint("/swagger/v1/swagger.json", "Support APP API"); + }); + app.UseAuditing(); + app.UseAbpSerilogEnrichers(); + app.UseConfiguredEndpoints(); + + SeedData(context); + } + + private void SeedData(ApplicationInitializationContext context) + { + AsyncHelper.RunSync(async () => + { + using (var scope = context.ServiceProvider.CreateScope()) + { + await scope.ServiceProvider + .GetRequiredService() + .SeedAsync(); + } + }); + } + } +} diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/Dockerfile b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/Dockerfile new file mode 100644 index 0000000000..bc353a0abd --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/Dockerfile @@ -0,0 +1,18 @@ +FROM mcr.microsoft.com/dotnet/core/aspnet:3.0-buster-slim AS base +WORKDIR /app +EXPOSE 80 + +FROM mcr.microsoft.com/dotnet/core/sdk:3.0-buster AS build +WORKDIR /src +COPY . . +WORKDIR /src/templates/service/host/Volo.CmsKit.IdentityServer +RUN dotnet restore -nowarn:msb3202,nu1503 +RUN dotnet build --no-restore -c Release -o /app + +FROM build AS publish +RUN dotnet publish --no-restore -c Release -o /app + +FROM base AS final +WORKDIR /app +COPY --from=publish /app . +ENTRYPOINT ["dotnet", "Volo.CmsKit.IdentityServer.dll"] diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/EntityFrameworkCore/IdentityServerHostMigrationsDbContext.cs b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/EntityFrameworkCore/IdentityServerHostMigrationsDbContext.cs new file mode 100644 index 0000000000..b0bd516dee --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/EntityFrameworkCore/IdentityServerHostMigrationsDbContext.cs @@ -0,0 +1,32 @@ +using Microsoft.EntityFrameworkCore; +using Volo.Abp.AuditLogging.EntityFrameworkCore; +using Volo.Abp.EntityFrameworkCore; +using Volo.Abp.Identity.EntityFrameworkCore; +using Volo.Abp.IdentityServer.EntityFrameworkCore; +using Volo.Abp.PermissionManagement.EntityFrameworkCore; +using Volo.Abp.SettingManagement.EntityFrameworkCore; +using Volo.Abp.TenantManagement.EntityFrameworkCore; + +namespace Volo.CmsKit.EntityFrameworkCore +{ + public class IdentityServerHostMigrationsDbContext : AbpDbContext + { + public IdentityServerHostMigrationsDbContext(DbContextOptions options) + : base(options) + { + + } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + + modelBuilder.ConfigurePermissionManagement(); + modelBuilder.ConfigureSettingManagement(); + modelBuilder.ConfigureAuditLogging(); + modelBuilder.ConfigureIdentity(); + modelBuilder.ConfigureIdentityServer(); + modelBuilder.ConfigureTenantManagement(); + } + } +} diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/EntityFrameworkCore/IdentityServerHostMigrationsDbContextFactory.cs b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/EntityFrameworkCore/IdentityServerHostMigrationsDbContextFactory.cs new file mode 100644 index 0000000000..f6e80d62ec --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/EntityFrameworkCore/IdentityServerHostMigrationsDbContextFactory.cs @@ -0,0 +1,29 @@ +using System.IO; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Design; +using Microsoft.Extensions.Configuration; + +namespace Volo.CmsKit.EntityFrameworkCore +{ + public class IdentityServerHostMigrationsDbContextFactory : IDesignTimeDbContextFactory + { + public IdentityServerHostMigrationsDbContext CreateDbContext(string[] args) + { + var configuration = BuildConfiguration(); + + var builder = new DbContextOptionsBuilder() + .UseSqlServer(configuration.GetConnectionString("Default")); + + return new IdentityServerHostMigrationsDbContext(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/cms-kit/host/Volo.CmsKit.IdentityServer/IdentityServer/IdentityServerDataSeedContributor.cs b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/IdentityServer/IdentityServerDataSeedContributor.cs new file mode 100644 index 0000000000..c245c663f8 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/IdentityServer/IdentityServerDataSeedContributor.cs @@ -0,0 +1,218 @@ +using Microsoft.Extensions.Configuration; +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using Volo.Abp.Authorization.Permissions; +using Volo.Abp.Data; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Guids; +using Volo.Abp.IdentityServer.ApiResources; +using Volo.Abp.IdentityServer.Clients; +using Volo.Abp.IdentityServer.IdentityResources; +using Volo.Abp.PermissionManagement; +using Volo.Abp.Uow; + +namespace Volo.CmsKit.IdentityServer +{ + public class IdentityServerDataSeedContributor : IDataSeedContributor, ITransientDependency + { + private readonly IApiResourceRepository _apiResourceRepository; + private readonly IClientRepository _clientRepository; + private readonly IIdentityResourceDataSeeder _identityResourceDataSeeder; + private readonly IGuidGenerator _guidGenerator; + private readonly IPermissionDataSeeder _permissionDataSeeder; + private readonly IConfiguration _configuration; + + public IdentityServerDataSeedContributor( + IClientRepository clientRepository, + IApiResourceRepository apiResourceRepository, + IIdentityResourceDataSeeder identityResourceDataSeeder, + IGuidGenerator guidGenerator, + IPermissionDataSeeder permissionDataSeeder, + IConfiguration configuration) + { + _clientRepository = clientRepository; + _apiResourceRepository = apiResourceRepository; + _identityResourceDataSeeder = identityResourceDataSeeder; + _guidGenerator = guidGenerator; + _permissionDataSeeder = permissionDataSeeder; + _configuration = configuration; + } + + [UnitOfWork] + public virtual async Task SeedAsync(DataSeedContext context) + { + await _identityResourceDataSeeder.CreateStandardResourcesAsync(); + await CreateApiResourcesAsync(); + await CreateClientsAsync(); + } + + private async Task CreateApiResourcesAsync() + { + var commonApiUserClaims = new[] + { + "email", + "email_verified", + "name", + "phone_number", + "phone_number_verified", + "role" + }; + + await CreateApiResourceAsync("CmsKit", commonApiUserClaims); + } + + private async Task CreateApiResourceAsync(string name, IEnumerable claims) + { + var apiResource = await _apiResourceRepository.FindByNameAsync(name); + if (apiResource == null) + { + apiResource = await _apiResourceRepository.InsertAsync( + new ApiResource( + _guidGenerator.Create(), + name, + name + " API" + ), + autoSave: true + ); + } + + foreach (var claim in claims) + { + if (apiResource.FindClaim(claim) == null) + { + apiResource.AddUserClaim(claim); + } + } + + return await _apiResourceRepository.UpdateAsync(apiResource); + } + + private async Task CreateClientsAsync() + { + const string commonSecret = "E5Xd4yMqjP5kjWFKrYgySBju6JVfCzMyFp7n2QmMrME="; + + var commonScopes = new[] + { + "email", + "openid", + "profile", + "role", + "phone", + "address", + "CmsKit" + }; + + var configurationSection = _configuration.GetSection("IdentityServer:Clients"); + + //Web Client + var webClientId = configurationSection["CmsKit_Web:ClientId"]; + if (!webClientId.IsNullOrWhiteSpace()) + { + var webClientRootUrl = configurationSection["CmsKit_Web:RootUrl"].EnsureEndsWith('/'); + await CreateClientAsync( + webClientId, + commonScopes, + new[] { "hybrid" }, + commonSecret, + redirectUri: $"{webClientRootUrl}signin-oidc", + postLogoutRedirectUri: $"{webClientRootUrl}signout-callback-oidc" + ); + } + + //Console Test Client + var consoleClientId = configurationSection["CmsKit_ConsoleTestApp:ClientId"]; + if (!consoleClientId.IsNullOrWhiteSpace()) + { + await CreateClientAsync( + consoleClientId, + commonScopes, + new[] { "password", "client_credentials" }, + commonSecret + ); + } + } + + private async Task CreateClientAsync( + string name, + IEnumerable scopes, + IEnumerable grantTypes, + string secret, + string redirectUri = null, + string postLogoutRedirectUri = null, + IEnumerable permissions = null) + { + var client = await _clientRepository.FindByCliendIdAsync(name); + if (client == null) + { + client = await _clientRepository.InsertAsync( + new Client( + _guidGenerator.Create(), + name + ) + { + ClientName = name, + ProtocolType = "oidc", + Description = name, + AlwaysIncludeUserClaimsInIdToken = true, + AllowOfflineAccess = true, + AbsoluteRefreshTokenLifetime = 31536000, //365 days + AccessTokenLifetime = 31536000, //365 days + AuthorizationCodeLifetime = 300, + IdentityTokenLifetime = 300, + RequireConsent = false + }, + autoSave: true + ); + } + + foreach (var scope in scopes) + { + if (client.FindScope(scope) == null) + { + client.AddScope(scope); + } + } + + foreach (var grantType in grantTypes) + { + if (client.FindGrantType(grantType) == null) + { + client.AddGrantType(grantType); + } + } + + if (client.FindSecret(secret) == null) + { + client.AddSecret(secret); + } + + if (redirectUri != null) + { + if (client.FindRedirectUri(redirectUri) == null) + { + client.AddRedirectUri(redirectUri); + } + } + + if (postLogoutRedirectUri != null) + { + if (client.FindPostLogoutRedirectUri(postLogoutRedirectUri) == null) + { + client.AddPostLogoutRedirectUri(postLogoutRedirectUri); + } + } + + if (permissions != null) + { + await _permissionDataSeeder.SeedAsync( + ClientPermissionValueProvider.ProviderName, + name, + permissions + ); + } + + return await _clientRepository.UpdateAsync(client); + } + } +} diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/Migrations/20200624023331_Initial.Designer.cs b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/Migrations/20200624023331_Initial.Designer.cs new file mode 100644 index 0000000000..406a3d3f68 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/Migrations/20200624023331_Initial.Designer.cs @@ -0,0 +1,1861 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Volo.CmsKit.EntityFrameworkCore; +using Volo.Abp.EntityFrameworkCore; + +namespace Volo.CmsKit.Migrations +{ + [DbContext(typeof(IdentityServerHostMigrationsDbContext))] + [Migration("20200624023331_Initial")] + partial class Initial + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) + .HasAnnotation("ProductVersion", "3.1.5") + .HasAnnotation("Relational:MaxIdentifierLength", 128) + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ApplicationName") + .HasColumnName("ApplicationName") + .HasColumnType("nvarchar(96)") + .HasMaxLength(96); + + b.Property("BrowserInfo") + .HasColumnName("BrowserInfo") + .HasColumnType("nvarchar(512)") + .HasMaxLength(512); + + b.Property("ClientId") + .HasColumnName("ClientId") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("ClientIpAddress") + .HasColumnName("ClientIpAddress") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("ClientName") + .HasColumnName("ClientName") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("Comments") + .HasColumnName("Comments") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(40)") + .HasMaxLength(40); + + b.Property("CorrelationId") + .HasColumnName("CorrelationId") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("Exceptions") + .HasColumnName("Exceptions") + .HasColumnType("nvarchar(4000)") + .HasMaxLength(4000); + + b.Property("ExecutionDuration") + .HasColumnName("ExecutionDuration") + .HasColumnType("int"); + + b.Property("ExecutionTime") + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("HttpMethod") + .HasColumnName("HttpMethod") + .HasColumnType("nvarchar(16)") + .HasMaxLength(16); + + b.Property("HttpStatusCode") + .HasColumnName("HttpStatusCode") + .HasColumnType("int"); + + b.Property("ImpersonatorTenantId") + .HasColumnName("ImpersonatorTenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("ImpersonatorUserId") + .HasColumnName("ImpersonatorUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantId") + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantName") + .HasColumnType("nvarchar(max)"); + + b.Property("Url") + .HasColumnName("Url") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("UserId") + .HasColumnName("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("UserName") + .HasColumnName("UserName") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "ExecutionTime"); + + b.HasIndex("TenantId", "UserId", "ExecutionTime"); + + b.ToTable("AbpAuditLogs"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("AuditLogId") + .HasColumnName("AuditLogId") + .HasColumnType("uniqueidentifier"); + + b.Property("ExecutionDuration") + .HasColumnName("ExecutionDuration") + .HasColumnType("int"); + + b.Property("ExecutionTime") + .HasColumnName("ExecutionTime") + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("MethodName") + .HasColumnName("MethodName") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("Parameters") + .HasColumnName("Parameters") + .HasColumnType("nvarchar(2000)") + .HasMaxLength(2000); + + b.Property("ServiceName") + .HasColumnName("ServiceName") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("TenantId") + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("AuditLogId"); + + b.HasIndex("TenantId", "ServiceName", "MethodName", "ExecutionTime"); + + b.ToTable("AbpAuditLogActions"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("AuditLogId") + .HasColumnName("AuditLogId") + .HasColumnType("uniqueidentifier"); + + b.Property("ChangeTime") + .HasColumnName("ChangeTime") + .HasColumnType("datetime2"); + + b.Property("ChangeType") + .HasColumnName("ChangeType") + .HasColumnType("tinyint"); + + b.Property("EntityId") + .IsRequired() + .HasColumnName("EntityId") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("EntityTenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("EntityTypeFullName") + .IsRequired() + .HasColumnName("EntityTypeFullName") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("TenantId") + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("AuditLogId"); + + b.HasIndex("TenantId", "EntityTypeFullName", "EntityId"); + + b.ToTable("AbpEntityChanges"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("EntityChangeId") + .HasColumnType("uniqueidentifier"); + + b.Property("NewValue") + .HasColumnName("NewValue") + .HasColumnType("nvarchar(512)") + .HasMaxLength(512); + + b.Property("OriginalValue") + .HasColumnName("OriginalValue") + .HasColumnType("nvarchar(512)") + .HasMaxLength(512); + + b.Property("PropertyName") + .IsRequired() + .HasColumnName("PropertyName") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("PropertyTypeFullName") + .IsRequired() + .HasColumnName("PropertyTypeFullName") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("TenantId") + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("EntityChangeId"); + + b.ToTable("AbpEntityPropertyChanges"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityClaimType", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(40)") + .HasMaxLength(40); + + b.Property("Description") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("IsStatic") + .HasColumnType("bit"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("Regex") + .HasColumnType("nvarchar(512)") + .HasMaxLength(512); + + b.Property("RegexDescription") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("Required") + .HasColumnType("bit"); + + b.Property("ValueType") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("AbpClaimTypes"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(40)") + .HasMaxLength(40); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("IsDefault") + .HasColumnName("IsDefault") + .HasColumnType("bit"); + + b.Property("IsPublic") + .HasColumnName("IsPublic") + .HasColumnType("bit"); + + b.Property("IsStatic") + .HasColumnName("IsStatic") + .HasColumnType("bit"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("NormalizedName") + .IsRequired() + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("TenantId") + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); + + 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() + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("ClaimValue") + .HasColumnType("nvarchar(1024)") + .HasMaxLength(1024); + + b.Property("RoleId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantId") + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.ToTable("AbpRoleClaims"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("AccessFailedCount") + .ValueGeneratedOnAdd() + .HasColumnName("AccessFailedCount") + .HasColumnType("int") + .HasDefaultValue(0); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(40)") + .HasMaxLength(40); + + b.Property("CreationTime") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("CreatorId") + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeleterId") + .HasColumnName("DeleterId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletionTime") + .HasColumnName("DeletionTime") + .HasColumnType("datetime2"); + + b.Property("Email") + .IsRequired() + .HasColumnName("Email") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("EmailConfirmed") + .ValueGeneratedOnAdd() + .HasColumnName("EmailConfirmed") + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnName("IsDeleted") + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("LastModificationTime") + .HasColumnName("LastModificationTime") + .HasColumnType("datetime2"); + + b.Property("LastModifierId") + .HasColumnName("LastModifierId") + .HasColumnType("uniqueidentifier"); + + b.Property("LockoutEnabled") + .ValueGeneratedOnAdd() + .HasColumnName("LockoutEnabled") + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("LockoutEnd") + .HasColumnType("datetimeoffset"); + + b.Property("Name") + .HasColumnName("Name") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("NormalizedEmail") + .IsRequired() + .HasColumnName("NormalizedEmail") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("NormalizedUserName") + .IsRequired() + .HasColumnName("NormalizedUserName") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("PasswordHash") + .HasColumnName("PasswordHash") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("PhoneNumber") + .HasColumnName("PhoneNumber") + .HasColumnType("nvarchar(16)") + .HasMaxLength(16); + + b.Property("PhoneNumberConfirmed") + .ValueGeneratedOnAdd() + .HasColumnName("PhoneNumberConfirmed") + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("SecurityStamp") + .IsRequired() + .HasColumnName("SecurityStamp") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("Surname") + .HasColumnName("Surname") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("TenantId") + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("TwoFactorEnabled") + .ValueGeneratedOnAdd() + .HasColumnName("TwoFactorEnabled") + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("UserName") + .IsRequired() + .HasColumnName("UserName") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + 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() + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("ClaimValue") + .HasColumnType("nvarchar(1024)") + .HasMaxLength(1024); + + b.Property("TenantId") + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); + + 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") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("ProviderDisplayName") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("ProviderKey") + .IsRequired() + .HasColumnType("nvarchar(196)") + .HasMaxLength(196); + + b.Property("TenantId") + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); + + 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") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("CreatorId") + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantId") + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); + + 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") + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); + + 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") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("Name") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("TenantId") + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); + + 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() + .HasColumnName("Code") + .HasColumnType("nvarchar(95)") + .HasMaxLength(95); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(40)") + .HasMaxLength(40); + + b.Property("CreationTime") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("CreatorId") + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeleterId") + .HasColumnName("DeleterId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletionTime") + .HasColumnName("DeletionTime") + .HasColumnType("datetime2"); + + b.Property("DisplayName") + .IsRequired() + .HasColumnName("DisplayName") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnName("IsDeleted") + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("LastModificationTime") + .HasColumnName("LastModificationTime") + .HasColumnType("datetime2"); + + b.Property("LastModifierId") + .HasColumnName("LastModifierId") + .HasColumnType("uniqueidentifier"); + + b.Property("ParentId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantId") + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); + + 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") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("CreatorId") + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantId") + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("OrganizationUnitId", "RoleId"); + + b.HasIndex("RoleId", "OrganizationUnitId"); + + b.ToTable("AbpOrganizationUnitRoles"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiResource", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(40)") + .HasMaxLength(40); + + b.Property("CreationTime") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("CreatorId") + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeleterId") + .HasColumnName("DeleterId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletionTime") + .HasColumnName("DeletionTime") + .HasColumnType("datetime2"); + + b.Property("Description") + .HasColumnType("nvarchar(1000)") + .HasMaxLength(1000); + + b.Property("DisplayName") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("Enabled") + .HasColumnType("bit"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnName("IsDeleted") + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("LastModificationTime") + .HasColumnName("LastModificationTime") + .HasColumnType("datetime2"); + + b.Property("LastModifierId") + .HasColumnName("LastModifierId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("Properties") + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("IdentityServerApiResources"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiResourceClaim", b => + { + b.Property("ApiResourceId") + .HasColumnType("uniqueidentifier"); + + b.Property("Type") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.HasKey("ApiResourceId", "Type"); + + b.ToTable("IdentityServerApiClaims"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiScope", b => + { + b.Property("ApiResourceId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("Description") + .HasColumnType("nvarchar(1000)") + .HasMaxLength(1000); + + b.Property("DisplayName") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("Emphasize") + .HasColumnType("bit"); + + b.Property("Required") + .HasColumnType("bit"); + + b.Property("ShowInDiscoveryDocument") + .HasColumnType("bit"); + + b.HasKey("ApiResourceId", "Name"); + + b.ToTable("IdentityServerApiScopes"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiScopeClaim", b => + { + b.Property("ApiResourceId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("Type") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.HasKey("ApiResourceId", "Name", "Type"); + + b.ToTable("IdentityServerApiScopeClaims"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiSecret", b => + { + b.Property("ApiResourceId") + .HasColumnType("uniqueidentifier"); + + b.Property("Type") + .HasColumnType("nvarchar(250)") + .HasMaxLength(250); + + b.Property("Value") + .HasColumnType("nvarchar(4000)") + .HasMaxLength(4000); + + b.Property("Description") + .HasColumnType("nvarchar(2000)") + .HasMaxLength(2000); + + b.Property("Expiration") + .HasColumnType("datetime2"); + + b.HasKey("ApiResourceId", "Type", "Value"); + + b.ToTable("IdentityServerApiSecrets"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.Client", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("AbsoluteRefreshTokenLifetime") + .HasColumnType("int"); + + b.Property("AccessTokenLifetime") + .HasColumnType("int"); + + b.Property("AccessTokenType") + .HasColumnType("int"); + + b.Property("AllowAccessTokensViaBrowser") + .HasColumnType("bit"); + + b.Property("AllowOfflineAccess") + .HasColumnType("bit"); + + b.Property("AllowPlainTextPkce") + .HasColumnType("bit"); + + b.Property("AllowRememberConsent") + .HasColumnType("bit"); + + b.Property("AlwaysIncludeUserClaimsInIdToken") + .HasColumnType("bit"); + + b.Property("AlwaysSendClientClaims") + .HasColumnType("bit"); + + b.Property("AuthorizationCodeLifetime") + .HasColumnType("int"); + + b.Property("BackChannelLogoutSessionRequired") + .HasColumnType("bit"); + + b.Property("BackChannelLogoutUri") + .HasColumnType("nvarchar(2000)") + .HasMaxLength(2000); + + b.Property("ClientClaimsPrefix") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("ClientName") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("ClientUri") + .HasColumnType("nvarchar(2000)") + .HasMaxLength(2000); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(40)") + .HasMaxLength(40); + + b.Property("ConsentLifetime") + .HasColumnType("int"); + + b.Property("CreationTime") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("CreatorId") + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeleterId") + .HasColumnName("DeleterId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletionTime") + .HasColumnName("DeletionTime") + .HasColumnType("datetime2"); + + b.Property("Description") + .HasColumnType("nvarchar(1000)") + .HasMaxLength(1000); + + b.Property("DeviceCodeLifetime") + .HasColumnType("int"); + + b.Property("EnableLocalLogin") + .HasColumnType("bit"); + + b.Property("Enabled") + .HasColumnType("bit"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("FrontChannelLogoutSessionRequired") + .HasColumnType("bit"); + + b.Property("FrontChannelLogoutUri") + .HasColumnType("nvarchar(2000)") + .HasMaxLength(2000); + + b.Property("IdentityTokenLifetime") + .HasColumnType("int"); + + b.Property("IncludeJwtId") + .HasColumnType("bit"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnName("IsDeleted") + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("LastModificationTime") + .HasColumnName("LastModificationTime") + .HasColumnType("datetime2"); + + b.Property("LastModifierId") + .HasColumnName("LastModifierId") + .HasColumnType("uniqueidentifier"); + + b.Property("LogoUri") + .HasColumnType("nvarchar(2000)") + .HasMaxLength(2000); + + b.Property("PairWiseSubjectSalt") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("ProtocolType") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("RefreshTokenExpiration") + .HasColumnType("int"); + + b.Property("RefreshTokenUsage") + .HasColumnType("int"); + + b.Property("RequireClientSecret") + .HasColumnType("bit"); + + b.Property("RequireConsent") + .HasColumnType("bit"); + + b.Property("RequirePkce") + .HasColumnType("bit"); + + b.Property("SlidingRefreshTokenLifetime") + .HasColumnType("int"); + + b.Property("UpdateAccessTokenClaimsOnRefresh") + .HasColumnType("bit"); + + b.Property("UserCodeType") + .HasColumnType("nvarchar(100)") + .HasMaxLength(100); + + b.Property("UserSsoLifetime") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("ClientId"); + + b.ToTable("IdentityServerClients"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientClaim", b => + { + b.Property("ClientId") + .HasColumnType("uniqueidentifier"); + + b.Property("Type") + .HasColumnType("nvarchar(250)") + .HasMaxLength(250); + + b.Property("Value") + .HasColumnType("nvarchar(250)") + .HasMaxLength(250); + + b.HasKey("ClientId", "Type", "Value"); + + b.ToTable("IdentityServerClientClaims"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientCorsOrigin", b => + { + b.Property("ClientId") + .HasColumnType("uniqueidentifier"); + + b.Property("Origin") + .HasColumnType("nvarchar(150)") + .HasMaxLength(150); + + b.HasKey("ClientId", "Origin"); + + b.ToTable("IdentityServerClientCorsOrigins"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientGrantType", b => + { + b.Property("ClientId") + .HasColumnType("uniqueidentifier"); + + b.Property("GrantType") + .HasColumnType("nvarchar(250)") + .HasMaxLength(250); + + b.HasKey("ClientId", "GrantType"); + + b.ToTable("IdentityServerClientGrantTypes"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientIdPRestriction", b => + { + b.Property("ClientId") + .HasColumnType("uniqueidentifier"); + + b.Property("Provider") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.HasKey("ClientId", "Provider"); + + b.ToTable("IdentityServerClientIdPRestrictions"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientPostLogoutRedirectUri", b => + { + b.Property("ClientId") + .HasColumnType("uniqueidentifier"); + + b.Property("PostLogoutRedirectUri") + .HasColumnType("nvarchar(2000)") + .HasMaxLength(2000); + + b.HasKey("ClientId", "PostLogoutRedirectUri"); + + b.ToTable("IdentityServerClientPostLogoutRedirectUris"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientProperty", b => + { + b.Property("ClientId") + .HasColumnType("uniqueidentifier"); + + b.Property("Key") + .HasColumnType("nvarchar(250)") + .HasMaxLength(250); + + b.Property("Value") + .IsRequired() + .HasColumnType("nvarchar(2000)") + .HasMaxLength(2000); + + b.HasKey("ClientId", "Key"); + + b.ToTable("IdentityServerClientProperties"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientRedirectUri", b => + { + b.Property("ClientId") + .HasColumnType("uniqueidentifier"); + + b.Property("RedirectUri") + .HasColumnType("nvarchar(2000)") + .HasMaxLength(2000); + + b.HasKey("ClientId", "RedirectUri"); + + b.ToTable("IdentityServerClientRedirectUris"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientScope", b => + { + b.Property("ClientId") + .HasColumnType("uniqueidentifier"); + + b.Property("Scope") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.HasKey("ClientId", "Scope"); + + b.ToTable("IdentityServerClientScopes"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientSecret", b => + { + b.Property("ClientId") + .HasColumnType("uniqueidentifier"); + + b.Property("Type") + .HasColumnType("nvarchar(250)") + .HasMaxLength(250); + + b.Property("Value") + .HasColumnType("nvarchar(4000)") + .HasMaxLength(4000); + + b.Property("Description") + .HasColumnType("nvarchar(2000)") + .HasMaxLength(2000); + + b.Property("Expiration") + .HasColumnType("datetime2"); + + b.HasKey("ClientId", "Type", "Value"); + + b.ToTable("IdentityServerClientSecrets"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Devices.DeviceFlowCodes", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(40)") + .HasMaxLength(40); + + b.Property("CreationTime") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("CreatorId") + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); + + b.Property("Data") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasMaxLength(50000); + + b.Property("DeviceCode") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("Expiration") + .IsRequired() + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("SubjectId") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("UserCode") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.HasKey("Id"); + + b.HasIndex("DeviceCode") + .IsUnique(); + + b.HasIndex("Expiration"); + + b.HasIndex("UserCode") + .IsUnique(); + + b.ToTable("IdentityServerDeviceFlowCodes"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Grants.PersistedGrant", b => + { + b.Property("Key") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(40)") + .HasMaxLength(40); + + b.Property("CreationTime") + .HasColumnType("datetime2"); + + b.Property("Data") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasMaxLength(50000); + + b.Property("Expiration") + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("SubjectId") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("Type") + .IsRequired() + .HasColumnType("nvarchar(50)") + .HasMaxLength(50); + + b.HasKey("Key"); + + b.HasIndex("Expiration"); + + b.HasIndex("SubjectId", "ClientId", "Type"); + + b.ToTable("IdentityServerPersistedGrants"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.IdentityResources.IdentityClaim", b => + { + b.Property("IdentityResourceId") + .HasColumnType("uniqueidentifier"); + + b.Property("Type") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.HasKey("IdentityResourceId", "Type"); + + b.ToTable("IdentityServerIdentityClaims"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.IdentityResources.IdentityResource", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(40)") + .HasMaxLength(40); + + b.Property("CreationTime") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("CreatorId") + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeleterId") + .HasColumnName("DeleterId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletionTime") + .HasColumnName("DeletionTime") + .HasColumnType("datetime2"); + + b.Property("Description") + .HasColumnType("nvarchar(1000)") + .HasMaxLength(1000); + + b.Property("DisplayName") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("Emphasize") + .HasColumnType("bit"); + + b.Property("Enabled") + .HasColumnType("bit"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnName("IsDeleted") + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("LastModificationTime") + .HasColumnName("LastModificationTime") + .HasColumnType("datetime2"); + + b.Property("LastModifierId") + .HasColumnName("LastModifierId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("Properties") + .HasColumnType("nvarchar(max)"); + + b.Property("Required") + .HasColumnType("bit"); + + b.Property("ShowInDiscoveryDocument") + .HasColumnType("bit"); + + b.HasKey("Id"); + + b.ToTable("IdentityServerIdentityResources"); + }); + + modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionGrant", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("ProviderKey") + .IsRequired() + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("ProviderName") + .IsRequired() + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("TenantId") + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); + + 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() + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("ProviderKey") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("ProviderName") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("Value") + .IsRequired() + .HasColumnType("nvarchar(2048)") + .HasMaxLength(2048); + + b.HasKey("Id"); + + b.HasIndex("Name", "ProviderName", "ProviderKey"); + + b.ToTable("AbpSettings"); + }); + + modelBuilder.Entity("Volo.Abp.TenantManagement.Tenant", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(40)") + .HasMaxLength(40); + + b.Property("CreationTime") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("CreatorId") + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeleterId") + .HasColumnName("DeleterId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletionTime") + .HasColumnName("DeletionTime") + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnName("IsDeleted") + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("LastModificationTime") + .HasColumnName("LastModificationTime") + .HasColumnType("datetime2"); + + b.Property("LastModifierId") + .HasColumnName("LastModifierId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.HasKey("Id"); + + b.HasIndex("Name"); + + b.ToTable("AbpTenants"); + }); + + modelBuilder.Entity("Volo.Abp.TenantManagement.TenantConnectionString", b => + { + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("Value") + .IsRequired() + .HasColumnType("nvarchar(1024)") + .HasMaxLength(1024); + + b.HasKey("TenantId", "Name"); + + b.ToTable("AbpTenantConnectionStrings"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => + { + b.HasOne("Volo.Abp.AuditLogging.AuditLog", null) + .WithMany("Actions") + .HasForeignKey("AuditLogId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => + { + b.HasOne("Volo.Abp.AuditLogging.AuditLog", null) + .WithMany("EntityChanges") + .HasForeignKey("AuditLogId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b => + { + b.HasOne("Volo.Abp.AuditLogging.EntityChange", null) + .WithMany("PropertyChanges") + .HasForeignKey("EntityChangeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.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.IdentityServer.ApiResources.ApiResourceClaim", b => + { + b.HasOne("Volo.Abp.IdentityServer.ApiResources.ApiResource", null) + .WithMany("UserClaims") + .HasForeignKey("ApiResourceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiScope", b => + { + b.HasOne("Volo.Abp.IdentityServer.ApiResources.ApiResource", null) + .WithMany("Scopes") + .HasForeignKey("ApiResourceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiScopeClaim", b => + { + b.HasOne("Volo.Abp.IdentityServer.ApiResources.ApiScope", null) + .WithMany("UserClaims") + .HasForeignKey("ApiResourceId", "Name") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiSecret", b => + { + b.HasOne("Volo.Abp.IdentityServer.ApiResources.ApiResource", null) + .WithMany("Secrets") + .HasForeignKey("ApiResourceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientClaim", b => + { + b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) + .WithMany("Claims") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientCorsOrigin", b => + { + b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) + .WithMany("AllowedCorsOrigins") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientGrantType", b => + { + b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) + .WithMany("AllowedGrantTypes") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientIdPRestriction", b => + { + b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) + .WithMany("IdentityProviderRestrictions") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientPostLogoutRedirectUri", b => + { + b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) + .WithMany("PostLogoutRedirectUris") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientProperty", b => + { + b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) + .WithMany("Properties") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientRedirectUri", b => + { + b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) + .WithMany("RedirectUris") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientScope", b => + { + b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) + .WithMany("AllowedScopes") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientSecret", b => + { + b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) + .WithMany("ClientSecrets") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.IdentityResources.IdentityClaim", b => + { + b.HasOne("Volo.Abp.IdentityServer.IdentityResources.IdentityResource", null) + .WithMany("UserClaims") + .HasForeignKey("IdentityResourceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.TenantManagement.TenantConnectionString", b => + { + b.HasOne("Volo.Abp.TenantManagement.Tenant", null) + .WithMany("ConnectionStrings") + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/Migrations/20200624023331_Initial.cs b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/Migrations/20200624023331_Initial.cs new file mode 100644 index 0000000000..573c52149b --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/Migrations/20200624023331_Initial.cs @@ -0,0 +1,1135 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +namespace Volo.CmsKit.Migrations +{ + public partial class Initial : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "AbpAuditLogs", + columns: table => new + { + Id = table.Column(nullable: false), + ExtraProperties = table.Column(nullable: true), + ConcurrencyStamp = table.Column(maxLength: 40, nullable: true), + ApplicationName = table.Column(maxLength: 96, nullable: true), + UserId = table.Column(nullable: true), + UserName = table.Column(maxLength: 256, nullable: true), + TenantId = table.Column(nullable: true), + TenantName = table.Column(nullable: true), + ImpersonatorUserId = table.Column(nullable: true), + ImpersonatorTenantId = table.Column(nullable: true), + ExecutionTime = table.Column(nullable: false), + ExecutionDuration = table.Column(nullable: false), + ClientIpAddress = table.Column(maxLength: 64, nullable: true), + ClientName = table.Column(maxLength: 128, nullable: true), + ClientId = table.Column(maxLength: 64, nullable: true), + CorrelationId = table.Column(maxLength: 64, nullable: true), + BrowserInfo = table.Column(maxLength: 512, nullable: true), + HttpMethod = table.Column(maxLength: 16, nullable: true), + Url = table.Column(maxLength: 256, nullable: true), + Exceptions = table.Column(maxLength: 4000, nullable: true), + Comments = table.Column(maxLength: 256, nullable: true), + HttpStatusCode = table.Column(nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpAuditLogs", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AbpClaimTypes", + columns: table => new + { + Id = table.Column(nullable: false), + ExtraProperties = table.Column(nullable: true), + ConcurrencyStamp = table.Column(maxLength: 40, nullable: true), + Name = table.Column(maxLength: 256, nullable: false), + Required = table.Column(nullable: false), + IsStatic = table.Column(nullable: false), + Regex = table.Column(maxLength: 512, nullable: true), + RegexDescription = table.Column(maxLength: 128, nullable: true), + Description = table.Column(maxLength: 256, nullable: true), + ValueType = table.Column(nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpClaimTypes", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AbpOrganizationUnits", + columns: table => new + { + Id = table.Column(nullable: false), + ExtraProperties = table.Column(nullable: true), + ConcurrencyStamp = table.Column(maxLength: 40, nullable: true), + CreationTime = table.Column(nullable: false), + CreatorId = table.Column(nullable: true), + LastModificationTime = table.Column(nullable: true), + LastModifierId = table.Column(nullable: true), + IsDeleted = table.Column(nullable: false, defaultValue: false), + DeleterId = table.Column(nullable: true), + DeletionTime = table.Column(nullable: true), + TenantId = table.Column(nullable: true), + ParentId = table.Column(nullable: true), + Code = table.Column(maxLength: 95, nullable: false), + DisplayName = table.Column(maxLength: 128, nullable: false) + }, + 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(nullable: false), + TenantId = table.Column(nullable: true), + Name = table.Column(maxLength: 128, nullable: false), + ProviderName = table.Column(maxLength: 64, nullable: false), + ProviderKey = table.Column(maxLength: 64, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpPermissionGrants", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AbpRoles", + columns: table => new + { + Id = table.Column(nullable: false), + ExtraProperties = table.Column(nullable: true), + ConcurrencyStamp = table.Column(maxLength: 40, nullable: true), + TenantId = table.Column(nullable: true), + Name = table.Column(maxLength: 256, nullable: false), + NormalizedName = table.Column(maxLength: 256, nullable: false), + IsDefault = table.Column(nullable: false), + IsStatic = table.Column(nullable: false), + IsPublic = table.Column(nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpRoles", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AbpSettings", + columns: table => new + { + Id = table.Column(nullable: false), + Name = table.Column(maxLength: 128, nullable: false), + Value = table.Column(maxLength: 2048, nullable: false), + ProviderName = table.Column(maxLength: 64, nullable: true), + ProviderKey = table.Column(maxLength: 64, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpSettings", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AbpTenants", + columns: table => new + { + Id = table.Column(nullable: false), + ExtraProperties = table.Column(nullable: true), + ConcurrencyStamp = table.Column(maxLength: 40, nullable: true), + CreationTime = table.Column(nullable: false), + CreatorId = table.Column(nullable: true), + LastModificationTime = table.Column(nullable: true), + LastModifierId = table.Column(nullable: true), + IsDeleted = table.Column(nullable: false, defaultValue: false), + DeleterId = table.Column(nullable: true), + DeletionTime = table.Column(nullable: true), + Name = table.Column(maxLength: 64, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpTenants", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AbpUsers", + columns: table => new + { + Id = table.Column(nullable: false), + ExtraProperties = table.Column(nullable: true), + ConcurrencyStamp = table.Column(maxLength: 40, nullable: true), + CreationTime = table.Column(nullable: false), + CreatorId = table.Column(nullable: true), + LastModificationTime = table.Column(nullable: true), + LastModifierId = table.Column(nullable: true), + IsDeleted = table.Column(nullable: false, defaultValue: false), + DeleterId = table.Column(nullable: true), + DeletionTime = table.Column(nullable: true), + TenantId = table.Column(nullable: true), + UserName = table.Column(maxLength: 256, nullable: false), + NormalizedUserName = table.Column(maxLength: 256, nullable: false), + Name = table.Column(maxLength: 64, nullable: true), + Surname = table.Column(maxLength: 64, nullable: true), + Email = table.Column(maxLength: 256, nullable: false), + NormalizedEmail = table.Column(maxLength: 256, nullable: false), + EmailConfirmed = table.Column(nullable: false, defaultValue: false), + PasswordHash = table.Column(maxLength: 256, nullable: true), + SecurityStamp = table.Column(maxLength: 256, nullable: false), + PhoneNumber = table.Column(maxLength: 16, nullable: true), + PhoneNumberConfirmed = table.Column(nullable: false, defaultValue: false), + TwoFactorEnabled = table.Column(nullable: false, defaultValue: false), + LockoutEnd = table.Column(nullable: true), + LockoutEnabled = table.Column(nullable: false, defaultValue: false), + AccessFailedCount = table.Column(nullable: false, defaultValue: 0) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpUsers", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "IdentityServerApiResources", + columns: table => new + { + Id = table.Column(nullable: false), + ExtraProperties = table.Column(nullable: true), + ConcurrencyStamp = table.Column(maxLength: 40, nullable: true), + CreationTime = table.Column(nullable: false), + CreatorId = table.Column(nullable: true), + LastModificationTime = table.Column(nullable: true), + LastModifierId = table.Column(nullable: true), + IsDeleted = table.Column(nullable: false, defaultValue: false), + DeleterId = table.Column(nullable: true), + DeletionTime = table.Column(nullable: true), + Name = table.Column(maxLength: 200, nullable: false), + DisplayName = table.Column(maxLength: 200, nullable: true), + Description = table.Column(maxLength: 1000, nullable: true), + Enabled = table.Column(nullable: false), + Properties = table.Column(nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_IdentityServerApiResources", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "IdentityServerClients", + columns: table => new + { + Id = table.Column(nullable: false), + ExtraProperties = table.Column(nullable: true), + ConcurrencyStamp = table.Column(maxLength: 40, nullable: true), + CreationTime = table.Column(nullable: false), + CreatorId = table.Column(nullable: true), + LastModificationTime = table.Column(nullable: true), + LastModifierId = table.Column(nullable: true), + IsDeleted = table.Column(nullable: false, defaultValue: false), + DeleterId = table.Column(nullable: true), + DeletionTime = table.Column(nullable: true), + ClientId = table.Column(maxLength: 200, nullable: false), + ClientName = table.Column(maxLength: 200, nullable: true), + Description = table.Column(maxLength: 1000, nullable: true), + ClientUri = table.Column(maxLength: 2000, nullable: true), + LogoUri = table.Column(maxLength: 2000, nullable: true), + Enabled = table.Column(nullable: false), + ProtocolType = table.Column(maxLength: 200, nullable: false), + RequireClientSecret = table.Column(nullable: false), + RequireConsent = table.Column(nullable: false), + AllowRememberConsent = table.Column(nullable: false), + AlwaysIncludeUserClaimsInIdToken = table.Column(nullable: false), + RequirePkce = table.Column(nullable: false), + AllowPlainTextPkce = table.Column(nullable: false), + AllowAccessTokensViaBrowser = table.Column(nullable: false), + FrontChannelLogoutUri = table.Column(maxLength: 2000, nullable: true), + FrontChannelLogoutSessionRequired = table.Column(nullable: false), + BackChannelLogoutUri = table.Column(maxLength: 2000, nullable: true), + BackChannelLogoutSessionRequired = table.Column(nullable: false), + AllowOfflineAccess = table.Column(nullable: false), + IdentityTokenLifetime = table.Column(nullable: false), + AccessTokenLifetime = table.Column(nullable: false), + AuthorizationCodeLifetime = table.Column(nullable: false), + ConsentLifetime = table.Column(nullable: true), + AbsoluteRefreshTokenLifetime = table.Column(nullable: false), + SlidingRefreshTokenLifetime = table.Column(nullable: false), + RefreshTokenUsage = table.Column(nullable: false), + UpdateAccessTokenClaimsOnRefresh = table.Column(nullable: false), + RefreshTokenExpiration = table.Column(nullable: false), + AccessTokenType = table.Column(nullable: false), + EnableLocalLogin = table.Column(nullable: false), + IncludeJwtId = table.Column(nullable: false), + AlwaysSendClientClaims = table.Column(nullable: false), + ClientClaimsPrefix = table.Column(maxLength: 200, nullable: true), + PairWiseSubjectSalt = table.Column(maxLength: 200, nullable: true), + UserSsoLifetime = table.Column(nullable: true), + UserCodeType = table.Column(maxLength: 100, nullable: true), + DeviceCodeLifetime = table.Column(nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_IdentityServerClients", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "IdentityServerDeviceFlowCodes", + columns: table => new + { + Id = table.Column(nullable: false), + ExtraProperties = table.Column(nullable: true), + ConcurrencyStamp = table.Column(maxLength: 40, nullable: true), + CreationTime = table.Column(nullable: false), + CreatorId = table.Column(nullable: true), + DeviceCode = table.Column(maxLength: 200, nullable: false), + UserCode = table.Column(maxLength: 200, nullable: false), + SubjectId = table.Column(maxLength: 200, nullable: true), + ClientId = table.Column(maxLength: 200, nullable: false), + Expiration = table.Column(nullable: false), + Data = table.Column(maxLength: 50000, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_IdentityServerDeviceFlowCodes", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "IdentityServerIdentityResources", + columns: table => new + { + Id = table.Column(nullable: false), + ExtraProperties = table.Column(nullable: true), + ConcurrencyStamp = table.Column(maxLength: 40, nullable: true), + CreationTime = table.Column(nullable: false), + CreatorId = table.Column(nullable: true), + LastModificationTime = table.Column(nullable: true), + LastModifierId = table.Column(nullable: true), + IsDeleted = table.Column(nullable: false, defaultValue: false), + DeleterId = table.Column(nullable: true), + DeletionTime = table.Column(nullable: true), + Name = table.Column(maxLength: 200, nullable: false), + DisplayName = table.Column(maxLength: 200, nullable: true), + Description = table.Column(maxLength: 1000, nullable: true), + Enabled = table.Column(nullable: false), + Required = table.Column(nullable: false), + Emphasize = table.Column(nullable: false), + ShowInDiscoveryDocument = table.Column(nullable: false), + Properties = table.Column(nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_IdentityServerIdentityResources", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "IdentityServerPersistedGrants", + columns: table => new + { + Key = table.Column(maxLength: 200, nullable: false), + Id = table.Column(nullable: false), + ExtraProperties = table.Column(nullable: true), + ConcurrencyStamp = table.Column(maxLength: 40, nullable: true), + Type = table.Column(maxLength: 50, nullable: false), + SubjectId = table.Column(maxLength: 200, nullable: true), + ClientId = table.Column(maxLength: 200, nullable: false), + CreationTime = table.Column(nullable: false), + Expiration = table.Column(nullable: true), + Data = table.Column(maxLength: 50000, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_IdentityServerPersistedGrants", x => x.Key); + }); + + migrationBuilder.CreateTable( + name: "AbpAuditLogActions", + columns: table => new + { + Id = table.Column(nullable: false), + TenantId = table.Column(nullable: true), + AuditLogId = table.Column(nullable: false), + ServiceName = table.Column(maxLength: 256, nullable: true), + MethodName = table.Column(maxLength: 128, nullable: true), + Parameters = table.Column(maxLength: 2000, nullable: true), + ExecutionTime = table.Column(nullable: false), + ExecutionDuration = table.Column(nullable: false), + ExtraProperties = table.Column(nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpAuditLogActions", x => x.Id); + table.ForeignKey( + name: "FK_AbpAuditLogActions_AbpAuditLogs_AuditLogId", + column: x => x.AuditLogId, + principalTable: "AbpAuditLogs", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "AbpEntityChanges", + columns: table => new + { + Id = table.Column(nullable: false), + AuditLogId = table.Column(nullable: false), + TenantId = table.Column(nullable: true), + ChangeTime = table.Column(nullable: false), + ChangeType = table.Column(nullable: false), + EntityTenantId = table.Column(nullable: true), + EntityId = table.Column(maxLength: 128, nullable: false), + EntityTypeFullName = table.Column(maxLength: 128, nullable: false), + ExtraProperties = table.Column(nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpEntityChanges", x => x.Id); + table.ForeignKey( + name: "FK_AbpEntityChanges_AbpAuditLogs_AuditLogId", + column: x => x.AuditLogId, + principalTable: "AbpAuditLogs", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "AbpOrganizationUnitRoles", + columns: table => new + { + RoleId = table.Column(nullable: false), + OrganizationUnitId = table.Column(nullable: false), + CreationTime = table.Column(nullable: false), + CreatorId = table.Column(nullable: true), + TenantId = table.Column(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(nullable: false), + TenantId = table.Column(nullable: true), + ClaimType = table.Column(maxLength: 256, nullable: false), + ClaimValue = table.Column(maxLength: 1024, nullable: true), + RoleId = table.Column(nullable: false) + }, + 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: "AbpTenantConnectionStrings", + columns: table => new + { + TenantId = table.Column(nullable: false), + Name = table.Column(maxLength: 64, nullable: false), + Value = table.Column(maxLength: 1024, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpTenantConnectionStrings", x => new { x.TenantId, x.Name }); + table.ForeignKey( + name: "FK_AbpTenantConnectionStrings_AbpTenants_TenantId", + column: x => x.TenantId, + principalTable: "AbpTenants", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "AbpUserClaims", + columns: table => new + { + Id = table.Column(nullable: false), + TenantId = table.Column(nullable: true), + ClaimType = table.Column(maxLength: 256, nullable: false), + ClaimValue = table.Column(maxLength: 1024, nullable: true), + UserId = table.Column(nullable: false) + }, + 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(nullable: false), + LoginProvider = table.Column(maxLength: 64, nullable: false), + TenantId = table.Column(nullable: true), + ProviderKey = table.Column(maxLength: 196, nullable: false), + ProviderDisplayName = table.Column(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(nullable: false), + OrganizationUnitId = table.Column(nullable: false), + CreationTime = table.Column(nullable: false), + CreatorId = table.Column(nullable: true), + TenantId = table.Column(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(nullable: false), + RoleId = table.Column(nullable: false), + TenantId = table.Column(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(nullable: false), + LoginProvider = table.Column(maxLength: 64, nullable: false), + Name = table.Column(maxLength: 128, nullable: false), + TenantId = table.Column(nullable: true), + Value = table.Column(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.CreateTable( + name: "IdentityServerApiClaims", + columns: table => new + { + Type = table.Column(maxLength: 200, nullable: false), + ApiResourceId = table.Column(nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_IdentityServerApiClaims", x => new { x.ApiResourceId, x.Type }); + table.ForeignKey( + name: "FK_IdentityServerApiClaims_IdentityServerApiResources_ApiResourceId", + column: x => x.ApiResourceId, + principalTable: "IdentityServerApiResources", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "IdentityServerApiScopes", + columns: table => new + { + ApiResourceId = table.Column(nullable: false), + Name = table.Column(maxLength: 200, nullable: false), + DisplayName = table.Column(maxLength: 200, nullable: true), + Description = table.Column(maxLength: 1000, nullable: true), + Required = table.Column(nullable: false), + Emphasize = table.Column(nullable: false), + ShowInDiscoveryDocument = table.Column(nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_IdentityServerApiScopes", x => new { x.ApiResourceId, x.Name }); + table.ForeignKey( + name: "FK_IdentityServerApiScopes_IdentityServerApiResources_ApiResourceId", + column: x => x.ApiResourceId, + principalTable: "IdentityServerApiResources", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "IdentityServerApiSecrets", + columns: table => new + { + Type = table.Column(maxLength: 250, nullable: false), + Value = table.Column(maxLength: 4000, nullable: false), + ApiResourceId = table.Column(nullable: false), + Description = table.Column(maxLength: 2000, nullable: true), + Expiration = table.Column(nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_IdentityServerApiSecrets", x => new { x.ApiResourceId, x.Type, x.Value }); + table.ForeignKey( + name: "FK_IdentityServerApiSecrets_IdentityServerApiResources_ApiResourceId", + column: x => x.ApiResourceId, + principalTable: "IdentityServerApiResources", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "IdentityServerClientClaims", + columns: table => new + { + ClientId = table.Column(nullable: false), + Type = table.Column(maxLength: 250, nullable: false), + Value = table.Column(maxLength: 250, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_IdentityServerClientClaims", x => new { x.ClientId, x.Type, x.Value }); + table.ForeignKey( + name: "FK_IdentityServerClientClaims_IdentityServerClients_ClientId", + column: x => x.ClientId, + principalTable: "IdentityServerClients", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "IdentityServerClientCorsOrigins", + columns: table => new + { + ClientId = table.Column(nullable: false), + Origin = table.Column(maxLength: 150, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_IdentityServerClientCorsOrigins", x => new { x.ClientId, x.Origin }); + table.ForeignKey( + name: "FK_IdentityServerClientCorsOrigins_IdentityServerClients_ClientId", + column: x => x.ClientId, + principalTable: "IdentityServerClients", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "IdentityServerClientGrantTypes", + columns: table => new + { + ClientId = table.Column(nullable: false), + GrantType = table.Column(maxLength: 250, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_IdentityServerClientGrantTypes", x => new { x.ClientId, x.GrantType }); + table.ForeignKey( + name: "FK_IdentityServerClientGrantTypes_IdentityServerClients_ClientId", + column: x => x.ClientId, + principalTable: "IdentityServerClients", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "IdentityServerClientIdPRestrictions", + columns: table => new + { + ClientId = table.Column(nullable: false), + Provider = table.Column(maxLength: 200, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_IdentityServerClientIdPRestrictions", x => new { x.ClientId, x.Provider }); + table.ForeignKey( + name: "FK_IdentityServerClientIdPRestrictions_IdentityServerClients_ClientId", + column: x => x.ClientId, + principalTable: "IdentityServerClients", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "IdentityServerClientPostLogoutRedirectUris", + columns: table => new + { + ClientId = table.Column(nullable: false), + PostLogoutRedirectUri = table.Column(maxLength: 2000, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_IdentityServerClientPostLogoutRedirectUris", x => new { x.ClientId, x.PostLogoutRedirectUri }); + table.ForeignKey( + name: "FK_IdentityServerClientPostLogoutRedirectUris_IdentityServerClients_ClientId", + column: x => x.ClientId, + principalTable: "IdentityServerClients", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "IdentityServerClientProperties", + columns: table => new + { + ClientId = table.Column(nullable: false), + Key = table.Column(maxLength: 250, nullable: false), + Value = table.Column(maxLength: 2000, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_IdentityServerClientProperties", x => new { x.ClientId, x.Key }); + table.ForeignKey( + name: "FK_IdentityServerClientProperties_IdentityServerClients_ClientId", + column: x => x.ClientId, + principalTable: "IdentityServerClients", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "IdentityServerClientRedirectUris", + columns: table => new + { + ClientId = table.Column(nullable: false), + RedirectUri = table.Column(maxLength: 2000, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_IdentityServerClientRedirectUris", x => new { x.ClientId, x.RedirectUri }); + table.ForeignKey( + name: "FK_IdentityServerClientRedirectUris_IdentityServerClients_ClientId", + column: x => x.ClientId, + principalTable: "IdentityServerClients", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "IdentityServerClientScopes", + columns: table => new + { + ClientId = table.Column(nullable: false), + Scope = table.Column(maxLength: 200, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_IdentityServerClientScopes", x => new { x.ClientId, x.Scope }); + table.ForeignKey( + name: "FK_IdentityServerClientScopes_IdentityServerClients_ClientId", + column: x => x.ClientId, + principalTable: "IdentityServerClients", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "IdentityServerClientSecrets", + columns: table => new + { + Type = table.Column(maxLength: 250, nullable: false), + Value = table.Column(maxLength: 4000, nullable: false), + ClientId = table.Column(nullable: false), + Description = table.Column(maxLength: 2000, nullable: true), + Expiration = table.Column(nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_IdentityServerClientSecrets", x => new { x.ClientId, x.Type, x.Value }); + table.ForeignKey( + name: "FK_IdentityServerClientSecrets_IdentityServerClients_ClientId", + column: x => x.ClientId, + principalTable: "IdentityServerClients", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "IdentityServerIdentityClaims", + columns: table => new + { + Type = table.Column(maxLength: 200, nullable: false), + IdentityResourceId = table.Column(nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_IdentityServerIdentityClaims", x => new { x.IdentityResourceId, x.Type }); + table.ForeignKey( + name: "FK_IdentityServerIdentityClaims_IdentityServerIdentityResources_IdentityResourceId", + column: x => x.IdentityResourceId, + principalTable: "IdentityServerIdentityResources", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "AbpEntityPropertyChanges", + columns: table => new + { + Id = table.Column(nullable: false), + TenantId = table.Column(nullable: true), + EntityChangeId = table.Column(nullable: false), + NewValue = table.Column(maxLength: 512, nullable: true), + OriginalValue = table.Column(maxLength: 512, nullable: true), + PropertyName = table.Column(maxLength: 128, nullable: false), + PropertyTypeFullName = table.Column(maxLength: 64, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpEntityPropertyChanges", x => x.Id); + table.ForeignKey( + name: "FK_AbpEntityPropertyChanges_AbpEntityChanges_EntityChangeId", + column: x => x.EntityChangeId, + principalTable: "AbpEntityChanges", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "IdentityServerApiScopeClaims", + columns: table => new + { + Type = table.Column(maxLength: 200, nullable: false), + ApiResourceId = table.Column(nullable: false), + Name = table.Column(maxLength: 200, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_IdentityServerApiScopeClaims", x => new { x.ApiResourceId, x.Name, x.Type }); + table.ForeignKey( + name: "FK_IdentityServerApiScopeClaims_IdentityServerApiScopes_ApiResourceId_Name", + columns: x => new { x.ApiResourceId, x.Name }, + principalTable: "IdentityServerApiScopes", + principalColumns: new[] { "ApiResourceId", "Name" }, + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateIndex( + name: "IX_AbpAuditLogActions_AuditLogId", + table: "AbpAuditLogActions", + column: "AuditLogId"); + + migrationBuilder.CreateIndex( + name: "IX_AbpAuditLogActions_TenantId_ServiceName_MethodName_ExecutionTime", + table: "AbpAuditLogActions", + columns: new[] { "TenantId", "ServiceName", "MethodName", "ExecutionTime" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpAuditLogs_TenantId_ExecutionTime", + table: "AbpAuditLogs", + columns: new[] { "TenantId", "ExecutionTime" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpAuditLogs_TenantId_UserId_ExecutionTime", + table: "AbpAuditLogs", + columns: new[] { "TenantId", "UserId", "ExecutionTime" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpEntityChanges_AuditLogId", + table: "AbpEntityChanges", + column: "AuditLogId"); + + migrationBuilder.CreateIndex( + name: "IX_AbpEntityChanges_TenantId_EntityTypeFullName_EntityId", + table: "AbpEntityChanges", + columns: new[] { "TenantId", "EntityTypeFullName", "EntityId" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpEntityPropertyChanges_EntityChangeId", + table: "AbpEntityPropertyChanges", + column: "EntityChangeId"); + + 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_AbpSettings_Name_ProviderName_ProviderKey", + table: "AbpSettings", + columns: new[] { "Name", "ProviderName", "ProviderKey" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpTenants_Name", + table: "AbpTenants", + column: "Name"); + + 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"); + + migrationBuilder.CreateIndex( + name: "IX_IdentityServerClients_ClientId", + table: "IdentityServerClients", + column: "ClientId"); + + migrationBuilder.CreateIndex( + name: "IX_IdentityServerDeviceFlowCodes_DeviceCode", + table: "IdentityServerDeviceFlowCodes", + column: "DeviceCode", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_IdentityServerDeviceFlowCodes_Expiration", + table: "IdentityServerDeviceFlowCodes", + column: "Expiration"); + + migrationBuilder.CreateIndex( + name: "IX_IdentityServerDeviceFlowCodes_UserCode", + table: "IdentityServerDeviceFlowCodes", + column: "UserCode", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_IdentityServerPersistedGrants_Expiration", + table: "IdentityServerPersistedGrants", + column: "Expiration"); + + migrationBuilder.CreateIndex( + name: "IX_IdentityServerPersistedGrants_SubjectId_ClientId_Type", + table: "IdentityServerPersistedGrants", + columns: new[] { "SubjectId", "ClientId", "Type" }); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "AbpAuditLogActions"); + + migrationBuilder.DropTable( + name: "AbpClaimTypes"); + + migrationBuilder.DropTable( + name: "AbpEntityPropertyChanges"); + + migrationBuilder.DropTable( + name: "AbpOrganizationUnitRoles"); + + migrationBuilder.DropTable( + name: "AbpPermissionGrants"); + + migrationBuilder.DropTable( + name: "AbpRoleClaims"); + + migrationBuilder.DropTable( + name: "AbpSettings"); + + migrationBuilder.DropTable( + name: "AbpTenantConnectionStrings"); + + migrationBuilder.DropTable( + name: "AbpUserClaims"); + + migrationBuilder.DropTable( + name: "AbpUserLogins"); + + migrationBuilder.DropTable( + name: "AbpUserOrganizationUnits"); + + migrationBuilder.DropTable( + name: "AbpUserRoles"); + + migrationBuilder.DropTable( + name: "AbpUserTokens"); + + migrationBuilder.DropTable( + name: "IdentityServerApiClaims"); + + migrationBuilder.DropTable( + name: "IdentityServerApiScopeClaims"); + + migrationBuilder.DropTable( + name: "IdentityServerApiSecrets"); + + migrationBuilder.DropTable( + name: "IdentityServerClientClaims"); + + migrationBuilder.DropTable( + name: "IdentityServerClientCorsOrigins"); + + migrationBuilder.DropTable( + name: "IdentityServerClientGrantTypes"); + + migrationBuilder.DropTable( + name: "IdentityServerClientIdPRestrictions"); + + migrationBuilder.DropTable( + name: "IdentityServerClientPostLogoutRedirectUris"); + + migrationBuilder.DropTable( + name: "IdentityServerClientProperties"); + + migrationBuilder.DropTable( + name: "IdentityServerClientRedirectUris"); + + migrationBuilder.DropTable( + name: "IdentityServerClientScopes"); + + migrationBuilder.DropTable( + name: "IdentityServerClientSecrets"); + + migrationBuilder.DropTable( + name: "IdentityServerDeviceFlowCodes"); + + migrationBuilder.DropTable( + name: "IdentityServerIdentityClaims"); + + migrationBuilder.DropTable( + name: "IdentityServerPersistedGrants"); + + migrationBuilder.DropTable( + name: "AbpEntityChanges"); + + migrationBuilder.DropTable( + name: "AbpTenants"); + + migrationBuilder.DropTable( + name: "AbpOrganizationUnits"); + + migrationBuilder.DropTable( + name: "AbpRoles"); + + migrationBuilder.DropTable( + name: "AbpUsers"); + + migrationBuilder.DropTable( + name: "IdentityServerApiScopes"); + + migrationBuilder.DropTable( + name: "IdentityServerClients"); + + migrationBuilder.DropTable( + name: "IdentityServerIdentityResources"); + + migrationBuilder.DropTable( + name: "AbpAuditLogs"); + + migrationBuilder.DropTable( + name: "IdentityServerApiResources"); + } + } +} diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/Migrations/IdentityServerHostMigrationsDbContextModelSnapshot.cs b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/Migrations/IdentityServerHostMigrationsDbContextModelSnapshot.cs new file mode 100644 index 0000000000..1218617479 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/Migrations/IdentityServerHostMigrationsDbContextModelSnapshot.cs @@ -0,0 +1,1859 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Volo.CmsKit.EntityFrameworkCore; +using Volo.Abp.EntityFrameworkCore; + +namespace Volo.CmsKit.Migrations +{ + [DbContext(typeof(IdentityServerHostMigrationsDbContext))] + partial class IdentityServerHostMigrationsDbContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) + .HasAnnotation("ProductVersion", "3.1.5") + .HasAnnotation("Relational:MaxIdentifierLength", 128) + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ApplicationName") + .HasColumnName("ApplicationName") + .HasColumnType("nvarchar(96)") + .HasMaxLength(96); + + b.Property("BrowserInfo") + .HasColumnName("BrowserInfo") + .HasColumnType("nvarchar(512)") + .HasMaxLength(512); + + b.Property("ClientId") + .HasColumnName("ClientId") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("ClientIpAddress") + .HasColumnName("ClientIpAddress") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("ClientName") + .HasColumnName("ClientName") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("Comments") + .HasColumnName("Comments") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(40)") + .HasMaxLength(40); + + b.Property("CorrelationId") + .HasColumnName("CorrelationId") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("Exceptions") + .HasColumnName("Exceptions") + .HasColumnType("nvarchar(4000)") + .HasMaxLength(4000); + + b.Property("ExecutionDuration") + .HasColumnName("ExecutionDuration") + .HasColumnType("int"); + + b.Property("ExecutionTime") + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("HttpMethod") + .HasColumnName("HttpMethod") + .HasColumnType("nvarchar(16)") + .HasMaxLength(16); + + b.Property("HttpStatusCode") + .HasColumnName("HttpStatusCode") + .HasColumnType("int"); + + b.Property("ImpersonatorTenantId") + .HasColumnName("ImpersonatorTenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("ImpersonatorUserId") + .HasColumnName("ImpersonatorUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantId") + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantName") + .HasColumnType("nvarchar(max)"); + + b.Property("Url") + .HasColumnName("Url") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("UserId") + .HasColumnName("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("UserName") + .HasColumnName("UserName") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "ExecutionTime"); + + b.HasIndex("TenantId", "UserId", "ExecutionTime"); + + b.ToTable("AbpAuditLogs"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("AuditLogId") + .HasColumnName("AuditLogId") + .HasColumnType("uniqueidentifier"); + + b.Property("ExecutionDuration") + .HasColumnName("ExecutionDuration") + .HasColumnType("int"); + + b.Property("ExecutionTime") + .HasColumnName("ExecutionTime") + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("MethodName") + .HasColumnName("MethodName") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("Parameters") + .HasColumnName("Parameters") + .HasColumnType("nvarchar(2000)") + .HasMaxLength(2000); + + b.Property("ServiceName") + .HasColumnName("ServiceName") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("TenantId") + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("AuditLogId"); + + b.HasIndex("TenantId", "ServiceName", "MethodName", "ExecutionTime"); + + b.ToTable("AbpAuditLogActions"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("AuditLogId") + .HasColumnName("AuditLogId") + .HasColumnType("uniqueidentifier"); + + b.Property("ChangeTime") + .HasColumnName("ChangeTime") + .HasColumnType("datetime2"); + + b.Property("ChangeType") + .HasColumnName("ChangeType") + .HasColumnType("tinyint"); + + b.Property("EntityId") + .IsRequired() + .HasColumnName("EntityId") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("EntityTenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("EntityTypeFullName") + .IsRequired() + .HasColumnName("EntityTypeFullName") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("TenantId") + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("AuditLogId"); + + b.HasIndex("TenantId", "EntityTypeFullName", "EntityId"); + + b.ToTable("AbpEntityChanges"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("EntityChangeId") + .HasColumnType("uniqueidentifier"); + + b.Property("NewValue") + .HasColumnName("NewValue") + .HasColumnType("nvarchar(512)") + .HasMaxLength(512); + + b.Property("OriginalValue") + .HasColumnName("OriginalValue") + .HasColumnType("nvarchar(512)") + .HasMaxLength(512); + + b.Property("PropertyName") + .IsRequired() + .HasColumnName("PropertyName") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("PropertyTypeFullName") + .IsRequired() + .HasColumnName("PropertyTypeFullName") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("TenantId") + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("EntityChangeId"); + + b.ToTable("AbpEntityPropertyChanges"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityClaimType", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(40)") + .HasMaxLength(40); + + b.Property("Description") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("IsStatic") + .HasColumnType("bit"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("Regex") + .HasColumnType("nvarchar(512)") + .HasMaxLength(512); + + b.Property("RegexDescription") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("Required") + .HasColumnType("bit"); + + b.Property("ValueType") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("AbpClaimTypes"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(40)") + .HasMaxLength(40); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("IsDefault") + .HasColumnName("IsDefault") + .HasColumnType("bit"); + + b.Property("IsPublic") + .HasColumnName("IsPublic") + .HasColumnType("bit"); + + b.Property("IsStatic") + .HasColumnName("IsStatic") + .HasColumnType("bit"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("NormalizedName") + .IsRequired() + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("TenantId") + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); + + 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() + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("ClaimValue") + .HasColumnType("nvarchar(1024)") + .HasMaxLength(1024); + + b.Property("RoleId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantId") + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.ToTable("AbpRoleClaims"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("AccessFailedCount") + .ValueGeneratedOnAdd() + .HasColumnName("AccessFailedCount") + .HasColumnType("int") + .HasDefaultValue(0); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(40)") + .HasMaxLength(40); + + b.Property("CreationTime") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("CreatorId") + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeleterId") + .HasColumnName("DeleterId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletionTime") + .HasColumnName("DeletionTime") + .HasColumnType("datetime2"); + + b.Property("Email") + .IsRequired() + .HasColumnName("Email") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("EmailConfirmed") + .ValueGeneratedOnAdd() + .HasColumnName("EmailConfirmed") + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnName("IsDeleted") + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("LastModificationTime") + .HasColumnName("LastModificationTime") + .HasColumnType("datetime2"); + + b.Property("LastModifierId") + .HasColumnName("LastModifierId") + .HasColumnType("uniqueidentifier"); + + b.Property("LockoutEnabled") + .ValueGeneratedOnAdd() + .HasColumnName("LockoutEnabled") + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("LockoutEnd") + .HasColumnType("datetimeoffset"); + + b.Property("Name") + .HasColumnName("Name") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("NormalizedEmail") + .IsRequired() + .HasColumnName("NormalizedEmail") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("NormalizedUserName") + .IsRequired() + .HasColumnName("NormalizedUserName") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("PasswordHash") + .HasColumnName("PasswordHash") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("PhoneNumber") + .HasColumnName("PhoneNumber") + .HasColumnType("nvarchar(16)") + .HasMaxLength(16); + + b.Property("PhoneNumberConfirmed") + .ValueGeneratedOnAdd() + .HasColumnName("PhoneNumberConfirmed") + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("SecurityStamp") + .IsRequired() + .HasColumnName("SecurityStamp") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("Surname") + .HasColumnName("Surname") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("TenantId") + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("TwoFactorEnabled") + .ValueGeneratedOnAdd() + .HasColumnName("TwoFactorEnabled") + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("UserName") + .IsRequired() + .HasColumnName("UserName") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + 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() + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("ClaimValue") + .HasColumnType("nvarchar(1024)") + .HasMaxLength(1024); + + b.Property("TenantId") + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); + + 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") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("ProviderDisplayName") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("ProviderKey") + .IsRequired() + .HasColumnType("nvarchar(196)") + .HasMaxLength(196); + + b.Property("TenantId") + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); + + 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") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("CreatorId") + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantId") + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); + + 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") + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); + + 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") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("Name") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("TenantId") + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); + + 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() + .HasColumnName("Code") + .HasColumnType("nvarchar(95)") + .HasMaxLength(95); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(40)") + .HasMaxLength(40); + + b.Property("CreationTime") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("CreatorId") + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeleterId") + .HasColumnName("DeleterId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletionTime") + .HasColumnName("DeletionTime") + .HasColumnType("datetime2"); + + b.Property("DisplayName") + .IsRequired() + .HasColumnName("DisplayName") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnName("IsDeleted") + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("LastModificationTime") + .HasColumnName("LastModificationTime") + .HasColumnType("datetime2"); + + b.Property("LastModifierId") + .HasColumnName("LastModifierId") + .HasColumnType("uniqueidentifier"); + + b.Property("ParentId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantId") + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); + + 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") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("CreatorId") + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantId") + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("OrganizationUnitId", "RoleId"); + + b.HasIndex("RoleId", "OrganizationUnitId"); + + b.ToTable("AbpOrganizationUnitRoles"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiResource", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(40)") + .HasMaxLength(40); + + b.Property("CreationTime") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("CreatorId") + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeleterId") + .HasColumnName("DeleterId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletionTime") + .HasColumnName("DeletionTime") + .HasColumnType("datetime2"); + + b.Property("Description") + .HasColumnType("nvarchar(1000)") + .HasMaxLength(1000); + + b.Property("DisplayName") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("Enabled") + .HasColumnType("bit"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnName("IsDeleted") + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("LastModificationTime") + .HasColumnName("LastModificationTime") + .HasColumnType("datetime2"); + + b.Property("LastModifierId") + .HasColumnName("LastModifierId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("Properties") + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("IdentityServerApiResources"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiResourceClaim", b => + { + b.Property("ApiResourceId") + .HasColumnType("uniqueidentifier"); + + b.Property("Type") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.HasKey("ApiResourceId", "Type"); + + b.ToTable("IdentityServerApiClaims"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiScope", b => + { + b.Property("ApiResourceId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("Description") + .HasColumnType("nvarchar(1000)") + .HasMaxLength(1000); + + b.Property("DisplayName") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("Emphasize") + .HasColumnType("bit"); + + b.Property("Required") + .HasColumnType("bit"); + + b.Property("ShowInDiscoveryDocument") + .HasColumnType("bit"); + + b.HasKey("ApiResourceId", "Name"); + + b.ToTable("IdentityServerApiScopes"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiScopeClaim", b => + { + b.Property("ApiResourceId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("Type") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.HasKey("ApiResourceId", "Name", "Type"); + + b.ToTable("IdentityServerApiScopeClaims"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiSecret", b => + { + b.Property("ApiResourceId") + .HasColumnType("uniqueidentifier"); + + b.Property("Type") + .HasColumnType("nvarchar(250)") + .HasMaxLength(250); + + b.Property("Value") + .HasColumnType("nvarchar(4000)") + .HasMaxLength(4000); + + b.Property("Description") + .HasColumnType("nvarchar(2000)") + .HasMaxLength(2000); + + b.Property("Expiration") + .HasColumnType("datetime2"); + + b.HasKey("ApiResourceId", "Type", "Value"); + + b.ToTable("IdentityServerApiSecrets"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.Client", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("AbsoluteRefreshTokenLifetime") + .HasColumnType("int"); + + b.Property("AccessTokenLifetime") + .HasColumnType("int"); + + b.Property("AccessTokenType") + .HasColumnType("int"); + + b.Property("AllowAccessTokensViaBrowser") + .HasColumnType("bit"); + + b.Property("AllowOfflineAccess") + .HasColumnType("bit"); + + b.Property("AllowPlainTextPkce") + .HasColumnType("bit"); + + b.Property("AllowRememberConsent") + .HasColumnType("bit"); + + b.Property("AlwaysIncludeUserClaimsInIdToken") + .HasColumnType("bit"); + + b.Property("AlwaysSendClientClaims") + .HasColumnType("bit"); + + b.Property("AuthorizationCodeLifetime") + .HasColumnType("int"); + + b.Property("BackChannelLogoutSessionRequired") + .HasColumnType("bit"); + + b.Property("BackChannelLogoutUri") + .HasColumnType("nvarchar(2000)") + .HasMaxLength(2000); + + b.Property("ClientClaimsPrefix") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("ClientName") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("ClientUri") + .HasColumnType("nvarchar(2000)") + .HasMaxLength(2000); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(40)") + .HasMaxLength(40); + + b.Property("ConsentLifetime") + .HasColumnType("int"); + + b.Property("CreationTime") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("CreatorId") + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeleterId") + .HasColumnName("DeleterId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletionTime") + .HasColumnName("DeletionTime") + .HasColumnType("datetime2"); + + b.Property("Description") + .HasColumnType("nvarchar(1000)") + .HasMaxLength(1000); + + b.Property("DeviceCodeLifetime") + .HasColumnType("int"); + + b.Property("EnableLocalLogin") + .HasColumnType("bit"); + + b.Property("Enabled") + .HasColumnType("bit"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("FrontChannelLogoutSessionRequired") + .HasColumnType("bit"); + + b.Property("FrontChannelLogoutUri") + .HasColumnType("nvarchar(2000)") + .HasMaxLength(2000); + + b.Property("IdentityTokenLifetime") + .HasColumnType("int"); + + b.Property("IncludeJwtId") + .HasColumnType("bit"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnName("IsDeleted") + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("LastModificationTime") + .HasColumnName("LastModificationTime") + .HasColumnType("datetime2"); + + b.Property("LastModifierId") + .HasColumnName("LastModifierId") + .HasColumnType("uniqueidentifier"); + + b.Property("LogoUri") + .HasColumnType("nvarchar(2000)") + .HasMaxLength(2000); + + b.Property("PairWiseSubjectSalt") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("ProtocolType") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("RefreshTokenExpiration") + .HasColumnType("int"); + + b.Property("RefreshTokenUsage") + .HasColumnType("int"); + + b.Property("RequireClientSecret") + .HasColumnType("bit"); + + b.Property("RequireConsent") + .HasColumnType("bit"); + + b.Property("RequirePkce") + .HasColumnType("bit"); + + b.Property("SlidingRefreshTokenLifetime") + .HasColumnType("int"); + + b.Property("UpdateAccessTokenClaimsOnRefresh") + .HasColumnType("bit"); + + b.Property("UserCodeType") + .HasColumnType("nvarchar(100)") + .HasMaxLength(100); + + b.Property("UserSsoLifetime") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("ClientId"); + + b.ToTable("IdentityServerClients"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientClaim", b => + { + b.Property("ClientId") + .HasColumnType("uniqueidentifier"); + + b.Property("Type") + .HasColumnType("nvarchar(250)") + .HasMaxLength(250); + + b.Property("Value") + .HasColumnType("nvarchar(250)") + .HasMaxLength(250); + + b.HasKey("ClientId", "Type", "Value"); + + b.ToTable("IdentityServerClientClaims"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientCorsOrigin", b => + { + b.Property("ClientId") + .HasColumnType("uniqueidentifier"); + + b.Property("Origin") + .HasColumnType("nvarchar(150)") + .HasMaxLength(150); + + b.HasKey("ClientId", "Origin"); + + b.ToTable("IdentityServerClientCorsOrigins"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientGrantType", b => + { + b.Property("ClientId") + .HasColumnType("uniqueidentifier"); + + b.Property("GrantType") + .HasColumnType("nvarchar(250)") + .HasMaxLength(250); + + b.HasKey("ClientId", "GrantType"); + + b.ToTable("IdentityServerClientGrantTypes"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientIdPRestriction", b => + { + b.Property("ClientId") + .HasColumnType("uniqueidentifier"); + + b.Property("Provider") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.HasKey("ClientId", "Provider"); + + b.ToTable("IdentityServerClientIdPRestrictions"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientPostLogoutRedirectUri", b => + { + b.Property("ClientId") + .HasColumnType("uniqueidentifier"); + + b.Property("PostLogoutRedirectUri") + .HasColumnType("nvarchar(2000)") + .HasMaxLength(2000); + + b.HasKey("ClientId", "PostLogoutRedirectUri"); + + b.ToTable("IdentityServerClientPostLogoutRedirectUris"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientProperty", b => + { + b.Property("ClientId") + .HasColumnType("uniqueidentifier"); + + b.Property("Key") + .HasColumnType("nvarchar(250)") + .HasMaxLength(250); + + b.Property("Value") + .IsRequired() + .HasColumnType("nvarchar(2000)") + .HasMaxLength(2000); + + b.HasKey("ClientId", "Key"); + + b.ToTable("IdentityServerClientProperties"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientRedirectUri", b => + { + b.Property("ClientId") + .HasColumnType("uniqueidentifier"); + + b.Property("RedirectUri") + .HasColumnType("nvarchar(2000)") + .HasMaxLength(2000); + + b.HasKey("ClientId", "RedirectUri"); + + b.ToTable("IdentityServerClientRedirectUris"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientScope", b => + { + b.Property("ClientId") + .HasColumnType("uniqueidentifier"); + + b.Property("Scope") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.HasKey("ClientId", "Scope"); + + b.ToTable("IdentityServerClientScopes"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientSecret", b => + { + b.Property("ClientId") + .HasColumnType("uniqueidentifier"); + + b.Property("Type") + .HasColumnType("nvarchar(250)") + .HasMaxLength(250); + + b.Property("Value") + .HasColumnType("nvarchar(4000)") + .HasMaxLength(4000); + + b.Property("Description") + .HasColumnType("nvarchar(2000)") + .HasMaxLength(2000); + + b.Property("Expiration") + .HasColumnType("datetime2"); + + b.HasKey("ClientId", "Type", "Value"); + + b.ToTable("IdentityServerClientSecrets"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Devices.DeviceFlowCodes", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(40)") + .HasMaxLength(40); + + b.Property("CreationTime") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("CreatorId") + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); + + b.Property("Data") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasMaxLength(50000); + + b.Property("DeviceCode") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("Expiration") + .IsRequired() + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("SubjectId") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("UserCode") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.HasKey("Id"); + + b.HasIndex("DeviceCode") + .IsUnique(); + + b.HasIndex("Expiration"); + + b.HasIndex("UserCode") + .IsUnique(); + + b.ToTable("IdentityServerDeviceFlowCodes"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Grants.PersistedGrant", b => + { + b.Property("Key") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(40)") + .HasMaxLength(40); + + b.Property("CreationTime") + .HasColumnType("datetime2"); + + b.Property("Data") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasMaxLength(50000); + + b.Property("Expiration") + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("SubjectId") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("Type") + .IsRequired() + .HasColumnType("nvarchar(50)") + .HasMaxLength(50); + + b.HasKey("Key"); + + b.HasIndex("Expiration"); + + b.HasIndex("SubjectId", "ClientId", "Type"); + + b.ToTable("IdentityServerPersistedGrants"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.IdentityResources.IdentityClaim", b => + { + b.Property("IdentityResourceId") + .HasColumnType("uniqueidentifier"); + + b.Property("Type") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.HasKey("IdentityResourceId", "Type"); + + b.ToTable("IdentityServerIdentityClaims"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.IdentityResources.IdentityResource", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(40)") + .HasMaxLength(40); + + b.Property("CreationTime") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("CreatorId") + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeleterId") + .HasColumnName("DeleterId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletionTime") + .HasColumnName("DeletionTime") + .HasColumnType("datetime2"); + + b.Property("Description") + .HasColumnType("nvarchar(1000)") + .HasMaxLength(1000); + + b.Property("DisplayName") + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("Emphasize") + .HasColumnType("bit"); + + b.Property("Enabled") + .HasColumnType("bit"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnName("IsDeleted") + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("LastModificationTime") + .HasColumnName("LastModificationTime") + .HasColumnType("datetime2"); + + b.Property("LastModifierId") + .HasColumnName("LastModifierId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(200)") + .HasMaxLength(200); + + b.Property("Properties") + .HasColumnType("nvarchar(max)"); + + b.Property("Required") + .HasColumnType("bit"); + + b.Property("ShowInDiscoveryDocument") + .HasColumnType("bit"); + + b.HasKey("Id"); + + b.ToTable("IdentityServerIdentityResources"); + }); + + modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionGrant", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("ProviderKey") + .IsRequired() + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("ProviderName") + .IsRequired() + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("TenantId") + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); + + 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() + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("ProviderKey") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("ProviderName") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("Value") + .IsRequired() + .HasColumnType("nvarchar(2048)") + .HasMaxLength(2048); + + b.HasKey("Id"); + + b.HasIndex("Name", "ProviderName", "ProviderKey"); + + b.ToTable("AbpSettings"); + }); + + modelBuilder.Entity("Volo.Abp.TenantManagement.Tenant", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(40)") + .HasMaxLength(40); + + b.Property("CreationTime") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("CreatorId") + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeleterId") + .HasColumnName("DeleterId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletionTime") + .HasColumnName("DeletionTime") + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnName("IsDeleted") + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("LastModificationTime") + .HasColumnName("LastModificationTime") + .HasColumnType("datetime2"); + + b.Property("LastModifierId") + .HasColumnName("LastModifierId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.HasKey("Id"); + + b.HasIndex("Name"); + + b.ToTable("AbpTenants"); + }); + + modelBuilder.Entity("Volo.Abp.TenantManagement.TenantConnectionString", b => + { + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("Value") + .IsRequired() + .HasColumnType("nvarchar(1024)") + .HasMaxLength(1024); + + b.HasKey("TenantId", "Name"); + + b.ToTable("AbpTenantConnectionStrings"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => + { + b.HasOne("Volo.Abp.AuditLogging.AuditLog", null) + .WithMany("Actions") + .HasForeignKey("AuditLogId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => + { + b.HasOne("Volo.Abp.AuditLogging.AuditLog", null) + .WithMany("EntityChanges") + .HasForeignKey("AuditLogId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b => + { + b.HasOne("Volo.Abp.AuditLogging.EntityChange", null) + .WithMany("PropertyChanges") + .HasForeignKey("EntityChangeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.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.IdentityServer.ApiResources.ApiResourceClaim", b => + { + b.HasOne("Volo.Abp.IdentityServer.ApiResources.ApiResource", null) + .WithMany("UserClaims") + .HasForeignKey("ApiResourceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiScope", b => + { + b.HasOne("Volo.Abp.IdentityServer.ApiResources.ApiResource", null) + .WithMany("Scopes") + .HasForeignKey("ApiResourceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiScopeClaim", b => + { + b.HasOne("Volo.Abp.IdentityServer.ApiResources.ApiScope", null) + .WithMany("UserClaims") + .HasForeignKey("ApiResourceId", "Name") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiSecret", b => + { + b.HasOne("Volo.Abp.IdentityServer.ApiResources.ApiResource", null) + .WithMany("Secrets") + .HasForeignKey("ApiResourceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientClaim", b => + { + b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) + .WithMany("Claims") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientCorsOrigin", b => + { + b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) + .WithMany("AllowedCorsOrigins") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientGrantType", b => + { + b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) + .WithMany("AllowedGrantTypes") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientIdPRestriction", b => + { + b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) + .WithMany("IdentityProviderRestrictions") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientPostLogoutRedirectUri", b => + { + b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) + .WithMany("PostLogoutRedirectUris") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientProperty", b => + { + b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) + .WithMany("Properties") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientRedirectUri", b => + { + b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) + .WithMany("RedirectUris") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientScope", b => + { + b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) + .WithMany("AllowedScopes") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientSecret", b => + { + b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) + .WithMany("ClientSecrets") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.IdentityResources.IdentityClaim", b => + { + b.HasOne("Volo.Abp.IdentityServer.IdentityResources.IdentityResource", null) + .WithMany("UserClaims") + .HasForeignKey("IdentityResourceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.TenantManagement.TenantConnectionString", b => + { + b.HasOne("Volo.Abp.TenantManagement.Tenant", null) + .WithMany("ConnectionStrings") + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/Pages/Index.cshtml b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/Pages/Index.cshtml new file mode 100644 index 0000000000..73f229b4f3 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/Pages/Index.cshtml @@ -0,0 +1,34 @@ +@page +@using Volo.CmsKit.Pages +@using Volo.Abp.Users +@model IndexModel +@inject ICurrentUser CurrentUser +@if (CurrentUser.IsAuthenticated) +{ +
+ + + + Logout + + +

@CurrentUser.UserName

+
@CurrentUser.Email
+
+ Roles: @CurrentUser.Roles.JoinAsString(", ") +
+ Claims:
+ @Html.Raw(CurrentUser.GetAllClaims().Select(c => $"{c.Type}={c.Value}").JoinAsString("
")) +
+
+
+
+} + +@if (!CurrentUser.IsAuthenticated) +{ +
+

+ Login +
+} \ No newline at end of file diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/Pages/Index.cshtml.cs b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/Pages/Index.cshtml.cs new file mode 100644 index 0000000000..77ead3d91a --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/Pages/Index.cshtml.cs @@ -0,0 +1,11 @@ +using Volo.Abp.AspNetCore.Mvc.UI.RazorPages; + +namespace Volo.CmsKit.Pages +{ + public class IndexModel : AbpPageModel + { + public void OnGet() + { + } + } +} \ No newline at end of file diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/Pages/_ViewImports.cshtml b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/Pages/_ViewImports.cshtml new file mode 100644 index 0000000000..c1da1f5f10 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/Program.cs b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/Program.cs new file mode 100644 index 0000000000..7349f8eb0c --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/Program.cs @@ -0,0 +1,51 @@ +using System; +using System.IO; +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Hosting; +using Serilog; +using Serilog.Events; + +namespace Volo.CmsKit +{ + public class Program + { + public static int Main(string[] args) + { + Log.Logger = new LoggerConfiguration() +#if DEBUG + .MinimumLevel.Debug() +#else + .MinimumLevel.Information() +#endif + .MinimumLevel.Override("Microsoft", LogEventLevel.Information) + .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/cms-kit/host/Volo.CmsKit.IdentityServer/Properties/launchSettings.json b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/Properties/launchSettings.json new file mode 100644 index 0000000000..d3b75ec67d --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/Properties/launchSettings.json @@ -0,0 +1,27 @@ +{ + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "https://localhost:44318", + "sslPort": 44318 + } + }, + "profiles": { + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "IdentityServerHost": { + "commandName": "Project", + "launchBrowser": true, + "applicationUrl": "https://localhost:44318", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} \ No newline at end of file diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/Startup.cs b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/Startup.cs new file mode 100644 index 0000000000..3ae2eec7c7 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/Startup.cs @@ -0,0 +1,21 @@ +using System; +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; + +namespace Volo.CmsKit +{ + 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/cms-kit/host/Volo.CmsKit.IdentityServer/Volo.CmsKit.IdentityServer.csproj b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/Volo.CmsKit.IdentityServer.csproj new file mode 100644 index 0000000000..cc4b05cf3d --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/Volo.CmsKit.IdentityServer.csproj @@ -0,0 +1,62 @@ + + + + netcoreapp3.1 + Volo.CmsKit + true + Volo.CmsKit-c2d31439-b723-48e2-b061-5ebd7aeb6010 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Always + + + Always + + + + diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/abp.resourcemapping.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/abp.resourcemapping.js new file mode 100644 index 0000000000..e2189c3c69 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/abp.resourcemapping.js @@ -0,0 +1,11 @@ +module.exports = { + aliases: { + + }, + clean: [ + + ], + mappings: { + + } +}; \ No newline at end of file diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/appsettings.json b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/appsettings.json new file mode 100644 index 0000000000..4f92ccb8f8 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/appsettings.json @@ -0,0 +1,28 @@ +{ + "App": { + "SelfUrl": "https://localhost:44318/", + "CorsOrigins": "https://*.CmsKit.com,http://localhost:4200" + }, + "AppSelfUrl": "https://localhost:44318/", + "ConnectionStrings": { + "Default": "Server=(LocalDb)\\MSSQLLocalDB;Database=CmsKit_Main;Trusted_Connection=True;MultipleActiveResultSets=true" + }, + "Redis": { + "Configuration": "127.0.0.1" + }, + "AuthServer": { + "Authority": "https://localhost:44318/", + "ApiName": "CmsKit" + }, + "IdentityServer": { + "Clients": { + "CmsKit_Web": { + "ClientId": "CmsKit_Web", + "RootUrl": "https://localhost:44350/" + }, + "CmsKit_ConsoleTestApp": { + "ClientId": "CmsKit_ConsoleTestApp" + } + } + } +} diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/gulpfile.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/gulpfile.js new file mode 100644 index 0000000000..5dcf4c5c6f --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/package.json b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/package.json new file mode 100644 index 0000000000..dc3297a937 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/package.json @@ -0,0 +1,8 @@ +{ + "version": "1.0.0", + "name": "my-app-identityserver", + "private": true, + "dependencies": { + "@abp/aspnetcore.mvc.ui.theme.basic": "^3.0.3" + } +} \ No newline at end of file diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/tempkey.rsa b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/tempkey.rsa new file mode 100644 index 0000000000..aa07a3b6a0 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/tempkey.rsa @@ -0,0 +1 @@ +{"KeyId":"0590816638b0f87bd230e19c32f7cec9","Parameters":{"D":"yIGe39uGuy/OUB5AurrPjG+bjZ9V+bt7m/yJjOd/1jtzq4rcxc8iz7ZLgXVkSyzjgbg6m1x/xMFoUGdwYHdauvcuM2ATuP4IMxJ4R3L0s5Xk6dqYaCyN+3LJ/1H6YlBz6e5NdljVwybjHJGxuJRSE1JhsoHx8f3S3ITvVVLKxknXyWcjIdtYo+x5qEnHyQd7/I0M2q7JkRP8e2pPfQsCNbUYmjWmv/Kr3hI0Jyn2x8QpcoOBwe0gX3tq0V771x6A+zqQYMaU8zltdvzjHBCeqkBJBgYTh/jKBcWDfcmk2yxHg000sCQ5lSMTS5gt5kYsv482S+TrsSu9pCuQ2Nw6BQ==","DP":"iLJNtCSxG77N6xWGbjaJCr99evuPs6SOtUSx/RR7zHQKITSuTq127kpESoaK9FbZyQMSGqj20FX72OdUqlJO/aSaUZA9yBKhpv2+hHpc3wsBaSbv+DadcWpe3c6MnadlV/WhRMWqGRNOr5iAroCbuDR3xR3isIEqZxnf86xla88=","DQ":"jkOQUtr0PSAtRexVQpu4bTVgJP2pfNK90o3NzG7rFscWJb94uBZC22clCUlmRJ+fFTkL4iO7rD7Uz0AYKLOtrw+WOvpEv4MBg7x/sWWblbbJr7alt7XwWoi2CT0R+pBS7VuQE+XhTUxFM+SQDWDMIpdGQ4/MBk9OXLZL99kipLc=","Exponent":"AQAB","InverseQ":"VSPcFjYbRq1lLOV8LfZnF2wdomOMH4uX2Va2b1Z0MCr+gDBx28EJNpUl2EGLY58ejA7dS0uapx0TyDehEM3ShS4cHFMnf8OoUB52EEgsF9msIDX5xvqJ+Bkt9mYiY7CWbXFCI4PZT94j/XdepO6JSr1/P6ZH3ncRRH2IJ6pPjDo=","Modulus":"z1wM2it4NloyS0MO9oZo/SP5N+BwsiP/yay3MsFJXz2/GBUznjTdtdwZnFga27VCmuOjeRYjWjtESlh/M6eTY8ztPOIr1ci7zVpYZ48Iy+9HE9poVy5ATdLuS19nivUANSOdmHB7X1oKwGHJRW43xUwAx3qkpmLnSE5J8Zpemyyto9tkvHqZhOAfcP/Gw7KszOvKHS1FEmaE9JFrqFtD5ODglAwF14uTfa6I6Wy0ws49LMm7ul6YZ7Ey1Y9kQ50TuJ+Z7BK/OkjOnTIuM0JsqwSMZ99Nq5po3ERo0iBxAZaYvO4SRjRxwL/tr7KLBtCp/4cEFRXRYz5k/hzGGfbDBQ==","P":"1ntEkTjBbqhZDYw1femyxVfV2RZq8fwUYkFwunUtuLgnZ420U/1ctgl9vX5oBqFdGp+OO5q7+5eQWSis2LBTWneGyF74W+/OPi472CrQFhzL7F1vwZL55uHnCCEpApFvC+PWwTCs4KvariSXbYzy4gZDfUq9x3QU6eHgZXkVhR8=","Q":"93/Z4QwtsdbEO5F4M5l10q9g43M12+qgDAoWUZEM7huxHxZvipBRxuOeEEkQaWZ02cL3/vbmOU35Vz4FKBKw1B2HecZwUUZO6p01FJDWDyulAl+70IlhwlDpyNqSJTcWz5kDszHoqHZDBSSKPL7cMH1tRf02AYgBqIRUf5pob1s="}} \ No newline at end of file diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/@fortawesome/fontawesome-free/css/all.css b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/@fortawesome/fontawesome-free/css/all.css new file mode 100644 index 0000000000..c9816fac8c --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/@fortawesome/fontawesome-free/css/all.css @@ -0,0 +1,4586 @@ +/*! + * Font Awesome Free 5.13.1 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-adobe:before { + content: "\f778"; } + +.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: "\f959"; } + +.fa-bacterium:before { + content: "\f95a"; } + +.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: "\f95b"; } + +.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-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: "\f952"; } + +.fa-dashcube:before { + content: "\f210"; } + +.fa-database:before { + content: "\f1c0"; } + +.fa-deaf:before { + content: "\f2a4"; } + +.fa-deezer:before { + content: "\f977"; } + +.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: "\f978"; } + +.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: "\f905"; } + +.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: "\f907"; } + +.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: "\f979"; } + +.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-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: "\f95c"; } + +.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: "\f95d"; } + +.fa-hand-spock:before { + content: "\f259"; } + +.fa-hands:before { + content: "\f4c2"; } + +.fa-hands-helping:before { + content: "\f4c4"; } + +.fa-hands-wash:before { + content: "\f95e"; } + +.fa-handshake:before { + content: "\f2b5"; } + +.fa-handshake-alt-slash:before { + content: "\f95f"; } + +.fa-handshake-slash:before { + content: "\f960"; } + +.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: "\f961"; } + +.fa-head-side-cough-slash:before { + content: "\f962"; } + +.fa-head-side-mask:before { + content: "\f963"; } + +.fa-head-side-virus:before { + content: "\f964"; } + +.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-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: "\f965"; } + +.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: "\f913"; } + +.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-instagram:before { + content: "\f16d"; } + +.fa-instagram-square:before { + content: "\f955"; } + +.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: "\f966"; } + +.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: "\f967"; } + +.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: "\f91a"; } + +.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: "\f956"; } + +.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-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: "\f968"; } + +.fa-people-carry:before { + content: "\f4ce"; } + +.fa-pepper-hot:before { + content: "\f816"; } + +.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: "\f91e"; } + +.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: "\f969"; } + +.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: "\f96a"; } + +.fa-pump-soap:before { + content: "\f96b"; } + +.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: "\f97a"; } + +.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: "\f96c"; } + +.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: "\f957"; } + +.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: "\f96d"; } + +.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: "\f96e"; } + +.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: "\f96f"; } + +.fa-store:before { + content: "\f54e"; } + +.fa-store-alt:before { + content: "\f54f"; } + +.fa-store-alt-slash:before { + content: "\f970"; } + +.fa-store-slash:before { + content: "\f971"; } + +.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: "\f97b"; } + +.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: "\f972"; } + +.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: "\f941"; } + +.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-underline:before { + content: "\f0cd"; } + +.fa-undo:before { + content: "\f0e2"; } + +.fa-undo-alt:before { + content: "\f2ea"; } + +.fa-uniregistry:before { + content: "\f404"; } + +.fa-unity:before { + content: "\f949"; } + +.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: "\f97c"; } + +.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: "\f973"; } + +.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-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: "\f974"; } + +.fa-virus-slash:before { + content: "\f975"; } + +.fa-viruses:before { + content: "\f976"; } + +.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-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-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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/@fortawesome/fontawesome-free/css/v4-shims.css b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/@fortawesome/fontawesome-free/css/v4-shims.css new file mode 100644 index 0000000000..e4d93da345 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/@fortawesome/fontawesome-free/css/v4-shims.css @@ -0,0 +1,2172 @@ +/*! + * Font Awesome Free 5.13.1 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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-brands-400.eot b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-brands-400.eot new file mode 100644 index 0000000000000000000000000000000000000000..8745c3eb06a1307b20b7c39bbe7f8dd517911e47 GIT binary patch literal 134878 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%0AOvHz7XWDl@-ydl=L^4Py5L( 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 + + + + +Created by FontForge 20190801 at Thu Jun 18 14:52:21 2020 + By Robert Madole +Copyright (c) Font Awesome + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-brands-400.ttf b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-brands-400.ttf new file mode 100644 index 0000000000000000000000000000000000000000..ef792f4244b8ca1d096741f5b43a74c1bd36df8c GIT binary patch literal 134572 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%0A!*q|pB=^x9NFeid%?3b(xc+iHsc8`yF_^%j z!Dija*ti?1I^niL;q=%XRgGxn60Fn)S^NV{#WDafM4At|ciK@aO4l=mQ_)1+bK`gT zI(boyLLcRud@|1RaM0EWpQNnmTCl7!&7p~4L2SPyux+h^*ujYzF7D{9P~A95&?H;X zw_^#1Mz9DI%Rp=a4j2e!thGh>qO9ZAaljWP(NJAkwT6J8BX|VR8M|^qR3(u^+?ZCD z*^gr-24bsREXBx>jBMCuG`mJIZ6gX$0f&~1N?SHCFbK^GfFmJT90<3+MAyRFQZ$-q zNrs|ny2!`LF46rRp%94zN4J0>B0iOk%}>dawa%kf2LYd*?|F6C)h$CAh$Cb_bggch z=KRw$rofw~4s0(rKZysH*YUHg`D0@}J*|m<2K2CwGKc3x1q!9Y?~w#f#c9Ki=iuqXs8Yw$jf-5_Z&7=gXx zn`_8?u|=^E2B2!L*-GQ^RV`vk5F)DPS*>UUG3ReYXdwZ}WuZ5H9 z`ugVg_ghvjuP0jP!>48fog_USZ2$;Fxjk_i(}=DAn!jys#?isjcZY=HztR^*IO4GUpcHS{+f zN=Q}sYY_@W8Ck7PgR|g8i9k6Iz!{p15GXp#v>Ys*p}uQ8g`&utvRV+7bKvdK5hW*n z={?zcOgyfKLpD%xJsvkhk+AE>=g0FAJ0x?_Qy}ir1$B0zP&hl1Na9;aY^Gp*BOWze zd|s+0_V*ghL!MPE#d4&Y^u416>btPMMM=qtilc|Zn4o%2jx0%~<#VlwkN~n? z1t1gFE?aGEx$LrAl2Y>eY$lb{lzZh?r78=_f*OjNk))|4Wqb|+A`x33Fva6AYnX<~ z!)^{HOG<#XMUfOpI3dtCD9kaE=9zh)P!8HxMdFc9TCHBK0GouZ`3cg;8R%= zU3wR3OU&j}gh90k^M<=NO0&2Q1KwMQO$ad<gwhKB&5ES2RAlw=K zW#}ptaiVci;B9_3h$76=c~CFH)}jy79PFv8X{t5hw(UzUO^zRRo)o8EqL(DvvT(3vS)Owcr9SE0=o3pddNlic-C`08FJ-J#lV)3j*!$&{h^X2pAQYIK%d>DuI*tst9NUWJ zpjcLs>WhdrAXb4>y5YsqLgQU?>(ES;2e?j13XobvM>mN%jACgU&e?lvXKr)L)*_E@3#LhAkb3G-Z z0A1(RIfZOn&x5X@OB4{Hw9}kJY!E+1*Z+UeZ=;bsS8e!vJB}yX(L8JJNxM!uaYvN2 z?f%nIf@A7F(mwUliEwTDz=D4UEclyxU4B@m)lQK7$bl?t{5wEQaIiE5p$ zj|76`Q&e6eG$I#%ltvA6T!Mg>{9Yd^u-vI{U8qTZ19%O-oFP$sr`*6b#0Su)Jb>st z90p2psgth7Tjagn%}WYi86rTNZdKSc?V}?0AJghy0^2li*!~wzMl;6)lRm%lbpL{ zH2;L|>&sUzKOuCfI4^hp$}RZ7h0fnQsGeHA<5*t5s9uE%*LK|SaG`KUXd+KeJehD; zowmNTelxFM8a{6wR&eA!kA(Q+Nq0U%xSz3x&Yi@uI=2qKVW@nF8^I@{_!BrROg@Rz z4HlwaHfspRqI2Eg?leudkPT9t%Mt%eQ~`mkcDoYtXSExdd_)EN|jmR<9~M2I)I5Mog_#r z@xJ72Xv^WqnV4SuabNO+56`fS1HSML@C5@LjtN5KD1)Lw=v60DMT|PNl7kp}k1X6) zE4@~#)k>XvtAN06LVz<_d+OBcVsCHp59P+xGoocprTNcPJ+;)Sr?=x^;B zzgQGkUztz0>|TZd4GkbMht{W#1$d>V(n|H+W*X8pxX7ExSpb^($m@}hTG~KQ z*U-Rty0dq7d)q#&XReL3wT;xEv6A+Yg`@55qYFpyt(-bdt@q@T*}mvNPtQPpkgRx@ z068G6)6q8dO*_`s7PHBQd@`AzdVxeErBY<-bzN7INxCjopx7>Z3G8*MqYq=AZ#crS zA!X2$v^#^@Nq3l%0vPhlU_m{G=Jr3X-y6+;lz~mO)fQK#uBN+7Md;;g+NeTF5v5-DD&8NSc!#9z04`z4eR^(=9AIwcXrLD*nwA`ah>h&eH8=}c* zHX$oc!pY!kX{oqERmh-h-PJ>xX=Q+3zq5qEv{eD4vpsyVbC4%UwD=_#{D@#426!M-v zlHUd^#7F4Xd$7kkSZ(TIy4r>;LBPK*wYF;i4_)s8AlZ4<`Sy47 zt*To&=g?Kvxx2c$s-~xBdV2D7PacgXDU9++vSejBN**g9`ZNs9q!3%HMHOm9mOXzvObE{h#$2~@V2jw%F7BBx z^~c6*YfFoXxyZJ&Q+e)}Qd)tmtshyg9 zgZj+XtD}3i))TSNlvnn$Y2qAnZej1OZlXFDrPef_IG9M}s`H)n!qy|(GE>SaEYBUg z>2iB4GEx~;mKDeYLcR3R z?#HfP>^xX4KXUceS08${TI|37&XSSXXHULA0O6gUbMxb!=}f|Q90*lnX#J3;g_(*5 zt{g_}`Q7KPexy*juep=N}@8FuD|zjhH_kp`&`q8GX0{|lVg|0jMv&<725ac*u;_{4>?XD^%x@0puh zIezW&i-o>=_U^gr+}FOw!`;t6zy3Au=w&{jE?h{0^1$R1AD^p|l5!tPuv!B@Cxbb; z@vb!x@Q1qpilsfLi$tu<>ba_^j=H6g(^*Crn(`;GxeINbk zlZKWxO*lkw_NdbN7Jdb4_pnD@`C zUsInKE7?vnirez*Lo8c;Y|a+{BoPRE0Q%v~8Q%a12!3=K9_@u5kBo5ws^B49_A#HF1z%yuccFI9&CAN^B@iuW0KX=8=J$a z$^bEM0mWm6No5w>CkNMN6%LYYevjPgzz^jh-dH8m;wxzpLJF4*D3g??EZAgBKqwFp z=MdVmR8C6vgZn4kO5j7}I>?5lxP=FKBX6M$(Aq70Ih_k2N9pg~B3>xJCV=40FQ$kH z5zV85OuotiZycr^wv8W2b=r)wmxWqPCYJ4IZm2dN2;`^D#Q=dLvV>3BWNYZNa!I(_ zk_1fpN7UCSz*gN%+57a5hf5jkbweW$XGBO}8PTAfh-*%b(kdJ}>a~dB+3_*>1X5fo z`O%4x8(uhAE0)?#Z}z87=0VRBMr4~RVkfBUjkFWk@qAS$DrmYYB_wlY0`i9E`av5a z5l7OF0>LeQ2a#WJK$^DT7{Fqnm{>pNq)8sxY&H%i%P8pjyb(16As9=3Bh^Sw@0gl8 zY1L(`kop9BC9Fi<0g1b&gU^R09U|({>&;MvSDF^vVtNOU&mNqB=MdjBkc3)N*Ha~Y zVLQ;Vh3wh<4Vh+P4J{L7I{T-7cs{)g3x!kNhcPphYbqC zD4_$)C-)>4-ybpX*|1WSM8~xdWJSeDf@EfWf2N5fp)Nur?HR6*CSn*WgwEX%v2fFk z1%ojVa*k$Eo=04r$~xWtKW-sVLS`Kh$uIZQ= ztCxr!DM;vlhTBt}o~~A=Kc?c@81p4=S3&oir5URgP=qxN)sI#&WsNb1oP~L`;4MrT zB$8Fl;`Rg8L;XTQY=S-|wja=bh2rjXOtV@Hc%WX&zyifC*TtA z;7d-lPT)UY$fc50^Fdp}cC~Jf0AI_}t7QLGO1-57?_Q+3{*21FW-y=(7@*3ZXyl@S zSj-F*^Qq$hX9Pi(giY?9eL$5%P`YSw+s#a>I5$IMxzuw=%;KBcW9lPV-Vxz9-z=%G zOXv!V7yAi>1ru>uCapC?M*vNIB;P6&TK`8L^6GedX{_v6@lZQk=oUlWRx)$u_}1%p zEmq2*gg$Zehw`nwzdny@9L!5Bn2(}UrgG^m&9*?solquTj#bU6aXBQ8WD~<|;{kNB z`;WqHaem~*%9{+e+!%KFtT3AhtabPX*A2P$3KxiKZ#*PcWgTkOHr^pbG3B+5bKK;A zeD>oHJ@oO1?pH26PR-H08*>-O^3(b62kjq7&YXuIkP0_k^X)NKiKogNRsKKrn@>FP zn@_0s@a2a-?vNobWU7>4WaQP@Vt)F2Pf4BlQ*7hu#|`6gvzH1~T(<(#Y$~NZAIiM` zNw)CBZ@vsu6UAy-B3pYS`l;9LAQx>aF;NQ*Qj@R1fS45FNri2_oq}Awn}Gp$0cq}& zFGv9a32(d?a5s?Q;)RQs-SA2RgvpqAK@+TzP2?hj&)C0g zJaBe&J@8LU7jpW`J%BEL@o-G|LCWq&p1E-0nF~K!9UHrwt`(tpIy9^)8)p6UM_>1v z<5%_0EZlok-F@Mmx8C~BPkb%3xNnQ+ZE1uHnPk*>?d4&+_3Q3AeDc+E=e8WVdl>)t z9Upt21Pir=+9>L>8I(!1u;4YNN*asOPZ7Lg8F{x2Yg(-6#Ae_W8~UGWfq1Q!cFU=$ zKsq0tF3$W+%}vOXN_sMw&PAsSGq1bt9pih?&E4|Mj{EiigC z|2DC@;p+jf?e-@xT=?WCr}K%67Z(nH^2JxV3*WkM3-5BW{E#dkzRF)f#<wUwHUod6z$OB$(YOg8SaVBe`Cl zkF%o>zwzORUwr4|(xiKxdL417B#{H*#vyYfu-MMf{gZhwrOag7H;OK8NE?R^8M%4i zQ3C^jwPE@~kh@k^M5|KL-(WuNC%Z`Ar{}*|PNmA_iGP|Xms8=a_r>#5F8YSfn>bRc9dPC1xL~E6LYjze<^AQ--FW9l#J1 z7nwOD@>C^ii>X8OR){1Q4|xqYbSSk{g|OTzq>N~1VUC1!fdaEo7y_++V_W0U9fx+c z7Fw-*tQ@;HW%1R98G6#ez(bn0{qQ)=rf|9xQ9RtF&o8Oqx8_W(mSMD zy*~>ie_1_8GpKC!?_M^A|6q2{?ChR58PRaM87FT8GQ6NbQGNeLczh%#If;KW z#LjZW!{DnNpMTLgdRy+%&~Fw;VqU#JmU;A=YaY$Uem`3uCyEk?)(eS5u?nepJTg(w zy0ps8#-6z5(MPX&B9>kMhfK8%aauf7gDbpH;YBbuR?W~?0!+~VCSLIlc=16Oley7> z;)q?|>Yx(1gy3DeDc?U3l1H(+B^WhafN#TLu?AUxv81`k2^LTk+KyS1t@(KPguNDz zWUkKy=HfpcuUhu)o?WV0=8_YfehT^=7mf+=n8{dd+ql_EF6k@U>&c-opUrX~xsr1ucfdvaHu57M9{E)=BVQT$8uJ41{D%5BC2xnT)D7wL4%?3v@DX)0vMP#)>BabyQ73i?zy?X5$!EB(mu-d>2rc_xm!JZP z4MDf^UbI7R!QZ|dz>DkQbxW*B79h3QOPlOU(_cd{Oq&NXkX@o#;z!puWqAQd@@Oe%Tij%8dB${io|lRO3gO z+G;eq+usBp%F8!$)BPX6U+sU{w_LXBIKRCA&cE`_oU&}*{}zXH#Y-D!VZuKG*&qiF z(P_jSCyNaz!{!(tk4BGQ{?(`Cs~e|e{~53#IYeka>g* zArgb&WgV#@rAH#`aP$%P%w^!U{3A{lbxwihVgv(1n@fYNd+B#Bota~NC53^QQcJRW zbD1Qq?b4kj7GsL&1jc11DfGl}Y-Q$Bb7_Dc9X^<272fl4hYe&>N%aF52(Eq$RJB=$ zN(VhQ-Ml(6vE2n}1^I3zgm+{`f}__Ju)89S>zU-RIhLe^sj@&xSt3El9aSor1sy0R>PtWXK@Ie8{Vy-Y)<10lS;~3ErMic^qtHu;ZGc{zm__v^yup}3THNl-rC)L*N*G+h>?WcP)`_4PY zjZePwg1UC!^ju|sd1BC?tn9BGRX@4*s)y$emUo!%xaq<>ca+!fOX#WS4G-TC1+KLA zO@9pkCZ6+uhD~XLS|(V0;qs|*n*dA7*g?koyC*V(FNci6;DiHSD%Dy5yOH8`Yd};- zJOk2N-)#lgKQ+5!PvUji*R1WU)|Y#ge0=d}Z*StsYmlnZZuonb0iXr>8(cfc=f`*^wBF{WlrW6+ke|!tR+BGPyA+KD%*co zeyvrGW__PeuG?Q=drGYnl~@DHGQ=E1#V<)^xkkCk(5$C#5QdCxF}(R>NE4F7qL~f` zipgW)WHP)p74^hnRnN)0g=Oe7Mk<%SpngVuiv0U|vhLKy4FJhm>F8ZMO=R*Pd}TaV6Dc~%P$YlvI4`K?%~vip7Z2>&HWx27r>18TRA*``-JILqu-xxjNwf3jyH2_)5()HH zPn>vHG7jMm2)noeyL8M9!tX}&3=lQut%NIds~o+yIanO)EJgI9?w0eVmLg&u2^G?_ ziEOCay0Z=Y1_3L>`D~#4_*kNTyf?A8?S(sP0u`j2p|~r?q4AjIv3J1FazCUF=Ch2KX*|IrR9%dyZTgHf_93F!_KjIs zs6>8YOUZS{vC=a=Un4VQBy-_kVJevnKh{V|9oHUFDv*~J<(z#kvO@+M_3D=dSHWb!Zl{=|O8{ajmUeqcC%$s)B|! z;h}W{L9+#}MU@CtdI%iwu$G$)+hZ&7VlMbDFK^phMuVxG7M-k?rm_+9^te7Kxq*D- zt!|+*K29)9g}pq4Q;9g7RuIz>mI^Z9e4HYr69$n+Uw_27J|E}$P!ZlFp-I)48EdHI zZ6CN(&42KL_o(M@J+;2>=XCy6eMvnEtM7;~gvp?4&k#tU0NjvkkimdvptB3!sOR;w zSM6vQu#ZEOO`GLZU@TQmy9=RgJX+V_eIq1UyJoLy?Y#FjtBJ<+_#FM2oMt==ch#Zy zMI$|JI+IH1)*Vn($($eB__|;kCEw6&GgpZrN=9MZ%F1&qD_2XL{|(QbI`te0w#)qj z9X-8+JMVulA+F0{=&=AfC$7Q0-%L@!G!4XLf#f)Hj}%57+iN>D(HW^-i%_T3_L1oL zwwVDOn(X_tmaTUi<$Nt(MB%3%odQe}+=GR2#f7MT%!d9Wbv$k01w{)++O?|{+s{UH ziNaZxbhwgBHTAoo3d!fVEt+;uQ`53Ufc`!wlpyN;W#XoH0DJ!L*+8)v$kv=#%<<1n zxH$h_{WKDMkxVyyT?jpb^M2~gw>6M>hyn51D)P#AW1&E?5!|LAv^Mf>*adwV#@tJr zya34cP1gcdt)45C-K_qGGmF=6AyZW@q@#;RE1G+KC=<(ouFRY%9$SpA|3wx{infi> zU_AJzHb1FX;V#&A;dKR;WTVkc<{w%e=y`UW9p5|Q1--d;bWDGXtEJPK8kIB2hxB&j zwrGZONQbyj{8srg<;k{f6;A}>!B|GNA@@}JJ^hX!A1L6flgRP&bi<)2>BONmEn15+ z*5`m-GD>CgitzWXv~*?$#sa(;PF4U-2bW8xePjT_+NAjrpm@m3Qr4zYEd9k5a8&?QL5pt5jJxpw&d)2E5Qr zYX8o{aZu!1cWW|UT0L4yk>Wim938`JA~DeaLd?V=!$+yIj0C?R!xvq|^0*cZ*fy6! zf|;Tmd>!uN^wftV9*%YXbZY0Bd0|`Ke|O_EAJ{&5boun@}BV^UhaS4xCJ2xs86!=K;1k2pP%kmC z8|tR!TuW~3rGM2PQI82$U=+#Y z3tJ>n8Fqf30-l5QgVkaQP?5qQ-nh~8>17i*L1rGqVTcj%KLn1-ps#WND@uFBJd3Q+ z%>U)&)8seKy8IP#?PNZDv(?I#CMHU`mSx6FIz^z+!l_(5N%El(qqM+{WFxVHRrb<( zSM^=<>~9As2f;@g^|sZCVzaHnRDUW{p4d83&Y%>b21t07dW3$fNf*NOaE_i8wQXJl zmyN)z%;`<8X2~m%p(d~37h3g)0W}Gti5)~yklL4y?AsUlitixCx}&e1-#7Y?mGoN4 zcV_?3f$k61MDD8%oJE3&-acUgZVp>DY#^h2;b0F1AjT2lZV?=e738NFSK^RMwd1J7 z&k1pfi-bC$R`T+<>gQASU{D+qgKGHHiW?q3>(cDlV~_srxDtGnaO*SKWCXu*^8p%V44i@<|4m z95OZ|ldwhEODgHxDp)OC5)pz83bKjVGH2u(*jS!^8havp?P`5nFP7{!3tM)N?=RId z36)6iS7QN>z8=wq6L+47Y;V+7j-AhIr8<7eM5*<~Qg`*3@+zUofo!{}CK_4SP9^$@ zjF}9LPE3wRrqpWqK(RfylT4rEq~nFsn8v+=d-8d>C!go&O|Us)UD$0Js!0X53~wKF zT-NMCJ0($NU-LF6m6~{CFk7CQDbMU)ER_a(rl)pw^B+3;&|2Y|YYJ=Hn^bD@)cXHD zHF>ssbkIt<>HaP6xot}}yLjQ?nI}H6n!ony!s;(x^v7S0{kPeFkZ4Y0W4`OjT=&zDbC@3^CS>Z?C7Pycg#5c;eA>!m-!R{IsQ zGP0F~jN?SQ(|~SFA0)V{UA>7xo@i6Z+n>K}@v$v>_?FUleh~b*&s{rm$q4@7J6pCq zw#Y5{$j3frumAm-^>01r-n{;;uX^rts`W9J$+%7;U;h^QDm=L3zND9MEJKt;eM4S| zmm|chK!dC%)ovKEEwVhS&1>}sNh3dKlm`(rX+{R+#vpGbGiGi3xm(U{ubJ!bnV9(I z^v&a~JMR4OhaU!$SjlIz`O55;Z0qFOQlqi7c5-^_)0t?TMmO=>C4emaL4V=LT?I2U zWY`k?UEjx0z9RCf$B?jcSt)sARMqAMFed;vFudkVFB7~}&*$Rn@1@yDT-_eeH7)n9 z?c47HYNT$r*8gR7b@gQbK^6bfm%eoO%7bsYQ9ba|s=4*YSm)sU{6TB|z1ZW;=31-u zuBit$p4b1WiJLu~BSTvtK% zW_B*#0e>t7V^hW2la;8VjMpk$$fu@qBsxS6ZrZpJqS&`Feh@gm$YBzT_43MSwk4&j zh;PT2&2N7O;|z7uHZvPPrsG?>8|5~He+(>J-xT^cWV@n-4t%`jeev=z_ez?) zxC!nu2+cTo;XS#@d^nV@N*@|!m+)FFn0ZRJ;{j62M(bTl+=gL}TF$Jh$v|{!%q+%p za{;4!SpfX&4v0Z)TxsI2>>aTk+2+J}H5F278@wR&dy@V}M5|*qT&7z_tq|{}usMbg zr};ACdFJSWk?TdC;}JJFcVg(i0XMX3Br#@492FC8fxstAeI3ZkmYrF)sVtD71^ygg z@(YkCBZaq?-XRTp-W}@=V>D8*7dg=%n<-^Nv(h@nN)*#kOLKRvHc#|N=W=ie=`lJn zfoZfYN(6wW1%s7}lZh)%0mI$+Od2Lq$?$khsWY&8t&-&4#oy}rO&J1;QUR->^>x9s?{c- zAO)!0X(51Qh6amI?osN*5{kbD2Od zYd-%sIY2dGyVKP6K<}LNN>M9ZNtfH5QIMu~BH7%M4Q8u1Zp)Tb)XA3_;hAyQh*E6y z@}}}XQ#g>f^=Pu$Rg+ha)`9rf+|G<0$<6l1Tx+g6+OsJ5A79#+Z~XeqawZW0ya?g9 zSxFjBAs_Yi^d?v6tuJLc=@~-K9ZD6M?{d2MWHxsVD)z=4ln-)d;?ek}>^{DV@DD5{ zV8Y5U(fNiiqo48bo59@ULEpEP-l={XWJ@;e3Ca#UkD+1#$0DkN+u{_eam$GnayB)Q zBLL%-&HK9XLXwG3nuHPc~6ZYbiT}edA z4mg5WQrfmyJR8yjS@Jl*mo&?u(IlML1UPg%9`+#0By%qv$1FXZAcq*HS-3;ez|TMZ zJ~Q$YFjn^-L z2w6sO0>6)qa50k|IxUrzy5wv_i0Q6Dqvd3LtX`goCli4@kW3CXnk_0f%sE502OZMKG6ZXwr=AvcUy^ z%PYs0=#v-JAFGdIZGvPXv(0E=CY2GQ%sW!|gq6`6L#K*s(#NtIiq^FHifvhUMFPdq zRyQ46NUYvU!C@d;h`#=pUjO=2k!CZrYyEpy-_#siy>(Rmf)+N`PW5+`VvUj;zIC;@ zHyQC_r14I@p4IJ;GgyD>cdm`!x>`Rf^3WPFuth(IoFDP)7p}nn1JeWbZN?tp#J}{< z2yP?pFZ+jh$!=Z#&y2`$BA5MVC^5jWZc~;!&@(B!-5V8c;ivGuuZIFgI+Z9*$GrLN z0c!=xy?ez9Zl4dur%SO++6bnDvO;+}7Vd5jnX&2(biBwt-eDB-e{`PIoC9`QfSI>;nq4U!(Qh4vtQ)o1KamL@01L(P76VtsdFESsl( zJ3wIy{Rk@xpj={k{(FBC&_30%x2yXTX}a{W)jrpnC3;z_?2`+4#f&-3aGclCjh$3~u^uKpLn9sd_}fM6CR)6l4c zB*8$jfv(BBHtJpe#Jul`z+)t~2^zP>ypeKDN$LUC@C^V2zc1z(9t8U2&FJvS z?Uyb9!0mr65XG(`Ned@;>_}drQKPO~b)Bl~MqSU&SL*plq?#P9^ux9rAEi?%mcFG@ zx&3W|{kcpG8`Yeq&4U-ouYWFHOb}@dSDl2NoGw?3M#^*+2IC<(YKUvQp$>Gf5^oN5 zs1~KE`aJ)@R4Eqmf1-sW z@0i#z`Xq`onHU#Yae3UNDW1$G+c=H z1yZ?-DUrd%&Oi=6AhI?PW<1i{EE(uTD%zP@mEgYut1$0uLJDnJokWS9@yVuHbqCbK z^g<4(0ogN6?bb++sFR%HP7v2xyg<yo#BW;JnaamCv=xizqSIk++PTizwUP*hL;)f}vJx1Yb4!#?uqELa35}MY`#p}1L*zAuCjK#-0>)+pg z?bbiszGvH`%lo!ZW%khbJ_7IR?%6$SyT{4}rPT{NMtAyS!$#MBhPXu@oEcYF*ogTr~0v?K$$UI+9liqgevF z2QxuhB`%w@^iF{y5GNIrO16Wr#3LO(cjvF)sdjth;v%I5tqc)15#fi`HE=Xh*dGj6 zC{NFaonSabyJJi$;H{8K>QRWc3_DhY#1^DDK!2sOwGccn`X{SpZGp~;6h`egE+TU>c)4ukWli^TO@5{!2=INTUOCWqGVk59kHRV3ZXi2@WTerpNMGvoKXi zk#qDK&Ban?qEevajh+~C|`gE_QqpT6QEtPwd3qDI&Rq|+uf#U`=!(rOy+ zILD!9RDg~en7#5>;Za^4i3TG1njp0Bvk(`WJ6@wagRGJBh<~AvsvOfgVTN=gzzQmF zXr)XrMHgX>vP>^yI5ATXg9)Gyfsv+k3~~Z1ij!#M=1sVp0-;_zTPmse&YG@2||$YN?XR8Y1a4-HJP z0aUwaLtgAZr}YGU<~q%}X{t>Mj1rwDiE*fii!4|1NV$qZPdf$AaYM>pN>K(8iAGJ! z?IsxhW-w(3lbpPYxq+frteHabqd~A1i^rX?(+dS&JyC4Z?}qUpd6gHaOMF&PzW9{T z4lX;mj4+n8dj=V*8HcP2xhB$}4qa-JnFeJHtzi)X?xngIus-_RW=uG%=(En@QZfR= zl@lcjbgP4bz?1_L8nB+U^)qrE0I>V59$*b3*)Po>?9}e*v!R4X13)vP-?Z(3W##?A z7*o_XzjiNIK^RVi)i39S9yXE`5O_9zq4l$P?^3$tIdSV?Xw^(PxGaeEx3&$WB5REi6441o#c|Oc@~Qa4bOz)}#Y{qYgrGi1P6n z90v$yiX>7+Vo5zoql*IfZ9!5qPy3`j&&p%rQ0p}r<%ZG^Fgy%(CDln#pT5l5`|YbPUc9(%JaO^LD^H&ePs9Ro#JIX~G#GRP6BnJp z)g6f#m?t4m&`w+M$ORrCtDP4rMDU$V`= zo?E)-*jnE)va7jlS}m=Oy79U5*$i!rz3xhFI#91w0`91KqSPB=%6 zltwqlLgh$R%hP`{p0%=YlV#hPDCKXPak?)srlRE3q?fbY{>x+habGNU7P!JKvtLh#mH?`5en?92-$k$CL&`KcVKwRNc6+Mk_B zqjV5H3AzvwvdhjU88yJ~Vn);r$I)S-ges1fv*gCbca5qus$c*uXME<8QIiL zn?>u*jNPs%VP6~;Wbjt9TH45azwzGpe&fMMKl3Pm>t8tCJpHa&S~!QhX={&F+*{sr z=KxsCgsk-5OCwi5CM&+sJl#BT?M*kmDnS3{HZRp;irK~W&BCfZfOWo)M&<%p&=@E)M98*+bKC$AD>4J1)mFU*8gDO zYvX>a@5i`j(84m+7*=yuO4eX_;R^eZR^m5IbkV$$u)+UCX1C;VsFq=AmeD6}G7}c> z+Csq!ZVR4CdB;o#-I$S``-gJ9ku(B79&(&e(6x7DC_2Q0eM>|S#3RTZ)rrK(kkF;i z{4$6Yq!$s)J55w9@}5Tx0z|rXXvveIh^wPfiKj*@xr)25pqKZ8kFT_hEF6x>TPC_E zjf!`zHm1no8)dpX!4Kqx>80XAA!|x^568|Xqpmit(b_{Rq8*dO;A6}u8aja$LQR^< zRM>D5sG4XZXiTMyly(fK5@i`u-()n2n)*gC9x;M($Nm+(aVbD>oI?(k81(%K{t6ZT zmVfYQo<)q#K)~4M>RuErA|g6uDy+>&1dbqfZqzUZnw=4VwG(AnR(CdRcRV=0PWrjEdRfUSV-89Ct)a zyvuT6(~P9UzQ&>uPpoL)bwm-{DS5M9*oXXp2>_3wjgH>>p?apv^GE_F3RI%Vij7&_P;HHEMU zhn#P~z_?+YTKzp%0kQF$P0@#x5oy1-2 zHVUO}TQfL>4AV{-w~+bL+KfS_k~(oi#wWF5@=VnF=RK`bQi1X41e86bLO$>KmUnz|KyN13d&E5e^cIrx$i(J+*loKb^6!K=^pnWi+|!at^V zbl1$(HMY7}#WnTd>!|bttKWTA{~PWh2ItnTiI5%pJT=evKoRmZ?R8$y9En(QrT^Ib zK!%6jrJJt3w3vuJXePWbO^nwG$7l5>9*3dse=X(-J9wS0CLuazk(>H%!a(ig-e5x< z^5NQss@E~Y42o}6U@h&yC`F(Vbx3{Th;LsBJLVflev~L48u8_sD>+GV3(;$w6p#E3 zh{Y3+hcOqcf{*1=h*&ZgT9_qbo{*PB8u`Ua^Zf*f3@B&C9;G}}azBE>=2tlNxs*MG zArg)a@ZOwj)n`nuA)hmlLs&k(zC?9T>^%fT+DmjH*YwVA$R#)BhL^7L%nENt$&@eYWQfm$|++n7I{lO%fY-cL5~RaBeBru=;LZTcCekU)acTQ zf=3KtJBNt}x|J}Elt_Z+D`vhxfv2Y1*~tGC=RjNvj@VS^m>qUvKZV?}m^(jTn@LDz zIJMLyp_VeyNTNHR*D{F%(;Oa28H-3EYDYYnTpeHX(hsp^;tx^=zY&eUs7?$z%cnO!L{378pYsjM&f^+E&!sb=%t7 zZEMQqs|#z~|4~ifZD{|CuMfYh*0PN&@wd3XG!qDgrcH(dEgE37leW0#I^SLcm4F`} z#lQFj&lOhx-AdSW730N#D1!rxtg-qcrm z)E%CwSLSj!QQW|Qo&K>sS}>a$J5@07MJ+vW=tGsgNw|a=Op^JEgRfZKvHqtVm~wKl zTs&V%+bSALQuY-BTJE;+Ox#l3Ah}5siNX5MzDiHhr33vYzl2b|Xka9G>EA}?sBb&s z_let24DdWLz+0&N`q;>qMt%nw9nl8zr})Es8bA(Zn{D38`N-MLm(7mIY65uvn!+9> zYej&wBFS5}pRnZ??$9I{LXa!NcL@W|@&(rQ|7=OpmTiAS?8V;};Q*{P_7p~l`r8@~ z1L?#*91->o&E|><0|&o@wsui(Xbt}B`bucFnyq-%*HVnQ{_O-r(5caUP1Bks#}hJT zXk?qFzEdA%2sHWaXRB^nKd5H|Tj419#ey4?J{xdbM510{NrfUh(FeihbKa0@J8KT>(@sLM^QzQh!N5@GEg|x{T?Z~t?Jvka~Yt6P+rDV*30z{t};~Phj zfKc`5v@<4^P9!A@VGk}WxyeX4rdr~MZpNu{NPq#z^Mhyy#)~L)^dE^Spqj9G4~<`m z3Hd4?mT+QBc-+{aV%uWN4$?0c9=;SB?W+;jh=on_^o~fx{@vHezpId(+u-56i#WAGJ+4>b$S$kubS$l*Ei_|G#yAS0b$ITg+{-PC9N?_U^x_f5zFO)5eyCWcTAP-}r+ z8(L)|?m%sb660?fC46}>;b;QHDd!P=haHJ5pW^JI2C5+nZ+CKM7eVEytUNA6Cpk;E z8|EX^NWMIvu>Nc@)l}CKMF<=J7x&EvMCqv2t;1#WE!acFs+Qb>0a4-{3wga|9AA)l&JeLST0)|XBf(mFKcchC2Chpdj zviSrMx|@vx;T?V=rEgBp3)QOGLo&OObb$t>n}_k2EOiY#aFelcgFqzT_(RLhM42f@ z+zKV!$e{#HGh)d^Y>uKHGvt`(Qv^tY%`p#Jl6`liLcus$)T2MNFydLEbR!5l2QC)} zc!Z;oKMV!CME>xFj2RRk6j2&XFd$g=aPK51^$*%k^&VIO2Y$2CBMr&_P$6via;PjfC5nc)Z`oyr0s@d$BgBb~8(W=^q zvY0aDY;HVfB#YAM3uc$8U0i>D{du+WaQ_$fU@n)g>NR%t66^oa*tV@PQ(vgOJDeJS z{P5w&$2+R?%!kywe$fBQSNdPMxIeYU&?e?H`YQxBKFe1 zU@w`z%`12bq?nGX2T<)dM@kH46;MNIGAa~Y5vI3g3$^Q@-5+GsZ!Y5Tjsg(k`VEsj=xD}4kJte)t8~V~?CQaGPa6q8jp4T+>SwxJsXAfcz>G_d z&}y5$<+C8hJlg_oBaoyPHwbwqbwlFZU6eUrKaZQ^lrt*3&oyu`3$Tg>QqmYiPQ|YX(B@+?6?bxRS`aJqI z6VOI$8hu@~T2l)q&~Iu1s(IeBbmUSk3(;esk#==k6Y~n|(2k^4yW*rW2H6BUz8k@a zTQ-uU2Iz&5jKqW8x9`@}!RH3Vw6}kHpIUfoHh}V9#aK)%v`jmlBNF|Ofha}TbUYwO z3s+OVLeAETCi6OFgH)q=u_Vk^Hz%l?G*u+-#nUSIa|G-R6@2^KG2Vmkcn82HL;HCk zp`jFyPvz0K#B)V)3EI&BNG?PiymKdqr zJv1aW4l*%C8Osu8vjAY0wIln#vTD&BeaEjX+cD#|>%hHI4xYa9WWey=>VjfCdLpie zV_NFkA9q5o8*=wYqkCzg5si{?YSwFb3=lr<=ezdyt+o|ezq$0w*991SC*POXV^)`i$$waR)BXpGU9R0_mS0!QBxqe z|9QdJCuBH^#V8>!|FtbIhRghCDT0>wBr=hKykG@eoZPw>wlL#Nfrf=1QZYd==%zwqP)cj6ZP)nU5KSfgn zgeU>uN5dI7IyGD(HxRNv@?krXCmvy!gViU0`V%y5#5)L6{*IGlM`x_9`@`v~t26`18T~62;e~Xs4_3_QDpsSsG(@PU(U5=UpdcO;4L4&zc#HeFjcd zE4zDFo-#xFB%VC{-^?EgHFI8!x0>B;My3y48))=A!ed&nJkIbD|9svpQmIOF2`=eZ zt(-%^1;XDj5gsgMs%JKGkDE1s|1m%F2zAD=#M2h!70>1?-fw>X?=8Q0@wIoq|HX&( z=U#m2FMRoX_3TCG?z><6;=|aBul!|~zhyY1C)B0iQvaep%Ph>GDMm)cQ6pcW&uGJY zBsC%yUX3o!3n`vM)_AYR|CastZE>B0TV`)LdjJ{u!2?dYcW|jV8OwLy@zq| zKQxX#yl>^^LfRNzzGmUh_kFs)dw!-682`)zp{2`wE8(`5z6@Yg#eYP$;XM*h^x<3? zaW$A=R=;I!dWxG-A`CKA<{>TMWN1a_vMZm@r(eh=&Yg`X<=H`coLF|LW&)L&7D$*~4Ts@T*%KoM_tKHV1J z4#(yn5WWwGg*U4XrQ4bM{QTa|$@=AsLv`8AfF|At{HFIg;hz)3~Hr zW)Z-y8HpEyGZV={Z#LMU4+ZwmkKWTH{ES>vTvJ(-*dHdba0cfr}6$!k`)Tf&WF^EkXJO>2wp zXv8c36ua~HX$8gtMKJ8eK+fOg$t=4udEho+Q~%4zo3uA84?kp{*#5O6uYo&#WB`5( zEh0t`(M*cEL=nk5D)i`sEiY(t#>M3(2njVth+u7e<7v2rmvRS*obiezh-fOgd$`fk zh-kQStLMiIWb3jH3~L*&mZ^Z<*rLDN;b!>KAL(W|?NuQH3cC1+5$sO*;PhbAjd_6& za1lZnrw~Zysy5Y0V{{e%t4K@_n~B9xR5zlbIT&11hS4A?rSz>dpw-m}u&|9>bX0S` z8Ow(V_BaV5-FgW3mY0~W`FE|7+}cIs@_0bsj2@hnK z8$KU=BuMFS6Yd&A%a7%fsZ0>Uk%f3Tp74OM!JHqo!*x@?F_L)PX~Zkh8eo<&H?qRh z4Qr`jCOk%ro;K%k4;;K{m6m zKcUipZ@t03+xW22@97=u#v8o5@V3_PUszDvX7yR@+lbd%E0vy^_pvfxQ6FQj=b7ng zGEUr7e_m%S+t)q<)LT~SOnPVId{1h}d*>TF(_X(cvAjHyXqBHj(P&L#aZa`xCo+}g zlgob54;>yaeO8;G#(M^C{*S7VdanYkl^`927jB6sE=moxD05e$#_}ktE}5c0p@b)A zWm@K3rsdlNe1@f^lEO(gztG{^gZV+-4~)_b75_8cAzdtpWQyMg^PR45N~C=of*p~y z=R@`Y_8DU2Ioi_jI}rb$Pvn5?KIe;`75xj$I?Z8<(gsbErW=}kyVaf(4Nzy1*fkg~ zRG`QvaRk{`I)lTwq0i?qSBWpMwX~pYAZ<~&p}b?Z@Qr?x|BQS^e8-G%IAH>D3HW8V z{;z+4a#=Vte=Qbc8KqM!z>tuu#XtPfG*Gj!5Bpt-GYyc9axy&lfsQ^Buun|ELO5D* zC~Lz~N8== zHti^ZD*T;o@{hi}~akBI1IOp|G-8p2lrL_RQpn*5Pu*G&K!!j|)L~ zJ4j4{s#7jHd*u{d_X|ot<=Ig$!&L+E0(Etz)3bt;6S`UPiqU8~?bIrx1!z3V7{S3} zjN(6Pz{tPR1GQYW?Fw1ALOfc=$$`ueqGxDL#E17{ac(3Vl%}@yDok)zNvcUr6{vX> zI|iKsfeq~=U|!95DjGDf6`&?o5on%cNi%5Z#kiA;lc3gS$i7 zCLIzSf|eMrh*A-z;DMt)Bj8rB;pecsutv#RiD@oqV4Un>K?Qa=OE*6hzShe=^u=TI zGUNgDRIN68?sCYKdU#oRfyf8^*%ELVm^3=V(a^J-OHG>U=PQ*Leqj)b zBwa#G1hl|>RsNX5YCB2gP9c^XA6+Y_E9C6`_zEN73t06wS(!HHMGReTpN~iHbx>s7 zVu1@uM?^6w^$u*7r`LXTd0BlumD_duw(hZFEI3^rT(j-E{#6gIY`NlF=g-&I)}Gk@ z-&Y>Is(;;LV%3@P!8pC>0QeUwr#yx8O2x%1jU;>E*D@1eyGuO}n+#id!TZnBn9tqNX z#IUh2?@LD_*j-~=w};pNJXNWr)R|OemGZLkzm2{;wCCh@kN?7huijF~Sn89-RK&n8Y?_J5^$?#wy(_fq8%yupzWtp` zO9!^`a}%mzM%{SZuG+bFFuOGk#rCLfB$xaj*4P+dFED3+3NKM&L*(R}cCRKT!?MP) z$&4-QI5A?A`%5WLV0??|0_Hb07~Mb(l0L#V7=mK4ebft2uYdgP0o|g)MK|Uub^^T< zvTNBw9Uw^UKw*3=OU)EmxLE!0RrT5Rzw+WBN89(EYegxMZOkERI{o<*E7zO=zEPZw zXEGr@3hRC(L9?HUTrRT^K`FaY3aMw7OUq|=4*G@fVh4lPxnWPO8;Oi+q3pu;U7X`f zm}ZMvl*St$=kDy3a}{3?6NWi}L6eqjI`3KoETL9!4hxI7eJmWYcEHx#tyi)rXd7pL z&K@h}bGv^oJ)bGoR^HM)}}nIO#rS;k@-Ykn9$6PFAA8_6jOv(rcK-Md`fc7E$eKYHr?O~+rgqMqHi5ZjLE>_kMZgn*XLB>tL+sEV-I~q%vxN3{Wes!ou=y?tLYZI?V=M#(At3Tv0 zh%JflXE%%bp=j*$Gy_E@n(y@j0nb%Og1zMJniH~y6hmw|_R ztS$8Vr*|H?N$qV+t6$W+Dsb|6HGkdC)BE?R2Xyt8qxZb|3iWPxra3z6uD_~2J9nE> zx1WtV=b1xkbS^#1M8gQDVNWEu&jyl)rk2PlG-4`q@TTL(%Y)JAXdp0F%$)v&UaYKO?y?8+%7!J1!D^)wv-gWiwnqlWCjEq|acfLyPjrrm`_1u%U zo_xdf5T}9zh4D;l5DIMs54G=(?ztV!PdlEqq?2ul-EY!{W}E+V<9a_&Y(Th;Qe;ht zVnTT+*Mr1X55U0YYp8fcQ`O{&Zt@pbEg) zcob@JI*?8WrkjCQE9_spO&m{fB%_Wi>3+Tu5*$Vfhv7k9cLxHxkl(pv$L8NJk&!p> zEXxwW8bt+N*qlY_41aV%P4dImkY zr6~d%a}%01p>;@V>mBmQmJc0;9>jkJFA6zJYr^bsjY)g+#Bw4OL=q69jX8o6syCyk z)L_XR^gvMO`MF+;^BFjJm?FTX7rXj8eI^~C-8@)cE`e{rg|> zH|1{^Opavs{2hMHFw%zcHvjPhGmMu1@Q2i+KM$FUOE)tg<(Cn$`N)S%H1gE`0{_$D zXTx>)_@-?#8aI9r<(n^m_<2UqV-f|iNuNw~v-w=EJ894oCjwSBZIm|u@x`IBP2)(@ zOhw?ic_;AVhpZG%R>o54si|~otdjh?v7qY<#_;i>ok#rx;E*MjBELMLsN|?*;pQ(3 z$fplK=aH9k%JPrbEw8vL!}q78P?Vn-H0(U_zwu;HNiHpnum&+Oz{xSo+=4)Zhv>_yXyae8^Wa`Zp^oUB!EY34zrLnB!=Ne z>OznpVk=4;YRZu2B6pU15kSr1PtO%QFqS`LnT3Zx`S8{omlkHJMRLQj!x2Ya7wMJn zjJV-Ovsvz3nM(dx!0jxaebbxHF5S2_M~JMLtt~_xWTXRk`~hU~9YoR}=4oc@)E?7QA=u1q8PT+o(tDpeDl>;?cC9N^^qfk zg_de|vkMPijOH`miN~(K=Fwd{+DGm_GFrcn@;Z0a!BiH%=v-TcflAPteZ+{g# zR(Ew(b#;!@-IMc7&(6-y&dw%jS1YYnX?G>9R$&!TKnNj3)FKHi5d;=+00$wGjWZZO zz9fTeuph9EjkyQ#;esvO*Z2gEjcttK9GJbow|Z7uFy}nJ_qh`~RO+s(?|b9_{lC(E ziAag`PT_VTUol7p{qy6lhP}Ad3B+BDGPi_&k&&~5*#&e1Xue?-n*Q;_!8fTR6msL4 zatMl|7Ph>1w8E_qg{@Yoj)tuVfKgKAS!*vfh20jQ zT067U9G~*rmp#94>wE40V^rm<BaGNPFO?NNVE5ng_KZAzadY?_*@_U&;* zlCGK^P3vF2v)deOgmqU}yS9Go@sf=?@zmq{_sm`HrF1vEYIu^5t89*t+89E`P16Z2fKcg!=g>w*K)6u~mf^@;^s$g#2uo?kx~I~Su1 z(Z`ElCDGR2*x35QH`chWO>(FkO6QIYS=-Iq1CsuuK?vzn+HJE^9Vc@}=>xxjr|$RKoKJCxgn4v1Let_a4xu z;#RPjrz`JdO(*0?RUG7DmM6L3|4XUEm(k@Ig3ZuMA`a4SFG`&%i@A1BoEp!!`uM zTAd0~K;%e!rii3~|1G(-b1X!wvwpe`=YEiXytC9+nK!N^_$ zV*MeaH>7(fGZYYED2XX1HH^wwF-!oN-a&{z$^;-Qv^kgS)a zc>$ep0|r*dlIa|s54~>Zu^Gv;C`OyYdRPzd(@vP zj*f;ifmei}0E?;sUmNrnnJj!fd;}GgsiBXhXOoJe>}on)A!(xm8cFI#hav3p&2V!~ zBdny;nJ~%bNkIaO39a}P(uN~UyiH`P?|)BgpvVbPT2I+ z7UgNVG+|HT0B!(KI&IFusE514S~h{zlm-Ds@)!vVuA}>H(j3RCoi+TUls)!F3mcQ7Q#vhhzBDk+(78}T8(d5R z2@?tK9T8qa2yzdpD&lUE2{$tVRil7Mt)iJp1B8ety$OVnCfs%!EC(5g5isF&3;nOz z?qWWlhNR$G%b>m#1ixjS(UaX^G&^PZzABk#i_l#RaYOMsRA|9$VU$x?O!)iG+yU4<(-LedNU~*n5@>p2@ zr3^tL+E<~%Q{d{2Cu=@|9#bFJCU)fGiR|n~4$j!zMlqh(vTM$SMsm(nY5%*@gC?H; zCfgDeGU>4admL5S&&0kDP;^ z#WSv`tYMlh4Z(TOzu(?)xj)X6@&QOQk&m(p3xY%1WZbt6Im8t5D#!wfTI>^l zq;ms@p8t|#cFS%Jde+7rzYzX*m_<%7flbN>n4hR4#+Igtj=_PDWPHmA06AQuv=f{g zx0s*E6_T1kW)+&1#Y}ixqnb0WJIqdkd5BFSIWi%*y`*1hPis0EKr@1JR*x4r4(RkqK3#&rZ8Y7 zgc;0cuu*0mcBA339@kq#AB=Nk_|d_WxSrH-oAlk_%+fc|GnmNeQF7--!1pJl=u7BI z+%MWECv~dTYZetC2};DQru#ao4XGYdCK6Px+Ra-w!9 zH8eH>wWyExg`^^1yS!5jDXUM|q1Qdy_|XEN-(UXOshO%}7TnqPyKakofM>A#p5ar( z)4~OC89gnG0GAP^<_Uc>qVT3V z0`6^LUM!Yr+%o(NK_;O`al!Z{a?X173C*kLD}8P2jb^`E9n;mNAk`i4Jc(2S2zx%r z=b-Jt?d7_o0=NtJ$f!Xj*&;o4*0PN#9JmMK$aE|3jRfc|pOuuR-3v7VBLU=+3)QH4 zCg1S&tta$R8txkE#rjxv>rRAsV(!41q{BT0LjaK`V=VIiZa$ zg-?tuiE8b|K8YZcLX8hpa>#B2f+h97j6<4qqM_9uPWpvvg_||A`;z6!&O9}N?GznP zY#}Y)2ITes;S)cnKZ=?EmL$gQ@l=!y)!$WW`3Nq=?O7ERE=*L@lP&iqecZ1*9zA{APPTr3wc@Yu%*+5j9wVz2jicN|}Q(Ys$HW8{11zNTJ7pBl-cibc#+A)mu(5wzeINcE$f88K1; zXg;@gSvDchw6H93RohpuHfzCn=xX3_+!7Xr6uXe$(5+&omuY$hh+9}30b4Bln|fYb z^NY0F%uZ%07Q$*x(yXDxu6pQSuxROgZ2IscaH&LIS)! zwgETBMtoC8>-+7YgWu;P;l3m2gdbop%*rwP$U}~c+b}mEwbvf3@omW13<&l{MnA3* zN}TV*x1jW*)3f?W@Ha#7yQR8r8(Iy-O;dbSWPQI|(~3t&S& za=-?DT_0jjSYD5|1Udj%H>;mV^&I^*Mk~aa`i~09gXw*UtgTjPi zTGx|_tOu0UsyJyam&`$IWZLQsY8;cK{qw&CQ}=jQAw0)+#s4*q1*4MKx0Fld@L|Q( z!q-XB1%x6WR1rD`jcu52IvjBVMH5hpez1?RDYOD~_6QcGs`fvc)iiUz<0U>tKpFxW z*U$>yY2Q>>Hj&DY>zM}J%lICqSreUO14t9cOoz-Zg*Hl!K&MU0(#f|dyZ9_8hQW@h z%>%zmhX+oL2QAEGsO}yQSG4NP)%X)#x_8MqPArk|`N#ePr0PR(9|B`8q zQr5toD&T!`E93g^EN#az0}W|26`EN$Z;!rmHb`l(cta4Xi7)X;yd8jylPi+NJ;iw9 z_f&2%?H3FR$h7Q%jQ;FMiLx@=D%bp?U$wJ+qrCgnJh2y?M{$_2u@EhY|5i6y%$Moj z&X>i`D&(l)Q%N$>oZn*__7XKBsZghu0yT>i%Io+XB$9Fa2-r}LWoq#Vw}y%7?gaG< zs4Js#GcHVWN)Le9aitiU(154OB4?=LtBZANcm=o>Vbzw%KWR!UNLtMTi3b37u>4Ut zm+Cc1;&LMbb&@PIndA7FHp7uBN%Bic0|E}%z!>#df_yk*Su&Mead;W9O=u25y$s_) z<(!6NP`O|1V`wUxBPHNrq5GcVHel2>BFF!tW*XMp?X1VjC-3RUkl6G)mZ=PC5@e4#}Ck8kE z%ECtyOM}C|Ix|71l-_}i1@v*mXb!h+Px=t}IjHsE1lA z02_;Ut6LV=yiFB#>ql*79cz}BNz(mJ>Smzc!>HjR42#W$Ms1kl4x{1_X=qp<;(pjn zdewbr9CxSM!!-^W-$ycH`(&Ws_k+~C>#OfmU2u18tL8q<~NtA!fG}f)lwBP z0`@KrRI}Zjl`g1;4MZVb_9uSSrmvpQl3$2(^!{Ie*9*-4&;I+r^M#O{t@r(VzkbXn zj{iA)g^z-HoQA#Zx~S&l0byMiZH8*GP!#j1J~1*eDu#qeAwQYoX7JBA`dN7@S!`z==UU}J6W(wRQID{5}% z-UT(H+qGg)8B;HZ5NW2EO~vyi?$gw6JjAX4E2U3o<9z~JScBShnYEDis{6cZ)k~SX zUZV_ z`<6;tDp7J1sqF0hq4CjIrLuFW&e}#$r}Bv@*5H6>Mzy9*r_o2c>$lvCkszA_mco;;j<{AEr{$@3YH9>lc=0*VSCKp03Pu1%JVxo9)`+fFh7!w+fc}bGmG{t2dCBJawK&bx?pb zM0JQ)#VR3!jTXR*`XkR$EVl4(^Lr#0hmbUI90jxwUX02Sh*2#n0Yp(Y(ecNy0+IhZ zjN}+<#^-ds(HQ-u|V+gpDFl&KBj&CL1@KXv-jop2ywc_*iLp76AO3RugZeekA87XHmM^_@dF~K!O^;|Xp{wd-z8}f%n1$?n2_tiy z-bzxF>0^8|=DJk(1latXC{#a!f|op0ANj`=0Abtd3JD4Gqc546!7OFwLIB0G`K3!M z>B(YAeKVV?&Q#0ge!mpd*T%am@p5tNYe&XAz0qO-*Nz44j}xCdQdBSevxz*)$M3h3 z*(2<8BBUE1luC(?gpHG2<)?@T zBqUEq{fOJQJ$hYu?y%>D8>&xjJoRq1@fXeAH{7thsW#3Lwm5g)b?0JTP)%Fc#m)1M(n_e_MS-HhE&92HXnT_A{Uw5mX|N%sgG+Xe&Q=Q1EC#zmk5g_oh@ z+uP4n-iShwlwLGE#8*MEaJBf2l6@jnhWR4fdH|~nt4LA>JP`Il*P3*Mg@=VA63L@T z^pMaz0Y=JK%1QH0kL7ZYuED$!FpGir2H5!?z#KWO4ItEt?05n4tJ1J8@`Y z^Ax;Jxw!cyP-Ngd(tt~*o0)S4_ zlbfrI`U@9bwBV0c=5pCdvVh5c(k)i1GsW?P_aNP@D}=usriJx9RK^jk9Q4w z>)W=`jmLY2{q?PHDgR^X#Cklwo)9Q_bl*M)R`#QOb`9B=Kd z&1B-!kG*H`nqJ!(chZ&SO>^1{M&oh*W~0aGg{u7aV~+jPx83&BwzKuIvDfX)d7JM( zRo(Q0nS`p3rRS#Zo9JED8E(X0D)uAuRse)!9F; zgoSFc68h!)gD?z!!!MGL`G-m&q%4r2F1hS)bG?O+wjy`>xp>xaxVy_JD8@aYEG|D) zF!Hi6lsL^?mcoGviR5%afD#`qejIwcDDU{A!}J3eq+T-(vQB*09Tk zDm4`&%r~ra$pQWncHtsEuhr`rhXO!KpR3o)$@feh=(_I6!KwEoo2C_pmNgYBd;fl0 z?XTWeRjXI_RPU;ty!_N?PT|;DxUjlKUsp370RG}N3t&}v1?6ZNIIaPfMEBvdjH%y? z?To!37Apws6*;$zU?exg@ZvprWu_8KZ`p_ytR_b-OCw#3*#)oVA`(?3 zqYRlS$Vps>#*xhAy85qvVjcJ_+&DA3{xMDes4jo=L6L%tTG=bkdfvzQ^Zk!KJUe-l z72?L0D1MD+O8H9LpB%l~()A*7l~Q%KFgD#=GrM5U(1=w{dx2(rS?7^I{mX`;{hRY8 z%lcBKk*=n~FBejGruZv-IZWO8g?eirBx7!k_zRbv_EUbfu|XK#%a%#6TGZjjO#U~t z4b=pDBHahX8i^`Nx&biTCCXGHdYOQR;{jOQ;iJ3?7F4s@RL!kt&p!S1StKtH8_zz& z3tnz)JkxAG(>#0n^x3DIXL&k(Iu^~t*nl|gLG<4~I+|RA#07!dhv#Y`6pjh};q8#u z5-OXeQ8BCJ^`m=6s1DcE>_vYHn_z{*L5= zL({g)x>;z#$zB%Tka`HqgD{tQyhx_rrZw%`ldl!?gw&~VyhgXt#IA1d4kI<^=M$md zEf-Ts9l$fr$I~x(!PED>*eet3toHg4ypa)?MgyZHpmf-XM^Z#Ynl=!95?&)|Rqxo= z!(qt^ym3P>-wx}3PNRKf42+-1hqqAsAl-j21&4A9MyPvY55!&_dtK~_*nfbn^%r6v z;tH**x|F^eU`iabPo`(kmVhDTtTcu5N$+CtFl#0L&Oj^}BD|#d@5i3$PyGMOa!?l$ zPGfogxMt^r?(TuF=bvK~ZGAPN1jCzKbENb~HEtc(XaW zdFs^W=+=ME(K7u<{*M3XTh{)2mY{jo-@k4rE_*L+SRhy7yHIDDg*S*89u=Wb2!hK< zQ&>ScEZf^6pqc3ztNHceL_;~;SrzQLP zZnK#i#^pS|7Cam?{e|! zR5G4f9L%XB&dlmXhh|&#dh5TWO65}awtBkmT4n2MU@2jhHe~hEB=cM_q|a(A=%^&@ zt9K($qUZwFrKG_Tm=O+#xk_$D+J5%zC}=M^77?t3DS8Brs8ragt(&0hWe>zMt~(A6 z)(cJhb3dgtADZ@or+ zYl|{Mxz^H){@3vV^28#S#6QOaa&);KVrDGN>l9sbjY+zRT>vA9z$})5KuBJ(zf5)a zeQU?;pg-yq4>YfM#no3_;p|$Ux%=?ZduDcTJhVAAvZHJUm2SDx-R!BeyRW(8oaC{S54tbJ#1diM1kr zN~!w`?T#JLWZ9n4ETSe$QbMuB$R9K`I#gvb`Jx7J_@!7Yi1v0r;AD_*!YRFEkP8u6 zruGK$dcrSIm@nL2i6D9#z*WZEWH9BIUFFfA#s0kOo>D7Mt&FX>?(QZpw*LCWt52SM z^@)!MK26q&#dwQ=v`;~XpQy!yAW=&wKQPjH<#C9FGo72w-Jn+JIIzO2-7Q{y{)A$G z;gd=*xBr$}p`S;J9|1G{+St#->i1{l;LhQV;XjF~MO3XFvA~3gY=-zO%?xmsqjke3 z6A{98TlaCsaPZApf`TEQ=S5B!u(<;BCrU;MiVXuTVu7#*Xh48`?SNz+$CTSX5c91N zN)Q^qmv{?TZe9GjS*{~{;SUmUhm%d5e}m~Z+b7Vc^8u@3|1Ly*nfpC+`}_2PABJ@% zfj&zfj^ncc8wWh-m)nlAvY5hl4%X>A2Vy93YWR-b44b%KZXP+dL zl%Lo2_RLI|1Ht8hHV@gUHc6Mhq$)rh*qbFlolj?zxuh*v1r;Vi5*ljjJ*rayh98jE z!Dl9ELFx?Jj^%OEFm!kp7DIAFn0Q~s^@fuW{DN`>d;x7azB>IbIi3#_wIohVT9A^s z6FGA3`{(`!JMd|;%A?rIkdSRykLZR^gVUg6yP z;kmz{H{JVS_6qT+N2TjLQw90l>+7I9y2})q_w5kt&sg5xoFur|$o$>q86&5z za{_G&+)it*ksCFP!FRqHDr@U$5TssU{QlN|$Ijek>4`7%HIaq?XqLgj>RM7FMW{FWkpk z5-ns0E&F@Br>kXWtVb{=*SodQ9IMQ3Z9%n6L1p}d`Gz}JD=iO7wai%3!K5N8Z!`in zd%{XkFhNBoPM(~vj%++1M{h*zU__8E%(;Y^?^r8K=%yM(O-qs@+I~&zjO9?>D7|%t zEpg^mF0ta*ekSSowGVASvq(LCegj3%oL@@hRLysiKU4E_+s`X3;=4TWkK5A0`@H{e zE_d2PmqH2$@HwPB4V^QLhAp3eOQ|+9fZ_Ap0+G>-c-c#^6T|0Wz(BpvNW2oyRCkQT zT8>m%JOdY&&W(ZjLlq$f>65UmLA#>I6V(i}(13+li#I%*L}|&^&FO0`tpQo!9w@Z8 zqYYr*;td3neE`{kSXxRLn}WW|2fJ(J67vTp0Q%|`&{_Klt@R>)vh&xz729C6MZL95 z2GRB)i=a7TX>q!p$c7{wK(rb4BO{H@-eMn!xF6aMoGX{02QxU^iJgWPj*vX(U#X2} zpg~xYhu=aH#Q_``)e()_m&Ai$yVCibx`K2uXq;p++3YmhIVT$*B{8WS=Q^0LGL$~2 z&p$VZ2a==xDdEMG_lA>zU=9Ek$^&u2jY_5D5_h}pK3Cz^9JJWI)E^!#GkgJcKt65YBXJt#54X-J)(TdKY}IXyi&c-yYlCF`STgQA-<^5s;qVb=5c z)adTRt@XD)e#1}w)TdszNEc02Dfu~nVp84X_^RFU*IFHV_XN(Hhi}!D)uWdmt&S8k z%_io&x<^#kaq(P)ry`o zFa+g;=N5`=xNtraA3HxEp?|_EA@oB3tpy2E6NKHKRc}9YsNg$KCELljoxJMG!-ah2 z-tD=u_1|Br)TsNhOy<{azIiPBs2ral+_`TN_j!+f41fQAdn^p^i*J}Jo7*Vkg8vyu?=lmpiV6xy7XLZx;;4Abm=Wp zb5@FpO3etZl|V1l{9vuBN)rvU(i)3*CW2|_l?RK1sfp@BVb{`8ckkv2K%D(av)ZoL z3e|9DC*Rr37xQz~Y_*wbGa-7=?9HUInK9?*tc~PFJDlaO7^maET9_)#d)K5sP}?NL z8O1oisJ@8)HsKf9Aifgw>?Ls}hv2nB2+|0DAZB6hO`DPju=w`FqP!)^z>{(m^AsYo z#kT*Aeap)^m2LE9Mplnpre0Hb*5W7-><4!&(VNtABU4KgjlpPG%Q`(MM>9}&`Z=}! zrAJDie(@`frSzcP-$^k1+O@TlTgU6>qy_Tc%IG~OTh{Hl#A(Nnd|OeybJ<(18k zyfpFXZ>}W>f$7RK=|eU~S;Rzd#G~lI!HQSK@fK+DY&-1HPZJUe2#JLc{!{d+|17g! zkezgR133BP(SC?8o88p?V0W%s-%@MEf&~wl&r}ZTtGT zeWjJP_gOX^%D=p5%i{M~@#}2s1}kUnfOld(ZvV=J75|e&{O86k>-`d6{45TdWxdU^ z4q4VQD{bw8-pI6m@oLK&v8;F75G`BRv3OuvR^PHdz;5rg&1i0)i}E6NtVynKo%i;rQvFx&!%l154(&f9Af1afExj)rts!`c(WPN7uWv$6%zT|{= zf|5KlvsqvIr^PNLuDxCk#IDxFIm+c zexj&p^~rRumdl`rqwN$t8{}5Ws{+WxaMZtdX*!R^P6UiXF<^k0kW$Ys{3t-nv_!d- zXy$Y$trC#j6t(zxk~D9E3Mzr=$-fSu4AdCsF#jx>U zK%mJtMM>cGB*CbnnAhJ&dGDACgRHeo(l$$%o{)w^=;nSn{GCy}7@)OjQ_dp+95MDy|6FLFDGA-zw4pip__a8D__2HW5VsGN>Le?^qf2w+fPjBMy!rH zy7*EU`fel+dOv+xK1fXecbEr^YGRyt4`O83Ro4$A^-O%T*J11rn5BaHk0N-Odr{C= zoV&%&ufs!01KG_=Lz01we7( zT2_LokOYmSZI|#Af{u1}&%Jv)BkA;+Cl;oce)u6Co;cHOXOd^0SW6^Q1mtoMW;rQJ z95cC0JgYyD&DXu$NITw7=O{arGQJ(WrgT4>cAWGMx{N2FrG&&FzB|4ccXXg(I#A(w zKfY5+ni%(tK7Q24o68OJ(9%RFH)l<@b92?%{e(0QU7v!jGvTC?4)ysE4iVmhPu;Qg zBLgR&cLoC*nOx+MTc|@BchPgNcJI=h_&Udjd}+56&zM>v6GU&XB8WoLfIriuKH%KB zAE5Ui6$^rCDg87$=nQcgM4b~}P@moxuiZAEOvOKqcVd6*R#)@Yo4_<&zx8|V+$FQg zJARcBZ@#^0`u5M5?uB;AknQ2eJmWkvjlQ%1&oAJ3-laMP^%Mb4XX{aUeA~STE%Vab zFEvlu`)vMB(V+PJI`vA&-+F8Mnw7-^2Nnq>v4Ou5>2Klr`y_KmY+}Kn^kG*EB?#Nc z##NvE>#rSu?PF)IX&=A(guqYEp8d+yOAa4?$LdnBG=sv2sc4(WSMr4tZ~0N1TA1ke z;Nx5js$qy8yE%4e?1hqf?JxAD=?`NTK}u!QVED+W8f^c=@57fFzL#f6FGz><8G<(d z@+@44davKIY<+vF8NKU2x8?Rn1po7a*{^)|w%dHid%b1cq+9oB+O4-;_@gqGeuvU; zI=}3XVE*hn`4aE9e$hy)E8@xfz0Cc#b~Q_y&G*nG(99gjCDNHrI+aTAcimqz&5ow+ zkH>G%X7?wPopky=Qcm;nWU`x1ABxA1Xj``tL2=ZJP4jKp?8nV8o9QNUzIiN@0g2pp z83%YL=YB_f8Cbh1uGu}@5eLvQcHuBO%qYW1Cq@e&S$|RTdt$^;%1v+|J5oBsN*%Z8 zIf)aPS;`Vgt&35#Vg|2+h>$T|Z!7Q7RW513`{X1-8s-<0F1%)CzC9TOHly4A6gNjP0ikV z!u9g?ysoilKIg#Rn9j9*J~F{4@wvc@n4!ZM{4?ZF1XuMcBJgjDy({*C*oO(0f+N9+ zl*_O@M`L|m`>u6Ff;_X#r%LxWO!I~%Rr2!pEm{dj+HX0+Y>ZnYJMqwo6A!(TJ4u~pa%}sV20YRGFCdH) zCM|0F@B5^DVm83_2Zmt`tw0S2*S2h79 z2$eC_^6#S+gw(*6;BkgoqEX3b+s$mMJCec~wt79lTzxay>86}UI}2NL-uFTu@*I#P zWcEETmvr5F2~vrECb_bhjPKcP8wU^Q>Y|H`0|yOz_nvriaV3@RgFP$NUCP2eJT;(z zj?08L&+@z0D(rUGDk?I-c(6uO%vo`em3xb{{GOLKV z;SkKPo0Oa_QB20!GI@tDIHqs)aKE@jxLSy2xdPkSKAsT1$Y+tvL$9-@h^6v z*{Y^Miv(VQZj5&OP?t+WK@0WS1cK#W1tXy+U9&_0y*58KGuDY;W)sW4jA%7ZP|^)Mx7t<{y`-(Q z5IDf-d(3=}s2e-?W)8pC4NSA`dc~mRQX=hCDLctR*yJXum11@zN|FnM$Rg)T(){_j zPK42ylI9CD3ns>yz5JY3lzN*`MyXtViDRp`dgZdW^)vFQF45=r7PBo~`QRAb1iYw0 zw$1}7VAt0D>hvagvFEnF)hoY!13E;yU%1V2Cwuz}j-Q(;TYh$Cz2q!jeN5&VJ#=EH zwTBs&ljIv7LJzfjGupH!=^LQAL>Dmqchi8Dw*(sCBkoXUK)B&2u67J^JcWiA_B+u7JyNd-T$ zq3WXBx!2K#1AIKT{QYRdq|b(t1J^ZkHgdKLyQitOl5#{gOt^{D*|>c#@F`$sLJ4x1 zc0BrF(v(utZ`=zJI^+;+k^f(=eR{Z>_0~_^Tdt|`Tr4j~1j@TkIiJCBXp_+@kIJZAoaP z_rF90&Sv~EV0Ft6L5iS`@WSy-2#PXXT?+A_8c1fWdfv*PIbYLJ^*^+EYIge3>x06T z9kstdy0m;GuV-e>W^eF9N*G~A!DCJudeY0oI?wT?rjL^4Y~BxqIRk&j)-x3=bpq2rb&=Jneo~b?{h*_B}x&f{_E9Vrk+_ z&-3j#Hug%CX^gBDa5n#*or!~IiDR;@WPhW;lHhcr!&0-Mo~hAjpk@Qiz=*KZo*%dC zNngjc^HbG$9J&-1rvlHmYqI#I*>bKu(`ucb85n(k*>U^*ATypRjC8Zk!0(yM%T_-C zbkiLP)8pw7s&(CTi!3Wzdz#S7X7}pI88ye zN1--VjVRdF-o*M$$A&IQr(~1+@O)ogJ7QAbfS>=l?1tEHy5+&b%?&AdgnlI$75VtM z{lu{B`Gr9wwZg#+GaG#~eD6hBU@`OF6*aCa?cZ^y_m{m9rS|P@>^>U0UZFs_`^GiB zgFF1VwFcfO?HrqJ7b*R-x6F{{+*Kt`v-OXJiazms33c!v4lU>F z&5oNZs-2~&1_l$sn}2-r29mpsN#1OIrGD$K9rLMlmufnhi`Kc%P$Tq7@+uQ}d{I1{ zVGwyC61QN25mH0tVu22)BtbV>hy*r=xE|Z0P>6MrBSQ>C5_F`pWabjjRQDZpt(}#* z#hnX5=0tJXu&;djWCKnVpbRYvc4=k9&5Nfh%aEcXHb9i1CQ_Bt6NQ3fR6AQwC%oM+ zn}^=JMh}WoW9;E;nyC>YVUXNp(=#`eW|cbjw!5#I@?Zc;%pdf|a_uItB~;CvvBzD* zM6AHuX6M_-9vsa$^^LPCSxq#w3|1%L6|R9qn4gJl;di8k(|sWQTDh4!mD^czk2M!}qQn zJGJ<-jbBjX-=u=>{qM(1{6TDun9@G7Su@yfd#M1tjm|VM6N`5PnrFq#BI9;e? z5V>SWV1=j_c3^f8dhO(DUUg*imyY;d|5rk<2f=mG&-kfQaAQ~sX+T6%Pmm3Vipozs z@!}W1y^OHrN}u~HZG$|HNerYxpM`zoWM2?_CHDiLiwY1fiNu{@8M@G@Xw5Tn8L={^ zv5oN=d$LWh!-B}JfXhRS3uqZ7ltx&M;f|RsGdqAKg2>zOin5UaswM3n%Dw6YVhs$` zbgfuC;)jp`<^LLK-xMvPp7pC+8)?dFGKu86r`#k|T=1i~W`I(q+XPWp2ON|2#*)7f z)G|T(B={rRsCu+0DfbdUK@$G0g`z4IMl{30+p}}j&ZxoQBy*pR3D%!qP_6iSMFR`! z?ypG%Zi>tF+SzeI6;){T<64%gOVXY&=Pc)Qu%YV>@J0M5* zRYeV!@pvPdyn!ytgf6NR3k_YnYP>(%op@EH4b1pYG7IZv#^Iiu{W=WejvHh>db+Dy zm)2$;oWqDVE7O~MYBx@~S%2#@>VQ7KqjJ$;`cx)=sDJQfw+QC)+z*&ruVr4Hj-pks zq1N$NVxNtDCH4a{C~Y;O`iS=J+5tQs$sGZs7-oxb)LHU;?Z8hc9k2$JK}V51xzj_T z&q+sB153xuy9gvLSH`tnM;h0*h!#{1J*3ckD!w)Q#D>y#3 zrscA*HKhl1U@>T4X=@&c-bloVhk{Pp`e#FR>4b(=ONx{sZS0Z_Xe6jE(|7SM`pXin z>*~|6kw<@pFR>vJX89xD+ckz;@_2cg)?WOj)ejYK_4Vx|9Htf&S;C=lyr~LSYBPEq zz7Wzj-fz-~*048iqh;`CZ^reOwiyM=gkeAHp?6dYZ=Vp^7@;xoU+JNS4@Jd_oDO7O z`de;5s0Eq_nsLz3JCXo0PB9Gv?X@bCQAK)J zskBymBrKx^#-%jB}^u;sC0pwims6jMBztErzNo$ z*Is_|)_1$PtB+;OO4&?zE!C^krVJwtSx_-j$0y*PK+tnhl(}~&Y#pI8W_2~SQS&Ow z9HnJyK{E!erBw3Cn~&Z1+c!U+&OC7X#5-G7=D_~6>Gt6l8Q1hqwKxIb;J|^D*}f_c zF(Mu>$U)a!xv8d^t2+(7zS5ip5I%!dKULCJuNu~8e2tjmFTfOk z2w&r5>_uo>kqd8+y+8Jm*e7Ct6#H82uTkKUPUS>7O_6F`oPLyWj5IG7M{+ovKg)Sy zqfpX}TpihkEr&}Gdt6i5QwXVK8v)77I^+efqy2}47f|Ea^45wLvH?2@&yD~v!)QyI z%<0hObLw^HQ36_;YPayrYKvVc zl#@xjGp^-|ef#C6S@haOuPvK?UXA%20E%oj`&KlU*6Mg++@!ESK?AFPFxla-PBy8( zst55HV1w*f7)~N!a6x8A?37>O+@NqurPetoDpw{8g>eV&lf?M$bgIzc?93V%v%OPb zdykn`sY=k>>MzG_{~yxXVqj{?#|nis3Ryo?@Oh8H+8M}<*(HlGKAJl$?u zBtWX=xSpfGWBQ>u9RV^e0-ddTv*B`Pl^&){&-+!d^VCmAAT}e=B&r|*fx7PfplIlZS&C4%;{lgzltmJYl34wkHrjYurv+82{ zCmhAc{N>oEVxN&*W=K~62||;9q`-gZNa6uV_)x?}ly#KVLT)B@K!2FtWTdf$)GCK| zqy+1xIlmxvuw=TT8g(QH4OgIW_6u}W#ej$o2>CuojV$fJAILGa|J^Z(oN%0uOe8sW z6t)Z&D5BBMR4Teh+LSmI&HI4ZfVlPa7fcXVY*QZN1t8?c6WK6Rtq1|0urC^kt)Io! zPdXD|Xk;hGsq7RT>F~EF5+oU0u!L^!n=52${uzr=7|>@&DyP_D!_xbSGKKd%aS3 zdUJTc!BzhuF|3bq-~aE}cR)(Js>J<A#E}+rb5=w(OkmN$F|X#4lp=58+3(Lt7Lycv z+lMmOp^=}iRUw`tzli;kgYXxQ5BN}+;?%2JN$6@QV57+~#78-It)6jGxg%INDlye* z8hY5;acc9WspQU??nOyR68JIwsf(`3rEWjmo|A5hssUdjB^BI$KAj!OD-ch@Ou`(K zcN`3n#jw#s$_H4e$44kM)!g?$RKhCCP9kMZ`(7Fb zAl$AkYZ)uC|C-4PuoVmnJ=qw6KO&PXcnO)hnM{+`j=6LxOZEka0^Z#=!po$4 zQD(GRrw<+;TA6-YIT|3D@oui{B80)#tQRY#xY4bT^!VO(voz+rgZdIxALC*LbQ$)Q_jw= z5@FtcL&oT*+f$sosd9}Tw8<}6;I_nbB`Es9%h+_Zo#%E^=mk|&65{bx2AL|cXe8@1 z;1$V0@M-}}b2zXoirk_)bM3RwerR^(*$;kj`M&$q*{!qc?1>Xp&8p@f`~kbcmP9`N zL*!$yyd)z}R5B)w)DIUIq zv0Gl3%onT0JSB(lSXa~1bef*TiDW=ir#J+$i6EJ9uA$+BojjT>CCPB3*n3PW40nE0 z@g7SotClP#j)F|JlPCUJsXcp`jWCTC^ZDKDWFl0kZ)_;_&nG@l{44Lje|-GWM{k~3 zdz7l?vuE$W|NeBk8+`{atQLWs2wWtQ?iM^c7lMWI3i;uSeF~mC8wM`o5E|8Kre1Vx zX<`Wb9Sso}W;S$aG@rDcBG50{g7&1_`(Upa1m79yuybqWu}2;mD_eY>D2M1IFCQJ9 zp#J4t>}A?()XU&f{#NXJ*!UoVsUigJ2-l$AUjibi2}g>&B{PN8;szm^rwP^)ypReM z#570)*-$LjzD*KPBsst0REl#70s-GW6woVV^C)dWCP?+qPDyI96zriE&SM1gl2uZ0 z24NRL8%`5qp~khOK1hMiUVG}Qsn%QkqVoKmQrmC2th(FTm*J#ZX)b3(UW%{jiI2dn9V zW#$W#N`?vB#uL+EeG>tfrVJMLJLp3#DJsYrE{!9}%SozAvz$thikEWKkivk7eF`Zd zNIzjJW>;}pvP2W*FdAB2a(ei*^vS~2Lm)~SKDXQ@5IySvif2^d4BK@h2&taSK*yGW zyOioF#4w&P-wZDrp^0S0LV-Kb%91z!;iu^wOx1ZNtz3e>7JOQCMo>~c!j7b1=FX&~OiqIWGn8QfJm1W6ZB#a^nyAk*gRVo(|%ujLN)VeGc zP>{N|I+K*_qs{lQB(wXwhEK_+sM=7DDXox(!~ppUbfL+U^G*HB1c^aF;^W7 z)b9{;otAmB9W721|2)U%-^=HpuT6*z zI_^T~@*w|+)Xn+%GYjurc*p#!)#fEzm#E*8|9}10sFpl-337gneT79x@K?L3?)ll+ z`-oV@2GogSTwDFYNMtNWCxMg~Ocgw=U{V6<-9;W;raWRFhzq4;OktbmRm6GbqphmY zYf2Gue|sCOxh;E! zJ@o;)vzBtJtB6Kz5m$R+fpW-V$GyUR@=+KNqE#g^w8RNhNOBcgl zfC{6vfZ_|EddG?N^%H7(?+ahFZwgk#uit6C)o<_KboS+;4k< z907<48AdGbW4Uv8hfI!SQxWEjtq-)@i8SZ{-!DI!E(Mv%-VKvm=Yn#Ot9qrd9J;)0 zRf;~P-P#rE8okNOTA}H68};__X`jLIg%VXMPx9{XA9gTnh7W4fg4uh<8*gWQuP(oCL_S0A@3ZP- z*mi;RG~`pznhu>I z-&Zly;wb2$^;*v8vyS{fUaH9Y_RJ z?(mlyMNzjbh=NauBYxW;2s)q!na>z~i+ztqs=`_tt+Zs8(*Ur;CQGvtK_^Ty&q*)7DB>ia_FO-{ z1n>558tOC`N1;S(S3}R|f zFtAetF1dYTZ9)%gDqO{>ivnzNK603)o|JL|Dk$JRR`p$*&E_cNF2!2shL&WxP<|6T zy1hzSl)Zx5s5I7ZUsW-lvb1D_CNh+u)Y=s!l0hk~j#0`>)S?@}+U>OfF2+m6g8BlL zpzzA0j@VENB~ho7IYgF4g^Lf2CP}*x)3Ys#u(1j{tmdN=v^nKy)KmI|fy9!aZ;C_! zFkA86C^>O_v_EeNS|dGk#f$@cT{8ZNigz$2sH<11GXgtOIl+gr0MmpzM*@3P4iM`w z;`BPU{8v~;R;x#(DY{XT_&e%ZujkX0Y0Eh~>4hRL5()5zUn}`F6XI5NF;1?jeF?fZ zUhwf5ZESp;^U7%TG%e$cA`VCS63GAy`vpP{MZ8P*r6R}8yFdEbI_uQ z&(&um20UY(4dxhxG8m(oC+k31en^Ql_VAE6ZKhraZ3a_|oUzpweBKLkoVig#3c;eW} zI7$VKZoki(9Dv3e&|jDZu)=AN@@l3;m&PW-ih#xL*f>`7gK$z>+O!-q?|?W`^gT+u zw)G}y2%!~f#dJc&Q$+buI?{$rSc(?-O0@l%KO^4zQ4}gUv`3u)KA2|NZY4ud6wDoaWqYjoj*F5^@{r7Ku`;kZPa06*<|M}4{9=FQrgZ0{d)v`sy z`$?9STuCYi}xc5S%5T}n@G*UfI9ztm<#4BWJ*b^#(ln7Fl}Zr%FM ziIc*btuiO%C6_FU>BqH4sgq8DE4h{mgqI6?%)5Yq)*eF9#hj#IvhC>TbfgA+zsQD& zG0_xrp@W(qGFTwvh`Hj1i>gPNvXLL=t&KPI)9(bIT(mufqc=x~lzoUH`nE@jH(}oAQdhg*G5u_!twG0e*Svtmk)9 z5Lx8f40g}S#EVX?5oVLx6sa3qPwJ)A9lNjH?VW(wuQpLg{0jY?s&03o`+W}X7O}^G z^Wdl5!7E|x-VM9kE2vC}#fJ3&i*)>y&eD;oy>8gc)Iu7NPuQz)UfDo(2#P?{L#iIc z4J~@=bl`wc!j5Q!2d19RrlyWe zhm#}CApJ8Y(O!{b2RWo=r_OvZms`%8!kMEczdXf?LD(~u$Qblki+k!R#hobFPowfsA_&R*#Bo<8m`~1gasXbRh(Br3=VIykr)z{3pIP z{~g(!<^o$0Ob(gA{K=<|=p13-vn$?%c22AbfX&V5onjxNZ9{nD>P86I}P&6bs1*WDOzY{}Z~WgH)rO+ghdyLAT_$RAB5$7L&BS@hMjKij^QnpYogvs1!b-tDxY87!k&Q)ntVY_*Z4(ZX5)0p8pz5g_eO02pY&m>Mt2(cDgdNQuwkub^x z#vt(rxJ~~Q(FZ_4&iy%Z>x0CUs6{hy*@y{abM_p|hAoT$Jq9H~St79-q|!uq5cUEb zL_$fsSKM0dY}h9Ir8~A+8p+iBUbXK{rkAVE}c%2i$6 z)uFnoI_Ge5>T|kBCr(b%j7BrcSwb2iF#{+d$sj-kA(AixY%sO}XA^95Z7eX?zQ`=d z*anuxti#?VI4t(stUuUm?+4@S!~H(hXA}tg_s*Hqr@Ol9t*W=)_kGgu`8|NZ&=GI8 znWe7yK!Mtvy_)A&$}TlqD`9OCK$p&aj5&Wju$c{Egz5${fg*-BGYz|tia+@lvCLhk z-^wtGW6opBrJk~0IZ;iRXX%-`_yX(rAJ#hKT4Qu!BoPF@Yv&8F+ zi`wnh6K{XviynLYj@#ck_wvimJh*)0`V|yr80$OZYjBB}6Q%K=b232!A}66tCO#`Dvfp}<1Eg-+FV~(KJnvszUZ-coW1>>zg6#?dBDvUe8AIF#fsYN)moua zB&FtSH_YJO?Dv(RRZQCu;ayZJU%9ryJv_G`m&mI*v3nOW!ysJ=8;mvrQ}#@Fz1PRt zM71Se`*MpTB0CbU7k3fU7{Mm7e&%#E2)Lor;@0t=bZm2@+e#P@Uzgld&L=9}xg&Nt ziu8T%g9nt8Z#3_};@s9{mepHpRop_@1ocokEH^fDa$`16mV?K2O4%HJqfuDJh(j_XV(7Zai3q-xK*FP9a&3ugX#Psd*#k?71*k?5A((fD5a zR&e2N82tp(0MHMt!G#BN*SUkI_ipapYpzvZ?L7G5k+%1C`~E8$YtuFNvhx1PXlDO* zPx*ulmhmOOpwofhDwpiRd?sK z^hFIjeFenk^ZG-sI38>=^!#P?R7l0d&k2sQFTOT;Lz40G5W`o--*{HbjJ|^2`l-W* zSBEW!xP^b?GO;7S+}g%v>{Xuay`9Z?e#=BxvTu6Rxqg~LT9=-iHSgxzOkjPgzzNi zZDZNYEiL`9EB=-0bj~Wz%!JML$@F|@esTu=&sJuamVWSB@BQChD+_Kkl7&8!rHA*d z{jkuF zZ9s`}YHz~1C1r)P2*1YlXakoVrRA$`N+z$moT|)yhjL zE?JJT#*D@jeuTM z58HN-3FPI6b=?=DSx7FUGp@UL&2^7n=DNoYyY9&uH*t(WouxVe<`Wm40@Zi9>)tq* zP~1ZUH*o{mr{gxI;jwSw+4-@;4B7j?>%Hd|zGP;@P`nbSUyuO+qXU%2@Hhw0%8e^` zwTg^s+vcN&Jp`tpCf`KR>Cvg==-fxoo%>;T_IlfVQVtkmL8%{iagyo7dv8ywlLvk# z_Jurqy^|A5*d#ytX`4*wT^z_3`5y6f!OKaAU7{gB@WAd_BN*d^)8ju!X4N63x4WB8 zCN=xRu5+U_voKtkDUJVBuE~41;VGZLGv!?aoGk9!iEVVweK8~U3G({RqI<&iKI)6> zAtLy|bQJJO9J(S-1=xNN2PARGVhPZtEIw_fsNh@lT~@ErDr!b-<}DAq!tOJ!!GO{d zM>6rypcvoSdO@eMX$XpUs@hP@$#OrhG}K1ESDRN82Xcj}rrOdEEN0y9Xy?hfN@cG6 zZ-vZ)1)!|YYiZdGhuoakOSqNTDNC|MsVEz!*MI|4O*oPR%*c%fOu8quy zFc8E->`4BVFqxo@g2`DSHCpsFyf>ny1*A5}tJr0d0>qGzP2=~xnitGxTq9I!du<2G zFczFNc1dc!wDJ1c0@ktxO>e@WbexpuaPVAf=~Sq~mTG6rCVj8Y3az`1bN!t+{`#ko+UKA>K>LDtV?mof_`UN|NA zRlFYB&61z2X(8|dxe859W$`ePNT8`@SHCYlw~S$x=k!&c)6b%l+|20RMM&oH+5j8W z!CYbf3sOD~xPx;c$W_y=4NV}9SiC$S0`B*8FD|G&{_C7h@9Q5Iab`JA04_k)bXW;4hjlMbK5HjxHBw zjU-8zSu(n@9>ts6#f#<{eyuWBA62VKvpiq+Db@^Ma=tYGp4?oa>g8N4U!_cpm+G1T zP#e)o{vPTq7v0qMc87(+PKpaQmNDN@4>4YSyrYLEE{+ivV7pAQadzX%HO0UbUmZ}| zfViuaJ!E+8S_vi)B5Vp23fy64+X~2*Y^#T^KJe1XX7>eW-}IpeFMY$wow-AMeqXhG zGJT*SgG`vZO#0#bZoclde_zLOyT*>Ih7G9XnfO1WP>ebGG^JNnjE^4yWj?pe9^ zK!0E6OENC1xk8s@cag|i`{@1yCvU*<1XrO6B{3cIaHx?lCN|JFV!yJ+x_^^+b)>ps z7n7|=P1>=(*$=pGW|XX0W}bxYfY8lgwKZ=LgpqJ4#vS*yp)9fR=LO;%uR|g!W8Wu- zg;uM-%Ho7U8vAR_lo$EguwGO*$blb+)yS*iZB5VS$OI8CF*6pku3R^KYgir($W0j)3IE2Nuz(gTU5r-IyRQ$v7{Efsbw99iIT1*aBd6^dGKWn}_ zsCuELmok-3`w!u3PG=_1t|-g1hq_t(0!%H?B#w65xsTzg4n)+E=&%pEBm@ajn zBbP0r6cIkk7d&fk<#r|41^es5XAp0F){os^90gYIxxXu;h&B8Xd%=+VAWc8^w6aaxuX%FkKhgL@AMIb**E3I^ z*==kq`=ifx`UGd&%7nvqSQ?*A#+uYoC!riGMOdpMG#TMyg_;!)+_nm}+iIQg^6Kd3 zPP={i)Kq>jxUJpkTpkPt!IV;&ot^oyKc1WW<*E)TFhv{(qNUUwi3;F%71j%83cZ`#n!R`sh=S{?VSfTzbjhGvCe4 z9c*~1^>E$MPM_8s-lV+m+mK9uqGcDUOl$9aI#;oZwq3L;xt8*}qTR|>cD~-7-!u2^ z+}xgdsp|3g7nPHo;L)e<;mc%RE5`fITxhzUzHlzxe%`rO=Jq5T)kH2wYcG|{+QTJw zFOk!=ayiZ)`wk_q_ODnI-VeX|GFemi67hH)8q2TqyatjTCVp>OA;kS-0uHy(P2??0 zK##x%xFx*vc){X7QeHdu-tuReq1DB85tB__D#-9;4h9eysi_eJd157H_mrvRW^=N)o%a01+GKOdNfwf3u@_FR z!NQu}?oBo~BdKg!7*%|~;?Kf=7-rrk^~ylO*-9x2af7MA+3M3!p=QkKddefcNO^xb z{otumm?d98G$Ozw*|4;F-Dcv)ntgu?>nM+OwsNT?oC}n{(Qsv3ZW4q=PLf;j`;p%P z`_W!Fw^f<};|z0!n@bjGMn!SjThCs?RTWwpuF9{ZxT;JzNK}af>D2@khIIuhV<2sH zI9LOjd-m|OK7DAeCA4F1f$Xb@u1Syy z1e&Sj(=n_vAbNE?D(9Y1;FH7ro=Njr(7JXrrIBmvQrSm~ZRqOYaD<##mXs^tdcdRT*S80~(yG8l3K+N2SH@tQDb zv#3y^Y-Gx6H6%Vof3T|Y1^mc=D-j#{6}%Ish5$C0TEIJGrIGFOg5v|7Okm`&oyB3& z@nHgO!r>7gFYQQ%3rC9%Pa>KJXk7MS18qUO1ZJ9dKu<`!rZsE^K7*%5KLk%LClMMO zuq~uTau^pxd2uvh#ibr6IR;>~K(54TW-KMZ-x5H{MFW+6!QX(PVFS7(8{|ZS$CC4N z8FG=Fhs%gLGzEk&7_ad!41vH`P-KO(g_ih@Q*-zO-kz9qywS31(ws2L(wub9vG|L) zo18crtSDCrBuv+Q{U8PEr<#dlX%ZLyb*4tSBBNOBWzp@GV!ON7%7rG;vI-?vfYQOD zs~ZuZdb@7GuS1;|sI7p~IIL`N&~lI51L)*5co@38nwsMf`=CXJY_CScaN#% zN<0NUS$4E^o>T$I?~*Q9r)1y8LRB3LEfCHMfX0#*0DPEFP*F*5!t-oGTf)r(^iRgm zAFdTHjBsNzMaZ3?7Z*?eK|v>RaXf>l?y)%v_YFl{BAr(VUF_; z#G*PY%DpD|baFrzOe8bVZ-~+f}EkmeLFL05j zNt$m8I6po2mq}ZtX=X>V^5#D-No!|qnosf6r@4cIB>Ckmbwlfhg0j1 zm9lc9dZYSY^~+jL!_xExy2(m&0e;F zea-^bmrT>1tZXZ+j6*=9ESDhSB$4o$^@j9-;quZrB29bok1TimJa?IlFC_$Y3S1V9 z_7C~tY=Yw3{b{xPJ!^>9Yqv?sSd@ipd`kiWFPn=jnI zEYdYeK?1}Ghqs_1Mask*1O~v*?pa5|Aua-Te5rE1&on}0V0>x9ABx@?EVhwZ$l_L9 z2&Ua?uPjl{T%P4%1$O{iD3Q*UC7$pw94+EIMJO$c>Ps2)a44aY0YFWw#V>akFj~1j zX%-X@^*5-^id1SX;WAjUhJy5z$Mww5Gvit$J+kYW>y$^t^Iqf+cOnkIVRwAk;`5$0 zdUhWt{xdfQ7RrCyM3 zOKBmb3StA1;ih4jCAD=mVvXNjneZOKbe5~lq!Q@2xZEVU)T2lirSh^K^@1!54}ZMq zlR*?Da|NK(t^okRWLPT+Ktu^`vRTNnin64LL=<`8I;niAzd*@NLw8^17ePp(h0ChQ zn&tt)6z?I|kRb)c;YY3q5rwyhEUK*Ye@l&npbqPzEa`+^sDbDs38ZOiFTldXTcm<% zr}O$*IZj%RiQf_2d?!nmY?gn#XMG&QrKF@6@&#liDI=7|aLlaGv9qqyUsw()9cK4kpMku1yYpQqG9{cXIW5pNvSy$D5AO$OsOe&PeK& z;&MBL&{&?u_?TGKk#5Q0P0sEE|DF_)hu-1lc(S5p$bl69G?h}&D_S}!a{R+72JDqw zevJU0Ik!QgP#TuwR8nmNvxqX1IxGS_z9NO-cBIRQGINaIT%Gp; zWV1{MD&xV%%;2RNJ;uO*LWF`zCw7=^GXe7Epnl;7PP_g8UX6Id9 zdFb4Ktd~hC0a$1d_$pZC_^-xilqu9vln=U!<8i+eVe%yZj}A`2L?}(u4ihnvWpC1> z;pTA1x*x*{n4lbr5`qpbJanW?}`(MR$uNc)yv<&q?49GrOkBsH?- zEm(03r6{9VSZ}}~t2SmW--zCyjSn#XS16r#(Muqa%_rtKstu*U$iAj{JedbMUG z8TN%-9{9AZ9&-B(52{3PnRpzNOjGDQc>b=HvQoqfCcgJs_WLA0rkA3%3?ukkkZ7?$ z65~OB#voc*pjYKP$Oz+Fjcka&#&atBM4{|~*08e5d)X*f5X(3!&)8lP!GKs;-BMsv z=ir-_m)Vl_+vNa~u_S=~>4l}{oSG#dm8oPx-Ui65W*WuG6YFmn6<0lcqXR4#3ZCYa*IdNYWmFC*R7hW2T6V74 zY9tx5Kq@GnNK}Km%D~obaPkePG|2v{LOa?{H|xcOYr1pOL$JAer{fcMG`mz^xp9#}V?zpyez@zWZ-Tc1Dv%|Wo;V9G1__CQ*O4EyAAcNC zP?T@K&rS3|@;W@6*Cih~ynfg)cws}SH2$n#8=t$= zg@fW&{G)dqJ9f6qzAH!3T~l1&@9);3PlHdLpvtY`#OJnu^P{g^qRqYc z&N`1r*>sT73oOMSk59VuYn<}UpZ-*P;WM9|KYjh4!l}a3Pu~D(w39Cw6eoe+DUF~` znomg8LFnPV92&H1(s^yFdyncSkfqMu=r=+`KKg#x1HOl2-8pP*jUt_Fk zFS4?;nTj4Xnt@iy%;v0f`kHhcd7kQof1YmdOHgODpL`I1rktzVSaKU47OAcdrx;+r?UQOL|2$ z`d%Rj(n+hPW+KX0YBkD3)l-v`T2QlbC%3Go6;zBi5!77CG4kC+zN;z?KV1dD@9TDR zv$A|^|Aq~V)qd&04F4WnLTp$YH}r2^u531K-EU=#YT9oA_AjLp-MrzHa%4fbjY>e< zoS|pe0&Q|KRWCF$I3ue8b8)(vQPY>`g`}Ezi9KaDj@QykqQBk1hZ*D9bSjH{O8FjKiEVI|cS~e{Bu1)49WZ3)6>2vy5yf392G*Lg z6i~S|cBHbXlb;A_%_8+KK#a!lh&WYUtUCkSpe?nZ(!$R`@IfMsL>VN$KNJiqjOC4Drl zu{GDBsbr8wU+xZl^&~(pvdkYS(ey%L2Cdwi+9GSCZEl65kk;T7^p8da4C zj)WOF0?>w2$R71gT4Q^@kwS#utFzg*&vCBIzON6y)kA72~}4 zvt4q7zpi|Yda}uQl^%dgxpCs{6Yrh)D8|baK5p!-(NL^ui@`?#K@~fZM^?jXB{E@R zAL3ZVw;J&ZwQz?( z8LM23>yE)LON?slp;#$urI5av*gI+luM%35W{Jnk-h_FS%sF7`=zZE(&?;FHM8(Dd z6w#)`&f>mRj6fa)m-`R%a<_J#5@-` zU3u6%T+?0u7D$XCn@R^tJyZ0gQeQ65L&8wdTsK?Bc(TMF8D*0}l9WxZB{P>dj5;;7 z4aWtJ!QFiX)=Ro7OisN1F z?E4pQT)lo(KEJQo+_(G6Jl4VFJf+-&T(`(bX~M)m!90xDSM$O;2*qy{n(>B_?X z_VGLJIIdj!SIzd$=i8f|;fWLH0nDotK6>e|fr&}Pm1tRhS+C^^Ky1g5n9*uvu?h=V zEj~Z1@`&oxEvny?d%a=*EnhzKvX`7Xe}3c4^sy_BPW#RLd~N1ebG0nr^}{c#51zT~ zezUi|J!xLMIel!J|Ix~9s#Lg^bKB^g|4KeoOR&<^bZ;-lCkF#3QyzyWpV9bg)PE<$ zF_LA#j9p9f1{}w-s)fqCDpxj@J05@hj>(&AQW8zM?d4&0)NSnxm0KZ&!p62?xS(6yX{aWuM@91lp*Fn>zjsHx@z#bnWh+5qKK>i^Cq6JbL7h za=A|#wvqc(F8ABGTI_Rn!}hC@@4u{`OZuUF%GIK2mx68819+SgjlU>VluEH#E)S=( z*=d;K6Nz(Fk}>~0NSse3&XW@O=T1(){%oz&xxKA7s><0`>+(#t39&)XZ%#H>S99%7 zhi554VHp#`MRA6=an=h$Egn}gw&pEysx!30NW%39pDmb5#z~-5D~KN#ukpCt1sg(E zj0acwU~efwNrALgIzvEizFWjz?wWe zFD3CLD?x&{r_ESLv`@&*byxGH2rgy>V1wx3hKLvS%$NNz4k z0CH)|Eo2dF-%)e^Bj<}zR6PH%^X`y}2&(cPoQD$QL-i$Q9ykMGPqd4yH3RZOQ$3}`E9hSTzx2+pZYRfocK)P;dQ>Q1x!*9l z3zVr-)ef#U2B)gscZ+G3=TImX`>ISe@E0C-#4`6ouc7;qLJCGdPOu&)X$M)!dk}I= zWf6zg0n>PK-5%Kde?8V1F66fkarHe`I|mN%+qS*)#W$Fa`e-b_|4n@jyy$7ThFas9 z{9Kj`vb?M~RX-Xbx??gx^|W6u`~Uu5CGGN6P-rm*eg8etGB1 zUp{f-%MYG7@t}6@P5_n0Gd6fCMq;%^UohJJz-niOuy8cUD%la#0He0zk5<|4D?*k9 zgd}Sz@4xBXmA6iwf5la|>>N1yr&p|;-1*GPsY{PFl;N3EUw`Y-qkDh)`fcSeYahLP zduLhs@XlcMUw1y=S3bQHt>1pnS67w4-#M&&5@z_#-#V*=t8q^J4EKE*?^5JJUOsWN z*k)ju1)YKE{AiUTO>5oZ>!!Uj%So%ej82IO+j7b ztzj};QaI*ODaK-uQfTl9L8#j>3-k=Y0iDa2h{f$nyhe<%xT{hJnL%AeP$Cy0FBI39 zILBf~7EwYGAXqcVL>`iKa8r~#+Z`uAmrB+B!N9L)YqjD+ySgyf zX${$bs;aD1r*^)YYc`Heq~Xwg3U2wQKoq`n;(bb6c`+-`x0D^c_(ip^E~!_jFH+x% zP07+8Sy)>!I|Aadw~9w;Ww^9JHgp`J16PRKXCPePe9bM9(O?ZDPqSig53*FlB(3NK zSObhV2`yrZw&mL%FU)?BZ+JcBKwxmgwgpDTO_&k0b!BL2!P(PLxJnY|J?{R?w7U~T-TugOh zx%8pQQYjZ5k3d8j!xFQatL3OwPQfT04$urDiP1{*SVn3XSTtot^BR{KD@0VK28JNv zTDF@!9UxO}-bYaX(Ky2+_7bwdm}1T=e+!=?Mcf_hwKrV9e;+aCNl0~6Jp87c5mX9% zw@p1N#dr>5Z+)yvj#?u zTnRx(z=avkqyz%u0xedn8S<4~xP)NPAsCP6Hse;ATUV=7!Ic?$kA z>}F6qwi>~?E8>!1A~8h|QdiuFW(s;fZU-EcM24hj874JlAnUncvcWq@B9XEwVx%Cl zR1+@Zj0YbDK?uS?c`jA25r@N_luEf+)=)1~l5R~))XE(%TC`HwGJ8^FjrbTgMlM&a z^m|b{a?@(o&E;$UEH-^Ie2tSzBvW2lDP*!aZwkB))g3$>eWGW$&O$cV7zU7RsL9y^ z1fSGJB)fln!G6O@aXAEwCH&>4ols32n=R39q6ULt(1(*Rn3vV23HbQCOH5{nd#$CAtuJkIYQ$Sx@k_T>wTT94PuUm6`j-< z8)-m_1hl2z80o6$V%;oAMI?#HvO{O!81L%-bBu(i-5^Mq!3663+%|gY- zkXR;B$kdkbPeGkc-xFBCStQj-IXlcZpclX!MpR*g&C_A{y9r{-j&*=Vo%;1G1{6%m z0x2_j&UpUlP8o8d`{$68=aG{yop>XfAFF<|B}*VsDI%aTCWo~c%^O(*=n~K z^5_|cvh(W<2i>~I299S4ticTJCi|9p6AP13TO^U`uLV^=Z+U0}v(kiazRYX5h7`fe( z6ZYe$Eu(>~saUXr&uVetQl6*I54JWE5l=YeRbyk0D?>aF`EpqhK7CDJoxYO0VWLdI#7;$UjEaWy?C^=j^{lFS{P=aKlar1PRMGjhbts5QSN$9l;`$A=DOninGbV9LlpE26&gav|fCq+$ImR&;5+s<9g^+x&5}NICLac z>7diYR_5TD$9Ogrr4Y2DC@y`_j?`0F8IdJkQ)xvmjy{4FQD{a@fbOd%T`J%`^tl$N z8TL%sZDkcbjjrvR)?a=FQRCckr>cdUdl*ET`$wj8%Pn3IO4gvC70{|6^Rz!PXI3lO8;^JvdlI%>3 z5|cJq(gkjV=o1&c3Rx+i5Hy^d=mHzHkgMW^g5*%|kiSj28uq74uw&)EKx?sn%Mz^^ zE#AhOoo40Ih7MsTJD7o+Rvh|Eq8`wa%B|8=kH4&k2v;Rn!7=0!2aLbr1sZnFs!>o4 z9N3fgq+IO(DgU@}!WtN#T;|7>Yi_?1K@OV9)m-&1Dn0^I25unK>P`~1NY}2wwZxSF zilF|UdIg>I%2y#H*EW}*k>X=KJ4HEsgx)-``AwrOkGfww^KM1kcf>T0?>|nRUV1cE zdKKm6yhGn6IEGNl^Wcsy@nj4*FlA(^Az7S=9MK(kAT^Y9*{U$6aAi=}|Rkon{~1l>{L6_i(i)g^Ew_%JU_3*25zu%=w&&AuK7>a@7I{L&J?f0NR|A zHw%OZ)k)fx{ZPCEnq55hafz`PvXIfs6)|{aU~`Pb%otaL7c*ZadWJ`lvea@0 z`5Mj8wCkpKx3o+opLxSvG-(AcGq$bKjFG|6kn55IcAhrwz-X`qV#fSa>#ABO#~{&D ziLnE31g2G#8Bt0Xke_--GkV}4%(D43HHvR%3R^r(8UhuVz=JayV zJPNI0&jO9cWdc7k+pNvl%yK&959dLo0b1^n)kjlU^oygQ*S30XF@skZkwpkS6uVf3 z(5F>AX+WC#2(us`XHRblO$HF^mbFG5K72WRU^iGnp@LvXq0FETp}5<`T`Si=?6u6W zA4Ku@7XF9<7fc^g;75fZ!VE^-*bJf{r^QMXEW)m+(rODiHy|M$1!DJDZg~~JcFZ4s+UImSPho9hLNBbV)kg`Mw$B6YIF&BZ=uK*}s& z^szh$=yr`ewd5ppsqB?_?f zR|!lB17bxlNv<3*kUd^>5kp?Gp()iybBG_=Q>G7KMq9ak!-J0Nn77jPJ_XIRX(o%A zuxeV>fb7P0I(^)lwr1xL(B||pTd|r&0L@||(}bIDv$l|g6N@G`YQ}%-TcJ9uT78N; zz}9(BI!i$dxS@Ue445=Gi>ZnelYbzNzsM7yKN5J*F>Sa9Zk5)t{>TS3lpKgrL+oo- z3yOAN`@u;qoy@Yr3;WA4@tw=Lq5gVcbTV zkQ3t>^#qF}*G&=*R}kL@(AAV^+wxe1r;?~RXW|1F$6CSl@;s2N@?aPXqRR8k*@GQ$ zcElE3hL!G|RFOtl$Q3$`bk%Xa47DBUbu2^n-C#R+Aqy!k-M~3v2kBtL%>_Zu4XV}P zWQBhY=xTqz)$3VTkaY!{sf-#-Ps}$C?HhUvGlQ%rHec#oVa=laIF~qj-=4lx$xx04 z|B9Ujt|?cK$-?3EIxWSy>to-mGf@Py6nkKYG2wv_B?)%rxzPb1MHJ7rxL;RUV9-ay zk$7n3muP{w)reKJ@-8B13nNw;HSt(mb~#Me*BAJ zP?;ba2W3?x2s~b7bz>co&&zS<4N58RLHS|iusXzC*<2?2xQBs>wuv?hDpeh@)+iHS z|N7TQp}(e^MKc}1`m81!DSN8OtZr3``)bF(a?tAR|JR+i>8)pdS=fl zujYfzX=UPj{A9lU?QbjZr$yNJXwXXM6D3@9TEgs=9IY4R?b^i;(H_mwUPOCPI`6iJ zuZ@C1U8g(*Y^A(fno}ldFYbd0M|~~)zB*ByW%}So`XIz($TBWYMbqk&D+1j;N<5$1 z5_dp<9|Am*>=inLANEIkmvTFT7T}m@6v=99^+)lmY>)y#f^EcU_e**(>3ty}5@A}2 z0(34{-KxCgH(%m94-iYm&1I{XUHRB)!@KmNM9%o9RE-+~F{rp#FLx-*p4acy19kDM z=k?&g=5amS4D`EoUthzUS8?Xutpy{SXX=<6dL7Hb;#ww>oD&p2^SZuQF$AeZVuGPR2TT74+d~0c0Yq*5V|`fP=V@2Q!eMW@rVA40g5y z7KBr!&Vxjzk)7K@Y)kSm!kry(y8|>EF(FV$2xT!U#1lV^2t?2r#xlGIoRznPRG1f> z6o#}_W(C12CJ3gSSd3nJCGp)wSDxZ5RZcuMk9=TqUJqBNm@a?k1!CK z%M5W4c$lCy&cMxs4Pn>5=qhP7cCv@tASA(9iqUTZx$6UUi^&aFaYNt)7!6QKde(@s zF0l)$tfRK!R*;|q^MVH>-|@O-f>fQVHfCS3fW4N-gI)ruiR8}t}YpU89X|8?C&!VQ({ z^^0b1xk?n^YhEzFhBQ)sLBeUOV-H^PL7c-PJ(z2mBsIlCQZka2@YqF%9-37u_Y4)g zc;MJerU5umTfs0hB>Z^Aqzft!)k6|R5mVw%HAS&zN@TI2QGGPH-?4-6LMoAnHW-E! zF>{a|lC^=v!Yza~;mQ7d=?1KMM#I0Nx@A<2c--Lq0)(oz0uzMnfKGQ_@E-=^oe@v?QyG)Lwl41YF%{-5`IaTFZLLo9H!^Gw_7j z5*ZPC8Gj6oR!c6St(P0P) ztm33*o}#||5!Zl?(|(c?^JNmffA-$f_*Dc!ZY466gp$k`scsNVIaWHVBvQA z?(|frxZJDle2ql9l$p0I?QOPEu9`<4_K*+MV@w*gLRNm2%UjT**| zkQSqMs5KSPqNd?F=V{U3@)Sf9rVC>e5#%IFA(|4J7q=q{jVQYDxxiJT@X5g85kd~7 z=yS1dC%NR5jDq2tN-1!OQ7wXCmguHgimOtlm6h6&CkX=-frnFyHUd@53DQ-Nobr63 z*Z48mh+P%JbModD@veyB%PSXyz8~wP*QC3Q7jfO_$(lvL1s6I1`-E~mK4dgQnMMo} z_D4aKF35;RNmPrQ1o>gB)ARxM0ns+XZaCO6dgzoil95q_xnV8rFDu>6eF5XNx{1=x z+)K_dhBK*-Gi_A4=R&HUSWo84q>o#EfevOe)|y58#+el94+o8P8K?p&G4&CZH)l+} zOzH7cPR0+MK9xil+P88Alf5h{?GM$LH`mJ)TAMtzcaoG%#rqJ!iFBf%Fx_$CtEp6h zPz;wZzI^aC>J)mHB{?r$SLv7G$u%f&#ZdZBU;KRITVEVCb`JmKx0-)+e_y#}=L3rJ z?w$ADbeE#;yhyp>4+Yawnoz&@DRrOnxwy*N^2EuB+b7P$CH~07Pfa{YUdA6z{Kdq7 zpZG4%H>q5PZT)KHFO`2~prq7A6)s;E;lT(KFY2@Y?!L3eHZX>uP;BAC+$~OqyON}C zSoYCS*(!#jRCVD!y6gCFUoaX_U{YLbya#ShzM&Rcyc6lx{=PGdmz;Btb}w)+KGljG7he)otcV=$eH%{? z(h7;uMvkI2h|54kFTep2S47T5+e4a+#TAlwo+1y5)k6-6TcImuK=rr=jA$xi#G`Js zh-o9s*$WYbV?kgRC=6Sws2IJ$;^`NW zi2+Yr@}BdJpP0o$+LXsP602B?|EAtcWi4@U7_YvRaxS(1iMc_4aVa_ z`sUwMtZCw0f)YOv%F`x0D=Y&C8MlYp_O8}(ck$EA_ZO*Uj9CvDbPS<^3C!!O1% z#k$$)WHVBuCYvu7$sQ*+Qq$7ePRDdulP&8!0C8c6RP$<5Zj<%LQY+8A<2le{glchC z$C26$p|suIzGYD}Q@VEd?@*@{{G{iRgJO0N24W}YL=tR>S6q_<$$7s(-DFIzb@Ib- ze-ay8$6SJQe_fldE^FFQq`s=J%KE)m&Z@AWtL1HJchXzwB$FMtSjJlmm>Jq6q=aj^ z)uxvq_|JyOc58#(OL|Rqad9DY-Av`^Vcpr@i?~pnGIX}Nl7}0^JGrH~VJBZ(PP5CA zBf7H%W>K?ckAAIk*}DEPrm&xt@|dpPq6{V+?aJ2Ponim-gz@a>_Z9lO8Tn;`+&+O} z2e;0ljEYF?VKeE|brb0ub1Gsfw7amD#PzBdQkJD_|8h zb2lj~p0`5!vg-qpO_{G0oZ+>v$9mK#Tur!wxpe2%tMa8{pU68;`J zI}|U+y0`HANs)2ZI$+?wK&3$*8(YeImTOhr`E^hwuhi4Gni>7u*yz9J7*0Q^CmpBw zmEljX+n)Vzw(>QwkTu@sj!z#Q9N9R=c@&XtF?JLrY1adY%c6=85z~#*<0FYuN$DHb zFx+M{|6bA)B}<;hQznzY{OFV%|vzJy^sOm0m$BQp+_GVQ0W$ zxszpP%Lu9ido4%IH+#p;hMuATgzDXWM}mbE+@5aS09nidoNS542A~D|wann;siWX{ zq6Z~AYO73)Dz#yy3`>gtNbGm)&yhN$>A03?o2=9U9PsNC2X;LsSHXBWfuXmGB_znF zc3|~aL22_oK)Mi1hOE4gXQxYgDhUn!ZqUbY8TB=`0`-C(2_j$WMpA(i>jspQe835_ zO2S8<$b3Y*N~?a!{ot-gd*-OW={~$?&%@VV(%8S};Y8x$o!>syxQ+;1rEzWg+WKvC zjT3KaUh<`rbv`v3mn_uh-q}2V*PhX=>%P2ks(Ecjxv_rYT)lqoej4HMUrEf-YT^XR zGo!hLJ6AYazb<{<{K*Ed^_|Z&E;&Mrw_Vz}Hgnx|yt}J$ZlN*vuF>dW*L`@paVe*! zs~BJ3{oa2d=>EGCZLs>-`{Z1SsFDK30ah|nlj>%c32!dCnFn*AY+}CPLWw0Vl=&mz z{UIusm!0fvY+toF8Zb|n0bisd!l-`JD`d&FyUSx0Gg7&DpQWXX&uI7fJ;!Y2JhG1#hXJ0e_Xqmjln}{zCmh#D#b*X5m(>*~{D4U$QEfzdmrt;~ z0p*J~F=fR#RVfH+4Tej+$Y>G7Z2VV_wFW3;C?TVN2-m}%KfO{v{i_GV_H9!GQof*- zJG?cywR1wh?u*oy4_+2zEN_mqDP8}%V<+EiCPMB)l=3 zvff#%<;+}dWGJM`u5JL0Hp@laO4zU?)2!9_6{e+=tE;tI&9mfLDia0r`~DWLUh4k> zM8v^Bcmh8Mxpt^LOH|y0;fFZGfGEmRjf!~|NQ6a`8h-yDp`0tP+IK`%8VYGHs&WT{ zRZ$KdQtEG2&RnTnbHf80%BxUo6hI`TGXDg1fKL`8jUAdb8_SmE>?b zd_?gIYH0VzURGHNkhIaqegT0r%fckg*147YZY z3wrPMO)^ph8SS}gY0vWVo;Q~#=jVE*(&YSn?-$6tNcycPm&`OX-FCu0@rkKY zA;@3|7Soq3WeSBEUpdsM*9W!PN~`|Mlk*o{G~24JELW?8f%Jb!uFuz%-=qIsR{a8~ z_0GgJ)#`_gxc%hAUrH{;n8+6Pn^IjV*fV77GD@R zkb!`+f#XW3Y=n0EBhHpb6Xn_v2&-Jt>p%HA<#jiFC?ad)%^J8o4aiLEZ}8&^t{K$= z28Fg|t(tnvFqaIiqv`XSMuc=;RaeXc0cfPPgoth;viXJgYgT#%5h~a3FNgd zBpL=+EFW23ZnycxAY5*LxD8SK+TrEp!^=wWy$QDS_2K1cGLl^i>>}T>9$t`-A{*<( zcNZr1F+SsrrsqaFpfVLx1jp(R|BKRrO@$}2FQmt!7L0byJLQd0vl;DtR9^qOR=YU< zf4o*x4&be@68hqk%kbgwe(ehzZ2iE6eU(#D^YrID?{jJU&(i5XONa6Mxi_TKZ%F@7 zj)3SBGEiwic`V*2eJA;tV|ky(zCQUw?qj7#$PViZp|#8q7kBT7a%p%e+n8Cb`m!Wh z*lIwOMlA7s8;Oe-PtCitg+g}c9rF5Uxs1;4CZFh~bHs1}4OpdGE9o3eH1erZu6e>~ zL;$(d_8i0mV1uZ}MFh{vDId7dg7V^Q;ht$t7PjGv;yh+mBTLGw)>ULu?h@aw0(tfIzJd+j)+wHysN}Pm#n8{>h>0lmeb^}tWzNs$f(43cuN&IzoIo6w7w4{2iuEEZc2>D^ zZgClVWil#tyCtt8xCZZgJM`mEk*9cW;=YN8CZ3-7GWfs-(U2i(&Be-9$_te9^oMX+ zNSDX}5hYs`pZH~nD+KjhRG}UohWKZQlbc^&@!!LmM~6glJWe3(gc(RK7f~m>kfRXd zxETM)DF{=UFQDjG>&3lbj>ji5oqdt z=|J;Qm%3iLSm`L8O0kma!eHiWL0b26UK)H`8mLkNQZ=05rVm_)if9l ziU&8R(ps8O0Ss`&5p+y+)(-H&)cVbmcuyVxF$CN!t)s7Z81keMmQ?1y+a+jJ1jjRJVXfojlUI^G8V0;t8Gu%D+ZXv{~*GXoG z{k|+527z)La(VE$oPk0>910ptjatMOy8RoYg_%@gVOpstiZ!d5Z&TP3qYr(6|Kk2d z4MzIn9}$-XhzA9zySS$X%fK58AOnB~&LaG*=aeYn=7=Vws7`^On}#y!N-N*AYDK_! zX$fJlGtU{9w8&Wy2Z&=}4*1Cdk!u2lwDCRbAn;ACX!bhZWcNuu-)(q`JJmU7PiL}e z%jo-2>Mc=fX1-nQIcAsic~!_w&f= ziSO+Ye}666gR86)0k9g$f))3nD7xYkl*DtwfRgkivU}ta_7Y#BERo8Urvv=*nQ(v7 z4iZk?jv#KE9v*w8F`C(U>0Ujkwfwt3c;d|A*`HSyjO(caLXGEqx^-N)OVv`g78;fM z)I~+G(MGc9PhGRVK3U>AsP*k22fu^gLBsQqpn^e`oWl|o#U|jNZg(Rhc^al|9mC6y z+6xNo8Uz6rl*&o-I^}iNqd)VCzql^-w$01DYrpZPtFJYco&T!7=8a0{@w1>G(yZ>ru=ex=y_urlCEqd?F?)>#1oS{zw*3^&Sr|{)`U1ILs{8+1vm6zqv zpaXVE2$T<>UboGgO?&*ca~%5N>!6UwMu#5an6ZUwIHOcrvtXo+N`Od(Ui^*8Tyd%58-NKE&fv|mV&z>FD4 z*aRjTJ6%%3R3{I0j9Kc0gK`o=iqi4U!NDNAeQaaClY<4)12O?JHSJnS3#Y0Dwb(UE zDokvEqqX2qDM0X?25l$_88~5`LPIY>=U%BL8VjN39O?x*GwII}r;M5AWJ(f%iF`^U zDz3K}dDG(zPckUxkgisx!Bmx2vxtj?+Ai1LGS<(OU za;#`Xans$@OrhT|%%n1ZfU!`FtW>wF&+DgWqJ?GEFWK{YH{aEk7owR9B^#v*V@IV=iPMt%h#E9KGlSXsl*E5*CAanm9zcpFTbXn z4wh!8Tm88xu)pj!I;DkTvx$2JcbEe+;iccNd_$%IK*rn1PF9b3A zH~DClvUqB@aE zjMgZnSC`Yv*C_7*Do8GnsryysvNs(4BElw)`AcLY{)Z8$ z+PPJdUs6?nHuJxf!VTHB;BWC}IX}1a)caJ5@j#wRl1o^D`DJWtjK}?D6W2_DkRgmD z`k??9;^Dg>)vse1gUL-u0BSzwt!0H7M4}2xdbHfEX0@0P=$J58u`=No9*#}EWuKdu zCWmNuv9`p7XklUPo`|Il?lc@a{0WILNlZz8wp8WKnQAA}z{KRZRRQL4qr`xd2vp#k zlC-#>l2=1wjh={Lwi6N{6fjLT4?H)qu-%t^LW7sUXvaLE-=OsBoibx0@k*y zOvPPos!jniBC-q|C6c5o$hkG6)OYhPH=Os9ZGF*P1pUP&{_igL5UwLMTsEQNWx;II21(DCNz9Azl&^iSgGLDmM&wRp$i#& ztoh{Owiu7{>_Wby%SDrClEQZ^Fe2mxhNG}v$&*~J>EGzu$u{*B9P6W$w5VMH8*YZQ zQyaEe042&@j<-Oovk8Z~Ev-PU)b`)z*tzwk(M1=HmezCbUAay@?GXSOuktfwkcw%-%a({mJ~7-_o<|{{XiE;_on$PBq#d`hdpL-WBgsV!3p0qvzsP23 zjBOmWyhWOk+7A7B)shiCWJf_*j|~YjwR@5BdqItwBCn`-`vsIoLO_ib-O5lv71hA$ zh5A)R-RtgA!wjg3f}8QfN^@muhOwC_HQ{hN*X*LLFQ~tr385WMr2n9#YIXRZ-n`T) zs|R18=JV@&tN^S2O4$6svi2iIn(KV{A;O7A+Wl}Oz9|DX?kTL(0RC3TTf@|z4hf;vH~5o zhvTcTRsvNJmba*6*08+JQg%9-x=V#?x>}vNvqVHOmrwq@lF9jg&i>uT>QujxZ< z3+A;MCA+2#(WXeo?zp~VTy`0(KVmFfEIi?U9Km5+QDG}UJsEDD-Ku-fJ?D4NJqw+n z!mo>`lKFh{UGLg?;7~q!Xn6XpIDO}#s}AdLJk-7*9>^zm{y3RGBo3ZEo6PS#h2rE# z#T{qLXC4r5&@Z%UGZ*~tL1OxV6n^&O^gzP1K^MeriNMWB^Y&xIP0tzr^EiSNX?}77fPXI?3={_Lv5f#Ej%wU&J3Wjic=jo9}oQ^PF z@`oeCDL;$m2t|y&qFOl5im^MDjvbnhM=(}LUQphC zP|>?ne~G+AM8&=IrAB*x2YE8bT2jyT2rY`hpc$~`P;z2P3G*cy)|mkIchqr5A+IJN z$~r{(#PFvKluHg;010G|`iRAYAVRxFBWG9ADzgH)f{-SBg8|EgHm`v6Ebb-5D%2Qz z=S%OY-yB~YOJs_pbE8r4Yc5Kmm`RK+zEcCIp-+y#C=r-qT|N{#we#;+MzL%RO$8D! zie-|-tM@uV<$;fZ;^a*?O=8&<^kG8cCO$zp7)uhmK9D_}4J2QD*gu-fjk*hA@naa; zT@fT}W-*;E7Sj<`X+)LM#j$iIc*XtU#OUZ~Jnl)o_^um6(P;F()uJbs7|r`r@rmS| zKb|Edpb*pfNFd%Mu3 zxH`jX81e~L$I3@hdhv%@T2?-^IQFQ-156iDd@3KK8FGmdBIziWtz_C+#Ax>zUcqXZ zs*_ai9mg97(<4lkl$$CT7tLH>8_>7?S;89@B7m_jEhvvCs!{b}xRpD_SX*9HH8N@4 ztMmBcM23h=_&^=%r#ZzTSD_Z=CaY0_lBpBauz*3o@+jw*d*_@=2j)gI%2QS)_{hS}mnXTg^57*Y#O`C`Zp`lf$0o@kxyo{r-zkWpH>x-nDBJ$g z7bByL__lF2II}z!oSZ8knD9@Y91DyfAd6Q_5L75wxqHp=TLJLKCSuGv`pki?upJtd(kQdUg zvS6u0D9945zywtJg22>K*{O(F(5w9LB;iw~3jD985&_&!$&W0TeW^6C!IvV+!oir< zuL#W&=NwT^IElD2yySv-7}2kZWp6U$k;VQKXbGNRYDg4*M=hWc?I(y!fI9))W_7o4 z&FxVvSz@{IsE8BpCBJy$WTJTHXlXP(iBigs4~Q=woV@BB;egOrda&;WXhrc-0Vks# z6B@aDImlB4R0vV5I5=Yh#)a3+%^0%~q(2%}E=-){#wvw~Hb;}r&6KS$(;ol6dz}=1 z?nYc=41(EUfx%^rZnT%!M<^^Y#k0J@>nGb$7y%aqH< zmAf2626p+!ow-w|=3dKuH2z3B?d&|B$mJ3rBOvJcWYK*!5j8^o%~x)7#-Aco6%x{o%xX;>h@iveO7%^?ZKx75_@SNX_-Yvs#L2us>?*gCHes zVII3QrI_|Au&iPfG5cbGfnOQrxVpj}e#W4c> z5rTsdNj{z)Wq^bs@W{bDRg$oPMM*MVpal%a@hZnrwlI_(VT~M%^iaYxzIgmN2p4le z6iY~4fiKOjg~MlC zST>U0Dl>6q@@P1C9`lMw@_mJT{;qtX@J_-3N%vGfKZzGRi^>N|$Nu?jreCgT)dNWfOs{2**E)24_5iKNO#HAYFd~ z?L;2y%5e68Aj+b`-=ohwBmPP}h)$`9oxsb$gKB1`Ohge#N;}EFYO7f+ywvN071RN3 z0`bNC^rV}&6)YUV?Kxe2v7j>ZEU$>i4qov4FXDpDkVo0*1I(bCPhIr; zFWl}AGN3Z$gCo+jNj!m_n}J_3?G|w(3@R#G@tIixvtnI^;56BMh?TT)pZ9u4Sswbj z3flv}3Z3_P$6GSu_o|4(%9AqrCKzHY`lT<%(5bt3{^8&ZPGmlu>W5222Y&|q{_D^O z2-sQ0bYME(L^%cKeF|>nh-XEC3KU?Lf~$_2{`7qUk?cTX z){@n7^0%|8RQ8KIXWt!2Cqk$yAkP9&HdBlQ()lqlLG-1_t49jQ$5RB{%`A>Bynbw< z_$QfzpV~Pqo_fX=Vic+{H_>DwpF#_zmcF8_OXLEHbLspWkA%`Uy^$ZKiwzSC_gnC` zWma-;f{t`o3oW^88fzOyoI@f?56%wUh-o^D5dC!trOW{AsFz`Es&IcW#4Lc{c`5v< z&!Ak7y0fSV7>_J7a!0Or6uTe;6}Sub)?esk#xK5-Prd3M`{9S}dtQ~!r&=$&)Lp#z zqS>ipdFXgKcKu7@#lyL!`Q%6{c*}YXUDDKO>d?@5;?evlq9;SLIT<~aI+RKsOmz^u z-qF1Jm=gz6g$V@g*_oG<&?B79g~FS+-Sx0-KYZ71=Wpy@y0)?`7pG=(<+1tWVyrMU zK2$CqIUY=nBp2N`e8oRCJ>eTpj1Qf=+cP}Px>$N>H1?Je|Ky~91jD|mVXVofM&35; z9Ys6oJ2y2GA=XhSlF33F8hq>obgH4roMx@(O0fQ(hMV?KWTE&IMP+T{p4MjRcMP#t zpaDprKU^8V+APLphcKH1_N#RU#^}o9-}vx{zwzOx?;K5xCa`=`FvdGQ|GFCm%LApt zv_CYJ?PS)M?#|{$_}b@jt> zPtNRo?TP8>S4>X6;+Jp#(yjj4q0D4joZc=DpQsYND3n5-t=`Rb5AQaPUFk4<`bsp~ z7ns8+`zyz03$v|hoV5t#CYjYOsqk}9jf$o(m5x9a!VzgO{K#Z8@vfx3tMj z;>f|da%A39D35p#i%CzUluwJ)$Vf1_a72C3+;% zx=dyXi6%;$n@`<%=atz|-L56CzP|kSA)j-V79nun$Lr3m$ zWcSY$RldJ?=!1)=v&W}y5uU^2p`k+jeZT0aNdM%^U;dl0`u?BJ94yS2zU<&3hsXT{ z+=P)RoGfe1^I+a;Ov0j-C{&yUMhys3bhH8$@k;?J0WrbQbHpZ8M1&Sn>DmD4Y84+G ztR~~k0g(ery{4pwTC2ytPC*euY(IsK`%oxSjA_2#!sxb0NH`zC*VMGnua>Q|A%b!Y zzEUZJ$15xGZr%PhT9I0hG$X%gKcMLqlDKwMUdN zxmS*UAZ))oUm#S9$4yT3Bu;{?ZsTaCW*F`-XYnf5YC# zg@2GMFkYd;B2o`?I+G06JBjKW= z^uX$$K$-Z5lk;F=lE!c{EkcWZDm)=b>gQYw4d#{$~t7><@gmQap)P=Ovk5iN|3jl{9qqs?efE>+qEJmhJ)947p% zQ{)QX11JL2ckamTpyJ4gxOV=EYXag9>n(mY%=-95%BZ%cwvZS(&W!|azCIO=rhfZ```0f1i+9)xMu4i=a8*hH|9}dl*d+ae^ zI6(%W+un2SUD-%3n7iw)yAppeHh*?`q-l$%cK+L%VHi7?M4+JFmnj>1tY71O$6RL} z#DMybk%Lh%R03hB;RF2ctAb%b$FUnA?7W;n^CL83o;YcZfeWYuXT@9991~?4am$J8 zh?D5t-LHAg-B+%ivZe3*5EJa7^FDbplVd}uYLXE%f+47E$)0eax4=%G8st@Wk{GkF+D!)AH9-jLf2(qabi`(c0Rp$U1BEW zO{c=it~ch`lB03XX-Dt_S;3ql2KaX8W+%NXnBRS~ zSX}!2=&858?bPV!zt;Td9q)ek9Um3*2M^xy&7((u?by*bz3J$&X5;NUe=zgtKolWtqXGad6uCJ398P z*t&wyoiS0!5-&Xz&SZxV#KmXB*>GlLIGZl~_0HLsq9wUWg~EuCZD=HyCD11sd!EI> zL8AQ}1Vvt_d?ScRqhO)x{go`7lr~oL3T17mWR=o&`UYYX@u|cn+R02>8A|M5E>M$u zb=82~DkCw4@6U*@NAuCK!((IbAdyNk5dT1&DE!YB-+yjl;oQOpSyIDS)Z0prjHGuy zq&}7ULoOUj-<>|Ba%%0C7rxEyvSZwE?)kTJ?)oHmTR2xEDKOb72?6uy-u>=LkL>)p zx*ajZg~ZBxuMALC_6!imElvvh@R6fv%d>c_r^$#B zBsgol5G_ti5zAzvuS7|g(ZroQZyOVz7!^g&&P$Gqf{Ftfot#{7LY0mAheugHN*875 z8Zmw-Y?=SGb z^LO{}{4EE*c>VPsJI{x4{ouzb@ZnVJ$}=zf8~V=$!gj5AGvh^6&PZlwey(gZkD>3F zourQ(MRG1%5Wl;^HYH8>%q)%n&<~$lKJJWZCx^q;NH7)Y-5`s@Wu8HW*Xr9mEji;@ zr4Y{MGzS4dF=})wjql3j6zaIX;|8E-pEgTq&##tUCDjQMZ47|)4J2~~tvA_-c;b3$wa9%4fo z;@0M|dkjWW;Y?y88xE&pWa|vZZ%aho@uArv6a|4~Fc6(ZI~gn7JT!W|FfIOXD708C zOb(GOBsVk}50Aw$MqrUCPd46DBl(+?*+@7k(m9rJ{eeUzzea@OC`OsS_Y#UI=8oU+ z**jB_XfSZ~=o4qR?^gX6L{IS)0`k`hp|~v0i3{R~#JXsU_lutqpW4-205mfyugP<^ zsx26RHBBUMQifSjE8{HBp3IAIYjpY6)TqCIfVR!B+8}rT*7@ z+ZDC1ENybjD=Oud3RO-?74YD2m=#NR`?hNF)X^jD+ve0+Z)r9)d~x@@^Iu z!1#H92x?R|=*Edg0a6E_WQer^K9mVCEujdob0w+;!O*-S!}-cRHRqf!S)kH5Kd($# zv6yAC5vv5ROku-KI1Rj-`;}qr`<&X;Dh0KnOZ`E$d9Z8wUbPi8oT{I#>cLXLf3u&Y zcAA!35M{Ufy?%cQHG%Zc%pI6UEh~om{;q_$*1m@Q4ts&f&CzuOrsx(vGhty(acWXVbtCgm~h3lf!_!Qhx6Mp zRLz7WXX%=TIgkhjw%tQ0+O6r2ptQvF+LQNArdTQ+9rF9rag^!bMJKDgjz8jD z=8s^^L%0d-Y57&CV_J=>0ThGIGm7>0-C33rOwsy~>KJDapU+)<KMvfDK!B7-veZqXW)y{;MY zl|k9(D#(>VIp{hpA0L!MuADnCD92qH_l<*c!lk*bK{@Ffb$@zL&bTrjF(_wUnr9Z7 zPka@g6oEJ>3s$FY8I&b@_n#k>-Dvin9+W+~-Bh?ymlQe6Hh!^zN5~t~=$e zgL23aGsTWKwe9Hz;Q~=Z^;EtSjotp|v%M58flnX5F>MsV&(~PyndVWw zA9Fr`aQ)?_`Nd=N1nvIMSNDS}aPb(&c$j(CV-~P2QvLA#>)NF0Iy7S4>7$dJz5i9_ zxY@DA`GtiOr324t)lH*g)y>w)QvYo@Z?}r)cJb14daC^VwpaHY^!QT0o639LaXVCG z@H~oQDp)M5j&AalmP1KxO6|QaFY)|U=M74HZ#ZYD6@(hs*c>+@jSbGRm0$7g>qcqI zsLWcWrfJ!ww%Jy6QL0zXR>?B#64X+%O|!94w>evpvQ1SM!|n*bt4=jGl(wIg=bh?t zxmvgFwsrEzkyYMI@6+;p)#Qua_9?MEv;WE$()0K3-v0`^{oXY_J5v7Zo*8bY*4z1c z=Fe1&iWmNfr#XgIG!r)E!vn@Z8e&$1L<|vGD8f2p3{;ySG8CFtwB0D}#1NJ?1u-l} z#3&wdMPfjd#JHFsx6hQA#{ZuLbArVfwBux-!+PZi7B`FJ=Q<{iizN{93f2QB#7S|A zc%G+ONV8? z$=PLbA9nipi&qmn=>hSecnwO+hsA5f>%=2ODt?1_qxcc=Ch=zR7L-+Q6K@xfig$>2 zig#fy_io}Czn4ge?-w5sKPG-$d{BHy{Dk;P@l)c%;-|%9p#Gl~9}z!CtmDVUN6CBn z3*zJA6XKKNQ`jQ@lK5ruY4L=3QhbIP`>$YW{HrSa0CR`m5KoKGiO-8Kh~E^yC4O7{ zj`*VZUGXLHd*XkHFN@z7|5N;d_(SnW;*W7A`4jP{;w$3M#8<`F#Gi}55MLMn3*EzC ziT^GBTKpeolHVXg$N$5E@NdQ6iN6>BfG_Ajif^Ks`j+^%_-FAi*f)F!eeu7G{}A65 zJK`Cs2mtjcMg=%XDZeQ~*O8%yus#u~BF4u7wMm&GVogS70i#3YZYs!OIU+}iQZ^<_ za$HWxNjW8_<&2z_2jm=)iw_agwu}YU5n@s;%A+p)iR5v)1VCDmSI86cq&y|Bl&1+v ze3d*aua?(fAbCz+E3YH-!g+bUe2ILiyg}Y5Z<0653-T6utGrF#PQIv@5q5u#hZS-wTSRlZHWT|O$`A>S$A zC4W@DTfRrWSH4faUw%OTnEY}1LHQy16Y?kJPstCHXE9Q38vi0gl*+i19Hq5O+y~TmGj^6aGHtN-lj$5y_0+qU5=~g!k+h=#1l}0Dh z-|XIMtKO=aTb72z=$Q4Imj~=_`)i$grBZ1aUTdS*HiD~Wx6^MspWQJU4bx98cD=3l za`j?cwo!y)Y>$p2(S~t6vr&eEEi?r)T zt=z7+>H2m%x^GXld9BlJ>kZ!}(`+_$tzz()RUbbQci)N6*d4)OXFRaVzMJ)_a~(E+@|E{SdFjfP=s z)oOXOZs`%WO`Rw2RP|0R#9pm#RTZtMGxVmh9bntPgDP2ehlcVsxMZ~%>2G#lxo&Q+ zgEIoEBO8snWd|$Wo<&iwSy3=Y%c$BkhtV+G{+e#BSD{+}s@Z|y3`1)edaK>7_|yef zFKn&XJGNDCRl1FhkX3KC8@)=m-mv}9nr>5Z=-FY__HV80wxze*8jW2w>n&fCk=kvB zdu1R=rQXtQvlB7fcD+?@n$W+|@hf8Do$au(-R5N5s99FS$17f{R-$Ye=|I17wb8A_ zs~rPE-Za$R)b(<0EwHw>OIoT)^ctZrBM4W7(t=j;udDY$0X<+iEDT4;-t zRONbk%V+7UdZ+HIu6LLfXseLGs=4juDLZ;0fo>M=Ci_sQKC2MM$2Q=)(k&1ST`VfPt&Yzhv^Kv zJOFdmhErWw;k&BSycvpjT*WJ@X=lm?Ul+E#r_(4CAihD7;AO< zyrXTkxo^|*8LiEFNB6END%G6N@|uqhs~KjbzZo=<-)iY?7=j($EtJ<3WySV(`)nro z>{t!aV3u8mRTv#_&xAY!_PWtD>K0>vA9Lju890Mi^udA{gWh|)W=D^%b_~_QH9qua z+ix2ULvcxe1*WHtc-Y(Y7`D~()SI=6#-7pW^!$oot5g`Wx^!0C+=6U){k^Vg8iw6% z$M;uUhO@-`$3{MR? zpvI4fZ7=AMP{rtUdRnDnuB{mz`rO%;EAdJfLN#GnYW#F;BdAysY=j03I%Hy1^~P?o ziO38)N1gf9YR^|~Q+va&q?l@rV6|)84P&)#t!uS1Encp{rXluT&0N#qY8#MZ1a@7w z^+wsO!Ynk0Q*}5`aV$iS;j5WdB(vJUD+O6qdev2K7!SI$k2LQaRcvKhe7CJYTr)o69$9ViNG$6 zvR+wXxH|3UT8`>qKwE+_FUNYfF@{$#}w2MW28%7V9 z5!wJ8fE4K3PGn!XyrD6PRJ89=65P}1t=d`>dET;34YmuxS^hrzEjPUsI(DF0uXapD z+irM>uUWs`ZPk4+Qln#P40XkiH8m2;mn?Uy-E_CCD?+U<8*Ra9)us;)Qc+aU|esjfp5^;Xz2 zI-7MyvjSS0h2-nhw~@w*0k0$IG^=gs8+tp)2|XGO7`Y1;dd-U2V28Fwx;MKGgB?bw zN$pA;z*E`{Bf86sz>EwV4}!Df?IJwv5G~n((NbkkgFa~en!jsV-BwFq_igGrV$8c) zSLZu|!M)kqjO|Lx0quCV)|*u;zK65Qj<^L-0v>%m#-g#E?r*@ObQRK+w$vMn=O`Gf z_rl1_y&d;zqvuh*={Bu8m`1PKVZCdcH1TSE+vs>K#G`k!Yg|%z(ot3U6f?3-uK^P1 zB%Z@5R~!18k}1@SfP??}cvXE`-?AzSUGD+ldbF^Pn*TfMQTHV92vxZ(Hv6dOL7$myuG{!98l+HVw}u9$-IEggjEa zoOl-_lqI1n`Rf~zhw+&xA`?`d$Dif$Qxg*?rg8i{4tyAnV^l>We4 zL+k|5MW)PnnV1tpMv|dq-f{+#`4ieAUMVp(eBp)9)bo z!e)c9Ke#5o%QO_MV1m=~Sjek5bOuX;i|`l-7iZoPbg9%v6(=w3hm)Gm-T_5$Up~p>lky^QD*!8?#g;sfZp3Gvf zR!#5-4{y{WKsK5Q+1WASCj${%t{6SDRda*N)2nKhV)e?VAh6fyXHTy?J5J zCD0{}55H;{y>N$19qhu?j&WOKjQT7$C0aQ+6C|mg5L}ad0&O0 ztJZ8)~@-Ej$a@f644YKVu znX8(u_?~89_Y_zKkEdvtsjRPN7!2W%nm5pCYkIX8+(p)U&(rBzC=cozwz=W&wk!md vwXT$%co3ig6_mpKtDqBV&yDxH#9C`lJKA3h`qPc+?{LiZXNgT~uCCFgi|UImcLi~A z01yBG05X09!2KJ6;i`dTfaU(p{@)`muKLddG5&jj^AFs(SmZ+qQ8Dp`^F#mJ5|Kk6=p)i8_jES9*<3HC90D#B<0ALT7bQkv)M$Z2n80fzo$p85H0f1Q8 zdYb=pumB)QMgY)$@w;+1sim2bDF8^0_g~Jxbph;{KMdoR|KvaSuO2}34^mKekS9w! z7mt4~`Ck)$000EEULbg%t%J$GJVn%h`-cCAI90o~osowl07xbKUmd|e2!Uxq6zq-c z%>KFVf3-;e_791Q>7I9VaCQLzsm%ibaFhT5>gTyqVVp;{iJ_sPDIhRwqf$WV$!?(0 zm{JcKAbJFj_^-WxtHJ&Q{U5;pA`qa#f8&4s0sjN=U#*eP3}-+o@KxK=Dn^s^65&5A}$L&D;RJ> z^xl2_dh0jA6z~0IG>XmC6Z7V8-=G^e#uAD|vs%(m>4vk7v19HYv~^@&5l+6~(ivA- z9*SQU(j0wh1y)nc_C#%$kG?7NX(>>0;ms{oHgV?Dis^}(_F$Sj;QkP#JHyuPpY{tx zV9thfq^3J+>rLe5n8YXfcjD)Xl&AJ(u~KeQnrTjTn%qO_bprgmD*U*Rl#IAniNc4O z;B2@g=~<5vzDH3HO*c&s@-2PcVAj#j)w73ycf#+4z3a9&ov*epzQ6jv`}Qu%z8!oY zQhu{bf|CSg2zk~st>d|XUF2(ws6}`Q(kUxch_4i@SE^B$?5f;Wxvf;dR}4{C#fF#} zd9EY3hUyu)r^Ee@fG#XNPdslte<>%LEu4C zh{PLBa3Jpku{Vmh9;x#S#(ogBc0|LGjok!={Sdi&L^?YR;Yha|;&xPv6H2B5bIb@S zb{I)Be26jj-4T9v5Q`HG#1T1G7`!*2t^n9RNN3-iGAzpwJbAz+9hzehH650t-&GNs z%#ltu*v1f87fxfq0}~=`sDu%Hw10#VTbyi`OjQ^;yIf9{j2gu`hafvT$qk-6j}vcJ z-y*GPXXBLjYMEy$$GU8i%DHqyi^t@)Nua)M!}Z11J5bM(;?IFwubt*u&G=DpM{3F~W8;cpg`7Fm-Mw|Xy&CgjLDf{+Y4qa-Q z#%>b_vM-%AZw+GlGJGdJvn^eM+A`>YCE8*35+1E_X>{)F`PveDc zhi`{36U)k+b%~|O1b%1nTu}HN0E7%HEKEowNVsJfj5I2K$0(i+qYbi{*>XQ{kN@f6 z;Y(P@aDBGNZ`%Z3_b2z8xXNpprM^#NCj|{F0}E>mWAF7R782fhyCZEO>RfB~7@Z5= z6?pGOQniNd)6HQX4Fam*dMnzR)OK|ERT|RImjO~rS6B~u&{vsr?@J??sx~J(nUmtgqibzm-96}~ds6wHj;L>WWk4k5Lzf?`^=Q5It)}8@ z^JIw6FWRQYhuEi@qSwCPdoIptn6jyfzPALcVERK)JRhS+(7HbspJRVsNPf>_J!P^T z3K29jJ)y)9Hf@DXsN{ zj1`}{Evv+KF32OHq(sJW2&OM^xi_MCj5W1r8wnbm`nfx-Xrj-87N<{XXJ(iA@3+JI^rng{hKiL zCbx}2hHW-~PlB$M378sbyI6u=!oxUqCizIA5;XAEl(AMYLMim@TP#5`EYegjQ)sdp zDRIIX6B1G}Bk{Evbs#S3$a&^Bc)@!K)*SW8%xYqc~}c`Nz^|mm(s2f%C?& zR0J`u9Q6}KdCO0)OzmbJ_9sSRZ{c`of)%)s+h(*uQ>43G^VD;rI!y}jGV<|XI}P~K zg=I~wdt)o&C|A`C8dD1l54kMOTII3>7%#9(lAKSFCzU6%+TmYtar1c`ben?kLGu27 zAN?ylWy327yw5dd`n=D<_Z1qYLuJtv@;RQDRPuptei+}7lO@?eO$X*T@;83@trDE{ z_r#00t`MdGR*}PEkg?J&Dxeia$>+3vyZc6f>6m0ldbw7S9jxkLIurr2b-www_)*^*I?O!f<$vDNGq0bNzTvJqPAY=tB!?Fw0sXjcHI#7$Ga9!rG8C$s~emP zOUM+E`CwJ*z(ey}+L#9|Dal#jLWCLNn6bJE`^KrS{OVP~3 z#AqBFzgKQRG|+)3#|iFdYwf)U>OSoW4Py{hemM(%-lc_HG`&ui^@bce@RhVSMrFD_ z-{@s&&|#dR6VO(wyRzwR)O(D z<(#KXF@G#gW=2uMC|Gg)zO-`-yfLpX!56;LPK&+2W}P3|oW2Xs(yu@3j!t46HjIdoqHmlL&%WsdNl8^^fOT1(VVl#pwRf~< z>}nh{mi@x*MaVgM(1pzonh`i3Zw6;I!(#*&H0+lZjj!TYE#3R$zA*Gfmlbx~`*~;f ztzV%hMV&V727Z`xUfa>pL7MT2vc>DQwKKQ7bAd|ZyfV8hWRx@8fN%w4`4e?6CYhld zb<~-#6BEWjON6P58dFSFPm6=y6P?cb?7;2YiKj{(kia%W>vhMP>eGdt%O8;JR>F=p zX=z-|ti{wgQr+>4bKCOW&4kYfm!ZEvkX2F2jJNyA+^llYxeauKIR>XG6V@aMs!u3> zR8GgpEwkQ+5?qb2|2$8|njei%RWTycNP8bu-V~jc(@&!Kj-e~jRDo0ADKQ(TmMB|b z2+ypN5qKOUBhH$Imxu3QZedf3TGwj5SuAj*aNd%tgXv&yF3qykkwv@~(><2u%23ql zYSeIZN|ynFU#zWFm2#asVLDWJLe*%2K4iP@r^hPdkvlEAQCbJHoYh{qTfLT5p?fHb z_}k%F7juRZi&S9%=rM?wA{n5LqRzfRl`oS-3Odf2u3)`NfNr>X=zCbp7qytBHVxnS^A z+xTrnh;F%j-ZmR1CayR>vjpkBIxrSU1Uc;NIdFQ!0S`gIe5-{|@h+V}j=g?33);&F ziGFJYfPxP)p!~=^C~!RT$W7pa9K(#_3P?D3$@3i=alX3zl9AcU{=LPP#1vPEXu z_1XJHX_Axn#D{!IyhL4U@kO^>6H%seC1r}9dzfmg;ct5c%cl2m5TaULhkJQJM-+Ga zGoP&Q#J!pa=D+a`K>e{nz}6(O0)}tcF}a3VgCqN|fYAROhnJE50@o0&fU_3yL^tJ7 z-e;5>(Yec{lna{I?+Rz=r6o8+$$$)^0ej#J7|%N*@NZhnIontd>{OCBbB0<#3}=_W zCN1`TgFC>LiqriPf`}#H0sk3m&E@y|T3;g?nB|NWyzPzN1wFa9iXczUfS@kDhc2vU zeG3VKX~qR!Q9p>@Jsd`6$k33}}g<_C6Q>Ol0^!NWa^URPyQ)&#%6>i;GrV@O;?zv1wn z-?*6MCftT>Ete5TiX{ls$%!bl=$Y%XQMaST60KtpTBeB2xE03|1s0gcV^CHz_@6ppA zMsX+oHUQRSnoDp`47UCdjx?zTqdb<~ba~vb+&>r09%LWQL61h7Q7&&Fd{Sr6d+*bq zL1n)Rre9;s-$VHeC{jjsD@0j*$lMc&l##IzDijnMuxEyvAFx^%%aHbDC5Gp4Ki)0M zRZ2NlSVRu!h)ylO)mpY<*h-1zy?Kg@^p#&egVE`n5~{eI3IEfPV*JSHgu8Dr;L+^_Rqv7E z53kZ$HPJ>L8m5i0N!a=hWCL4~h_ zr1LhlzLdDkbG2E5y47A%G2Pn zAZQ!)CL^&lK&)k?`ifo7hL)g$x70B57mDycQ3eNE1*Zuj93&bN02f$DTad9XAXg?C z*9~+5Rd!&W6(zJagilO`l=e|n11uLy9+Y2ajXCGR2R|2?j-NW5*b1^R8KeAWQWQ0( zT3!yeWtvmcTpV91g|)g!Rv!gekZO45lA7ThnmCjY8n{K0ato8He*ulS(r7e^<}X(O zTjCn)%m6m4X1?l!>d^iIe(9dka8s>}D}VQM8+=ts;>mYfLC?M1PJ|a-!%sJ>3fbDW?oZ1w z{+RKLik`;Lvyh3I0+KIPN~D=$AuNMpwG2m5HG5wz+fFJImx0*(j>DEN z^-K%eScT!=A4|-GfudcrKf6#0d|#2#o=_f^xjbI_Z7~^sJgN`MS-RG$`4!;sc88yQ zrQyt{yB1Ca$FLz2x%?SUGKhiaC9e6pX&8q0DLFu~k=0_2Na%1x=hH6z-{#Y~ar^&*-j1 zNSAJfS^zI1b4`&!`3w!#2#H4EEGDr|^IJoe87ytN2vsY0QZjs%+JxTwZ;2)N1>7M? zB-Ht@*6q){+Zu2J?}{|l_P*9KEwrvt5fvQ0G``1rw0wmr4$;@y?;7QLpm+lI%qnCg z?jS&Kp4O6c?svqC%k`C3a&lE6;Pv@y(U33UmhS<@lcBM&BI+s9k^=FW1o<;)+ahbf zAP#~fz!|cQKB$^&W)SFLNIqeLj`&KALMl8RFpPsUVu@UYAWVV69XSWo{HjAC7jpX9 zJTnc7``!6UPOO0&AC}fuY*a$q$}0o=rih8pOI7m+t)^VJJ84xcn1blpI65W4XO<^| zv8ZS$wewkHDoZRcb?bbc#2e6j*IXO@N)9F>2@#3f=iI)?=D;Xrw6f}>`DZV5ld=v{ zJ7k1d1i&(6(*sTM81Z^0*2EJtBY0CKln*2(2>&P>qJy{tn3GtO4xD{9w`BKI5U+d? zPp8T=Si=I5zL6)mE6J&6YDc?1G-3sO4EGjE5sW8vH*W(?wNc(yVsd@{TwW?c!FzL$ zWuaRkelCi#jCZznDMP#ZR;W(wm4gO{>z4-*5*1FPS`1M^_E$Er8fbX!^HFP%D#pUzD65eGc8wB zemSZ7aC%7yU+YB&%|TFe&DC(#$~T#+L5*wG7KbXWk+G8!WJ179Am9od3OL=kEowTC znr?;W#bJa6dF3;oWI-fMGy_EpEwQm$27nd^xD$LKy&^<0( zd`mY{%vsBtIc_kIMvI`oouYNCAXFIPR`M~ZQUG2*@jl3KAiHQfyBXok`F7Vo!W>00>V0y)Mn5nH=ZXR>Pgn6*6z*1cV%BOfto?mLSZMK~*oxJ(&;J-qdW0l)d{~Ye4EuW zv8&^I8!2{*#C#o%4`qZ(CBi=rbSHnxmh-}s&N%d>K2_SqP(n5d#CD(guME)gYpWgU z>^OA2&!ZvSjx87jGjgKM0Ip(dx%J9L5Ehniu3V)spa@M6_F{=rJp&Hq1yMJbj zCUS#daPmBDik3H*VyYvXxz+>?!$FW#oV!^)JzP-KML6`?-`rVNVGiAc+61Bp6&r zRn9y1>=VX`*@pJVEaEp@CE)iO%P7m`cK*(No?L-QLa9_MGZV9s^E497peR>tn2=n|se&e$Q`5vvi8-P|Md z+EjZ*UQhxrnK=4K4g)TfFZdxp&yIVZa$(&fTtmCkItI+zN9AdHGF(6-|uFMHrzGbCAv$Ea!35W29)8v5-l>c9VIE@~U(6 ztDf`k719ej*mv~129?D^psy&_ybZdGds@4EBh3DoeYZLkOmly2yxg?Bka?@3fJVM8 zRHUp_baEYI2uQjXfUn7spocE^+fu>W!dnr`0$H@%u^H7$sCU#N@P+n9Zcw5WPGUX= zTO5f%=6flwfStCBmp>gos+t=-!=>E&}68?6>W{enl~d+$y>O z(Vqe^qWmLmXCdCzLcC&u&Mw?lqCAc{Gz+)lkR_M?-jTi>Y{}&mEttP9%rI}ho)=|h zWt}(-Ds+5J@x2k=_V@XH*p(^t{TVX}X;>;7{W^!m;5X>}9$K76M+>?&yOBwtDK zf>kF?h9_gd>n+O8kuH-X?zhNLQ1Bb^?>=nkT~=(Za^cm8v5#%1e@SDEJ=~Q1!sfN zM}J>PON^>*@K>=Lu$!uF0{`u@Ulex0Fs;y>jw=zyhV9ip8WXVt9zUCFik&G<%CAwx{a5451JxFH3vmI`tU^ACWy}TTS&FXl2d`m?MVyIaKBmY!I8vSB zXhH{U_#}1@una(1#|h#&KQMIET=N7)QX}^#+7T8nG+KnTZjkfE(i)_yC88P48QB!+ z-6Ck^U-HppN@9#XroX_eG%plTOk~?!uCHJmLUyNcrO1J#ilV?2zH*hX zt?JY?UX16TWrZ>57|#mI8p$J>*Ah3vQ)fs%FdLLeGCyVrOZ7Jki-M&Al!l_2Q4wqc zmu+w&14W@Zw<;s@bI;7IDK$wYUkksyLVu#?*=mJ=(K8wl5&le~<-b}4?6T-a=@{m! z4rfCREtvZ8y_v}N%MEoAx?{86Gh#A&!&@4_t^x-}X0f@YURF;>%mRb?o6wr1Gg_+6 zvNpLBaJv}PYQ^hxPHD)x3S$_FZg)=L#uDEW*h|;;2Sw7-q>q7S#`h2}%SBmF(yLX- zy=9E&hi=)$OijXaQ-UXXAI|99@-D7pB8&*K6_yJ3)XYTz4}ybHAK*0(=me)3)8Ly88#A|eEk+o4L2w}#_ zBo+b`lR*>iNw9=Tv3i3^_lvO%iead#22?k6C%$@~GXvBh2jbS*pTyNVd8K zc{h+oX_keY0#1yMMx*My)K>MWnWqxaXBxobo)Ih;sM^=q zg|`PnzkTsqSU<$e>IZ`9e7;~wsgQI-qZ#am)$--|+WXgm_ce2`&!@AFb{bEDq5F)_ z`Fv_65xeut>0o(r_ZtT0iea0^ttsV}`?HhJ4hi0JOGV}9$$p+m1!m{B+TvbKw%vU=;;R*8aPAP`<}3dcPUmvU0~lz zYB*i5Z_B%YcZGgoTeRv;GQdFSh2f9s=^Oz!E7D1-LN@(qpQ?csmHh6dCfja;4Tmq| zmds#9MWWI71HAg*_|H@(vAOAP&Gd5FXpQRbDtQ@cQI$>H&HPHjF!Xd%YuKTj!vZWw zNjt_tm}aS?WabgT-3BW*V?d4<5;zG3!iJmfU&}wc&qr~fYmqa$zi{zvX2>9tMxtNK zpK5Vtd0U=w%$3$+BG0@UP1}4V{$AM^E!f$P=6jzQ==Qn)Ih{I^H7jfmK0Wkc3|~N# zRH*enuIMAuu8?#A80W4vl1+Hp^=Q<+`ji&1F+>;OIZpX6bSUx3P}Z1Zw%4660KzrH z47LTuIkxy|xNYI1ME>IXpCul(r>?lzRakzx=ydgFxGmX?0oNZ^mh<+Zkt?6 zHlLd}#blr2O=5(D%eHQ?l39Z=c9?t98Z0rgh*xojdBu3O=}1V_^FJch-C0y{ADvuw zWEXjEwmR5vsi&W8ZhydgAI!(fhMi{sJ(#8s^$$=oyzQCB!bX)vRO`ML(<@c;dL*lo zs_}WKSd1=`R#$g>idTZnZTlQ)&#j{AYkhd+MFTGK#zn~<&2|ZyXI+EY)D|z2>9rFh z>ADDU=h0L$8$>0T>P=F@4ix8OF&3x|AsAvD0H|h#SlG`=nB@1+H-#%W=M!<~Ne>rG zPmvbUQ19R_M`y`R4@~b*XJ#)$4dH0DadU-J{sO^_kEQ-RwvJ(fG#z<7Q$2B?jIUCH zq_~nk2&Kx|Px%daKVKWOtQYl!2$Hq=tZdVG-A-eS8M}zl%mIIxw~X6FwBQBPm-$9- z{I}sfOK=-ljy0!C6JXzcO~$&8@ElQB= z^U5{`E9ZVIzac&d08XTtVc7eDX9M3(nC7~r{R2D?^i%j|rG*_TTentzsAV#AojNS- zzv0aA0l5w+q>$k~+!liH$Gz>|afH_!bkPxQe~?D_+9I&-58#xxJv6&x zADth&CmpKqzcxe14H}6caniPfM&@dzl}jG5hIv&qzs`YAwCbt)UXaiYa)@qqDNMg} zoR?CpaVCC*Jw1Q?>7{Ph>7=^$fE2GPT&36Y3W0qS$#QWQX7dWd7Ff1Hm#igC_uJ`) zcaW1Zix5YVu}9xZXHS=ZIkD%>==0;3zekAcb*LI-r&Du~Ctj>Z3#0loCaN-CgD^Zx z-l~dIWQj0{Ib1z}FYWvmNx$`rj zO85Mw!8Q+Fxc6x+6~+D1hgm^`vx2|VYYE+umx>h@1ZXDrtTy*bBu+Mi_I_f5*8JE! zuQ!8!F6IkFI7%qWg_|u{AEHV5nsPLGn-+UscWMCAYIv8*4TPVni`S zlNmlxpdW0Oa)j0&fC`PF*lZGpuf*2I9lkahbWoy%vnM(i{hCyn!!s%}H4h`mFO!7g z&#GdS?Ppv})Doawaila8LpE*6ANAaeZq$YG_U*dRYr+CKbtu~hHP0hAghcG62x<*Z zBCM_E$0r-{n?cK?FwBiroYp2~^67SQ)N#E8p&qr_Zi(@xG>aQ;R5qvC@dTb;CNd8j z0UkILlB&a28kw?IDnNg~1pEc^K*8!##VuUS;c`7+)9#_qY3z7oG><)%52wQ4Us2Ex z4;Z3oAd$(94c%NEy!P@DsAUBa-A{LT^`+zY&DFZ{-&#v1Fq4snqd-f&C~3q1`}vQ= zDe)CjT4I=>q-2m7&;H?w!Y;--tpyLfE_V5qlseX)kUhRP7!G=!bjXc61KRpZ0Xd4( zG#iXZ8G+?qftm+sYTzq{v@$#JxM)hLl>P>)NW4;wqC7{vQ29AwtYohQlQ?m&qrgfAX%jaiN8!#{#D}r^)j$f7BgyW??GB zwzU~&r*bnrH#eD|fI3-nc*Q&v)oCPGM75G=aoR9t(fq6E^`9hQms(^_|`Q7Whu0p=Q5l(vl(E9*1yGOk1Kx3`idyBEmC8GnKiBW zod1g{`B|AzzeowEWb@{Z2f7TRJt0|z>gy$X4#m3N|v_8ua2PM zeg48NGW{Sat0I@JawUAkT{AP5eh_d zF?zH&tHMZWx%vo}-7bLA{(NVM)u7OyT>&3<|M3kz-G>deGeC(xNyAqR1-7Qp%e?%a zk&8)C4^A&+WQ(_y>oF|={hSIYPK`KUPfJF_2Ll4L2JB{DqCe*oV!FURNPqq)wO#I9 zX@9a-K=&d!(N{{Aty4)?F!6HG475kxW_A6NL(!insK5->(obuBq?W9rgZ}A=H9Gr3 zm{j(UNBf$o()g6mA{=@G!8?m=5hm%LL%M!Js)ox1?J;&K9sQF7lr2kmq=`x?T61`D zly%+SOs75hQCA-^Fu)K-SNI+iy$5Y35eM#eYsI>U)-wOHi+e;a`pliE&>T-S%7X)P zGBms)Z?sslvr1wn_EtsV7oT_Ix~j)LfmwotWEz~>Ply-libG{_08{#JJj=Nig>YVj z_Xb-lrQ`PBR%u0BNZUJtjcA)wCTk>0%z}Q`(K{zV2;Q{9+qL9G<+9T*s1gNxVhr{* zA3x8Kl)coW%y2uS2h3h>HqQnS1lgJNh)nes)&!hMAIx9Q24WU~Fl}0GI83^vgc&1K z@Q4VWFFW`_!}j?R0I(tWtywn$q^3M_jWT>?R0z**?^!4ZK2t@5&*#DWs8bAgpfQj} zEW&L1dix8>}G9t#3vw?^~=!Xku zt$cdDzm)P}MnX;xI~XT8(4ygJVsq|=uCM`NW+}7}JxxaJaF)B+LJoR`#|G}8DsbqG zd7yCBSHcWQmJeDYSaBvgQd7hniWUl)e{>`WBv}-w+Jb4|c82uJI9uKC{Y{dM$?5pi zXJ-L`>0jH+Gg}~ry(wcI#miA+Ku|2OP9UOXT5&5U;b=hsfxMVu%Y7>ac|Mg5=12=8 zoUQi(oMB7bbqBn8DNok{e&^Zv?waKTU*?fzWvxIBc4#Fx{KpKO^Sl#%$4#fqs{NNq zC35-%@rp-6FSa~vh&A?Pw&pW0=^A=ckasOlbNGi>{?O0#-C2fSPe!5B)8C@8N?LK~ z;WY6K#2^%p^<`x}n4C|9bKGdKM=`xYy~oJfmOnAjDtk7a?6g|M-`XtHh`&8HO+`WU z78I~ZkK9<iQ6Tjjs@Dw>iUWdtvx3W`FhhJ&<-j z`S!Iv?`ddoA$>gAoX;qdCo$@suh682q9X#Pr`P9YF|hnSq$ULpD#*7}=_M^;krA;glCbjK`#63j4d~PjcEb`X4sfGcpgC1&qr%Qdliwus zKC)ArRKQACi7OZiDt+OV(lDsx`xdo7dw+|0$kt7?J?v$apb>?!O07_nQU8!^3vsZ` zc(qi^IIuJt$Dq+`)2XTc6*escSSgs7)l#o`=tp zX?-&5%N-#yS0GsIF}~18Ct{(ux*(YgNr`HC(B&sEUk*Z@AI|X0PBTk~PR$9z06#af z&lJK52}NjaJGsZZh&=H@snM0c<@k$JQ`viL(Aes=a3jG8x>ixTT-}bhHs;lZP_n`a zHS@OF7Ih+E=q9X(IDMIx7)Qz+p*{}_ST8~;4e}t3uL}6wy%^SkLyGxc2N7H!+o~-h ziK$guL{}G$GrE&Np*a&Q@0~ysLDHX^1hxLgJgv;uCf0%-CBLiAYNzNxaLPN?Kkl9I z&HJRek=X77rde1(&6G&jyv!cF!V=-OLs)_lV*(77xy7p(r&0?P+ zJ*VJqD=WuHeadg$mElr@h>eDc343Kwh=CkmXL!b^E16E&;4ote91$@pyVETMmXE;Zz0^<m zTz$Bhl{7Nd6O2Z9*={Jv^sitM}Bx>v7tzrBOeV^Ged%G zsALOk9zj?WZLwxJO6NXFG1A1Hcz{}D%`s-40P~b0TVe_0bkAbqa+#|!M8vMsZGz+F z#Kg41C_WC3_jL<7SV{fBRKJ90wWXsE*#phavf7OyFdj#CJmR?#0;OL|6hG-FHl5`@uwB}W?x z#6O0iNme#U(ofL*_!ZzNWL;+Ac2l&CxBb0+)zQWn)6B%WMu8Eg#Y7C%C0k+pcx21x z-HDpwOQATfIrid|({5FKC6dU$lnPEHC&i%_@Udlz#eB3pACfhjKaTNf`z>NI53pn1 zQ7;T4Q$dxZYN1D>i6P?nI$wcj^$o!LHh`gtru0iS+Cd zNA*=^V%15E?yN(;P!lTm^zv8~HaP#ggfp)qx{IA=W(^(q?%?(E&Er~0!7j9Q$VVJt zy3Ptb#1xAsgYI-qrq~r-;R#J{n-gk+y%c#k8BiEbT+m&78EK~^l=M_x(lL2@dU}>u zxs5(4P{0)d3$V%y`nw1Bee1+kJ3}`A)724FG4cZYDt;qpiT+1ot%zp<&YlS z5%+;I{K*ok?H*KwUyQBs5ZqP+mKhN zwBEtaZTw+#kW(N4%K1iYx_AI}n}{~}V|ktL2-5|_jiQ!qjER>w0G40PJiRG9WfRB$ zMg!oaC44>7&m17Fp-8ubI|5NCl@7dX3ePbAp*fUknr;qb3oNJ{-Q30#{w%?JKI_sc zm_JRw_zYxm*V`5ziq~I=E6xWTX$9E>gk>35s+~>|XfpC%Sox7Z+z(35UF-FCliTsv z8dlYs!(1(8WZkITyfRAjPn+6EAeTeYfygdIb##W&RYtaQX*@#r*HS@fuMD%lLe=PsUc9X-b3fku|Z0T7XQ{Rcok zvd(jxn@=uPcLYdr3iVK*VWO!Kk!Gz%5t(WMe8?HZ0SK&1 z810c=VcyZ7Xg5jQ7>ngf;;w)zlhy`^dAB$)NKdOni$J6GP2PDBfI@Blt|3qv4|uVo z$?-mMboIsv$D^wR;8WeIHgRM8ek7xKAz>k*^E47-OLn%2CiS5m5KWBQ?#VCt zkw6kk>W71Ck_+eVIg)??XJ()1b^BFzIx=5tWcwz<5c(EPwO;D0(rOK{k#UoiiK8%g z$r}XpVI9!KAs_LyVl0Gk6#4CK_DClL1Oii%MM5ZD7MO6c#N;$^XS zHc_HX;K%PZ{e+sd)5lB`omwQz_im%lSd7!xW0Ji_GJa>4@Gd944Yj(p+Xoo2xn;+a z+TYZ93w$DtPHvD0r*{VB`S{S9>}E?Pz8@_)z|RJPpX92wNE<7*5ai|RNnao(jV^H) zQDC`iT|Oz?mm*`&IQU-YJ7U^C-P%+us_!PsGB?u34Yli7Lk!qXN)HmfD)#8k=T7Nt zy2g-OO7LXA+QSh&e(T`cX+KPgV;f1C>upAFxmY?0H*y%2a$H^w#yQDmCaTnMWZ_C9Wt z>lQ&S!bB^Gl-wtnK8ucR-I;_smnza_*DENzfR37*mqE+QCx%Mx$E8696)3JpMNt`B zvv`1Q?}P3eLE{v)z1vKY&fw`?BhLyOx!2mYpsy?U$7W?AmdA)KhPb*kXW`r)V*3^R zO?`whx%X{30|Wtm&Am9v^ve4h)y!#a8m}iW|Cd|q^U#y+70;fL#kD_ms73Gwivr#j zXI?vfQoz&G*SAC)iaV^v1@NJLo;OktMh|4WcV^bn3t-oe_F3M3?6)05q|D5oo;jx` zy7JDvsL|y}i9RH?2MZiFFTuqcY}!&zcBtqqtl+_X%*2zpqH)$QI%z(1DJjlA4JGUa zWC+_BLT)WM`>w-8n=a*zgl4P4O>GjOj2lfO`PadrmCa^r-x|5dmifeb!X>>@NpnBG zGnA3ePH5~EK4A8SaUOC5m*ZgoTmJgJI4g8L5o823L?XaoGjP^T3b&|w&)Aj<*` zAwKcbqH%l`)GFPUsBRFA3^auD$thm0wjWEmoUU3GlkekJaoiUy+GT(S9Gupi+8o<{xdV;$ z<#~g=s$*`s|59)!*v~!SAN0-k&iy2QHT!ob$`MLKB-iXK`8|nbv`2(Ayaf^8Jfp=4 zzZU8;c;oN8ghqr9x8#}>E_S>K;N+kFb=mNhf#@XYY|-o5pfEHny2BYk)pR=yl^ygJ zo-slZUBnoGp&}3=bXNxNB_P$Kl)ORg|JCV;)9nf-c3=o5Ar;qg?OpAKN(sTiMkl0= z0A;JUg;z+l3%{-`&Id=9$u9VSi@cGt6{bNLavC1o#?Q{h6++(CJul)c?2g<}Iq)Ul`4%erni4XePB&mPA@0q=MDM8Xq+v9#A9I&3ypR%vr89Gl@z{nNT&WIn z?eUtJNEQi$@pq1_htbs!7on>Kqc+#d5XE}o@zov6C!i5>rDTfvJoWiZe{pc8DmJGP z#@oQ}t}+V@XeaosM6ZqjRFc08yXyM^>(9OJ z&9ctON79;xz^^!+&d-j@uIDzEsnE0%gc`XWBtEB*{N0ZNZT_4nMiL{%IVbQnKu?;8 z(Xy+bKiQPfxTYBk z6CHcto$r&e-%jf{6ep~m&cMeSX)=P?b&gkr2?$PODxV7?gbTZ)d;>jM-UP2Q+YlWH z&IBj9Aik$d+h^@R{k|dI5l8FnJVwaMZ){4;(BcZAR&Fr_o*L_IT}NHMv)2R>bN!4w z2;zR_9_2eMKUPpT19aYJ@NX+*Z=mlMp z@oNJ92Q@&-zZjj}B$Ne7ED7%_38i<4CGi&^{e_ZPo-B*yd&)xj%QYSTK3zRqJ5t+K z{d8^XCG|+HuGYSEU@$n)eq7Tij(#9ftK;a!|Mq9- zqg!uy=|6A1A)~75*&5>E=PT9k!tq_zBena(+H|d{7>c0iN*<7;59u|f7w6K?;ltI7%xhu>1c*+8JMT0ZfSzKzgGKpt#+_lMKfEs z-*AJAjIDn>j?OMFK3uI%RI3lG>POSW1FCwkR(lxkhCYZFEUsU9>kwx{bTMl-iWnBz4Ci$j<^)SQMl3`6eW z0mgRl*^N$d&>E|b#r@*=ylyN_tS=(U>;}ZC9Br+h7`tS=x->aiiyQ510n~v;POgfe zZmoARtq|^#nyaO5!$*$OUVGi_S`bZ5PuBg(<>kq7L`9g1l2xc}u8i+#`nAdF$y!hx z8!M_ZAsN!y?YI;~*rea+7ByL1-i{&t9ds7G02(KkI_lHt_t+rmlC*STbJ~iKq2=?- z?nXNO`L$_(xc?5fzN_iAWM1WEs+%fXDWvB?5idD%F7IZVuDrXybU2iWKk-KN!m0iB zjfI+PYm<6O&jcpsXXN~zTV=O0W9fnBxR<$Zw$hmmdJBh^!bv3MmuC*&bn%{J`-XeB z?)01UFnihlFvIYtBn)1O>mPbX;U0#JXCV`(F?YkI?dYNPM^4SpzP3_&_|&OW2kt`i zgZJNA6x>Vb#QPP*Q$8!_#%8BNmr4>Z^EOC*4PyhQq5!HKfY@u-Pn>!D=H|2l`WV!x3^%h?w}2jRePEDd(~Qk;jN2>zL$nh9H`h@cj98%52ZRfFVsp zfp4T=7S5Y~yTFh5BtmCrW;Tq?Ggn`IX4BZ1nOQw@&5^VD0ebfCnaa#}z5|E5Uwm=v zJF6G0edgI-NG!?&ARp85p;vsi+^5@*n@Q@E@y?$$6Bhh|?mN1;ab#u-&>?90#Mt=b<3;pHc?nH$8Y&l6M=(0$J z(UwIp?>!$L3;cjZHn2mShKHs>U1_AlusBev!cH=1iYWwWrlF!Ci+Nz{wg5?)sLwV` z7%FN*J*^oHSEMf^c$#g)0MGa6pcjuL5*g`!3uLr~EPD^Ae{651_Hg4RRxn%Kl6J{( zd!s?0Ed>Kzj)x8yDs$|nV7O6|*cRgL2mL;qC()pvI-a4zqiUwxDgjqmMtmF5Wwy0g zknWn4LK{#Snd2rNqziC*!-!Y5&VGo1hS9Xl3FxIY8sJ@kYrA1d|MCZoV%TM_H3@i{ zNo8HIRO&idsv=ngg-!rIBM8)KnU>^3SEZZ3GOw6!sMSI-Zs^k=IhL~|RT6pTJv6B+ zinbZMfaBp&-Vqd0Mn2n3uB54!pv$SzhL`Z6KtfdFnYN+$k|P0n?@5Bji$s*S4od+q z5emgR)Ki2!&vyh%R5YDRU-2VvYGrcr7^$&RG05D05l|v8MG}80k7(#gY$NLW^`d4< zYzrfMPSh_uGJV;&0!p#ME1pU)&-+Etg{d-2P{tr4wu*>X4C-{SXjnEiLSo{6eOFj1+AKBG50T@D37Q)!4yq5})dQz0BfI1ADQG^vn? zl=76?k|?N%@Ukb_YRwQ7%$Crxowwm*J9|w5bT&XKh*`(6CLyt4x`L?I_J$4MBobCI zrJ_-*yEXt7%wt)@2u8C_t|hp8iD6D^-aFze_r>npltop@qv; zUwsVy!b9wNDKE?Uup&v7kfmDlxv9T?7h5O(E-2$Yj|#%0V&7NFvRqbt!}pP%hB9w` z?lD%#1u-=ipq54M5O*WUr+#;qA;}us#*;+-&d+#dA}?SoY-_P!!kuo|Sr&T0&C$@d z4|<=0U{r%L>H(up0|8MyTm*-nZ|XV{4Fk7Yw_e~pdF?!lUoez>N%AdI5S+ZD5sW^Y zO}f?EpdV&tYqibKVZPIXrgaNqA$ zo%H3j_geq8_FDh-mh?w{)2cZl3`{>``E z`sR;+L!a9{YZ$W?GZXnX|L_%l=j-l0aO|$unc0K)#Qu-3uy*Sw#uKxNotT#mjnW4# z95GI@%R>Y&nAf<3rV&MZTS(sjwWPYGQmEvEDK$*n)7j>)l@t%>6v9a@Oxe?!=1XpS z)A+74ty|u*a{ullFMa6vi3eZ&caDE5uo|LSj>c-$&52TStoGrjZylUlslEC9_WO2j zEZu+V_(Lx}a@E5l{FTsYf;_yY|0gc}N}tCFDd^AtoAqZ8`ByJJw|Ix~j)#{HB)yCEs;{gcNcJ-a4rr;$ zBhNqb2u`IB9@LVfB)A{$JDBRHVR5qh$jcvjw*;8!-<#iMoI`gjgKn^bpz));H*cOww?Ow7!rJf_#4BUnlbU zz)TunXl!pp^G>rVxj_)93&%3v%x&d6#xuLNMYqm)*^Q6S9iE#T%S@$zX=Z6@rgzV$ z=Em%N(pBdVKLxv($ln5QBMD-mv7;W^osOuf5`TOlz3g_AB`a-r-R1Py{QO}MDlc{q z%*-5c!>=EnQ{80F9-EKtVRG>^WRW}v2)>7Q8uYLNiL*sPdIP9x59^zZTNKA@1|dt+ ztc~b@@OpdbqlqFL#G~L#|FxX#NsP^~o@26|E zbf)Iyw&s*djI(zqKEF5$_=Td69~tyflZ=wsV;(U;$Vjjmu3)zMV1{BA)w9WBGFkk` zE4uL4XLioa?0h9}n_h3Ib&1;N8KnTlcng%Ei&yY*mOth zBQh_$3NOHyWXb?GbTVV);!Vw#&KsJwmB$Btl9S9+afu5Aov(O)akoeI(8g#$iLrBZ z$S*k2V`tAkmUR9oSsu4sUA4;@&&w8V)o`tea#Bf>3rXiSXCHg)>}#Cl#y>~JhO6nW zUP`-OrT{-QXRH`0j4SMa(F^2FiTxN|EW)FZDhZKW& zaz-k!#yssJl7?9x%;?h#4M&`;cU<$RwC-Bb^^w|gf7LCD((Q(nD~ZB_tW7^*S3(88dD?bN~3~&8KRF48JoQwg`YdgZQTTuUTVu$xvTo zd8R=O-QVsFo2nt=Vw!)M@+O|7Ed!8)bBP-U`Iobd&2o3*XyQ!bj>IF0HzeMc_(0;f z6Th4IYT_HnqBPuO^cNT{6qx$M%}m{fAJ1Xrxv`_TjAVREL}I>z5XXG`4c0+$l92+` zMZ_V!Nj7|j%PNw%Wj8ZqlmlEK=v3&%th_8|X9%E$?SHs+y&z&~^*DoZ6@-nUMQUt~ z^5&kt6PSY_9M%XWLf^h^}RTfOHvfJs?o3aoc5E zmhIvd8+t^r*bnw~os2tyk2Txg!FB-)uH4B@4}9zavgeAe6d8B?n|tp38z!{#m$rh_ zx$5$2@a3^HkmBRZgj&M5AOgncCD{EFwtZylrcZ6TBow{ojhN?-wUrw45+ErC=!PL9 z;u=1FpmNJ_$NXyPkHYavCKc7AO1r(gO%_Uvhga9{Npab)`3ELe&OAK!!-u9?rP_9l zXhCTK)`PX$FTd)e%^Lrk)l;QM8{_gT%-3JDzRY}WbkvqVf_}wODU?PJjOo~7XM7d0 z8-V>pse!3SAxjKp{H8=|K|5)o2W5_1#&|kL?ceHjTVXehF8{aS1#QVk2I3&{qZa)8 z9h~$5F$Q4}0=SHPq$iHx0Ii@E0;p`mf)=b2;ZglI>>vt!^5gCI@3`i57Lk*3&WJc? zx^|5>v7~SclJ6FDu#QAat6rA@++|g+hfdBBF^4Hkgw>c5{_PK*rXt-j=hwukvAJ?a^2{6N1J7+cjzK*T?8L07C1*T+qUxIE ztU{;=)<;eSb51fS6%~PnymFgy#G@Cz^59^Rjh1jRw=lkV;s*kWW&AhD{{sCRC2E+f z!?;o~C<^2O%az7QQ1?U}_v+yXAbK*tblrqeUpm=u?!H#$Z+!C2=gGO<)2+gu{KRlD zS=duJM1FbwMUS-h{+^9B7wrAYc(iu<>-m}V#L_2sOj~Bk%8=sDwQAQ+7Iz-B9EYn{ zibsm)cZY|Lzet!&%{BhMHdpefZcO}sW-2*&YkIw&x0B|kZu}l#Pt0}dK>y3rsIuw7 zM{4anscja48#Ea2Ez?#pA2%SHX-&=ghfUu%=L6e7gOxmsQ@v&3Np4t)%)nG7PB5y2 z?2~@+O*0eQuuHw%^u3hdsw`*z-ZwWMH~ppa`DIP^^zN>ig-FXt`Y_im#XJy&i=QXI zMn0KX2TSzc#2ayJ6OIiUu)oO~!xE5~4o9_`rNO8tGP0-&ERL;EWY_O5v*a3+Hi_3; zWLJ;On-1*pkPuNCYc)>n?KZ%6**T; zPRx499n?5eWFet-OC+Lcs{bU*&y(8C#}{gIdv`9j++1yHy6N$vN=aC2?Wl;#4@6&R zzv}K|3b8D;zjpNKTYZ<~F~ZK}ZQgYRO`tw6DjY8ex2g)yiFx~6Z8$g9Ua+_OE*svsmrc`%=W_A(7x{$S!JXzz<$6ASy8 zRBCM2#CYimnn!i-jWOuI3kK2-;~By-E2yGtC5zZ*{T+#s6AQCO(iYijgo3h{4y z*PW#E?g!sap1bwL#s(YH`FHX~@>l{33XK|7qsbu%TIPq$jlF{14Ee;OkUYnozIvsR z0eq}GmLlW>bu7q-N>5L^c9~`=4RTiL>@HH@cHfKFyvp==%Ly`a%}uIA*#A!3>eJ~c z@Hp`fj$YyKSL5-9S_As36tNM7#nshkS68n=KmW^~J#pgM(=V)*FqK$=C(pKHrRave z%k}R%j1wXrqUbGQwoz}0rga2!$~`2Xu1HZ#9I-+gEbdxjgTrhz<1?bfbu0OF$<2bo z4<4K1$*i^$5XM#KZSJs?f_X`BjkMbBR5y@=*tl9|oJ& zD!_3TslZ4s2Hn_z%Ny@w=19OtL9Yz0KZ|j=5 za(aB%grOO&hCRl;PN88Km7>V@U%@r3+w4fxOxcMv_g36E2#_!(dsKBbC&GQiHY<1W zE6hKT0bBjtXq;|D@6y`@<*2pbin&%^h+;mjI6be!AWV}J*}z>C);336-yxGH8(2=<15x~q(k7pN6+d<#8=d~)Gsmk%YcWm5EF$_o`q`tke zI6qmexL!pNP~NJB-VF9^%N)THHQjmN&8;2E1%|nJ3^_V3*OK|KjQ2FeOlfQhEFpu5 zuKFnaFuELV84Z~ZXK{Mu1C{}Xb^2tm?NkTZR`=Xf`SiP%CJ!y2Jh{AgdZBQ3c=fAZ zb@luW|B}v3UH^{ejyj<8wQYCaRoHuSdHLi@Wv2hC-+k2rYm@RQ-|$jxl3Elryx29= z_l8o1+*EtwKV9{%=oSCgocOm_{Mpx%e|C&)d-ZkoH_hk&Y~$bN{}8rxFFr^9fqWrx zI&m}TPPi797Q(onSmDYJ8=-&Ucejr&OJ54`S{dyi^w$a&XOV)Rvqg=?o5vpE;g;Xz z?}Sg5C(54`GD3Cqu4#%5*0Uytg5Xd-1FA=}^ctV#Yix~;pTHNq-Wq>B!~ex~>0B;- z-Cyv0@wee!Wbb>Blfy?IY@T0~dA`26fdB0xFRb$Xst|vU#?SwqK1v?PSb?g~GH?+T zRPuCzj4mQ}Pa_hTWF+3B2i*ymg(2v#&Ss6gkv)K2T|%Dg0-=uzr;!m+_y;*18X4uZ z01}WEzNuJA%gKm&BTOq~pa`eGq;h>^ z6{s4EFu{DU>?`57=3rDD{ zasA%TCVxnXE?G?T>X6-`wR^YqRc0VM-Ri@g-PM07gzGtG%>F-nyFXrMx#6QY3okJQ ztNu7fM$s*iQA{{Uu>fo^E~4Sci7JiQ(&ElhWxP>!2FySmh*wUMUk}RuY-8iU&1@e| zIHv~Nt}`{yR6L9Fe9{rb^~PXh9BdDK)U{fiC6qvK}hsjHnqp$P7sjl)vUP zjj%DhqdB=Ec2`b)18$jSXGFu$dE4;)-uie+4wXohgYkv&hhHCS4BjY8;Oa%evf6x<1qF_ z^4wZ^vG4fZT4r{~_?}!T@`xAiA!DjRrO@sjz4NHGR4J_-3c*m^`uZzfVk_?j9P}10@{X^7h+ilgYXB`%b;)<7?@2*JRc{bb+3sJ5+rNCGc*h;Z6JL8z=ce0l>ahB1 z|9eCKP1@+_%;6y{;O_Cdb>J;+z&!5wFkJ|Fk| z#ssOvMM9B;VwqyGqguCL0T5en1bNbc-{k8)pB`57Lrd@lYnZPL)4U%ErKK~soLMRf z8*iVO`1bV8eX$7BJ=qK`wvdiNpN>Y_lWj z-C`yx6>D`bT}hhhoe@=)uxhz`*6PGCq}ssLbEz@%Om=E{X;-@?9Ni;uU>EsT(A+k6 z2dDC~WKCsDPZn%K6j{uiPX|+}!ll}Rqx)G%+=ewE;=)c$Xn|~hp*LG(>^)^ukk~LC zX4NpZj&3Iqv1Zf^0XwF>HQfeeAJ4)i00aC7$aZ4brsv6`@rA8!?$wYNcmb2wcqHjE zccv!OrXCit4h@lVV6}*{EaoKHka;6%m%9o88|K<5rGz4xRPCuTA?v1ED&O7W0RN_3 zMxtl*41zhb;;bZV6XV4|CuC6*O-gAe8}`bV1L;`l>1bK%c37G)#qHQ&ClWSLRy(93b(FDw?4!Yi zJ?rRTteK1S87!S5dfCtxsj_{oc63l}r9yz_j%Z;_qa=PnAet`8~LP0ov?t^vBm5%*&1m%OVoMF{@u3rNyB~o&zu(2lK;4 zdwB*S&|P! zv@C9^GpMszBxnWD&RJa4*0iF(OR2hHO6?lmsZrH8a<*s|!hEA$wP7pIugxa4Wbwwu zWRBQ!Iu9*88drF`X}=(c=+`oP(-LR~LrS+ILnKqNKU1QP3OyKTs$&4Oil1^e9QH zjPXi@E;?>f=hUR*EK-;w@|uL4*Hn->$u$j1Bok%`0u?#aBg8W~k;(!Q+4$2RL67`+ z;tn=8>Bsak@u(LIzGIQGNK+4uqJ>Rb9JWAWW6>n^b2F-o9){MoI&72{41^K=DvOxI zl6!tT&oe?qc@gX2DST4%e0QvzpKyIoO>IuToRfw$dilFE@%H?(V!Ra!gqNNapaGK>> zAYh0l2@=N>-Bwgyq{%feU9|+amhsk-6!}FBQzJxHC5`Y}ItVzTyr2%vT|cX4W}_+g ze^#3!FKAPEKQQn1a+{(*r%hdvsdt8xRTprrM1QJj>CMd6mL*t(^G*56c13?~v%0d& zeMv$7Be=I5ePIJjXE)myCy8(m1@4N*CCES3wkYE}|5Nf|R-r0ESo|PdHB*vk7GTAr z;PQZeG$4cFrc>mrk|^G7so8418#+C2?bfs>sdmPG=|^7r(i2v#rf=W);Wana#@24F zlHZ^vzkXt{l5;9K#k_SbyUVu>r!$OBycAZKba}Y()K|{Ax2}~B#XLDY=(*2=oKLX) zg{#2+yAiV!I+28wh?n2cf*Z(=c==s!43SFl@*5c&kyY{XJ8~GXZb(5i#l(dRByr(&4?g%m9(srzzVo|x-SwS?8+Pxy@y1=dV?FXM=mQ@C z(~A$Ii8&D+_t)_J{AOq zE*5B4XeNo4*|V+vo+mf{%oIq}bX=e1Vn0U{@NCt@DR`<6CLT|`CGp&z{FXoqv{d%zyuQ$RW3p;s)G9!#;yFZM_cJQvTsrt|UJqkWz?lN|aLHuILMlk^oOI^qlY48oz23#Y^ zr0zM+!88GlYAZ@nk&B9AD~6OVl+%_~^s9w|DJgC>azsG-A_-D^8mjE1A_p+4Fs)0f zVWl@d>t;RKQq7|5N&a-cnB@aO?hVIvN9RO|SM;`^3g~av+nNJkT1UrlPyK*Bvr^i9 zM$FgBii5|O6+FHp7wdX=e7Zb-RLlpF%uSPP9RqNvBE7D7$aAOREKS*Df0(-#5kbkw z-mqlngHFF{$r7AtxmYKzO?eXsoX2*`X81rZiY&#}-k2)owht;G@j|MmzYgc66a`6y z=3NvO5hk!F6xr-6e|;g}%-ps&mFg@vPvjhn{n?p=Z<<)CJ_(A`_r_o7H>sf|b17De z)v>`e{CJ>f4Uqu@wA-{^yy;WFO}QfwKbBiRI2bd((XUl z*(a(xnamkM)-E=^QgQ8;wcC*?vho5QwDdD{5Tkmolt%+x{lTb+W;CJ>fb$)6HWkc( zJmu%}{>J<8lQd;AX2?P4W@)+a$ujUAY*?Q`r&p!((8$XiKB@Vi8Ih6&nNCq+|MHX{R)~- zqpt|RD)ly+f|&KnK4%DgcDfOcf?Fi&fJ8-dvY1pFhu(%92B}3e#DjN%z-}-}HR?BT z^>Bqq5hI%paa6$~*0ehs#O_Ulr`UEA7DMBBo#7WUgK!{x=q)JGg3Uk*l5ohMr zLw@dw_QsEv&dvYv($2-lmUk~rMLQ#jSU#wXnVsu9#_}0L%bAtxHr6&IXd9n~wvom< zd9@JbM?)N;cP6RWXhh?3BqOwfcwC7kRX$4udn~(9n}1;6!v_z&cs)wXh9unQ^k-+g z-C56+bSE%0*~mIZrXPIp1V(6J6{!5RhX}>96osP@S%f(;rc3{j52YY zD70F-OfDpnaAw)W$;3UNHxT!Pn~d>|-e}k$@V%(pABLJMi+C*|~ zG`g@<;<7M9@|;Ow&0x#W1Y@vcc|zB3BRdS96Rcd1=8KUbaQq|WEGKI!Nor=nmejN< zYo@MX^(3t0EIT%5n~Ka!PS#KZJ82-d4M~=CQQ){w6!Wx~vtTdA4zkUL9UJ7jm8)-F zg&hcdb=&pr^;#Oay*55V$a|^o(!%msL+7QQ13MA*z(!6e$~ozzkeSK^GUbg*Z7vs0 z6f&;Cao%{b82R#tYU}MAR;ys&D*EcpSFhM2cR3el)0W9?wPotam|eg`n9!n~70ihm z86)>mP5zNVw56v+j?nu-DCU=4ek5s9y2hR5b|IYEzPJZXz?~dccH@DFM8Dvwu@%NN@X%c&R;nF~y|IFC4UC1x!7V#=@JXC z;u#H`GG5{}o)=a5QFap!krZ@mPtZADMe{Aq(_Ewlj-XK0RE&t19f3170U9I6ha%`t zK(;m*iF~RfP!22^J2JqWYe+n=tS0MIP(B&P3i>v+25HjlYMJR1{UgQ&n&r z3rfhiab4Mz`?`A9 zM7CB*MWb<*I2Y~|vnlI<24yfAdri5~=Z8|IDaRQB!_Kli?23L=X+n#LlL)}PBo|ci z!(S2{lJJfD;4UD;39|a7Wc?A|S6l!}U>Az-|ehLBXMSPF1U%}2zdjCSbEJciUu_DzOX%Ayi>|nu_ULPya zSIU!^B*Ds=;fg~L%#FYgvIO%A(5)6R-Wp74-f9wN_Ltr=DT&-cj++lib(NrFZAs4$W<IhU3<$|P2eTqCI>W9m zyP=}&zSG5S3C)&j*&;`G%HyE61GOX>lJT++YS3Nsgc}!SLVRLhH3VU=7t%RN_}kXP zy@%HaGM`*aB}1~XURB)IwaLf>$=qEnO{?WnK~<{c(d?beC9k(LD}!Boe7n~JJ>gi} z(y6o_3UaO78OtRNaqeAqpozCwhU85fhJUcPE)y!HGUFk+BYAH2@O^DFTWr%n%^rk@29$<04qo3-owJUa&Muo=Humf-sTEErf4=*-$PEqdg;=&p7%*o{wyKhzmT@y|& zorGUv^w$fgcv@aT*$1?Ycg;y~ig#3vHJmq-jku|AAO zYLzlI3yKh%2CCSqSjUl6Hs;FW^YTQ%ibt$savixoaI-;uz{odT#>koPJ^eNJ+!23Y=> zZYdmSRGIVbLaLzb&T#o%0brs!pA0Gu|CWjFF}`4&qho|l5RXy?@tP}3zXjGfCLqZ2ewpef50~~^L=r@H@}PO<0CcJAA4O+-}acN)Rl4_8I zE@9+?w9r`zE9+vXT6DJc)z#}%QFCrEa?t4jW#~F5p(2;XY&n~uKAf)2zlf>=uL-+3 z4c4WFa-PbXuuoQf8)1ubl?dko=WY2{jt5LbOFF`}J3tq4(i7xIH{KysqTM&yWv6 zza0k~Xcy)bm79lirrdQf|Fbko-)Hi*QfzNfYx(chH86ngpzi!Y% zj;Q1IM8lWEcA=4LRGRxIyH-&$cG}(>bU~ZH-Snne&QWCkFrRMZc5fS$N@F%n&OG-X z&v3n$(qeUax)CjQD(Oa1K9On~M!{S%wIgy--ystJ4f%;YY#eM{aK<9jZEUOeCmPAw zCKlP_E?&I&Bl-k+Ggwe<#^?=ZQJa-7gU2MsKKX6|Y)9;@oi2+|*+nZBoC2}8eDS7B6vLp(Wbf4k=4xS+Z&iQ#ymz>X8GQF3Rtfy6( zz7+b1CAx(B#di{(=x^l&MOv8ioQDL@_~OKPnG;EptBFX|_`t(h6o+ho2}dS*z*dA; zf**K1sC_VR07L9&;o3YYmjQ zh8dM%%ERNt+t65~h$@gMf`#BO6QNfJSc32b$91p*L8${$-0SzG3CcWjO~U;27=sP} z$f*yvvfscuT5PNXL}#mBZVG+o=SSM^P$b`Xb=}=qa5dd|y9rkPf)xamYwyU)0N{yG zkpxcU;*ubmyt<@>vMJf3%qc_CE(Lbw#G?FE) z5f)0ED}sUtF$CDzET=7{V5T%jQTTL0NM}R|~{wEp-ag-bp$QkGzlDEf@WXDlD zol?`o%y5cPvgSf$TVA)5rjfUI8tJilLF5Ag)DBuOsWNi?{}`SjTovfiB-oO0AD3w; zgqy)q%dBqa;L8V&PbJ|^N@VR7>q~dk`zKOHb@)p}eo?P%Ct9i9F8n@3u2`CAsmt$x0>pO2T=*?|}fGmi1$zC{qfzSOp73w8ibWt*_s@>*zEm{KFg)x+{a8)fwhiPuD?DEzQESgQfXB^z9W zN4P@K8PZv%5o|kbNHeejtjk^!4yffNwj($S+gBsRWLG$n2||?ZD{cl@i9K!+(h9|5 z4HY(u3A>~hxC*VnyUeZXGsR@VC_Zdtjg9Yme3lEU=@O;2oNOSOGS4+?0=JE;LKCRL z{~%dZLT(?IROk6I`9m4S!8#j+Se9*M7KmF_kQ{iJ$%)Lhv~y^wN7$nN{X4}7)7RNK`c-%li{<}r5VoW zf(Pl{Cumm4(rY-2+RM}-qN<68M~F-63Qw|xleRCqie4W(;7|{A#VxnemF;v~Hv%N} z$M9R810zk>>12~0oTk&0RkJ~B4O%3!AOkq!CdOckLm&ZV8EpSmEXE-yG|B4}OjshT zmg$f>+M%01rxZwlVPXZVi4a!O&tj2>BVy2D41O(!hB0t{L;;Ezv_7f`7+y*|yzCks zkc7fJrXZYLu`KCRIBL+_?hAtH@Vh+$v+u3sr}{WM=kqw%>ByR-=_B9UH(q)A%p>?F zdu&NiZ26s8LwEH1tFo;K(*Ip%^HS0z%qz25g%f5}Q-V*k?a#;CzA|xTE!SkCGh#r! zGJ0bO4OV0d5JVbggn}j5Xfn5;6bD(BP^eA91;=Tld9Va$$W~{0CDH*M1m!%0ZVL)8!f@qH@R=Gh#|*B({w*8oFyv%~R;rJ@?7O3kZ6lK+8a zAAGIj6wIkk)07*-(%c(l{iVN5#6I(3{TsBoSHmylU!REUs0y{dFvOg7sWKuQ5H{H% z8lz+f&==6V1bSiPxsB(@>LY{S*a>hscXhwAz3*-Ob7gU{(k%B1Z!?4OCk`BVV!Tb- zZ+S0y>yHOt{p#SW7xo0RJe}x7wI#l?}l;S5>k+E`>1DYz`?-lBxmuB@sf`BJVd%n9w>##c9gh}UAgpCnS#6)aCU zuXwwHK%cjJ<8J7r?kCTT=QjQea?FulZhYhY@{1)w6$QbyLCm@Qy+ZD$Txb;R){?QR z*>?dZzxW>)FM=KNDzHM9L5KfZ;#p+09Wt_VjGo8Rsn|E$SdIpnx%vZ8&p50X7qyDJ zpM|`agMPhI7bA4pW3j3-hT9L=Fh+OuHBUku*=b<#G<*pR`ShZgBCF99F(j!T$Bkg# z5E?fu1T)Hu%wK56SRa!B^MrA24#Gh_1{EX!$M8P^WHl(LRZSFwq)NPTN~f|xnoEU2 zN<<7Z7I1tfbjgV@$x+|4z}j{`rE(q6uaQctC8{|ZE!C*zVd6=TYA#H|+{DFFQdT^* z5-OZT5ncg0l&p|63UUzfRG?;{^O~jPd0#MiMc{nP)w*xoLCL;nhk__BeQG!9JvF0( z@?Qh6==JJ?6sCBI{)=jBl&1I-` zrg$?a}q!5V*L?b8%0*>Rah&im_h~&>0twsPYRhV2X~zeVz6ro=gENy})U12UQ})+7qphnmE| zLSmkg}(M;Z)f z{OLq6ElyHyN}2`%ox|Kny-UbmnF<93P0nd)igMH9v|{I`18E@0tO_=_h=U-CaRej0 zSk^Qda1<+DYYE}vk1qZ>*xjE`7_6FEKXC}G54b@rWuuIa6OXZ#gecMTL>!9DIf%Kj zSUeK%Cq6xR+QZ&pE1?GTW>)2p9^CWQHBqqTmET&H9R9ZJZb(tbpyBajDsQ}A(K+?d zQI|6v8l3wjSyvQY*<;(g+U;GoO{iHbm%w5muh_8%ww0FVCDGcrIrp2_snGb2y)(@@ zhQR4Amww9;Rp-^Szurb_+r9YlB^7Stp4Q}KYY+Y^wM&j&?2P!W5(ZrJ{RtVYloX5m z?_hkr=f`zr!r`cb`B3VxIx@rV=({%hj+pBxUO~d|50vYBf}Oe4Be_(mw%dJ8Hodkx z_;EJ9XE&hbTx$1jcg#;I@b!{xn(T&|`~2MLR4Qe`*JCNGeHz~b{CJ(|DDX3Bw@;7o z;P=Sq$*&~rL;|F=@yN4BB5H)D{Qmb#(2PY1B&m=A zxw9sgEP7v`{%}TZ081&95PThD;k#%u;TF?!#S#>_Gaf+DSu{|xSlp4~p1AisFTCb%H z2PUc1ty$Ci HZAwf6P^5f8a&_3@dSsnqT1-JBTVoJs^Vbw6PdMxs)T+X@u|Kev( zI98K#(w_fCO^_2ke`sxFkYcb zB2hKjKvl>!Y5a^ZK2`*)hC|~e9FYCuc)tYi***8qD)PSBnOjcp1sVA6y>h<4Zy`JB zq`PnWTE8Srz*-xB%pZPa_v+1=kgqPE?cMp#PnCCcni+Nc(+}zkTWl-5cUYGpK?Z0) zf@}k=z=#a69gOlh#X()%v=lE<7B7Q$ zwIYrZF$QsHk1vw_VIwMcI=kA(%FWiEcBfn!?^i0*)7cTH$sbQw%FSlE(jTvsJ1}E3 z#&wb2OCAMTcPepf;=#nL5>JCH842qJ5)a0sCa%O|I&oo66LX-j++d!txibX%)&OOQ zgoC{z^To=@fdbNg$m(-!Ds$8YjS=%7Lu|t>IhImznfD%MzP&9-5_;n*=nbxh5w zBA-=L?2yNja2NqT*jVGmpCn#MUquYCLpq7866X>xPW%#995*T2@(dLLPGUu%7RgpX$shg7T``TRpGRn;uz|?;3nt*PKm6i zijt6Z$3#y58_VHL!JE@0N-Z`IKFy^0%F|E+|y?I9}s) zFmK@}K-ctJ*92bMZeg()%~odM2giGTj?+SPtP3TH$n>wZ$TO0fshHPlk7}Z3)jSVi za(XP~2a#5Z%${qyo?&RRSP(VIEDPL?miL5QaSL`y7Pv9RT7|D0)&ngv$7E9qP2Dv# zz`|l)+{*9Fqc7VjaZ-a+qOL`vc4UzmQYnxXxVz*+g&1OTRJRO=BwnR(AU$fQtOr+W2~1qN+4e*^dlz1i=Uwr6P>(+ zyc-ZreaQHUqd`n1A+e%-%xjFFELkHEqgIY!fK***MRh5rKZ9?J_{d4t>9yGa(y+`N zqb;cg_Gj1@(OSdQ1%B9RcNvrz`PJbtaR5iXfn}~>_wCqIjrKn*!4r}O5!16VGeDa$ zf5*`z;m~LPgLoD3vSdkB(469tBj-DP^7nQ4q|UlBMWit7R2RbxKvO zpxIz=6*U8N&9|tVu{1FDXf2iT2~8`cJf2Q-R43U2;B#V+z!y3n0RGFGeqNs=iJw+_WM#VoaYLa3lON1md0&&v$ zmPC}87}$2);LX3yd>Z^!{WepkqCgb$kqW18T!WS zMLTj-L2|^h2>X<5PT(;(i*w|(Cvrq|bqB5k*)|HNYX{>(LhuEqG$su z5&mvbG(Da;Z?wWHdJq zAXv*fHQlEUSlz@DgnUtw3Ko$vuANu0v?#BcNNa*Nyy3X;Aa&$t1}H4s9$b}g;J}?) zGE~5maz+zH`aw-4f*aTx4_HBk^R!fe*}kChT-KFSuFS&|)ofm}P1wc?1D-mjg*?E&(Hw+7wWa;t~Kd6#0=OxYAJPIUVkcu0eawz`8u(ZMfx}q`@t5 zWlbbb%moUrntpSG}w!+luLtotNDRo{_HC(;FA? zlg$2O;E1wPPelzy7VLS`^9{pSt#`5cVvw`9ERZeL|2@yRm|(kt&tg4&F~Rl&p9!Aj znLZCTb~2Fz`(%G2f$?$6LL3m-=*C6fhm~PhYy?<=w8`~ZycZ@K0BRaCAQ1Q+Sf3^B zM*vN~R)|bY@1@k_IFUP~D!sDy%!{3mWzMXZL@U%K47lQ=tMyVnMXaNQGknvxkJSe$ z^@&v}SzWC||J5`@RiK%JvX;1RDwq_=uNMl>|He?ae1%h~S_$>!OyN&$XmGx*su?FW zUR}?J1#aYDffn$2W|x#PW(q5*;NxTQ=>2wwnN%#XvI5c&JJ()YUSEIB(tlrl=<30Bi)V-VY0b$V=`7y9Jr%fD zZT!`>n><8u?y`{x5;d&UQ{80g!Tg;~`s|uhZ$w*D=6m%S(&PXGX41t@83e#zYU%b-vQ$f=;P=BkPsIVR6@ zUQraMZk@D(Cau(XJ)qiHN|nqA`mVs2ubQ+>qvY5b$DrR%Ix;*wRp#xa<0OB3qu-rt z6+&_*EEG0=T;1n+vLzA_o ze0^k-e2zTL_#=Giua!QIrB4zE3?r=83*UY6)KjhNzWIB<=Q@^q?X~xk;u}8l$RE%I zcZ_a)^d{JcdhsV0zeg`zVYf~v+KGN*4)a-RSWbGxQm|QhM?m%3UT9|+eb=eBR({`B@U@Fph>IkjW_Hy*lcHWP{D6WPGx0T2!A($YG{%hZ`)ov)6kOhp{Zu79Pcl%KUm|^INbB(SHMa{-_ROH7xhcb zM}lED*kkitTvKJ_ImvUZ(6uOa;gW{cQPiM>w2$>TC>F2}dH(5*kDcDji9zIZe5)XN zpm%hsl+2WQ-Yo6SjE^NFnX_EpDId7HJhSmPhHIK`#Abj}uuW_emvo=Bylo&`!-u_exKF6Wj{Z5s|UKL8x;8DG3%XQ^vhRjMa@OWUuA zX%?Xug|KSgxxb~(aFIpwf>|VKg;_zyH_4<|7>xOW@ zpgn(u{1xLVO(m*{sl@LjzMS}W;%{O1%Opa3e6J1{>yKRV)-|YZ6 z#YoE*qxr>lgJnrV96ga@ziPcN`Q^R{#u=!@_GY|Vw~mPwacDIFVipWWyUQGtT{s#( z+8e{VXf%ca?hL0TzZQ=riE)4w#UixmaO`Mc z?QuF0m{XFccPOU9gH5l%w_?64lf4x{w<>x%pdCSkbI@#z+JVldQr#3yMV2(dG*wB* zA{aVgqtw}4)=GyG05-|ie2LHKXt8RhM8_1_2UA&>c^qspc%ex!dzx@M0D7>dJzfzN zQIcfomu(NujTqJ;3E-oU&bFzK-hDVHK@sHRNFU+_R#Q^JRy{P5RsRBV_VuhEn~6Nj zxbmZlBY;_1Sthl17gKT@X#Dj{z5d|jwu3j3U6pC_A+Af*V@HbV>$aWTvy(i?k=Gr% z_f=Psw<*n9bw=5EQF*3y8zHx!w&iP~4~3v}Cm6RX<21xFX)zlJ($un$x-N@>;TlZ6hs)C@(mc;Y2&e&?{!N&G${!lRGL%hn*W8C=~ zC#b@uDe~--w;p@hbR4Gw1{8p22_Cz^;-Plm(LJ+L`;=^m3mi8kIS&XL$1Sp-m$1hL z#%&ZNGU&x5nEZ)%1OBlLRQx+)KS(KHOUZ@R3(tMv!kKg$ztXGejqi{P7gz%Jh4h6B ztM7u()%5Ba@&TB+8MphFaGW=STwcU@mthyvmjkiD3gcml6AG|V#-Fswz6kfyC!^&v zWZ1Up6a7(rclzWZLdTktR{98urRb#t9&VM6u{)ijG3+_~`|VAv{elR0JV84XwO%(9TgT+IL`04dtbTrpc5N#KTd#}h`0T&swTO!Pd zSKF6-m}HI#Uuq$hsYL=Y0GXP_IvlWqD79f(8zx#3F2|U6m>X0?sWm~x3ECDb6I{Ct zO__y`w#sexJwYq22~wXB+DI!tLEsDK*Bh-qb8%E!J+x$4rUuMuwb8}UWB>g|8JhA8 zY1OfKbEAi4tI9q64YTX`gSBj zAvYr2tNiqLr61=3qkFeJiu=Zd;WB0${p?NHckCSLvynY^z;Ez;$n$StpYLjt|HB`n z8KUfe;pX^z!~{e~Y|kkfGiGf5+`lG9k6|a4B#usWlj&5d zJITwUYjGl+Xm0ZjwzyymAsEs;?_zjvT2^ygRxtg-SP)K4g~3?C|0dt#xE>#WzGB-U zb^ps^2cRRm z>v;O|;RxHII65axSEO{4FPkTaw(%eod8FuX}ku{WQGO?41V_ zvdwXrE{Cy5+?mY<{L}E>8+ips5%y=JD7#-!oPw9&F8<@iACUixd?cX&t{-Cv2pxD} z&H^kP4uk=AUvZNy3bCTd1{q1qx-;Lmlv>67R4dyKeDVrW$UO3iN9J!_=*=i#&X~>t zOD5M@{rsJlVpeLkeEWFd|Dvk2=T5)!m8TbOoKFcNmra&>mdx_?zex9jEWRW0;>2T{ z+@*amq#0o=OOruB1N|}>ITTo=Je$X&{+k>QLJT`yR?5ia7%`F*u=F&R!^%iYV3#nD z;#lEuAYO_h>y0Q65$)1}`z!bB`u)G+3Sgu;kKdr_{bTK2b9mo-%LkVwO>#NQ(r?P~ zeC{S$(>2aDHCWJ71wpIN7H>PEYpb^{IlQWU$~PrdQqA`XipXP4akAd-Kkz~RErh&< z|KJ1twg#wWx_#5zjh9pYR%7RlvperAikd3q&M)t}J9Q1Gn6j^Cin1bG`6noSB5#SZ zq~}7_*IoXa)IGbF&gTSG6NA;OrcXTX-OAIK%j@^;XiWn+`VB*s080C1UQ`5?)iaOn z%cmK?TNxQd^EA3leJa&szxA*`#GxL5(|xkj%bFtDdH(E$S6y@Uww3x_2M-Q=byDjl zdk@ScO!^1c05e&Y1jTotUogf%ikmdy~COkrhUUSMiSy?!Mq zZ;sps%ye%JTiq;)`H0YEJjpWSpz%#{AQbEgBOOt0Di@W!cb1}!k42?YL=H!#hjN6- zW7&F770F_+86ngyWzrRqW{Bh*D(xV|uaz{7N=CmpG3}QRUEa3z~^l?CKlI=M$~O3TkvDmJ8#;mVK;Z0on+iL4eGAqYH+G z{jSH7wHkHr|7Gn>z~s8BbJ4T+K4IypZIEn?OPml0fUN zwNJGyJKT5k?)Rjws#9m!b%wpyu-97u-#ll(<2{+BC5M@V?#yy%$w|*qvwzVnnCqAB zsw~%Zf>=N|x1V<)u--DeUuDgycu%2O7GiCl^*qb4mMUE_BS|6~ElRtW?P@nhn^`Sj zWcSv`USAZT10wSJ1ACS(i!2soS1zn>j-QdN)yVyNrOo=0HX$aWjCIN7?|<+6w!Th= zmu>yt#O1$m*=tF8>o2lL$uB;-_5DXt|06EsU&(m|1D3*_3?NCGOguJzKy3t+lWJ@q2##ta4Vd3gnZ8Zl#Q7)4?YB|;t^a12}m2-&_yiH=aQVI3L!K)g`AuZ9!RgeWe{JIEk)ZLVFs#A+H z$F&3P(xi~o=4NX|4a144i7(TAOl@dxW{^sSNaSzIqBvk`wEu0I1#W?ZC=+TJ*X&|S zJ*~bP7H6`?`ciLD1kWRzOUgT@hn{2aJ4okso~(p{@6J^j*9}Y4^>SmzGldXGlu)5? zzg`XfrK8L%mnv5&&sY8)M0-G5q$l|^f1P|1#>n1KN$SE`3_$>6 zx`*sOAe_No8A;;FP6n5cSnTK>#@r(kx0U9sl6A5`k(UxHE|+CAN2Zhv`=c7oQND7Z za!dq5f**84%Wx`(3lW9zzwbL*jyR*!GG<=5@-*TF8Z0Q*^$-^IINjK zOkFU{vN)00(&J*!Ece+l_=(ax8!}lhoFA9N)n({Cr(@`z_VQ>s-#n6tjzR``TH_$l z5RVo4X7IfwDMUAKZakkOJ3^X_CUS{(Wj%@<`MkwPIV7Ltx?S!fiIOC($YiDU_PyUNOE%jg)HwLu z3=7(Gt#1?p%|`oxRY8%5v3-}}L_vE2c9#|dcsC53c99zoRMR&ab`%QsdMpt#G)Ds$ zpNnrY(^kb)yjYl;$`+HTpsE&FR4K#YhU0iXMeK+`V^;2CG0!Bn9#(9-oPl+e=!7w~ z1zk9RGXpnQQ?s&dJDCZ)n=Tr9wr(MIBO-91-Qs(WBM=`hnMwkRXd15LYhbU~j^S8{ z*Qja;c}BMWTGf2p-ODs{j*tZPBzibkL{5|wvKk&Bq93@%S+RE&*I-Sc=7P6>-> zY`3eCffI6W+`OJ?oJTK?Y%P0p=$HmSs1way1OLbp({JQpV>+(uxJz)ostNblP;qL5 zApnUrYrwP9EzQ6>AY?Sr;b|IF*PMi#gqfTdG{+9hmTpF~l4nzc;|!5F4C~9_5A;73 z!Acm~j#hY@tELGJz{#IxW;>bk=G8b>=S4Y5CWR=4<(BDUf|VXxz9j)Pt2Bl)$LOIf z&coJ2Rj<>qN=yM_%?@H63{fK%gw}N=#xyB2I7Rpqs&ZS84N9wMdD^}i=|W|$*(!%* ziI=d8*>J-d)e<2*xPGD)HR2G%lG7n2&NMpfA+{Y{CS3imn1y1WLr?Fyv*1%K%m(vZ z5Z*5qOuT0fw~*QsL~6AdVqw3Br=H-k!vo`C(MjPvajHaE zhNG)*t;RM1LwJVH?g(|m>uvhF@chk!9#U`3ouxBagKWqDgd8+__#J}N3GjkGh?Ur9 zpHlvbd`@wcKT!T$`5x#OkBlewV4yBDP{+AQ9LRJsjH`<=8W_5wxCJHQSR8Ik3&Hc` zyl1|TcN}(mt&Z4^kMndCgIGYbM%t}866zHa`1%&Q=(S7A_hMkXLt$+duLeQ+R8U{S{e&OoOh0$pXogk!z z6l(BzRZUe*s=1CT9E+s0^D`+7O3kpDBzl#wm+)WJh^87QJbD;GzF|T8(BDE6p8p@+ zfB$~4a-7}J@7WG>|3OMpqE>bkj|iOSJ5qFr=@9!73%Vos1=55dS*;3V6g4bYLz)S! z@c=QPZDJ~|t}}~jSegkk6o#;&d6GZ`35z`!4kL!fbT*OuVCVu8q3R%01lDkC5u6%j z_VrX3LZ?TlP1OX>pXxlusVj89JYkqjIBu2emN0~=@<#AF%wGkuu(Sy(kCL@%)stcz z@8@&zUeRj)35X;7d;nTz~-K@4*NNphuDAP75u992Ric*`8=X{7VhYEzsREUul3op|*7X4$||& z{@>(%WQXi8=LA}4y2)HJWVn*!BbM9Ar)X3Q%U!zlMy*?^Ofzx`2idEGD6Bhj_HHL1)JRSlBKh&&b6 zW484un<|$(D!GqMSGH~k;cYA(JZ-x0Oij3fR5I1rVy8to!tGf*g{^C-^$gsBx!&o6 zONOE0%?44Y)hn|cYp(cgrLJ+zwLtz)a`p#jze0Wo?(t-fv*IEu5|}2^kwJtHNqU|m zWYtvi?##99OLvx?MypXTb}9)BDd&aF;>`Nw1osWos9ka4C8RcW{rtkwuyg8=KALZF zwQg1S6#a|WZkZ|WT$-_Mki!#bL!)i}m+;#|We?ire4K^|4^LWagJ<9YB>XeT5;0Cg z?u_B^1}o2m>SJQP&vBD_eYQ@k51MgWDZ|5B+_-2s*IK5w-L&j15MsG>ddGBBkE&DO zy-(C;>vd2X>GfbK?6&LJ6YKW6cwTRKQE6Edfo0oPGo#DRxz$%qRpF@V9na#b94H6S z{(q)6c(5Xx7*$EOnbNnNEjgDaOS;dkjq;?$?YzW(g!F&oq^x(n>Gbm-J^gRQAons= z0{-%vZkfJB;1S1E(EYGN2OXEBi?eHMvwx3oFIzd@?;l?|a?d^F?$d8Nefmv5t-jAB z34#|rgaTAIYYcN__&tL7APAyj6FRccQ;<+9SsAwiZ(Gk_IdN#xb@!LPqbxlegg`I7QS%AYBJqx`G#W002(vJ6t> z2suG+fvfu<`7QE$F@bfGJIi?@+xX%z(G2vOCJXg58H$xD;F!hA zh#W-yVTyagAF}ZvG0!kfmWQ&es4G*xv!Tob!%VWgFc|eC(o$gc5w?dQD*{YWzp|X{BGBRpakgZZ1*WNG2-yM-U4O_Veu3x+ z1X=>0W_byd4bhc>9pV~`$7m7DHMu8TGTs}4Sp9SWCdC-3m?tikIrOsHszQ?m#BPIM zf^*Vvrf;2rlb9yFljU8F;#v1=WC()9)cMv4DRmj9k1%tgOu+ybr080@kdvd7Hke_C zR;pRm_ANCLc&-{zOmNV_91GAa5Lt%N+bwc$^1}+a~c(*;ZVajDOMZnLaQ9C@ADDA2r2Fp5n?7&In-Q)Jk!XZK}S!k zU{Gj0N*FT@FJi97%dSm*)2GbR1UU_A988ktFMf;)GUE{tp3}Saf7T6zvjF?nQ@Ia5 zEV^3Y>sXmccMuM$$VDp%emJnRNjD*vYeYB%>|?MgXv#smV~DRJzOPkm82hcr_>7t& zz+9lxG&&V)#6rjh^hTId*D051byd_kB5(q9%$OjK1=`4(BnUvk-EhL^^z(3GD#l{K zRKov+wPE8-G6605ruX`6l~xw70)L|Ifk^`o1e$2HGci$0&_z>S6Fe8oprQ=!pJ`Li zQydV@)uk0ljbxm%&grYC;klsv) zQa_r88?OotuI~{F_7V}kl`*Efpk_e|g$(60*mJ~gXb4`dQC;S(fr%OH5~&-ToHj;ovKmlKnE1ktkVSNiOCx&Q+1Od%AerO>NFzNz?1}X z!cH)9tWVQLXsK+rI9PH<-6dsBLegpQYKt*NX_%(^jL6wWY4!x3fxxN40q$%>d^7bMv@I~ehtaujb6b|6m@oY`1c`v{hT zvr9dkK_M?cws^-E{`2Cnb zTeZR>8NQCF>o009OdmdQBV zz?vQAEOuD`5=)~7ZbDvcz9?BcbMnU=>$gtEc|Wila@GA{2Hc@$IA3kvRPUCnrU!;0 z56p>Zy3#Ba5yFun7AOpX$G0|bdh?r0N!)ET>Xl*z#E5BVx)vtQMh{s~RiT4_Q;KJw zZPQn_qvX#*0r>xXuIHKkpZ|}a^RpQm{-dXlHFjse0KUQ}l!CIL>{qUpH774d)OFNm z7(D<*u?(tj97T{izLze63X9R6#3JWm7uIGurvL_(Mwt7uPSSRsR@0Sf>Rn81AIUhA zki9bR*PtUsU!vcF)jZlxI~WhH18L5NTEo`n;=tSH)f z!4d2-EQgEP1|;82^5mXHnN*Ln0^}{{PsxK|r`8oEN^(RcFGrk%&YCCB z!I{bglDA!+9!x<69KOb5QDHs2d#W+n4VqbFnp|?hiyLYd4Z_>+3x{z=lQGqczx zrXV4oi^#=VxZ=Ed3?Y*qGl*avdsn(3q8pdL7?=LfYgfkGzEO_1zNqeNE)15It|=Y9 z_K&YAN7t0ET3A?k=fX8nS>fkuEQ?AT3mBQ3QC0cD*ai5v z2CWeai#yh!@%+Dq8?Jt)q24bHFS%s6bVz4lCt`-YTA2&GQg$mGWZ#RRXU-@W%9_kL z!wjcE8>tiWg7*$)OC^ZC$Gdq7Plk!p2ttBU%YmHmbJY&QAoMZ!`;xLfS16M2cvfYx zQYv-3#iX`2(_Ym}g{^O1Jk#n-6_N%{uUnx1<}WUg7yjXF2!cHBHcjthIObyCb^YvO z(Tzj(qqA!Zt&1-vADJ2oVIMRpONolcG__YAzQ?liw0(N^v*a`6DY%XZ*~diC6;U@B zMM2Ja5oF{un~%MlZ2n1OfL8qQFNu&YRkV z_AsM%uW~=;nW}xz1(J)7C76<(x&+g)MH5^-oby;DGbqrrR#S2}i}B}35)6(oq$j&a z&McNAV&%cUoD@0-seLh~P^dCg0BVeAC)~05TYf#3%)M#ur8jo5Uh=12#Do@4z3oq=)Q{^S!n=>rU?3zKL zTv;s4TrhLZW?`{XE_o)%R2QDa-;*;qKNPJjl0iQk^%GE#!82)Lti{eHiFGd&^KZQK z`qy}0MYwz=^KxR9Z zYySm03%cA@s>&=P1cc}Wp9}wUB$P^Xh$UpuVmaVwj_Ezhwnz85F@8=~oJ;w-_pZw; zwOii$)>~?o%RjZVQw`jO@f=@ZjPM!{c@I83gs*=-JfJx@}J`ZjibLSr&(!yzsK0`zEZ{~eQrK0@9x2HG^TIG z+aKhMX^utp!K|50{4%`7ar{R3SR8}5|H0G9F1+=o}+Vn@0qyc)?2rJc-Vo~ox|^W_vYlVwr6zaw%d+$ zr?G5ty8D%PzZ*33*|T3H-v_;+Dhb#DSf7u!pu`F9jyg?v$I-h^cN30&hYaOnuvRW5 zNI&Z`oa$K_VXQdq_hOkP+FkAsYb=vNXpS&3U^HSRdX$oxv{FspGIQ%}y)(J<;K7}f z-M=%CN8N6roU0;+zE!8`o1uc@S_JMLFG|7y8zSFG%7sdc*rf9cmU z>-I0zCiZJ;98?jIAEdQeh%5C?#?;6wnFi;D9FJVtq?@FnFv&iE)`+YmX(tmhAvu%q zGD&|VKS$$l_#%x)gEY3DKJ)nFXF&48+vd|x!2&F9Za&p$Jk>aJ>eQLX8)x9-)Tvx9 zC?on1xd8Ove&rIdEhPgI;#~DJ#F(g&?J2JTM%G4oF)POPJLB|Bkw^9^7^(FR^R<>t z`Qz%bsy4CP*xl~jrdmsJXk>A_RIp5DCl)v#kH6prkKcP=RN~pN(&-wiU+}P8kxmJr zGv@e{mILOKU@6Dl6Tpa_&>jHWieKARpdBo|Nprmnc^$CzYF( zyTGG+wemXUQRP1=k14;TJOOuTC#hlStD0soP`fMZ+Ng;Wh6`%9re^U1A$h!DFa~&2 zx6!qq^O^qtw0=8JW4L^b@-WDv*yfZ9Gl**e<%Sy;JgRZaiA<_RVaX<7%(W6`mEr&l zS+b+C_xJZUruLpZxp!*oul$1l?7w6GTWdh`tiOL<7?-}6e1cG6z`2A(^DLV)K{Vg; zk+MOxO~(-M*!9d;orzLPiR!0QMW*lC`q8C>UT<*e-n~mpdp|B4y*%^%EXd#Q|KD1( zzZ*0f{uDfD^PDa)KpS9=R!M0oi^>jVk8*{gWO*%0M*4#mD0ePKNjJ+G#Ydnbf*M0+ z+@zJiGR!`1B0D$|qz$@*Q8x#Gl9f{!(E^|Jho~^>wXJ{r@;lyf>V?w>cO*pjUy;3L zVs$!wzb8 zA?gv9(8)X;iD5QC+Ru(y$oUWQ9MC*~4?UgkqU&0JgbDdrv57SiaGPXt1eo-*L|~HD zL~{XD9pYqk$!msHmlBpvH$K;ixkfw~oNVFbrK>bD3^KRF49o)O0hq3z(Lo`pRplu!tsoxCEZCl~@ zz`yx8+%I>0w{i>v67&PA+;P!Gci?MFIq_py`q?}0+Q%CN<|H#zMm+c_+ zxjmDEJ>{@m4y(3N-i0zB?3J@%ue@fAPlbMYyNpDBORZkM5YLGZl?T|#!gyAmu zJ^y;LIwCWxu(UA&OJ6)r;P~TXe(ArUXUH#t6u(%xLwT+8i^?aIKUDrkISa~;=NWwx zu|QG)NFL9AZ+U4PW$cbgCS-=~Soh)VT#YYr%!1(}jieJc$YWMA7{&9HJBb3pa~z7K znXC+O6yakZNtC}#;`(-RzC~uN;1LNHQ-JtJi?7>RLg!z_?3nJdq-GuMMEkcdd6~N% zZ9DulTpDII7zC^*QhXAy0?wHy>DQW>rPVe^c)+JM6}1uA_2wlJN5kqS8FEimhM}E#HtzS2P47Cj@y6l zOffYzqCpSby$?x^OU>?EtjKQ`N|EUZ;XA=Z6a_{pZo0%(@rh5BNKkat&;TED`fu4p zB3#4MyoAcoE4AIpc7V`h4&p=8ZY86Yc*Wh1 z0VNWLj5QY*+Zsl82x#*R4yw-ifo_tt%vh&q7-ndDrf&+&RUnzEAt1%pdq}J7=_KKn zi%Bt5RSjL$e6AtS^p70VC^?vg62*p5tzbAM7UDKPNi_~C3+!6o#bAp?z%0}WQmLp! za|lk8SQ@y<{Pk2vhG#@EB%FYW_YH8psj!)##Kq(bygtNKcmuQ-r>F?QK-YAp6D~3G z|K;qTgB|#|k||SQD=Tf6d2}EFKRm?y!X((Zi|P8{E_H(({)}sKZg_(tG!8<1C7kYJ zmT7=H{!WLP#ro-X_rUHX{Z6P`Cx;j9THL+$fkqJMCBt~#4X{J0zHsCsRdO{wZ#YzK zX4tJ&N7XYC23P)cU1P4Z^?@pRw^>Zqc8q53Fj^M3nYuV^$$f(*Px9LT`0SsM|AV|w z3E=FjaQ^c$A_MZd(`B9Es69+QIcYfTXxRv^AcAh+jX?Ab7l|P63~c*vT6#;njX4(a z-BfqY-~5e$s$2j4u^awH)$S*%r5p5t%i+dG+<3tWa)i{Kzr4&*eR8dv(0Q5#6H9e} zN>xWc_)bRn*5lMDM2Y%4TmJ*>%-x(BUz2|E*?&Fz-^drp2SER~C6+fv;xUUSkx04S zZS*GaL;A~f8@dMWxvWEzB3MtXZ` zYHI2sxI~>B+8e@p*iI|lb@^oBZMQRFMQ(pJt=H3gVXJ0v9XTq0xUoBiM3#-Ff?JifgHa_0Ps;gf3Ynm<>K z{qg52ta=Xr+m+|@zahw}kjOjzWq}Z^@@qaDHr)Qo$Nop>+={Uf#-lKIBL5tNSHDj+ zUJ0Hlb5&!_HyG8Ofupk;mMl?HP)*il8m$s$G2N&*h>OyKv8mT1K^ZLyrY&5czAHu*Hl&(s&;@1y>lMMzXzIk6MCEE z*3zDfCzhv5wxkV-Q+)M2r?G=X=EE_p;WK=P!%-)d=)QTaPG=0SlrNFZrv`@)5Af|{ zAc=GxZ0^b=b-=@Vsb&~<=#$GS(KMl(rrBuKo4)JmQx@qH*S*#@O~)}!d;7DIH-vA0 zz_?~bKYc$CmX{+m0+t_PsBF-GMfD8|$gs zqB|NQr50z)<7BHvqKy{Gn7IJO+&W>M0V)1&<k6`|sWR)|(IP%t*awe(So) zV#_w&UUU9W;@7>R^PwF#4lNOMeQ-7Q-nZ}Ox3-S7oo2agW)suxo~}BZm*2ki(E7og z^Xnu2?M=cZu!yj`oVf}XAlUJ zSL;q;>!Vk{{OYTB52oivAjKWakF0wlHw}XXnwpTGPN=G3a&F~w`54R3j7NgDg(Q;j zNFOJud7X?$)jLifN@MpivuVEl#FbYZPDAJJ@z~hppwHm93|_c`oE#pyR|`hDs%CsOVQDo^)+(epTi41H(|T(*S#V!@L18pMTj{5}2S$qNti6vuaduCl-q2-w!joyqo z6<}JgW3ENMpZ5)TD&He#6kSQcimuUYVx4xuLTxRu?(o?Bt6$=7y>$6v?o8i(-%0nB zF*tCbN&kxPxN}Xt`1J4b^;2)TX#R?gdFQh8Ie!t?M$yFiNtk>ah4QJ|TNl>$-+1He zZ)|+(1&1%X?IKctd*`M%-gMK!(Omr^^u2O?@v~?Dn0yZW+KVwKvYqm0g0CX4tHIlf zW3;nQH%NE9NMNypQMMGZ#u03yMiHaChC~Ayej?ol`Hbee^Sszs`f>gzK2ppLffK<1W92G1RDl9_LNZveUiLV2Q%P0(P*6LQlprl+?5Fx={g$>&qa|o*UZ;`B0?dPGRgSu7LJ7xiGOxy=1WAtF_0u^76%w7U1BFEJke$eIx&glnYD5_P&n z$ZTga5}xmZ6;BE?6NDIEGwXy%hHW}j;=zB0e42b7Mm=VBB8{<27HKD+)ZIYquQTRX zh37FQTZMO=3Pyfpa8KpV8F^q%=)bEPl>Q;t=XL(GLR_bdE4U~2bFowK53LAX{T{Ag zEBN)?=R1ThmUZ#rS+0NC(0^fuBP}K+p9cqx^S5(;i1VY|=6g7w)A%o6#rY)X?-u+* z&aZ{lBhGo3^AEsb?-iOH+h=85L?{hqSy?|1cN_GW$O*I;$sikM;~GaUnH9GA4ZGVq zT1tZcGI`@)gEs$YV=itb_4$0vd{*i{ zMftCo16@;NSx1WWcWXpuLUtu@6nd+O8zswAlbmRyhnm_YOF8r~7-5~6JV~_!)(P6e zE5nrmbU`$b$G)>I9IY64Lg*?qSl`~T7GWT^I zj3Y^gkz&C}4*_9Pgg8I}$>=gy5e8hq%dwD&NV6P*LqdPMgb31TX+d;Ek3VfS2YRU z3HDSJ71sy6vLiMMl-A~Kzv?@nhx5XA4Qxz-jAI(ZYIOF)OYG1N6%n<(qk(KE9ZZbh0{J$0TuU468+iZp9iy@=G`l(>^C> z^>kjC^6HqQBfdFR763Pj=EX?f04l32()$`Jf0&LmKb9ZZ#E&h>!1ZU*-MU(OX|zBs zpv%zBrx(a)_v_VLmQ73lEO;m4yEg|kCU5dWa^2Q%H~oux=54x_RuX>Q3S#tVagXHz2*-5&69o~K+o&K|o-xm|f7Mqa!9E|UI0 z*Fq#l=)?ItW>t(|+4!}+tPMwf4ky@81mYl$u@G6OJHZ7TuhrzY?zuh3Kau>~i+f-H z{4KY{ZuADO-pKe}l-_*H`TvN+*=>Z~xc&XV#13h@VG$O$ep$82<+^!)izr&Ko=8$hE}h!Z3LY(|Z?%m4Ojt*P2cj|S?M_l# zaSZz%mR|*TIvF%U0U&XmiNx*tnwBi+qb8#;es#n- z^C^o{N((X0Y;HXoL}4vt6pjpimw|Zon=$;Pp(3gjHJA<~G@pad>*x&SRmy9XH!1H@ zKA`*tu}B3hRP1D6IV{B*7g_h;y;=fpn;8AX*I)&P1>E@TC%!=4EN3H;{-hTu95iz> zz8yUs+iO@sn#p;U0q>r-eE#|j#5!-Ka?E$~B6hq6i7Eg~3uL^w)RO1`lEyR^omt64 zG3s%#f(_y%2YMvXH861tiQ7hlyjh&dK}+ZtHOzVkD`k#}*?HY=wr#&y^j> z9MaShX&iY`P$~M(WYgB?XLZ)^)6pvBJ9lwow9BxUhPFGk;QHkz2=^!mR5kEpJMfxi z&s&&s?ctJb>{>PW+D=YaS4scSEpNT`*0)}I{DI@gA9$sTRjbUL9)CvT&o6;6Hnb2d z0z;*o7(zpfi4gedgL*minhnotPg>v%^G=6=AkoZL+j8qoFDL+8K%~Fb!Z^y}*l-;%NEnME z-wc9U(Rb&%j=8#G>U%bXdci?PF1%1Zc!4T5_UPuys%3ZQT)$WgLd%c9QxgL8+XPMb-4rTV~HJTPK)vca(@tp-obou|SO+OqC??umXl_U=aEy>>B85 z8T4XOaY0jY#E~Wrm`lWArY(fe9ev_-n2No&E^R@vJ@4{Esdsjv4;!tsJZ(&3MU0E} zkOd0*4yd9I+92aZ({+;XA+dAAri3C#{wVZhkuVS}Ho5OG`!=CdR&fMiPbwxqDB4_JUKDqKrut4J%zc{YBSaw%g$E{VT}QK3H6*mHU)4%CC*9K1It# zBqf(ML9j9y)~y904gXzOc8i&Hv^yi|YemX2n;u5h21$`Wb6xAk2t(F{tCfWuxKP9B zb0?F9-r!iRoS+^VnrZqK zkmrw9Uv+KPDW{H!`JF<|OlH9uGH4GhvK5|`>WyZjX5ZN>mq-%*(C4YJYl+lX;92EHHsJuvmL_^OhtKaj{bA)Ck?9uhv&2+*4t#;w9Yt>P2LujO3~KO z;XApAE$=IM6O6=V+YXGj@Dr~FZ>k*zg2k1Ey_@9mb9>($mEN&Q=p}}c28|ilyLA;D zzrZQ+*jrpLx+_;5RdUX0P@n%QYt97Ka;jU6ni$GMo~snqtAXDv=wxJV>%lz;6B9yiC<(Hah1M=#7FK#yw$CI!O>bgiRRW z}&)Si+36}onJC2Cl^LONqW;}sH8N_c}^99J+wuW#d6DGC@I~sv; z%G1T&gkqW*LV_H21Y?JZj)0+>dN)x`UEm(!|8(o)`DWP8f8zFM=au@(UgaqGR7xm8 zY~)-%IDRk|C3$hqk(gUh5)eX$v1OnqiL+i!$XI&x+zKG+i=BgZ{*^nsQ)Nuz z;;*Wd2v3em zYAcC^sN(9EcqPBNI5BZ*ain(Rp&N9&i8JG*lWor(#T{)pdp5dc{sywaOB^tcx(Vb@^+$QMM99;!EU7#FnuaemI+$ zSeyvlDF-Yq-&@J1IR0F^9C)ox>P~xcchdD&;x1oV;FL#P4GDZY`p(Ym`eI8I0*%=! zSI+0v6>`RTQ#o{AwlUamj7Q5OoG?zKET_uacKZ>gX}Ld=QY(X-E%iLv1F6c-gWUFI8hgiuLISuWneAhNtlf*RvO|FZKvI`u01ooR5UY zjO7cWX}{U1+6JhaC3R1*1}0)T0QV;3NsFY!mp8a+eyL%&)C+ijn6t#XUn|qYxGr|a2wz5Gav`#Cp@xZAdI1oed zLZUKe&DH?MHVplK)*toZA-~8CscT1+mK>5vUTPJKkgd=YF^nnhMV@JU6%OtrtK9Xx zs2a4ZGqqYPPSf~IQXY1yMYRm0u2ioOC-ahKRoHjwOj9Gy`t?cDst=3;X$Ca#JQ7aO z$SZ255E>S2yM9U6NhRF@W{0L(Ex#I7Ciniz#c@0Sa29n`Y87H9wu;FOSuqP8&}$Jl zv_l0F8;{<1-#bcCj??~Ubd$UXMyn^8%l0crlou$k#Cdg`BFo^GByxuCxy4f&;tpV+ zM!p*fO@MbgPd^?btss~X;-B{in7on6ybKVJ$a-8I-%;2J6RI)np5e1~f-;mP&X^{4twrLQ@FxMjzm;tv;a0Rpk)S~5>s%yI%m~n3`#{Hz~B=!k2 zw5`yJSP+*whG%3(d~;eL#dMOYE_i#w55QR%jZQdN{%i98c3!pO8;E5&#I&w9lE88a zQB^_0Xv&K?4~@NX;gLlv!C5xp8g8HyR@Pk+_%~g4*-hN_!PJ*{gr6mMfDP`$eO*vi zk&8=I$dbHMGK*q4$_0gJIR7yRlrNSd9b$l(j}Y)FE8xfQ@vq6 z@Zzn{k%Me`NBP3h!bvAQ)V<(k&&Qn0vp<5d^;#HLr{rwaYm}c-KCFCR`MUBWu-%(v zl5|0|k81~({};6bKcRGhkK%FZKq4o0QRr`14GcQlMFXQ}i0Uu~JHk2<9IVihK=Q-x z9XUnYhB2J~LLMjQ`A>|0QdSJ6ZAmD6{&}E}SI7L@B`|~p)(-WvbTH}-MuK;qb1lz3 z7S@W<@)9N`_dL>TAq!nk#0h`SehEm3ZbH_;UuG21PoM|wlz%%2L3}bn0}hTU- z*=n8Ygn}PfER_*fh*IAZj%$w?XQ~i}pph%F1yI09z}~HYP)VDqK3KIrQ=v<%yJetZ zosmn~ZulnuJeAQlTS&l@!oT#ZupW*!LpPJH*oE6xlS>82Ybn z7$JCvCLJyYcJ5oQ2cecwbxxxQcSW^1l_rGJ>s7Ga$s~RLZ@>ar@l?G)Wi1QlOzZP!S4sLHBK8W0y zh$a6e5E7qO<}p7_BAbn=#Bw^X9GEhfcw_f!fvn#(5b@Zkik~HX8#3<=ALC zeff!--yQf@9d)#FNweFWbjsCvRn0P3QC6*Ev#J#Ia8ro3ZrF@R{rF9r%p#wyiz?owH8wb3&Ja}lii`65+!?bK*#;d#fdd8uQ*DzDG@CRNBUDQjTC9aT;! z_kgxVx$q9<{mMs`PbvRJ`KI!1IlCYWOvM;kvm-%4bC4i}s2npgjU>#}Fh|79p=98Y z?m5U!c~A36KE%zGFq+vpcQrpgFTCIxm%M0Pu7n-BNdDH5?4CI~=h6aUat}1ibHwrd z_-D|XMwpPFN@poQ_Zr=Xwd>|*vE0ceQB2-Dvoe~;7$&El6YrYPH87zzVlb#F)r{G} z@(iZ`8g?9SHbGzTiCuAmGsXG?9PE(^kmI^=oZg$cZt}DMZiT^hp%=IXswT?{scRyI zGb}G;u=rs^6fyx`kI9pQ(E0VgTdTPb+lTA1?f!+ zD=x#eY1PEC*5R56^XAfY#$`-5W;Sdqt;5x6)!4H3%?p(t)p)VObd`69x`_YI_6mtc z%}3JI28GNHrBNJ#=!xPujUo^`ag-eNO{QguwjO18e& ztk)+Pvm0(?g${kbs+B4fyuisNA#}SJhJ?fm%?9UiKuKqQq^kAf8wJ)v+}Sr9^Rjlkx>daG_r6Wt7x;>h~@FD|~cc*)DIn5JaUWAO*K*5b!Z z^2Ao-vdiA^;BOeKzQ1bJm7Mcb89{r`Q>MXQdQkb0@)_lG7|YC(d=i>V`h?t(1P?&M zn@KX5fvg?oBF(L;?r5w9b3zIUcrC-5nzr1>I@sNLE~`XF!vkS)7ZPIR4Yn{dF}Jjn zcqEBu{@>c{=B1W6kg^k5p^Wf^6?yPGHJP7(J9wb{j{JmMjFZdJXbI1CrQ!OQ-7lI|lHRD~4 z7QLRgg1|4;vQ|Roca)2Nk&+5Y%?Z007l~>Z#)R3>sMau>U}P2IqCGL=Hr>ok>w#;4 zfcIq+F-u!u={qfn~qYsiNVfp`7en14ck41Riqvf%uhfW^OwWP^d6^zcw z88KE5?6sySM>gwa7> zo;X{PletK_I_&pg0jnKc28X0eC_j_lpf{$K!em|8hM|!-8@k{c%lVe;^UM&-;#OG|znNj*sXj&$QA-4;tQA`dB_9PY=CetWg?? z82*n$w?E4I-P@y;C|F-#kGj{b2lMkm=aN!(PY#fsj3WU^H@03Sqdh z9z+F_vCU0F{^9r+L-0}J_s`5c{P0b)YY(3~b>_^O`|rQsw%hU?qO4LdG?^}9*zGiO zVX&!gl!p1jeqteEwMDq0(Kx0WE4Ttl3^jp-2+++0wbcyQ6S+kpj83r#QepL6CjBGcut(u|oxVh3_hRm~rNmb)O#RL3TP54y#(bgG5~t4A=YkQurOKcm^^ z^L-OR5)A|*{Vf%|Sjxd_u7 zTr@HI2=1{d^!og6SGT7;7YrSwYQf9A}neq#)1(e(G#Lh5Uo=6 zp@j(cOz#}|%&cT3p3bqiN4}Y(@-r(8jPYU<^q0e!6&pU2bFS>{Q{*?vQ_2F4lksdR zrqOOgXg!0=yNuX;I6H?HEcvuEYNr=gm-m8u9lLIvH5Z#1vAis+I_)E7wvTe-xX!am zm5@vP2rQkK1eL7W%&LAvgJGvtDmvny`|$gB!|$KNM;Wz(eipzRzCdX1U0y!j|JnXK zmtRfxUbJ-)`53JO{ue?wBFtjsBF?W!6N0ZHS7a=)5 zM@hFvk^Kv~y97oKVf@pT!3vg=!4MXM6`T}WmU~s0t6>pwcf1eSZb_bq*y-lw=O7uR zYY8ncs8SMSqeS|)tPgJG2!~*b&{eY0w}3O$=}ZqJ@_|AS6#bn$AKrN!tZt@r&2=o5 zHA1w(QPUcYBu#I}Z-`y4vh%hZtvyaDN@``xQYVryG0dGo$rUoUVR<^;?6B>V+b0ehhpD@T>%%B{+M%1aOvPUdf>%V6+wS?QGxv!o+X3y%^p&}0Is^uPvr zg6SB(B!T{~jeVqKOt2}FI{LD*OL|Z^W8mTB_!u1#^UG80TOVjP4cmm#6_*~ii-|MW zxqfczY*I@6N>t2BSpbU@n!-)7dag@cVfoesm@^riFjYyLL^QlP85Cvd~N6MtYVo^(4s3`iwPeh>|g3 z2a~1N!b0SFUVpYdHDxcGU$Wd+fL71+y~f15-j(y0T4z5?UJUoX3HL1q5u7L1j_-^5 z%zgR!iQbN03(U;X$>=6aP#wZfI|vDLZV2a2f+a>P{#y_Y-yGVL1W9_3@o zmx)4lfJ7K4p~zaroXKTOf+GJnXGyb#IPM_a*z?w(r(W;w6kwbOya~-5_{P zaX&9A2ld{Im#{{ypZh~H@IG2bi79_F>A~p74uyCQ-DV>5@TEV9{4c3Ll}c60Swboy zQ6fk}lnF*;1c+>##!Z^;b{lZO31f^0i~(bVX^cJXaZdxb`89TrX%FqOJ%H_3v(`TM zm8uZ-Z~mNm_3k_O-gEZZXQvhRx4z{Q(+(mnl)_~o9BCK6hFcrDgZ7#!ji`v}=!h%| z2S)*tR)Rs7yL4y*(t3)%Zm!rBS6GD!Ik*m?KX-vWa z!|WpS3k&dE4sFBI6dAa0o!64tZr!ryUrhd4j-(=NbB57Q{S_pPf_6znCWX!#j;LcH6C{kzf#o z3aMZg2NO~pKZYIZ(NUheS;fB>3v-2ig+~j&Qur1~N{n&Bkw2wbi1MM6<{pX^HG?{- zG28*1{b8QPJTp?h)g`)Xu#`l5QzcL2gy}FlG7>SIfb0!Bv$doYUbtS z=17IKt_E<7>DZ5qgPiBx5!$a>I8;A7LYBHHIbJf*U*WEC2GBk zvpvVoOr6FsMF(pz5ek^#@8sRGcIBr>D-p=$6-p$dZ-Ob z&<&|8!LXtxbuDUZ!qtkd0qU;n_;w)0)0hx~CiRkS5Zx+M4uU-J@>CzfkmSuwJ9sRK z=jN)FEBdsAxhlq2wz_dFKzpD`+G?)O;C)xX<~IXBLUtJ#rbP?!mY^@IL@YY>1R?)0 z1GCfyJHrY*vqCNEFkd$@jE7=IWTe%6^CcUtON<(~mNbNo;Dpsx4wg`t{RdF%fv3Ac zhjHp{dP3(97Y!*uL5DBst(pihj2!BL^F&k7SM<$;jv)1tGgY2Um1xtmy%eV$ z(OFnyLR0%ipCS9Ex-3RnhXI)GWZ!$#zu&y`PNMC;>W;5}{URU0r^)+4<4p?nAHfHp zcEv~GK!u}|SC_lp((Z4-Yq|QV>tC>a=!siCa}Rlcx4ipF{DvGYcW-{}Yaf4n_q(ro z&7(P&*+op?UbOFz8hezPFj5FU$6le;FncV>1*3HyO19Orng$+T`r+-`#o}vSt(K zRy^GE>Fe~h32`zt#KmfK~xEbX@3%8XwRDl;>$ z2MeSWkk0Qh_Iu2Ux^HBLd|6R|G_WXrBTQHr;MZGEhEdnzy5@Iau!pXrm)v?Y^-Q{~ zF-J0!m92+%Zr=%SW$Y96#l-mNY$d1#vxC|12UtGNg+dB?`a^JpjNLnhvxS!xo`z4S zY-+Rp24!x&m|IyPMU^?rXEj;E@Ow)jV zg!ApAE!Wi}5WadSD$MwaS%Vi1*T9er|->q;slX$#GJg{N1PM44e-uAXHy)B{!PZoAMhwfZFzDQ({JoCz*NIA#j{1ra|N$|H9 zK1H5VTx3~ct8g9IrBA?W@=jzYRcb#v3)c`5u!G(QhTZ~D&rwHe(1}YGtra>0x0zZy zLZ!1vMSr1867@PYA^IviWt69GUCoP~s8lj=GI|%4u>s#sKZEiyc_c}$J9`B*P&8+m z^Yz*J(ePh4BSShzHF0BUD=Ko;D)!DZ+8V|>=ch!*@O1{+Wfhc{?nPD{dlw;VpUNZx$ z7KmZPJoJXx&}`5o4BLTXEm8K8N|KuXT&-XCCkMh#BW?Ulu^y$4!)V+xO~P$E(2w@* z-S2n15h}eJwM%I&amc3a*96mLP{imdgHfNt3}?#%v}se<8iDQ@x1kHMo(g8_ja{oi5T`q{!!j78%r9Gim1*mH%PAPXfblo+1YQ>4-aflPVOIZH9! zE10$P$+Qz$I&-B~o^k3?ua<>N_DC$c8|6W^*`<ptxr9G#sovznB& zT2Sm1(|(2gN3UKE0-_yq%qTJ@u+Dg*BwIYtN`{LW@VK}~hgoW&50p~x>@CoLm0-Qy z877T6_fpPZw-6Ot$OttXD+0wl0~*+cL$JL&lc{S1on`5i=0@#bll`?5byJ*$mN|RX zRo#c)_U`-7zVodQ-}K^_+%UXz32N%z`K@Tdi|O6 z{k!(x_{1LnQC761g)#p2%@)okWKYZYBITO`8wN|(08*9t26#Ms+PrU7+=RN(- zvk$!M*P1hDUSb8MFco~hT%)~Sqmz)bDeQ0DxtPQx%ShZQd%6=xS5&GuZEO}UZ^!k* zpm1XP6pCRG9wY2;v&nEhySTmH%ete%CQ?)lGL=QKJ4yH4MY&BbbIzf35W@pi*0!(i zVZ*jJXFI0$$?BcUzGTwU{82xF60Q!L(>~+k;=dL_`VC%pEu~B=aasHzdcHja1 zi5puR3k~b~>Y=%G@z73>d;$kcUghV^%h0lKPhX|CqPV{PqiX!K^@XCW zE-ohR{d3;R%*xy%=zls{T3>&5T_5|`>Iz?^6I|$11@nMc#1T#RKb2E*?@!bj!5qgo zYrT>Bbd@MPQ%>76%rDQQAhDchJ?HhH7HjC-GE5tk?2SRld{7+VEg0t%)*}JMs{?pX zOr3(hFkD8KMcf53HL3CdBi-YVXpoU6&TX0|J$1k|?sa6c1j4U%2WSJ=9)kjJzT38M zzJb77a_bd_ajhQLB-Nw)xUjFf1351>?bLnd53MD4|En#BxihBC)KM=ZY@%o0Ue-96 z%>`On9mT2Izn#97edL_LO`vWkLbw*Ftj}t>WdESZKxYw{PF5p{rX@tRjMP4Sp?(%h;Utf+ zMMj6o0C}9_!LwSz7rHLqpy^{w3T;2dBzwcWJvsNWbLW24lf70KAIA&EU_sGew-^_E z{MZ9Fojd$*f2h85AiJ;lSL!QZLQioZ+a&F%>5}zQu-MUw_^fI^y0MTLMzWCqIl4s0 zx~0u-8NRdhqw2X?SzH~jE>`kCwOb?ie#amy4>|6w<-(MMeg|~UgNhORMB!erl?!Ab zyORu?G41w7d8O6fNfv<-j0_KIOEv=Apg+jtS5OdTgOpEMy(Xj1Ubw}07TJCB91MGu zDj8;zpm%kiGgI5r5XC!RZxJz9%_7pGt*F;nq2}RYX}(Q6{P3D@%}#bdzFey%*r?b2EnC zro5djR-#9|##*DXR%C>fq@`ElYRL}#M4xZZEcAMMTuI`pY8&^$ej0HGc^LwsK`7l?G6LZ9P_8GPOI zkQN}#84pmyQ8A|2d`%UzlJ6fO+nxF-KZaMaXFjK%X?oVHXFLt;7~+9l;;d9QU%ONS zYgw9(G_{mkn4ZIkYlL}DLgzTweUUoM4c)RUOk?tAjMr_nMN;C>f6wV@%pt>R7%+t{ zV>EC(jQGeo(KR^d=hQvxmTOt=2SyufnL~-G^_E*9x)aw=dsYK$NpM(Rex7NJ-GlMTj3o}<6-;L81XWCx z9Wq+A_~Yu{`CgxU;p@;(AA+^v9%SLp5t0$|D)+bfWRR+WRFQAE(;YJIrwuMQ8A2Sv z;#FuyR--X44`AjZ!Ta=p{1QCX!TGZ%2=(h}qz9gho*7abtdFB+;+cXvVJPIv=U17Y z1nxCp5(=$&WdMfal|=zEXSGza`AQ|VIB|~kOG}y^N@yNa?GjN+W<3U$V%VrHHz)PF zEvhTkknuRCT2xtiPjR_acZ(KSzN8vO6`BaE=(N&d^k`EPWy{&wnSq5uw;#P2qf4)X z@fsHTg{unJD1=4Y%>>#w(|zRz(ZCcR4K@hwyJFhIB&WYn$*cQGAJY(_J4|$C+@JKi z^r~A9zi_TS`<$~+edPRguRpoFeAT|+r7{d+&n%WJhEX&bKl1oJx4-(&^|BKhCa0Qa z8J->Mq?S6?*H2&Z=rso4-nP#jz5dbRZHKdi{#S8a)QhFrqNOA<>mECF_~e}ggb-)74xyw}zE9-kkev+Csjx;Xf30xbGz^kvnQj_%x~;}2ZjLp0P^5<95))n; zS~C^hmKtpolcFPqNvX+vD+v7iO;h-@DpTU4(kr)l%}+{{sAQL1@<%in=qd-QuCSpR z@;NWWj(7{zH4wRGHLa=)@H*AZ&}zBGWpWki`cd8{pP~iwXJ8k03%3^@M7Hy(Zzd1& zL`J}AJm?TZKjFb9kz!&SVN%|#*HKJw$k2uXNPAmM)9qpO3Qc*=6PY1leII9o_&XL_ zgSwkYUh!))-QTx}@A-3QhorxB)oh><4pWP@iUzxX?v9iD)m|vE(mG*@MvMk5Cvs`y z?T;u%Y$xSJt9)SSdc`*3*HhAdAdsBVq%&7^bhq7})l2D&Yd1OWG_l4~!{tA=B8mxP zw$Z8Ek4=)2f=^RR2{qXx)A+z-2Zzr2zs-I_mhm#c6@JoLC7{7k$ZzQwaI{S$)JpJ?+ zp8koCzv@*Vf7NS0_VSm1?B(RG!o7OSk0&!}xu!W4hgU1<%sBD4uXe?W)0Cb$`OFDb z4ku`}aym1K{jIAVdGZV)r}qrG4?m5ilbu&#@wpMcZFuN(0Sdl9H38U z7P+d%T9U@lfAINeOzu|Q^PbPV;SHa8!`(R^?DT17z=7lb z&oSViE4Ie22J){w-J&K2WH@ z+J80J7cVQk1~ism#5_M39oCy}WanW_pu2!>l5ahCd)@H_nizw@K~=*)m|i=X{^`S? zj#Rm+RETAQG9-m=fTa`Hn2yS)jR91n?K~%EvX``GI+e!L_YyH711NBiJEPzlEFp#> za0edKXN`Ygn=T1)vBmX+kqD_)D~$AXr)Im%uwrRhPM{ZUBAx3H8EzN#z_BbDTLyFO znxpr~yuH<)>+N`MXl~54*A2U5i*hfS+b~1d+v&}u76DxklFI1zE%V3PSvU{YQ3TRi z79HD?i7gltb|Nj?fsZh_MezBsSB`?_0phw8iYbvaV9YAoB`Ai1;&h-HTwB75`5{)! z@v&k9vyLhE>Lv|MP8OS(-MhI+xEaztpYb=yZpkDE7Twr11Ivi3sR81xQ`*^yn!4VMc6Le)gt;u0 zX^A^kGpI7VQA(traI5Uv%m`R|H8tj7`RR2R8wnwCJImUpSw_!1%z-gm*8Jh{YLE@p3!f%G1DeLm$h*nM$mhwQ6bfk%u^W?3k_|^Hwh4ZEqa3h= z;WynJ4;5h;B1{N`&I^PwDLFbtM#(q_ucV3M>CJI0>U5#vYx3eoc=9TNTa6G@Jyduu zoO8XMoYiQ!2dq-oMQ#*Kp=ByA6l*x@WtaV|5-=!K3T4IlfcI6IM@5`soV?ns=_`6W zgr&j%9inWD22tUU7+4gGSTP#Jd%&+eAZHqZnpY*6LfiJ>C+d%S!ng?ylg9aF9!2O( zw4QIsE99?Kr6WlbK2VGd3TUOfbkfV?wDZ(j2#HaZ&uL|b+4Q^NU<@}9Dg@LcYYZ8* zQOnEe&Z9)wzU8A`n}S+?KabG;= z09NKGw-{j&ZhC93$eDggj(t;|YzW26h`mRN!}DRFnhq%*sY;co;$Sc$fq=E6$bq@E z6EF&Ngez-8mzbdj0|ZRyXIB@3a>P8L!5C8A z)_gU1q;K1L)H3+2hNDL?UxTwsP)Q*ST{=zF(BWf>jOJIk)g=%BtQ>D#`z~!?R?lkX zV5v20%kr#?*nQ)|g$ti2|C9WB;gy9yB2{u1y^Fq=evK8`HR#_`{*7c0ev08lQ%eMw z5}c$pA}(7;a_s}%zMX6VR?{2`d+85Gn)YyI8^X#s9^vnJJr5+jxZd;;w7Q<}Nbmhj zk*1d}lhdCKGDzT($&dJfyRAQS>rNM0%qH$dxNe#+T=^p*1Q7lw`2lkFAJ=%mP{5QHfySXSlvi z*0C=K!;#WLhtTxv(8J?overk!`$->F-zZs6kj|+;Sc^fEgub=nv(73RUOwoisLf&C z+ut#55FHMpmQA-kTM!Ov!OsOIQvz4LrBYzo7_Vq@mteo_g08(PbdprS~F=u}q$G?t<1t}j6V zYRobCGhzt`0C^mRxQ${+T25#frf$N+A?zDD{}?Fnmg(6X`bNdN;l&@%BbGIz*lcD3 z$`3X4EPiS=$)EaCEW-Dhhbc6<#wH$#x=LRM#rH&N`Mhzpj z%|@t`q^uc10MkMDEgR>cfMU49z%Y~P(80PXrQ?A{r&~5s5PCMrXL%v$&c^=2w?YM27Eu)_&@t{0L^2HkYzp%tc2_3Y_M`I!o6 zO?XdR5~gE1t%@mKiIvBY3L!x!!Re3PE_98#ktucLA{M$~3)Ia_>6gF;=JkeV!>}(E zBTL|dLsXOm%nqeSGEl2vn!2F{{clM}Itr)zc{uNrg@+3-1g&M9j?-R_asw-9Pt@-b zzl=vYs6SD;8u#R!%(TCv zp_S)O?0@~FJaQAp1_W6vNs+wj3g}%Jl>?%|@&^MTSZ;S(HhNxdo5IvLH48>CD2}?x zT4_o$>es1mcD;79Y+AxvUKle&@|kk63`(1~8hY;B%<5(s4VRC1YkJ4qs4T5Fhj*=^ zs%~DIZ?0XKFRT{|L7HLO^NGZtMCMr`M5f+OdP5}f{vkKfOYGa7igUaDk|X<%Xd1l0 z2bD_xp0OkQ|KP!6$Il-B;IZNG*pPg1`r)M~?Omiw36DK^{P@|~A)XGps{{4>-HZOl zdSS6JD(n=F7tR!JFFaIuQQ>ukw>{ezJlj=4ece$v8;k}L@ksD4RXMn`2|SbXpX~ib zhvdb>i${A;r(J%vN-r?zQN?>2KXV_@@OH@F#kt@3r#}0pH+}X^$aWo)=prNvQpuPrdGSpL!iRbi+Hp z@V>bh4{x~p$P455eR1bkKK6=rDD%K$OU66Wz>6JTf~EM^bAR$Lyb166>F(<1KEHDM zj(w$5r7wKpPNP^fqLL;`)D(^fg4!1E!>ofYJz)TfB&L&9qo?jMB6i5s*fL=(lPc?0GU+@@qV9wPRNEmx}Tn-{80EU`B!nh>9gbv%sqdiOnmT zMk}(cS0gp{rj>zHzln0>*sy=cYYnjhTOa}yRTo{YU@1g_*&fyTLj5S%-KjY zD#aReyIL)Vvf&Ory%DpyIj31_`3)xOamk|%X+Pf*B3O!S&U9GZU2i+c4C-CWOExv% zECM0202DRbg|*AMy5SKs+i989F6DcrRDpVb{0 z?h>}1$6=sw7`ci^0q&uaAAt$9K1i-5Nh?WwMr{YQy1?aJFX`oa(LFIw_={(nTT5Nt zxZNsxwkhb$Fd<`5v=fkahN+nmNYORW4rxiI4aYS?+ek~Udm^P(+L8v52GbP2DMk9@VIOh(x5?H(kUy@hEyi|7_!*?~e6xmQH zB`-Oe_?oGMHtc}xp--{a&dQ9Dm#MSaAxX))DirUy`vX-0(7O@=wR3c+T?uP9M>M2l zh4sL?@J;fowz@ys56n$vD1@-BwBX~rlL}zekxBlb~DWxj?!dSL0Vi2eTF$55pCJq)-a#dI-CMu zHCTiup-i+sGV0+LX_k{~C^k}=lNhBUQ!#}7H5GD;gh}IP92$9?A!gv}!oWZ=fQA5TVIL9XGH>!?3siqd_C zt~sbWnL=>nb;P6~=ng`Um%c?YnUyX~P&y_1W6&yLNkA2wV@%&vi^G7w5@_h4M)ieh zID@ULwuf$Mo@t&-Ds%n*l51Pe(oRP=IB6N7&v$<}4!E||W3)k9+tPIu5o1yK`!>^c zpSlj{EVV`ArB^pe@}j_Sy(^Y7sFnXtc2CWEEH zWT`E1X)k(>Mps5r(WizPrPfBL)Cd~&V)aEgtb?J3<~hRYs^j*N2Did{spDG0^kUNV z%PwZ>D@M>sn0Cyvf+`qK68({BV8^zrQZM<-k)}1v4%ZAfsUwEbu>%9uU5S>#Z==;~ z`W&=6)So>tJ-thDni}Xnnc_BzWk&ZfL!%6TWQ;#4W`N&&{m-3tyK_~Z_VcOzo0ZDu z{z|3YsZ=`c%HMQ4huUpo=PJVgee?cXHm?c8Yc_A$e{&QaY_|_iU)B2Rf?R(Tr zRsQ+HUbv6gTL-(Hi2}1CEm4pnDf~qm^uJDhKlLB>Q%~BuwKH>Qwf@k%p1T~MYRznQ zPdxwR$)A9)yflT=EZvr$t*svFUj5*MSCi|$)$Z&XHML z3m7FTx;=c4Fgb?SM3h6ya@U$RnsW1!ch_!elLz1NjtA%NX<$k;a{o({`ee3qFd_Gm z0H#uGN+il+|2ZVjyvR4=^L329aRf3F7Ff`Hy(p6;A<6fE}-`@0nI>0vz$!xuM;c9`J1Vk2F!48y7)HVwmU{duWIYUOsdI$j8Zg@Am* zG|w^97JnL>kC^5oylDKXQRH`=ZOqI((B-Wf~*mfkYL4(=GvTn>&9W$z=LSNaZn}JoAOJv#HFqg@atow<6&~3G?jLeyx zmP>wob;fC(4AaH%$as8J6_ltbwk%L0TFc#fr75{xi|XCSO5F1G`dglAwVrxQJ+PhR z7iT*!esO13VW1Rl^$@Hs8-*J|gDa3VTvQYt8rlN1KLCR~&G!s32?dg>DRM!w2yz?I zUr1UAf9lh0(B07{L!Nw8#K3A0(+ymhwqT2mrv^U)tjSZvb#OmPnoLSbALXs^P;A+@ zV4h8w!HDfKVcVK7v_oNwcWWYgK!v=)S1H1w)zoH^4C ztVJo7ELj1eya@_w-^;cBM&yYyi3J9pMNEXxJEzW`nj(_kqFDsK&jy1`z#UAnzO$poX9{xRzk^%| zaMqDzFO;D-%(JJ0MT|Qry-fo84XAQ)5+mfej|t#AuC|^G;zUNEkPrH!-e?ddv4}yN zBHu9M-%8vE@0C{aDfoNe`^7BMcu~!XI5~w!vy5mU>;=Z=fx#7nMsSL#74$&(UwV&> zcI^Dm?th*E^{7<6>5!()u0DkB@tITKe9N(8 z2Y&jF9r72AkG*JTw@*I0I~aX`_sbdi>~6aMfk(eSB7ePmgnV-McgWVSoh8Xg#l$bd zb6*cfPT^?bhQd8)n}rw>k#&(YU;xIv%9J1wVAr57EZP}PdI8FK7utF}LP`*+GF}Y8 zV$bs`L~<6Dbp?D88NSL4dGZ#g*#Ld1;&@({O&P$_OzK>rkk`BLcGEgBzC^3|{*D8{gY z;#T@7Rbk%YJk|WaB<4%a$OF|c}{g+Cm z^pTGgi+6zm9L2WLW>S}^LLN+@(xI__ZJG|49WuLCEK<{gN3?{Nb*Ve2a@eAqx7DVW zV{`6qfXQ%e>9`wPQohw9^w#RKFLj)M{AK_=L)Fmn-Bq?}tg z29+agfXJ>6+DDjLL19rZj$77K(64TXytF=Fy1$I}>Mf5vGI;*;@AzdixPE10nX{F( zPW zbuz5a?|!}5ZXGXp7ycQ>^*_V7z8}WW`$?BPA6B04kX@C+(dE zbfT|ml_!`9Xn{fnx|i$}Be#Q)P&o9+q|@t;CjA7HUkp;L)g4{f$IVKUSO8@Ces)U#5F1Mdl5q$3Ro(YP{$Dn zq6~&5nAIx%Pj@5{?ARR-Kr>K;#<+W|6!2K8q(CbSs;LyB!5X5ru*ub4fy9uGF2)KE zM9zSndkHak1I>BzR~i)zY)kp-JMTDjkVJBh)ETu6TUb7#Qi$Jd^R%My8oE}e_VS21 zVARw^DPi3<4}@cS2BEeaS{TYkHF##@1(9yUXPU%q9hau9VkJT&p1=%;No$)fmyS$% zpv_@QV5azHcE4>=hnUo|L6*A~GjaD13`tv?PgW}~33OJ(rL3&eR1%5e(g4F!W3CaK zCS$_!4NxhBg}bvz?nKa}X13KV#&azMwo?zJtfL!<$fBYsx$lPD)Euf)5+MSrK}`}^ zU_)DASyK?lbl(Ou8`T*%U6T&jGW#5#ix9-JRxH+QSugcc%cFr+j2ht*L7>d549Bz` zw@ONWP;}=Vj@cbtZo8;wSjK8lY>i_E#mP#u9=TEw?JBcbN; zr3#d5Hk!WQ7M1}EDY`;PXvCCb)`Z30VvVuT`$uUZRLd5+fmB%aqNK=`WVd9uQxF#sZY-O)IVv=yZ9>nF3F>`d65lPR$(tO_GHjEZjzySmTc)o^ zR-l_iN>MZ=?miR2gO+W^n8}VBvejPDs(~e8#0X7SU^iqep{!yRMS^@%3U38fFE)z; zxkq?Xa@~3jj5BOEXa=rXjO^{H^O%HGla8H$@>QR~j|I|M_lT+4%x1g4Y8NBD%1w`G zxPNV>Dbqbu1T`2up}(0zr^tFU6)|O&%S7OWrUiYJcxA4a%26<1gqxUOciJrQQrtgv zqN0yOy6Vm>`932h56mZ`B_1#NWU0ao0|Q1~t`Ve0Brqeiy-iPDR%?mBxGJC$Xad9t zRYUKafZ1NFx}5t=+O^i2aSWQr5vE2Q-1}vYctSH~E!*?g29|C*WuNodmbgEwc_v}f zMJhHJ5`9Kp!Pcq93|~Uq+cxswVs=uvdr%52q>Qst5eY_g1BSn4+6=noFf8gs7qA!@ zTn3g2W7JfnyRdw~kVBmu^I$y!a`J_RH-hE|tA4wKOQ2#FR8Y$d)?(1SyZ9l3Mv*C4 z4sr7n(KD#N585C;G00Dm8mCjp6DU+^chn#Bv$ZLAS)9~VVhqsAdKhe^$mv0XEE2_A z4|;}1c7IWz_wG^MgV%W~z?|tk#?Z^9QQ2tVMg~&=m$Ktcnwr8*oXOFbYwnT_k1ZQc zvEsNSBEc&i#V@iUF3lfnZJ_X;7glbZZV)--tI2Vb)=giQst&SX{7h zIU1`)n#%in{FoIvE~w`M>S&vlfFY{RGSPeKoAH&+<;{eMxXQ~SXVEPm$Vdb={XN9^ zVK>d2dK#yC?YU6dLcv%0z(1{QhYuCLL(1ef^6$vED5E`kl>Pv^sKVN8nXQBVs~kqk zJuSN{e1suPD$g5=Y>>ojV7|v|+hiR&2lt*8KTVdSl#~sHP$#)SF!#|0nToGYw>MD) za%<6ggR1U=VwI%r$7>0uPy_uJPoe80Au$gt5{`h}?%@qH)!R54`iS;baJ{Sp7p_M+ zR4R`^8c(3qac<1vUiy@P606Wv!LXR%rVi2=1_`L=bdV?@b!SVZH&E0M=%|R-VwXlj zx$r@*!=r60bX(RLO{Oe(XrTA=&oJUwb`dTY;lV<#;P(~?A`wyloE4b08Cw9I^Qv-P zB&u&wHDqRm7R5oVNX29)!zfs_K@fE?9<7HQy%9pY;s|;M z^t>JdzH2lYAhjUolZxLYO?kY=-| zuEfWL&dlI>^75cQqN@Gg{L83A~r23%zyF6AZm;UAEGST+6RM(Szi*yz4tbC zW;>+SB05<~2>nee9NW-cim|DPvu*Gk-hn_TZ4DF|AD6orvU8Y<$(GK>>TA?YiG961WDd3fvFS{J)IYn=Hh!VVr4;_5?JPgIL4rI(PG zBJR(To{K^$f{r`3j@f0oVJOIaqEi?$2I>w-no4rq6@f8@odwU~d1j}_Zs^SZtE+2p?ED3UI(9{=ZAubdOx6vm_uh1!Eh1&~{7Jj_& zn!Q_)RT82o?M*UJV0K6nfo(WJ`w$5i zCTQ`FBRS4s1bmR4&+@>mr*<@`J_qwvzMKgG`Hby5v3W}XlA@~CA zLS+Ww~pcA208E@ z70`riXbAtc1hTH76HBL@>kKSNm_f!2dT zM73)S_B2KiF@>h&P%apAFkWHQ@(SF30T+JU!B%iz+y&VEmI?S<3tA$WlaSgOs1uR9exVO;bljGyT zbjQYVJrLtMQt;%sSG~js)nuLOCv|$QXt%WcCDRRsXXGXdY;~q8 zwn=hSghHSDv2j9=y?E0q#&OY#>-G3#4gMLSVT6ZduP1L522T}puK?2%%s03+(|8A+ zJQADYI^#yU1j>(bt-&*W;UVJNn&$Y19&qe1ycu!~K&wMZm+s>rdtk>?rkl}V z_E}83c^=$8qC;|m10=ptUfOhmu5{2fAGK`}1Z1vQsT6nLgRjp|OKYp;^no42vW@Lg ztM$HKyWVK^^!nc!`Vm8a?$7O=NuFD*?Edr7pz$B-4>xS%6`;e_dyU>>?|AglcZ4kG z?D-5WsJQWV;b`F++*QWJ<^yzT!i-lr$#S{^(4ST04SLhYlNFA}CW7xU24j!MJIga8 zCSzt$+yNkkZ+`QelO){WqAa}FtWavV9DTlw;ik3n!N%2pd}SL{H_#SjDK;bs^%?@P zQy3gh+Z8>dI*Q`01yZ;GKmK>W`(5$@C^3$%fC8l#nH5HDW{O_LV7)lf8`r!X%F|VO zDU?^y$h17pY+`A%Ms@7C26-hGM+#70&aGq6SCjJvUhoQiXoI_O$19cNoJz zy9Xs+1(krFJw!-?%A-fpX~3scd3jb8dH~Hml{X$k-PJ38fC+#Q+n7r7Gd!Mi{~$)f zD`}Rrl-ztDdBLx|z%pLKEuU~xr`O-~^l8n#?h3Q0{jJl02hyt%v2N+l@Yss@V?3s7 zUw?$hhqtcgK|AIz;vwG<9;q2C*7m9vL>5A{S44AtU$)OmOrJGfYl#w2*ow>jnL#KW z9(&9%zRE(&nQ5mb$6V4L)0P^`qU2chW$_L_TH-%0mKvE>^ju!3Ag>sG6?sKL6l#Up z!p((y3(qaQqwwLvpTcZhAY0@{au0bWc`x}j@&)o&^k#Yoy^sDFeJy@?M&S&iYz5+#z}FO&`6)V7p=FIF*?thiap*R#6#EDfPMt$J^!%g{#``#N1ub zy6H9=!7GUP8sS)k5;0aQoj|{UaSZxHgMr8!p_3d8xKW0@1OwdEOk}(^$)Vtrj*RcX|^r zK^r9J7U|=u8R{w?RZjL~2Qx_JM!(30qfEkKo?tRXH^5{7DoGFXk*U3lbPeovL;&Na z0`Azz6u*<|sHb?Aa5{hvw5A|7*loB;n8`KtGQfPw!0cV6Fau$_2#IW;8E!~4*lao; zV5!^4lHFjKv~rZ|L#m@SRD0BFC6hd@Vmd;tvD5oMEXy>lgxtZeSiJXURDf@N&dLTl zVgEgDr%^*6yx_wYLxGQp27TKF!&2kYt|iB>xa#Fgr1t2T=;g!5U$79^P7&+`;ailu zW!o|opbG;to80t49xK#1(aEp~+WrYPDtSWuH`3r}=5Doc=p z`HeP3PuW`-QH82GteFl9XV+5kOCS%Wh1k73Fc@#?#*W5Z2P{-64Kz@Mtu0!h1w>Hc zBB)*#lGu{42=>VLoP=jDaM@>xVDnFMBgvGFB5a=%Ib1u5X(M!jq z4@QPgOECtWP@bFFXbr3I7*IqKf+?|3I-=&KvAT}Dyy*N?Nw$zq-{Ou0)dI|6@7T4o zhY!XbjOyZGNcymPg;u&>3n;5M0@uD9S`C!5xzG+OCewMf2_=DQ!|nD=&92R83k}wx zDf9y?#sq2$Gmakb%cOStFrEj(p7FgAT&p$p$30XSv*rCln z(cKC0xKyd+Oko~?t^>P}w=kgwJ8Sr!ZZxlSWqFQ?Q<%XHOl>7WA_`LA37qElD$>es&#Sn4Y_ke zN9zo8NE##$#Dn1hHW)msjX}yS=zUMc7MZAa&;}(5v~{e)hPa`60X1Q0LYBv`3B`$I zfaay=-c3|=)x88~Y#Nr%z@P=yds*pr7)$O-5>bO0I`NrnfSHPp77-X0=wdLyrGY&u zbYYwP6k!vop>pZfrLeGnt)l!f<_U{xo~BE%c`JAu)67HDx#~DVZuMqW6dv5uZb;pi zVDf09Vv;))dojalq^Sfapdexs_^44*VJW1HuG0l*1F#P)!!SVKhi7qdw0R&IF*Xot zxq7HdX15N;Fiz`RptQr>vln3u`_7E9pw;1-OHR|=Zx^eMkTNXcW(P4F?XrH?qI1g; z<4SEm4pfAc2tLvD*+s#tG$yAEKa7oxkmhRlKB&Q5FR(58@@9W)f7NH^+^GX|F7%`O z5#MK?St2mqZHH3FDM6!KIgTdK9fnNADJxIQ&vYhn`Ckqc09x1%K@Vdgk zDSW)}*~0G^{=D$t3qQbAFXVc#tzSw0f_xtaibL1v24V+Q_DBr*nd}|O+y(|i5Gl40 z9Fr#}Q$fGuf$Zmb4bV^=G0)(>Ud)OQrF2aYF|cZ;+FivQA|_?@yA8InVp~{U&(L2;_V= zxV-HMl8Fun7oSv7$KcTp%^S9}MTh(0n5;v$#M2(2@pLr675_-Vnr1Lb#fD0asKe2{ zj0Erx%r)Dl^d#pAtoEF{7Uxz?$E8A7v<7Zq3$XG}A>x@+TV*IB7A&x~q1}i)W1N>c zm*1l_RsTZ}RQ}bTM?BAp;}w-U#y@SOC#|)WF%JZqF%^e?DZgKaQ z(HD%X=)z)J)wCq4R-u7wM^W=d_i!LQiBSZ4HOh?$wd#~d|5R4zB0MIVF?^MaWf zVZfR!~Cvz2XcLBu8P1vlL9O{oJ(;%MfvOKbT84Ws(nCt24F#_ z)g3H%&K=I!_Ka1oQc|tr_n1A~l2*O#ny&gF)vd;0TBTP7Yiq0i?TfWzN4T+bz(Vm> zO*E}oaW$s7C%2iE%tVd82d5l8%8l)VsHET-S)+FSe*Pqw!eM~vF)iL{Xj-{O$@YQW zadv~LJ@fwkrHqR-tXh(X5r(HG38)NpWIQxekFrV=cPndEZp6@vS`d1R%gcTg5t76@ zuhc<0HmY!19lEGqhO=Ufi!a_yhORp#q;FY$a^v)gT#_FUQBqB_qm(h#K=)5O0&)Ij zuqpqNJP9kmh8Zf!ARsIN8zbwI&5!JU<0IcbcXi{sJoz#HzV&ZUZS_d&3^ zJj_l%X{T*iq-GJQh^vw8f-1Rx|L(V(svy4?g!8)>Zh^zCzkK}YgMoFn+B!-;<6D3K zMZ|Po_-Bw8jQn=N#;iXRw7qbbN+pyX_tOwD(w%HY+a~YnH|pH@Mcv@9;NE@0=idbz z{TB?)$l|7L809}6|MY&{)&Ef^-_Z5l1{@ZzUN|;5x_Mk-E%&gaJ0RIy(!{O6IPHSL z;Gvrl36#dG$Y+VfZ^9$PIV|3JZRWqrxDIHB>@*n>aUdx<~uv+MS z8_R6ukuDs^1B~c^ue#Y}Fq$2~x*B)0**F8kWs)(3ERQBl5_jS6Af3c$Gj&H2-^gr$ zp&nU^zMw%&I?ZdJXf1aq`<5-MXg#@a-;=jp+d8!GNz;6C_cu{I2#R5AT~SS=LKir`osqs z<#@7eTFa%A&D*`(S5CIzwYmGb*0o2W#QU#n-R9qZI~+aSI=9+de)nYZq-8z1(7Fz8 zt@vFp{NTdxP(gkRTIdMc`;%=g#}{}cPiwfs5#hc{dPL>m$tgKhVpJt@>11s(ZjuC4 zE;pE)+1$B#Z8Cs)+Gmb%(yTKK+iodvboXHwgXo>2I%j?T3eXA%cur|BzY%xhfEdoh z?hMzH%1XIJqEe;AZ1E^6yuu3oh!Zoa#;$%yCr9#=%28UXKnah+-Gp6=iaco6iDMkp z^O)qqJL!{!zfof#&ziMZSS<_-`xM9Zu{;uEAZO7DKY&SuyV{uU4&G_l&tvrwOj$He zsf0l=7_Y+%juu4Bs=s)x9Dv{jC1mn9$^K;bPj2F;fBwp(d;k0ZmKT$gBinP^yC?YV zU(w_X;}^%ibeI3%zP4lp1XZ_-cI zl7|mN?VWJ-wQ$2L@7)V;MOXuH3ls|C`vHz0FQjm5AMS_!XXkobv|d!_ExaE`*i{sf zYp10BI?3k(8WbpXC{JR>1=M*)E9qo&9<|YY2aXzL)C1y7q}7{6T$L-Ejbak7sKKZ^ zkFv6nc-izon*1SHNueoTo0}{4fr&U6+_86NjfT3K#fc41?YcKfwzjPex$|hlMo{8> zVb`wNt}}yO!{M$c%1gcVPN}ri>vcZ1uUNFgW*S&t!)xb;cI=tuQX%%x5iGh_47@^N zHH5?UT5XiARhqR=EcJHpUTbFKVYNCMQTr$7&tv;PhwX3TtX~kSLQ7Z?`oa`@+(p7s z>~XIU-XXkOct5Yk{)F%;;WNUsydHqcCb$lnGTwkVV%>x|1t}g$Xf*BMtg{HQe82n7 zgheDtJfoaaoT&Nk8JB`+&UMRp?N^tctHfBZQhEiCZ<9ha)n_FVni0#j!e&X3{RT8Az~sKvs{4-*au-ZECA2LoA{j2CQzac(&~|B(;$$nuLf*?VY$t z*L2C#)H2m(AvjX>siNeH(pP9fvnNYS(s0UP8KDmz6+ZIlvyar1pFdqP&0WB>hOAD* z_IruM12I)uB`yp6oLG_Z7;>u0EiQGiq_IfVrnUo?u?r98;tzfSaAomyb((^lBO}7d2+P>yap<(=r;ibc2p5qN2!eRdN`7rJ7xnwxJ zWC-zj0ry`@+v!qDZzHs(9ezTUmzQOg4gl}sJ9l(5c79I@J?ek?JI0+IQGj%aU75nY zvuO{3H%=rYn)PW)Vk4fSG{Y%=uFK^}nFvq$g@V8RB;7w&E+b|)t)J|;fobXBFjmT% zmVU^nM|LS_9MkJ5G<&YLUeb#(QR`@uBC!BIvU3Eu(=WWqw{73_BCik$$_ z#!~Aam~c{M?tXxZ;Z6Q$6)E#J5jZ{|L8e?^|#$VN1afABG=7Omr0; zkFpDSD4hcIM9LN?YFF*dCiCYBJtcAn(jlWv?@Ss|mLcU)QFS(#&!#zsixY@CYti?Kd(01 zB`CG+EP5c=v>eT-M84NgLN8du;a@w5eo7tILqCW&L}+d*(%L$uI1Kyi*Fv#Y^r*$J zUGERkUs*~^?RLqjP+o&`ejD5I1MnNd8-%-sw+LSpejkcx_*P(wu;y~O4sM1!usw*& zLS5+G63AXq&R`4dhcQ)(l|u<)0D5rQA&GCMV&)3b@Y~DI;Bwe z{6C!{gSb1LhxJt&QaF|*8c!5c$fOxXEO@k_*_}rXRDK)JH=22KGV8DoWyX(*Ta9ng zZK6_&1oeE9qMXi44p_nuMn;$78J#Xk2PTVKKOtTX++t~xlfE1;Qb^`E3UAQPv_pz? zQ^srW8ULQVfK4U3yiPLz0eHslcz*T_X1wy47D|WHlrMqs)gR9DI`3I>F5suU}BTQ(q+Vpnzo#})BEn35qQ-q$TPlr7Dr+-MchUlUDJO$0Y+Y$OJ5q>_Bbucvz z&#Fn5sADe{nXBqPx-SN(wjn9HAxnlTN{-kHn^~byh1R>2i0B^Eic~zbZ`qYx9j$^S zs)i(^i;i=L3Wmib-%zOz0O)(k3|xt6Cg^e~G5q{2ABfOfeWQ-2leO3}ZZjB~L3HxH z^>({gRolJFTcZxN!*I!~9L)z!{JY8)^|<4hhL&WxWjL`WX|DcNqdknZO0^}$dZnVr zQmb0g;$hoRle(|Vx@;LbqXx^01~wKgVc?tbI&)2K$}*AA9D|{e z_%WTq6+vSFvLVWZZ4H3oTpqzJNS>>?^OjuaL`U9 zXc03(2xlyB(_*WHu5Aq+uQ1IwK-mvWkv5=mTs;Mku*ZJlf&YHWe)qmBog2ULj_Yq! zVf#ZTH+2bo$Qw{Ov#g($&}|G0v$^ z!*l3sWyA%bB1l*W1#$2)OcZQ@1qlKC{8gKpdXuVcUUl!!-n;!bm8Ip%>S*=b`|b*F zCFP%6!@KrfbML*^lyXhWOZ9eJkkM9U;#qi&@B_lV!sEg_(aQ6fDy4063QYvBDOF=r zgLA@=yeAXXsj?6-gD33o7P2 z*KOv9Z$8 z-LPPIoQ+Pxi)d?_TY|)HMTw`XrB*U3TZ-8PV2@*P=>}NT38Ay{O&r?Wt59fbT2B|1T>M0O6ZZz(xSuC?>GU@ zXg1!p?bSlJTUfQdFQKzgOqtzo%RTw3)pTPhh9#{hx1+W++(=hn-rpII6nB zrf`XHHTFb-)GQs|$wz2rr)a1VGb1kSX_Ll;lteiJ#g@X?94KWy&SykNMC;$^QK4@Z zV~12Tkzy?qJOJ*$t)XRkvEevpF8lpcsutM|e=REE3=!6x2rbmD-P70H(01d&+Dfy# zp2phmoAp*{qu6Ljifw32x0rllGq!W^V-NeJ+X652-}}J36|Gdd?RAbReRD}(`WtcV-UpO%-Xj$%K(O- zHn#r;zIbT+26$2d#ZW+%!zx_)_9MT?3CD>Zny(vhQgK<-f{9{yb~Rk{z5|6<`Z?v_ z53V__xme_8-yRDSgE)}=F7Y91}xNJW^=6Ene{ktEfq|s z1O=%)ddBldnw4=9mN=IQa2M1=-b#b3>AwjnB}qR6Ifq>NDowM^w{u1#fYI$mFg()vU- zFw21@o#un*BGEOI8XAgvK*vyBG~l92^^0;P6g7k4hy+Wcnmnfv8PP^bV@*WrOqXwy z{fN=xG=dwZa;hK@Ekm+Q)sY$VD(0ji>IKcFDgzx-D!S4sFSOJ(BNKmc2@AJATD)S)Tt7O)vG@=E^$6W0hUy;Aj)~q}$Bs%+r za%5z$(9xn>s;TMNJrRlAt~(oe)HOq2UXGfvSjjGWt*!-|gW2xgv%zLy-X64Su2T#; zOPBZB>z)&Zt=4_!uz1Ab#&o8g|A4|g&TS;RBH)R_1G?&4sa z05lnHsRJs>4tpY_9zCVb%_y6j2M~s{P72S(nWYvVsI|KVN{1;|>tmUD?FsU@g%d14(T542v{SA#aqV)~&SugR+rs006BuX{Y^q&~C%HpA$ z#VFd`#bO&IyP(_V_+Y=$R2-aIiE<NMAies_rAih^uTb9unbR8hE0%q`Xjxjdy88N(B)LIkeH6SP3~>yzbfH_&W!A0ju^mBjbG zvLr<(&WP$|C#p5ksbe46vu8Ev9+NfC?R7ZiEZ0{sLU7ci0(y{zsbYaRg77`%t^sxs zr57~Kc-+JiigP9BHdm6JP|qi+AJPOR{lwXeqbUuXxyRiJF{}5aRq*#nQ_|C&Ldy(w z<;pAFh>63?FZV)O$LZvE*J|5esjaQmV5PQp=Ky^=uM+-9*h|ZntLgIOaW_=qO5HOK z9kCo8A%^_u3-4e1+ua6uOR^f;u7;Qsf0svN*~0JrOYl=dEUc3LW19#-4*)il&K+q4kXNLplRwP_UU2A~_8I-agm$$^OOVKJ^N z2f<~&?r0hqGTLX;@qOPlWhq!XBFTDMT(65(U{(QFw7F4*t^3&@-2Q)i9Yd1LmhNBd#(`^C3MZ9E_^4<3@#A^M zG=ow|B+*nX!wq69(37=94=!EPs%cu4N*4U2B^f`t z)oRuARY>L+r>5+ada{)Z8>OqA&Co1lA&)b zJ5U7tQ!8k~1^4_vpZ~h}Aop)woUslIuM^%OykGc?@F!qE0)4mwegJ+DZF@c)QibT8 zaAZ1U2(!`JVbh~uiru-(i73^ch~|mvUlSg+Q`2cCDx`lir5f7)bVR}fToz(}C>Npu z!L25X2GJl*2BSVffrKDD*WTgPI6a`MPl|#g#+}R-(SUjG&!ju1r7)aWCw;1TA`Nf) zir8^BajZ=TbVlwfEzUU}G-DQx5;`QO;+){XqFV2q_HV*MFoN~ffjZ)x*)x1k%1^pT zH|ns-3*U$IdZ$z%Je%}WbnK{7mIOW$oX)2?FA1g(4R*fvAbR=Np6nHSFii7*Dna21 z;<*4#{u|YG5#4?JmIFp-S~K$H^`)kk@2Tk(G?3Y@W^s?(+|WG7u}wpl^TWHE-}^`3 z0iXCaK(7bH0#B*3Zd`ZBF_jTas)@_&q6B6OuPy%VVy1&XmU%YSooJfZ#$nz}0$U>$ zEZSx1rtcUCBXRpASPD>{3b=+sb$Fttqg~YJDYv?=$)awFQ#FhbHmG4N%PTIMpGZ~^ zJ-`MP;rJdUUQ*7kg{GguR0(2P%;w*K`S=Z51t|SzT0pZ9eHaBr@~Qj=LULnTc3Cdmg$QQ0uy2cukJbbGWH9cvG0l%xzq<$(`liOxn9 zRfakREeI?NZ&fZCunVAKN%N|%37)@8nZ*(ncA+B+OJ0BtQr$T#FPqX9I zbzu*UK=NeB$>Tww=)%@~@3cc69|d8sLv~hSI_`2NDVi?7@}}j@&E>bDKk7XeMf}Or zewzB9woLO#kVyv>T`{$LT=yM~UffE4eDkW!w3#l=AEM|!Ya>>4^*+t=d;Uh_BS|}+ ze?JZVwtwXDiU(haQnV5Kk2`DykrM0oBu=l8DO_rdi*50|ep=U>B90*EO-$!L0?q39 zGHa@7#Hs5?K+O?+G$j_JvEec ziR$jCN>&zSHpxf|M>J>pPFo1OA6t5~v z8YBG?VCEw9fg?b(JxWzKyr_x;#KI14uN3i=q~al^s$v3DEKjoRj2WduQgK`yWRmI2 zjlp<~2vmQiiXkUX?nWADqNQlMpz!=B5$EX+SIWIo zcr6S9FF{VO z4AAVrcg(FVqgIYH5R*bdh73nZsjBU7>yGDp2tM?SZs;F>%iVD&V{SA#xpv@A3;ji_ z95?p{L(4d#s%1O)V5wL0Q0mKDKGDWOZ*n^7RBP?^6xOY1lTuUq+;>`DHX^zNK2p613;| zyL$dS{113YaD+_g3)dnZS@6TcXSY51Qa+p3Q`R;_ItjQ0YcDj?4T=5R; z(v6bc;2BN(yq@a6scDZ572PE-zhYQYuwiaQVYM`5Su|SG3)&yzn?A2;zljfT9~o8k z0oJn7GPL#kd!39>y zbMs6+kPP%Bk5#^|Je$`9PWT%0EawZ$-%i3X`JL?pPwA0wnsS8QvxHDK&TKs@)}WcX zsr}YUY1|0C)QtzV{^PZN_SJahGusE?+~YKQ4xEx#{jlAHDmg zw?xJ8&TDV~;lY`UyRB@!FkW|$Ugl+M>7*A_LgUKUy;hc4s~WBr8vc{TDw>|StV^P^ z8m@-nO86$K3$7OFZW&g>QWFjAfzAyOTUL^q);(9Bdi3tQA3b&Tkz+r6`{CD2#X+l^ zuGe~FsFezh!g{tbHo{6UkgoV+t<`R-Wxr84bXqRAV@-+*RrlQ$Ezh;eh^4KvtR=0= zd&){R?>OqAR>wBe)U@LSdj!LIY&X}aFAHs9BJ8DT=8o;4dP;G^sWmBVg4bVavo2ou zS&DzN9J@faLx9M-Ls~=L4@2^)IZf*9>2H1PW8eDN=dZ8&RX@&Sf-y?F_x5AZ(cOBf zt(mRlP4Vj{r<1gTFRO}orp8#U==9M0(b0UTPHe$P9{JoOk9_XWV6Pn4gD8&>#^;^w zuRYUl-maUQ|G`?B)xn*otW*cT|C&4ioqw>8lBFXKGDSGYttNnDWW zY{YZ6@UK10q!itM^y(%l*Dj~zqD-V1fyh=i}OG1yDB#S{3qp7Ul zbI-YB$4;I+Cz?UGR9-?eckX?nYQ%O_62%Ir)lS(`&&jHTE}<7t1&JcxfgX-!nGjHo z=#I@d(Bn>Uj$K-?_VOUdj(SLngLt}7B}wP26*!ckyS&Q$ys&W-x80w}Nbk=xKRno% zj9XWNyw)%aCGUg3#EtA%zx?HITJ-wgZLO4g^)CwxK1a$0J4_=HxXK!*!X?gIBAUrL z?JJ+CIpNR+nNKPN91SnM7Q{2op3o26-a{Dw|woXh**?Ea1xl}}p2m>w=(c4D<+S%Mw3Jv1lxZ>)y zO3~if9qY#N{n^RYIPkX0S01Dwu@iV6v`poh7oFgxXDtyW*c?nMj4FcgJgP*m|AVa6 zm+<{CyQi5SryO@_Z1hEw_Vd=~rcb$lG+m6UQ$ zr8^nV`Tr+44AF5JERY+nhUdGglf%lGw) zPd@)1%l!l(>ErLU@b`Wf z&f#x=8;(td_=@<9z7MA8i4oP*^g^c@Q0Cr_h#_B4q6yuFg{&ekDD8AP%Vs{;znwE! z^*dbipqZ1NE;SR8U-4eJ8%F(wP9NC}>S2$-nSuuH<2T;&qnr;#FBrCI1Cz{3O;)fO z9F`?$#>1LNH6Znr#Hd_vZMRdZ)hb?@Ck5~&ePVPFeV>?L(uj(~q_m_gwYeIsDB0H_ zDz+Pg$JHIP32djtW;1 zI=e9QPe$a#}*m3pP1WH)cUYEm~Ie)IOcWqbk4f?nFscy5>@1&t_~FxgZ`-_ERF4$UyDl72#XYeqikq9FsK(c_DAB70 z^dqf~RjE7&CS4ndqN1Vn&ib#`32Ht>L zm+JXN{-@09b+}{zmmYq6a06U_$zc1l_9!+tayux*npSJJ8)dD!7mf@rNp9SIE4bUA z9bDpfOeG4fV0^@nmh08nlL@E0=YJ3W4t^1Pgv)cug*Hps262~<_JfPyTS~jRLg{yZ zn`M(PR5#!Ap3UkPzIMl_u6ydK>plg&m6hxMb~ya?(eRz`9FFdI!+W>?p!4MYPd@qN zPVVA!JO=LxD}vBkU@?x`+6}+a_F2rw>AcizKEM%sjbf-L=)pv#acVVJ=Vr4>k&xNT$+XeAr%x@W+laGH5X<2=oT5`( ztJU78s&b%vKjGw)@}4 z!zDF5;PT54#W$br(*a*=YO1Eci+ zowhLL?h1kD{XDIHG=zj^+PVM2hlvY6^q?p{BviQE6BO(Lfoa*}mIlTV`+Pnm$O=>gN4g`kn9+>7G_G^$i(T45=IF2QI6(l ziU=;pYs3S|X;OmU-ToqMU3WSw9)C@Dd`P^%r2T>vW;N3qT)#K9?!WoK>$2*fc;oe{ z9wx7MV>f!u^pV|-UbY(H<>^csul$kC>3Cj`K^hJR(Si}v`z^v@l~jNPTJk)E@VoK+4i5*(8 z-%KnkbVE%uysLdj@(SGo8XP?^bf?<|a7!l&)p4l}|I0K7St&0-GD-`%XVttyWW+{T zG^}{DQalkPwiQ5>YO1a2zFoY{baltnRrLd2A$BG2ieI@tv>ih~SbgTeeW&UA8RyUQ zHTCDfgDD(>lkiG-9lQ}f1fPJ<>_jeNf|)OWq_&`niHKqZIc?DfLQXz+y!4T#j-2tQ zFMZrc@iB_-qh+P7`D(^~KGe-&B)xV;V67j);#~@LhghD5j-1gUUV{? zcE+9V;@OY{8dHQ!yal_IEIiK~O9@=y5s9IFOd13`zZ}iVyulng8~+$_t%{wU&m!(m zFXW#^34BkQ^BxyS(x50A6u^ce0ucuE02+uXA$7zjF(^6_Qu>H#N!1y*5SDDg!r0na8%|K{0b@%x{x#7q!hIMqXS zT|1$9lE_%vhjmH%fTqM0s7*?$sITd^jyt>$ zZB_zh|Fek{0^}M5!R2|G0#Jq0zTmf_DC-)UAtAu~pl)jt)z1DWl|HBH`WL_7ca|X) zIlbnK+K9cRg<|<-mxI0dVi23-OB)E`;JD=(4k<8s{e*zl#BPdlBCNCwg|SfyyP4DeNsV} z7}Ir6(j{rBK0)_dE-HCwM_IL?X^|%>;`eOy6Y&F|S)ubdO<)j z?(p8sBXs_#AI~Ax2;W^klAd|&%$Y+b{-Yd?|5fV!;-NG6BHSpgZmmVl z7$-B+NH)y)McNZ&A%!-#dZT?bn-i>j*T+Bp$KU<#*|T3fdsg`Wgnn&Ic${NkWME+Q zX7asZoRt^PZ}XLbn~4DgZVQ$bL+R50@BVLNYGr%?{8r2$-V4D0{^c${NkWME)C z@c#e<15?BQcmF>!wK4!jkOAW%0J+i#EC2uic$}3~JCYMI5S3)(ncejouNPyx)__mI z8I+I_a126@pd*lx5)%<_M9l#>0HH%NhN1|TH5T1ZEvd(~2~*XjQLBG?{aVh*_sJOB z4aFHqYkS)FN*~M=|NCTPLs>`8o0$zU!fpI8Il6012O*$*J zP2l&Cn1UUzFQtx4TCe4QLT3}nHO{q2&WgQ{5odjkEx59rVehG)+N;t-TAi}x^A}vR z#x&zeGP2*WXDk;vj;nXwQJ#%6@h|D0oN$M5P8`VjgfEQ$c)+b>e=eBj`dZcR>R6U3R=Cs0UdI-F!tOQwzh%F8KpnS;^Az@b>OrmD*pFhj zuY0mNpijvs-6i*;i$C2PTHlxcZUv7G{qHa{Ce2u?FaE|EY~vmMuc-DP8k5Wu`frrZ zSug$EseATHx{43#NxaJQv%nr0#y|EmV;ApFXD4$I`>(^d0{y-vY;qpq(ts}kIT|&y zQ#C7P*70^2+=*fk?>u}rg_}ldg`_?wK9pD^vY*RrHL_lSdx0=Yv(wryC!EMJsjieW z{>n4>zan+aSllbszw`!e2J_OHo54Q)Z-t{5@Ck@@o$p^}BozA<#hpq0+l(pA!jXIz z8s`Ci-mG{YnRondusvcW-+PI-E>J_9NZofz|I5r{ z^w^Z%axKpkAGj9{B+ufJ-q57ycg70m9xI>cv_29ZX5Qe;n1AdaB$EID0000000000 z09pW!0Neqf0q6o00@?#Y1GWSN1Uv+I1ndP61vmv*1>4ZIET4rUIP4(JbL58x0E5Hb*65Zn=F5wsEb z5=Ih)666#76nqsF6=oI67BCi`7XlX~7$6v87_J#^8TJ~?8+IHZ97Y_D9NZmL9n>BE z9)2F?A1oiLAv_`cBmgAnC7>n}CYC1pC$uNxDF!JtDS9c?Do`tKE3PagEPO2LEfg(O zEp#vrFjz3wF=8>aG88gEGI%ofGg>pmGzK(uHIOyhHnukMH&QpEIBGchISx5YIc7Q3 zI#4>=J03egJH$LXJYqcHJvu#lJ)AwxJ{CT5KE6LpKg>WlK(s+dLE1ueLcl{@L#{;D zMI1$PMk+>jM;b>?M`%cJNa9IeN(@StO3+IdOh8PmO&Cp*PIOM7PZCddP@+*5QHD}x zQovITQ(RPXRJ>JARmfHzRph}?3p{}A5qEw=`qaverqo||& zq)?=)r2wUzraGpQrs$`3s7k2LsW_>^s$Q!2t0b$;tjMiwul}@PwG6dfwkWq`xG=fY zx)i!tx|X`?yI{M}yhOb0y&%1ay|lgRzA(Q2zgEKP!=}eZ$-K%G%9hJ2&d|>C(a6!{ z(hAZ((xlTm)27rQ)Lzu!)&ABr)|}T6*ErX-+0@z~+Fsg@+g97o++^I+-LBpq-#Fit z-|*lr;MU=g<6h&gN@I@>dfl;>pbhq>RYY1OL=r@txM@K3t*umXfCEv5xTda~SdG1wciX7q73hPcUzwMM-ABx8D7z8!Izsn7 zbA@ugGH;;lZQ=k5IWAEk!2m-TNYoLbLGMF~Wp-r`W5m!jPw9;Vm0uRgU}$7LYRE&C z8M!x(wMr>=-$xQ%y7x(_Pw^94m*~;@0OuIdT0x)wQb=~?e$mfPwCu%$^HHC|zh&R7 z|G#3BGJFK+*yo@1n_WNX_`y64c4!3DN}I;6-G}?NF6dd%Jh2&}Rll{;pkkfCZ?|`4 zeMa;mE_9-@P)^-6ZtctpbZ3k-?=r$AyHgj<8y81(iY6US${nL-|3gY;we^wP^Y*il zr2Zq@fTVbAGp3@FSkV~ajB*UQ!qG66L9L08&2! z^#A|>c${@u1(@T=nVtW)Et$Hf2X;3T*bTFi%|fzaW@d(xRF`;_5Sx>%`raK{eAa4$Icu(&mVouKaMdm^{7t+ z3Mix@jc800n$iyK(sA0O6LgYJ(P_GXE~Ja-YIKIKPS>Do(zT9#n=YnH=-PB0x-MOh zu1`0h8`6#F#&i?9Dcy{2P7&RLZb_HYt>`kkoUWiN>DF``x{7W~x1-zB9q5j9C%QA; zh3-msqr1~R=$>>hx;Nd2?o0Qh`_lvHf%G7HFg=7GN)Mxl(inXV5e0 zS@djr4n3EiN6)7h&4f;*`E&2}qHvJC$F8v<;KK%jxA^j2kG5rbsDg7D!IsFCwCH)os zHT@0!E&Uz+J^cgyBmEQoGyMzwEBzb&JN*a!C;b=wH~kO&FMXFi0GNB+=K%*C@{mV7 z<_S-Ehj;ln@9_yf$*1@2U{rLX;0Dd4ph#$-k;fM0W_~HBrek4DNAI*>9$MWO&@%#jSB0q_r z%uiv#F(;g|&G9`33w!ei6TzU&1ftm+{N_75qwm6~CHa!>{Gn@$2~w{6>BgznR~{Z{@e~+xZ>* zPJS1^o8QCl<@fRX`2+kx{t$ndKf)j7kMYO(6Z}d36n~mO!=L5P@#pyq{6+o}f0@6+ zU*)gy*ZCX#&0V)t&Pfy5vyCwF_)H`+)_T5a4+~YzWvZ&3Ou4*?H{IdptKs(bVEyx` zRu#IXb$f@k%_k=_t+PT#bnci=NeVeR(ltskccOG-`>D#Zom$B>s#T4nuj}0-Eg$pL zG_@##eXYwvgt5dj6S=!74;SjBD5u?X8!=mJr)KRql?x>*CyX0g-Bf8(=qBwiu=g<0 zsl<+k`*x<%6k#+nmPH`TS{dojeKS@M)k%&}U`dr++8rk`cjclkqlfC>(NYzvi2 zn|B8QR3>@9l|>!k0I-EE#FnBcqzjWIS|}@aP?iEKH;FLm1g%ur#AC(3AxgO#p6`(PgYE;k4P&wL?mky7Jo{dN5(nZYozbUUo9Iwg|Ar{UqM);!sIrqoio! zy~IcWc_IC1{(H`{QI>6? zSTPeu1xapnDZ?2cFw?66R%yhEZl@K#!&(b%qzMpCC-mUTOE0Zgfhfg+1~2I5;2>OQ z&|(z(VvV}VgL$44i3&X+KAnmk^X?Oszj9a(8)r2mK??)J>SzuYtfg^wtZEmafp^IOgr>| zO)%laHdsilmw*kne|S`-l&-1wj!x{E<+w-^keUK1MgDY#Xg5~R+z?p85Te)>vzaQC zaI)Jr8LaObcVDQyR6Ni!CT6Xw8f}oOL5l5A!OTslB7A<2Mv~IK?&{VfMKZb6G*L@RA$>jVVqo zwUfhIlub7n#VQv^04rK(sH#013^Icx>}O3;pFAQ4TLS^Q#Jo`s!UyJZ?e>KU5e%Zv9;rw3un-;g`(DBO zMLTn02|cfz4neyBoE@&|H!26H7&j_aVzkG04;&Jd>Y%Aq03ww}he&D9$Dz-}Xy5j# zy6jchy&Qm3>O$^r$;d+jF^6!PK?Ct{6GYO0Xfb6Q0w0KeI&7?Ms!HU+LI}v% zV4?i`oiOwk)#CV8Ew}b%nU{&(JM>vmC$}(^FpoitT$HQR>mphUQ5Q@20pZu?&B4@r zg>9oZE84z4&7QUjo<<~YDjKIT_Drp$>01cmVA05Z?}++mGG3Z6TJ6=%-V2N)m;F8+Ui=_K{sIXVk^!8zRr zNcX;sMH_-)VqxXbJ5QbZOpHM9UVvax)`^ut_C`KOy4*Q_MBdlz+7tC_pK0IRm6O^alOJYpe;Lb{W9GKC^XMuSf_5*x*`)m7SqD?dH+w-nnV;Z&BxaDhJU z6dt*1Bb)~!aeAo^kQO%5v&c`Hc$YPCIruE{XJjW`u1olWS`I`CZ!m^pY^ZnCnRbiN zpGrgpS`x70!czu}|19w4LEACZbOtYp>rF4siy_{!eggx42&(|kuA#D04At6gl&HXZ zV}|}d+$Dk!qAFxNHTbmiF33@TOGJ(aw&QYt5i<$gkd%Gfz&127n6v3Mwe2?+k5-r} z5X!_=JoYDzMZ$cK-~^l}pE`(}*$iG_?bW^a8{%4HI$ibGE*P&d{F}7U`vipUqXXQg z(yK#Tg5TQyQXEK-D_ofgv(A&dQKuh}w|pnj&Vjh#v7~4wxJE@)1fI-f56*LdQE?5n zO9kb{<;md6b9{4Qh+>0#I=B+<8VubDulH;xjwl1ddrqdi4>mrdjk$F6G=PX8Wqv@O=Df))ZFR$u&FGB%I4n#CsR8)+mY`v literal 0 HcmV?d00001 diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-brands-400.woff2 b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-brands-400.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..1c640823badc78bb0a2f1b31f9eb6d3d8b29352d GIT binary patch literal 77444 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 YJa&H6=2|tp#46fOZwi&E5xPRu)e-9ZK<~m z^3S{;sT&{HMP3IZr0i#YVcp$fe$S-ri+DmB@a9c~d_Le`@7EaI)lreEnX0Ktt*H3! z#+D=%v&9W}(j$W+^7A7YDSNBYeJJk{L{Fko-qoqdE|dX+aY{4|xn_ex``)OH(q!Zl zR5!|#W}gGfQza-+2EGlfx7-h$%X<*`ppRjBU>ViV#S7TOxo>&1|E=Y1ZRp#;HwTJw zG8~7B@4+c>9SZ9N>?o~hk9f4V46n4_A%>4)W0jT{7nQb7o#`%imUKVx4O7RL;?}>#^@*d=^rjcfoP9>gd3+@SK z&$47UL%wZR;N{2$o%BdEUW&gN>x;*Aiu~NmDC@M1HY(WBvriUM@T?vGos|SjhLr`4 zr|+vkyBu=C|Azlp6<*Aj|LdeW4YW7;8ucn+Qr!S)et}8oHs{iVA$Q{@P@L$1Au}^v;0(BI+;GW+^sc~~Y+TaKb-(NqSVic_2K-f|q-nx_*f zOa>u=5YoK#q2S6
    MxK{Ey(cVg7FyKnKBTY2{RZYiV;$GQ`2ZY7*yiBH0P<{TQG z8%^&_CCkZ?wzD+4Ky64uTnM`Y!puX7w)t466@aPP219yg=d8>?T$7i$?s`b(tlMsx z84F{pDq}%>Z_?t*idgNWAI%s+E!ebZ_9&z&bZ&1SnT7af3XiKS!eCH_9|maX0Y|9J zd)Tk)HJ8oWx;oIl!n@kX$MneVQ<8ec=n^0MBa@GhceT#?b9QRmytn(+`bab+Asta8 z#*q}{P9w4#W&Z=2i+{1B>QgpjE!+DMR5P-vr6}Rs;7V|Eh1Z`TUVn}ol6t0BWghZK zm&eS{7J-pG7M$jnd+pp26(u!2LP1F8*Fw-j~IRq+P>S7w1*Yw`$V4Kj$~BcR#S#Inl2;gKzCgpodiy&+Z!VK$^V0Mat_ICo9DA&%M_9hV_KOlHFwEhehO9S**C;M>my-SG zjJE6V48-#&RMfPaIQNHwI>SdYrlYN6{+z+1BK9F?=eYnkJ|)FaB$y6osaWu-heHs) zenp)_x@#X;%pTNWBfPzpRtq*)4;L2?6_*UNd=2&PxcYCaxw)F~rdduJ|0O+V_t%!n zUi))bB(&7TB{o&rGPEh)>a>9P+Uf-G$1BiJlcq{pT@TG3xQsO)C4Q#_UaRGxi;fxL zU9vkqqvwN^FyE_XbJ@K4rG741rm!@HPw~)Ti6N}E&KPmRHnlD_sj)FBxnZi!(bNp~ z-z!#+qFw7wE|#^OhB`K8*Dn1j`-_XgiY8{6GvCKY$HujoHpNmSZSIxNnDMA}##l^v zEN%f1&0x64?Ew>r9w4}VDH6fM6w=fSB+&_mvy(xubY?Fg-?&!BvzU#zU`JvwZ=3XK z8M{K_$~Td8vg*>O(xdTQmwu~}eJ=ci<4c;Jgv5G#kN6X9&4J5iT*|##_Bh35%nJCm zh;CC%%;c_De;E1{b?)dagpr}~?0{C`m?udj6D|NIMV*e@o=Prl1d zp)IB|Bj`1}L`@=(|7cOK62RgA6)loxX_MrAU*)OF$8LJ(ycpk`W^VESbjPWr+$~7F z^C>(tt9O5h@gns9*T*M+s1HvbzV!ZzDi*gKENY{cPAIPz2VqMdGGD4rm`B6w))b`N}lkIu6Nss>(8#0X+ldx%WyI{ODjz zWCM}>lvP#sGf5LZKAW zDK0POwI*rbL(ywA>js5+*X*dr=E+6u3xeT39@7;23GswgZ^BS1mX^!gjA@^&pC?cc z5+nddSlnR5LM8x{mhXGyBV;kLzy#0-XpXKIBoMWD1=VU}Yd7h+H0;V{t7f%qR$nPSHMy2+P4Bim|?Vg*6=SLfQ7POWp%d&9Iv* z{PJdM^R_=T!=A=l?tvHHN+T{RUh(w3mF+#1ZET8*Hh-sFH$0b1xK?pMaePFCDV~ok@qg$-@<9G(L=P-Xr-Fl2w;YknB1z`hlU7}QDqaLi@{paj9Ab8x99 zqIMPv!M{KEa+C$-5)~dMzSg=C-%tFjxvAGte(ElD<$_$eG}6mNO?Gv_{DlY3W7qc1 zE)8;synV7g|}I5{J;EbX5j3oTD#Mf-IfR2vxS>$J%u6EtJ}$ZDNqDm@4Y8p;+d znW!rDO@fVspOr9Ec5Ql7xHB)x-f`pr`56|!9lfYQeM_3HQiRbc) zOqdCtrHP}bh3^kfIuOvxGEz+%kEu{4{#cDzDdG{mxJ-ePg+eFMbIrU??rtBLTw52h z)&zs3I9ZeZV+r?9I08|)+*;LbLsimpE!Gz)f&725|F}n{w3mE%TmcS$a=+8w>P8wf zEj2YT*TvuDM$`_>zs+a;n3Dn%^>b$BGWW8n#nNIbrI?aJ=TA?7^?a9CQkp23@0Vm@ zsKpe#+p60oMa5NZsxT!Vh0t53@@#nSDm>Lhp_Jsypcp)l%ybpF&)6;rsOiQa*)Qlm zup6=7c6Svmv1dw}Wt!pLAneQ zM2^`*=f9FcZR?aOpsOV2MHJDV!x+BY`2L z9;tXYeW{Je=VKW;0^ogvTcKS_D$C5`3de%RgxsuTBrxsJ^v>wWe5jvC^Fd<;8>#q+ z2c3BCPcz8WHQ6GfW7UA4968I7ss;AX;taAm!Aw3YII-BD@>i5h(eh1|U{-)FzZrRc zEazrtnYZ5H~^lxE zxxT>w{LQX%&N)=65~)l!Bb@0=PjbsszXzvP0%z3QkVtpb=X*I^9TO!z%TDsec`iC` z1!~4-kc94*FKJCx<5HS$?YS%RGBCRZMGFL_B}TTVho0@iEnXHKpEA8?rzL7rW>#j# zW=j;bX=WQZGn7|6G73AFl=QxWW8NP^mxsnR)WY&YDyUo^@Du3r|H+9|#u21EQGVUO zac$v|Eamr0BRAevPn7;YnMhZ_Pb?DnW}3hM@+opr*-NAl`D2+#K4rPTe-XkVw_He* z73cB4Ah94E<2~Gh-0se2Un!){=h`Z$m1XOL)`OoL%4vNxh)}eaqfm^RgyYAn28*JN z2T2H^u_&V~PW|JPV>qLU+Mqn8JZW({dnERqcIS{ybp)6Wkd~XjGuJla@|Ir#V&TGMZ z=9_%kMnX$^9q5v(#7?=Qs;wQNDD_dL>T12m!WtxN`Q8+$P_^ESo zSk()@vPUKC4;1!YdhE}6MlgCX=f6xKJ=+#z2`XRIZVD^^ae>++G*Adp)%j`NOG7u% z@~ZjqlvGta>7J|J6D3vITi5bY^0aHybKq2C!NrXaN_wfzQf*8h`3=k>jo<0J*0+r} zNt2&#j#gY=E2?yhN=}bb9`nH`>P%u6k>o37#Us0`t-8S!XS7$5R~IY}j`Q)@mf$yU zEbWv$Z&%3z2mQ5x!^A!kD&YK`w6+VW2Z5)@r`R(EZ5lxsVaolV%ddf3tKqJj-nf6K3x z4_P(eoj{zU(1+$%`aoJgNs2+&-An^9@%tAAhSMETYAN{$YdjpwKEB#u7fGlJy@ zoH_CBMm}@QFbUHxXSWvRr`N=DGnSqRaVW0F; zn8d^8Fj-yR`I3CIpN9@ms!{;q;ms~~FKR8Y1$=#iecI#dQ05<2IN|fDEc%CQ_1A*E zp2L&OGLZ?j4T=ZfMtXdLbu;klZd(;w_ZUm`(YpJp$0?8xw6+4o+WWl-JZv`iNyEvA=*_;nG~?v@ZM4 z->UGfY?s--|1`Q}U{2AuZ`Ih>Qovg29wRf!N9$LA->1F1On6ul42sTxYvZWZPd^8zSXbC0-%G+t&~mSKc<2RjJe}Uaf}P4tiEFo-oFGAjo|I zLEsr2B9koj@TBB|i&SpPL&-HS{YnfGyyGBXK>z^`PpX$A{;wG9c>ox(2t1J_N0A6- zLn-R8CxV?80Fl6CBe`=S>9!RLOQ2%sSm-tr$|rBts3id;B6cDq8G*>#<$!GCLD)zE zb`5+QD~;fE=Z<8Vt-*p>RbfZbxCs8tR9yu5FFW5Jsl7hVus%wjkunNxc8$yn*lfE? z2jd#ZaR6>H2Lo$XJZ|~KnMXn^-fg-HON0F(#H_c?g6QOR4ZaB_=8Tp}DXGmhnFaBY zC2qu{Rq^Wyh0SmnlOrNRk{zl2Z)b$ycI7@ap2J#yVRL|D9w;m@jm`swmN8ebXsrql z95I++q24q8LlqH^8Bn=39b`e|uXQ^XL(_NNd+|@f!v3qEcJTV%`3i3jVsbQv3^G2c z|9-@u*`hCD??1aZ>0{gF$rPJtm^fJwqw?Lq?Xxgm4|~R(A>(C6RDaqs29)NRMt@eW zMv43Oi%(#!)O~yXZ)4A}HVn_rPFDh|t|En=@%V|%u=%T<54u+U-ZnZw;Opj=6|Jq? zDl1mB%!#nMY_<%$?Umi`nm=ByWd1+>FPCv)7iFiy5Xr;*&iN?g7g5HnrOll%pu!Qa zWLy9@E|gpLqnP*4C{1vLH6h}&`GYogT#tMIx1Fc*Mo;6}l-w(0&SP>;WrR2ng0R^K z3o_FFe|kk7I+t(3`AXZ$gMXEu1d3X`lCIM+jFO#K03L1(At7#^Q0vgcNDuwH3I1az zK6oVLx0Zvpl2v%@cKj^vW zn>o7=)lFB?uFOL4ykjr%QXmMF=tVMQ78|y?VNH@zhUU&fvvt02P!3yl`o8OM+)JN> zva8(A#^iP=I{Mn(CuA!FIy^I2E)i>CmLG0R`V~ttZIO)e0vpAGb;W9yaV?X5j@G-w zi+&DU+?c0_Oo%4jg&R;o3)~c3N#$COkT5VSBfL6amxhK}0}j`VoD4=wwTm)CdC)#n zvxq-T{DLHm}&;u(HXsj2k#RZ7Q2x1CrmTSt<~q*!RimZy0;(*l50~^wk!4KD$7AzIUX#AYHqw7#dM|IfKWVK%` zb)PdhpQkU;m2gAG=j2;G#<@>96&s`5^%FfjR{tj&8+$Hs%Z=6`Yub(R)w@gs7{0_|T8g7#*H*v2 z^<0@DJ^ILtff4EHZ>PeVb-Y>Mbw2B~3%39Tbj-$1y3P2`Il9TBj4#udsn*HUO~#+E zyOLua;lpU4Oy-eB=d6mJcK}bQ>KRLGp@9hAs$4%{!_S1({9leEj4hp? z)yJpiEK+G&7IGz0_ZMR3@Bg{q1!;8R&MT~Z;Oc6 z&^H=Ps$uYa9e;>FQ*exbj<%gYn;N2)4BeyBS8w?tIz|)>EXcklBM^WXb*WX8uVDD~ zv0PPTYTerK*Ed}`lkb$gb=LXJsR{W7xo33^K6V~<$c;F!)pfx6umdxqOCawBh;j^O z3Sz4VF0`Kt=(_N6qUA0iCmScep&IGZz>47dXqlMyEwp0u#6csMg zW&W?q5-+$AykA!|E^drJJ%gG;orQ$#S&CHY{kHr62sAX=Y>Xv;RdM!mPb=Xg5^Qc2 z`DJ*lHw-(4j|*Cw7`7&F!V8-qN^Vp62x(jsg2ePaD`d8HZE*ct zNz-$7s&`sTJG*6H6*@Jg3f&uM*7x$QE4zXGzeS&;UK9ce4mA!qCP# z?;0Y*8IXVl)G_kI}p^)DR&h4pYYn<3HN?EhU>5sj}`h;yXAYTnGHGQqKiQNIsSh!C0K1 zF<%qd7r~q3%ZHUMw^$NVD9}w}mJ;+0Y>KTmLRe^LB0aGQ%K$9;Gzs6Zv)M!LiHwJfX}nnFK`>A2HoTf)eB2W z0I3Yanl0{w{6Tm5+%9on|36YOC9gjT=sSED`{d2^DW~*liazHDXYP+V6yD=aWXnVO zn4t;twuz1HeL0&UxaSjUI;)>)S4R9sW3JIG@UtRt_TiW!YgXFu5nT*4_ISJ;>3PJ8 zBTO_yKtzVEQj|0^q*(Ceis#V`pmJ+5QKn3oX!^;df{#T~rj{|W62Z5eU|w(!S13%8 z1WUgKpM1)G!GzteI=gez=GvP(HgDZ&i>n4OlgW<dZLc0s^Q=-%ca=#*cL9%*f8o zhlf^gU3Y{tV&^Xn=VxJAU46vfn|Z_VH5BxT2DW<8^1@J8U2QMD&(R6)!2LyMO1|_- z0C7`eEEnTqGEMKB-|T)+jE}BdS>RE$Q(7QHpO%W!T?6T|KHb-|u^B_sz7&~rG3D@o z1eXcN=5JZ)LmOewrNz(=G%TDU&7%$>Di zJ8&+Rz%pSW04lNWud1!C?iTg z+r1Rf(M#)GdXs96h9Sq8KzJ(O0g?dN+pb_Uy5?vWHP4UxNM{Ezh`E&5Zo&>5M)-S~ z;dQD0GcXbD(S_5V7r|3ik)dvxbXfJOg^>qpg$8}J=jMYODF?X??(>4cD5WfqMUP1l zjy1D^q|3mxf&EDSx%%{Pr&>K!rQ+=662_;}%m^^#CRLszU@Vj(rB5K^Q z)wrTb#)ca&wJ|rxa^zWBmPfxy8pI3A#%WoF%FgM~3Wj)U?Ft3^!af3vk|=Fq%RW^a z5Ayvowd{|SJUQ`}UJ%LtuOj4Mwr-@B6~YuR!^9tObSnK^anK3{T8kDHkDfuQW=e?H zl+@xA2^|u`!AP$0JHZh0wCfP7MGA}h;^S>mtSpaq+%n%?AF(5N;Bv6Th2r5*Wa-ekyfP?7d>g%6~r6wZ8I4^_wpH$xjBExG-FH9*bw+6@7O zzqrA%qqe0#TK0?aVGye88%aYt{I}Lu31tGg#a#*{H2^OkoZahPUp9w%>SZ9rez?L> z4XXfD^!H)yyo_`E8aL zpftSThc}Pc&8j%C-+jHw z$4@XNaH4@q{2DLA4ZxBPU{i2)%=fu>N-j?xE0f~L-&LwIm8pj1GlPVK>ozoV_wG)6 zx-Ef53oJWPB1QEiBUYBjW-VICy+Z=#V><*t<#&UE6XM)IBs!(`jdWT5FPf0RV9C00isgxfQ z6AzR?t6v%)(B#qn2O04S#+F9zlCm39v>J-R7x3+-WuW9n+-3SDPA-|VI`_}& z%6$45%bV4nmZOc1E*GrPN?)_0ZS*-{u6W*n_mJKPHiE`zhMYA z422p(=MM%Og3}^H3?YNifaHR6GhuTLz%PGeY10&c{Yq9^@@_%&%fMT6??oGBYd#4) zmJ9+8@8cgy@KitFrn9DIM%rY_kriQ5zrS7=dm{&V$MW%PNXq911l)$la@WjiZK-aO zy%&ZOJY!Qb^en$Wcu(n*wEOh?G^dmGX?aTH2in?s@{g~VsR^Nakn`)5x=SN-43xFe z+0^nqsL#odGk<=t*j)2}G{!We>Arlovj(8h3ZsNorDvx1Q>&Z`v~4%ZufF6TUfMEq zK;(hlK`Xb^nIax$xQP>f&XyFKs2!#qnd1t_m`Vzq6T(d(U_PVaAWU0gq&nYTU*)=F ziFTarXVCliy@yUr;LPRDrDJ`u82u80^C#|d{T~#`E4If7DyjsKlpp`uWDg)g?NW8< z-Bk+aAEvaq-afv(I1||n|`|k(6DEwjx8bxg!Vyk8rk&-~GYYjO~3A;^@&(=E-TZ9hD z-Jf-&s5#7+Zm#7GyG}nZte#G#oG*z1{hF$1Ino)Y0|be-`Hd1XUW2fyWr1sKtx29H z;%$xTj)ks6!W59)ZAz)@Oin9ZVk1;n5!+S434K9D&18GE!6(N&I!}G^K9WX7Uf}#)nfd7 zI_dJML8jCkVuX#WGWgdU$P9JBP!bgZpU6%|G!s-{%1EvgfH!QOz@abzYYk;8v4INK zkQqNt?dm6iNPISd$x+S3s7>U^&4i{fgE@9X=#2ss#XfUd2cQK}jPtydvIf$n`_-`&KrBj$7TZIT6fw+y~IDcZgtai(0L+yfC|A4~$tG2PIaF_pX zkb;da?+=u?-p2EB8ZRmxRaPx}f{ih^GQABSL9R6SD%Y>M}w7n zO^CazdRG&b7%SMfPY|0JRr5{-M&!J!)I88szUzyV-8`W9e}_+^Nj-gWTGYzGv>7vZ zM|)auV19mJu;x|Q0@a*5AW8kM8H8FW+J=?u>)^vXb__3YncASGM6VqQB2shSb-i@n{2n{U`8MQ>OOKcO{J(Ej2t+dkJtEPV~wS?5FDOMeOO8>7IA}}7~ zj*@b8=G(%J3Vdfq1WrR<6R@@mPCiIxTb&j8?OkK@J7#3&nasas)+8s_rY*va=}J(m zQR}?gjLkW~9jFq?SN{y1A20RxKkg|(qXQ|=*4ZQUp{7sD!=8Q+>ZW-3ME1L+jKlgH z6#xPdE5ZtkPtrCGxE4U97))TN@EKVW?1Z^-82fw5_~mZo4qw_h1Rx&&ZeCEVN^FOfglvF9ci=Si`<$ekF$uW~)uIg4EZuzv~r?Giq< zh%2sd0+0&O@WV8p|Gtf?RbraFq84-+Z{W+!o(fmMZvQ4~N#xFY7vt)ttH zV;Tn9{^yjwE|2Ja6Wth35&p=mht6Urffw+hiVJrtzx)6z6C%Rk4i!`T^6kz5k5b>c zPf>O>vfIkBE{_mp&>xg4R~*z-Odt8O-p{Y(Ws=Wiqj6(-xxZ7ZVqTz7Sk7N~&LaPY zBnW|3uq`wj@I}L31m#RwnxBT@zE;YEecP5PdIaax0vxSM9v$Flm_x@BRD@M*(${P` zK;Wz$fNlF=-+e8`pdd!x^_v1D>Dd&;u7EKJ|B%cNE}Soc${waF%IvGNGf25!k@xT- zi6<=PgB->qtl6`}GD6LTYN;BC2|P_6d6i)yNjamrp24}@%p5(tnN0x=TWu=RNVm%9 z1(xq?!$iCbaybrKBi+Qw9sGqER{On0N-rz{qYJj8SZ4x2LM8D2k$!bF0>BA3yxqd& zRxHa;4|V)%C;oSRC+z>3wCVZFG+e#IiEB>)K+uN#Jj&DtiVZ5D%`C=OKc)*8d-#>? z05VC^!sh4Ee8DYcN{blhXxdfi0DMO$;q=g@aiN32EE7fWk7&y6Rh2XggO)d+2omy! zwoX0c1;NupQNT<^W4t#Q)cmJUJUSNw6x?3i0_Z&?GOdJVBVgF6T+!HEpSo0lHXVh_ zhmyrl<5uFLtAhrzpf*1$^utj@KNEn&Bcaa7$}nfC44YSf_6o`D`1IrcGi%GzFeVFR z;YH_i()YWW>$U!rHDpdt1ol37C04dcf#>}xhc^4s1PT*k0(nUX*52Og?yP$ru!4{A z>-Sfq@yQp{4Dr%Po4jR!dBIiN+x@wnu}w5tRR;2kzS`DeZK{D{fS&=X$-SKXfknZ9XvNU#%Yw^7RtmCga zOWSWb*pZUBV8DF6y6y}~^w#~ITg^m^PtTIEFgYkhUMZb%*mtH* zM1%D}H+#BLS=Pvh86^@Mpa0Yl-7iLKa9)K>Vm4RvdGB@+FVpky{xNkNrL*xd-(;4^ zPGI>|^~8TJvFE=Vq9)s0Gn>oId+p5E7Ws!rdNQ71oKDX+6;f}@$jG&n=>e|tvDp#y zy*ZGv<)>9;{~0=Q94xwA^HBz&kpcM7#Sr6o6zw&QP9 zepe5uG+;DSG_Q=PZ(Hy*Z##mmxdg2CGF5XEKR2VG51oqu=u!G6C+6VZyzWq6zs|3` z^p22~jM9dLigQ#2#OP$OIT40X0z@Efl%IJu1#y@hxYF!lg>GS{Li8-5Q_;f83UFoD zx1@A81g{B$3zPtJAopeT?_Jb06nR1%h9rfkE_7Vr7EbA@5TJ=vr5yAP-ug7N(Tt=cS?@Lbv&C@2|6f^*hiCo@{TGk+Qify{)a}97 z|7e@w#%j(uMTfcDD{V8;;kG)J;JELQfR%ZzGX)qew{zds%oY>AN5>9V(mS?9j^#Aw z$2D@#ayGuqVMm+M-!~>~d?S~UwYB6rut6tc^}w z39fACv~ke|PfKxSkeAW{RAeg&54B%uz*m-`aE-~l1)SxQ(Bm>CR z6ogT@mkGwDnUm)Tas;OaPZK;mkN$jXY@Pv7w5{HIuLR*o&_>Jp)Sx_Lx{jX6yEG$V z?4HLN5BYho{4$n|1*HaM4J^z&{wu(H9}7o41S~DaJe;?p7}EG3Ey}#C14Z#6iu<=( z$0tG)G1hT5Pzl zvQ(14Jm!)*wtTCa8}O>UjIAdhNu0qLQJ(5@3pGpPhKfyja8@Bx&7WYiATrG(Q&Ku{ST~@m7_q0`>@`%w0 zN>e=|H+!xsdnX=Uu&;36f(8H0>}R$2gqjWnr)e*i?Pvonh3w^(im%H2k> zAl5B*(6-5}Nzn(7ViOW2L87X5xxWyJHJ$CGuIBnP1jk&GbKo+#6oH1!6Zr6O*|Tn? z0PhtNokScyA(6C8R!*!Cx3}wZC2nR#Tl-3#ME9s|LQex<1jodl-YWuCWuh`qpB27- zwJ+*q{d;dKe^tgiMg3O&)eEDQ4BF;wXu~@>p%EoATRNFAQa)f?xnM;%-UlXy1Xe_< zrw)D*>N#OfDxKxG5ox6L7pN@UlKOQEymy+m^n;ZBFd7M!`}yq7qC&zcOYouBQBasO z`w^?*86=2F+j`Dv5N1-c7yb+neC(>!OV+H=q6suMDgd7PLGL}8)CrbKPZ8mCXtUI`JjH9vg)lb&ezyf^Jwj(>fU(LYVg&+P>~hi!L@uNSulDt=X3SE z2w}hrN+c1(Vv-onWP^Y1tT^J#Zf0b!CBlcKAbFV~E=B84JiLs_IfaCidZ((nLF)0>i$t;b(4MgTOq){>q+HC`UOw=$NfKWb)LA zKm~$)MzokJ#S)Zk5bMRdM^9R{Lqe1e#3B(7R%9s!pZ}9oQ4tG;#TAt@`N|*D-=x0* zb#2E|9JZ>`sPa}4CnD@`du3wkv>C|``&-h*P^(vwi?y;o##&Wxb-4`N?^M*lsUQErN2GVk-=VVX+$_8#$kdCl3M%0s$ zyWi1qhm4J9noB4lSCn(c8eMAbPd>)N024`;ipu zl=y2$&#$R-0R0;AikWyF3TMYXvnnTl8w-W@grNGj8;YU9u$4_L)o1-b z0{c2v#;IAa+A2H8Du zFXY^;Te*#^0YEy>`?}5i^r@!%*FK<-#une7{mSsO8Nt)AylR3&SJjpid3QrxhJew@`c1 zeYo#+p)4S_z=S?ywo#ua&Ji=}wh{C41uN2GIBQ=A`kzm)_y%J(t?KCP_VUY>d3MX< z*H`rkBruQwP8|8;h0;1*o=}?Md1@6o@LF=s)xjg89b~#d&GcLLsqpzXu`Z%M2MX9w z*F~Rs%1(nh_#sIhWtgqzRY+u0$U5#j`YTu|jkr|T{)j(5yr)_Yd%Tu%=ZZ<&cAhA^0K zVgV>z(d&?g8GJWlKF1M^NyZY~6WmJWh}+2s8(_2N6AEHAF#`odWoZSV+0QMh2sK&9#X7vs_i;9N%uoyDg;ebD~fQdX2@x?i{;4R3=~6T zf;nL@Gs7PV#)v0cR}Mle+F|$Q4m7K&F&a_{<|xwH=W+BI%@Kyq4g&upNN1sO8W|m3 z+&DaplPi?67c$Dt-!dvFFphbJaiJo|TIMUz%?F%KrvvzThqcod>eeTG z)FVuFdVQU-cxb3NVwja6Qv5gcD=(85*dsYG`sl0R>jz`#_U`g&)3eOr`}D(}3APYC zTrk3(BqzGxnz~-Lcp7eXIBjSfJK|l`Jql(0)aTIx(&J%vUu;fK^0YGGSa))$HsInJ zAOPzJf_{W-_JAhVl2k-7RlE zSUtHFefBz2=KP1B-=f&`kdXMa_6-kif}zGk&1uS57_w(x+Ah|IfJ;iZxHXz56jYSr+&v#dc*5zc)CngpSXdI?6lZOCu zfRo_i;*nb+ro8-tQ2ho=Ks-`ZhlxB@;yuZziY^) zj%Ukaf9Q31&p;L_Z(H7FVVX{d_i%IdJvMy#yU{0~Z43RLDS8)w?`H9}(<@ouFW=rd zaN*{+UTK$yX>b0C$QO&!GDYB1uo=6nt7#{uxeK$;5WE>Ho+?|J?eJ zXr!np)6!VvuqC}NGU}3wmKG*$TCYwjYCPGPv~qcJV@70AQg%ktzezn6E@ENp&1*L$ zHC|fP(*Wi>t5s^5TCPqB^)?v1E8``21?i~mmFL2WT&Jqz=0cL*>@AMF`T4EU$VU~e zaQ^bVz}Y9tMpg3vygTNwgrQb3#gk$Q(0@fHN7n{8!Q?%xI!pqcUKIqx(O9c#?J23$ z$Cs*sT4gS!^XJn-gCV~r2eJfl<_5MEcUquvCbCQ(L~Vp*X)HTF7$j*%HAJx!CzcWm zBG;7RaN<{{yhT#tiU{fOlH-h*~3*0EgS}J|q!bApEs<$0M-Gm{RAT+@`Un&N~ z5CO+rwdUc3O(Kc*5#F<}#oG3EhIBVmDR+15{reJm93s!b5GE7FaPWn+r3hx|cm)G- zN>4Wzsxx?sMhoUR#rYc(l;|n_Vwle0l*y~l$YWRvLsC6Eh}NmBCtI~P?7C@n)S`<2 zWqsH&o;v&}q`o?JjCPI|AAcN_5(4kx{N8u*-TZT6ftaT>{cWx||{K znQJOiGA3}PpvMxNIlKS!k+GnSb^1^rjHUvv3pN z6qj-QFoq4C_cZx*eDEO+!QcFld9}}*&sQJ?`o$d*GNcCY91QZ{tJE8_!oS^x;Tq8g zIS_f(`@U4Ph=B^;;06zmsV)?1NRk#JLLsV=2-Y=%Bb>;zj;gy>p6I=TMPGYjM{%LE z^!1W5Z_Ei>u;Lj7tXXmY^mvH6sCp7BCNs;LY_IIYSjP$JT9X}v@e`Rck}1lCkHWf4TAgD2<%V&=H-nnQU>JKxVe|vs0yll zCtiV*x5&oU#3rA-Jtfn)=(nMaB?a*h**OvLogQf&SktJosaj$(u&>vS0>E2 zLN9mh9li3?pO@_!Z(_}q1j#~_bIB;YwnHoIw7NPpn#~EaNQR3`hD+!XiihLh%}h;eqos%0+5-1ADE#55N{(1D zU)zk#kd>2Zb;QaIK8)O@r8Qv(k5KbN_<5%H&Oy$N@v#zh%#+!H2m;u_Rn?5M7ZksO z82-e(H>|)#7@7e#5Zs8tAi-bks%i0-WM*jAijh|F$2OyadPI&`g!=#e*vV>>BB~A%JUDmY!H1U2e5X{DWY@a*yjkJP;6foXtiKs4R+y6B-T;<6MWrc z(Kd^b=95zs6PW9J_uNE0chviSxIcJ>iOo%9++BGhxoTR+r2`5vN>p_b@x7YSylVBg zpUG{YZv}mYpnQ~&xMT!rfvCfZ61cs1cM zVUqxa^G=!qO&a*IKps7oN57iSKUlz@W-y})Mw?I&J_!oimVLxkx@N*2N3mYyGJuqC z5Q$jzFt8Aqbavgi$6_H`q2gnbOqiZdF=j@p=q&EBSm7mCYA9P+T^B%NJsxmXF6NCB2Im zow47iS$T!R>z1hP(+ydfdfkTyGc&gx+)YfIgDC?iMQ8YiHRnp^#F$oBvMP5ef~S?- z9#XsSXYF&-tlr-;El9Duj8(SAP1cmscM7Es>0RQly>a~{IW zDQ}Ve?P!rryIN_4pe84Z5dOQ9`vVW<@;V|~ z90>z9d$5CfXIIB_iuI<7IpuPkTj9Eok~feK;%CuPG-(P z7>2gL9qQP5)%L-Au{66584!gsh>U(`boC4_3JqL^V{34rZk9QjoW5}*$+%7ucbPCE zHM=FpC)Z(HF_Km(O8hUMrI1BI=oo&g_o^R{w)EAm-e^?^=zKyX*%uB?$RM$F70;H_ zydg7-g!sxkr>))fbqhv>(-W=+0yzK8Y_Pa9`J^uATC}nxF43X0gYZ)%PbYS8RjLql zhOe)74X{1WVrp74)`AAN(60~#0;AB)AQEnjlQSGj2cvB>b3NV3VZ(ETTs5EgatVd^ikT;1 zLl=w5dJdkNpra}eR#`A`sSZJRxTxle<#mv(POKU2uLD6KT*&d~#HJB_@-V2JLume! zJ5T2<{QWzY%qE=bUlN+^!UW7Uz`AAxhR|@+;<}QbPT;URggZ#)zSKE-MlVC%$MhBw z6Aq@~aBJ8EmUtUh;7MgrF}-#^rsoA#(oSI%<+IpUh+}2R^O>O}1S0{RBs#%4fe;Q6 zz;TeYL=x;DC5f0@^la(!>}Cmt0tdE3+f;gy&I2lRc?>$c#IKniVqQ&M%tORp^}D3X zx$rL>t~>DUmFLM*mzUCV6eIYq?|0=m~!WCj%LedyYqm1ubf;{(QkK2T~q&M|~g z@+6p-3q~#xi>Cubi}#PKkR&uI_ym#s4RG@}g_yvTwPuo5ZT<-99tFpwDSi8}=n=iX z;bN^k^{`(5nI2n7F|#Q;aTkO+5J%|>2xkK>19~yyGj5YP&ID;GOx95nGnt>hP5)Ya(FV-Mu(UAXqdC&hf;ksLli#e@&^n@ItzKUavV`edO7q=9%os7DvU=?X?ghVpos#7ke zE%$zTCTb(I#b$G{zl)0cs!b|2&Db3y7R%Pm=wK7)oCuEk!^>bOcd<7{C9o{3Y3R^& zrz@i}8i}A{Q`v>{@8|uNF@2fKRafORr)*ZV5KlEjpF-*$$GysO=jc#Yr8lQBG;?cKLN8roC%0;ahlTc;UyPYeDIE z;z5r=G1Fxis>DJW4YfW$h7L@5DN-tDqUK-Bq7?|mDjD0Y^53Q8zVbwb6ZU3d12ov{nevjIvWNrVinWET4c9VaTiJtvEd3Lu$pJtx1+$h&7=*0zTDvI&1#a}+1r&m8ITdk7HZu!!TA zZtS|c((3Z#@5>0|8;>C)JwAPYy8;3TZ)LHzus!PABeFNsm`!sIl4XVWmNbSySm61I zdF0;7+q>S!Dgg<>>?08h1_mD6G>#|yxmrT zBq&JaoY$Uo@yW^^5Cj-S{B<|lZHb#3(i%#NyJ>VF4IQJSah(IALAH0701%$(li@E2 zL@Fd434S4%noK`EQpac%Nw^v|j>Oei{H~pI2cH}P6a-`gx#$1xB@OOGPzfcGvCR2?-u4sh}4_?mf1f}hHPuo4x-Vxd1*-yQ<1jFjiZ3>R= zR^|=(`bxaFU{4WPRZdo?icC5;bB)Xl$~XEO{i#u1qgb)lcWm^TOa&I8p5nK6@H$S{ zH}V_(+5PNUYL8`9n@1ae0JU>X9}jvQ{AlV+{6bv(q^qCV)%BoGTz3V#nEjfPt-UOK zHM1ONjnYyHe2-8jT#OG(X@04RmgE~1Nrjzw zDnZ-J!Z(qS(6bruI4HMHnr?zW7iou`PKH#<3OZy$kvuxeb?kJ}zNaM~gQZdw;eeC1akWfwXs=di+R$0!%FrL?gPgeMk zN0IlU=|uq^$X(0!)EAnvQS>*M_VPMn{YMYJ&=V?w(WU6rq4wCPgQDGyogdKv5%BA9 zVoPZwbCU+?MbT{pS}Bvl9AbY}h-F)a zw5*z)|2{bD9$qui^k=$*2K(=Z*e0OJO=oXH!P!}~b4zDQDb_);;0=OdFh1N4AX3?1 z6ik!HU$=f264GztIUfvIT>3M6$?A_he$MO7ZK6G^`^3g)e`87=fy>* zh?)dGPGaE0Xme1&JVRwr6~^pQ?^z7hE&3Yr2`tK?xcVtGoo3r4YnwTMO<49Hmpig= zO3;+9jZ03ZHWgJ!kZgz&jG)#e)9n-M5$GGL+`K3(X5Htx1mmqR#|1CO`w_+E4v(@7 zgg|I~mRc({-SJ!@|474K<6d)Jbz;BMJbDBr``1;zWEM*xRN-R1#R)wNghA2d@mqNW z3v^ZqaOVnifmT@|SP|q%lI)2f3R(PAn3p(7Z_BV42_6sJKB&7iS*j^=(67cSHWi zOlH5N(OwX^Ex_DTD;e_`14|Sn{J%N>|LvDp5uYhbr@fiw@Qm`8Q@(zm^WP^;Vrf!p zte)Frlt=r5{k2?vs!OsrgHV)bi{~p+X9TU#u;*T08bMS4GL1T0>lWLxKqoUNBAI%-!5s zI}SYKOmOO^hj#t76cX?RB*v8zoC**p-T7x*VJ_buc3b!6eM>#s5yoF`p_+7gk46&1 z+mA_Ja)DxJFarZb7)vv*4<8A_3|@6nafjXm*y%QC*b`dVMY$9WS?RvxM=RAcRCwK2 zt`E8>d`18Smih07Uz22hZ{N_2Mu4zU*@q7YMf7pTD7K_*@szel2N^?ygfP-1fS5?{ zPe5xx(oktzNvq8hOe(;GE2$Pv`va7h5fmpfeNk4Rddn@mf8iD0;rWv4{WA{oqojMw zi-L3f;``d!xfNfc*W3|oEL(h;P)M_#h8+$%q#;*a%WuQ;`(u5Q@qR?k!35zTdP_Ph zry#DJJx)~VaIeO;u2Xz=xA{u|VPZ_vT;b6YA=!%i zM#VIpR;t|5iSG{3PF}hoeGd{iuj@(UX?hem9p@VES`?xWT{n{wq`(FIJfFt?v_)Qp z)U|WJk(kqNt*Sj;+qiM*1qI}3Sv8fxDy#Hgnrw!~fNX+%@rU34Ut_uzi@b&Q_Vj`u zLSC!=yJQsWF`jcdm+37o%?V-*9Q!g(+m8zI zeNU97b3GY6J#E2mGh8IB+rJsT1#9M4z$)mCTh2!d|0xFydhGMJpwAr)uE zvLpYG&E6O9B-jK)f{-DEfF=XhzI^t#O0Rbr-#rx_X#^CG2+Nh>8rg_e@M%2S3tl43IfoBL_*6fbr~=XNv0h7TM=Fz7Z_t!@X3hjL;N z8uGe+I3hWyxlpnpQu63gldoyv$y$k(2cJKBQ#pVjvDe#&>tr-F3TF`^{hyYd(#xDj zQUFrogTx3L6XWM7zlUKAnvvZ64CHhDI&(&I0fU$&RWB$!ZlhV*Gz|iIV^Xdhf@KTm zT@=z5t3zpXe3`lxZ)Ju?fu`J|qTJj8RByD8@lwEB>~om$Wz)!}TdwbiFgW?dgeo0X z{)>K`F`$@HS2sg3gq6V2^?}lBD-9w{S|B15X_8OJByemHZUWRDaY3lR4{AkAF7#bWM_H7^4jV#evT5{qf4?~qZ@@oWs?GdfB%i&0a2CLapx58#z|D&$ zp(i)nWKTVSou${N-FapcMo|0(n9FI;v(<9JB9UIEN(V123WgzJPVnIt>i?A3qh8mZdY()X`2)Qgm zHvRzNii(ke!iNVp70n$k^LS+N;}bQRzJXc6NsW!*)Bdt~^U7RA4i$gnq&+_=9L-G* z?jMwwGE^u%(1j--)jaKA)K$kj78m zw1w0VcW&Ijzs9qi$bJ5@6Vg3VwB?ZyX!p<98Nd%(_OsH{tZCzm*jNUXh!7@^pX83_ zX2UTknco|nDoE5TCRK)JTIJ=XX+g5X+o!UmN=?8Kvxu}zks$kmmBxIVT%ijH4bVC3 zXcqvBtc!WxxYk7`?JuaRXqNVlELKYfvzz4M8h>9t_Oih&`TstGE;I5w|9NfN0L54Yi$cQ~MII1R8{}EzHMK1vH&x?) z!kv_Fequw&Cf|J|RrKaVEa~R`ZmgfGjA5P{mcKiD)n)%0l8e+b8-U0ca2WXpDNdZt z3>hTmuVUzi?&+T6qo#&y##eq%%+Qt@??*A4w-)HSLa|V+^oG292CX(U@lBuS5|!4&yM*E8O>&uNN>E~f;PXX~o|sd&7CjR!sVT0swYcao!p4l5 zGuFdfdEOH?cpGar4#DS6HA1@4R-x5I#=q$U3q0BqJ)}2^`Oe2!mUsTO@rV`E^|Zm8 zvaC>{vAi+TER?B2A?l4!ii@{XZkBh#(X+(A@%8mAlL`@1ei*;MA6}wCg!R<977=#( zyHsvBRE}4Y+N3r(Xe@o6-@NoOWot9vBaI={7EIr$iwh|o_@DFqpM(qYAzA)$#omy5 z3(3I4d0|-b{=&cMIGQz$?;L<-$eH+U605(H=#By_88kpN4npB7Wy*q#K7X%K`c+y; zo=1I-dT#Uihl)x+JeH!zeEoI>5Y_UqcyU$YH`lO06SH(Ifj1YV7R1^>k$SX-J z$=gYt%QZnhFJh1DEQseGBu_~1c`*EFU`How2Rr&#_XE`rT zrc@zNzLKDXqZClmB#UsJCw;IiGA(tRtwvxI8shW67T8Mwu|ttM_pTy*EFVoH|2kjn zg8|QPEUuNnuoE&U-}p4^^>{W*C?wF_FS*I=1vgKBr)Y3sA4D&rd2)nADmpEKX#~sz zyRlZtOiI@aBy0`CyH4EDcp!*4#w%R0uxOn>p&r=o+fxDzwKdMs7~|-Iup)e4MWk(0 zZA(J8Ixg+H!P%s1yLuL(tB^_0$7wZbxL5G*F-Ik;2w9Y&-jJIyEADY7rkyD7SP+Dv zNg|A^W|7$@0<^OP`6uwzpWBVs(TU%dO5k}U>m?VquN{LFAvP#O(6EU(5>ruilw26b z3qjE^NC(AAwfz4TJlIMuQ*YIB=V11gn1pZ&c;Wbb7LCovUPjZF(rJre>c8<6j3p<% zE%CthMp!9IImHOx7fPJg$d2D~miUf;{mMsjUatL-@URFfHx-t z)kLutZeG27rT>lh?gXf}in&;9z{YIynSlYp7!BL^fL{c@qSI?fYwOT+ol5H#-Q655HwFf7&`-O%7D(NKf*r6M42>T@>Ba(( z?H|+Ai{d7FdW0b_)HNTczJ@DXxVK}d$Bk|h`}K3%lQs`{+QoLSfqCb->uD1Ejk9K+ zv2&h)$bqN()q-X&f5n@rp;YRgDsD5nT2{4(D(LX%HVdeGBr!3!%gx8%Q`FUOl8H$n)%hM1+vwTuzt9Cu8N;lIRe#^HPA?98lN#lv)mv)Tau0Z zQ~nM)ZslX*EemZ3%(X}tZ&-rx*bCDhjbIKUdQFT87HcI|wz;XXD4;NgyJE4{Z$E;t zwDw)W=3dSD=bw$tN73U;!IlB@ru@!&0CM!USFgg}qJxkqgeZ+3_}1^!neC6%kSi_d zU^|pLRdZ$KIBKJG|1UGG`DA07YHRmx?E%GnxQb-~KaOF66bk8BSi*!!LDGr1s5d0F zo+8xZq;Z70&bv_*P$ihm@x4nDBBRK>I>POnHVMjY2fg+=aS?%#1K=<&g2hT25y@=b z!s~0?ixl%a0S1=i+_2r^8{SH#Y8Ya<8*WwND<-@!x0Lh@MM z0g?*j2i?ar6HKNTFhYJjlogj;RPO@05RkdM;zFNyV08oCus{MJw%RP$YeB~m?(Y+c z_c6G&E<>3Fcin{P=G|yInKeAwq-(W>sE|lJ+RqV}@7yFHVOg$?U_vapzyu3SL7|{i z>jasQ56FKJ@GzJH#agcK;G+Cfz z1!$dZrwLt2uOFIo7BaKDLljAu$I2jMz>Ht`J*a^w*sGf|Wz4tXwRaY7HOKU|XOP$8 z5fZ6(O|-z5dzoI5rw4(#xaTNCI`qxEFsOj3RlPBhCIghIybKv(F}G_LI%up5C!BjS))9 zByrU30DIiYYA9T`wk4vzV!K6GYDrQs@w(YZLYCCLT74QO5_=o<6V3vCr2gy;V-wuM zGPr;GW6D;_5UUH4Mh23G$ccF=5R4HcLi3j;rL)WDRcnwe!WE`Y+QR8mF9v7dQ%trW zD2e~IBOG3$xNaq;H!f}6^Xgw^I**wkfh2K1LxId-3aPB&$=R95Ya$~;d8UQimbCpA z43Yy=EJSD)hnXN_U2POHB~(h5U#vk9ZHkeJ(FFv_ke89h6p>G%ILq`>#u;)DfiILJ zO2#?HB9YK>i|v}%c@~bDry*b^GdzDZmrL>B?OmOW2Q5CUfY$c;na$fbK6*S+WOgKT zv8GMw>4ktn^asbVAi@NyNd%p#Z|F@9<= zzN8BPia5;!QUs6zax&PfBND&`>M`%(m%5N}2@?Pkh??Cn?azZ9lqMyBJk09|bX9}M zcBH(TfG(u!5CnM&TRjpoe#3Jf;^NSF4HSBH-`GPrF}r53ZfGETcEBMTZZ6l_g7Coh zG~xfL_u`H%P0DAxBE^x-*R=qlDUU$TKo8GfF9BzYb1w&kcXF7m*>}cm){KjWdYK0g zAS93#)K_-KGUlEQ7kzTr2p87=wOGqZ7HK}|g;gDK5zA=wfz5bEJDNE7_0A$|SZ|)) zje*&B@kBaX9etQ$r9m$rcb$daarNP|4yD%pfP%-Uyp!hKDISNpaB)ljVgJm8 z6LjnrM;d^1;g_e#L?pjY5A)~@NuFgnTz9y||_Fi9(kj4XK|aDDL#MU!APiGyF4-Rhg+zo@DQ47Z$Oh?$ec| z>o?d_4lNy@-G8crcrONLLW}M32_^?v67C|IJ|n8o*15ZN_V<`|9~WQFrpN^NI2!+xOsk_U`h6@{VB#Q zvduR$-H~XJ_x6_$17Dt<@vQ0&Q@_u~YIho))0Mvr?oP9$j;hzDF$(j*B$}v_5e^~! z&Q?NewlAV+05*1fa4~%E=e_Wj)E~T5qL-gW`VEEVpcu}@*E5YhJ0;9qi(@C^y z@NAgD$vLPVjk3`A@HP2et!w>ioNVj$%sW}nhWEb=x%_pVw#@0b{8 zo^S^w#=&4@k|ar-Oo5X-Pl{&T{>*!*QlayvO>MtGzZI)>g)ks!faKGkojmL@eIOmP zUHI(iA_qTI9V@?l0RqFIIWz`=W(J8@hnLUnLo%m_hcjsM+4 zs^#YGB!e#;luQDVy6DoDd1sKc6)RhCKqfCzU*4wnq5pj6%qa3E()TC+bgyDma%hqt z6d-_30?}7OrTSXA!3Q7bL*gS{glSk#qMc1lTD!hfNWI1DR4{=u?S~lPH(uitT>^e> zMlT`prB~iEqW}WI&}=k1oyaOMtri9m3#ywyj5}&7tad{9GNnLI(f+~~%)aJv)&y>j ze#)8QhjHJW*N<3z&Fhow{)e=7~Lth%?DO5>5BZ>Q(#1 zGpvB5>pumJo)`W8?S5w<1hgy&P-TU1PYnck7{uqmonI-K1r!r&Tf^#OXKl|OO6=>4 z8Oq+C)!(lN6ulH6ffT%2BKchZkLRnzD#35@#ED-Ltm98B%TjNK|SoD4oga^Nluy=jX=7U?|Gf(o)MNARz6R3^LiR=Y)N<4G^OG`)uS8Q?@(IK zD6M~7oPS2F|6UBOM8%r^;Epy2jGzu?xGMm>d&W|~0`)@xF@Bo|fTeAY1bOue0;KrRO@6@(>vFPV`J}JCSBi- zkC!kXGCnoGV-zo2cEmo}%(%*$AK;Ge_iT?lEoMGol)R}PuT{c$hz6GrbGgSV3{zuJ z_n0rH@^P6CRMrn+A7B^PS7cx$m~w$g$d=0+3ZK${_OKe9AfsJlyE^dm+wq=K17ObR zz{#B+(>OcOd%4oJYi({YR0{`NXE>46#C3wW{GLDZxe>p_`-79ge^yyOv9ieL{64C75Xyx1(tUE zG_`2ccv{)EzNWRfj-PwS-l`;T{i!VN*v8_~!CNbky>l4pR@(yPW}V6&)OzF+t1b;W zkq}l~xqv5QhJT4TQpqBf8*{@dR{xT8ShHbX*fQ6wXgSL=l~%kEGeY=+T=2^v!fHSfWtU$~~`#hQ@}(hFuS986~xxg5^yJD+_g(39JpzsaTSk6qf&V zM%A?KwaH<5myc||6sh_9wjs$cKKQu$RYFiveC>lMjrb4kLB}C$=);gXdm@Wiks7ew zecCU+V^i6=?9G##Cew3O6{@u0TO|QmJ~KRpkr78Ji{4+2gHpx@SMd@aKy}G;VS{ zX*7t;Ilpg;4sd9Lzv5!6aTgJyoZGoNQ#M-&*1HB9&H2`c`A?y>r zZZ44bjf7}`RB;u(O09PaeTq1fx@#HHA@vHntnzs1;~DEQ5-rWu(!Kwr8{N}T2TKOY zJ!R2izo>8{`0=WpWtB)S&n?fK)jZI#kO%8R(j^5%u&%luLO7)&4|eTFZFI72`dJ3#s@NcI>7&k+WlJTfd=P!R0I>*M+c7>&#O)h@8k%v0TzGK(Zw!;)I|>g6 zMk62l(p$c6fQ%jo4^q3R(D3<>O5F^8JgxXR=>kf7=KrSCAAHla9JKAE$MC`N&f*`+cK<}DUn4bKci9JZMF(;^ z9uJ(t?LYN!Gg9}S;-hbMoer0~m@eeur~{7@cnDs$yZafO{E!i^x+f-wj@DJ)*DL2_ zB&UCYfCwC#!2iz~XAz4{4nzm!kPAL-el;h?$m?#wbGJ zNl3uFWW-SN6lva(x96k_(yDm%53+hw)e;ik>zq1+fiZm8qYO69jB{-tdiW^SqW!cj zFnfeRC7O_#>;sB{7_%;6hv!P>m@FY15jMMVuGuiYNRB4~{-iU0RxZPO$3SRdhu8hTqRSH?2}QU|_cX3)=5$(wK1Am( zqJ4C5@H8?(4oBb;C+!fd@nHrJEXE6v9njVo@iA3mkoYhSz8X?L7kZH(>C1iq-OoI0y zm#L5qB;|u3iE+kE+8Y%hkw8|&kQgP1_{pv=NPyOAJ;9HYri6OZLPU#s^4U#4l6F4} z1`%?z6jh9kc4OcOQGpakq6~T%%OfMS4`CAUekGTpb~T_&-cKMng{c9OC^D6bObOx(gPE^iSzJgtDRcof6h=kh3gYR~XR5Esr7? zyRzbYIcBuh8M{4?s(|7R@df=j<-169HTv_Aj)e;v`ECAaZ>FJ>JIleJ()mNnSrkoRFGSzR{j8e#$i!K5oK$?V94W@Dw)uP*J zBAsrYxck(~?nooUXpYLj%&V4R+l5~18&$CpPEIShr6r|hJ$?4aQu#-CUp>?Qw9O(_ z^JY+1Em$3MST7T;MosMte+I-d&a9FXFPzV%_Y%{b?kMDXBl?JY zGplr@(SL&9JWB)zWp}cS5qAc=3FaZirJHaqBIM*G)0$A&PbM@OdD~W*T!o!eb1qu2 zXk$D1V%xTD+gY)l72CFL+qSu4+qQLf-KzU^9?l<_-Cfl$U9)=(WWUYvs&*gR%xv$C z;|-2DV*V^GAN6!v_b2V=kH5S`d#$bE8 z^*XA%!HNntm&r)@q2xJOM=rxG_0auYhd-Wa?Ks}1M}e!LG8OMoF6jor@6>f}lZck> zJrnqTEXVM>1gVc8NZ@^+SRG)O@D$coGEi~SD%D7!4|J7&^EHbJe~-hG(@#I`o3;R3 z-o2ob_!G`eVgkG?CDWNgth+WA;pKHbJTsvJ-;xyq)QB#{OI&0-?P=`Nb1K<&v^&;r zh1e;Qx?_zl#Cjp$B(drlTJdcCXb>1?s`E-~(9Fa$#~rE9X)Z#an*o!-V(2Q%^!W1M z(j+KYy(2^E7XTHS1wsUZ!nVeo8(=95XDVduOnQEgfr~Pk`|;UzKs>1+$%|0z;XZaw ze63;>EBM;nIqAK|y;>Nzxa9sp(~bxSn+e90ahuMEayS$q(vE4w&I~kxMwng$-@!{7 zZ8t35U+dZd{fDHIWxnN7fvyUO8+2Z`0Y(38&`CFKB%x8t8yy)!vQV3}_*$|WWZxTfG>5HaI% z(IRTeeR_ZM+j*APg>QJJ%b;JwdvtuBaem=t^FN{2#VYW*KNhOx1Uh&IxhFJkKf*s+ zQH}xh-ld9xQY2^{S~oS*~+IRHF+q(64Ui zbv-1zt6QbjgB@#`ozYFU0w7d*WZo!_!u6THR}HH&m~X}FYat*@W^1vo9>^Nvm%4Jh z4QYq$-cy3Q2e!3B1qa)rAdki@FLFM9rY+yjm!J_5onq+4MLDWp(S?d>Af;G+#q*m7 z_=5bos5l*V-@ol!D}J%2Lnao3T0}XjoSd&x9dcYh_$ItlCRXql}b(n-z5U|f{ zXFhkrq40UJj-X{&;5aau8oIVa6S3P(EEG*zdR{0mu!bPIS-l*KXTT!PxkYpRX!awU z)NPvVHoGUQ{_nTW{CSq1IU}<$_=a;##8WqGB}}+1oUenn-brqUJ&B6V9gw&GNJyqT zu9VBcf|okyAt6_){7MA(_q>(Nh$WS4ZNi1z%I_ZoWk5lHW&Arkxlhe0a%6O-Wh%y$ zxg(iE2dO#b;6tXyFI@wUKe=u#nT^zVKa2#he|dJGmD77w!!HUET7N|52teTYCyZT^ z%$_mSf0#Z3Z6QCZvWWi>ej4epLvQB5 zoYKz6cl09K=)}2D z&`X|JmoZz8ATjYyo56%DshH9f`w-kg!<5|0mUigw)uHCtr@q;NAdBO2j4b0TU zWb}hvpCz`ZuKogKNSSBWEmALvdJZ_U+Ks6pC8qE;ce!yi(QNKTE^DI#2jX_Un5@ju zIMEmE981o?YBaUkD|7vR<@WsCL|U7Bm*r;+CTRliR!^w@G_E*(-AuvBXdxvq`0drw z5-nTavGX);ShKG2H8*8Q|0ut*F`?8b?qw!xv#j&SfppDRCtuND5Z?oqhtBBt(Bxy4 z+1x97p$%O*w>gh~4x{RLPYCp8DVoRhgU6wZ`hnF=yg%U1ggbJ_7SXWMDy8hIOecpY zEIQd81n4x6W^o(1@5L0{yhAam<)ubdCAGU=B8EMXEfY#rQ)I37k1fOn3Im8<(!cR9 zb=MhG>)_}ODFM~U?>t(hoECCoJixJ~(8$c{hLRrzBmjXO%=F&O#oSbd0TATJT##%A z#8OBU&jnhFnxTcZrw3)Uu5=ZKD3b|Li;Od;v zSFW^{^_d*_#@w;I+9dPSwJm~xoJ;-y=hQ2Ik}ddjZvAj3^RRu&L@zWk^&LVnQ$=}@ zzavIbi$`vO2GQeaNQI~nC=Mu~k5(|d2^epGWZ(Nuvd<-JD&~;?@Q{AB?$f^(5XQ|t z5D*(%J#+O+J9P`>vCX{F4kKw#sP-nsivlzoNjltxnSv< zB4pfMv!wdZ$Bv1tz_`Qz+5k8r@`bfPG(>LZv-&(dCg}&K-|LH5LFz1t&n*poJ41od z?gDdg;69FzxcMkAmIPpd!7U6zI!@I53LX2-el0XfDH2>#WEXoPm*W!_UWz9r!=cGN zwoxsebzCH8{BO-J%t{-|puifWY?DJ!dYUn$6cmC4biASgt!P7bI$COyhLm~@k5Ncl zA0Hrcf9M<1$EQ5LYlG3DzeVA$5B>C+bR6&imQdm6y=Mc3zW6Xp2uov({qv>#pU^mX z0uD}?hFs{$e}*e40I+0sfwniDt9`LjqxyA9)2bSWs2X*HelN z&G)ka6(c%sKJr&uGlP@;alXn`!OqdVY+xT7&KfrIq0%fUug**{v5*#MFP2WiZd)`n zJVvjJ-Ey&%riLjSUhuj(u3G}p+s{5krLroas!s5i5GdAl<@ltPOb}#kPhOM}Y34S|nmAAxt>CN~0deur4Eg9;4Z&9_Yo zaHd8ydTITMKtuSv-^)i4O(ZjKRdMb{cZqy_W52Nb)@R(>P7j@~jnCyK0i)N|^qv6| zkiL+wTkWsg0?p=n-7U)sbb1xoxffC|Z~ok~-c22d&&9;i=xx=HvI?J`_YT&ZV!9$# zUS4<1}lfQ68n^3F<_8(QtM-|Fqh!cXVY>8Cr^*UxCcV>BGbXv<@ zjOKGnh{nU(BksW-PR8S5;enQC@D0fz%6t7{&UJCR(Tdv3b!7cOakbHuFyU!|9!op& zIL_8*GmkTHpPE5#3dA|BRMU&IEjm>=+=oigvNlv$8gmm(?6+2RxM3(Xs`sF8%|dhp zlVagBWjh!8c(%f+K5U-8hsv1R6$o$LNpQv;8eGc=aNZS!3|1gH^_+}R%qzE)hR+ui zb1CpyLH04-$vz&VA!ca1@neQvG9Ce^(|%SfD6Sx;+0y>Eu2ett&%-BUM92DwYa;(t z>1w+hr?=1*X#O_ZbmQ*U5vkF4XtA%lf6sSp$O<}Sdpa+Q`pQMibnbd#k|9Z#KY{6* zf>z?ibm+cj=6L;hMknrYgf7$`RR7@K8zY-?J_8X z!aNZBD|(y?7rFBRGWzSw+3utU1Pm480Q%QRQb=sB?z{lU$%iF-ZZfNci!If`gjZns zyXPaS{|!`B9-8H^81scRm?j(zndIdh<`4%Q-J-}zFPLVb67?{b==PT+${GC+t086T zX(qoS@fl@IrPBVhL;yJ0Btja)+6m)lh=wkuw`|M?64qstIE#AZEO^$`H6iUJ!Kj~W zZ-#~eKSp4a{qV?MH}FAxwT=`?Idg2Si^LiH7Ki&-6iCl1qLz!hq}qpl4uU`DeP`)8 zFb`m-s$P zm~Q?yLq%GjPESDRC)9d-f~m`7nGvt*#muwH^eN$!jq&I33nAW>0;^g=O&?h!(xF5o z(cA@qI^uG`rE*>h<5IKv+iHf^wW^J<>U7|&^41#^Po3PW3@sCTnEk^79i?Unw= zcL>b}1Bkdr7@XUB*8Bc=$y;0Sa{Rl6VF7O7aV4IM0fCuJH>n}UY=vq9t~W23LgB2{ zJA9RCA2LL9_1kh0OJ?3|8tlF61_Xw(m2oBMUTOy-CdL+bCITE5d`V*H@Z!s+nW;tO@Zo3=u zbph?ltc>35=mNRj1Mx!ZnQ zrPZRYnTL+CMh6?!+hl_Z>nas!J=kfP>F$&azwFP>-_rO?tT-oQ*cb5wPoW+MN~R-$ z3EGnL-{<3#A9li9uH{kt7pLFUL*z8ngFR`lAnxIwBvfe$In><{B8$Kf=Q`_1EzHkyg^XNGJr5($^5JzBvyM zY3*j1UC2l@$Q(0q)!cPfAc&cG{P<0fRKrk-8Fc zWpNxOj&ixAYIFU#&l1EE8ZC18%Y8Dveyn^quFR%!$k5tbcaNV}ojAO`RT$&f= zL*mP%jB{C1e|Mo2#E=}{f0>t>>?Uv0+IuiLfyZpX4SKJjYkcb8;PX5P zV#B#`35Jcy!Mx_$cvs=K$`l2_DZ3$_lq%%;?`yc8@5;Zr#O%*s+QCA?YN=n4=GdN2 zuVn}9V9am-pivtmCJ3~ub^d1_Cd?ts>5}E|wvUj_8ymgIhS0PdImz#w} zC5?e!SF&Ry3}dM?(t0YB8;Z{^u~0=wuv<@vfrmzsP`l=Yh|4Q6#wXYwyR$EDBs96r zPL%uY&4b_}FDRZ`N83WB4V5MRm3Io&{Iqdaj6T!^f<3QZ-yHbCp}R^&r8uegQpn9t zx;`(}g2-(vgz3dcjmA@SDDByPk|*nHPS?KcSJ+vYvVqZLM~1DLquQmPy3`#M$C(^DY<@rlOC4WbAek+s_tZaLn4hUu2 z4O(NWKaCA26*^p0=GedUU-D+VJEQ->8bHOy)N{B*0Uephkp;=ubTH(@)t6gXfDR7U z$0c~{|8A4K2f*3Kz9wdG^T=F$@M!eZ7W(Gno;=$Z(Eh6UEytt*YU}mDDURL0pde1k zG|D*Yc$||Y%Ji1teLkm4Po5^*Wh8y;MX9Z^pHrea)dwBNtU890->Bch(N9LCKP5Vg zJ6Gp|{cj-H5a1UN#M5OXs7I&l1iGt!r~f0fb;uk(>>4P5;}iw^?QYqnoEOIj9<&R6 zf9<-)^s;iQUQI^y`cWkuDm&pgRn&#Jol7qc0!pMJq7N0I5z5Iqj|(mg%Q~u>fw%Qk zYimxbEe^{yh8_NvZ)M~oxgStO2e?qE1;3-s6ro1tJP&V>26Q*l)sKS%Og>c?(3H~jmkJQGsM4TKUt($6Xx#zFq`$;F=jmWG6tb!O@ zTlXn$No^EB-`-v}*bXC_Di;T$PIz#=Ka?A=UukG)TFDUUpES#5@i$Jmmj6QCS%D3Q zF~6XQ>in#5ARD6wz1Rp-XBIKlP=zUM9|51GVs-h}2{JN|nceIC1QhR`L)y*hCBEfA z{xXK?IgL7ll;;?z`<)j;ShUC>r2G0yIC}seBZa0e2j9ku7EsXtKp%$@g~W+@2&`N( z`>3;VJR&U!VAk4i3Xk1ww&@$IaQtgCm7Pm(jqVK}t(~_ovd?dL*;|ks+OrM+PEczE01-m*^-74Na$kI&skOKs zkTWHj)ZPy@u2cf_V(Z5wCyJ`@q?>*e7O)y$!6iV)j_)%zJU+%OG3#M4eSfW=K3YhD z-?-S$9e+}FhI&Sg91fhmn%^qAN=M|n3LlK6#nd6Bw=iSv_kv$oxAB0s3>Y4wm9ElQ zB6xpt8bc-q53qw;DB*4_qRw(!IV8O<@d0 z_5CpIm~HrVPZ0<^EY9}hAOp{=BdW&x-V_qf%)6NysV!rnjurr&D69scs$vn@9DOBVAAUk*R$JP z^fSw>APw*yep=}kTWEZcbqRg&LK2^&LXmf5>rNFW-I-ME+`tW&!*dt8ZQ5>AhQH;v z>q*)BEi5)VI6?1sG>yYB^}pG470y%(!J&K4(5x_3yxAt@TXja7^bCYvGk`>u5-QOu=I&Hkk))XgVZ3%GtTdaMi$%|AB1z)dw6<+>i{% z>7oeWNI&fqy^?G*J?qxPiSTPf!yTloCCC+ukyc3Mz#ow;8d;5XB<$9tHKkxLs-{~N zKQ0bL#=5$L{&R?4FsEU3b#6LF^|zrz23xCi_4@xqV6oJ_=lNuZ*B3%x?Gd>gYTk=O z5}pyhs7bGy(%S-XJ@@xqg_g$yRg;@*x@wzLVKDm%7iqNqmVIIW}8Vn{$i$#Pj zFe<{evs{Sp`#W1R(4^V45pGLku*kpDoCk1w8ZKV`f#BK8{ z)=1W!H)$49B&DLr2Gxk;6QM=#riYldUwo$^eAQfJD;+;kt{?V~57}d*t@+EA$C8gI*dRPoj+RPctVJZVEzp62{$JU#%!f|dQ?bRlq5l0`i zwALztinHl|RC9**#IPC;t^V^m7BTiYQuD;oI%Oern@w{CuW@gWJB%(ZTjJkGiH|tg zne%hujitWOEc>C?%QdlvlMzyAP&+DmLLDx{n>AJ&(D~JCFjcIq!@^f=*B+ZpdyjCB z`V$QQ463j6#U@*0+k}6x)e^ShUGlckq*Z-P7~`9$vpeT;FFDPJ<885JB2yJ#Xcd(5 z#wHnTp!?p_l7w+Ny5t^O^i6k|=jLLkMW$>SZGvM!}{zAUYF2*S833Kpz8S za{s5wYcOS}`ecU%v+f_xxW(ivNyUT8_E61a2?Q1)$w0<9eKhR*^B^}Lvc^ymtTArU zJFbCih3=U->1p;{uGT{A5H&Jd0c}|4EST0rZ$oZVgY<$&vr8Ls8%`r`@m>l3Pdhvf zw;l}?MOmwEM{MxTiq7KhC*AsW&oYX0bSF)vg1{ zH;42x1`#u6m1bWf;fMSts2Do5I*q8lCLVd(d|2_~&O&?-<&-^_ZLcJ%zG8+dZ{;k; z=#{>1J+zWT%;_1h;eSqKtoikus5BoUn%;d*xAk|@>`Ley%hg(tQo8J*u^*lw>MGRV zT%8V*OTU~qDk}d62CBpX7|Fr`6EnF8ku&*#ijXkY-anYw3J8?^U(8+r)Z#!eQWh+_ zg$>`D;^d7qJXaQpyDBEDJ~UkXC6J;HGz^d-bu(xHfgKQp?H-gvdL$JRBV;ZjiWT&L z|A-`{`yZ4Z1oCKOrTYH4kN(h#D^(3juBT)FJB|H>zHR&A&v5M2qybq|gr9h(rI!ma znW?-TLE~M4--wvMSWQ;30@y6I3^^A6XorFf5qm{Ll<2g4>{%}h4Co>-6A6&Kyhn_x zQSCPPKZuzn0URPB@Vc9a$=ALxVyiW;y0(XHEzY)W_b?RqykJSRqt9US$*d9XRPL&L z-MPk_X$Q)=OeCCd6~TkfYegGJvd1#5KrwS zNn8un;YT7mOJWL5L@e9g>Qze<+%7*h{myK1xMXHt42=PV zERTthdb!7IEzNN$1I|A;c|M&`hO|ZL_E>cmZ#km7A9yqJmT2#me@BWYeScSTA19ND zWkDpRt+YMG%~pP6md#I(X3_*4esF=H2B0GM!KCInfZ(R?i5o$qLPZS(2l_tlJ=FnpZ;?hYPK1B{vwP%Af0(AtiC9{{xHlw zG2MPS?7lhu_C*RrMjL`oEW}DZ1XoG~s4c=THsY;51~En^u}(!bR%W$chB;=Y{oRav z?96-Zy8Oi>l#NH5smEmqPpmG_v`bIDZqFqMR?05c(oa^~Zq^fsUhJ+Gm|ALy^Dt@g z_y3Xje{VW@+5DFuEYSZC7xKUANXwW;ubR1W=-k5p&kE{~6rGPL|9=PC^vz!V?%qWd zW(+jq6jEj#a_T0OZY;FwG}LZA^z=m%cT6<%P*VT9==#kl|JZ2v>8Stu=<9dub2Mb8 zc>60Ld9P0R2YvlZ;fm)JKH;&Zv1Sa{)Rn86zh>XA1Rf@$Qmo~*Nz(7IP0d8=E;ANe z)^(}^HN$GoW6PUL@&uw=c-mIS>*KZU>N(F~5oVht438xfadxUXDaF%~m8z-xrkB!2 zKlh(RVqAdv-Znt7!gC)^iT83mhdh|ER%d>FKJ2+p z{(|RETFfY1m`_hTEak*rY%C1!zN;?2;U>J*W(?S}zs!+%#`%+W|TuNCd|P5{4ej%XA7O`*Y5Z*jbYWC*kpw()7l zrO{_8uuIk*pNeh*63s=5PHE%0ecP5l zBOWg8<0~t9{5I{GVakqsss*gQjR+-RmrgHPG~2O`L6t(Fmf7CuPVg>)CqM{`Zu&Ao^y#TfnvM~#ZORw;m7_P*6=^! zTyiMWj9n|-wC1Wf)T^>jNo8%>?son0hpXW)GxnW>VfF<{zJyP3{%Td4}_nJP8aq&v7AD1>3(Nw#S zR{=s6IAU;T+A*G}rO+-KO-L+%rOpiyAbh0lvT*bA@E*^+BvHqXF^nl4f>l;8QiMVS zhsWXf1Nmi4(8O6tduzp5h5lJZ>J6S&We$_1+e@_i-bFcW&o({aHVB;iN33z@nC7_~ zxE6ZwavSew7i=qK`@CLQ@M~4ne+)%7*RAzcVrfxU_ zvVIQbLs~L1V*b4#SF%@!;_0H2&%!)+37k6RG>JCfB9(YC^_%|^@-OOth(Sj!>`;t5 zie=WVnTu5A!pCvCHGN5XzQ|L7SF(GcStKA@)O@-Nd@Be2k?^3{SQKgG7zb{7$likt zefk-cNC|uPSFk8?347QZHYpEV6f!sxabq-^?Htg3DxSQA&mZZEIB<34m9h2dDIj_4 zxMe)92?`&9-yATTbl2NkBD$x4)Bw9g(LtJ>QQ{iAZyJJIZj#YU1?L88Q@A}>oJfF# zt^;9<&S(@08ivItab{BlF=%b7(eS27x#QGRpOowY@yhFoG%-eK3Wi*58NxU^a}=bO znx&KpQ*A4B6476y^nlLaf~G2DJWF@62oZt4WSZkx&*xzEToc%%*dbMmu+tA53QMFV z2`F_oi&;(}o17|tP)N0BpaN|nX84yd%D6H?BlC@9@aD6Tzj1UK3G5srV!D~kZlXap z@|Q_9p*&x+%z0>)#z#MDa&G=3P0rjPW-16^+d`tFLXu)nCZy%nP7wpZ_ZFd6TpjLB zbfr7d9>%RBDUuJvc~ODe7V|jN-IPIJOPdOVoiV8FI)`IY;0UY1t`M?cZSCtqaQXGl zoW+v!!(V~djF;;aN|3JLyIuaWP+*AKVB{=U^;k2#n}Yx0W$q%vqTUWxuIY4DA^uWh zPS-w!0iIFhXsmX0Ez`MN*`;ko3rmon{x3Qr#tcsZW)=I$Spq z!CE~Ids>ym&($9t;X1pVY*4h{2)SEcn?qw!#QagXSWROMGuttj$Q$joh${io9zfE_ z%azplNJ+Lo8$q2rKv@(4W*fxON<~hC?gYu*l`dW~%-@aAwRpjVz^cE5+w>{#Bi9Z=U2^zQy8;ZmO=tBuX_ghOPRA{xbgZuze@g4DG)IoIV) znEp(|(|%RuD9`VRkQ$WPO8s45Qo%apU~QZ3gO^cpEY_ybZLwns<@aysLdUc)cGhT# zesjt`Ubb~Uh`Fevg!4dB^Dsecf{!`AHv@mp{wmv0+-_Hy@uRIC*{f;cb0_Q16N$TI z=tCCM)z`;Pwl8p>r~k4((~JuOgWe6Vje?ESs}Cgx$%6IT}N3_NjW&AD1eE z`MBx{O5lE$N%0pWin_zG_1T9?>@5(g#Pzg`EOT_kvwOGrK#!^S2T(e>wr#Y`aK|#L#lmh^)*+4 zlWYuj;qg;=y*#&o#1Z zBp*B(izNMCkKN*mDTT@}jY@@gTS}mu^bNtYU3R@VR_lQTZyXrIrb41rTeRXD`26@~ zZE;{qo(~7xL;&FDWI8c3BK@6@o8X`iZ^fje+|$SsN%NndnxC&TUZ5Y%f|pvim}Jut zx<>Ae{vLP+LGzS1E~xtyOu$eCrNK&iq{N*!zbFGAUbUtSUadms4yMW+3lHT2lw?o3 zhpt?LGE{i(C*GSKl7An6&CNn%#&IHa4pDavX5Dkjhih(gOaY^iC;wS<`X9eVZ>j(Q literal 0 HcmV?d00001 diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-regular-400.eot b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-regular-400.eot new file mode 100644 index 0000000000000000000000000000000000000000..1de96d4b92a43a0cfe0598d50446038e6e81a751 GIT binary patch literal 34390 zcmdtLdwg71eJ{G#e(ybd_PigGM$%|TGo$x&G-F$~EI;Bn@k=C*F?mY16mJf$ZTiL;FpfI}M-`aad zGm`Ake$M^lUTJ3Uwbx#I?cZAKw|?)n=E&oM(De>MV1g*npC~92Pax+!qtyN}=X&+X zvvK)@u50V=2|_{GBg_bAg#{rg><}Ijri6K1pTRjP4B@*+m_wSbZo~1UuqaFm6UY+; zdtJ_cVG#fQLXXgg|IK)&?FO|!i2CO6w$uFmTlo8W@bn;_?-$zfhW|Khc$neq6_x}^ z7~8Yw@PS`@D)_g8@D4w66F2X^X^+q$Toij%RLfz(YrIJ%0Sm#Ozlt zzVs78kS#%wzI$?Fes*OAH3{c_i2M4<=|@iN{_ZFKS`dt+Ae_B)YHDIKzS8@Lxc5DL z3#X7F4~gGIePLX;o;tJeaPWC_vA|xym>r&;IX>}2_UC&9K|_74aAxA+S>Z>*A0WL6 z<&$S8&P;9nZhw;?JakzQl)GkU<`;f`ddFu4;mup|%T1RrY7N)Lmr3L-<@;xda%NR(_1*ukv1^N6LTadCqgf$1%M0 zM-?-kH%gcIli5GA^MZox{pu_7aDohkZ>r zjN3F$0^7nqj8jrzPD_yf7}d4%Z{n!nW0yD}I^E*{Ejef0qif1{zI2UyPWhFe^YTs^ zK^(<3>O!5rz!}$W9fDJyo~i!w_l&R0(-|M4nq`<$dVuU-0)*d4cY)`~u&9qvvX1 zyoCFsZawAxTq-}~+~e)0ywOUza-ILi--~>=ovUL)b&al+Xk0iP!phIf{rAhBoi^in z)N$QsUUlvX8~+iNq;JB(H}TuJBFsw&vWPheY+Djkp<`KD)|O+-spZz?p5>9{-OF!S zKD#`-JiolS{Mho+^5e_zT)wdUJIfcB|MT*HTYhQz^78+^{L1pH%cU!UEA>|rR|c=_ zzOv`atyd0Sx$Vl`SEjB!e&v}fpSbd8SH6Dbude*vl^Vd0wUA^b( z!qrEwzWeHXu72j~A7B0K)z4r3($#NW{od7od_{bv?UlP;`S2^>{E7c3pZLjluN}E| z^4g=1!`s`_i?SK#hcDc@3tVq9#;cETSpUd{^@~?uuE2V94Xlq`d+W9LUi;9sPnBWyt@uj5 zfA;-@@9%wofMkGwzde#iTl-rx6r-1~dpk9q&I_c`y=-e2*a@$U83Sua~3woZEf-1B}&@V7v<{Cz~|As{hJ2tMmTTEM>3q8MQ+_sD4eW*N$o5*N^GnH|{lFFl}>-`GomH z&lb-&thiOM-e$e*4SRoJH`xd6C+si#b^|-VT@iiRg6n?_)i&>DWv0-SLmae^Pg%Zn^&1`mZ*G8}4lQapF|sM~%B1 zzt?o3Io^Dt`EyAzc_R5ji{7%g<*AlSsmauj)BDq3Xti5UwSK$x=b3QkV0JY7p`4yO zm^+tyF}K{7ZM(nitL>@wrS|W2?Co|+x4MtfA_OJYR_b^+WUB4N8fY( zP5qx9FbB>K{L|o5gWt(-%0H9;(NNRS`GQb5TKIBNE{+2Y#Fd||{H>^h?*@fdU{VuP zeN0XDvL03_7NW5c7Axd)S!CvVn5KrCS+vN$+8U2G{DHsA{|61xcx&fkN5^8gv9;+? zBAregYHDqKUXs{S^Bo5hpY;1bnK*Q~xz*_CFfKQ}J{4CR)9FSvo_c-LCuN!5FZfno z6#Lm1g}9L7@At7-RPDvPvfEiMTi7lZ2AaiUFGIdojEVlRW#3;XB?E7Ndmt&*-EUjr zXLcBE#tv=r-6JFKo{T;A7z>M8`{XmBn6Z1e84o>k($0#}bHU)b4;~A@8N^L&f@VA`z}H z9`gGy)~5&k{=szp^SFQb;rHSGrZMm#edQ(gDkMWq@CnU=5X5U#ye^2>(Cd^OK{d<< z8qq%(qTl+)(@%fn=?{Noaq%OIOua*~lGZLm3u^2IWIz3l(l?R6_z~}jtbWL{p6b)g zdXr|oj&@%b1$Gf{X%KP{v$qR33x|Z)qwfczk$}_wp#a*?25>@eAagJi33sxT1HjOA z(kh3Sx`*IiJ+qgo?WJ)#vgcH_G_9)ae(NP`&FANlrbz9FU35AZ&*ACPtjZ4K@sF!_ z$1P0J!&OIvKe||T`=ZCYhtl*B&^Y} zhla`}=xT6)jdksacSg7E%AAbu*luWk&4@Qe0`;PpYtNi~?@hx^Cz>{Q=l9cz%_hu5 z{c^qCmTbITGYpNr*G@zdjKu?zq-(z9im;qaCVv=DazO|0=QQ5+ZpRnd zSU7R%655|sOFvf6GbBrWv$NEtrNit&^v1gm6E0I_khy3~(@>mlIF{v+i47GC&5XX0 zjfQA*Di%w{^fp~@dsx?xvL(FwG9SYvUjDp_sX{QlibAo}ANG~YjX^h{xh3wvoK9e7 z^$JDIEvM`G8E#w6QaqqKwq#ku(0JtZO6ZL>RR)bX6@q`(>zPn0gsNnb1d)D#op zJMl!IGtl3+<;5KuGdnf@2uX$2^RH7_H~%skpLRr;dKo88+nL*a(VDr~Gcuyumru4*Ue(;F3WAD|(vg{g`rw7TR+qdw%&a7bbf9Bdya3R?~1fD(*|#Sw{BF&aE5vb{s zK`=#4=}|O2Xj-~%NOe9>z%n!=VW^qW?DidXsk*vUZRflzmbCr4s%V;GSYf}WDtKJ6 z{F>!4w1{RF@}H%L>UcllAdUk61Hk@Xj{QV~fLWNmg`s?|pa8FImQMA6rR0kvAa&Y6 zq1eMxs@5d3Wbck0_w10pcC1D7v2ID~c=oQXGe;7X_{_7f-1^o`=B*drnu*_f7wbd8 z9X)=Z))KS5$^>Y^*hKfCA%33t=L5TT9XPP7Ye!m8R#q?veueXwI?(e$m_P(28VO^> z(y1H+aKN9zftW(Q7UMK2S4?R+T!It2M2-mV0+L!26CYJ&Q`S}a7awyI zOz~LVJH$8e<7`87?@-=>KiZtF4`$waE6=*?*$zo^b7Bg5)KX>k7jEJyaeMb1z8AFC zkkg>{R8vFCt^=jZ$e9>J3*8LPLmb}e5n{Z@hrvTm!hjo;xM8j;z;d_JS^FUMzw16wM3|wfltTt;L-|L+&x%bLMqz~6i`1XYpeWi=UQ7$?q zEULo&JW)AJ8v+?G-^f65)8HCF!2b) zCyZ-hI|lf@-+u3V@9*u|ajV}lMPE!CV#1L}AN}~FZDCWlni|5fEW3zHyQk431~S1- zdyf3ez31+|cjsV7G!c%NVXp?G6z3r>?GJ(W6WuS%Fhph{E;O^yP#W@FI#5mIf8A>o zFMS1vC)sEsTp{a5v9x>{hs&TnRQX=asR-mFvbsg$5nQItn`ipm;2*OF=A@r1m50v|NlM} z>rh8amzS0V#c34hWzCq&yU99~aU?RdhPTcoK-4;?wS%?y)3J5E0LiAfrVx9NqU%bO z4&SMyZmpy~LCm|<=M8awzpau#t}8#F3x4=ArTF1-O5xDQi-){yj6Z*=PgnNPEgS@i zs^qc`#uNx)I8kU~k#Hs!1qmYwu#7xK1r#lt11SOB#Z5w{ zShkmmVJ+lgrsdnQwW(?JWZY*D@AO$_B+&Kfk37JThBtIA-DV`;(MfWfX?c0mH zjac|;Na|ALTyQrD>EM4WKVSKrD6>CBf9()nhnkxhsCd*?v#O@{fd8=Uh#G~S5-VhJ zBWuf1+=wDSIxxa8_p*g7a?npU^ciGBp!n|{9z>_7No5{f`8wJL2ZkF{bbV1YjrMVcc>@qX7K%Fi=uKMZY)d1qH-}OF(R6mm#_()puEYEqpFnAa_q# z>>|pnQn^00qeBIO{Mg6T$qE&0<21*aqr`6`u=X|z8KE1vTp>J=4Ysop2I?FImubm` zhFT)6u1-)E55%J3fMc9iVK zjE31+q7w(Gg!>^{<WqxkvN0@NRtQxlN(|5QMnEl9blhG^?PGYfmTtK!)&N0lDgfL4DYBn6vDxfj7Y$c zgI2x2V?aD&MmhgqRN6=;fiEi={FHrS>I ztRGkbJsz^v)=;pw)$%+TvF(V~6;215^h>QI?iB>k zk71H9NR|MFiSk)Bf0yd_SgpOmP^)T(;<}=FRO$otMq|pf`crnq%zAxEZCh4+ zUT%#B_2xi2+@&d|_Zi-Wm@CwNM;;k;#y`Yc&Kg-XMv5JAM5J+YZ~+KfgizRz7RtPn zVnwdyHv&(n#Uy{>e{h7Mq}Ide6Ls5ve}5{Piu09of|9oxw6gfqIQb%fZ*z8mq`} z@sS#JaK{_*ncfQWlqb$FjXHM3MI2Yp^${>3&x$? zNCQS$$wBw6T5nw0Qs6RPk}Pj)YgSq!(O9@i92^)ChYCfdWeC_Pr+Oq1rD`dbT`Y~K zClfZ*?3kUHOqa&l#q=Jr&aRKg>+0+}aZkF|Y|+=AILKneM`G+?;$L4(6j{{tX`0`R zuwr6$E{#KW@qx1eqe5iQ0=Wc6(R?aMLzocUbOE6{i@V?-;23Gr&WMZfqC`I;=^imh zPdrbOV0{)dd{f&+DXtg?4J9s(-Ey+aZr1w5P-k-AP=0^1GbHvYp|IXH#b!}9TThR* zZ7RK^vr~~XnwF8-%O`KyIp80PY1+2_*1n;Aw-)+Z`?mr7Ortrl^XAh;3rO!|Uj+Oa z;MQj1%YYoH)dMXGAfiL_An#Ra%>IiJv`b5d50(Sb z7YOg&1csa0(h?5%#L`o2Qx`k8CDz3w>HZt zy@TzttX=HBIAz59DmCzm9J=nzzXnhWvZ9el=ZbZ%qFqsmt2Jg4y`+lmwq<~gTSs9Z zK5DtA@#=}$M-!h&+sjoYtfLoJML|+@9m6Zpglap{IxAU?*{8-5jd3TL_9eFL+PGt| ziojO0*3Mlvu>%Xa4Ott3PeM~uxh$mmSag6}w_UsUJGcn=9)3)yVV|h>Ug%XtUs!E9 zQEN>)UXd0<^>^!{H>_>mtcAUzp4$+vzU#wProZX{R5z$LxopbOF4hA!&jFixOS>v+ zIxyol;0Ivb2(oSt-#U|Ea3vAX;yMxgp>%%7x;LY7Fa?Uwtny$;*32cHWy;DtMbXN?8p`@ z>v_ZPiCZjR?V|dYme8hT$!ol9+gh~BtHtG7hyHoEuSzIZ(f%9JyJ^e%p=C{PNaa2R zLWs}THYRUX@ASbZlU~=0gYZ}cGOiDxZ2zzBK{j5x$hOv4-lN7^QHTm%T{XZzX&6z% zmE++z`7`w8fba&qoA)OqR-1)EZQz0BJe>3Im{iO~Qnnlk$9mX^QjC$imNcER7>Q{{ zqCRL8rX2~qEyU!+0oy(w8}9GaJ%vPDcWcv7-z~$j)cNx*eOo)Sp%G2i{q@c5?e%pY zQ?<%Hc+S$pK}kBo`2d|sXmUnoA7jiM#6c7x{8IN#y#XoU;fAW?dc47utj31!L8CR^ z7TxD#9?ci^pK4@^5wdmLuO*@lrl;;qHZy8kX6dtB4){PzQ)_dgqb?ja?T~lb8`6?# zL*CMxABx55a?$#OzIHQi+wtJ$km(7Ux_+}?%QVJc%C(U(tVj^e|Om(m&Zh?pn=}(KwkJ=K8}r#A_APs$ zwbdBxZfLY5PoJroLB~*M86IEH&E4phO`BL$@t5x5;IU(75Za)J`E;~;G?P73=dn_4 zy5H6V5nXKj+jxB{AB(|IutoN4H~hR4^l*5vtGTu56z`*EPtdUAX1mXy(spKFOc!+j z&AJ)3y`jxP_*ls=&VcU}k1#6ibvY*51vw-WUN11dsa$T^QG0J`oIi@Bnf({eG5 zf?$fVtV;zeR)BvB2DjR>&lkD5&D&|U-5hC>?X5ho30YQ`n>BRcK=7`7{;r^Ve(}h* zZAZ4fuBWA?r{()rr`3LQ#OJF#8Qs(Fg0120B8c@R!MQy3GuZv~C}>)XnwX1MFou$l6=|XYLp{90y_%ZaMOT zOGoiSBH$pU(HqiHf0>v)zacGS=~ZHO({*WCSr(%Bofu}hYcOoBjFb}>!*1u^`O-Hz zi~1isdwX~GvM0Dx{==Ll#gNep!-Es6bBWux%6c;SS>J$wc>&fc%ngTn)o9995>icm zl`Orn22DES8ofDFqY;DnwUGiz$BndOHddt=moBp|lq-M6D=8$_>%<7Yv(3_8M;rc6 zJYbRHl!$hhc|%dy24CQ<2asA!g^|u{xRX=K zZ`8z!*WoNbGtEF^w)q;Q?Kf6osizF8-laZ}Vhk`xq; zI#ZOqwj}CGz!XC)4%@#e#u%dQuG{XHWlhc=GmOU0fNtzH3{P>Bts3UI#3U8j6Lg;7 zacOJYTCwF;iL*7*0CZf)wy`Mj3UZxtF_*{XxXnY`2Cvh&Z)=*I_Vhp^ZPX;O!3s!7 zXmXE}BO4(jENRzm)bp0QEpSk^RH@j|jMG6%2iu~pD#na#9MyPR5Jp~W)SS7Dp|Mp6 z0FJE+(kJBIPIjFJ?6q!6q-E7(_)Nd<6E!7n^~F72uP1(8s7vqrsFi8-1icXj~j7;RvKH z!ozb%V8n&0*K<95fgaGBpirtrtKw_dG}DM%;jpLv`bb{-IP{uUP1z*tt*WZOK?`eU zgK9>$L_B)DiZ+#DhjsGCbUEf|r&a!pvcdK`$ny_cIIIm>`YGMwhwEa`*LB@9>(TXm z#w}^-8LZ+c;}69(=YZ8)DdM8YgILIN&-JSaE^mlBgf@;Ai1IP#Atz%97w=Wo0HVvK z&6>7ZQv<5n@{9GzbMb?5Ln?{}Kepfr6@|;?kEVm2kG%d(fwef##j7FvLpJ}4; zIYXkOeh5!#TGdkm+Pf-$*pR&%(P~%q$lpZ*I^M1PXKXty+#9*cQYsb@GKC!&Y@JX?L=9q_fXw=Z}9u@SPqidPFNR=&N2 z*pU|yKT#(nfdM_F{V}rHV*Y?1Qn(^4%OoS@DAqKa(;@&x)gW;XNku>yg&qt+Jgu?6 zPu@F`%^f;d$Itou_HMD12+Q4E*Okv~>m9xMJ6p5n&7=2p#&6EC%+!|AXxE`m<~{ab zlGeQk=-6@an&0f`%|!QayP6Nz-`X2}b2vW~?Y*^hdF0kuW_$jYP^fPkX1~CVA>t@o zg7t~w20LLRC#mmt;XXi5B3iYD2bz%-CO;-wrNUaZeGJ;`kX9unR{K^QBdjAmMykq) z+$db~$69Q&Q>pWf`u*%OoNC)BKE#?Hdzem7AYkN_wdTW?Ai%+z+!AAc2y?;G3%dU5 ziolYkAIkE>Fs9-&*4FkU57|cSHa_p;$F2MbL|yqQU#a*N(E28>9U)p0GY^rHH1k4( zu@-W_VX#Kzp%|n%ijJ&uW5vkT1{apZomVzuBrVf4tzUeMpO!u|Qu?7CgeOZk{D#qE zJeF$AHfLc9f=A09mUi~kXO|F&VR|k2vHpUeN*DS<2+UxjVb<4o#M8U~A=Fr>ullx% z+1^+bj;+#orXkQ2z}T(YLrDk7ulFG+gnIDFLzyK}jGC9FcoXPF2uLXqzD2?{E|kIc z?b{BujeqdRV^ zlf;0mHjQp;R^)FV=6r-1{7tW7wvi7sl6`|_6sx+QWCQD0n9AyGMj*|GhMAoT1Kg4HepP$`t5u4_6 z)Me0}n;n!e)Afrjy2*v?-dc$c%IbG?YvQL#7SV>c>C43b; zgjmx^jNd`fDd-aKib42$ke_k0s$WQH6d$Df^sJbtw(PYo^Tr=t?Sj>e%V>G&5;gxa zmF0(}B-_MwQ#^2#^76QU`Qqy1=wDo{&q!iD28v=lgkg3fG70>CU`2LZ1Tax8~Gf9DF-eJ zJ|EB%K&x~MIe!2X#jmp2f!^K$8Cd_UWyx-uft8fLw(tIZ_^|Wa=bM`5w>$iyI=z2- zdVgu0js%P7&hrnzraKErxMYb@a8#%4&{idzhxW@Oo?;M<3y^oBFxzFzB>-#|5n+|3 z3>#dKh(Z{xD7TD+w-IvR~{*;`+4XqslMKVcPv zQePjN2!BuSRM;E+U2Svm$fVIiaT2nwfMCNa$nHqxH>bPw_O@^gYYYDSoZsv9@z9Zg z*XwWK(I9@?>u;~*Eog`#mGyQixVb5ON1)!+!of+$7l_!|{|ejD7a<9fC&}$2Zdyjm zAoZX_3cPoqLr~w`xIds}SGof#NDsNBn%N-i2aAn8N|O|@{#U?!$gf8mTLzQCv2b&~ zA&AgvRWm|C^onW*gQkkk2?e8CgKU|aJpWZNr$b76)45pm?H=3ve?^P_i1n71HoaBM z=da0NF$0-5g~Zhr(y zVpRf}A!Cp>M_4m0+u@!vnz%U%phol?1%J^s4ZEhsh!wjXqDEmZS$}~zpC}VjZKgjU z9c}LHY`*tUV?4U4@#)U~W2wg2Lz=#4k0?ImGmiPpsG>>IM`ETYB#G}c4ec|2+xCBk zT9H5-tpufzNEVW2I^4On(+GJsZHjv~4JEJ;>g%zL(jfM+2Fdqzk5bgF29=E(;fTe= zVcBD;W?dcc*-Cf2eLyrnfw*Z{*b(kBl!G;agbz|1ImJMSAkZwt!`?7~(OTY6AEUro zig!Y@n-P1_$i(i@zN?44e;JBuaT)T}Tp*^O z^Lmflf!}FteQa-5Y>Bnz`+8gSSW8Rk>HU%5_o1hGL(Rca!`5Q~UCAkNALmmvr^z<{ zC*a#Bfv;RV0=9~&9uepUdpYkdQNxM0xCAprODvMDmu&@WW&Ely9#J}d zax@{=NeyD76irA;sb21d<{@`V2{|b@MwC`WbLTw?)x68w8DJ08_o!@tFrph*+qP&P zpK(MDg^k8YlYX1WOms?;9PdySZz52L`5XL_Q5O(z^M^G5DO>ZtI}p0u6K3lc% zVP2~(eOT8XiZv#l;ZrtS2l)BKNdx>Hll>+bGL#?M~u2P~hbu!=QlcN5Q zNRp-?Nb;D0&Lo@ks-3~-cvRO$aAB>T+bgaylQUu<2Ar4C+yI%~Aj#CIIR#NtrA|%i zOKM6^)^+*Ni8gUdQVIGSYL%QcfRWTY50fqHRYkjFFeM4RyTf1Vc z8deYFsXMnI>NUUNkn-*r0imW|50PnUk#c2N8iStQrmOI-TI6%^2^as_kL0KV|6q_>$VL86818Hx7~dGc3E^$Jf|)pLIffNDp_{^|T6zSi$xY73&L!Bx&1rhQ;W2u3l{^eZPk_m4496nz~A?rML8bnnMmBCfy?n=*m6V z3GX!5=O972>(jH48B|!Kz)m9DVbCbBOZC}o{rNXbvNcXAb{=nEBGPhxm-nJ(uuIwc z(&hT>y`ps(ca!y51WG08K313-TL(-x4yc;GY#1SmC|J&IAhdCIR9?tmzOJDxZHCrI z@4#VpHCankeizUgTJ3@QqSl^+_1D6hkTxu_s)2;PS{+pMsnt4Jt|}nu;mVs(Bl%xe z#3k5e(x3zTg%j9>O<;o*cQTZQOk-p15iJmeK9lBTH2|3#v@|A^10f2IEfxG{J5)h6 zO-l!2QNG5MmIlJ#k>;`=&Z2z1~U(LQT<7Y&dp@ff)4B z2mAc7zl#M*ue0fry;o7EjbL}95f-Dl%}in=9f=96#q?(kqbaT`=eoB^(qW&qL)X-Z zR zrtA$RHM2FOsJASQh@P!#Sl5_3=z&6RTDQw`AAimnE0P}xZyRCf9Y-Hln@Y)Ss0=j8 zG3@P-hqn+yCDt_2Di<(uh`~AXCE5xCP-uw(w>U;)ST2Rw6B*AIV(gy-AX($#M6m5X zDQHCkQCbvZ1*J(vd|jS3*fD<$i(Gq;AiVd2n$*pr-zf%fF_t4Rf6>$tNni9+QC;;~ zK95)O7Y&`ROF!e$OIXd{vQP4vHY6S0XZWN;rO%f{ac6tX#Dax*W)G7}>X%Hd+j0ug zss+*NMpTQTb$L+;Yo~Ne^mb{ONknHHc_qjB3t~-Rjd4vcmGi1O0i6ITk>4lISB@yw zxYh?U1Op`<(OqhqeL5Vr;6K6_opOl-KZ>L^R=V_JJ`3ghIm4TS;oj$~mlHX!!IGn3 zl=O8>4HeQ~dYP7Ryo@KZ`Hy(?P&}pUsdz~D2wH_sQXFOj_uuTLwZLm=I*-S^A+*(u zHCM%CtJ5{1z?VzO4O@Y29cF7k8-;Z~zrHb}x?jhq_TUj86wavIZIm<5A-~a_I z5Gl|yw9bSyv=|Kujmyh?o0Vru%c5VaZIX=?+2um8kxde?WCF0C6S-J#g}hw4gmJudIh@$o{`m6C<7^bx z%F6=7-c*;^mqF7%2wA>~1f*VYG%hJ+d&P+BnyoNl9+i#Ixglbkq*!f-*aF5$QY>AN z?WdS?vcLyj$(A!t_+CVqNH}w>D7CK43-N}Yr1v{M8i>JkLGRFFP8K*ddqKqxKf0ZR zmr0dorkvX<^@0jXAl2*Ie zIXW2sZF_lP4~zav}HY(QgmAFr>U>&I6MrXEUT`EW?xS|(y}dY zJ>2m+7m#!eLM1(8h=>c-R2J>%h$4Uwp^+kXld*YqNMElukLQ=ItW0CTsep%l@cYqx z#eNTv=aaHR<895cB~PGLR{z82DywA0_&=t#SDT1%=b@HL;Vin!AKa| zZ7DTwO(L*UPJJ@?WKfjumA+KE4CM`llkR$rF}{;S>3L3moQutd4KvZ^#>PeoglMev ze4kSm^Mh!mLwDk!J9)I@X0Cr$+3T^6+L1Q4u@JYnVZNfBL$ylEpc5uo7|;m)=o@Ka zmjU|{0pd4dwqH>1EIrB3oSO0*5A!vf{S-!XO4s+6E+_pQaDgJxf1;`;8>7=tRLrau zWP+sPcpqOF`b7CD5K2dfUcz`#6h7JcYrz|a(2X3hAHJ+36vz_=fDMHF5Y8$C+Ow)m zVYLI!De^vm##Hn_ij*g1A|xCGLN(76?vDt92Z-Ypq_v{q`V3T;*0_KEd89HL69;%W9O1 zwQsA{VeqbUM2P5)pyujzj$QzDCK7f7L7ctiK3xmG6a3+}`7f&5jCGwWzgYRN;x6D0 z$qO+^ZA}72Z2^bS5(w_J?-41rN;)=}!IVvFgGDWt8;ljTVw%0I${427k0ndOzGBKG zLhuf3&hIY$YyM05uWsL+pL}@t;KW4W;XJ#fT+p=A@5wT|L(?uOedGM^{Kbo}ymIj( zmwmx7NvG1FV-E>8p@-clT$nIB;Wz`n0%K@Ll_(tV&cp;M0j;TyuNY)Q(85|kcMw}2 zX~`E@oXc5HfKl6;>cci7i2e~F+>Pq5k}u~M#528OUqgn10va;xVutn6mMM3i@asph z=ZJ*m*0#iosDMEiD)I6R{I;}wksja&J_j#Dmmyx?uz?)|GH=<*2i4^U`;yg41J1^K z7u4x(+hB~)4V?6-L8sNLwX%Y{?(-ivD(gN8+E>~C$ccUKq?pI@TEw+yF3-AK-oSo; zo!yb%&X-PBA76aU{gRd)VWsN$C$GJM64C8d8JuKXteIYG(QK_*fm$qNT^YAXYZ8be z5H`_XPn;l>H)Sl;tVeB8e}}heDV&j*Pc=PR%Yf7%hU#m{Qft-P)SSM9x28QF#1=vZ z{;-vh6^3Ze`OPZaNmvlUH`l@q$7jtN)$O3Y-VRe<*T8Q5MREU14v53Fx7xLW|)%lN!2tG3NnL=D8iUOwq`+TL%Xx6H5%oMTHi=h zg!X{Lei>3+3YdY>P(acRxP?OAfMP(wr&#{lap?p%J+wjloFx+&4U*3R>zapM(1D~EMj*~MCz;^*VQ!zjsd4U$Fekv=mrG0a;{a*zutOart$E-tz2)+ zayEUGNBs>|k-5tFM1DWB!j;&DEq4sP9sy_k&te7}KRlxio_d0v7Sz9-dSz;NP|u!j)f z@z%_HXDxaG@wYp`Ep9=i=wVu$v<^OZ-dEP9mt|8|*X6N4(ZM1@AYfRcDpyIGy#^aiCs;{qa7T;5CxIk8I6RTIYrxW2MJ&D73T-S`Y zxS{E7@p$DE*W*SrZp7D&hl6eF+M6j*xR zwsXAioyGaJAg3f#PxXYeQQefh2l?nYTRGL>i5I+&Y@(pYMOyxkct4_NF*R0mwQ3)6 zaNdELM|c9_my`&pW(4w%9c%GtZGU2k%7_fiT+O&)7ypUInC`KCS|}|tFVB`i`7RKJ@us@Q|nQprb}2dRhPKQ6jNZjP$(S(DQiH%Q#1t2eci$2(d@p zYEdK}OC19gCUq4@aV_4mW4x(l44mELw-u${hG`&f`vZvf{3FHo@6pAu9Pk@KOM)hE zTjtd&9R4*vtsHzD3CfK=FO{TMjp?Ov{ckO}Q=PPxbmk1y$SqY~hxMNFp)Z{nm4;dea9t z-x3KW!oz*?7S-qO=%|It>KD;Fo#w)_rxJ`0=Blf6-L11GV zR>pP2bd&Q|^vKN`(+(K*vlqh5TXVrR1Qqn#V+o7fr5?8M>U2blc zbw&}*xI%~kzpN^^5w18B;O2B(Hki_^;KK|#o>mmm?-!MW{6bO~qbp^#6sVepy^~(T zp1m&shhkiF+yyz{bS(}cx`Fc_qIpC9Ws+@xkL&+LWSzbp42 zCzYYKl=8oAL=-QrqKAXDw-G*$C4B?K!vnr#|M2i9m_Bl1c=*J2gY6w3f7R(zPB$N` zC7Y=m(nt+hM3ER(GOPkKD^WupqUD3N0n-jMiLd4+pGGtWdq;K8!M$6im1TL>!6LRP z=!uAuXp5p0@dPvV!KOf>e;CAjxL=N~@((%oc`k~4iXUB+S?Mwq7(O*@C+$&;&iY)S zQLDReGkHHY-&bdQy29}?tB8lYJg-zsDb=zpwQnzW9jwfg|493S4!s0}0QJ3*EV^ZdK*J(5F=j`#9M-*n6VQf&&Rc+PKgYo=2 zCFcu#NdBGZQ%zgRe?vQ_Vl@)1Qq|p5aJ085{CXrxmFdU29Z&LYWfOwa@H;tTKUX6^ ze6&h1U>58LhD!DWRX2jI9G4GQNeiyV@5;3`asZ9#W{M&$^MM$GxFFHNY{=Om#my4S zr!)NIP10Iu%ev}sb09yOPPbz(0FkMINF*T3bX4Il@izoL&S1H}XyI`ttDnRA#;9#a z5elZN68tETT|6SftaV+~Anh5Jk7f9vxbXije+Ip~I#0=ioQCX*c?ug}j9YPCn~hw? z!SWAnWL~3zz}@N!3Lk~=ZAqp@gx2c_pZ@C37jDpG1#)n`MATW|4H~}3ljXQ8TK=%3|2np<#0Qy!*+h&yM;U;3C7St}<5OOgaFNV!vsUxePl_soZ>KHH1P9 z!4C#ol&EOjZpHkf81fsU;_GkIxHf*Wr%UpBnv-0gAo{k7KaO3q#%3Wn>SnYYdr+CX zSeNbu&Vu{9yRWf*q@pZ7&vE)w{P;mlXX;HocF#=^bJqN5%i<4tS2#NH?S|UDb!)eZ zn2uU_C^iZ!2FvrZ3=ghr(35N@ToH4S9(x^M7ryhg*!b%}XRb+FT(kWCjUZ-yKs`q? z0OmG9esk1Fo^@cg32WMr0M9_2-r6>V9I8lkg(PrCfFup$M$mt%tWCf+|4Nzffe&7| zA>49BpHO`IF?=fu#%&d-Yx|w}+y*cQ*YZ4wI8G$Q4SM{&^%WlGT7#!w8#`F*DwE>& z-~o;|0=Eua#vhfjDs1ku4Bb5T1%;%VrQvKH9zs zYmnBk`Wh27dtws^#3sD7`$RX6pYo}Ob`8%T;am2&!*gZJ7zwUpTjr=) zzgbuJn{*ypoP^~m)Y9AM1Oa^UCEohSZ!k?!&Gf! z>T7lxeGj*+RaugvnF_DwHn)xWO>UJouA8~Fw({x;{QKN9;fPL-jl34LVLtY6;se3E zc^$7Kx{P1UD%0iiyIZUE6gY!cNwez83NY2f_*L7RySNVG=p;|Asw89L-dzeawe%d; zVJK@Y_g|`_#C?M>_f$ypt%V#nYN9Ym1=%)QbRx;dlK(M8o+;mVVNcXtu2+I7Sn~tK)KZ455U`^2@ z_+jSLSdDdx|15MHR#LYkUhH~56fNwUnSEsL^vP2T$+qL|$vrb?7m_<3nwpFP?7L&-gJQ&Y*?rcN$SPvEDg*ZdN7CI5N=-uPXlkgfjiv~YtrcMtXS5B4B5 z=0EnL8&xfU!wiCp{vZ13?7_kQp1!`#$+nu-JUBHse|qNZmZZ~;_SJ^e{_^(_8tDA$ zclX-9ruy8m9il<$u5|ukU<>_BIQ@k9G59d&kv;=#n&&t)%kirG7G>s9 zo_>6M0#}nbFCc#g`pN?+vw;2(4xgGzJ~VYKH=jI%-@#7K&dd@PBu^ioIh&lHT1ZZu zolGvw%uGLUdI6;gWfy?L^Dtre;{ODH%>t^g{%!Lf{`xa0zOXPmzoobL1ll#>;B3$F z8Ql2ghIpeP{XdPL8@*$7F8sd%ryx2+b>(kh-P!2xIb`A|=)w6UCWC;(K+SYUrfd(h zm=^((KIUfu7Gxn7#*PTsi;~4z9jj*zEP>^7;Cboy&%=WTd*sa35 z**^Rp`2lv29b#kbb?i2FJ3GwoU`N>Ng?F)|><#Qrb{D&w-NWu>_pxy{!H%)xY?4i} z6YL~A#ZI&P*#m5vondF$44Y+dWOHnuEwDxQAbW^C%pPHnvNy5E*qhl~7%jH>74|mv zc6N@vgFViEl|8}U$==1@&7NfMVNbDNW9Qk^>>2j!>;n4@ETO=!!p|+p^9vJm^5Xo| zoN^q$1OI?NeR_VOdt!P)J~2IUQa?5`^T3&jxd)WfXC_Wg$y1Z37p#TTXQt-6kDs19 zK0Rd}KQ(py0r$f9#>J`m1yOAz}09Y&nobdaqGNz|aEO@J~7iX*QPR=}ZRz41fACcs6LY9gIx}@j ze_-m7V>19yFSi>HO*~TWw=<{DR%&oN(W%awNAuBT91!ZJ*@^l209rb=;AVCc%)XkO z#o1uZHSYxZ1OU?MKs|0OoLW3{Y`%MO*5jtA8fkv=4|a7sL#yF8T2q8W&POV z>FLSSXHPn{%}$;$c(o7B%uSj+HTCfEsc9ci&dxkEHOI%oxy3QZa=@57e(LmtQ%?TG z;^gTWC;8y%$*CEq%HuPWQ|R>*Qy9pzCq1(hvr}{3=(w{}>WRgLV>8pn*{O%-dA3PI z;^0;QxH~^J351v>{KJ#h%(45YjxThdoSRvkwcU%wv;5KnBt8DXBi(0b7N!X6&rTVq zW)|m80!!x&jwy4P38sTH1b~A+^T$um&(F-wd-#p%(~n|sokH`oC~vLe*wmc+@YKZd zDQ|iF(Tv4;yK==bVD*yEs?|$AucR{*vmSR6&=^{?6PT&)pr92qvu>J04a9k1%3DTV zK9{VC$;r8?`T1^|$CV43HXfSt<>5U&iRm_Za!NyjZu%ZNeHPf!eP-g}(`QaUI#szo zeU@L_?tN6fFf%u0%%7ck2;|~{DPv&{Go3(H`LNF$$EQ!v@@Wv6n8VbdTkcyq8n4eK z)Qhew%Mm)XE_-oSIyrU521%HDr2E)upab=i3mwM^tK5CS=6RFP(Qe#-K$!q8JfcjV ze)Q2tv=bPZQ&T`?n!LQ@w3Bma!0{;==d(H;sAhvFj!jLR@l{gY^AAl;EO_`er>OHz z8WR}gD8TcbboT-X?!4*bfS|cap6fibFmv|g;#82AaMCp8QH{Ski@({&CN_tV;XgXe9vq16TpkP zM|3(9xNbkv`}Fz6x!JkX^Ha*gX%J=N&TM4`9Gf9U8-PUdr7KDJEu3KyDsyvQLip + + + + +Created by FontForge 20190801 at Thu Jun 18 14:52:21 2020 + By Robert Madole +Copyright (c) Font Awesome + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-regular-400.ttf b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-regular-400.ttf new file mode 100644 index 0000000000000000000000000000000000000000..3c0cf40e0e9e70622f18fc4fa8a7b8f8b5306d5b GIT binary patch literal 34092 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 literal 0 HcmV?d00001 diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-regular-400.woff2 b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-regular-400.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..585a29db5ab907a9d6acee028d75f2534e286501 GIT binary patch literal 13596 zcmV+%HRH;6Pew8T0RR9105u!{4FCWD0EH|705rn^O9D**00000000000000000000 z0000#Mn+Uk92y=5U;u|&5eN!_-9Uk@N&z+kBm;z03xYNP1Rw>9TL+IT8yRZ{#dN z@B8=4FPB5TqjLBmNzsHSUN3qxKiSP@PjV%&b9L36gjPmH{{h}@{bRlNfCpQ60?AZy zfgYe~0~A+?f(*w37g*M5rJ`ABOR;fkK)3|D{N6dEB_id_$)AJ;GN;zr6{ZxG-Q$(sqUm1d@Kc zxit0c`ZUAWeJfq{uViT1wrnd)O$}7JUt04ux!h60ybfsMA!xMy@Q181?=6yIBfVKCxX3Wyb=3{ zoZ3q%75&b&*H)>$qHRvc6p41vt`NXg+0p*&=L%^JbD?LXi0g?jz>zmTey(B6_5YmR zd9yszE-lRkjs+r!IP(2*j{pI;2mEE^Z#4J_h>rIsUv$8@==~);KfGw#R-49d^QX5B)%0UCArIcGR`jx3Am% zjB#gC)}}W*ayUadk@+{EaBiA?$VTh-Lrw=r3#Dr|-!fO(xjMAt))cF4$N6`|#z%HN zey@j?^T`cq%IDdhZ|%7L-%%f4zIbry?2&%o)-N`1>iBHs;zgdk+=QvOmnVfz9rZ8j zTk0F?OX_p#GwOZn4eDX)9%=`533U;*n(CrDsdlQBs;5F!Jmn+hKgv7GE6Q!kEy_2P zeU!bFJ(Qi4EtF2mGRizkD#ahUitIq#;YIMfmpyx!p&+fxE9^I&td=0icr}<&!Pn^%h2H}pfcAo&b>LcBn{g?I;UK%)S2T9~fjwl2dKNq`z~oAf6=@4-dzuD5eo7<2ft+wW zfDt*%4g{v!z;3#2$5&v$Dk)OpO#$rGBg6=CCm31vX$si9f$-DyR*wx#>0pH>{4P~i zf`^$96cUk zzd>UX0p~MD!tg^5Oi`FA+GnDMMweLXP~Zs{8|>J+gt)2o)|J9H+bB3Zu-ab{MMr6N z-Ms>AK`k`4VpVe>49TFL4PcWY&IVo5!_!$OPwO^TVu0CL3AK*?x#SVIvXO%LoY=tZ(afw5G3=;T53$bGiBqPeD8zrXjjJLSTONjexh|zMPJ<>t-SIobgD+!l{ zA+QtaI@ZRL&&L!mJLE&W*v{?C3WBZAv9j58JuS4}0(kFTI4$_c_m8=A33l?-*|Wj3 z;MT3H<4Wz${Q0CjbNa%C_+@;~84ngQ))4xIc!&I)*2`z_4Hsagd0Eg3vT{|Rg|JJP z{Mg641Hx})W#VzD`CBSKzAzqv1d7Ms&F9X;7zq^wdJ3kAgV3&)7*yYZ@`5OZjY7cB zxf(jb_OcppK2Jr4Ul+jK!N#$Jpb>ChcHpsD*=T15f*Qa`x%Oq5X(HD#^pbdBHn!~0 z{+cqR$IHq!ceALsOWFRMBlY_3P<8sxRF@sft(me zOkEG&|KJ1q6o#pB%@9`&IT$1cXlMs+D+UuEK6vU+&7j8gM}c73$R&NlG{TIB3;>%x z2ov>r{&^<%v-tqpw~uyD`BC3=1hHXkPlrG}%pWBd;P`9Ic($ysgd2}C$- zwt*JEj3|*M!b}V7Eo_KKH$4>%GKG4^A$~izKH&)qTZXof)=N>Q@I#91C+4luB$v$gQq7UF2kX2r}mm< zg=MUbCAW9;RH4xRhLb&DRs6KMWv;N_CgQac^N2+Z%Za&Upy7;Yba2<1cW3P(44n#A zx;}C;)w~8Q+|jw7n+^UY$gTn_UJ*nP@tQ^vjQDrDiR9fV{xJa-f5w*EE2MMwtUK=v zQqRO|UsBb~EiGM)i{8QS3uc}^wlff|e{ZO+sjfJkloLICQ8|6ruw_+m64x%P(lKWA zM(;^eHd4HSMgH=2ITv=HQHPbIe(O@X{OBw7c@q!(GO(z3j;4w~OB6#L-eJV?e5tj<=!p zjq_P^%X{YFag)&7qQx*U#t|bcipfm)i3<&>k1btq7@NqA-7CR9V%^*Ls(AqJZLzGi z=Qf%5_pI2A9(+#u!ODdBMM;r`kN0c}&Cf@pG=<+>ya!>sB$!IB2Zsj-{tvmLusI~q zz3MT%)KQR=?zYZQwv?1n7%z1}`AuFwav4?g6{sKXxP!TBe9{1yf2zQ<@4p7FO1O7=#s5 z$>u(DJ-y}mC)7qb4lS=^!Nv3QyH7<2)eXyDq?;$;$y*{X?a z)pTzp#b^?_^G+9cR^#%OhiUWXE^`WC52p-SL8|l<-on*X4mxZsTOL4W{S<2!h?q|6*J| zI%gYAp>(mJxI8>W&dX-#)zZ^^9!fnHurSD~r}d0=Mp!?-m8Kq3Sk?e0HY1Q>eY; zkm1@sZ9}O3vGgDpNz^-jA&Naf7c z`f|(_j^5uV97)xDzogt&ay4bn{o0SkV8z0?I&2U}!CYOMRuxVZu%a#v6x~{$1*$?VO7fZKxZ!rAO!+)?Yj(x0S)}5)Mt!a%Js0&PcSEFvu}? z-qHOnwNw-ziLrK-64QtWXM=*54TFOL;_7O03hT(z*kVGD`z4*TmFACprO7+jUfWI{ z>K<34DxR78>bCc6tL&8d_Vm#78tH3+$ErW=oyz*$^ko~V~Y%q@J)9St@8w9m7nR< zix1LzOQmP0t2z@?iA9xnhCf)QTn$Jw-R#E9Ut=b_>(b4BX9Cz{3gJj()^jo$;n*Hs zs$2jyOttYZcn}2+8%Zo$4Do;Q2;>Yggke_;v1ech869X=d$`^ts;sx^4wV<#012&C zPxo3R8CEw=sgsE4<3nHr0?oB*LpIwXWNDWl48PJezuHRMn9VUc+=KlZI>xR0|AHDSd3eJ4Kx?exC{=ygk zcwLUX*ME3S-i-JE_3LY|&DQ$+e!3OQ@O`|&6=@f&_(YS&g#baQ4ol2kIBf0;ju^APLt=k%2JeSZE+t@ zDv{#a0|MG{P6Y4&`|GXNlh55__8cRC&4X7uIwWel;;WjPJOsoxLl1685Rr}ZS%R`< zw*PEkybr$Uv*&fUgP?7YjaHZ0`6z;%1Cj<}yZZit0}_up*)>k(fT=26$8Xrn`;k|8 zRv+jRa^kgDVS`ud{h6BxQ?@-1CgHZ@v^hcK&NZ6 z`UbGGrqKM|k4cDCO?uqVPUiyL){7vRON<(25pzKhh@|fUq82K3A^KT=cE5==naX=HG8bw$hJmfR#=&~x30#Cr?{gi57OS9p3P3i`}5 zR4%}!&V3Q?459~xn7W+#(?1QjXB_s}2hjEB_lBiLS;C}?-{{N3DCf?L7=)v z1A{92^}`tWb^S<$Zl)k-zP(`82L7w(32JbyIZq3>(4n|z34Je--{lN3sq+CF`s4_5 z%5spe%OQ?nZ9uJo>0?o{A2^Zfj#R(N>SnuJBzsgjFVq>@ue$=9`fhG&*r)ZJqnyx1 z80bg0FrJhZrzB@he(Ty$xY8{9zLg2822Ibx!}q?N?#c(owd_&$6I_egK=Hc9Xiv_b zSH4yR&>jm8yf!u6=6Cc+e)13-xqtTCneN+sG{XwMnQV!6p{c3S*aWO~5IlrerpU3a zx5YDFC|M0+iv%TkpK{2wU!_PW=BuO|4-}JQK>K+CSTp8@?gO@r(&7hh2k2ay#;4c6 zN}!Ey(PKwq5*iA#bZ$+f0WQm#9&}~>f0H1r zT#=X=#>QCuYgMH5tmmR10O8D-<$CycDcZrjw*RD)UBgafS>J8Im7(q(r(@Wjn64oG zgg$W5LQnj{g1q}m)D@j0M3TsUC`qW-3zNd^Sl`RXyxCBz;`lBy9!Vda-rKy=;Yfwg zV|pRi!iBDCfYwJTI8AXP0NQ>B2!=jsRJ#+~?Rl~%q^(qrAgO4kOBy3<#OvzeMS$oV zYiMoBCT^pxsrWpnl0+p{=BRn;ReKa)A#8rqJZ9ucj~gPhtrs;aVv=iU@gyh|~&Oal{k=yH3M8)JYEwkRd#KEj5vz)$M4k>5>txU_wscZMID78rHl%U?A8DIe$I!=>!KP#<)vt)RQ} zAkChu72=d;y$G>B&;+Y zGjO*OhAZz5V0wMR`hNF~ge67OSKZrMhqkoeTS@qKi5bM?8mVb~mdiCO;o##Ju1JUz?)xQDV=!pcX|tjufANKLph%N!dc(nll(Gt7 zz}|*XnAB$Co24+)1~A`4tc38m6#F7Sii9Vj_$Bv<;)B9j3DA4yd~oVW83s_q#~0{J zQ~;Q=whL+-znKp-U8KyZYt^GKv>rW8wcnaX*)f@x-AH^u%8@rAt~N``b4U+}jclX} zsMg15*H=4q=z|bcH>~9GM(m{LIKVM3LXe!CDT}eR0>=g?8cwF1XEVn`hXZu@$}3CA z-m!N0e|_@vv!lLeWxd(>CX4lbR5s{JxAlVX(x1*<+MLBIuZzmwYS{{+uigT|i%An~ zJOow^K*OkwpLBU`62b5jA-Q8-8-fU=kvsUVqnqX(qlv$STOsMC&5DODcM08E5zyX5 zDuz7S71BO%f$=Q>7G4_=4D2sk@$)|7RqB!fm0v?0O|e}CD!=S}^2Qo|<;5@Kfm-Ki zcXIHwpC(*S;F@}`-3vsCC*%|D?XF#-XxuiDXMfIt`fx+Uw3w^9kIk{MqMha9_;%?> zSt0&;up>v#i@#m2Zv1V{+m>Y==;*dh)&VFii-0~gs!N<5x8|F$ASQ&k5gv`0MtHIFyjU$E87q)$ER zC5?CS`Gpf~BV8+gi9Hc9KP}BTZW4(qsAZfF5S|qv$S(BH-i45@4zzNyMw9ilS|^&O z8I3rT_JDlAHJ|gpMn&Y=@*o@?7m>(%&IqB9brcEZNAp!Lt!vu0Svq`$A0gFnTV!Z` z7Kdj@e-H15UQ?;r^a|!V7Ks$!7EJX}k|&3b7wjaFNBrjo1_kPf@dKTSwlU=1UVC(h zCt=BCEnJN>f`4ULy659&sE?UNtPW`<({3cQBC_u>bpg3Z|KA38vgfxrfW+%0QeQ*6 z;rC6Q1H^b;V9?w^{}D36to2N0Z0cdmS~!KmI>!Wlc*+ms4^fiU@89c_DUHX&4mPd` z{e*^+G~~-qs5>4AKY-OYd6pX0MinD3kD;1&<3(>EH>nu;Uf=NVS(lD`nM)Kv7mjw$ zrcF0>KjxsNdP{4_({!2EX?j3FXH9oU#f@h*H0-l)Lsq0se$q-?G1vY{l(kC&&?H@b z{P!njSz7TgOR*gCQhh#x05{NqYDHJ_{Pk!<0Q)vN`=*EEN|RD4EiFtWz*>!b43+ z(%q8M0T+BQPRCn0_)TarN;>|2J9m!=mNQaNqCW`@J##0*ub#jl`7<3j3>M@T%ZU^c z%5h>bIDo)%`hQe(V?R`>3HL>$Ybv2BP$2WG5o(|_yHXR8e!rh)S@0@VZ{bvyQo0L4 zk_56TT+M30w(1aQCAX47tzhW&eM!6<)u!#|EmOEa<0AK2hOYRtQH95wu4}?eI z3Uk6hU{i@b3nRhfB&*8HSGmshjIrC1e<$iz%IE9!A$c3K9S8{W+S07+BjFLuO!CDQy=)5PW)UxDxLex>!Px_N@4IjVrZY}=Sx^dmpkA?!_*W6jjoHDAuEOq_Qj-#f1KyVWY z`hVmCT)I5nu=Hg#Z3;|>|D->j6!}m*Zn_6SoQo@9#Z{W*X1Qk#>P3M zQB{fP<4saeCxdczv*h;_npZm`!#q7$`>TAKMMc0d1#@;C5u<80N75;i-B)#};#he6 zM$(V|m|d#s$;AJrROnQhSg(Xh(OB>NDhWLEE>UxhCzb9E-XA+fqkmoE_I;ZM_(h8V z$cz-cW+A%YqydnatjEM=n{SGM9yyVVn>)r$E$3?0HtAb2$gS?EcI>a7YD5qt3aB0< zKF}#o-m=gftyiISkNZUAg~h4W3NQSfXegNzk)@^$f$kWsPihYEnjAEWLz`9w#!5$h z{p?F>${&~k6V2&-qBR2JV>3HBGSacRT=&Ko`#^>Zev8_@!Et6zQ9xC@Hfq5SKZLBs z_bq7ki}#tQHX17DNH+TH3V_Yk+JrFq0(50)=~OXALiyKxg77ebfWu)h006dPb*!{8 z7)=dUW$Ch(^rl={K=19PL0$;@Q^jMnOy_Ic$?0FDg#=n_f#yUQgQGfEE7ikda9UrbtU2-LNS5> zX3!QS)F0^qUKHF69YuKl$am0YFekn{@Oi$1WL50Y9NJKUXcqKe;MGL}lTK3G_ZL>0 zBiu86kFXHVU|#TKdoFauY$q2-GlMU4PnFg2is2+>GM0WnMbBuL$t#PaU-#rCK{(M4 zZN-M|VIoFP+y*iNwm}2*yLagWP+MLR0;F?2A}CT>WPK+P-Wx7k{3NwBFbcntY7~&E zWDA6+#P7wht9VebuJ%)--@(qOb0|UocKSb}gmQ~jRNORmf=gV$a4}$bCFN8}&`pSj z0>7s9`@v}JPpzr3p_Lfq_Q+OmzTLjfN}Qtp&cn?NB?%TC!s1b4d166NF+cCT}x;T}5 zxhm!uXc>)!3CS$DFep%&E3%Ef4>cHHNBEOahc~(Gs#@k|k(gxU()l{T)Po|3(MVv% z=h3O!xiKp@dUh6|H9C!V(iDqH1zJ6JyQdYXKd0AwMyKgN7=5%{jSD!pZe44=!7z*5 z@#v@XBxPT7fA#XfwC?yW^?DL%{od)jXNqw5`HZmvO%VY~|D_7dy+_#N|HN8gY>a2; ziOilIiwnhg1hF~2+IEKs@vhfa)THBw#olva{{nnL`1R(hPjUM`f7fr((Xk zS4pqDyA$)mogIUKIaZ z*-{UDD`e}~sI}P~{}Fu>i42N2DSbNM@VMH3yw}}3h!8-lERWCs6X)>$6y)*$Z$YZ9VO42ejlg*JPM@5XJt@zMzR`)R{#voIsrK5vfGKZ} zwaBD;ofVy9S#|mqI@~PTES&C{TB>il6Dl0{iF^*nnj>*qqwBZ7YS$ooA`;`6u`W0h zH`P=d`9DWaNuEa@(AW0P_s$1A79N`dBFpq7p~U0ytGcUw4xKJiPanGSu+4s7Wj-&?^IPt+ zoJf`z&78xT$=P8x`K5$7U6Of+J7i8K>bkQ8s=~=DR%a3pYYQy{;{?A4J^brRC-DY7jPN z=0mq2(-mZhZ?Ee>$v-{@s!KN{XR&NjM4DAu$$xodkWm?{awNhI*iWeH!puWgbZNV% zPv56<{_Is*`bLx*;3~~A@dbiPnbvYT4AXO9m^cWvnULE|$IQxsB*k+E-Vk`g)xSQqS<^$Mu|&?x$(w` z5T3O*kULzmcKM3*jK=`Zo=x@3d5OWiJP)q+bC2NkJ+O9*NW9Tk1^CgPuor{m+WrTx zAeMXzcrvj0bkOPMz-~-2I7J?Gmk+os41ek`h)A3>C*lPDzcP5%vgp*FwIw4QaI+k{ zPspN)ndv%8!w$>cMOetK?|dK@##xIIVHJPFV_~D}GhY!<{8?4*XVr`(#xD;uj6K(j zIWwBB{Y=!dlDLQU84rI+V$A3EH%cw>=Vrg}4QhZ_8ugr1>{kdHMYP32Ro}4L}yk;mTSF3hJ2k7}-4vhj|3_Q5JY+3h zwBoczn#k?;s8@HeI&(Q1q9pNFB&pxW z0;?X$qMv9KENi!w{oG0|wN}E`W)Ep3+0rGI>tyfQB=&omPA=`T;A^5je2A*SrF*nmzU`0M8(Ym&Rlh5mOpYKKk=;avmbAMGsT;XFNi`xUxS88_wd&-hzSuqTkRh zYoZmk)yy=UJ8^6a?C$&19Dp)zcC0_p(%iJ4M!2dp{>4_U{^2`0=Cye;DC}QDQ$Pq?#*Lp z8#?y4hQw8sKhpfdJ!HO^m)ll2RD1!?4CShzPS=e{3)h9o5{hAS}>z&ULQq z5_Tx+jomv$q(IQZlpfMl6(XO2@w!aV~kjaF2(Sz$7H=4~Wm(xA`tG6*aLeEFjZ*-U0X ztySeXcqnp$?cYF-dzTt7$2|R2WZlZr1Xh)#hzQ6wljE$zpJ%cd1Que+T`gZ_oT$&7 zvR-~`DChn6OQ*_N0x>MO-nS1qrUIYjt+@JQetc*ntXPDo4%Ty1+lPR(()9Y@D!l3E zrhkjlimUsOw%ezgu=7Afkt*=<>sybSPtd6!{@rGt;vMI1cxrtzOXVhr{yVr@i~%tx zVtmL0%2dtvEe8zn00xN2WH};G)zC*y=Kk63Bl*ZWu(^$La>?BN7iGbfrOgGT>pX1CN3E0+@-v-MlI*4&#l%qo z`K2!vQcBKI3G!%BDyD)iqSEBnPgEANyQ)-HlCBGtjr?vg&MDvczBN~=f50I@3aEhs zI+Re04wRCK&6J}thpB*CQi=*`EsLlGRpbK|(_Q1JG?nx?m4#9+MP((EYeHqCmg|Fa zIvc;)gVyp?yyGyIKc1GFh6qS0m;s(JQ$~B?3lX+I^F|1vA7TH#t(%CnnBmD&#N|tY zM-nwuuxn5C5clQ0AZp$WWOzgiUs3Gv^h9`3{T?zes@X(~Ku!FL9TLMPG_7>rYA4M` z8{i9J)qQ`1M3a-nO)5}6&{hq!QgT+A(Em?+hEP>EQtK1a?oRz7A6lNy&>>~EG1xkH z{XfhVyXJS>O;@Uo2AB1#N`8IG+81GwLo@+8r_@vg_53h>Ee%hO<%? zPchT!LXicJ!<%$CH>kPUiz&0gVPyZxFLUxA;qqI^ze;%5tf-pM4b!q6*Yo)SM3_*< zg;d&D=YueclQheVvZ|Z5>xXfgmv!5Z^SYn+`vE`@7y^aC5y&J8jltsZ1ftJ0{O>^` zQxa7goxx`9B&-eGY(=8%s?W}@!%}{&K;`f2csspaw%CHTK$euv=o)T=>VW2u!N@&iLddAsD z^!r24xBrG#N%Fz}j5i$p$(%7*oINn+01CX?qnDI0*TX6tP^V~(P73DHN6_jP(4mCO z#vV@MBJkQXCdrdm6w`AaG(5);-XrATicqfZCqMP=>EeuQeOV7`Me?A7Typ27+&Y6Z z9_+t?;(+;#ECojfy4y?RrCX4Bh+>5*@Km^&D=8da)YDs{P+GOMwLB+`!;ZH_K*OLj zs8Itqn>8oOjadV-50b@@CD25g0%jkch&2b{O@F&C-^%9}86c=ziE#*^wY6i7EiG0~ zoD$f^t$DVVyCjmqp}l6Gf>flZ9+pNNC~rW%64o&eTtvfZ6NXoh{3h|q1=X<370ntl zlW5Tg}Xo2Lb?Mwlsy(%y8j!Y~5hmg0aKtXkdA>(0fbrBvjUM!D44F@x?%6)hi z!{9uWN|GC`VV30&eRZ2kE3XgkmUo3GtK|2a%Tlp-N@pCSG~F1?#(5D?@%t%3N|>qh zvF6E4)Fuzp9W-ZzxKvGZ|0f;b+R$OM8EYeP>X>B&gfTYz&xQAqVC%NJ4vtw#8G33WfQLfn-GpOiEZ-#Q^?2 inVJeS<;~#@?Pw63*W18gUs)T%wk8{_X;CulD=7w0S6#;d literal 0 HcmV?d00001 diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-solid-900.eot b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-solid-900.eot new file mode 100644 index 0000000000000000000000000000000000000000..5318231d1b25c71555cc10e17577a8be256cd292 GIT binary patch literal 204866 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

    ?37MH!0WI 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%0AW?d=NET ze`~EH97Ld?PT=G2PIq1t%P^EP(2Eu1Ss+HY(fk8`(%X6aK*#aNJD#Fvo8RrY3dSMLealsgF*>pT~fF>IXS zcJmy7C(~W(n?|C%j_7hjPu1ceR+4?|OeAo6eJ>l!do~7?qoSVq8yH#)$wo@Myu1c> zqdfJgpdrJ^gGNxSEiYr}*sjv%A?7H`;vzU97lknMS5GSEt9vCZx5 z-w4^}(=;BjSc9znVhJu8; zmL`@>I8rBDlvlLr5}dnBNd~BuMq`Dr!K&16dPyga^tE3sv>BfXuV^)ZXaR@`t8(jLM28h}N&RoDYgarsUqa*3Kt0GG#1^BtO! zm_+%}+-(G4uS@aqAzsGk7RT49Q39GEKr_w*9#=7%{=u6qi{hI{X@9}T>zKy0y#_Ah z=-wMT-hx$VDC-EQo(J88$l^=nMiZf1Ld{WTn8fwGTfJp;nOO@`-_eI&ZPQ}&GrV&VH;n#Ric9d5_>T*pMwsK5pm~ATAzp_q z)OAH5`x80#LdEInuwjvhz8lwNAv2X6zj_tv_m%#$#$zAvE;klgeZ9-@cV}l=b6p>k z`xm6jdF(PB6iACchVsg^pBs~!Z4ur1*dOOKV;A4H*gz^n_;Es6T_5MY_N!74K6U_s z<*0Uu?`yQ5#rH{J4j83eCCa0C7Y96KKUF_~R}uJh*2kdIawAivxA@Jhf=NLKSRQL{W1w*fHy&0dw$^I=p zh&R8BaUr2b+z9+grvy*rH?|I6|1Xj^2>UW4>noNqEcC#|9YgF5HTH=0{9Y;7yyY4r z5i+hBo8-}$?AX(5*T%aKi$5qH%e`=o5lR@>+&W(40i3*Op94%|zF)ZT|A@a9AA>HR zygl52=e)K4=?!NKDD8V#@Wll;g;Z?~TRCu9r2xw-e~y9M%2%1ix)WBGr?6!mG^ zkM|sXH=Zy38ED;*Hm|}KY+u|(2fPGaZ3@|+H{)g3JF;adVuXVG_VePW3Y=ANy@anM zsT5cSzz6OHvhd)K^9`S0UT&_s(nSG|3Y)HV;xmV}`a9jVEm4%TR=LOQxryWH`c!Rz zBqw*tqsg^?0Cm>~ph6cvGtK5{(*(cPxkrxPZ{^J;GahO_9E#&0FCy^J>tN{6?RDAv zw*?B#r%dx_MB?x?adjbZA7zbb>mDgX^W-JCCQ6sU>MoBuR5*hIH`Qmxky=qe&58Wg ztF+B#?|c7!*;^jH;f6I|EFld6u_jm)31_NS1pD%VJ z=3K+fB;%b)2y1<_Hu-m~1^EPT&$fYuIVu-$s)}#feC(8Io&r^%9VjNB0$qX_G>9N1 z8uCJeH6b$Fhj?!rrkWkh7ZLtvrPpy6;1Lfcj~4#$qbTnZ4!8kxiTJedD-Vkg0P^}s zuQvc`63c>@BANcl@=Tbw&N2SL1T)aAz{&{B3yX~SJwtyyWPd9h`KBFuTsLx|Mk93I zubW>9=-2;yKzrdwTHxQW*8^WMb^p3jc?Pa12$!FMW6CoXC4JXj=@sPGp7lFt3P}De z3TGVutP&z5MKOWrU?*DxpGy_n;RwYsGr$eN4uL+tiie$uc;^=m)w$?J8;#5xU}()aMZtD_!EVEj>8m%TA!*@ z>SOK$v~1;0uj5`$J_x6sh9<2kF-}zdGv7DO)!<9N%%-@}2LQJDbh@haIok{;83< z(;GaEk4?Yss{LCDKjPzq-eeV#4bX1a3AQA+0w~0CFOvKWA0f%JA+D}S(rE{l%O4wkcx<#M(^{#pWA=}-0A zcz?ExD)o?@s9S9uVEFd>PPO%rFqdKRv*R_hk^m&i*M~OnUGTmj|AsP{d{?#uiYFts z3|qlh&S91vo-fxK;S$ zUA7+ZoBp2=5|fo;3;B^90JghryD^$CaBA!?i~ek~sK-^(&*5n{3id<|WIK&q`hwro zn*WHwpod~p$zX-yFH_<5^f|!o7oiUsBB=vrdMF}6`P229oGPgD@yf8)Vk=V~z-WWv z@L*XKj!Z`jMqIH+S5^u)EFRuz2ksh2IqcJ^=#^Q2(w~3Bk%_ESuVy0KwhTa#x@Y!a zV{P$a*+PHH~gt#;j`heYn@ckC;# z>e`QB`BWf~(h{ltU9ZyjzgSmWeO-qZ;FTCE(xf8#-?JZK{;<+0>Wh_Yl-Hb<$(T_# zrD71}Y*MO{G=Vy7J@lQ8W4s`61+C!yK)7Y9KpJKdj%8J~kg=gox8o6bImLBL)B7!B z2F?WvuE0xY^QH4n=gb60qiezV#+eaSEfeh;P+~M$F~vgCaaAZ$-H!z8BCLku4qe3R zxcKT*h$*tYS#`qkpsKVc)|*$7M*!jQ+m>LA7h^^A&xIvdJlRJ&9PqFp)r5R1glK>^*rd&RQZh@y=Is@Ra*Y7Eh5Xq#n+-4* z=-u?x*XOd9@n`@Zp?BCI3fKBWTF^Gjrkcu%cV^@E9dHc|JZf0kIh1cualsC1A^)}C zKHN6~Q3=WC-x7>|oAATC@7A@T<`AK-;M^~LYIw|k-oz=RdA>|799NVes_@3 zJ$T~JD34&x4EP#=Lx~P4D-m9ZJ}}?l9e_P3V29bP?Sj`bqfp$&3mQO0IX_Zq8F*;I zyQQ3c{B|d6Ea`@`)Vp(deprmsVKMzlFkIncBz8Mp7Cu&8G=lMLc^=o_=4AEpYJa@) zI?6mSJ3yzobnyhSUT=(9Nt!K{vKC=Jyrq8k6SRf_{Vn*E#w|BM0Mrz8!lg|3gdy?!j2P!o6qRV zDsF{BRngDbM*q&y(C)h*R#uPQd+)JT<>9+`C$FIK)ZFoucC#$>!S{lbaCt#5vN!J8 zS9d5#?LoboJCDCxEOtSmkEUgPH;mhq$u*xgxiwVz#vi8gZjIr zD&Q909nl;(J*LcVWym&CyKG@0SV|3|P=*>DK_!`ZO?TEDy%sZ!=txk7cUVvrNM&H} zO2NG=-_zY6bRujrk2t|ncRp{t@HazBx7L+$G(iy--d}Sikb%x+Pkj8ALgvs(6Ga{p zq3aXjE&G!3V9}2llVUKQ+_xp1xITo^Sb>v=GKHl=Fc3~w`fQ+a;BvdKk_-oeg^!KL z_XHd}L(V)Z#&TV0K%OGoBWobsm8Q3ukWz~YK|&un=dQ0f!f2q^-G+q*BuFp-XJ@Z+ zOQp}4B9?%VYPOsSr2|m0YnB#>)-O}~4yE#vvHk=lP9pwC zfK(Fi*Szpa@dfD0Op3$@7c9A6NjfX)I0^(4n2^U3aXcWXp!H?snSJ%q>q4>JmMZ?# zP^>+%;J+a?x~7ckcHdpSwmup)l6^;~{KadF{)bQ8776446lO}#A=N`XT#AWp)x8NpuK|A_9A2w8b58 zpyF1_wbWuaI8L$oqweGnn4O{b9~;96R=c{u+r)!1S%32(ZgC3J$C*neMOd*Hm=XI% zfxgtWl*{2<_^^p*KP(#p<*T{|_j3!=*mKO&hoKW8?@Sj@14n~~48V)efKQd$IQa;R zHYXo}*YyKeMn=LzliS4dBPXF4L@@ayCmUC-TH7bG!+EZ?2biQW@#@6UGfSlD1p$B} z6Cg+wpu-mgdf=qAOE*vR?^GE;_z)UjWVt3wpl4?3xTCp#?wmId?R>+1dB9lfLei>+=DMQu5F&K3ol#ke$BoT-v?8Ja7!n*C0KV!r+ZS3u1 zcE&EE_v_QCL*21Vmc1x*f8brUQG{2VfWU0{AAkDDXNwoLR^mRt=OjoPVttc4w#^%cS;*PPq6?5EF zZVPeFDRWK;R*6CsXFE?CY2VqBZVXIIwqAK1 zOP#@Inr|E6K-VMxg4&1oM*5 zZbh`lR0PFI&1m}7fvfA!Xga(Jo~d6Qc=d+&OB2*?l&RszM!!ad)oN*1T5(^^i{O1r z;PB-974c$fz527}!-?Ec`Bq-!?i~}`ubA(ymIF1IitYMQsZZzpYI)$%8P`A3SNAXl z{Uo@19#=vmAs~_ptTUipGVdDk?&%4|k{eHiXlO-2MO(7UA>u+MZkjzK-C9mJ+!=wdzWk$=lT- zs{qOdDm^kC%JjqKf)A%hPINI624i*&KOhkJRsB%SPUIQ{U$C9qwL^NZlm#V0B-oO2 z{4Zi&DFzdfZ!Z;v*->jlIua-EJcvqb<@!-+gFjl2A}Ui{VOsAnt;^ZDYwQloT*o~J z@4V}1eVFVV!}X&G(t=gUw2qk;lAw*9GA*CKW!E&Ii5ek40x;>cOs60lw=C{trLQ0y z!UcqFVAetU(t259wuJZ?$BCY`%XYxF=k4=@rRIkK5!^9EL&Zk8$LBb3bTMGh*!Cei zGJ2@X?Uz#C&z*Jq^DxFmdRjdQT1&cl;sA)-LG&}re6%Oi1f{%%LI}%|q()*3k!Czi zdooX?Jj~(sGY(OyLrmhgNP+$(sl11tCMQ08ku+~9<)*AA>@GhWOGp^QVzc z9ob$pxRUm3S?@|l^LN=o%lhBSX!G~^WiNx|M#&u9K>%7+{dNEaf6V}5*m8lWZJFA^ zu&Ng_ekB|-^2mURDrtEm6juD1g04~_pO?B?Wt{r}4_xy(TQf{|G~sKc1hWRJLup1P zSV2{0Kj4kW_H#@>4A$*|ezu`5ji1^uz3F-yLNw?Hr_Lf;niekHZ5ujbBHg3E`S;%2 zExdK#u7u%^!0;xl(nP^cme%wTgR-!q1eoI=+}od_)X(_xRJp z>2;aqU{|$=7DrEYS0qAd>1UTtERG|qzF$=4M#7ZU!_}t%Z++1hp?r!167zT}oH}Yi zllB4R7g`7E5|g+J<;aIwNlIb>R6ysn*fB$a)BuWuGdF%C6#8r;@!3#lIfN+;Ee0HL zBz|?+uYti1yh%Ac10(|UF>_eCQ7oxhb=>bC_h-~}u7~O<_T(bdl%;>culp@+!9+

    ?37MH!0WI0j&U(dp&T! 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 b$muU9;@@)p`~2JgIQEbKyxjgA_t*aeWB-ER literal 0 HcmV?d00001 diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-solid-900.woff b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-solid-900.woff new file mode 100644 index 0000000000000000000000000000000000000000..65f1d331a0c308a5517c4f2632ad4b9a6e8ac4e4 GIT binary patch literal 104252 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 MY+}w2chO^vV8tzjbY@8?OBy>_T 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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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/abp/utils/abp-utils.umd.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/abp/utils/abp-utils.umd.js new file mode 100644 index 0000000000..dbf03b6f17 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/abp/utils/abp-utils.umd.js @@ -0,0 +1,600 @@ +(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. All rights reserved. + Licensed under the Apache License, Version 2.0 (the "License"); you may not use + this file except in compliance with the License. You may obtain a copy of the + License at http://www.apache.org/licenses/LICENSE-2.0 + + THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED + WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, + MERCHANTABLITY OR NON-INFRINGEMENT. + + See the Apache Version 2.0 License for specific language governing permissions + and limitations under the License. + ***************************************************************************** */ + /* 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 }; + } + } + + function __exportStar(m, exports) { + for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = 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; + }; + + 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)) result[k] = mod[k]; + result.default = 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; + } + + /* tslint:disable:no-non-null-assertion */ + 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: true, + configurable: true + }); + Object.defineProperty(LinkedList.prototype, "tail", { + get: function () { + return this.last; + }, + enumerable: true, + configurable: true + }); + Object.defineProperty(LinkedList.prototype, "length", { + get: function () { + return this.size; + }, + enumerable: true, + 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; + }()); + + exports.LinkedList = LinkedList; + exports.ListNode = ListNode; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}))); +//# sourceMappingURL=abp-utils.umd.js.map diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/abp/utils/abp-utils.umd.js.map b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/abp/utils/abp-utils.umd.js.map new file mode 100644 index 0000000000..18a9fb2df7 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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","ng://@abp/utils/lib/linked-list.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\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 function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = 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\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)) result[k] = mod[k];\r\n result.default = 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 */\r\n\r\nimport compare from 'just-compare';\r\n\r\nexport class ListNode {\r\n next: ListNode | undefined;\r\n previous: ListNode | undefined;\r\n constructor(public readonly value: T) {}\r\n}\r\n\r\nexport class LinkedList {\r\n private first: ListNode | undefined;\r\n private last: ListNode | undefined;\r\n private size = 0;\r\n\r\n get head(): ListNode | undefined {\r\n return this.first;\r\n }\r\n get tail(): ListNode | undefined {\r\n return this.last;\r\n }\r\n get length(): number {\r\n return this.size;\r\n }\r\n\r\n private attach(\r\n value: T,\r\n previousNode: ListNode | undefined,\r\n nextNode: ListNode | undefined,\r\n ): ListNode {\r\n if (!previousNode) return this.addHead(value);\r\n\r\n if (!nextNode) return this.addTail(value);\r\n\r\n const node = new ListNode(value);\r\n node.previous = previousNode;\r\n previousNode.next = node;\r\n node.next = nextNode;\r\n nextNode.previous = node;\r\n\r\n this.size++;\r\n\r\n return node;\r\n }\r\n\r\n private attachMany(\r\n values: T[],\r\n previousNode: ListNode | undefined,\r\n nextNode: ListNode | undefined,\r\n ): ListNode[] {\r\n if (!values.length) return [];\r\n\r\n if (!previousNode) return this.addManyHead(values);\r\n\r\n if (!nextNode) return this.addManyTail(values);\r\n\r\n const list = new LinkedList();\r\n list.addManyTail(values);\r\n list.first!.previous = previousNode;\r\n previousNode.next = list.first;\r\n list.last!.next = nextNode;\r\n nextNode.previous = list.last;\r\n\r\n this.size += values.length;\r\n\r\n return list.toNodeArray();\r\n }\r\n\r\n private detach(node: ListNode) {\r\n if (!node.previous) return this.dropHead();\r\n\r\n if (!node.next) return this.dropTail();\r\n\r\n node.previous.next = node.next;\r\n node.next.previous = node.previous;\r\n\r\n this.size--;\r\n\r\n return node;\r\n }\r\n\r\n add(value: T) {\r\n return {\r\n after: (...params: [T] | [any, ListComparisonFn]) =>\r\n this.addAfter.call(this, value, ...params),\r\n before: (...params: [T] | [any, ListComparisonFn]) =>\r\n this.addBefore.call(this, value, ...params),\r\n byIndex: (position: number) => this.addByIndex(value, position),\r\n head: () => this.addHead(value),\r\n tail: () => this.addTail(value),\r\n };\r\n }\r\n\r\n addMany(values: T[]) {\r\n return {\r\n after: (...params: [T] | [any, ListComparisonFn]) =>\r\n this.addManyAfter.call(this, values, ...params),\r\n before: (...params: [T] | [any, ListComparisonFn]) =>\r\n this.addManyBefore.call(this, values, ...params),\r\n byIndex: (position: number) => this.addManyByIndex(values, position),\r\n head: () => this.addManyHead(values),\r\n tail: () => this.addManyTail(values),\r\n };\r\n }\r\n\r\n addAfter(value: T, previousValue: T): ListNode;\r\n addAfter(value: T, previousValue: any, compareFn: ListComparisonFn): ListNode;\r\n addAfter(value: T, previousValue: any, compareFn: ListComparisonFn = compare): ListNode {\r\n const previous = this.find(node => compareFn(node.value, previousValue));\r\n\r\n return previous ? this.attach(value, previous, previous.next) : this.addTail(value);\r\n }\r\n\r\n addBefore(value: T, nextValue: T): ListNode;\r\n addBefore(value: T, nextValue: any, compareFn: ListComparisonFn): ListNode;\r\n addBefore(value: T, nextValue: any, compareFn: ListComparisonFn = compare): ListNode {\r\n const next = this.find(node => compareFn(node.value, nextValue));\r\n\r\n return next ? this.attach(value, next.previous, next) : this.addHead(value);\r\n }\r\n\r\n addByIndex(value: T, position: number): ListNode {\r\n if (position < 0) position += this.size;\r\n else if (position >= this.size) return this.addTail(value);\r\n\r\n if (position <= 0) return this.addHead(value);\r\n\r\n const next = this.get(position)!;\r\n\r\n return this.attach(value, next.previous, next);\r\n }\r\n\r\n addHead(value: T): ListNode {\r\n const node = new ListNode(value);\r\n\r\n node.next = this.first;\r\n\r\n if (this.first) this.first.previous = node;\r\n else this.last = node;\r\n\r\n this.first = node;\r\n this.size++;\r\n\r\n return node;\r\n }\r\n\r\n addTail(value: T): ListNode {\r\n const node = new ListNode(value);\r\n\r\n if (this.first) {\r\n node.previous = this.last;\r\n this.last!.next = node;\r\n this.last = node;\r\n } else {\r\n this.first = node;\r\n this.last = node;\r\n }\r\n\r\n this.size++;\r\n\r\n return node;\r\n }\r\n\r\n addManyAfter(values: T[], previousValue: T): ListNode[];\r\n addManyAfter(values: T[], previousValue: any, compareFn: ListComparisonFn): ListNode[];\r\n addManyAfter(\r\n values: T[],\r\n previousValue: any,\r\n compareFn: ListComparisonFn = compare,\r\n ): ListNode[] {\r\n const previous = this.find(node => compareFn(node.value, previousValue));\r\n\r\n return previous ? this.attachMany(values, previous, previous.next) : this.addManyTail(values);\r\n }\r\n\r\n addManyBefore(values: T[], nextValue: T): ListNode[];\r\n addManyBefore(values: T[], nextValue: any, compareFn: ListComparisonFn): ListNode[];\r\n addManyBefore(\r\n values: T[],\r\n nextValue: any,\r\n compareFn: ListComparisonFn = compare,\r\n ): ListNode[] {\r\n const next = this.find(node => compareFn(node.value, nextValue));\r\n\r\n return next ? this.attachMany(values, next.previous, next) : this.addManyHead(values);\r\n }\r\n\r\n addManyByIndex(values: T[], position: number): ListNode[] {\r\n if (position < 0) position += this.size;\r\n\r\n if (position <= 0) return this.addManyHead(values);\r\n\r\n if (position >= this.size) return this.addManyTail(values);\r\n\r\n const next = this.get(position)!;\r\n\r\n return this.attachMany(values, next.previous, next);\r\n }\r\n\r\n addManyHead(values: T[]): ListNode[] {\r\n return values.reduceRight[]>((nodes, value) => {\r\n nodes.unshift(this.addHead(value));\r\n return nodes;\r\n }, []);\r\n }\r\n\r\n addManyTail(values: T[]): ListNode[] {\r\n return values.map(value => this.addTail(value));\r\n }\r\n\r\n drop() {\r\n return {\r\n byIndex: (position: number) => this.dropByIndex(position),\r\n byValue: (...params: [T] | [any, ListComparisonFn]) =>\r\n this.dropByValue.apply(this, params),\r\n byValueAll: (...params: [T] | [any, ListComparisonFn]) =>\r\n this.dropByValueAll.apply(this, params),\r\n head: () => this.dropHead(),\r\n tail: () => this.dropTail(),\r\n };\r\n }\r\n\r\n dropMany(count: number) {\r\n return {\r\n byIndex: (position: number) => this.dropManyByIndex(count, position),\r\n head: () => this.dropManyHead(count),\r\n tail: () => this.dropManyTail(count),\r\n };\r\n }\r\n\r\n dropByIndex(position: number): ListNode | undefined {\r\n if (position < 0) position += this.size;\r\n\r\n const current = this.get(position);\r\n\r\n return current ? this.detach(current) : undefined;\r\n }\r\n\r\n dropByValue(value: T): ListNode | undefined;\r\n dropByValue(value: any, compareFn: ListComparisonFn): ListNode | undefined;\r\n dropByValue(value: any, compareFn: ListComparisonFn = compare): ListNode | undefined {\r\n const position = this.findIndex(node => compareFn(node.value, value));\r\n\r\n return position < 0 ? undefined : this.dropByIndex(position);\r\n }\r\n\r\n dropByValueAll(value: T): ListNode[];\r\n dropByValueAll(value: any, compareFn: ListComparisonFn): ListNode[];\r\n dropByValueAll(value: any, compareFn: ListComparisonFn = compare): ListNode[] {\r\n const dropped: ListNode[] = [];\r\n\r\n for (let current = this.first, position = 0; current; position++, current = current.next) {\r\n if (compareFn(current.value, value)) {\r\n dropped.push(this.dropByIndex(position - dropped.length)!);\r\n }\r\n }\r\n\r\n return dropped;\r\n }\r\n\r\n dropHead(): ListNode | undefined {\r\n const head = this.first;\r\n\r\n if (head) {\r\n this.first = head.next;\r\n\r\n if (this.first) this.first.previous = undefined;\r\n else this.last = undefined;\r\n\r\n this.size--;\r\n\r\n return head;\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n dropTail(): ListNode | undefined {\r\n const tail = this.last;\r\n\r\n if (tail) {\r\n this.last = tail.previous;\r\n\r\n if (this.last) this.last.next = undefined;\r\n else this.first = undefined;\r\n\r\n this.size--;\r\n\r\n return tail;\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n dropManyByIndex(count: number, position: number): ListNode[] {\r\n if (count <= 0) return [];\r\n\r\n if (position < 0) position = Math.max(position + this.size, 0);\r\n else if (position >= this.size) return [];\r\n\r\n count = Math.min(count, this.size - position);\r\n\r\n const dropped: ListNode[] = [];\r\n\r\n while (count--) {\r\n const current = this.get(position);\r\n dropped.push(this.detach(current!)!);\r\n }\r\n\r\n return dropped;\r\n }\r\n\r\n dropManyHead(count: Exclude): ListNode[] {\r\n if (count <= 0) return [];\r\n\r\n count = Math.min(count, this.size);\r\n\r\n const dropped: ListNode[] = [];\r\n\r\n while (count--) dropped.unshift(this.dropHead()!);\r\n\r\n return dropped;\r\n }\r\n\r\n dropManyTail(count: Exclude): ListNode[] {\r\n if (count <= 0) return [];\r\n\r\n count = Math.min(count, this.size);\r\n\r\n const dropped: ListNode[] = [];\r\n\r\n while (count--) dropped.push(this.dropTail()!);\r\n\r\n return dropped;\r\n }\r\n\r\n find(predicate: ListIteratorFn): ListNode | undefined {\r\n for (let current = this.first, position = 0; current; position++, current = current.next) {\r\n if (predicate(current, position, this)) return current;\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n findIndex(predicate: ListIteratorFn): number {\r\n for (let current = this.first, position = 0; current; position++, current = current.next) {\r\n if (predicate(current, position, this)) return position;\r\n }\r\n\r\n return -1;\r\n }\r\n\r\n forEach(iteratorFn: ListIteratorFn) {\r\n for (let node = this.first, position = 0; node; position++, node = node.next) {\r\n iteratorFn(node, position, this);\r\n }\r\n }\r\n\r\n get(position: number): ListNode | undefined {\r\n return this.find((_, index) => position === index);\r\n }\r\n\r\n indexOf(value: T): number;\r\n indexOf(value: any, compareFn: ListComparisonFn): number;\r\n indexOf(value: any, compareFn: ListComparisonFn = compare): number {\r\n return this.findIndex(node => compareFn(node.value, value));\r\n }\r\n\r\n toArray(): T[] {\r\n const array = new Array(this.size);\r\n\r\n this.forEach((node, index) => (array[index!] = node.value));\r\n\r\n return array;\r\n }\r\n\r\n toNodeArray(): ListNode[] {\r\n const array = new Array(this.size);\r\n\r\n this.forEach((node, index) => (array[index!] = node));\r\n\r\n return array;\r\n }\r\n\r\n toString(mapperFn: ListMapperFn = JSON.stringify): string {\r\n return this.toArray()\r\n .map(value => mapperFn(value))\r\n .join(' <-> ');\r\n }\r\n\r\n // Cannot use Generator type because of ng-packagr\r\n *[Symbol.iterator](): any {\r\n for (let node = this.first, position = 0; node; position++, node = node.next) {\r\n yield node.value;\r\n }\r\n }\r\n}\r\n\r\nexport type ListMapperFn = (value: T) => any;\r\n\r\nexport type ListComparisonFn = (value1: T, value2: any) => boolean;\r\n\r\nexport type ListIteratorFn = (\r\n node: ListNode,\r\n index?: number,\r\n list?: LinkedList,\r\n) => R;\r\n"],"names":[],"mappings":";;;;;;;;IAAA;IACA;IACA;IACA;IACA;AACA;IACA;IACA;IACA;IACA;AACA;IACA;IACA;IACA;IACA;AACA;IACA,IAAI,aAAa,GAAG,SAAS,CAAC,EAAE,CAAC,EAAE;IACnC,IAAI,aAAa,GAAG,MAAM,CAAC,cAAc;IACzC,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,YAAY,KAAK,IAAI,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC;IACpF,QAAQ,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACnF,IAAI,OAAO,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/B,CAAC,CAAC;AACF;IACO,SAAS,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE;IAChC,IAAI,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACxB,IAAI,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,EAAE;IAC3C,IAAI,CAAC,CAAC,SAAS,GAAG,CAAC,KAAK,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IACzF,CAAC;AACD;IACO,IAAI,QAAQ,GAAG,WAAW;IACjC,IAAI,QAAQ,GAAG,MAAM,CAAC,MAAM,IAAI,SAAS,QAAQ,CAAC,CAAC,EAAE;IACrD,QAAQ,KAAK,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;IAC7D,YAAY,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IAC7B,YAAY,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACzF,SAAS;IACT,QAAQ,OAAO,CAAC,CAAC;IACjB,MAAK;IACL,IAAI,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC3C,EAAC;AACD;IACO,SAAS,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE;IAC7B,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;IACf,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IACvF,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACpB,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,OAAO,MAAM,CAAC,qBAAqB,KAAK,UAAU;IACvE,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;IAChF,YAAY,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1F,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClC,SAAS;IACT,IAAI,OAAO,CAAC,CAAC;IACb,CAAC;AACD;IACO,SAAS,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE;IAC1D,IAAI,IAAI,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,IAAI,KAAK,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC,wBAAwB,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;IACjI,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,OAAO,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IACnI,SAAS,KAAK,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;IACtJ,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IAClE,CAAC;AACD;IACO,SAAS,OAAO,CAAC,UAAU,EAAE,SAAS,EAAE;IAC/C,IAAI,OAAO,UAAU,MAAM,EAAE,GAAG,EAAE,EAAE,SAAS,CAAC,MAAM,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC,EAAE;IACzE,CAAC;AACD;IACO,SAAS,UAAU,CAAC,WAAW,EAAE,aAAa,EAAE;IACvD,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,OAAO,CAAC,QAAQ,KAAK,UAAU,EAAE,OAAO,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IACnI,CAAC;AACD;IACO,SAAS,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC,EAAE,SAAS,EAAE;IAC7D,IAAI,SAAS,KAAK,CAAC,KAAK,EAAE,EAAE,OAAO,KAAK,YAAY,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,UAAU,OAAO,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;IAChH,IAAI,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,EAAE,UAAU,OAAO,EAAE,MAAM,EAAE;IAC/D,QAAQ,SAAS,SAAS,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE;IACnG,QAAQ,SAAS,QAAQ,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE;IACtG,QAAQ,SAAS,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,EAAE;IACtH,QAAQ,IAAI,CAAC,CAAC,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9E,KAAK,CAAC,CAAC;IACP,CAAC;AACD;IACO,SAAS,WAAW,CAAC,OAAO,EAAE,IAAI,EAAE;IAC3C,IAAI,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACrH,IAAI,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,OAAO,MAAM,KAAK,UAAU,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,WAAW,EAAE,OAAO,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC7J,IAAI,SAAS,IAAI,CAAC,CAAC,EAAE,EAAE,OAAO,UAAU,CAAC,EAAE,EAAE,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;IACtE,IAAI,SAAS,IAAI,CAAC,EAAE,EAAE;IACtB,QAAQ,IAAI,CAAC,EAAE,MAAM,IAAI,SAAS,CAAC,iCAAiC,CAAC,CAAC;IACtE,QAAQ,OAAO,CAAC,EAAE,IAAI;IACtB,YAAY,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACzK,YAAY,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;IACpD,YAAY,QAAQ,EAAE,CAAC,CAAC,CAAC;IACzB,gBAAgB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM;IAC9C,gBAAgB,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IACxE,gBAAgB,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;IACjE,gBAAgB,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,SAAS;IACjE,gBAAgB;IAChB,oBAAoB,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE;IAChI,oBAAoB,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE;IAC1G,oBAAoB,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;IACzF,oBAAoB,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE;IACvF,oBAAoB,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;IAC1C,oBAAoB,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,SAAS;IAC3C,aAAa;IACb,YAAY,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACvC,SAAS,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE;IAClE,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACzF,KAAK;IACL,CAAC;AACD;IACO,SAAS,YAAY,CAAC,CAAC,EAAE,OAAO,EAAE;IACzC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACvE,CAAC;AACD;IACO,SAAS,QAAQ,CAAC,CAAC,EAAE;IAC5B,IAAI,IAAI,CAAC,GAAG,OAAO,MAAM,KAAK,UAAU,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAClF,IAAI,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5B,IAAI,IAAI,CAAC,IAAI,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,EAAE,OAAO;IAClD,QAAQ,IAAI,EAAE,YAAY;IAC1B,YAAY,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC;IAC/C,YAAY,OAAO,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;IACpD,SAAS;IACT,KAAK,CAAC;IACN,IAAI,MAAM,IAAI,SAAS,CAAC,CAAC,GAAG,yBAAyB,GAAG,iCAAiC,CAAC,CAAC;IAC3F,CAAC;AACD;IACO,SAAS,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE;IAC7B,IAAI,IAAI,CAAC,GAAG,OAAO,MAAM,KAAK,UAAU,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC/D,IAAI,IAAI,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACrB,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IACrC,IAAI,IAAI;IACR,QAAQ,OAAO,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACnF,KAAK;IACL,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE;IAC3C,YAAY;IACZ,QAAQ,IAAI;IACZ,YAAY,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC7D,SAAS;IACT,gBAAgB,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,EAAE;IACzC,KAAK;IACL,IAAI,OAAO,EAAE,CAAC;IACd,CAAC;AACD;IACO,SAAS,QAAQ,GAAG;IAC3B,IAAI,KAAK,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE;IACtD,QAAQ,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7C,IAAI,OAAO,EAAE,CAAC;IACd,CAAC;AACD;IACO,SAAS,cAAc,GAAG;IACjC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IACxF,IAAI,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE;IACpD,QAAQ,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE;IACzE,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACxB,IAAI,OAAO,CAAC,CAAC;IACb,CAAC,CAAC;AACF;IACO,SAAS,OAAO,CAAC,CAAC,EAAE;IAC3B,IAAI,OAAO,IAAI,YAAY,OAAO,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;IACzE,CAAC;AACD;IACO,SAAS,gBAAgB,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE;IACjE,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,IAAI,SAAS,CAAC,sCAAsC,CAAC,CAAC;IAC3F,IAAI,IAAI,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;IAClE,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,YAAY,EAAE,OAAO,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IAC1H,IAAI,SAAS,IAAI,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,EAAE,EAAE,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE;IAC9I,IAAI,SAAS,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;IACtF,IAAI,SAAS,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,YAAY,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;IAC5H,IAAI,SAAS,OAAO,CAAC,KAAK,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,EAAE;IACtD,IAAI,SAAS,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,EAAE;IACtD,IAAI,SAAS,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;IACtF,CAAC;AACD;IACO,SAAS,gBAAgB,CAAC,CAAC,EAAE;IACpC,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC;IACb,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,YAAY,EAAE,OAAO,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IAChJ,IAAI,SAAS,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;IACnJ,CAAC;AACD;IACO,SAAS,aAAa,CAAC,CAAC,EAAE;IACjC,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,IAAI,SAAS,CAAC,sCAAsC,CAAC,CAAC;IAC3F,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IACvC,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,QAAQ,KAAK,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,YAAY,EAAE,OAAO,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACrN,IAAI,SAAS,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,EAAE,EAAE,OAAO,IAAI,OAAO,CAAC,UAAU,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE;IACpK,IAAI,SAAS,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,EAAE;IAChI,CAAC;AACD;IACO,SAAS,oBAAoB,CAAC,MAAM,EAAE,GAAG,EAAE;IAClD,IAAI,IAAI,MAAM,CAAC,cAAc,EAAE,EAAE,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE;IACnH,IAAI,OAAO,MAAM,CAAC;IAClB,CAAC,CAAC;AACF;IACO,SAAS,YAAY,CAAC,GAAG,EAAE;IAClC,IAAI,IAAI,GAAG,IAAI,GAAG,CAAC,UAAU,EAAE,OAAO,GAAG,CAAC;IAC1C,IAAI,IAAI,MAAM,GAAG,EAAE,CAAC;IACpB,IAAI,IAAI,GAAG,IAAI,IAAI,EAAE,KAAK,IAAI,CAAC,IAAI,GAAG,EAAE,IAAI,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IACnG,IAAI,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC;IACzB,IAAI,OAAO,MAAM,CAAC;IAClB,CAAC;AACD;IACO,SAAS,eAAe,CAAC,GAAG,EAAE;IACrC,IAAI,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;IAC5D,CAAC;AACD;IACO,SAAS,sBAAsB,CAAC,QAAQ,EAAE,UAAU,EAAE;IAC7D,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;IACnC,QAAQ,MAAM,IAAI,SAAS,CAAC,gDAAgD,CAAC,CAAC;IAC9E,KAAK;IACL,IAAI,OAAO,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACpC,CAAC;AACD;IACO,SAAS,sBAAsB,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE;IACpE,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;IACnC,QAAQ,MAAM,IAAI,SAAS,CAAC,gDAAgD,CAAC,CAAC;IAC9E,KAAK;IACL,IAAI,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACpC,IAAI,OAAO,KAAK,CAAC;IACjB;;ICpNA;;QAOE,kBAA4B,KAAQ;YAAR,UAAK,GAAL,KAAK,CAAG;SAAI;QAC1C,eAAC;IAAD,CAAC,IAAA;;QAED;YAGU,SAAI,GAAG,CAAC,CAAC;SA+XlB;QA7XC,sBAAI,4BAAI;iBAAR;gBACE,OAAO,IAAI,CAAC,KAAK,CAAC;aACnB;;;WAAA;QACD,sBAAI,4BAAI;iBAAR;gBACE,OAAO,IAAI,CAAC,IAAI,CAAC;aAClB;;;WAAA;QACD,sBAAI,8BAAM;iBAAV;gBACE,OAAO,IAAI,CAAC,IAAI,CAAC;aAClB;;;WAAA;QAEO,2BAAM,GAAd,UACE,KAAQ,EACR,YAAqC,EACrC,QAAiC;YAEjC,IAAI,CAAC,YAAY;gBAAE,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAE9C,IAAI,CAAC,QAAQ;gBAAE,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAE1C,IAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC;YACjC,IAAI,CAAC,QAAQ,GAAG,YAAY,CAAC;YAC7B,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC;YACzB,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;YACrB,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC;YAEzB,IAAI,CAAC,IAAI,EAAE,CAAC;YAEZ,OAAO,IAAI,CAAC;SACb;QAEO,+BAAU,GAAlB,UACE,MAAW,EACX,YAAqC,EACrC,QAAiC;YAEjC,IAAI,CAAC,MAAM,CAAC,MAAM;gBAAE,OAAO,EAAE,CAAC;YAE9B,IAAI,CAAC,YAAY;gBAAE,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAEnD,IAAI,CAAC,QAAQ;gBAAE,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAE/C,IAAM,IAAI,GAAG,IAAI,UAAU,EAAK,CAAC;YACjC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YACzB,IAAI,CAAC,KAAM,CAAC,QAAQ,GAAG,YAAY,CAAC;YACpC,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;YAC/B,IAAI,CAAC,IAAK,CAAC,IAAI,GAAG,QAAQ,CAAC;YAC3B,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;YAE9B,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC;YAE3B,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;SAC3B;QAEO,2BAAM,GAAd,UAAe,IAAiB;YAC9B,IAAI,CAAC,IAAI,CAAC,QAAQ;gBAAE,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;YAE3C,IAAI,CAAC,IAAI,CAAC,IAAI;gBAAE,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;YAEvC,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YAC/B,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;YAEnC,IAAI,CAAC,IAAI,EAAE,CAAC;YAEZ,OAAO,IAAI,CAAC;SACb;QAED,wBAAG,GAAH,UAAI,KAAQ;YAAZ,iBAUC;YATC,OAAO;gBACL,KAAK,EAAE;;oBAAC,gBAA2C;yBAA3C,UAA2C,EAA3C,qBAA2C,EAA3C,IAA2C;wBAA3C,2BAA2C;;oBACjD,OAAA,CAAA,KAAA,KAAI,CAAC,QAAQ,EAAC,IAAI,qBAAC,KAAI,EAAE,KAAK,GAAK,MAAM;iBAAC;gBAC5C,MAAM,EAAE;;oBAAC,gBAA2C;yBAA3C,UAA2C,EAA3C,qBAA2C,EAA3C,IAA2C;wBAA3C,2BAA2C;;oBAClD,OAAA,CAAA,KAAA,KAAI,CAAC,SAAS,EAAC,IAAI,qBAAC,KAAI,EAAE,KAAK,GAAK,MAAM;iBAAC;gBAC7C,OAAO,EAAE,UAAC,QAAgB,IAAK,OAAA,KAAI,CAAC,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAA;gBAC/D,IAAI,EAAE,cAAM,OAAA,KAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAA;gBAC/B,IAAI,EAAE,cAAM,OAAA,KAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAA;aAChC,CAAC;SACH;QAED,4BAAO,GAAP,UAAQ,MAAW;YAAnB,iBAUC;YATC,OAAO;gBACL,KAAK,EAAE;;oBAAC,gBAA2C;yBAA3C,UAA2C,EAA3C,qBAA2C,EAA3C,IAA2C;wBAA3C,2BAA2C;;oBACjD,OAAA,CAAA,KAAA,KAAI,CAAC,YAAY,EAAC,IAAI,qBAAC,KAAI,EAAE,MAAM,GAAK,MAAM;iBAAC;gBACjD,MAAM,EAAE;;oBAAC,gBAA2C;yBAA3C,UAA2C,EAA3C,qBAA2C,EAA3C,IAA2C;wBAA3C,2BAA2C;;oBAClD,OAAA,CAAA,KAAA,KAAI,CAAC,aAAa,EAAC,IAAI,qBAAC,KAAI,EAAE,MAAM,GAAK,MAAM;iBAAC;gBAClD,OAAO,EAAE,UAAC,QAAgB,IAAK,OAAA,KAAI,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAA;gBACpE,IAAI,EAAE,cAAM,OAAA,KAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAA;gBACpC,IAAI,EAAE,cAAM,OAAA,KAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAA;aACrC,CAAC;SACH;QAID,6BAAQ,GAAR,UAAS,KAAQ,EAAE,aAAkB,EAAE,SAAwC;YAAxC,0BAAA,EAAA,mBAAwC;YAC7E,IAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAA,IAAI,IAAI,OAAA,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,aAAa,CAAC,GAAA,CAAC,CAAC;YAEzE,OAAO,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SACrF;QAID,8BAAS,GAAT,UAAU,KAAQ,EAAE,SAAc,EAAE,SAAwC;YAAxC,0BAAA,EAAA,mBAAwC;YAC1E,IAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,UAAA,IAAI,IAAI,OAAA,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,GAAA,CAAC,CAAC;YAEjE,OAAO,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SAC7E;QAED,+BAAU,GAAV,UAAW,KAAQ,EAAE,QAAgB;YACnC,IAAI,QAAQ,GAAG,CAAC;gBAAE,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC;iBACnC,IAAI,QAAQ,IAAI,IAAI,CAAC,IAAI;gBAAE,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAE3D,IAAI,QAAQ,IAAI,CAAC;gBAAE,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAE9C,IAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAE,CAAC;YAEjC,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;SAChD;QAED,4BAAO,GAAP,UAAQ,KAAQ;YACd,IAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC;YAEjC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;YAEvB,IAAI,IAAI,CAAC,KAAK;gBAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;;gBACtC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YAEtB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAClB,IAAI,CAAC,IAAI,EAAE,CAAC;YAEZ,OAAO,IAAI,CAAC;SACb;QAED,4BAAO,GAAP,UAAQ,KAAQ;YACd,IAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC;YAEjC,IAAI,IAAI,CAAC,KAAK,EAAE;gBACd,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;gBAC1B,IAAI,CAAC,IAAK,CAAC,IAAI,GAAG,IAAI,CAAC;gBACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;aAClB;iBAAM;gBACL,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;gBAClB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;aAClB;YAED,IAAI,CAAC,IAAI,EAAE,CAAC;YAEZ,OAAO,IAAI,CAAC;SACb;QAID,iCAAY,GAAZ,UACE,MAAW,EACX,aAAkB,EAClB,SAAwC;YAAxC,0BAAA,EAAA,mBAAwC;YAExC,IAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAA,IAAI,IAAI,OAAA,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,aAAa,CAAC,GAAA,CAAC,CAAC;YAEzE,OAAO,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;SAC/F;QAID,kCAAa,GAAb,UACE,MAAW,EACX,SAAc,EACd,SAAwC;YAAxC,0BAAA,EAAA,mBAAwC;YAExC,IAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,UAAA,IAAI,IAAI,OAAA,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,GAAA,CAAC,CAAC;YAEjE,OAAO,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;SACvF;QAED,mCAAc,GAAd,UAAe,MAAW,EAAE,QAAgB;YAC1C,IAAI,QAAQ,GAAG,CAAC;gBAAE,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC;YAExC,IAAI,QAAQ,IAAI,CAAC;gBAAE,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAEnD,IAAI,QAAQ,IAAI,IAAI,CAAC,IAAI;gBAAE,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAE3D,IAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAE,CAAC;YAEjC,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;SACrD;QAED,gCAAW,GAAX,UAAY,MAAW;YAAvB,iBAKC;YAJC,OAAO,MAAM,CAAC,WAAW,CAAgB,UAAC,KAAK,EAAE,KAAK;gBACpD,KAAK,CAAC,OAAO,CAAC,KAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;gBACnC,OAAO,KAAK,CAAC;aACd,EAAE,EAAE,CAAC,CAAC;SACR;QAED,gCAAW,GAAX,UAAY,MAAW;YAAvB,iBAEC;YADC,OAAO,MAAM,CAAC,GAAG,CAAC,UAAA,KAAK,IAAI,OAAA,KAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAA,CAAC,CAAC;SACjD;QAED,yBAAI,GAAJ;YAAA,iBAUC;YATC,OAAO;gBACL,OAAO,EAAE,UAAC,QAAgB,IAAK,OAAA,KAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAA;gBACzD,OAAO,EAAE;oBAAC,gBAA2C;yBAA3C,UAA2C,EAA3C,qBAA2C,EAA3C,IAA2C;wBAA3C,2BAA2C;;oBACnD,OAAA,KAAI,CAAC,WAAW,CAAC,KAAK,CAAC,KAAI,EAAE,MAAM,CAAC;iBAAA;gBACtC,UAAU,EAAE;oBAAC,gBAA2C;yBAA3C,UAA2C,EAA3C,qBAA2C,EAA3C,IAA2C;wBAA3C,2BAA2C;;oBACtD,OAAA,KAAI,CAAC,cAAc,CAAC,KAAK,CAAC,KAAI,EAAE,MAAM,CAAC;iBAAA;gBACzC,IAAI,EAAE,cAAM,OAAA,KAAI,CAAC,QAAQ,EAAE,GAAA;gBAC3B,IAAI,EAAE,cAAM,OAAA,KAAI,CAAC,QAAQ,EAAE,GAAA;aAC5B,CAAC;SACH;QAED,6BAAQ,GAAR,UAAS,KAAa;YAAtB,iBAMC;YALC,OAAO;gBACL,OAAO,EAAE,UAAC,QAAgB,IAAK,OAAA,KAAI,CAAC,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAA;gBACpE,IAAI,EAAE,cAAM,OAAA,KAAI,CAAC,YAAY,CAAC,KAAK,CAAC,GAAA;gBACpC,IAAI,EAAE,cAAM,OAAA,KAAI,CAAC,YAAY,CAAC,KAAK,CAAC,GAAA;aACrC,CAAC;SACH;QAED,gCAAW,GAAX,UAAY,QAAgB;YAC1B,IAAI,QAAQ,GAAG,CAAC;gBAAE,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC;YAExC,IAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAEnC,OAAO,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC;SACnD;QAID,gCAAW,GAAX,UAAY,KAAU,EAAE,SAAwC;YAAxC,0BAAA,EAAA,mBAAwC;YAC9D,IAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,UAAA,IAAI,IAAI,OAAA,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,GAAA,CAAC,CAAC;YAEtE,OAAO,QAAQ,GAAG,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;SAC9D;QAID,mCAAc,GAAd,UAAe,KAAU,EAAE,SAAwC;YAAxC,0BAAA,EAAA,mBAAwC;YACjE,IAAM,OAAO,GAAkB,EAAE,CAAC;YAElC,KAAK,IAAI,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE,QAAQ,GAAG,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE;gBACxF,IAAI,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;oBACnC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAE,CAAC,CAAC;iBAC5D;aACF;YAED,OAAO,OAAO,CAAC;SAChB;QAED,6BAAQ,GAAR;YACE,IAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;YAExB,IAAI,IAAI,EAAE;gBACR,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC;gBAEvB,IAAI,IAAI,CAAC,KAAK;oBAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,SAAS,CAAC;;oBAC3C,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;gBAE3B,IAAI,CAAC,IAAI,EAAE,CAAC;gBAEZ,OAAO,IAAI,CAAC;aACb;YAED,OAAO,SAAS,CAAC;SAClB;QAED,6BAAQ,GAAR;YACE,IAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YAEvB,IAAI,IAAI,EAAE;gBACR,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC;gBAE1B,IAAI,IAAI,CAAC,IAAI;oBAAE,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;;oBACrC,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;gBAE5B,IAAI,CAAC,IAAI,EAAE,CAAC;gBAEZ,OAAO,IAAI,CAAC;aACb;YAED,OAAO,SAAS,CAAC;SAClB;QAED,oCAAe,GAAf,UAAgB,KAAa,EAAE,QAAgB;YAC7C,IAAI,KAAK,IAAI,CAAC;gBAAE,OAAO,EAAE,CAAC;YAE1B,IAAI,QAAQ,GAAG,CAAC;gBAAE,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;iBAC1D,IAAI,QAAQ,IAAI,IAAI,CAAC,IAAI;gBAAE,OAAO,EAAE,CAAC;YAE1C,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAC;YAE9C,IAAM,OAAO,GAAkB,EAAE,CAAC;YAElC,OAAO,KAAK,EAAE,EAAE;gBACd,IAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBACnC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAQ,CAAE,CAAC,CAAC;aACtC;YAED,OAAO,OAAO,CAAC;SAChB;QAED,iCAAY,GAAZ,UAAa,KAAyB;YACpC,IAAI,KAAK,IAAI,CAAC;gBAAE,OAAO,EAAE,CAAC;YAE1B,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAEnC,IAAM,OAAO,GAAkB,EAAE,CAAC;YAElC,OAAO,KAAK,EAAE;gBAAE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAG,CAAC,CAAC;YAElD,OAAO,OAAO,CAAC;SAChB;QAED,iCAAY,GAAZ,UAAa,KAAyB;YACpC,IAAI,KAAK,IAAI,CAAC;gBAAE,OAAO,EAAE,CAAC;YAE1B,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAEnC,IAAM,OAAO,GAAkB,EAAE,CAAC;YAElC,OAAO,KAAK,EAAE;gBAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAG,CAAC,CAAC;YAE/C,OAAO,OAAO,CAAC;SAChB;QAED,yBAAI,GAAJ,UAAK,SAA4B;YAC/B,KAAK,IAAI,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE,QAAQ,GAAG,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE;gBACxF,IAAI,SAAS,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC;oBAAE,OAAO,OAAO,CAAC;aACxD;YAED,OAAO,SAAS,CAAC;SAClB;QAED,8BAAS,GAAT,UAAU,SAA4B;YACpC,KAAK,IAAI,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE,QAAQ,GAAG,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE;gBACxF,IAAI,SAAS,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC;oBAAE,OAAO,QAAQ,CAAC;aACzD;YAED,OAAO,CAAC,CAAC,CAAC;SACX;QAED,4BAAO,GAAP,UAAqB,UAAgC;YACnD,KAAK,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,QAAQ,GAAG,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;gBAC5E,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;aAClC;SACF;QAED,wBAAG,GAAH,UAAI,QAAgB;YAClB,OAAO,IAAI,CAAC,IAAI,CAAC,UAAC,CAAC,EAAE,KAAK,IAAK,OAAA,QAAQ,KAAK,KAAK,GAAA,CAAC,CAAC;SACpD;QAID,4BAAO,GAAP,UAAQ,KAAU,EAAE,SAAwC;YAAxC,0BAAA,EAAA,mBAAwC;YAC1D,OAAO,IAAI,CAAC,SAAS,CAAC,UAAA,IAAI,IAAI,OAAA,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,GAAA,CAAC,CAAC;SAC7D;QAED,4BAAO,GAAP;YACE,IAAM,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEnC,IAAI,CAAC,OAAO,CAAC,UAAC,IAAI,EAAE,KAAK,IAAK,QAAC,KAAK,CAAC,KAAM,CAAC,GAAG,IAAI,CAAC,KAAK,IAAC,CAAC,CAAC;YAE5D,OAAO,KAAK,CAAC;SACd;QAED,gCAAW,GAAX;YACE,IAAM,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEnC,IAAI,CAAC,OAAO,CAAC,UAAC,IAAI,EAAE,KAAK,IAAK,QAAC,KAAK,CAAC,KAAM,CAAC,GAAG,IAAI,IAAC,CAAC,CAAC;YAEtD,OAAO,KAAK,CAAC;SACd;QAED,6BAAQ,GAAR,UAAS,QAA0C;YAA1C,yBAAA,EAAA,WAA4B,IAAI,CAAC,SAAS;YACjD,OAAO,IAAI,CAAC,OAAO,EAAE;iBAClB,GAAG,CAAC,UAAA,KAAK,IAAI,OAAA,QAAQ,CAAC,KAAK,CAAC,GAAA,CAAC;iBAC7B,IAAI,CAAC,OAAO,CAAC,CAAC;SAClB;;QAGA,qBAAC,MAAM,CAAC,QAAQ,CAAC,GAAlB;;;;;wBACW,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,QAAQ,GAAG,CAAC;;;6BAAE,IAAI;wBAC5C,qBAAM,IAAI,CAAC,KAAK,EAAA;;wBAAhB,SAAgB,CAAC;;;wBAD6B,QAAQ,EAAE,EAAE,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;;;;;SAG7E;QACH,iBAAC;IAAD,CAAC;;;;;;;;;;;;;"} \ No newline at end of file diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/abp/utils/abp-utils.umd.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/abp/utils/abp-utils.umd.min.js new file mode 100644 index 0000000000..b65fa8f40f --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/abp/utils/abp-utils.umd.min.js.map b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/abp/utils/abp-utils.umd.min.js.map new file mode 100644 index 0000000000..155d2d7973 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/abp/utils/abp-utils.umd.min.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../node_modules/tslib/tslib.es6.js","ng://@abp/utils/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","__read","o","m","r","i","ar","error","__spread","arguments","concat","LinkedList","size","Object","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. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\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 function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = 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\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)) result[k] = mod[k];\r\n result.default = 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 */\r\n\r\nimport compare from 'just-compare';\r\n\r\nexport class ListNode {\r\n next: ListNode | undefined;\r\n previous: ListNode | undefined;\r\n constructor(public readonly value: T) {}\r\n}\r\n\r\nexport class LinkedList {\r\n private first: ListNode | undefined;\r\n private last: ListNode | undefined;\r\n private size = 0;\r\n\r\n get head(): ListNode | undefined {\r\n return this.first;\r\n }\r\n get tail(): ListNode | undefined {\r\n return this.last;\r\n }\r\n get length(): number {\r\n return this.size;\r\n }\r\n\r\n private attach(\r\n value: T,\r\n previousNode: ListNode | undefined,\r\n nextNode: ListNode | undefined,\r\n ): ListNode {\r\n if (!previousNode) return this.addHead(value);\r\n\r\n if (!nextNode) return this.addTail(value);\r\n\r\n const node = new ListNode(value);\r\n node.previous = previousNode;\r\n previousNode.next = node;\r\n node.next = nextNode;\r\n nextNode.previous = node;\r\n\r\n this.size++;\r\n\r\n return node;\r\n }\r\n\r\n private attachMany(\r\n values: T[],\r\n previousNode: ListNode | undefined,\r\n nextNode: ListNode | undefined,\r\n ): ListNode[] {\r\n if (!values.length) return [];\r\n\r\n if (!previousNode) return this.addManyHead(values);\r\n\r\n if (!nextNode) return this.addManyTail(values);\r\n\r\n const list = new LinkedList();\r\n list.addManyTail(values);\r\n list.first!.previous = previousNode;\r\n previousNode.next = list.first;\r\n list.last!.next = nextNode;\r\n nextNode.previous = list.last;\r\n\r\n this.size += values.length;\r\n\r\n return list.toNodeArray();\r\n }\r\n\r\n private detach(node: ListNode) {\r\n if (!node.previous) return this.dropHead();\r\n\r\n if (!node.next) return this.dropTail();\r\n\r\n node.previous.next = node.next;\r\n node.next.previous = node.previous;\r\n\r\n this.size--;\r\n\r\n return node;\r\n }\r\n\r\n add(value: T) {\r\n return {\r\n after: (...params: [T] | [any, ListComparisonFn]) =>\r\n this.addAfter.call(this, value, ...params),\r\n before: (...params: [T] | [any, ListComparisonFn]) =>\r\n this.addBefore.call(this, value, ...params),\r\n byIndex: (position: number) => this.addByIndex(value, position),\r\n head: () => this.addHead(value),\r\n tail: () => this.addTail(value),\r\n };\r\n }\r\n\r\n addMany(values: T[]) {\r\n return {\r\n after: (...params: [T] | [any, ListComparisonFn]) =>\r\n this.addManyAfter.call(this, values, ...params),\r\n before: (...params: [T] | [any, ListComparisonFn]) =>\r\n this.addManyBefore.call(this, values, ...params),\r\n byIndex: (position: number) => this.addManyByIndex(values, position),\r\n head: () => this.addManyHead(values),\r\n tail: () => this.addManyTail(values),\r\n };\r\n }\r\n\r\n addAfter(value: T, previousValue: T): ListNode;\r\n addAfter(value: T, previousValue: any, compareFn: ListComparisonFn): ListNode;\r\n addAfter(value: T, previousValue: any, compareFn: ListComparisonFn = compare): ListNode {\r\n const previous = this.find(node => compareFn(node.value, previousValue));\r\n\r\n return previous ? this.attach(value, previous, previous.next) : this.addTail(value);\r\n }\r\n\r\n addBefore(value: T, nextValue: T): ListNode;\r\n addBefore(value: T, nextValue: any, compareFn: ListComparisonFn): ListNode;\r\n addBefore(value: T, nextValue: any, compareFn: ListComparisonFn = compare): ListNode {\r\n const next = this.find(node => compareFn(node.value, nextValue));\r\n\r\n return next ? this.attach(value, next.previous, next) : this.addHead(value);\r\n }\r\n\r\n addByIndex(value: T, position: number): ListNode {\r\n if (position < 0) position += this.size;\r\n else if (position >= this.size) return this.addTail(value);\r\n\r\n if (position <= 0) return this.addHead(value);\r\n\r\n const next = this.get(position)!;\r\n\r\n return this.attach(value, next.previous, next);\r\n }\r\n\r\n addHead(value: T): ListNode {\r\n const node = new ListNode(value);\r\n\r\n node.next = this.first;\r\n\r\n if (this.first) this.first.previous = node;\r\n else this.last = node;\r\n\r\n this.first = node;\r\n this.size++;\r\n\r\n return node;\r\n }\r\n\r\n addTail(value: T): ListNode {\r\n const node = new ListNode(value);\r\n\r\n if (this.first) {\r\n node.previous = this.last;\r\n this.last!.next = node;\r\n this.last = node;\r\n } else {\r\n this.first = node;\r\n this.last = node;\r\n }\r\n\r\n this.size++;\r\n\r\n return node;\r\n }\r\n\r\n addManyAfter(values: T[], previousValue: T): ListNode[];\r\n addManyAfter(values: T[], previousValue: any, compareFn: ListComparisonFn): ListNode[];\r\n addManyAfter(\r\n values: T[],\r\n previousValue: any,\r\n compareFn: ListComparisonFn = compare,\r\n ): ListNode[] {\r\n const previous = this.find(node => compareFn(node.value, previousValue));\r\n\r\n return previous ? this.attachMany(values, previous, previous.next) : this.addManyTail(values);\r\n }\r\n\r\n addManyBefore(values: T[], nextValue: T): ListNode[];\r\n addManyBefore(values: T[], nextValue: any, compareFn: ListComparisonFn): ListNode[];\r\n addManyBefore(\r\n values: T[],\r\n nextValue: any,\r\n compareFn: ListComparisonFn = compare,\r\n ): ListNode[] {\r\n const next = this.find(node => compareFn(node.value, nextValue));\r\n\r\n return next ? this.attachMany(values, next.previous, next) : this.addManyHead(values);\r\n }\r\n\r\n addManyByIndex(values: T[], position: number): ListNode[] {\r\n if (position < 0) position += this.size;\r\n\r\n if (position <= 0) return this.addManyHead(values);\r\n\r\n if (position >= this.size) return this.addManyTail(values);\r\n\r\n const next = this.get(position)!;\r\n\r\n return this.attachMany(values, next.previous, next);\r\n }\r\n\r\n addManyHead(values: T[]): ListNode[] {\r\n return values.reduceRight[]>((nodes, value) => {\r\n nodes.unshift(this.addHead(value));\r\n return nodes;\r\n }, []);\r\n }\r\n\r\n addManyTail(values: T[]): ListNode[] {\r\n return values.map(value => this.addTail(value));\r\n }\r\n\r\n drop() {\r\n return {\r\n byIndex: (position: number) => this.dropByIndex(position),\r\n byValue: (...params: [T] | [any, ListComparisonFn]) =>\r\n this.dropByValue.apply(this, params),\r\n byValueAll: (...params: [T] | [any, ListComparisonFn]) =>\r\n this.dropByValueAll.apply(this, params),\r\n head: () => this.dropHead(),\r\n tail: () => this.dropTail(),\r\n };\r\n }\r\n\r\n dropMany(count: number) {\r\n return {\r\n byIndex: (position: number) => this.dropManyByIndex(count, position),\r\n head: () => this.dropManyHead(count),\r\n tail: () => this.dropManyTail(count),\r\n };\r\n }\r\n\r\n dropByIndex(position: number): ListNode | undefined {\r\n if (position < 0) position += this.size;\r\n\r\n const current = this.get(position);\r\n\r\n return current ? this.detach(current) : undefined;\r\n }\r\n\r\n dropByValue(value: T): ListNode | undefined;\r\n dropByValue(value: any, compareFn: ListComparisonFn): ListNode | undefined;\r\n dropByValue(value: any, compareFn: ListComparisonFn = compare): ListNode | undefined {\r\n const position = this.findIndex(node => compareFn(node.value, value));\r\n\r\n return position < 0 ? undefined : this.dropByIndex(position);\r\n }\r\n\r\n dropByValueAll(value: T): ListNode[];\r\n dropByValueAll(value: any, compareFn: ListComparisonFn): ListNode[];\r\n dropByValueAll(value: any, compareFn: ListComparisonFn = compare): ListNode[] {\r\n const dropped: ListNode[] = [];\r\n\r\n for (let current = this.first, position = 0; current; position++, current = current.next) {\r\n if (compareFn(current.value, value)) {\r\n dropped.push(this.dropByIndex(position - dropped.length)!);\r\n }\r\n }\r\n\r\n return dropped;\r\n }\r\n\r\n dropHead(): ListNode | undefined {\r\n const head = this.first;\r\n\r\n if (head) {\r\n this.first = head.next;\r\n\r\n if (this.first) this.first.previous = undefined;\r\n else this.last = undefined;\r\n\r\n this.size--;\r\n\r\n return head;\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n dropTail(): ListNode | undefined {\r\n const tail = this.last;\r\n\r\n if (tail) {\r\n this.last = tail.previous;\r\n\r\n if (this.last) this.last.next = undefined;\r\n else this.first = undefined;\r\n\r\n this.size--;\r\n\r\n return tail;\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n dropManyByIndex(count: number, position: number): ListNode[] {\r\n if (count <= 0) return [];\r\n\r\n if (position < 0) position = Math.max(position + this.size, 0);\r\n else if (position >= this.size) return [];\r\n\r\n count = Math.min(count, this.size - position);\r\n\r\n const dropped: ListNode[] = [];\r\n\r\n while (count--) {\r\n const current = this.get(position);\r\n dropped.push(this.detach(current!)!);\r\n }\r\n\r\n return dropped;\r\n }\r\n\r\n dropManyHead(count: Exclude): ListNode[] {\r\n if (count <= 0) return [];\r\n\r\n count = Math.min(count, this.size);\r\n\r\n const dropped: ListNode[] = [];\r\n\r\n while (count--) dropped.unshift(this.dropHead()!);\r\n\r\n return dropped;\r\n }\r\n\r\n dropManyTail(count: Exclude): ListNode[] {\r\n if (count <= 0) return [];\r\n\r\n count = Math.min(count, this.size);\r\n\r\n const dropped: ListNode[] = [];\r\n\r\n while (count--) dropped.push(this.dropTail()!);\r\n\r\n return dropped;\r\n }\r\n\r\n find(predicate: ListIteratorFn): ListNode | undefined {\r\n for (let current = this.first, position = 0; current; position++, current = current.next) {\r\n if (predicate(current, position, this)) return current;\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n findIndex(predicate: ListIteratorFn): number {\r\n for (let current = this.first, position = 0; current; position++, current = current.next) {\r\n if (predicate(current, position, this)) return position;\r\n }\r\n\r\n return -1;\r\n }\r\n\r\n forEach(iteratorFn: ListIteratorFn) {\r\n for (let node = this.first, position = 0; node; position++, node = node.next) {\r\n iteratorFn(node, position, this);\r\n }\r\n }\r\n\r\n get(position: number): ListNode | undefined {\r\n return this.find((_, index) => position === index);\r\n }\r\n\r\n indexOf(value: T): number;\r\n indexOf(value: any, compareFn: ListComparisonFn): number;\r\n indexOf(value: any, compareFn: ListComparisonFn = compare): number {\r\n return this.findIndex(node => compareFn(node.value, value));\r\n }\r\n\r\n toArray(): T[] {\r\n const array = new Array(this.size);\r\n\r\n this.forEach((node, index) => (array[index!] = node.value));\r\n\r\n return array;\r\n }\r\n\r\n toNodeArray(): ListNode[] {\r\n const array = new Array(this.size);\r\n\r\n this.forEach((node, index) => (array[index!] = node));\r\n\r\n return array;\r\n }\r\n\r\n toString(mapperFn: ListMapperFn = JSON.stringify): string {\r\n return this.toArray()\r\n .map(value => mapperFn(value))\r\n .join(' <-> ');\r\n }\r\n\r\n // Cannot use Generator type because of ng-packagr\r\n *[Symbol.iterator](): any {\r\n for (let node = this.first, position = 0; node; position++, node = node.next) {\r\n yield node.value;\r\n }\r\n }\r\n}\r\n\r\nexport type ListMapperFn = (value: T) => any;\r\n\r\nexport type ListComparisonFn = (value1: T, value2: any) => boolean;\r\n\r\nexport type ListIteratorFn = (\r\n node: ListNode,\r\n index?: number,\r\n list?: LinkedList,\r\n) => R;\r\n"]} \ No newline at end of file diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/bootstrap-datepicker.css.map b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/bootstrap-datepicker.css.map new file mode 100644 index 0000000000..7e08a21044 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/bootstrap-datepicker.min.css b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/bootstrap-datepicker.min.css new file mode 100644 index 0000000000..eb681513fb --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/bootstrap-datepicker.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/bootstrap-datepicker.min.js new file mode 100644 index 0000000000..8800106e8f --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker-en-CA.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker-en-CA.min.js new file mode 100644 index 0000000000..0aab38f3a4 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ar-tn.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ar-tn.min.js new file mode 100644 index 0000000000..9d70dc2fa3 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ar.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ar.min.js new file mode 100644 index 0000000000..ece41af725 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.az.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.az.min.js new file mode 100644 index 0000000000..aa1edbf4f8 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.bg.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.bg.min.js new file mode 100644 index 0000000000..28e8b22dcf --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.bm.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.bm.min.js new file mode 100644 index 0000000000..e0796a3ba7 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.bn.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.bn.min.js new file mode 100644 index 0000000000..f67b5e26e7 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.br.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.br.min.js new file mode 100644 index 0000000000..af3e3bd0af --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.bs.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.bs.min.js new file mode 100644 index 0000000000..cfb06fde79 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ca.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ca.min.js new file mode 100644 index 0000000000..ac107894c4 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.cs.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.cs.min.js new file mode 100644 index 0000000000..42dfd1a29d --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.cy.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.cy.min.js new file mode 100644 index 0000000000..f85ea031dd --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.da.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.da.min.js new file mode 100644 index 0000000000..53c8180528 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.de.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.de.min.js new file mode 100644 index 0000000000..1b5d6a2474 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.el.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.el.min.js new file mode 100644 index 0000000000..046e9eb5ef --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.en-AU.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.en-AU.min.js new file mode 100644 index 0000000000..b8d5f41cfa --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.en-CA.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.en-CA.min.js new file mode 100644 index 0000000000..7b1070f74d --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.en-GB.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.en-GB.min.js new file mode 100644 index 0000000000..2966f5414e --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.en-IE.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.en-IE.min.js new file mode 100644 index 0000000000..dc8f71c026 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.en-NZ.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.en-NZ.min.js new file mode 100644 index 0000000000..c374a8d40c --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.en-ZA.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.en-ZA.min.js new file mode 100644 index 0000000000..885a928cba --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.eo.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.eo.min.js new file mode 100644 index 0000000000..736db021ae --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.es.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.es.min.js new file mode 100644 index 0000000000..f3cef5d2b9 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.et.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.et.min.js new file mode 100644 index 0000000000..34cd9c60e9 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.eu.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.eu.min.js new file mode 100644 index 0000000000..c5aa359e48 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.fa.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.fa.min.js new file mode 100644 index 0000000000..8575237a07 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.fi.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.fi.min.js new file mode 100644 index 0000000000..239dfb796c --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.fo.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.fo.min.js new file mode 100644 index 0000000000..fa24e3a127 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.fr-CH.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.fr-CH.min.js new file mode 100644 index 0000000000..1c6bcdcbfc --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.fr.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.fr.min.js new file mode 100644 index 0000000000..244cfba800 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.gl.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.gl.min.js new file mode 100644 index 0000000000..3d92606b3b --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.he.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.he.min.js new file mode 100644 index 0000000000..191cb453a0 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.hi.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.hi.min.js new file mode 100644 index 0000000000..635baffa8b --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.hr.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.hr.min.js new file mode 100644 index 0000000000..8b34bce0fd --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.hu.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.hu.min.js new file mode 100644 index 0000000000..f9decf9a2c --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.hy.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.hy.min.js new file mode 100644 index 0000000000..a1cf653d38 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.id.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.id.min.js new file mode 100644 index 0000000000..7c3220a643 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.is.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.is.min.js new file mode 100644 index 0000000000..f49bd18cc2 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.it-CH.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.it-CH.min.js new file mode 100644 index 0000000000..7e1adbb95d --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.it.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.it.min.js new file mode 100644 index 0000000000..cc30766ffa --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ja.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ja.min.js new file mode 100644 index 0000000000..e321f04ffe --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ka.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ka.min.js new file mode 100644 index 0000000000..84f14c0e90 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.kh.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.kh.min.js new file mode 100644 index 0000000000..bf2abc5d82 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.kk.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.kk.min.js new file mode 100644 index 0000000000..f4e2f3f1a2 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.km.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.km.min.js new file mode 100644 index 0000000000..648d83f84f --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ko.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ko.min.js new file mode 100644 index 0000000000..9751ee5c22 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.kr.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.kr.min.js new file mode 100644 index 0000000000..43393409e0 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.lt.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.lt.min.js new file mode 100644 index 0000000000..da78ea85f3 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.lv.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.lv.min.js new file mode 100644 index 0000000000..89cea00f8b --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.me.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.me.min.js new file mode 100644 index 0000000000..c65a891646 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.mk.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.mk.min.js new file mode 100644 index 0000000000..46423f7581 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.mn.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.mn.min.js new file mode 100644 index 0000000000..6ebaec9d86 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ms.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ms.min.js new file mode 100644 index 0000000000..47efafdc2f --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.nl-BE.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.nl-BE.min.js new file mode 100644 index 0000000000..85d3146df1 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.nl.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.nl.min.js new file mode 100644 index 0000000000..af977b71ea --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.no.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.no.min.js new file mode 100644 index 0000000000..0c5136e441 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.oc.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.oc.min.js new file mode 100644 index 0000000000..630fa16b96 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.pl.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.pl.min.js new file mode 100644 index 0000000000..ffb30ec8b1 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.pt-BR.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.pt-BR.min.js new file mode 100644 index 0000000000..2d3f8afdac --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.pt.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.pt.min.js new file mode 100644 index 0000000000..e2b4e64d77 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ro.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ro.min.js new file mode 100644 index 0000000000..5fff2986df --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.rs-latin.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.rs-latin.min.js new file mode 100644 index 0000000000..e520c95733 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.rs.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.rs.min.js new file mode 100644 index 0000000000..ba95ae298f --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ru.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ru.min.js new file mode 100644 index 0000000000..52bc010b97 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.si.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.si.min.js new file mode 100644 index 0000000000..b9746b8fc1 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.sk.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.sk.min.js new file mode 100644 index 0000000000..79a9267fd5 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.sl.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.sl.min.js new file mode 100644 index 0000000000..831cf73903 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.sq.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.sq.min.js new file mode 100644 index 0000000000..8c586055a0 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.sr-latin.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.sr-latin.min.js new file mode 100644 index 0000000000..c6b7001ace --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.sr.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.sr.min.js new file mode 100644 index 0000000000..4e46dbf64b --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.sv.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.sv.min.js new file mode 100644 index 0000000000..7ab6becb92 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.sw.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.sw.min.js new file mode 100644 index 0000000000..454d3053cb --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ta.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.ta.min.js new file mode 100644 index 0000000000..e7909494aa --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.tg.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.tg.min.js new file mode 100644 index 0000000000..104b6dd95b --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.th.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.th.min.js new file mode 100644 index 0000000000..1e398ba8bc --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.tk.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.tk.min.js new file mode 100644 index 0000000000..716edef2ee --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.tr.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.tr.min.js new file mode 100644 index 0000000000..7889b1135d --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.uk.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.uk.min.js new file mode 100644 index 0000000000..41b02e6b28 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.uz-cyrl.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.uz-cyrl.min.js new file mode 100644 index 0000000000..a0a8f213ce --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.uz-latn.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.uz-latn.min.js new file mode 100644 index 0000000000..2f58e343ef --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.vi.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.vi.min.js new file mode 100644 index 0000000000..3311d23f86 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.zh-CN.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.zh-CN.min.js new file mode 100644 index 0000000000..8e6920b0c8 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.zh-TW.min.js b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap-datepicker/locales/bootstrap-datepicker.zh-TW.min.js new file mode 100644 index 0000000000..e309c1d7d6 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap/css/bootstrap-rtl.css b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap/css/bootstrap-rtl.css new file mode 100644 index 0000000000..35ddb6a220 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap/css/bootstrap-rtl.css.map b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap/css/bootstrap-rtl.css.map new file mode 100644 index 0000000000..a1927ae7b4 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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+C;IAC/C,cAAc;E9E0vThB;E8E7+TF;;IAkPI,iBAA+C;IAC/C,cAAc;E9E+vThB;E8El/TF;;IAkPI,wBAA+C;IAC/C,cAAc;E9EowThB;E8Ev/TF;;IAkPI,wBAA+C;IAC/C,cAAc;E9EywThB;AACF;;A8E7/TA;;EAiRY,0BAAkC;EAClC,yBAAsC;A9EivTlD;;A8EngUA;;EAqRY,yBAAgC;EAChC,0BAAwC;A9EmvTpD;;A8EzgUA;;EAyRY,yBAAsC;EACtC,0BAAwC;A9EqvTpD;;A8E/gUA;;EAiRY,0BAAkC;EAClC,+BAAsC;A9EmwTlD;;A8ErhUA;;EAqRY,yBAAgC;EAChC,gCAAwC;A9EqwTpD;;A8E3hUA;;EAyRY,+BAAsC;EACtC,gCAAwC;A9EuwTpD;;A8EjiUA;;EAiRY,0BAAkC;EAClC,8BAAsC;A9EqxTlD;;A8EviUA;;EAqRY,yBAAgC;EAChC,+BAAwC;A9EuxTpD;;A8E7iUA;;EAyRY,8BAAsC;EACtC,+BAAwC;A9EyxTpD;;A8EnjUA;;EAiRY,0BAAkC;EAClC,4BAAsC;A9EuyTlD;;A8EzjUA;;EAqRY,yBAAgC;EAChC,6BAAwC;A9EyyTpD;;A8E/jUA;;EAyRY,4BAAsC;EACtC,6BAAwC;A9E2yTpD;;A8ErkUA;;EAiRY,0BAAkC;EAClC,8BAAsC;A9EyzTlD;;A8E3kUA;;EAqRY,yBAAgC;EAChC,+BAAwC;A9E2zTpD;;A8EjlUA;;EAyRY,8BAAsC;EACtC,+BAAwC;A9E6zTpD;;A8EvlUA;;EAiRY,0BAAkC;EAClC,4BAAsC;A9E20TlD;;A8E7lUA;;EAqRY,yBAAgC;EAChC,6BAAwC;A9E60TpD;;A8EnmUA;;EAyRY,4BAAsC;EACtC,6BAAwC;A9E+0TpD;;A8EzmUA;;EAiRY,2BAAkC;EAClC,0BAAsC;A9E61TlD;;A8E/mUA;;EAqRY,0BAAgC;EAChC,2BAAwC;A9E+1TpD;;A8ErnUA;;EAyRY,0BAAsC;EACtC,2BAAwC;A9Ei2TpD;;A8E3nUA;;EAiRY,2BAAkC;EAClC,gCAAsC;A9E+2TlD;;A8EjoUA;;EAqRY,0BAAgC;EAChC,iCAAwC;A9Ei3TpD;;A8EvoUA;;EAyRY,gCAAsC;EACtC,iCAAwC;A9Em3TpD;;A8E7oUA;;EAiRY,2BAAkC;EAClC,+BAAsC;A9Ei4TlD;;A8EnpUA;;EAqRY,0BAAgC;EAChC,gCAAwC;A9Em4TpD;;A8EzpUA;;EAyRY,+BAAsC;EACtC,gCAAwC;A9Eq4TpD;;A8E/pUA;;EAiRY,2BAAkC;EAClC,6BAAsC;A9Em5TlD;;A8ErqUA;;EAqRY,0BAAgC;EAChC,8BAAwC;A9Eq5TpD;;A8E3qUA;;EAyRY,6BAAsC;EACtC,8BAAwC;A9Eu5TpD;;A8EjrUA;;EAiRY,2BAAkC;EAClC,+BAAsC;A9Eq6TlD;;A8EvrUA;;EAqRY,0BAAgC;EAChC,gCAAwC;A9Eu6TpD;;A8E7rUA;;EAyRY,+BAAsC;EACtC,gCAAwC;A9Ey6TpD;;A8EnsUA;;EAiRY,2BAAkC;EAClC,6BAAsC;A9Eu7TlD;;A8EzsUA;;EAqRY,0BAAgC;EAChC,8BAAwC;A9Ey7TpD;;A8E/sUA;;EAyRY,6BAAsC;EACtC,8BAAwC;A9E27TpD;;A8ErtUA;;EAgSQ,0BAA0B;EAC1B,4BAA4B;A9E07TpC;;A8E3tUA;;EAoSQ,6BAA6B;EAC7B,yBAAyB;A9E47TjC;;A8EjuUA;;EAwSQ,6BAA6B;EAC7B,4BAA4B;A9E87TpC;;Ac3qUI;EgE5DJ;;IAiRY,0BAAkC;IAClC,yBAAsC;E9E49ThD;E8E9uUF;;IAqRY,yBAAgC;IAChC,0BAAwC;E9E69TlD;E8EnvUF;;IAyRY,yBAAsC;IACtC,0BAAwC;E9E89TlD;E8ExvUF;;IAiRY,0BAAkC;IAClC,+BAAsC;E9E2+ThD;E8E7vUF;;IAqRY,yBAAgC;IAChC,gCAAwC;E9E4+TlD;E8ElwUF;;IAyRY,+BAAsC;IACtC,gCAAwC;E9E6+TlD;E8EvwUF;;IAiRY,0BAAkC;IAClC,8BAAsC;E9E0/ThD;E8E5wUF;;IAqRY,yBAAgC;IAChC,+BAAwC;E9E2/TlD;E8EjxUF;;IAyRY,8BAAsC;IACtC,+BAAwC;E9E4/TlD;E8EtxUF;;IAiRY,0BAAkC;IAClC,4BAAsC;E9EygUhD;E8E3xUF;;IAqRY,yBAAgC;IAChC,6BAAwC;E9E0gUlD;E8EhyUF;;IAyRY,4BAAsC;IACtC,6BAAwC;E9E2gUlD;E8EryUF;;IAiRY,0BAAkC;IAClC,8BAAsC;E9EwhUhD;E8E1yUF;;IAqRY,yBAAgC;IAChC,+BAAwC;E9EyhUlD;E8E/yUF;;IAyRY,8BAAsC;IACtC,+BAAwC;E9E0hUlD;E8EpzUF;;IAiRY,0BAAkC;IAClC,4BAAsC;E9EuiUhD;E8EzzUF;;IAqRY,yBAAgC;IAChC,6BAAwC;E9EwiUlD;E8E9zUF;;IAyRY,4BAAsC;IACtC,6BAAwC;E9EyiUlD;E8En0UF;;IAiRY,2BAAkC;IAClC,0BAAsC;E9EsjUhD;E8Ex0UF;;IAqRY,0BAAgC;IAChC,2BAAwC;E9EujUlD;E8E70UF;;IAyRY,0BAAsC;IACtC,2BAAwC;E9EwjUlD;E8El1UF;;IAiRY,2BAAkC;IAClC,gCAAsC;E9EqkUhD;E8Ev1UF;;IAqRY,0BAAgC;IAChC,iCAAwC;E9EskUlD;E8E51UF;;IAyRY,gCAAsC;IACtC,iCAAwC;E9EukUlD;E8Ej2UF;;IAiRY,2BAAkC;IAClC,+BAAsC;E9EolUhD;E8Et2UF;;IAqRY,0BAAgC;IAChC,gCAAwC;E9EqlUlD;E8E32UF;;IAyRY,+BAAsC;IACtC,gCAAwC;E9EslUlD;E8Eh3UF;;IAiRY,2BAAkC;IAClC,6BAAsC;E9EmmUhD;E8Er3UF;;IAqRY,0BAAgC;IAChC,8BAAwC;E9EomUlD;E8E13UF;;IAyRY,6BAAsC;IACtC,8BAAwC;E9EqmUlD;E8E/3UF;;IAiRY,2BAAkC;IAClC,+BAAsC;E9EknUhD;E8Ep4UF;;IAqRY,0BAAgC;IAChC,gCAAwC;E9EmnUlD;E8Ez4UF;;IAyRY,+BAAsC;IACtC,gCAAwC;E9EonUlD;E8E94UF;;IAiRY,2BAAkC;IAClC,6BAAsC;E9EioUhD;E8En5UF;;IAqRY,0BAAgC;IAChC,8BAAwC;E9EkoUlD;E8Ex5UF;;IAyRY,6BAAsC;IACtC,8BAAwC;E9EmoUlD;E8E75UF;;IAgSQ,0BAA0B;IAC1B,4BAA4B;E9EioUlC;E8El6UF;;IAoSQ,6BAA6B;IAC7B,yBAAyB;E9EkoU/B;E8Ev6UF;;IAwSQ,6BAA6B;IAC7B,4BAA4B;E9EmoUlC;AACF;;Acj3UI;EgE5DJ;;IAiRY,0BAAkC;IAClC,yBAAsC;E9EkqUhD;E8Ep7UF;;IAqRY,yBAAgC;IAChC,0BAAwC;E9EmqUlD;E8Ez7UF;;IAyRY,yBAAsC;IACtC,0BAAwC;E9EoqUlD;E8E97UF;;IAiRY,0BAAkC;IAClC,+BAAsC;E9EirUhD;E8En8UF;;IAqRY,yBAAgC;IAChC,gCAAwC;E9EkrUlD;E8Ex8UF;;IAyRY,+BAAsC;IACtC,gCAAwC;E9EmrUlD;E8E78UF;;IAiRY,0BAAkC;IAClC,8BAAsC;E9EgsUhD;E8El9UF;;IAqRY,yBAAgC;IAChC,+BAAwC;E9EisUlD;E8Ev9UF;;IAyRY,8BAAsC;IACtC,+BAAwC;E9EksUlD;E8E59UF;;IAiRY,0BAAkC;IAClC,4BAAsC;E9E+sUhD;E8Ej+UF;;IAqRY,yBAAgC;IAChC,6BAAwC;E9EgtUlD;E8Et+UF;;IAyRY,4BAAsC;IACtC,6BAAwC;E9EitUlD;E8E3+UF;;IAiRY,0BAAkC;IAClC,8BAAsC;E9E8tUhD;E8Eh/UF;;IAqRY,yBAAgC;IAChC,+BAAwC;E9E+tUlD;E8Er/UF;;IAyRY,8BAAsC;IACtC,+BAAwC;E9EguUlD;E8E1/UF;;IAiRY,0BAAkC;IAClC,4BAAsC;E9E6uUhD;E8E//UF;;IAqRY,yBAAgC;IAChC,6BAAwC;E9E8uUlD;E8EpgVF;;IAyRY,4BAAsC;IACtC,6BAAwC;E9E+uUlD;E8EzgVF;;IAiRY,2BAAkC;IAClC,0BAAsC;E9E4vUhD;E8E9gVF;;IAqRY,0BAAgC;IAChC,2BAAwC;E9E6vUlD;E8EnhVF;;IAyRY,0BAAsC;IACtC,2BAAwC;E9E8vUlD;E8ExhVF;;IAiRY,2BAAkC;IAClC,gCAAsC;E9E2wUhD;E8E7hVF;;IAqRY,0BAAgC;IAChC,iCAAwC;E9E4wUlD;E8EliVF;;IAyRY,gCAAsC;IACtC,iCAAwC;E9E6wUlD;E8EviVF;;IAiRY,2BAAkC;IAClC,+BAAsC;E9E0xUhD;E8E5iVF;;IAqRY,0BAAgC;IAChC,gCAAwC;E9E2xUlD;E8EjjVF;;IAyRY,+BAAsC;IACtC,gCAAwC;E9E4xUlD;E8EtjVF;;IAiRY,2BAAkC;IAClC,6BAAsC;E9EyyUhD;E8E3jVF;;IAqRY,0BAAgC;IAChC,8BAAwC;E9E0yUlD;E8EhkVF;;IAyRY,6BAAsC;IACtC,8BAAwC;E9E2yUlD;E8ErkVF;;IAiRY,2BAAkC;IAClC,+BAAsC;E9EwzUhD;E8E1kVF;;IAqRY,0BAAgC;IAChC,gCAAwC;E9EyzUlD;E8E/kVF;;IAyRY,+BAAsC;IACtC,gCAAwC;E9E0zUlD;E8EplVF;;IAiRY,2BAAkC;IAClC,6BAAsC;E9Eu0UhD;E8EzlVF;;IAqRY,0BAAgC;IAChC,8BAAwC;E9Ew0UlD;E8E9lVF;;IAyRY,6BAAsC;IACtC,8BAAwC;E9Ey0UlD;E8EnmVF;;IAgSQ,0BAA0B;IAC1B,4BAA4B;E9Eu0UlC;E8ExmVF;;IAoSQ,6BAA6B;IAC7B,yBAAyB;E9Ew0U/B;E8E7mVF;;IAwSQ,6BAA6B;IAC7B,4BAA4B;E9Ey0UlC;AACF;;AcvjVI;EgE5DJ;;IAiRY,0BAAkC;IAClC,yBAAsC;E9Ew2UhD;E8E1nVF;;IAqRY,yBAAgC;IAChC,0BAAwC;E9Ey2UlD;E8E/nVF;;IAyRY,yBAAsC;IACtC,0BAAwC;E9E02UlD;E8EpoVF;;IAiRY,0BAAkC;IAClC,+BAAsC;E9Eu3UhD;E8EzoVF;;IAqRY,yBAAgC;IAChC,gCAAwC;E9Ew3UlD;E8E9oVF;;IAyRY,+BAAsC;IACtC,gCAAwC;E9Ey3UlD;E8EnpVF;;IAiRY,0BAAkC;IAClC,8BAAsC;E9Es4UhD;E8ExpVF;;IAqRY,yBAAgC;IAChC,+BAAwC;E9Eu4UlD;E8E7pVF;;IAyRY,8BAAsC;IACtC,+BAAwC;E9Ew4UlD;E8ElqVF;;IAiRY,0BAAkC;IAClC,4BAAsC;E9Eq5UhD;E8EvqVF;;IAqRY,yBAAgC;IAChC,6BAAwC;E9Es5UlD;E8E5qVF;;IAyRY,4BAAsC;IACtC,6BAAwC;E9Eu5UlD;E8EjrVF;;IAiRY,0BAAkC;IAClC,8BAAsC;E9Eo6UhD;E8EtrVF;;IAqRY,yBAAgC;IAChC,+BAAwC;E9Eq6UlD;E8E3rVF;;IAyRY,8BAAsC;IACtC,+BAAwC;E9Es6UlD;E8EhsVF;;IAiRY,0BAAkC;IAClC,4BAAsC;E9Em7UhD;E8ErsVF;;IAqRY,yBAAgC;IAChC,6BAAwC;E9Eo7UlD;E8E1sVF;;IAyRY,4BAAsC;IACtC,6BAAwC;E9Eq7UlD;E8E/sVF;;IAiRY,2BAAkC;IAClC,0BAAsC;E9Ek8UhD;E8EptVF;;IAqRY,0BAAgC;IAChC,2BAAwC;E9Em8UlD;E8EztVF;;IAyRY,0BAAsC;IACtC,2BAAwC;E9Eo8UlD;E8E9tVF;;IAiRY,2BAAkC;IAClC,gCAAsC;E9Ei9UhD;E8EnuVF;;IAqRY,0BAAgC;IAChC,iCAAwC;E9Ek9UlD;E8ExuVF;;IAyRY,gCAAsC;IACtC,iCAAwC;E9Em9UlD;E8E7uVF;;IAiRY,2BAAkC;IAClC,+BAAsC;E9Eg+UhD;E8ElvVF;;IAqRY,0BAAgC;IAChC,gCAAwC;E9Ei+UlD;E8EvvVF;;IAyRY,+BAAsC;IACtC,gCAAwC;E9Ek+UlD;E8E5vVF;;IAiRY,2BAAkC;IAClC,6BAAsC;E9E++UhD;E8EjwVF;;IAqRY,0BAAgC;IAChC,8BAAwC;E9Eg/UlD;E8EtwVF;;IAyRY,6BAAsC;IACtC,8BAAwC;E9Ei/UlD;E8E3wVF;;IAiRY,2BAAkC;IAClC,+BAAsC;E9E8/UhD;E8EhxVF;;IAqRY,0BAAgC;IAChC,gCAAwC;E9E+/UlD;E8ErxVF;;IAyRY,+BAAsC;IACtC,gCAAwC;E9EggVlD;E8E1xVF;;IAiRY,2BAAkC;IAClC,6BAAsC;E9E6gVhD;E8E/xVF;;IAqRY,0BAAgC;IAChC,8BAAwC;E9E8gVlD;E8EpyVF;;IAyRY,6BAAsC;IACtC,8BAAwC;E9E+gVlD;E8EzyVF;;IAgSQ,0BAA0B;IAC1B,4BAA4B;E9E6gVlC;E8E9yVF;;IAoSQ,6BAA6B;IAC7B,yBAAyB;E9E8gV/B;E8EnzVF;;IAwSQ,6BAA6B;IAC7B,4BAA4B;E9E+gVlC;AACF;;Ac7vVI;EgE5DJ;;IAiRY,0BAAkC;IAClC,yBAAsC;E9E8iVhD;E8Eh0VF;;IAqRY,yBAAgC;IAChC,0BAAwC;E9E+iVlD;E8Er0VF;;IAyRY,yBAAsC;IACtC,0BAAwC;E9EgjVlD;E8E10VF;;IAiRY,0BAAkC;IAClC,+BAAsC;E9E6jVhD;E8E/0VF;;IAqRY,yBAAgC;IAChC,gCAAwC;E9E8jVlD;E8Ep1VF;;IAyRY,+BAAsC;IACtC,gCAAwC;E9E+jVlD;E8Ez1VF;;IAiRY,0BAAkC;IAClC,8BAAsC;E9E4kVhD;E8E91VF;;IAqRY,yBAAgC;IAChC,+BAAwC;E9E6kVlD;E8En2VF;;IAyRY,8BAAsC;IACtC,+BAAwC;E9E8kVlD;E8Ex2VF;;IAiRY,0BAAkC;IAClC,4BAAsC;E9E2lVhD;E8E72VF;;IAqRY,yBAAgC;IAChC,6BAAwC;E9E4lVlD;E8El3VF;;IAyRY,4BAAsC;IACtC,6BAAwC;E9E6lVlD;E8Ev3VF;;IAiRY,0BAAkC;IAClC,8BAAsC;E9E0mVhD;E8E53VF;;IAqRY,yBAAgC;IAChC,+BAAwC;E9E2mVlD;E8Ej4VF;;IAyRY,8BAAsC;IACtC,+BAAwC;E9E4mVlD;E8Et4VF;;IAiRY,0BAAkC;IAClC,4BAAsC;E9EynVhD;E8E34VF;;IAqRY,yBAAgC;IAChC,6BAAwC;E9E0nVlD;E8Eh5VF;;IAyRY,4BAAsC;IACtC,6BAAwC;E9E2nVlD;E8Er5VF;;IAiRY,2BAAkC;IAClC,0BAAsC;E9EwoVhD;E8E15VF;;IAqRY,0BAAgC;IAChC,2BAAwC;E9EyoVlD;E8E/5VF;;IAyRY,0BAAsC;IACtC,2BAAwC;E9E0oVlD;E8Ep6VF;;IAiRY,2BAAkC;IAClC,gCAAsC;E9EupVhD;E8Ez6VF;;IAqRY,0BAAgC;IAChC,iCAAwC;E9EwpVlD;E8E96VF;;IAyRY,gCAAsC;IACtC,iCAAwC;E9EypVlD;E8En7VF;;IAiRY,2BAAkC;IAClC,+BAAsC;E9EsqVhD;E8Ex7VF;;IAqRY,0BAAgC;IAChC,gCAAwC;E9EuqVlD;E8E77VF;;IAyRY,+BAAsC;IACtC,gCAAwC;E9EwqVlD;E8El8VF;;IAiRY,2BAAkC;IAClC,6BAAsC;E9EqrVhD;E8Ev8VF;;IAqRY,0BAAgC;IAChC,8BAAwC;E9EsrVlD;E8E58VF;;IAyRY,6BAAsC;IACtC,8BAAwC;E9EurVlD;E8Ej9VF;;IAiRY,2BAAkC;IAClC,+BAAsC;E9EosVhD;E8Et9VF;;IAqRY,0BAAgC;IAChC,gCAAwC;E9EqsVlD;E8E39VF;;IAyRY,+BAAsC;IACtC,gCAAwC;E9EssVlD;E8Eh+VF;;IAiRY,2BAAkC;IAClC,6BAAsC;E9EmtVhD;E8Er+VF;;IAqRY,0BAAgC;IAChC,8BAAwC;E9EotVlD;E8E1+VF;;IAyRY,6BAAsC;IACtC,8BAAwC;E9EqtVlD;E8E/+VF;;IAgSQ,0BAA0B;IAC1B,4BAA4B;E9EmtVlC;E8Ep/VF;;IAoSQ,6BAA6B;IAC7B,yBAAyB;E9EotV/B;E8Ez/VF;;IAwSQ,6BAA6B;IAC7B,4BAA4B;E9EqtVlC;AACF;;A8E//VA;;EAkTQ,2BAA2B;A9EktVnC;;A8EpgWA;;EAqTQ,4BAA4B;A9EotVpC;;Ac78VI;EgE5DJ;;IAkTQ,2BAA2B;E9E6tVjC;E8E/gWF;;IAqTQ,4BAA4B;E9E8tVlC;AACF;;Acx9VI;EgE5DJ;;IAkTQ,2BAA2B;E9EwuVjC;E8E1hWF;;IAqTQ,4BAA4B;E9EyuVlC;AACF;;Acn+VI;EgE5DJ;;IAkTQ,2BAA2B;E9EmvVjC;E8EriWF;;IAqTQ,4BAA4B;E9EovVlC;AACF;;Ac9+VI;EgE5DJ;;IAkTQ,2BAA2B;E9E8vVjC;E8EhjWF;;IAqTQ,4BAA4B;E9E+vVlC;AACF","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",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 At)throw new TypeError("Bootstrap's tooltips require Popper.js (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 n=t.prototype;return n.enable=function(){this._isEnabled=!0},n.disable=function(){this._isEnabled=!1},n.toggleEnabled=function(){this._isEnabled=!this._isEnabled},n.toggle=function(t){if(this._isEnabled)if(t){var n=this.constructor.DATA_KEY,i=e(t.currentTarget).data(n);i||(i=new this.constructor(t.currentTarget,this._getDelegateConfig()),e(t.currentTarget).data(n,i)),i._activeTrigger.click=!i._activeTrigger.click,i._isWithActiveTrigger()?i._enter(null,i):i._leave(null,i)}else{if(e(this.getTipElement()).hasClass("show"))return void this._leave(null,this);this._enter(null,this)}},n.dispose=function(){clearTimeout(this._timeout),e.removeData(this.element,this.constructor.DATA_KEY),e(this.element).off(this.constructor.EVENT_KEY),e(this.element).closest(".modal").off("hide.bs.modal",this._hideModalHandler),this.tip&&e(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},n.show=function(){var t=this;if("none"===e(this.element).css("display"))throw new Error("Please use show on visible elements");var n=e.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){e(this.element).trigger(n);var i=l.findShadowRoot(this.element),o=e.contains(null!==i?i:this.element.ownerDocument.documentElement,this.element);if(n.isDefaultPrevented()||!o)return;var r=this.getTipElement(),s=l.getUID(this.constructor.NAME);r.setAttribute("id",s),this.element.setAttribute("aria-describedby",s),this.setContent(),this.config.animation&&e(r).addClass("fade");var a="function"==typeof this.config.placement?this.config.placement.call(this,r,this.element):this.config.placement,c=this._getAttachment(a);this.addAttachmentClass(c);var u=this._getContainer();e(r).data(this.constructor.DATA_KEY,this),e.contains(this.element.ownerDocument.documentElement,this.tip)||e(r).appendTo(u),e(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new At(this.element,r,this._getPopperConfig(c)),e(r).addClass("show"),"ontouchstart"in document.documentElement&&e(document.body).children().on("mouseover",null,e.noop);var h=function(){t.config.animation&&t._fixTransition();var n=t._hoverState;t._hoverState=null,e(t.element).trigger(t.constructor.Event.SHOWN),"out"===n&&t._leave(null,t)};if(e(this.tip).hasClass("fade")){var f=l.getTransitionDurationFromElement(this.tip);e(this.tip).one(l.TRANSITION_END,h).emulateTransitionEnd(f)}else h()}},n.hide=function(t){var n=this,i=this.getTipElement(),o=e.Event(this.constructor.Event.HIDE),r=function(){"show"!==n._hoverState&&i.parentNode&&i.parentNode.removeChild(i),n._cleanTipClass(),n.element.removeAttribute("aria-describedby"),e(n.element).trigger(n.constructor.Event.HIDDEN),null!==n._popper&&n._popper.destroy(),t&&t()};if(e(this.element).trigger(o),!o.isDefaultPrevented()){if(e(i).removeClass("show"),"ontouchstart"in document.documentElement&&e(document.body).children().off("mouseover",null,e.noop),this._activeTrigger.click=!1,this._activeTrigger.focus=!1,this._activeTrigger.hover=!1,e(this.tip).hasClass("fade")){var s=l.getTransitionDurationFromElement(i);e(i).one(l.TRANSITION_END,r).emulateTransitionEnd(s)}else r();this._hoverState=""}},n.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},n.isWithContent=function(){return Boolean(this.getTitle())},n.addAttachmentClass=function(t){e(this.getTipElement()).addClass("bs-tooltip-"+t)},n.getTipElement=function(){return this.tip=this.tip||e(this.config.template)[0],this.tip},n.setContent=function(){var t=this.getTipElement();this.setElementContent(e(t.querySelectorAll(".tooltip-inner")),this.getTitle()),e(t).removeClass("fade show")},n.setElementContent=function(t,n){"object"!=typeof n||!n.nodeType&&!n.jquery?this.config.html?(this.config.sanitize&&(n=Vt(n,this.config.whiteList,this.config.sanitizeFn)),t.html(n)):t.text(n):this.config.html?e(n).parent().is(t)||t.empty().append(n):t.text(e(n).text())},n.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},n._getPopperConfig=function(t){var e=this;return s(s({},{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)},n._getOffset=function(){var t=this,e={};return"function"==typeof this.config.offset?e.fn=function(e){return e.offsets=s(s({},e.offsets),t.config.offset(e.offsets,t.element)||{}),e}:e.offset=this.config.offset,e},n._getContainer=function(){return!1===this.config.container?document.body:l.isElement(this.config.container)?e(this.config.container):e(document).find(this.config.container)},n._getAttachment=function(t){return $t[t.toUpperCase()]},n._setListeners=function(){var t=this;this.config.trigger.split(" ").forEach((function(n){if("click"===n)e(t.element).on(t.constructor.Event.CLICK,t.config.selector,(function(e){return t.toggle(e)}));else if("manual"!==n){var i="hover"===n?t.constructor.Event.MOUSEENTER:t.constructor.Event.FOCUSIN,o="hover"===n?t.constructor.Event.MOUSELEAVE:t.constructor.Event.FOCUSOUT;e(t.element).on(i,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()},e(this.element).closest(".modal").on("hide.bs.modal",this._hideModalHandler),this.config.selector?this.config=s(s({},this.config),{},{trigger:"manual",selector:""}):this._fixTitle()},n._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",""))},n._enter=function(t,n){var i=this.constructor.DATA_KEY;(n=n||e(t.currentTarget).data(i))||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),e(t.currentTarget).data(i,n)),t&&(n._activeTrigger["focusin"===t.type?"focus":"hover"]=!0),e(n.getTipElement()).hasClass("show")||"show"===n._hoverState?n._hoverState="show":(clearTimeout(n._timeout),n._hoverState="show",n.config.delay&&n.config.delay.show?n._timeout=setTimeout((function(){"show"===n._hoverState&&n.show()}),n.config.delay.show):n.show())},n._leave=function(t,n){var i=this.constructor.DATA_KEY;(n=n||e(t.currentTarget).data(i))||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),e(t.currentTarget).data(i,n)),t&&(n._activeTrigger["focusout"===t.type?"focus":"hover"]=!1),n._isWithActiveTrigger()||(clearTimeout(n._timeout),n._hoverState="out",n.config.delay&&n.config.delay.hide?n._timeout=setTimeout((function(){"out"===n._hoverState&&n.hide()}),n.config.delay.hide):n.hide())},n._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},n._getConfig=function(t){var n=e(this.element).data();return Object.keys(n).forEach((function(t){-1!==Kt.indexOf(t)&&delete n[t]})),"number"==typeof(t=s(s(s({},this.constructor.Default),n),"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},n._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},n._cleanTipClass=function(){var t=e(this.getTipElement()),n=t.attr("class").match(Xt);null!==n&&n.length&&t.removeClass(n.join(""))},n._handlePopperPlacementChange=function(t){this.tip=t.instance.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(t.placement))},n._fixTransition=function(){var t=this.getTipElement(),n=this.config.animation;null===t.getAttribute("x-placement")&&(e(t).removeClass("fade"),this.config.animation=!1,this.hide(),this.show(),this.config.animation=n)},t._jQueryInterface=function(n){return this.each((function(){var i=e(this).data("bs.tooltip"),o="object"==typeof n&&n;if((i||!/dispose|hide/.test(n))&&(i||(i=new t(this,o),e(this).data("bs.tooltip",i)),"string"==typeof n)){if("undefined"==typeof i[n])throw new TypeError('No method named "'+n+'"');i[n]()}}))},i(t,null,[{key:"VERSION",get:function(){return"4.5.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}();e.fn[Yt]=te._jQueryInterface,e.fn[Yt].Constructor=te,e.fn[Yt].noConflict=function(){return e.fn[Yt]=zt,te._jQueryInterface};var ee="popover",ne=e.fn[ee],ie=new RegExp("(^|\\s)bs-popover\\S+","g"),oe=s(s({},te.Default),{},{placement:"right",trigger:"click",content:"",template:''}),re=s(s({},te.DefaultType),{},{content:"(string|element|function)"}),se={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"},ae=function(t){var n,o;function r(){return t.apply(this,arguments)||this}o=t,(n=r).prototype=Object.create(o.prototype),n.prototype.constructor=n,n.__proto__=o;var s=r.prototype;return s.isWithContent=function(){return this.getTitle()||this._getContent()},s.addAttachmentClass=function(t){e(this.getTipElement()).addClass("bs-popover-"+t)},s.getTipElement=function(){return this.tip=this.tip||e(this.config.template)[0],this.tip},s.setContent=function(){var t=e(this.getTipElement());this.setElementContent(t.find(".popover-header"),this.getTitle());var n=this._getContent();"function"==typeof n&&(n=n.call(this.element)),this.setElementContent(t.find(".popover-body"),n),t.removeClass("fade show")},s._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},s._cleanTipClass=function(){var t=e(this.getTipElement()),n=t.attr("class").match(ie);null!==n&&n.length>0&&t.removeClass(n.join(""))},r._jQueryInterface=function(t){return this.each((function(){var n=e(this).data("bs.popover"),i="object"==typeof t?t:null;if((n||!/dispose|hide/.test(t))&&(n||(n=new r(this,i),e(this).data("bs.popover",n)),"string"==typeof t)){if("undefined"==typeof n[t])throw new TypeError('No method named "'+t+'"');n[t]()}}))},i(r,null,[{key:"VERSION",get:function(){return"4.5.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 se}},{key:"EVENT_KEY",get:function(){return".bs.popover"}},{key:"DefaultType",get:function(){return re}}]),r}(te);e.fn[ee]=ae._jQueryInterface,e.fn[ee].Constructor=ae,e.fn[ee].noConflict=function(){return e.fn[ee]=ne,ae._jQueryInterface};var le="scrollspy",ce=e.fn[le],ue={offset:10,method:"auto",target:""},he={offset:"number",method:"string",target:"(string|element)"},fe=function(){function t(t,n){var i=this;this._element=t,this._scrollElement="BODY"===t.tagName?window:t,this._config=this._getConfig(n),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,e(this._scrollElement).on("scroll.bs.scrollspy",(function(t){return i._process(t)})),this.refresh(),this._process()}var n=t.prototype;return n.refresh=function(){var t=this,n=this._scrollElement===this._scrollElement.window?"offset":"position",i="auto"===this._config.method?n:this._config.method,o="position"===i?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight(),[].slice.call(document.querySelectorAll(this._selector)).map((function(t){var n,r=l.getSelectorFromElement(t);if(r&&(n=document.querySelector(r)),n){var s=n.getBoundingClientRect();if(s.width||s.height)return[e(n)[i]().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])}))},n.dispose=function(){e.removeData(this._element,"bs.scrollspy"),e(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},n._getConfig=function(t){if("string"!=typeof(t=s(s({},ue),"object"==typeof t&&t?t:{})).target&&l.isElement(t.target)){var n=e(t.target).attr("id");n||(n=l.getUID(le),e(t.target).attr("id",n)),t.target="#"+n}return l.typeCheckConfig(le,t,he),t},n._getScrollTop=function(){return this._scrollElement===window?this._scrollElement.pageYOffset:this._scrollElement.scrollTop},n._getScrollHeight=function(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)},n._getOffsetHeight=function(){return this._scrollElement===window?window.innerHeight:this._scrollElement.getBoundingClientRect().height},n._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";i=(i=e.makeArray(e(o).find(s)))[i.length-1]}var a=e.Event("hide.bs.tab",{relatedTarget:this._element}),c=e.Event("show.bs.tab",{relatedTarget:i});if(i&&e(i).trigger(a),e(this._element).trigger(c),!c.isDefaultPrevented()&&!a.isDefaultPrevented()){r&&(n=document.querySelector(r)),this._activate(this._element,o);var u=function(){var n=e.Event("hidden.bs.tab",{relatedTarget:t._element}),o=e.Event("shown.bs.tab",{relatedTarget:i});e(i).trigger(n),e(t._element).trigger(o)};n?this._activate(n,n.parentNode,u):u()}}},n.dispose=function(){e.removeData(this._element,"bs.tab"),this._element=null},n._activate=function(t,n,i){var o=this,r=(!n||"UL"!==n.nodeName&&"OL"!==n.nodeName?e(n).children(".active"):e(n).find("> li > .active"))[0],s=i&&r&&e(r).hasClass("fade"),a=function(){return o._transitionComplete(t,r,i)};if(r&&s){var c=l.getTransitionDurationFromElement(r);e(r).removeClass("show").one(l.TRANSITION_END,a).emulateTransitionEnd(c)}else a()},n._transitionComplete=function(t,n,i){if(n){e(n).removeClass("active");var o=e(n.parentNode).find("> .dropdown-menu .active")[0];o&&e(o).removeClass("active"),"tab"===n.getAttribute("role")&&n.setAttribute("aria-selected",!1)}if(e(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&&e(t.parentNode).hasClass("dropdown-menu")){var r=e(t).closest(".dropdown")[0];if(r){var s=[].slice.call(r.querySelectorAll(".dropdown-toggle"));e(s).addClass("active")}t.setAttribute("aria-expanded",!0)}i&&i()},t._jQueryInterface=function(n){return this.each((function(){var i=e(this),o=i.data("bs.tab");if(o||(o=new t(this),i.data("bs.tab",o)),"string"==typeof n){if("undefined"==typeof o[n])throw new TypeError('No method named "'+n+'"');o[n]()}}))},i(t,null,[{key:"VERSION",get:function(){return"4.5.0"}}]),t}();e(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',(function(t){t.preventDefault(),pe._jQueryInterface.call(e(this),"show")})),e.fn.tab=pe._jQueryInterface,e.fn.tab.Constructor=pe,e.fn.tab.noConflict=function(){return e.fn.tab=de,pe._jQueryInterface};var me=e.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 n=t.prototype;return n.show=function(){var t=this,n=e.Event("show.bs.toast");if(e(this._element).trigger(n),!n.isDefaultPrevented()){this._config.animation&&this._element.classList.add("fade");var i=function(){t._element.classList.remove("showing"),t._element.classList.add("show"),e(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);e(this._element).one(l.TRANSITION_END,i).emulateTransitionEnd(o)}else i()}},n.hide=function(){if(this._element.classList.contains("show")){var t=e.Event("hide.bs.toast");e(this._element).trigger(t),t.isDefaultPrevented()||this._close()}},n.dispose=function(){clearTimeout(this._timeout),this._timeout=null,this._element.classList.contains("show")&&this._element.classList.remove("show"),e(this._element).off("click.dismiss.bs.toast"),e.removeData(this._element,"bs.toast"),this._element=null,this._config=null},n._getConfig=function(t){return t=s(s(s({},ve),e(this._element).data()),"object"==typeof t&&t?t:{}),l.typeCheckConfig("toast",t,this.constructor.DefaultType),t},n._setListeners=function(){var t=this;e(this._element).on("click.dismiss.bs.toast",'[data-dismiss="toast"]',(function(){return t.hide()}))},n._close=function(){var t=this,n=function(){t._element.classList.add("hide"),e(t._element).trigger("hidden.bs.toast")};if(this._element.classList.remove("show"),this._config.animation){var i=l.getTransitionDurationFromElement(this._element);e(this._element).one(l.TRANSITION_END,n).emulateTransitionEnd(i)}else n()},t._jQueryInterface=function(n){return this.each((function(){var i=e(this),o=i.data("bs.toast");if(o||(o=new t(this,"object"==typeof n&&n),i.data("bs.toast",o)),"string"==typeof n){if("undefined"==typeof o[n])throw new TypeError('No method named "'+n+'"');o[n](this)}}))},i(t,null,[{key:"VERSION",get:function(){return"4.5.0"}},{key:"DefaultType",get:function(){return ge}},{key:"Default",get:function(){return ve}}]),t}();e.fn.toast=_e._jQueryInterface,e.fn.toast.Constructor=_e,e.fn.toast.noConflict=function(){return e.fn.toast=me,_e._jQueryInterface},t.Alert=h,t.Button=d,t.Carousel=y,t.Collapse=S,t.Dropdown=Ft,t.Modal=qt,t.Popover=ae,t.Scrollspy=fe,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/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap/js/bootstrap.bundle.min.js.map b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/bootstrap/js/bootstrap.bundle.min.js.map new file mode 100644 index 0000000000..a9f9a3e242 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/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","err","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","toggle","triggerChangeEvent","addAriaPressed","input","type","checked","classList","contains","activeElement","focus","hasAttribute","setAttribute","toggleClass","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","setInterval","visibilityState","bind","to","index","activeIndex","_getItemIndex","direction","off","_objectSpread2","_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","directionalClassName","orderClassName","_this4","activeElementIndex","nextElement","nextElementIndex","isCycling","slidEvent","nextElementInterval","parseInt","defaultInterval","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","$this","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","_extends","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","defaultPrevented","modalTransitionDuration","modalBody","ELEMENT_NODE","appendChild","_enforceFocus","shownEvent","transitionComplete","_this5","has","_this6","_this7","_this8","_resetAdjustments","_resetScrollbar","_removeBackdrop","_this9","animate","createElement","className","appendTo","backdropTransitionDuration","callbackRemove","isModalOverflowing","scrollHeight","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","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","autohide","Toast","_close"],"mappings":";;;;;ssCAyCA,SAASA,EAAsBC,GAAU,IAAAC,EAAAC,KACnCC,GAAS,EAYb,OAVAC,EAAEF,MAAMG,IAAIC,EAAKC,gBAAgB,WAC/BJ,GAAS,KAGXK,YAAW,WACJL,GACHG,EAAKG,qBAAqBR,KAE3BD,GAEIE,SAcHI,EAAO,CACXC,eAAgB,kBAEhBG,OAHW,SAGJC,GACL,GAEEA,MA1DU,IA0DGC,KAAKC,gBACXC,SAASC,eAAeJ,IACjC,OAAOA,GAGTK,uBAXW,SAWYC,GACrB,IAAIC,EAAWD,EAAQE,aAAa,eAEpC,IAAKD,GAAyB,MAAbA,EAAkB,CACjC,IAAME,EAAWH,EAAQE,aAAa,QACtCD,EAAWE,GAAyB,MAAbA,EAAmBA,EAASC,OAAS,GAG9D,IACE,OAAOP,SAASQ,cAAcJ,GAAYA,EAAW,KACrD,MAAOK,GACP,OAAO,OAIXC,iCA1BW,SA0BsBP,GAC/B,IAAKA,EACH,OAAO,EAIT,IAAIQ,EAAqBrB,EAAEa,GAASS,IAAI,uBACpCC,EAAkBvB,EAAEa,GAASS,IAAI,oBAE/BE,EAA0BC,WAAWJ,GACrCK,EAAuBD,WAAWF,GAGxC,OAAKC,GAA4BE,GAKjCL,EAAqBA,EAAmBM,MAAM,KAAK,GACnDJ,EAAkBA,EAAgBI,MAAM,KAAK,GAhGjB,KAkGpBF,WAAWJ,GAAsBI,WAAWF,KAP3C,GAUXK,OAlDW,SAkDJf,GACL,OAAOA,EAAQgB,cAGjBxB,qBAtDW,SAsDUQ,GACnBb,EAAEa,GAASiB,QA5GQ,kBAgHrBC,sBA3DW,WA4DT,OAAOC,QAjHY,kBAoHrBC,UA/DW,SA+DDC,GACR,OAAQA,EAAI,IAAMA,GAAKC,UAGzBC,gBAnEW,SAmEKC,EAAeC,EAAQC,GACrC,IAAK,IAAMC,KAAYD,EACrB,GAAIE,OAAOC,UAAUC,eAAeC,KAAKL,EAAaC,GAAW,CAC/D,IAAMK,EAAgBN,EAAYC,GAC5BM,EAAgBR,EAAOE,GACvBO,EAAgBD,GAAS5C,EAAK+B,UAAUa,GAC1C,UAxHE,QADEZ,EAyHeY,IAxHM,oBAARZ,EACzB,GAAUA,EAGL,GAAGc,SAASJ,KAAKV,GAAKe,MAAM,eAAe,GAAGC,cAsH/C,IAAK,IAAIC,OAAON,GAAeO,KAAKL,GAClC,MAAM,IAAIM,MACLhB,EAAciB,cAAdjB,aACQG,EADX,oBACuCO,EADpCV,wBAEmBQ,EAFtB,MA7HZ,IAAgBX,GAqIdqB,eArFW,SAqFI1C,GACb,IAAKH,SAAS8C,gBAAgBC,aAC5B,OAAO,KAIT,GAAmC,mBAAxB5C,EAAQ6C,YAA4B,CAC7C,IAAMC,EAAO9C,EAAQ6C,cACrB,OAAOC,aAAgBC,WAAaD,EAAO,KAG7C,OAAI9C,aAAmB+C,WACd/C,EAIJA,EAAQgD,WAIN3D,EAAKqD,eAAe1C,EAAQgD,YAH1B,MAMXC,gBA5GW,WA6GT,GAAiB,oBAAN9D,EACT,MAAM,IAAI+D,UAAU,kGAGtB,IAAMC,EAAUhE,EAAEiE,GAAGC,OAAOvC,MAAM,KAAK,GAAGA,MAAM,KAOhD,GAAIqC,EAAQ,GALI,GAKYA,EAAQ,GAJnB,GAFA,IAMoCA,EAAQ,IAJ5C,IAI+DA,EAAQ,IAAmBA,EAAQ,GAHlG,GAGmHA,EAAQ,IAF3H,EAGf,MAAM,IAAIX,MAAM,iFAKtBnD,EAAK4D,kBAxIH9D,EAAEiE,GAAGE,qBAAuBxE,EAC5BK,EAAEoE,MAAMC,QAAQnE,EAAKC,gBA9Bd,CACLmE,SAfmB,gBAgBnBC,aAhBmB,gBAiBnBC,OAHK,SAGEJ,GACL,GAAIpE,EAAEoE,EAAMK,QAAQC,GAAG5E,MACrB,OAAOsE,EAAMO,UAAUC,QAAQC,MAAM/E,KAAMgF,aClBnD,IAAMC,EAAsB,QAKtBC,EAAsBhF,EAAEiE,GAAGc,GAkB3BE,EAAAA,WACJ,SAAAA,EAAYpE,GACVf,KAAKoF,SAAWrE,6BAWlBsE,MAAA,SAAMtE,GACJ,IAAIuE,EAActF,KAAKoF,SACnBrE,IACFuE,EAActF,KAAKuF,gBAAgBxE,IAGjBf,KAAKwF,mBAAmBF,GAE5BG,sBAIhBzF,KAAK0F,eAAeJ,MAGtBK,QAAA,WACEzF,EAAE0F,WAAW5F,KAAKoF,SAlDM,YAmDxBpF,KAAKoF,SAAW,QAKlBG,gBAAA,SAAgBxE,GACd,IAAMC,EAAWZ,EAAKU,uBAAuBC,GACzC8E,GAAa,EAUjB,OARI7E,IACF6E,EAASjF,SAASQ,cAAcJ,IAG7B6E,IACHA,EAAS3F,EAAEa,GAAS+E,QAAX,UAA2C,IAG/CD,KAGTL,mBAAA,SAAmBzE,GACjB,IAAMgF,EAAa7F,EAAE8F,MAjER,kBAoEb,OADA9F,EAAEa,GAASiB,QAAQ+D,GACZA,KAGTL,eAAA,SAAe3E,GAAS,IAAAhB,EAAAC,KAGtB,GAFAE,EAAEa,GAASkF,YAlEU,QAoEhB/F,EAAEa,GAASmF,SArEK,QAqErB,CAKA,IAAM3E,EAAqBnB,EAAKkB,iCAAiCP,GAEjEb,EAAEa,GACCZ,IAAIC,EAAKC,gBAAgB,SAACiE,GAAD,OAAWvE,EAAKoG,gBAAgBpF,EAASuD,MAClED,qBAAqB9C,QARtBvB,KAAKmG,gBAAgBpF,MAWzBoF,gBAAA,SAAgBpF,GACdb,EAAEa,GACCqF,SACApE,QAxFW,mBAyFXqE,YAKEC,iBAAP,SAAwB9D,GACtB,OAAOxC,KAAKuG,MAAK,WACf,IAAMC,EAAWtG,EAAEF,MACfyG,EAAaD,EAASC,KAzGJ,YA2GjBA,IACHA,EAAO,IAAItB,EAAMnF,MACjBwG,EAASC,KA7GW,WA6GIA,IAGX,UAAXjE,GACFiE,EAAKjE,GAAQxC,YAKZ0G,eAAP,SAAsBC,GACpB,OAAO,SAAUrC,GACXA,GACFA,EAAMsC,iBAGRD,EAActB,MAAMrF,gDA/FtB,MA9BwB,cAsBtBmF,GAkHNjF,EAAEU,UAAUiG,GA9Hc,0BAJD,yBAqIvB1B,EAAMuB,eAAe,IAAIvB,IAS3BjF,EAAEiE,GAAGc,GAAoBE,EAAMmB,iBAC/BpG,EAAEiE,GAAGc,GAAM6B,YAAc3B,EACzBjF,EAAEiE,GAAGc,GAAM8B,WAAc,WAEvB,OADA7G,EAAEiE,GAAGc,GAAQC,EACNC,EAAMmB,kBC1Jf,IAKMpB,EAAsBhF,EAAEiE,GAAF,OAyBtB6C,EAAAA,WACJ,SAAAA,EAAYjG,GACVf,KAAKoF,SAAWrE,6BAWlBkG,OAAA,WACE,IAAIC,GAAqB,EACrBC,GAAiB,EACf7B,EAAcpF,EAAEF,KAAKoF,UAAUU,QAlCH,2BAoChC,GAEF,GAAIR,EAAa,CACf,IAAM8B,EAAQpH,KAAKoF,SAAShE,cApCI,8BAsChC,GAAIgG,EAAO,CACT,GAAmB,UAAfA,EAAMC,KACR,GAAID,EAAME,SACRtH,KAAKoF,SAASmC,UAAUC,SAjDV,UAkDdN,GAAqB,MAChB,CACL,IAAMO,EAAgBnC,EAAYlE,cA3CR,WA6CtBqG,GACFvH,EAAEuH,GAAexB,YAvDL,UA4DdiB,IAEiB,aAAfE,EAAMC,MAAsC,UAAfD,EAAMC,OACrCD,EAAME,SAAWtH,KAAKoF,SAASmC,UAAUC,SA/D3B,WAiEhBtH,EAAEkH,GAAOpF,QAAQ,WAGnBoF,EAAMM,QACNP,GAAiB,GAIfnH,KAAKoF,SAASuC,aAAa,aAAe3H,KAAKoF,SAASmC,UAAUC,SAAS,cAC3EL,GACFnH,KAAKoF,SAASwC,aAAa,gBACxB5H,KAAKoF,SAASmC,UAAUC,SA5ET,WA+EhBN,GACFhH,EAAEF,KAAKoF,UAAUyC,YAhFC,cAqFxBlC,QAAA,WACEzF,EAAE0F,WAAW5F,KAAKoF,SA3FM,aA4FxBpF,KAAKoF,SAAW,QAKXkB,iBAAP,SAAwB9D,GACtB,OAAOxC,KAAKuG,MAAK,WACf,IAAIE,EAAOvG,EAAEF,MAAMyG,KAnGG,aAqGjBA,IACHA,EAAO,IAAIO,EAAOhH,MAClBE,EAAEF,MAAMyG,KAvGY,YAuGGA,IAGV,WAAXjE,GACFiE,EAAKjE,iDAvET,MArCwB,cA6BtBwE,GA2FN9G,EAAEU,UACCiG,GAvGuB,2BARY,2BA+GmB,SAACvC,GACtD,IAAIwD,EAASxD,EAAMK,OACboD,EAAgBD,EAMtB,GAJK5H,EAAE4H,GAAQ5B,SAtHO,SAuHpB4B,EAAS5H,EAAE4H,GAAQhC,QA9Ga,QA8GY,KAGzCgC,GAAUA,EAAOH,aAAa,aAAeG,EAAOP,UAAUC,SAAS,YAC1ElD,EAAMsC,qBACD,CACL,IAAMoB,EAAWF,EAAO1G,cAtHQ,8BAwHhC,GAAI4G,IAAaA,EAASL,aAAa,aAAeK,EAAST,UAAUC,SAAS,aAEhF,YADAlD,EAAMsC,iBAIsB,UAA1BmB,EAAcE,SAAuBD,GAA8B,aAAlBA,EAASX,MAC5D/C,EAAMsC,iBAERI,EAAOV,iBAAiBxD,KAAK5C,EAAE4H,GAAS,cAG3CjB,GA9H+B,mDATI,2BAuIwB,SAACvC,GAC3D,IAAMwD,EAAS5H,EAAEoE,EAAMK,QAAQmB,QAlIG,QAkIsB,GACxD5F,EAAE4H,GAAQD,YA3IY,QA2IkB,eAAevE,KAAKgB,EAAM+C,UAGtEnH,EAAEgI,QAAQrB,GAjIe,2BAiIS,WAKhC,IADA,IAAIsB,EAAU,GAAGC,MAAMtF,KAAKlC,SAASyH,iBA7ID,iCA8I3BC,EAAI,EAAGC,EAAMJ,EAAQK,OAAQF,EAAIC,EAAKD,IAAK,CAClD,IAAMR,EAASK,EAAQG,GACjBlB,EAAQU,EAAO1G,cA/Ia,8BAgJ9BgG,EAAME,SAAWF,EAAMO,aAAa,WACtCG,EAAOP,UAAUkB,IAzJG,UA2JpBX,EAAOP,UAAUlB,OA3JG,UAiKxB,IAAK,IAAIiC,EAAI,EAAGC,GADhBJ,EAAU,GAAGC,MAAMtF,KAAKlC,SAASyH,iBA1JG,4BA2JNG,OAAQF,EAAIC,EAAKD,IAAK,CAClD,IAAMR,EAASK,EAAQG,GACqB,SAAxCR,EAAO7G,aAAa,gBACtB6G,EAAOP,UAAUkB,IApKG,UAsKpBX,EAAOP,UAAUlB,OAtKG,cAiL1BnG,EAAEiE,GAAF,OAAa6C,EAAOV,iBACpBpG,EAAEiE,GAAF,OAAW2C,YAAcE,EACzB9G,EAAEiE,GAAF,OAAW4C,WAAa,WAEtB,OADA7G,EAAEiE,GAAF,OAAae,EACN8B,EAAOV,kBC3LhB,IAAMrB,EAAyB,WAGzByD,EAAS,eAETxD,EAAyBhF,EAAEiE,GAAGc,GAM9B0D,EAAU,CACdC,SAAW,IACXC,UAAW,EACXC,OAAW,EACXC,MAAW,QACXC,MAAW,EACXC,OAAW,GAGPC,EAAc,CAClBN,SAAW,mBACXC,SAAW,UACXC,MAAW,mBACXC,MAAW,mBACXC,KAAW,UACXC,MAAW,WAwCPE,EAAc,CAClBC,MAAQ,QACRC,IAAQ,OAQJC,EAAAA,WACJ,SAAAA,EAAYvI,EAASyB,GACnBxC,KAAKuJ,OAAiB,KACtBvJ,KAAKwJ,UAAiB,KACtBxJ,KAAKyJ,eAAiB,KACtBzJ,KAAK0J,WAAiB,EACtB1J,KAAK2J,YAAiB,EACtB3J,KAAK4J,aAAiB,KACtB5J,KAAK6J,YAAiB,EACtB7J,KAAK8J,YAAiB,EAEtB9J,KAAK+J,QAAqB/J,KAAKgK,WAAWxH,GAC1CxC,KAAKoF,SAAqBrE,EAC1Bf,KAAKiK,mBAAqBjK,KAAKoF,SAAShE,cA3Bf,wBA4BzBpB,KAAKkK,gBAAqB,iBAAkBtJ,SAAS8C,iBAAmByG,UAAUC,eAAiB,EACnGpK,KAAKqK,cAAqBnI,QAAQgG,OAAOoC,cAAgBpC,OAAOqC,gBAEhEvK,KAAKwK,gDAePC,KAAA,WACOzK,KAAK2J,YACR3J,KAAK0K,OAjFgB,WAqFzBC,gBAAA,YAGO/J,SAASgK,QACX1K,EAAEF,KAAKoF,UAAUR,GAAG,aAAsD,WAAvC1E,EAAEF,KAAKoF,UAAU5D,IAAI,eACzDxB,KAAKyK,UAITI,KAAA,WACO7K,KAAK2J,YACR3J,KAAK0K,OA/FgB,WAmGzB3B,MAAA,SAAMzE,GACCA,IACHtE,KAAK0J,WAAY,GAGf1J,KAAKoF,SAAShE,cAzEO,8CA0EvBhB,EAAKG,qBAAqBP,KAAKoF,UAC/BpF,KAAK8K,OAAM,IAGbC,cAAc/K,KAAKwJ,WACnBxJ,KAAKwJ,UAAY,QAGnBsB,MAAA,SAAMxG,GACCA,IACHtE,KAAK0J,WAAY,GAGf1J,KAAKwJ,YACPuB,cAAc/K,KAAKwJ,WACnBxJ,KAAKwJ,UAAY,MAGfxJ,KAAK+J,QAAQnB,WAAa5I,KAAK0J,YACjC1J,KAAKwJ,UAAYwB,aACdpK,SAASqK,gBAAkBjL,KAAK2K,gBAAkB3K,KAAKyK,MAAMS,KAAKlL,MACnEA,KAAK+J,QAAQnB,cAKnBuC,GAAA,SAAGC,GAAO,IAAArL,EAAAC,KACRA,KAAKyJ,eAAiBzJ,KAAKoF,SAAShE,cAxGX,yBA0GzB,IAAMiK,EAAcrL,KAAKsL,cAActL,KAAKyJ,gBAE5C,KAAI2B,EAAQpL,KAAKuJ,OAAOf,OAAS,GAAK4C,EAAQ,GAI9C,GAAIpL,KAAK2J,WACPzJ,EAAEF,KAAKoF,UAAUjF,IAxIP,oBAwIuB,WAAA,OAAMJ,EAAKoL,GAAGC,UADjD,CAKA,GAAIC,IAAgBD,EAGlB,OAFApL,KAAK+I,aACL/I,KAAK8K,QAIP,IAAMS,EAAYH,EAAQC,EAxJH,OACA,OA2JvBrL,KAAK0K,OAAOa,EAAWvL,KAAKuJ,OAAO6B,QAGrCzF,QAAA,WACEzF,EAAEF,KAAKoF,UAAUoG,IAAI9C,GACrBxI,EAAE0F,WAAW5F,KAAKoF,SA5LS,eA8L3BpF,KAAKuJ,OAAqB,KAC1BvJ,KAAK+J,QAAqB,KAC1B/J,KAAKoF,SAAqB,KAC1BpF,KAAKwJ,UAAqB,KAC1BxJ,KAAK0J,UAAqB,KAC1B1J,KAAK2J,WAAqB,KAC1B3J,KAAKyJ,eAAqB,KAC1BzJ,KAAKiK,mBAAqB,QAK5BD,WAAA,SAAWxH,GAMT,OALAA,EAAMiJ,EAAAA,EAAA,GACD9C,GACAnG,GAELpC,EAAKkC,gBAAgB2C,EAAMzC,EAAQ0G,GAC5B1G,KAGTkJ,aAAA,WACE,IAAMC,EAAYjL,KAAKkL,IAAI5L,KAAK8J,aAEhC,KAAI6B,GA/MuB,IA+M3B,CAIA,IAAMJ,EAAYI,EAAY3L,KAAK8J,YAEnC9J,KAAK8J,YAAc,EAGfyB,EAAY,GACdvL,KAAK6K,OAIHU,EAAY,GACdvL,KAAKyK,WAITD,mBAAA,WAAqB,IAAAqB,EAAA7L,KACfA,KAAK+J,QAAQlB,UACf3I,EAAEF,KAAKoF,UAAUyB,GAzMJ,uBAyMsB,SAACvC,GAAD,OAAWuH,EAAKC,SAASxH,MAGnC,UAAvBtE,KAAK+J,QAAQhB,OACf7I,EAAEF,KAAKoF,UACJyB,GA7Ma,0BA6MQ,SAACvC,GAAD,OAAWuH,EAAK9C,MAAMzE,MAC3CuC,GA7Ma,0BA6MQ,SAACvC,GAAD,OAAWuH,EAAKf,MAAMxG,MAG5CtE,KAAK+J,QAAQd,OACfjJ,KAAK+L,6BAITA,wBAAA,WAA0B,IAAAC,EAAAhM,KACxB,GAAKA,KAAKkK,gBAAV,CAIA,IAAM+B,EAAQ,SAAC3H,GACT0H,EAAK3B,eAAiBlB,EAAY7E,EAAM4H,cAAcC,YAAY3I,eACpEwI,EAAKnC,YAAcvF,EAAM4H,cAAcE,QAC7BJ,EAAK3B,gBACf2B,EAAKnC,YAAcvF,EAAM4H,cAAcG,QAAQ,GAAGD,UAahDE,EAAM,SAAChI,GACP0H,EAAK3B,eAAiBlB,EAAY7E,EAAM4H,cAAcC,YAAY3I,iBACpEwI,EAAKlC,YAAcxF,EAAM4H,cAAcE,QAAUJ,EAAKnC,aAGxDmC,EAAKN,eACsB,UAAvBM,EAAKjC,QAAQhB,QASfiD,EAAKjD,QACDiD,EAAKpC,cACP2C,aAAaP,EAAKpC,cAEpBoC,EAAKpC,aAAetJ,YAAW,SAACgE,GAAD,OAAW0H,EAAKlB,MAAMxG,KA5R9B,IA4R+D0H,EAAKjC,QAAQnB,YAIvG1I,EAAEF,KAAKoF,SAASiD,iBA5OS,uBA6OtBxB,GA7Pe,yBA6PM,SAAC2F,GAAD,OAAOA,EAAE5F,oBAE7B5G,KAAKqK,eACPnK,EAAEF,KAAKoF,UAAUyB,GAlQA,2BAkQsB,SAACvC,GAAD,OAAW2H,EAAM3H,MACxDpE,EAAEF,KAAKoF,UAAUyB,GAlQF,yBAkQsB,SAACvC,GAAD,OAAWgI,EAAIhI,MAEpDtE,KAAKoF,SAASmC,UAAUkB,IAxPG,mBA0P3BvI,EAAEF,KAAKoF,UAAUyB,GA1QD,0BA0QsB,SAACvC,GAAD,OAAW2H,EAAM3H,MACvDpE,EAAEF,KAAKoF,UAAUyB,GA1QF,yBA0QsB,SAACvC,GAAD,OA1C1B,SAACA,GAERA,EAAM4H,cAAcG,SAAW/H,EAAM4H,cAAcG,QAAQ7D,OAAS,EACtEwD,EAAKlC,YAAc,EAEnBkC,EAAKlC,YAAcxF,EAAM4H,cAAcG,QAAQ,GAAGD,QAAUJ,EAAKnC,YAqCnB4C,CAAKnI,MACrDpE,EAAEF,KAAKoF,UAAUyB,GA1QH,wBA0QsB,SAACvC,GAAD,OAAWgI,EAAIhI,WAIvDwH,SAAA,SAASxH,GACP,IAAI,kBAAkBhB,KAAKgB,EAAMK,OAAOsD,SAIxC,OAAQ3D,EAAMoI,OACZ,KAvTyB,GAwTvBpI,EAAMsC,iBACN5G,KAAK6K,OACL,MACF,KA1TyB,GA2TvBvG,EAAMsC,iBACN5G,KAAKyK,WAMXa,cAAA,SAAcvK,GAIZ,OAHAf,KAAKuJ,OAASxI,GAAWA,EAAQgD,WAC7B,GAAGqE,MAAMtF,KAAK/B,EAAQgD,WAAWsE,iBAhRZ,mBAiRrB,GACGrI,KAAKuJ,OAAOoD,QAAQ5L,MAG7B6L,oBAAA,SAAoBrB,EAAW9D,GAC7B,IAAMoF,EApTiB,SAoTCtB,EAClBuB,EApTiB,SAoTCvB,EAClBF,EAAkBrL,KAAKsL,cAAc7D,GACrCsF,EAAkB/M,KAAKuJ,OAAOf,OAAS,EAI7C,IAHwBsE,GAAmC,IAAhBzB,GACnBwB,GAAmBxB,IAAgB0B,KAErC/M,KAAK+J,QAAQf,KACjC,OAAOvB,EAGT,IACMuF,GAAa3B,GA/TI,SA8TLE,GAAgC,EAAI,IACZvL,KAAKuJ,OAAOf,OAEtD,OAAsB,IAAfwE,EACHhN,KAAKuJ,OAAOvJ,KAAKuJ,OAAOf,OAAS,GAAKxI,KAAKuJ,OAAOyD,MAGxDC,mBAAA,SAAmBC,EAAeC,GAChC,IAAMC,EAAcpN,KAAKsL,cAAc4B,GACjCG,EAAYrN,KAAKsL,cAActL,KAAKoF,SAAShE,cA3S1B,0BA4SnBkM,EAAapN,EAAE8F,MApUR,oBAoU2B,CACtCkH,cAAAA,EACA3B,UAAW4B,EACXI,KAAMF,EACNlC,GAAIiC,IAKN,OAFAlN,EAAEF,KAAKoF,UAAUpD,QAAQsL,GAElBA,KAGTE,2BAAA,SAA2BzM,GACzB,GAAIf,KAAKiK,mBAAoB,CAC3B,IAAMwD,EAAa,GAAGrF,MAAMtF,KAAK9C,KAAKiK,mBAAmB5B,iBA3TlC,YA4TvBnI,EAAEuN,GAAYxH,YApUa,UAsU3B,IAAMyH,EAAgB1N,KAAKiK,mBAAmB0D,SAC5C3N,KAAKsL,cAAcvK,IAGjB2M,GACFxN,EAAEwN,GAAeE,SA3UQ,cAgV/BlD,OAAA,SAAOa,EAAWxK,GAAS,IAQrB8M,EACAC,EACAX,EAVqBY,EAAA/N,KACnByH,EAAgBzH,KAAKoF,SAAShE,cAxUX,yBAyUnB4M,EAAqBhO,KAAKsL,cAAc7D,GACxCwG,EAAgBlN,GAAW0G,GAC/BzH,KAAK4M,oBAAoBrB,EAAW9D,GAChCyG,EAAmBlO,KAAKsL,cAAc2C,GACtCE,EAAYjM,QAAQlC,KAAKwJ,WAgB/B,GA1XuB,SAgXnB+B,GACFsC,EA1V2B,qBA2V3BC,EA1V2B,qBA2V3BX,EAjXqB,SAmXrBU,EA/V2B,sBAgW3BC,EA7V2B,qBA8V3BX,EApXqB,SAuXnBc,GAAe/N,EAAE+N,GAAa/H,SAtWL,UAuW3BlG,KAAK2J,YAAa,OAKpB,IADmB3J,KAAKiN,mBAAmBgB,EAAad,GACzC1H,sBAIVgC,GAAkBwG,EAAvB,CAKAjO,KAAK2J,YAAa,EAEdwE,GACFnO,KAAK+I,QAGP/I,KAAKwN,2BAA2BS,GAEhC,IAAMG,EAAYlO,EAAE8F,MA3YR,mBA2Y0B,CACpCkH,cAAee,EACf1C,UAAW4B,EACXI,KAAMS,EACN7C,GAAI+C,IAGN,GAAIhO,EAAEF,KAAKoF,UAAUc,SAnYQ,SAmYoB,CAC/ChG,EAAE+N,GAAaL,SAASE,GAExB1N,EAAK0B,OAAOmM,GAEZ/N,EAAEuH,GAAemG,SAASC,GAC1B3N,EAAE+N,GAAaL,SAASC,GAExB,IAAMQ,EAAsBC,SAASL,EAAYhN,aAAa,iBAAkB,IAC5EoN,GACFrO,KAAK+J,QAAQwE,gBAAkBvO,KAAK+J,QAAQwE,iBAAmBvO,KAAK+J,QAAQnB,SAC5E5I,KAAK+J,QAAQnB,SAAWyF,GAExBrO,KAAK+J,QAAQnB,SAAW5I,KAAK+J,QAAQwE,iBAAmBvO,KAAK+J,QAAQnB,SAGvE,IAAMrH,EAAqBnB,EAAKkB,iCAAiCmG,GAEjEvH,EAAEuH,GACCtH,IAAIC,EAAKC,gBAAgB,WACxBH,EAAE+N,GACChI,YAAe4H,EADlB,IAC0CC,GACvCF,SA1ZoB,UA4ZvB1N,EAAEuH,GAAexB,YAAeuI,UAAqBV,EAArD,IAAuED,GAEvEE,EAAKpE,YAAa,EAElBrJ,YAAW,WAAA,OAAMJ,EAAE6N,EAAK3I,UAAUpD,QAAQoM,KAAY,MAEvD/J,qBAAqB9C,QAExBrB,EAAEuH,GAAexB,YApaU,UAqa3B/F,EAAE+N,GAAaL,SAraY,UAua3B5N,KAAK2J,YAAa,EAClBzJ,EAAEF,KAAKoF,UAAUpD,QAAQoM,GAGvBD,GACFnO,KAAK8K,YAMFxE,iBAAP,SAAwB9D,GACtB,OAAOxC,KAAKuG,MAAK,WACf,IAAIE,EAAOvG,EAAEF,MAAMyG,KAneM,eAoerBsD,EAAO0B,EAAAA,EAAA,GACN9C,GACAzI,EAAEF,MAAMyG,QAGS,iBAAXjE,IACTuH,EAAO0B,EAAAA,EAAA,GACF1B,GACAvH,IAIP,IAAMiM,EAA2B,iBAAXjM,EAAsBA,EAASuH,EAAQjB,MAO7D,GALKrC,IACHA,EAAO,IAAI6C,EAAStJ,KAAM+J,GAC1B7J,EAAEF,MAAMyG,KApfe,cAofAA,IAGH,iBAAXjE,EACTiE,EAAK0E,GAAG3I,QACH,GAAsB,iBAAXiM,EAAqB,CACrC,GAA4B,oBAAjBhI,EAAKgI,GACd,MAAM,IAAIxK,UAAJ,oBAAkCwK,EAAlC,KAERhI,EAAKgI,UACI1E,EAAQnB,UAAYmB,EAAQ2E,OACrCjI,EAAKsC,QACLtC,EAAKqE,eAKJ6D,qBAAP,SAA4BrK,GAC1B,IAAMtD,EAAWZ,EAAKU,uBAAuBd,MAE7C,GAAKgB,EAAL,CAIA,IAAM2D,EAASzE,EAAEc,GAAU,GAE3B,GAAK2D,GAAWzE,EAAEyE,GAAQuB,SAheG,YAge7B,CAIA,IAAM1D,EAAMiJ,EAAAA,EAAA,GACPvL,EAAEyE,GAAQ8B,QACVvG,EAAEF,MAAMyG,QAEPmI,EAAa5O,KAAKiB,aAAa,iBAEjC2N,IACFpM,EAAOoG,UAAW,GAGpBU,EAAShD,iBAAiBxD,KAAK5C,EAAEyE,GAASnC,GAEtCoM,GACF1O,EAAEyE,GAAQ8B,KA/hBe,eA+hBA0E,GAAGyD,GAG9BtK,EAAMsC,4DAjcN,MAlG2B,wCAsG3B,OAAO+B,QA3BLW,GAkeNpJ,EAAEU,UAAUiG,GAhgBc,6BAiBG,gCA+e6ByC,EAASqF,sBAEnEzO,EAAEgI,QAAQrB,GAngBe,6BAmgBS,WAEhC,IADA,IAAMgI,EAAY,GAAGzG,MAAMtF,KAAKlC,SAASyH,iBAjfd,2BAkflBC,EAAI,EAAGC,EAAMsG,EAAUrG,OAAQF,EAAIC,EAAKD,IAAK,CACpD,IAAMwG,EAAY5O,EAAE2O,EAAUvG,IAC9BgB,EAAShD,iBAAiBxD,KAAKgM,EAAWA,EAAUrI,YAUxDvG,EAAEiE,GAAGc,GAAQqE,EAAShD,iBACtBpG,EAAEiE,GAAGc,GAAM6B,YAAcwC,EACzBpJ,EAAEiE,GAAGc,GAAM8B,WAAa,WAEtB,OADA7G,EAAEiE,GAAGc,GAAQC,EACNoE,EAAShD,kBClkBlB,IAAMrB,EAAsB,WAKtBC,EAAsBhF,EAAEiE,GAAGc,GAE3B0D,EAAU,CACd1B,QAAS,EACTpB,OAAS,IAGLqD,EAAc,CAClBjC,OAAS,UACTpB,OAAS,oBA0BLkJ,EAAAA,WACJ,SAAAA,EAAYhO,EAASyB,GACnBxC,KAAKgP,kBAAmB,EACxBhP,KAAKoF,SAAmBrE,EACxBf,KAAK+J,QAAmB/J,KAAKgK,WAAWxH,GACxCxC,KAAKiP,cAAmB,GAAG7G,MAAMtF,KAAKlC,SAASyH,iBAC7C,mCAAmCtH,EAAQmO,GAA3C,6CAC0CnO,EAAQmO,GADlD,OAKF,IADA,IAAMC,EAAa,GAAG/G,MAAMtF,KAAKlC,SAASyH,iBAlBjB,6BAmBhBC,EAAI,EAAGC,EAAM4G,EAAW3G,OAAQF,EAAIC,EAAKD,IAAK,CACrD,IAAM8G,EAAOD,EAAW7G,GAClBtH,EAAWZ,EAAKU,uBAAuBsO,GACvCC,EAAgB,GAAGjH,MAAMtF,KAAKlC,SAASyH,iBAAiBrH,IAC3DsO,QAAO,SAACC,GAAD,OAAeA,IAAcxO,KAEtB,OAAbC,GAAqBqO,EAAc7G,OAAS,IAC9CxI,KAAKwP,UAAYxO,EACjBhB,KAAKiP,cAAcQ,KAAKL,IAI5BpP,KAAK0P,QAAU1P,KAAK+J,QAAQlE,OAAS7F,KAAK2P,aAAe,KAEpD3P,KAAK+J,QAAQlE,QAChB7F,KAAK4P,0BAA0B5P,KAAKoF,SAAUpF,KAAKiP,eAGjDjP,KAAK+J,QAAQ9C,QACfjH,KAAKiH,oCAgBTA,OAAA,WACM/G,EAAEF,KAAKoF,UAAUc,SAhEK,QAiExBlG,KAAK6P,OAEL7P,KAAK8P,UAITA,KAAA,WAAO,IAMDC,EACAC,EAPCjQ,EAAAC,KACL,IAAIA,KAAKgP,mBACP9O,EAAEF,KAAKoF,UAAUc,SAzEO,UAgFtBlG,KAAK0P,SAUgB,KATvBK,EAAU,GAAG3H,MAAMtF,KAAK9C,KAAK0P,QAAQrH,iBAzEd,uBA0EpBiH,QAAO,SAACF,GACP,MAAmC,iBAAxBrP,EAAKgK,QAAQlE,OACfuJ,EAAKnO,aAAa,iBAAmBlB,EAAKgK,QAAQlE,OAGpDuJ,EAAK7H,UAAUC,SAtFF,gBAyFZgB,SACVuH,EAAU,QAIVA,IACFC,EAAc9P,EAAE6P,GAASE,IAAIjQ,KAAKwP,WAAW/I,KArHvB,iBAsHHuJ,EAAYhB,mBAFjC,CAOA,IAAMkB,EAAahQ,EAAE8F,MA5GT,oBA8GZ,GADA9F,EAAEF,KAAKoF,UAAUpD,QAAQkO,IACrBA,EAAWzK,qBAAf,CAIIsK,IACFhB,EAASzI,iBAAiBxD,KAAK5C,EAAE6P,GAASE,IAAIjQ,KAAKwP,WAAY,QAC1DQ,GACH9P,EAAE6P,GAAStJ,KApIS,cAoIM,OAI9B,IAAM0J,EAAYnQ,KAAKoQ,gBAEvBlQ,EAAEF,KAAKoF,UACJa,YArHuB,YAsHvB2H,SArHuB,cAuH1B5N,KAAKoF,SAASiL,MAAMF,GAAa,EAE7BnQ,KAAKiP,cAAczG,QACrBtI,EAAEF,KAAKiP,eACJhJ,YA1HqB,aA2HrBqK,KAAK,iBAAiB,GAG3BtQ,KAAKuQ,kBAAiB,GAEtB,IAaMC,EAAU,UADaL,EAAU,GAAG3M,cAAgB2M,EAAU/H,MAAM,IAEpE7G,EAAqBnB,EAAKkB,iCAAiCtB,KAAKoF,UAEtElF,EAAEF,KAAKoF,UACJjF,IAAIC,EAAKC,gBAjBK,WACfH,EAAEH,EAAKqF,UACJa,YAnIqB,cAoIrB2H,SAAY6C,iBAEf1Q,EAAKqF,SAASiL,MAAMF,GAAa,GAEjCpQ,EAAKwQ,kBAAiB,GAEtBrQ,EAAEH,EAAKqF,UAAUpD,QAjJN,wBA0JVqC,qBAAqB9C,GAExBvB,KAAKoF,SAASiL,MAAMF,GAAgBnQ,KAAKoF,SAASoL,GAAlD,UAGFX,KAAA,WAAO,IAAAhE,EAAA7L,KACL,IAAIA,KAAKgP,kBACN9O,EAAEF,KAAKoF,UAAUc,SA5JM,QA2J1B,CAKA,IAAMgK,EAAahQ,EAAE8F,MApKT,oBAsKZ,GADA9F,EAAEF,KAAKoF,UAAUpD,QAAQkO,IACrBA,EAAWzK,qBAAf,CAIA,IAAM0K,EAAYnQ,KAAKoQ,gBAEvBpQ,KAAKoF,SAASiL,MAAMF,GAAgBnQ,KAAKoF,SAASsL,wBAAwBP,GAA1E,KAEA/P,EAAK0B,OAAO9B,KAAKoF,UAEjBlF,EAAEF,KAAKoF,UACJwI,SA3KuB,cA4KvB3H,YAAewK,iBAElB,IAAME,EAAqB3Q,KAAKiP,cAAczG,OAC9C,GAAImI,EAAqB,EACvB,IAAK,IAAIrI,EAAI,EAAGA,EAAIqI,EAAoBrI,IAAK,CAC3C,IAAMtG,EAAUhC,KAAKiP,cAAc3G,GAC7BtH,EAAWZ,EAAKU,uBAAuBkB,GAE7C,GAAiB,OAAbhB,EACYd,EAAE,GAAGkI,MAAMtF,KAAKlC,SAASyH,iBAAiBrH,KAC7CkF,SAxLS,SAyLlBhG,EAAE8B,GAAS4L,SAtLO,aAuLf0C,KAAK,iBAAiB,GAMjCtQ,KAAKuQ,kBAAiB,GAUtBvQ,KAAKoF,SAASiL,MAAMF,GAAa,GACjC,IAAM5O,EAAqBnB,EAAKkB,iCAAiCtB,KAAKoF,UAEtElF,EAAEF,KAAKoF,UACJjF,IAAIC,EAAKC,gBAZK,WACfwL,EAAK0E,kBAAiB,GACtBrQ,EAAE2L,EAAKzG,UACJa,YAnMqB,cAoMrB2H,SArMqB,YAsMrB5L,QA1MS,yBAkNXqC,qBAAqB9C,QAG1BgP,iBAAA,SAAiBK,GACf5Q,KAAKgP,iBAAmB4B,KAG1BjL,QAAA,WACEzF,EAAE0F,WAAW5F,KAAKoF,SA5OM,eA8OxBpF,KAAK+J,QAAmB,KACxB/J,KAAK0P,QAAmB,KACxB1P,KAAKoF,SAAmB,KACxBpF,KAAKiP,cAAmB,KACxBjP,KAAKgP,iBAAmB,QAK1BhF,WAAA,SAAWxH,GAOT,OANAA,EAAMiJ,EAAAA,EAAA,GACD9C,GACAnG,IAEEyE,OAAS/E,QAAQM,EAAOyE,QAC/B7G,EAAKkC,gBAAgB2C,EAAMzC,EAAQ0G,GAC5B1G,KAGT4N,cAAA,WAEE,OADiBlQ,EAAEF,KAAKoF,UAAUc,SAxOb,SAAA,QACA,YA2OvByJ,WAAA,WAAa,IACP9J,EADOmG,EAAAhM,KAGPI,EAAK+B,UAAUnC,KAAK+J,QAAQlE,SAC9BA,EAAS7F,KAAK+J,QAAQlE,OAGoB,oBAA/B7F,KAAK+J,QAAQlE,OAAOzB,SAC7ByB,EAAS7F,KAAK+J,QAAQlE,OAAO,KAG/BA,EAASjF,SAASQ,cAAcpB,KAAK+J,QAAQlE,QAG/C,IAAM7E,EAAQ,yCAA4ChB,KAAK+J,QAAQlE,OAAzD,KACR8H,EAAW,GAAGvF,MAAMtF,KAAK+C,EAAOwC,iBAAiBrH,IASvD,OAPAd,EAAEyN,GAAUpH,MAAK,SAAC+B,EAAGvH,GACnBiL,EAAK4D,0BACHb,EAAS8B,sBAAsB9P,GAC/B,CAACA,OAIE8E,KAGT+J,0BAAA,SAA0B7O,EAAS+P,GACjC,IAAMC,EAAS7Q,EAAEa,GAASmF,SA7QA,QA+QtB4K,EAAatI,QACftI,EAAE4Q,GACCjJ,YA9QqB,aA8QckJ,GACnCT,KAAK,gBAAiBS,MAMtBF,sBAAP,SAA6B9P,GAC3B,IAAMC,EAAWZ,EAAKU,uBAAuBC,GAC7C,OAAOC,EAAWJ,SAASQ,cAAcJ,GAAY,QAGhDsF,iBAAP,SAAwB9D,GACtB,OAAOxC,KAAKuG,MAAK,WACf,IAAMyK,EAAU9Q,EAAEF,MACdyG,EAAYuK,EAAMvK,KArTA,eAsThBsD,EAAO0B,EAAAA,EAAAA,EAAA,GACR9C,GACAqI,EAAMvK,QACY,iBAAXjE,GAAuBA,EAASA,EAAS,IAYrD,IATKiE,GAAQsD,EAAQ9C,QAA4B,iBAAXzE,GAAuB,YAAYc,KAAKd,KAC5EuH,EAAQ9C,QAAS,GAGdR,IACHA,EAAO,IAAIsI,EAAS/O,KAAM+J,GAC1BiH,EAAMvK,KAlUc,cAkUCA,IAGD,iBAAXjE,EAAqB,CAC9B,GAA4B,oBAAjBiE,EAAKjE,GACd,MAAM,IAAIyB,UAAJ,oBAAkCzB,EAAlC,KAERiE,EAAKjE,kDA9PT,MA5EwB,wCAgFxB,OAAOmG,QAzCLoG,GA+SN7O,EAAEU,UAAUiG,GAlUc,6BAWG,4BAuT8B,SAAUvC,GAE/B,MAAhCA,EAAM2M,cAAchJ,SACtB3D,EAAMsC,iBAGR,IAAMsK,EAAWhR,EAAEF,MACbgB,EAAWZ,EAAKU,uBAAuBd,MACvCmR,EAAY,GAAG/I,MAAMtF,KAAKlC,SAASyH,iBAAiBrH,IAE1Dd,EAAEiR,GAAW5K,MAAK,WAChB,IAAM6K,EAAUlR,EAAEF,MAEZwC,EADU4O,EAAQ3K,KAjWA,eAkWD,SAAWyK,EAASzK,OAC3CsI,EAASzI,iBAAiBxD,KAAKsO,EAAS5O,SAU5CtC,EAAEiE,GAAGc,GAAQ8J,EAASzI,iBACtBpG,EAAEiE,GAAGc,GAAM6B,YAAciI,EACzB7O,EAAEiE,GAAGc,GAAM8B,WAAa,WAEtB,OADA7G,EAAEiE,GAAGc,GAAQC,EACN6J,EAASzI,kBC3WlB,IAAI+K,EAA8B,oBAAXnJ,QAA8C,oBAAbtH,UAAiD,oBAAduJ,UAEvFmH,EAAkB,WAEpB,IADA,IAAIC,EAAwB,CAAC,OAAQ,UAAW,WACvCjJ,EAAI,EAAGA,EAAIiJ,EAAsB/I,OAAQF,GAAK,EACrD,GAAI+I,GAAalH,UAAUqH,UAAU7E,QAAQ4E,EAAsBjJ,KAAO,EACxE,OAAO,EAGX,OAAO,EAPa,GAqCtB,IAWImJ,EAXqBJ,GAAanJ,OAAOwJ,QA3B7C,SAA2BvN,GACzB,IAAIlE,GAAS,EACb,OAAO,WACDA,IAGJA,GAAS,EACTiI,OAAOwJ,QAAQC,UAAUC,MAAK,WAC5B3R,GAAS,EACTkE,UAKN,SAAsBA,GACpB,IAAI0N,GAAY,EAChB,OAAO,WACAA,IACHA,GAAY,EACZvR,YAAW,WACTuR,GAAY,EACZ1N,MACCmN,MAyBT,SAASQ,EAAWC,GAElB,OAAOA,GAA8D,sBADvD,GACoB7O,SAASJ,KAAKiP,GAUlD,SAASC,EAAyBjR,EAAS2B,GACzC,GAAyB,IAArB3B,EAAQsB,SACV,MAAO,GAGT,IACIb,EADST,EAAQkR,cAAcC,YAClBC,iBAAiBpR,EAAS,MAC3C,OAAO2B,EAAWlB,EAAIkB,GAAYlB,EAUpC,SAAS4Q,EAAcrR,GACrB,MAAyB,SAArBA,EAAQsR,SACHtR,EAEFA,EAAQgD,YAAchD,EAAQuR,KAUvC,SAASC,EAAgBxR,GAEvB,IAAKA,EACH,OAAOH,SAAS4R,KAGlB,OAAQzR,EAAQsR,UACd,IAAK,OACL,IAAK,OACH,OAAOtR,EAAQkR,cAAcO,KAC/B,IAAK,YACH,OAAOzR,EAAQyR,KAKnB,IAAIC,EAAwBT,EAAyBjR,GACjD2R,EAAWD,EAAsBC,SACjCC,EAAYF,EAAsBE,UAClCC,EAAYH,EAAsBG,UAEtC,MAAI,wBAAwBtP,KAAKoP,EAAWE,EAAYD,GAC/C5R,EAGFwR,EAAgBH,EAAcrR,IAUvC,SAAS8R,EAAiBC,GACxB,OAAOA,GAAaA,EAAUC,cAAgBD,EAAUC,cAAgBD,EAG1E,IAAIE,EAAS3B,MAAgBnJ,OAAO+K,uBAAwBrS,SAASsS,cACjEC,EAAS9B,GAAa,UAAU/N,KAAK6G,UAAUqH,WASnD,SAAS4B,EAAKlP,GACZ,OAAgB,KAAZA,EACK8O,EAEO,KAAZ9O,EACKiP,EAEFH,GAAUG,EAUnB,SAASE,EAAgBtS,GACvB,IAAKA,EACH,OAAOH,SAAS8C,gBAQlB,IALA,IAAI4P,EAAiBF,EAAK,IAAMxS,SAAS4R,KAAO,KAG5Ce,EAAexS,EAAQwS,cAAgB,KAEpCA,IAAiBD,GAAkBvS,EAAQyS,oBAChDD,GAAgBxS,EAAUA,EAAQyS,oBAAoBD,aAGxD,IAAIlB,EAAWkB,GAAgBA,EAAalB,SAE5C,OAAKA,GAAyB,SAAbA,GAAoC,SAAbA,GAMsB,IAA1D,CAAC,KAAM,KAAM,SAAS1F,QAAQ4G,EAAalB,WAA2E,WAAvDL,EAAyBuB,EAAc,YACjGF,EAAgBE,GAGlBA,EATExS,EAAUA,EAAQkR,cAAcvO,gBAAkB9C,SAAS8C,gBA4BtE,SAAS+P,EAAQC,GACf,OAAwB,OAApBA,EAAK3P,WACA0P,EAAQC,EAAK3P,YAGf2P,EAWT,SAASC,EAAuBC,EAAUC,GAExC,KAAKD,GAAaA,EAASvR,UAAawR,GAAaA,EAASxR,UAC5D,OAAOzB,SAAS8C,gBAIlB,IAAIoQ,EAAQF,EAASG,wBAAwBF,GAAYG,KAAKC,4BAC1DhI,EAAQ6H,EAAQF,EAAWC,EAC3BvH,EAAMwH,EAAQD,EAAWD,EAGzBM,EAAQtT,SAASuT,cACrBD,EAAME,SAASnI,EAAO,GACtBiI,EAAMG,OAAO/H,EAAK,GAClB,IA/CyBvL,EACrBsR,EA8CAiC,EAA0BJ,EAAMI,wBAIpC,GAAIV,IAAaU,GAA2BT,IAAaS,GAA2BrI,EAAMzE,SAAS8E,GACjG,MAjDe,UAFb+F,GADqBtR,EAoDDuT,GAnDDjC,WAKH,SAAbA,GAAuBgB,EAAgBtS,EAAQwT,qBAAuBxT,EAkDpEsS,EAAgBiB,GAHdA,EAOX,IAAIE,EAAef,EAAQG,GAC3B,OAAIY,EAAalC,KACRqB,EAAuBa,EAAalC,KAAMuB,GAE1CF,EAAuBC,EAAUH,EAAQI,GAAUvB,MAY9D,SAASmC,EAAU1T,GACjB,IAAI2T,EAAO1P,UAAUwD,OAAS,QAAsBmM,IAAjB3P,UAAU,GAAmBA,UAAU,GAAK,MAE3E4P,EAAqB,QAATF,EAAiB,YAAc,aAC3CrC,EAAWtR,EAAQsR,SAEvB,GAAiB,SAAbA,GAAoC,SAAbA,EAAqB,CAC9C,IAAIwC,EAAO9T,EAAQkR,cAAcvO,gBAC7BoR,EAAmB/T,EAAQkR,cAAc6C,kBAAoBD,EACjE,OAAOC,EAAiBF,GAG1B,OAAO7T,EAAQ6T,GAYjB,SAASG,EAAcC,EAAMjU,GAC3B,IAAIkU,EAAWjQ,UAAUwD,OAAS,QAAsBmM,IAAjB3P,UAAU,IAAmBA,UAAU,GAE1EkQ,EAAYT,EAAU1T,EAAS,OAC/BoU,EAAaV,EAAU1T,EAAS,QAChCqU,EAAWH,GAAY,EAAI,EAK/B,OAJAD,EAAKK,KAAOH,EAAYE,EACxBJ,EAAKM,QAAUJ,EAAYE,EAC3BJ,EAAKO,MAAQJ,EAAaC,EAC1BJ,EAAKQ,OAASL,EAAaC,EACpBJ,EAaT,SAASS,EAAeC,EAAQC,GAC9B,IAAIC,EAAiB,MAATD,EAAe,OAAS,MAChCE,EAAkB,SAAVD,EAAmB,QAAU,SAEzC,OAAOjU,WAAW+T,EAAO,SAAWE,EAAQ,SAAU,IAAMjU,WAAW+T,EAAO,SAAWG,EAAQ,SAAU,IAG7G,SAASC,EAAQH,EAAMnD,EAAMqC,EAAMkB,GACjC,OAAOrV,KAAKsV,IAAIxD,EAAK,SAAWmD,GAAOnD,EAAK,SAAWmD,GAAOd,EAAK,SAAWc,GAAOd,EAAK,SAAWc,GAAOd,EAAK,SAAWc,GAAOvC,EAAK,IAAM9E,SAASuG,EAAK,SAAWc,IAASrH,SAASyH,EAAc,UAAqB,WAATJ,EAAoB,MAAQ,UAAYrH,SAASyH,EAAc,UAAqB,WAATJ,EAAoB,SAAW,WAAa,GAG5U,SAASM,EAAerV,GACtB,IAAI4R,EAAO5R,EAAS4R,KAChBqC,EAAOjU,EAAS8C,gBAChBqS,EAAgB3C,EAAK,KAAOjB,iBAAiB0C,GAEjD,MAAO,CACLqB,OAAQJ,EAAQ,SAAUtD,EAAMqC,EAAMkB,GACtCI,MAAOL,EAAQ,QAAStD,EAAMqC,EAAMkB,IAIxC,IAAIK,EAAiB,SAAUC,EAAUvP,GACvC,KAAMuP,aAAoBvP,GACxB,MAAM,IAAI7C,UAAU,sCAIpBqS,EAAc,WAChB,SAASC,EAAiB5R,EAAQ6R,GAChC,IAAK,IAAIlO,EAAI,EAAGA,EAAIkO,EAAMhO,OAAQF,IAAK,CACrC,IAAImO,EAAaD,EAAMlO,GACvBmO,EAAWC,WAAaD,EAAWC,aAAc,EACjDD,EAAWE,cAAe,EACtB,UAAWF,IAAYA,EAAWG,UAAW,GACjDjU,OAAOkU,eAAelS,EAAQ8R,EAAWK,IAAKL,IAIlD,OAAO,SAAU3P,EAAaiQ,EAAYC,GAGxC,OAFID,GAAYR,EAAiBzP,EAAYlE,UAAWmU,GACpDC,GAAaT,EAAiBzP,EAAakQ,GACxClQ,GAdO,GAsBd+P,EAAiB,SAAUzU,EAAK0U,EAAK9T,GAYvC,OAXI8T,KAAO1U,EACTO,OAAOkU,eAAezU,EAAK0U,EAAK,CAC9B9T,MAAOA,EACP0T,YAAY,EACZC,cAAc,EACdC,UAAU,IAGZxU,EAAI0U,GAAO9T,EAGNZ,GAGL6U,EAAWtU,OAAOuU,QAAU,SAAUvS,GACxC,IAAK,IAAI2D,EAAI,EAAGA,EAAItD,UAAUwD,OAAQF,IAAK,CACzC,IAAI6O,EAASnS,UAAUsD,GAEvB,IAAK,IAAIwO,KAAOK,EACVxU,OAAOC,UAAUC,eAAeC,KAAKqU,EAAQL,KAC/CnS,EAAOmS,GAAOK,EAAOL,IAK3B,OAAOnS,GAUT,SAASyS,EAAcC,GACrB,OAAOJ,EAAS,GAAII,EAAS,CAC3B7B,MAAO6B,EAAQ9B,KAAO8B,EAAQlB,MAC9Bb,OAAQ+B,EAAQhC,IAAMgC,EAAQnB,SAWlC,SAASxF,EAAsB3P,GAC7B,IAAIiU,EAAO,GAKX,IACE,GAAI5B,EAAK,IAAK,CACZ4B,EAAOjU,EAAQ2P,wBACf,IAAIwE,EAAYT,EAAU1T,EAAS,OAC/BoU,EAAaV,EAAU1T,EAAS,QACpCiU,EAAKK,KAAOH,EACZF,EAAKO,MAAQJ,EACbH,EAAKM,QAAUJ,EACfF,EAAKQ,OAASL,OAEdH,EAAOjU,EAAQ2P,wBAEjB,MAAOlE,IAET,IAAI8K,EAAS,CACX/B,KAAMP,EAAKO,KACXF,IAAKL,EAAKK,IACVc,MAAOnB,EAAKQ,MAAQR,EAAKO,KACzBW,OAAQlB,EAAKM,OAASN,EAAKK,KAIzBkC,EAA6B,SAArBxW,EAAQsR,SAAsB4D,EAAelV,EAAQkR,eAAiB,GAC9EkE,EAAQoB,EAAMpB,OAASpV,EAAQyW,aAAeF,EAAOnB,MACrDD,EAASqB,EAAMrB,QAAUnV,EAAQ0W,cAAgBH,EAAOpB,OAExDwB,EAAiB3W,EAAQ4W,YAAcxB,EACvCyB,EAAgB7W,EAAQgB,aAAemU,EAI3C,GAAIwB,GAAkBE,EAAe,CACnC,IAAIlC,EAAS1D,EAAyBjR,GACtC2W,GAAkBjC,EAAeC,EAAQ,KACzCkC,GAAiBnC,EAAeC,EAAQ,KAExC4B,EAAOnB,OAASuB,EAChBJ,EAAOpB,QAAU0B,EAGnB,OAAOR,EAAcE,GAGvB,SAASO,EAAqClK,EAAU9H,GACtD,IAAIiS,EAAgB9S,UAAUwD,OAAS,QAAsBmM,IAAjB3P,UAAU,IAAmBA,UAAU,GAE/EmO,EAASC,EAAK,IACd2E,EAA6B,SAApBlS,EAAOwM,SAChB2F,EAAetH,EAAsB/C,GACrCsK,EAAavH,EAAsB7K,GACnCqS,EAAe3F,EAAgB5E,GAE/B+H,EAAS1D,EAAyBnM,GAClCsS,EAAiBxW,WAAW+T,EAAOyC,eAAgB,IACnDC,EAAkBzW,WAAW+T,EAAO0C,gBAAiB,IAGrDN,GAAiBC,IACnBE,EAAW5C,IAAM3U,KAAKsV,IAAIiC,EAAW5C,IAAK,GAC1C4C,EAAW1C,KAAO7U,KAAKsV,IAAIiC,EAAW1C,KAAM,IAE9C,IAAI8B,EAAUD,EAAc,CAC1B/B,IAAK2C,EAAa3C,IAAM4C,EAAW5C,IAAM8C,EACzC5C,KAAMyC,EAAazC,KAAO0C,EAAW1C,KAAO6C,EAC5CjC,MAAO6B,EAAa7B,MACpBD,OAAQ8B,EAAa9B,SASvB,GAPAmB,EAAQgB,UAAY,EACpBhB,EAAQiB,WAAa,GAMhBnF,GAAU4E,EAAQ,CACrB,IAAIM,EAAY1W,WAAW+T,EAAO2C,UAAW,IACzCC,EAAa3W,WAAW+T,EAAO4C,WAAY,IAE/CjB,EAAQhC,KAAO8C,EAAiBE,EAChChB,EAAQ/B,QAAU6C,EAAiBE,EACnChB,EAAQ9B,MAAQ6C,EAAkBE,EAClCjB,EAAQ7B,OAAS4C,EAAkBE,EAGnCjB,EAAQgB,UAAYA,EACpBhB,EAAQiB,WAAaA,EAOvB,OAJInF,IAAW2E,EAAgBjS,EAAO2B,SAAS0Q,GAAgBrS,IAAWqS,GAA0C,SAA1BA,EAAa7F,YACrGgF,EAAUtC,EAAcsC,EAASxR,IAG5BwR,EAGT,SAASkB,EAA8CxX,GACrD,IAAIyX,EAAgBxT,UAAUwD,OAAS,QAAsBmM,IAAjB3P,UAAU,IAAmBA,UAAU,GAE/E6P,EAAO9T,EAAQkR,cAAcvO,gBAC7B+U,EAAiBZ,EAAqC9W,EAAS8T,GAC/DsB,EAAQzV,KAAKsV,IAAInB,EAAK2C,YAAatP,OAAOwQ,YAAc,GACxDxC,EAASxV,KAAKsV,IAAInB,EAAK4C,aAAcvP,OAAOyQ,aAAe,GAE3DzD,EAAasD,EAAkC,EAAlB/D,EAAUI,GACvCM,EAAcqD,EAA0C,EAA1B/D,EAAUI,EAAM,QAE9C+D,EAAS,CACXvD,IAAKH,EAAYuD,EAAepD,IAAMoD,EAAeJ,UACrD9C,KAAMJ,EAAasD,EAAelD,KAAOkD,EAAeH,WACxDnC,MAAOA,EACPD,OAAQA,GAGV,OAAOkB,EAAcwB,GAWvB,SAASC,EAAQ9X,GACf,IAAIsR,EAAWtR,EAAQsR,SACvB,GAAiB,SAAbA,GAAoC,SAAbA,EACzB,OAAO,EAET,GAAsD,UAAlDL,EAAyBjR,EAAS,YACpC,OAAO,EAET,IAAIgD,EAAaqO,EAAcrR,GAC/B,QAAKgD,GAGE8U,EAAQ9U,GAWjB,SAAS+U,GAA6B/X,GAEpC,IAAKA,IAAYA,EAAQgY,eAAiB3F,IACxC,OAAOxS,SAAS8C,gBAGlB,IADA,IAAIsV,EAAKjY,EAAQgY,cACVC,GAAoD,SAA9ChH,EAAyBgH,EAAI,cACxCA,EAAKA,EAAGD,cAEV,OAAOC,GAAMpY,SAAS8C,gBAcxB,SAASuV,GAAcC,EAAQpG,EAAWqG,EAASC,GACjD,IAAItB,EAAgB9S,UAAUwD,OAAS,QAAsBmM,IAAjB3P,UAAU,IAAmBA,UAAU,GAI/EqU,EAAa,CAAEhE,IAAK,EAAGE,KAAM,GAC7BhC,EAAeuE,EAAgBgB,GAA6BI,GAAUvF,EAAuBuF,EAAQrG,EAAiBC,IAG1H,GAA0B,aAAtBsG,EACFC,EAAad,EAA8ChF,EAAcuE,OACpE,CAEL,IAAIwB,OAAiB,EACK,iBAAtBF,EAE8B,UADhCE,EAAiB/G,EAAgBH,EAAcU,KAC5BT,WACjBiH,EAAiBJ,EAAOjH,cAAcvO,iBAGxC4V,EAD+B,WAAtBF,EACQF,EAAOjH,cAAcvO,gBAErB0V,EAGnB,IAAI/B,EAAUQ,EAAqCyB,EAAgB/F,EAAcuE,GAGjF,GAAgC,SAA5BwB,EAAejH,UAAwBwG,EAAQtF,GAWjD8F,EAAahC,MAXmD,CAChE,IAAIkC,EAAkBtD,EAAeiD,EAAOjH,eACxCiE,EAASqD,EAAgBrD,OACzBC,EAAQoD,EAAgBpD,MAE5BkD,EAAWhE,KAAOgC,EAAQhC,IAAMgC,EAAQgB,UACxCgB,EAAW/D,OAASY,EAASmB,EAAQhC,IACrCgE,EAAW9D,MAAQ8B,EAAQ9B,KAAO8B,EAAQiB,WAC1Ce,EAAW7D,MAAQW,EAAQkB,EAAQ9B,MASvC,IAAIiE,EAAqC,iBADzCL,EAAUA,GAAW,GAOrB,OALAE,EAAW9D,MAAQiE,EAAkBL,EAAUA,EAAQ5D,MAAQ,EAC/D8D,EAAWhE,KAAOmE,EAAkBL,EAAUA,EAAQ9D,KAAO,EAC7DgE,EAAW7D,OAASgE,EAAkBL,EAAUA,EAAQ3D,OAAS,EACjE6D,EAAW/D,QAAUkE,EAAkBL,EAAUA,EAAQ7D,QAAU,EAE5D+D,EAGT,SAASI,GAAQC,GAIf,OAHYA,EAAKvD,MACJuD,EAAKxD,OAcpB,SAASyD,GAAqBC,EAAWC,EAASX,EAAQpG,EAAWsG,GACnE,IAAID,EAAUnU,UAAUwD,OAAS,QAAsBmM,IAAjB3P,UAAU,GAAmBA,UAAU,GAAK,EAElF,IAAmC,IAA/B4U,EAAUjN,QAAQ,QACpB,OAAOiN,EAGT,IAAIP,EAAaJ,GAAcC,EAAQpG,EAAWqG,EAASC,GAEvDU,EAAQ,CACVzE,IAAK,CACHc,MAAOkD,EAAWlD,MAClBD,OAAQ2D,EAAQxE,IAAMgE,EAAWhE,KAEnCG,MAAO,CACLW,MAAOkD,EAAW7D,MAAQqE,EAAQrE,MAClCU,OAAQmD,EAAWnD,QAErBZ,OAAQ,CACNa,MAAOkD,EAAWlD,MAClBD,OAAQmD,EAAW/D,OAASuE,EAAQvE,QAEtCC,KAAM,CACJY,MAAO0D,EAAQtE,KAAO8D,EAAW9D,KACjCW,OAAQmD,EAAWnD,SAInB6D,EAAcpX,OAAOqX,KAAKF,GAAOG,KAAI,SAAUnD,GACjD,OAAOG,EAAS,CACdH,IAAKA,GACJgD,EAAMhD,GAAM,CACboD,KAAMT,GAAQK,EAAMhD,SAErBqD,MAAK,SAAUC,EAAGC,GACnB,OAAOA,EAAEH,KAAOE,EAAEF,QAGhBI,EAAgBP,EAAYzK,QAAO,SAAUiL,GAC/C,IAAIpE,EAAQoE,EAAMpE,MACdD,EAASqE,EAAMrE,OACnB,OAAOC,GAAS+C,EAAO1B,aAAetB,GAAUgD,EAAOzB,gBAGrD+C,EAAoBF,EAAc9R,OAAS,EAAI8R,EAAc,GAAGxD,IAAMiD,EAAY,GAAGjD,IAErF2D,EAAYb,EAAU/X,MAAM,KAAK,GAErC,OAAO2Y,GAAqBC,EAAY,IAAMA,EAAY,IAa5D,SAASC,GAAoBC,EAAOzB,EAAQpG,GAC1C,IAAIgF,EAAgB9S,UAAUwD,OAAS,QAAsBmM,IAAjB3P,UAAU,GAAmBA,UAAU,GAAK,KAEpF4V,EAAqB9C,EAAgBgB,GAA6BI,GAAUvF,EAAuBuF,EAAQrG,EAAiBC,IAChI,OAAO+E,EAAqC/E,EAAW8H,EAAoB9C,GAU7E,SAAS+C,GAAc9Z,GACrB,IACI2U,EADS3U,EAAQkR,cAAcC,YACfC,iBAAiBpR,GACjC+Z,EAAInZ,WAAW+T,EAAO2C,WAAa,GAAK1W,WAAW+T,EAAOqF,cAAgB,GAC1EC,EAAIrZ,WAAW+T,EAAO4C,YAAc,GAAK3W,WAAW+T,EAAOuF,aAAe,GAK9E,MAJa,CACX9E,MAAOpV,EAAQ4W,YAAcqD,EAC7B9E,OAAQnV,EAAQgB,aAAe+Y,GAYnC,SAASI,GAAqBtB,GAC5B,IAAIuB,EAAO,CAAE5F,KAAM,QAASC,MAAO,OAAQF,OAAQ,MAAOD,IAAK,UAC/D,OAAOuE,EAAUwB,QAAQ,0BAA0B,SAAUC,GAC3D,OAAOF,EAAKE,MAchB,SAASC,GAAiBpC,EAAQqC,EAAkB3B,GAClDA,EAAYA,EAAU/X,MAAM,KAAK,GAGjC,IAAI2Z,EAAaX,GAAc3B,GAG3BuC,EAAgB,CAClBtF,MAAOqF,EAAWrF,MAClBD,OAAQsF,EAAWtF,QAIjBwF,GAAoD,IAA1C,CAAC,QAAS,QAAQ/O,QAAQiN,GACpC+B,EAAWD,EAAU,MAAQ,OAC7BE,EAAgBF,EAAU,OAAS,MACnCG,EAAcH,EAAU,SAAW,QACnCI,EAAwBJ,EAAqB,QAAX,SAStC,OAPAD,EAAcE,GAAYJ,EAAiBI,GAAYJ,EAAiBM,GAAe,EAAIL,EAAWK,GAAe,EAEnHJ,EAAcG,GADZhC,IAAcgC,EACeL,EAAiBK,GAAiBJ,EAAWM,GAE7CP,EAAiBL,GAAqBU,IAGhEH,EAYT,SAASM,GAAKC,EAAKC,GAEjB,OAAIC,MAAMtZ,UAAUmZ,KACXC,EAAID,KAAKE,GAIXD,EAAI1M,OAAO2M,GAAO,GAqC3B,SAASE,GAAaC,EAAW3V,EAAM4V,GAoBrC,YAnB8B1H,IAAT0H,EAAqBD,EAAYA,EAAUhU,MAAM,EA1BxE,SAAmB4T,EAAKM,EAAMtZ,GAE5B,GAAIkZ,MAAMtZ,UAAU2Z,UAClB,OAAOP,EAAIO,WAAU,SAAUC,GAC7B,OAAOA,EAAIF,KAAUtZ,KAKzB,IAAIG,EAAQ4Y,GAAKC,GAAK,SAAU5Z,GAC9B,OAAOA,EAAIka,KAAUtZ,KAEvB,OAAOgZ,EAAIrP,QAAQxJ,GAcsDoZ,CAAUH,EAAW,OAAQC,KAEvFI,SAAQ,SAAUrH,GAC3BA,EAAmB,UAErBsH,QAAQC,KAAK,yDAEf,IAAIxY,EAAKiR,EAAmB,UAAKA,EAASjR,GACtCiR,EAASwH,SAAW9K,EAAW3N,KAIjCsC,EAAK4Q,QAAQ6B,OAAS9B,EAAc3Q,EAAK4Q,QAAQ6B,QACjDzS,EAAK4Q,QAAQvE,UAAYsE,EAAc3Q,EAAK4Q,QAAQvE,WAEpDrM,EAAOtC,EAAGsC,EAAM2O,OAIb3O,EAUT,SAASoW,KAEP,IAAI7c,KAAK2a,MAAMmC,YAAf,CAIA,IAAIrW,EAAO,CACT4P,SAAUrW,KACV0V,OAAQ,GACRqH,YAAa,GACbC,WAAY,GACZC,SAAS,EACT5F,QAAS,IAIX5Q,EAAK4Q,QAAQvE,UAAY4H,GAAoB1a,KAAK2a,MAAO3a,KAAKkZ,OAAQlZ,KAAK8S,UAAW9S,KAAKkd,QAAQC,eAKnG1W,EAAKmT,UAAYD,GAAqB3Z,KAAKkd,QAAQtD,UAAWnT,EAAK4Q,QAAQvE,UAAW9S,KAAKkZ,OAAQlZ,KAAK8S,UAAW9S,KAAKkd,QAAQd,UAAUgB,KAAKhE,kBAAmBpZ,KAAKkd,QAAQd,UAAUgB,KAAKjE,SAG9L1S,EAAK4W,kBAAoB5W,EAAKmT,UAE9BnT,EAAK0W,cAAgBnd,KAAKkd,QAAQC,cAGlC1W,EAAK4Q,QAAQ6B,OAASoC,GAAiBtb,KAAKkZ,OAAQzS,EAAK4Q,QAAQvE,UAAWrM,EAAKmT,WAEjFnT,EAAK4Q,QAAQ6B,OAAOoE,SAAWtd,KAAKkd,QAAQC,cAAgB,QAAU,WAGtE1W,EAAO0V,GAAanc,KAAKoc,UAAW3V,GAI/BzG,KAAK2a,MAAM4C,UAIdvd,KAAKkd,QAAQM,SAAS/W,IAHtBzG,KAAK2a,MAAM4C,WAAY,EACvBvd,KAAKkd,QAAQO,SAAShX,KAY1B,SAASiX,GAAkBtB,EAAWuB,GACpC,OAAOvB,EAAUwB,MAAK,SAAUlE,GAC9B,IAAImE,EAAOnE,EAAKmE,KAEhB,OADcnE,EAAKkD,SACDiB,IAASF,KAW/B,SAASG,GAAyBpb,GAIhC,IAHA,IAAIqb,EAAW,EAAC,EAAO,KAAM,SAAU,MAAO,KAC1CC,EAAYtb,EAASub,OAAO,GAAGza,cAAgBd,EAAS0F,MAAM,GAEzDE,EAAI,EAAGA,EAAIyV,EAASvV,OAAQF,IAAK,CACxC,IAAI7H,EAASsd,EAASzV,GAClB4V,EAAUzd,EAAS,GAAKA,EAASud,EAAYtb,EACjD,GAA4C,oBAAjC9B,SAAS4R,KAAKnC,MAAM6N,GAC7B,OAAOA,EAGX,OAAO,KAQT,SAASC,KAsBP,OArBAne,KAAK2a,MAAMmC,aAAc,EAGrBY,GAAkB1d,KAAKoc,UAAW,gBACpCpc,KAAKkZ,OAAOkF,gBAAgB,eAC5Bpe,KAAKkZ,OAAO7I,MAAMiN,SAAW,GAC7Btd,KAAKkZ,OAAO7I,MAAMgF,IAAM,GACxBrV,KAAKkZ,OAAO7I,MAAMkF,KAAO,GACzBvV,KAAKkZ,OAAO7I,MAAMmF,MAAQ,GAC1BxV,KAAKkZ,OAAO7I,MAAMiF,OAAS,GAC3BtV,KAAKkZ,OAAO7I,MAAMgO,WAAa,GAC/Bre,KAAKkZ,OAAO7I,MAAMyN,GAAyB,cAAgB,IAG7D9d,KAAKse,wBAIDte,KAAKkd,QAAQqB,iBACfve,KAAKkZ,OAAOnV,WAAWya,YAAYxe,KAAKkZ,QAEnClZ,KAQT,SAASye,GAAU1d,GACjB,IAAIkR,EAAgBlR,EAAQkR,cAC5B,OAAOA,EAAgBA,EAAcC,YAAchK,OAoBrD,SAASwW,GAAoB5L,EAAWoK,EAASvC,EAAOgE,GAEtDhE,EAAMgE,YAAcA,EACpBF,GAAU3L,GAAW8L,iBAAiB,SAAUjE,EAAMgE,YAAa,CAAEE,SAAS,IAG9E,IAAIC,EAAgBvM,EAAgBO,GAKpC,OA5BF,SAASiM,EAAsB7G,EAAc5T,EAAO0a,EAAUC,GAC5D,IAAIC,EAAmC,SAA1BhH,EAAa7F,SACtB1N,EAASua,EAAShH,EAAajG,cAAcC,YAAcgG,EAC/DvT,EAAOia,iBAAiBta,EAAO0a,EAAU,CAAEH,SAAS,IAE/CK,GACHH,EAAsBxM,EAAgB5N,EAAOZ,YAAaO,EAAO0a,EAAUC,GAE7EA,EAAcxP,KAAK9K,GAgBnBoa,CAAsBD,EAAe,SAAUnE,EAAMgE,YAAahE,EAAMsE,eACxEtE,EAAMmE,cAAgBA,EACtBnE,EAAMwE,eAAgB,EAEfxE,EAST,SAASyE,KACFpf,KAAK2a,MAAMwE,gBACdnf,KAAK2a,MAAQ+D,GAAoB1e,KAAK8S,UAAW9S,KAAKkd,QAASld,KAAK2a,MAAO3a,KAAKqf,iBAkCpF,SAASf,KAxBT,IAA8BxL,EAAW6H,EAyBnC3a,KAAK2a,MAAMwE,gBACbG,qBAAqBtf,KAAKqf,gBAC1Brf,KAAK2a,OA3BqB7H,EA2BQ9S,KAAK8S,UA3BF6H,EA2Ba3a,KAAK2a,MAzBzD8D,GAAU3L,GAAWyM,oBAAoB,SAAU5E,EAAMgE,aAGzDhE,EAAMsE,cAAcxC,SAAQ,SAAU9X,GACpCA,EAAO4a,oBAAoB,SAAU5E,EAAMgE,gBAI7ChE,EAAMgE,YAAc,KACpBhE,EAAMsE,cAAgB,GACtBtE,EAAMmE,cAAgB,KACtBnE,EAAMwE,eAAgB,EACfxE,IAwBT,SAAS6E,GAAUC,GACjB,MAAa,KAANA,IAAaC,MAAM/d,WAAW8d,KAAOE,SAASF,GAWvD,SAASG,GAAU7e,EAAS2U,GAC1B/S,OAAOqX,KAAKtE,GAAQ+G,SAAQ,SAAUH,GACpC,IAAIuD,EAAO,IAEkE,IAAzE,CAAC,QAAS,SAAU,MAAO,QAAS,SAAU,QAAQlT,QAAQ2P,IAAgBkD,GAAU9J,EAAO4G,MACjGuD,EAAO,MAET9e,EAAQsP,MAAMiM,GAAQ5G,EAAO4G,GAAQuD,KAgIzC,IAAIC,GAAYzO,GAAa,WAAW/N,KAAK6G,UAAUqH,WA8GvD,SAASuO,GAAmB3D,EAAW4D,EAAgBC,GACrD,IAAIC,EAAanE,GAAKK,GAAW,SAAU1C,GAEzC,OADWA,EAAKmE,OACAmC,KAGdG,IAAeD,GAAc9D,EAAUwB,MAAK,SAAUxI,GACxD,OAAOA,EAASyI,OAASoC,GAAiB7K,EAASwH,SAAWxH,EAAStB,MAAQoM,EAAWpM,SAG5F,IAAKqM,EAAY,CACf,IAAIC,EAAc,IAAMJ,EAAiB,IACrCK,EAAY,IAAMJ,EAAgB,IACtCvD,QAAQC,KAAK0D,EAAY,4BAA8BD,EAAc,4DAA8DA,EAAc,KAEnJ,OAAOD,EAoIT,IAAIG,GAAa,CAAC,aAAc,OAAQ,WAAY,YAAa,MAAO,UAAW,cAAe,QAAS,YAAa,aAAc,SAAU,eAAgB,WAAY,OAAQ,cAGhLC,GAAkBD,GAAWlY,MAAM,GAYvC,SAASoY,GAAU5G,GACjB,IAAI6G,EAAUzb,UAAUwD,OAAS,QAAsBmM,IAAjB3P,UAAU,IAAmBA,UAAU,GAEzEoG,EAAQmV,GAAgB5T,QAAQiN,GAChCoC,EAAMuE,GAAgBnY,MAAMgD,EAAQ,GAAGsV,OAAOH,GAAgBnY,MAAM,EAAGgD,IAC3E,OAAOqV,EAAUzE,EAAI2E,UAAY3E,EAGnC,IAAI4E,GACI,OADJA,GAES,YAFTA,GAGgB,mBAiMpB,SAASC,GAAYjI,EAAQ6C,EAAeF,EAAkBuF,GAC5D,IAAIzJ,EAAU,CAAC,EAAG,GAKd0J,GAA0D,IAA9C,CAAC,QAAS,QAAQpU,QAAQmU,GAItCE,EAAYpI,EAAO/W,MAAM,WAAWoY,KAAI,SAAUgH,GACpD,OAAOA,EAAK9f,UAKV+f,EAAUF,EAAUrU,QAAQoP,GAAKiF,GAAW,SAAUC,GACxD,OAAgC,IAAzBA,EAAKE,OAAO,YAGjBH,EAAUE,KAAiD,IAArCF,EAAUE,GAASvU,QAAQ,MACnD+P,QAAQC,KAAK,gFAKf,IAAIyE,EAAa,cACbC,GAAmB,IAAbH,EAAiB,CAACF,EAAU5Y,MAAM,EAAG8Y,GAASR,OAAO,CAACM,EAAUE,GAASrf,MAAMuf,GAAY,KAAM,CAACJ,EAAUE,GAASrf,MAAMuf,GAAY,IAAIV,OAAOM,EAAU5Y,MAAM8Y,EAAU,KAAO,CAACF,GAqC9L,OAlCAK,EAAMA,EAAIpH,KAAI,SAAUqH,EAAIlW,GAE1B,IAAIyQ,GAAyB,IAAVzQ,GAAe2V,EAAYA,GAAa,SAAW,QAClEQ,GAAoB,EACxB,OAAOD,EAGNE,QAAO,SAAUpH,EAAGC,GACnB,MAAwB,KAApBD,EAAEA,EAAE5R,OAAS,KAAwC,IAA3B,CAAC,IAAK,KAAKmE,QAAQ0N,IAC/CD,EAAEA,EAAE5R,OAAS,GAAK6R,EAClBkH,GAAoB,EACbnH,GACEmH,GACTnH,EAAEA,EAAE5R,OAAS,IAAM6R,EACnBkH,GAAoB,EACbnH,GAEAA,EAAEsG,OAAOrG,KAEjB,IAEFJ,KAAI,SAAUwH,GACb,OAxGN,SAAiBA,EAAK5F,EAAaJ,EAAeF,GAEhD,IAAI1Z,EAAQ4f,EAAIte,MAAM,6BAClBH,GAASnB,EAAM,GACfge,EAAOhe,EAAM,GAGjB,IAAKmB,EACH,OAAOye,EAGT,GAA0B,IAAtB5B,EAAKlT,QAAQ,KAAY,CAC3B,IAAI5L,OAAU,EACd,OAAQ8e,GACN,IAAK,KACH9e,EAAU0a,EACV,MACF,IAAK,IACL,IAAK,KACL,QACE1a,EAAUwa,EAId,OADWnE,EAAcrW,GACb8a,GAAe,IAAM7Y,EAC5B,GAAa,OAAT6c,GAA0B,OAATA,EAAe,CAQzC,OALa,OAATA,EACKnf,KAAKsV,IAAIpV,SAAS8C,gBAAgB+T,aAAcvP,OAAOyQ,aAAe,GAEtEjY,KAAKsV,IAAIpV,SAAS8C,gBAAgB8T,YAAatP,OAAOwQ,YAAc,IAE/D,IAAM1V,EAIpB,OAAOA,EAmEE0e,CAAQD,EAAK5F,EAAaJ,EAAeF,UAKhDkB,SAAQ,SAAU6E,EAAIlW,GACxBkW,EAAG7E,SAAQ,SAAUwE,EAAMU,GACrBnC,GAAUyB,KACZ5J,EAAQjM,IAAU6V,GAA2B,MAAnBK,EAAGK,EAAS,IAAc,EAAI,UAIvDtK,EA2OT,IAkWIuK,GAAW,CAKbhI,UAAW,SAMXuD,eAAe,EAMfgC,eAAe,EAOfZ,iBAAiB,EAQjBd,SAAU,aAUVD,SAAU,aAOVpB,UAnZc,CASdyF,MAAO,CAEL/N,MAAO,IAEP8I,SAAS,EAETzY,GA9HJ,SAAesC,GACb,IAAImT,EAAYnT,EAAKmT,UACjBkH,EAAgBlH,EAAU/X,MAAM,KAAK,GACrCigB,EAAiBlI,EAAU/X,MAAM,KAAK,GAG1C,GAAIigB,EAAgB,CAClB,IAAIC,EAAgBtb,EAAK4Q,QACrBvE,EAAYiP,EAAcjP,UAC1BoG,EAAS6I,EAAc7I,OAEvB8I,GAA2D,IAA9C,CAAC,SAAU,OAAOrV,QAAQmU,GACvCpM,EAAOsN,EAAa,OAAS,MAC7BnG,EAAcmG,EAAa,QAAU,SAErCC,EAAe,CACjBhW,MAAO4K,EAAe,GAAInC,EAAM5B,EAAU4B,IAC1CpI,IAAKuK,EAAe,GAAInC,EAAM5B,EAAU4B,GAAQ5B,EAAU+I,GAAe3C,EAAO2C,KAGlFpV,EAAK4Q,QAAQ6B,OAASjC,EAAS,GAAIiC,EAAQ+I,EAAaH,IAG1D,OAAOrb,IAgJPmS,OAAQ,CAEN9E,MAAO,IAEP8I,SAAS,EAETzY,GA7RJ,SAAgBsC,EAAMiT,GACpB,IAAId,EAASc,EAAKd,OACdgB,EAAYnT,EAAKmT,UACjBmI,EAAgBtb,EAAK4Q,QACrB6B,EAAS6I,EAAc7I,OACvBpG,EAAYiP,EAAcjP,UAE1BgO,EAAgBlH,EAAU/X,MAAM,KAAK,GAErCwV,OAAU,EAsBd,OApBEA,EADEmI,IAAW5G,GACH,EAAEA,EAAQ,GAEViI,GAAYjI,EAAQM,EAAQpG,EAAWgO,GAG7B,SAAlBA,GACF5H,EAAO7D,KAAOgC,EAAQ,GACtB6B,EAAO3D,MAAQ8B,EAAQ,IACI,UAAlByJ,GACT5H,EAAO7D,KAAOgC,EAAQ,GACtB6B,EAAO3D,MAAQ8B,EAAQ,IACI,QAAlByJ,GACT5H,EAAO3D,MAAQ8B,EAAQ,GACvB6B,EAAO7D,KAAOgC,EAAQ,IACK,WAAlByJ,IACT5H,EAAO3D,MAAQ8B,EAAQ,GACvB6B,EAAO7D,KAAOgC,EAAQ,IAGxB5Q,EAAKyS,OAASA,EACPzS,GAkQLmS,OAAQ,GAoBVsJ,gBAAiB,CAEfpO,MAAO,IAEP8I,SAAS,EAETzY,GAlRJ,SAAyBsC,EAAMyW,GAC7B,IAAI9D,EAAoB8D,EAAQ9D,mBAAqB/F,EAAgB5M,EAAK4P,SAAS6C,QAK/EzS,EAAK4P,SAASvD,YAAcsG,IAC9BA,EAAoB/F,EAAgB+F,IAMtC,IAAI+I,EAAgBrE,GAAyB,aACzCsE,EAAe3b,EAAK4P,SAAS6C,OAAO7I,MACpCgF,EAAM+M,EAAa/M,IACnBE,EAAO6M,EAAa7M,KACpB8M,EAAYD,EAAaD,GAE7BC,EAAa/M,IAAM,GACnB+M,EAAa7M,KAAO,GACpB6M,EAAaD,GAAiB,GAE9B,IAAI9I,EAAaJ,GAAcxS,EAAK4P,SAAS6C,OAAQzS,EAAK4P,SAASvD,UAAWoK,EAAQ/D,QAASC,EAAmB3S,EAAK0W,eAIvHiF,EAAa/M,IAAMA,EACnB+M,EAAa7M,KAAOA,EACpB6M,EAAaD,GAAiBE,EAE9BnF,EAAQ7D,WAAaA,EAErB,IAAIvF,EAAQoJ,EAAQoF,SAChBpJ,EAASzS,EAAK4Q,QAAQ6B,OAEtB+C,EAAQ,CACVsG,QAAS,SAAiB3I,GACxB,IAAI5W,EAAQkW,EAAOU,GAInB,OAHIV,EAAOU,GAAaP,EAAWO,KAAesD,EAAQsF,sBACxDxf,EAAQtC,KAAKsV,IAAIkD,EAAOU,GAAYP,EAAWO,KAE1C/C,EAAe,GAAI+C,EAAW5W,IAEvCyf,UAAW,SAAmB7I,GAC5B,IAAI+B,EAAyB,UAAd/B,EAAwB,OAAS,MAC5C5W,EAAQkW,EAAOyC,GAInB,OAHIzC,EAAOU,GAAaP,EAAWO,KAAesD,EAAQsF,sBACxDxf,EAAQtC,KAAKgiB,IAAIxJ,EAAOyC,GAAWtC,EAAWO,IAA4B,UAAdA,EAAwBV,EAAO/C,MAAQ+C,EAAOhD,UAErGW,EAAe,GAAI8E,EAAU3Y,KAWxC,OAPA8Q,EAAM2I,SAAQ,SAAU7C,GACtB,IAAIlF,GAA+C,IAAxC,CAAC,OAAQ,OAAO/H,QAAQiN,GAAoB,UAAY,YACnEV,EAASjC,EAAS,GAAIiC,EAAQ+C,EAAMvH,GAAMkF,OAG5CnT,EAAK4Q,QAAQ6B,OAASA,EAEfzS,GA2NL6b,SAAU,CAAC,OAAQ,QAAS,MAAO,UAOnCnJ,QAAS,EAMTC,kBAAmB,gBAYrBuJ,aAAc,CAEZ7O,MAAO,IAEP8I,SAAS,EAETzY,GAlgBJ,SAAsBsC,GACpB,IAAIsb,EAAgBtb,EAAK4Q,QACrB6B,EAAS6I,EAAc7I,OACvBpG,EAAYiP,EAAcjP,UAE1B8G,EAAYnT,EAAKmT,UAAU/X,MAAM,KAAK,GACtC+gB,EAAQliB,KAAKkiB,MACbZ,GAAuD,IAA1C,CAAC,MAAO,UAAUrV,QAAQiN,GACvClF,EAAOsN,EAAa,QAAU,SAC9Ba,EAASb,EAAa,OAAS,MAC/BnG,EAAcmG,EAAa,QAAU,SASzC,OAPI9I,EAAOxE,GAAQkO,EAAM9P,EAAU+P,MACjCpc,EAAK4Q,QAAQ6B,OAAO2J,GAAUD,EAAM9P,EAAU+P,IAAW3J,EAAO2C,IAE9D3C,EAAO2J,GAAUD,EAAM9P,EAAU4B,MACnCjO,EAAK4Q,QAAQ6B,OAAO2J,GAAUD,EAAM9P,EAAU4B,KAGzCjO,IA4fPqc,MAAO,CAELhP,MAAO,IAEP8I,SAAS,EAETzY,GApxBJ,SAAesC,EAAMyW,GACnB,IAAI6F,EAGJ,IAAKhD,GAAmBtZ,EAAK4P,SAAS+F,UAAW,QAAS,gBACxD,OAAO3V,EAGT,IAAIuc,EAAe9F,EAAQnc,QAG3B,GAA4B,iBAAjBiiB,GAIT,KAHAA,EAAevc,EAAK4P,SAAS6C,OAAO9X,cAAc4hB,IAIhD,OAAOvc,OAKT,IAAKA,EAAK4P,SAAS6C,OAAO1R,SAASwb,GAEjC,OADAtG,QAAQC,KAAK,iEACNlW,EAIX,IAAImT,EAAYnT,EAAKmT,UAAU/X,MAAM,KAAK,GACtCkgB,EAAgBtb,EAAK4Q,QACrB6B,EAAS6I,EAAc7I,OACvBpG,EAAYiP,EAAcjP,UAE1BkP,GAAuD,IAA1C,CAAC,OAAQ,SAASrV,QAAQiN,GAEvCrR,EAAMyZ,EAAa,SAAW,QAC9BiB,EAAkBjB,EAAa,MAAQ,OACvCtN,EAAOuO,EAAgB7f,cACvB8f,EAAUlB,EAAa,OAAS,MAChCa,EAASb,EAAa,SAAW,QACjCmB,EAAmBtI,GAAcmI,GAAcza,GAQ/CuK,EAAU+P,GAAUM,EAAmBjK,EAAOxE,KAChDjO,EAAK4Q,QAAQ6B,OAAOxE,IAASwE,EAAOxE,IAAS5B,EAAU+P,GAAUM,IAG/DrQ,EAAU4B,GAAQyO,EAAmBjK,EAAO2J,KAC9Cpc,EAAK4Q,QAAQ6B,OAAOxE,IAAS5B,EAAU4B,GAAQyO,EAAmBjK,EAAO2J,IAE3Epc,EAAK4Q,QAAQ6B,OAAS9B,EAAc3Q,EAAK4Q,QAAQ6B,QAGjD,IAAIkK,EAAStQ,EAAU4B,GAAQ5B,EAAUvK,GAAO,EAAI4a,EAAmB,EAInE3hB,EAAMwQ,EAAyBvL,EAAK4P,SAAS6C,QAC7CmK,EAAmB1hB,WAAWH,EAAI,SAAWyhB,GAAkB,IAC/DK,EAAmB3hB,WAAWH,EAAI,SAAWyhB,EAAkB,SAAU,IACzEM,EAAYH,EAAS3c,EAAK4Q,QAAQ6B,OAAOxE,GAAQ2O,EAAmBC,EAQxE,OALAC,EAAY7iB,KAAKsV,IAAItV,KAAKgiB,IAAIxJ,EAAO3Q,GAAO4a,EAAkBI,GAAY,GAE1E9c,EAAKuc,aAAeA,EACpBvc,EAAK4Q,QAAQyL,OAAmCjM,EAA1BkM,EAAsB,GAAwCrO,EAAMhU,KAAK8iB,MAAMD,IAAa1M,EAAekM,EAAqBG,EAAS,IAAKH,GAE7Jtc,GA8sBL1F,QAAS,aAcXqc,KAAM,CAEJtJ,MAAO,IAEP8I,SAAS,EAETzY,GA5oBJ,SAAcsC,EAAMyW,GAElB,GAAIQ,GAAkBjX,EAAK4P,SAAS+F,UAAW,SAC7C,OAAO3V,EAGT,GAAIA,EAAKwW,SAAWxW,EAAKmT,YAAcnT,EAAK4W,kBAE1C,OAAO5W,EAGT,IAAI4S,EAAaJ,GAAcxS,EAAK4P,SAAS6C,OAAQzS,EAAK4P,SAASvD,UAAWoK,EAAQ/D,QAAS+D,EAAQ9D,kBAAmB3S,EAAK0W,eAE3HvD,EAAYnT,EAAKmT,UAAU/X,MAAM,KAAK,GACtC4hB,EAAoBvI,GAAqBtB,GACzCa,EAAYhU,EAAKmT,UAAU/X,MAAM,KAAK,IAAM,GAE5C6hB,EAAY,GAEhB,OAAQxG,EAAQyG,UACd,KAAK/C,GACH8C,EAAY,CAAC9J,EAAW6J,GACxB,MACF,KAAK7C,GACH8C,EAAYlD,GAAU5G,GACtB,MACF,KAAKgH,GACH8C,EAAYlD,GAAU5G,GAAW,GACjC,MACF,QACE8J,EAAYxG,EAAQyG,SAyDxB,OAtDAD,EAAUjH,SAAQ,SAAUmH,EAAMxY,GAChC,GAAIwO,IAAcgK,GAAQF,EAAUlb,SAAW4C,EAAQ,EACrD,OAAO3E,EAGTmT,EAAYnT,EAAKmT,UAAU/X,MAAM,KAAK,GACtC4hB,EAAoBvI,GAAqBtB,GAEzC,IAAI6B,EAAgBhV,EAAK4Q,QAAQ6B,OAC7B2K,EAAapd,EAAK4Q,QAAQvE,UAG1B8P,EAAQliB,KAAKkiB,MACbkB,EAA4B,SAAdlK,GAAwBgJ,EAAMnH,EAAcjG,OAASoN,EAAMiB,EAAWtO,OAAuB,UAAdqE,GAAyBgJ,EAAMnH,EAAclG,MAAQqN,EAAMiB,EAAWrO,QAAwB,QAAdoE,GAAuBgJ,EAAMnH,EAAcnG,QAAUsN,EAAMiB,EAAWxO,MAAsB,WAAduE,GAA0BgJ,EAAMnH,EAAcpG,KAAOuN,EAAMiB,EAAWvO,QAEjUyO,EAAgBnB,EAAMnH,EAAclG,MAAQqN,EAAMvJ,EAAW9D,MAC7DyO,EAAiBpB,EAAMnH,EAAcjG,OAASoN,EAAMvJ,EAAW7D,OAC/DyO,EAAerB,EAAMnH,EAAcpG,KAAOuN,EAAMvJ,EAAWhE,KAC3D6O,EAAkBtB,EAAMnH,EAAcnG,QAAUsN,EAAMvJ,EAAW/D,QAEjE6O,EAAoC,SAAdvK,GAAwBmK,GAA+B,UAAdnK,GAAyBoK,GAAgC,QAAdpK,GAAuBqK,GAA8B,WAAdrK,GAA0BsK,EAG3KlC,GAAuD,IAA1C,CAAC,MAAO,UAAUrV,QAAQiN,GAGvCwK,IAA0BlH,EAAQmH,iBAAmBrC,GAA4B,UAAdvH,GAAyBsJ,GAAiB/B,GAA4B,QAAdvH,GAAuBuJ,IAAmBhC,GAA4B,UAAdvH,GAAyBwJ,IAAiBjC,GAA4B,QAAdvH,GAAuByJ,GAGlQI,IAA8BpH,EAAQqH,0BAA4BvC,GAA4B,UAAdvH,GAAyBuJ,GAAkBhC,GAA4B,QAAdvH,GAAuBsJ,IAAkB/B,GAA4B,UAAdvH,GAAyByJ,IAAoBlC,GAA4B,QAAdvH,GAAuBwJ,GAElRO,EAAmBJ,GAAyBE,GAE5CR,GAAeK,GAAuBK,KAExC/d,EAAKwW,SAAU,GAEX6G,GAAeK,KACjBvK,EAAY8J,EAAUtY,EAAQ,IAG5BoZ,IACF/J,EAvJR,SAA8BA,GAC5B,MAAkB,QAAdA,EACK,QACgB,UAAdA,EACF,MAEFA,EAiJWgK,CAAqBhK,IAGnChU,EAAKmT,UAAYA,GAAaa,EAAY,IAAMA,EAAY,IAI5DhU,EAAK4Q,QAAQ6B,OAASjC,EAAS,GAAIxQ,EAAK4Q,QAAQ6B,OAAQoC,GAAiB7U,EAAK4P,SAAS6C,OAAQzS,EAAK4Q,QAAQvE,UAAWrM,EAAKmT,YAE5HnT,EAAO0V,GAAa1V,EAAK4P,SAAS+F,UAAW3V,EAAM,YAGhDA,GA4jBLkd,SAAU,OAKVxK,QAAS,EAOTC,kBAAmB,WAQnBiL,gBAAgB,EAQhBE,yBAAyB,GAU3BG,MAAO,CAEL5Q,MAAO,IAEP8I,SAAS,EAETzY,GArQJ,SAAesC,GACb,IAAImT,EAAYnT,EAAKmT,UACjBkH,EAAgBlH,EAAU/X,MAAM,KAAK,GACrCkgB,EAAgBtb,EAAK4Q,QACrB6B,EAAS6I,EAAc7I,OACvBpG,EAAYiP,EAAcjP,UAE1B4I,GAAwD,IAA9C,CAAC,OAAQ,SAAS/O,QAAQmU,GAEpC6D,GAA6D,IAA5C,CAAC,MAAO,QAAQhY,QAAQmU,GAO7C,OALA5H,EAAOwC,EAAU,OAAS,OAAS5I,EAAUgO,IAAkB6D,EAAiBzL,EAAOwC,EAAU,QAAU,UAAY,GAEvHjV,EAAKmT,UAAYsB,GAAqBtB,GACtCnT,EAAK4Q,QAAQ6B,OAAS9B,EAAc8B,GAE7BzS,IAkQPoJ,KAAM,CAEJiE,MAAO,IAEP8I,SAAS,EAETzY,GA9TJ,SAAcsC,GACZ,IAAKsZ,GAAmBtZ,EAAK4P,SAAS+F,UAAW,OAAQ,mBACvD,OAAO3V,EAGT,IAAIoT,EAAUpT,EAAK4Q,QAAQvE,UACvB8R,EAAQ7I,GAAKtV,EAAK4P,SAAS+F,WAAW,SAAUhH,GAClD,MAAyB,oBAAlBA,EAASyI,QACfxE,WAEH,GAAIQ,EAAQvE,OAASsP,EAAMvP,KAAOwE,EAAQtE,KAAOqP,EAAMpP,OAASqE,EAAQxE,IAAMuP,EAAMtP,QAAUuE,EAAQrE,MAAQoP,EAAMrP,KAAM,CAExH,IAAkB,IAAd9O,EAAKoJ,KACP,OAAOpJ,EAGTA,EAAKoJ,MAAO,EACZpJ,EAAKuW,WAAW,uBAAyB,OACpC,CAEL,IAAkB,IAAdvW,EAAKoJ,KACP,OAAOpJ,EAGTA,EAAKoJ,MAAO,EACZpJ,EAAKuW,WAAW,wBAAyB,EAG3C,OAAOvW,IAoTPoe,aAAc,CAEZ/Q,MAAO,IAEP8I,SAAS,EAETzY,GAtgCJ,SAAsBsC,EAAMyW,GAC1B,IAAIpC,EAAIoC,EAAQpC,EACZE,EAAIkC,EAAQlC,EACZ9B,EAASzS,EAAK4Q,QAAQ6B,OAItB4L,EAA8B/I,GAAKtV,EAAK4P,SAAS+F,WAAW,SAAUhH,GACxE,MAAyB,eAAlBA,EAASyI,QACfkH,qBACiCpQ,IAAhCmQ,GACFpI,QAAQC,KAAK,iIAEf,IAAIoI,OAAkDpQ,IAAhCmQ,EAA4CA,EAA8B5H,EAAQ6H,gBAEpGxR,EAAeF,EAAgB5M,EAAK4P,SAAS6C,QAC7C8L,EAAmBtU,EAAsB6C,GAGzCmC,EAAS,CACX4H,SAAUpE,EAAOoE,UAGfjG,EA9DN,SAA2B5Q,EAAMwe,GAC/B,IAAIlD,EAAgBtb,EAAK4Q,QACrB6B,EAAS6I,EAAc7I,OACvBpG,EAAYiP,EAAcjP,UAC1B0Q,EAAQ9iB,KAAK8iB,MACbZ,EAAQliB,KAAKkiB,MAEbsC,EAAU,SAAiBC,GAC7B,OAAOA,GAGLC,EAAiB5B,EAAM1Q,EAAUqD,OACjCkP,EAAc7B,EAAMtK,EAAO/C,OAE3B6L,GAA4D,IAA/C,CAAC,OAAQ,SAASrV,QAAQlG,EAAKmT,WAC5C0L,GAA+C,IAAjC7e,EAAKmT,UAAUjN,QAAQ,KAIrC4Y,EAAuBN,EAAwBjD,GAAcsD,GAH3CF,EAAiB,GAAMC,EAAc,EAGuC7B,EAAQZ,EAAjEsC,EACrCM,EAAqBP,EAAwBzB,EAAV0B,EAEvC,MAAO,CACL3P,KAAMgQ,EANWH,EAAiB,GAAM,GAAKC,EAAc,GAAM,IAMtBC,GAAeL,EAAc/L,EAAO3D,KAAO,EAAI2D,EAAO3D,MACjGF,IAAKmQ,EAAkBtM,EAAO7D,KAC9BC,OAAQkQ,EAAkBtM,EAAO5D,QACjCE,MAAO+P,EAAoBrM,EAAO1D,QAoCtBiQ,CAAkBhf,EAAMyB,OAAOwd,iBAAmB,IAAM5F,IAElElK,EAAc,WAANkF,EAAiB,MAAQ,SACjCjF,EAAc,UAANmF,EAAgB,OAAS,QAKjC2K,EAAmB7H,GAAyB,aAW5CvI,OAAO,EACPF,OAAM,EAqBV,GAhBIA,EAJU,WAAVO,EAG4B,SAA1BrC,EAAalB,UACRkB,EAAakE,aAAeJ,EAAQ/B,QAEpC0P,EAAiB9O,OAASmB,EAAQ/B,OAGrC+B,EAAQhC,IAIZE,EAFU,UAAVM,EAC4B,SAA1BtC,EAAalB,UACPkB,EAAaiE,YAAcH,EAAQ7B,OAEnCwP,EAAiB7O,MAAQkB,EAAQ7B,MAGpC6B,EAAQ9B,KAEbwP,GAAmBY,EACrBjQ,EAAOiQ,GAAoB,eAAiBpQ,EAAO,OAASF,EAAM,SAClEK,EAAOE,GAAS,EAChBF,EAAOG,GAAS,EAChBH,EAAO2I,WAAa,gBACf,CAEL,IAAIuH,EAAsB,WAAVhQ,GAAsB,EAAI,EACtCiQ,EAAuB,UAAVhQ,GAAqB,EAAI,EAC1CH,EAAOE,GAASP,EAAMuQ,EACtBlQ,EAAOG,GAASN,EAAOsQ,EACvBnQ,EAAO2I,WAAazI,EAAQ,KAAOC,EAIrC,IAAImH,EAAa,CACf8I,cAAerf,EAAKmT,WAQtB,OAJAnT,EAAKuW,WAAa/F,EAAS,GAAI+F,EAAYvW,EAAKuW,YAChDvW,EAAKiP,OAASuB,EAAS,GAAIvB,EAAQjP,EAAKiP,QACxCjP,EAAKsW,YAAc9F,EAAS,GAAIxQ,EAAK4Q,QAAQyL,MAAOrc,EAAKsW,aAElDtW,GAo7BLse,iBAAiB,EAMjBjK,EAAG,SAMHE,EAAG,SAkBL+K,WAAY,CAEVjS,MAAO,IAEP8I,SAAS,EAETzY,GAzpCJ,SAAoBsC,GApBpB,IAAuB1F,EAASic,EAoC9B,OAXA4C,GAAUnZ,EAAK4P,SAAS6C,OAAQzS,EAAKiP,QAzBhB3U,EA6BP0F,EAAK4P,SAAS6C,OA7BE8D,EA6BMvW,EAAKuW,WA5BzCra,OAAOqX,KAAKgD,GAAYP,SAAQ,SAAUH,IAE1B,IADFU,EAAWV,GAErBvb,EAAQ6G,aAAa0U,EAAMU,EAAWV,IAEtCvb,EAAQqd,gBAAgB9B,MA0BxB7V,EAAKuc,cAAgBrgB,OAAOqX,KAAKvT,EAAKsW,aAAavU,QACrDoX,GAAUnZ,EAAKuc,aAAcvc,EAAKsW,aAG7BtW,GA2oCLuf,OA9nCJ,SAA0BlT,EAAWoG,EAAQgE,EAAS+I,EAAiBtL,GAErE,IAAIY,EAAmBb,GAAoBC,EAAOzB,EAAQpG,EAAWoK,EAAQC,eAKzEvD,EAAYD,GAAqBuD,EAAQtD,UAAW2B,EAAkBrC,EAAQpG,EAAWoK,EAAQd,UAAUgB,KAAKhE,kBAAmB8D,EAAQd,UAAUgB,KAAKjE,SAQ9J,OANAD,EAAOtR,aAAa,cAAegS,GAInCgG,GAAU1G,EAAQ,CAAEoE,SAAUJ,EAAQC,cAAgB,QAAU,aAEzDD,GAsnCL6H,qBAAiBpQ,KAuGjBuR,GAAS,WASX,SAASA,EAAOpT,EAAWoG,GACzB,IAAInZ,EAAQC,KAERkd,EAAUlY,UAAUwD,OAAS,QAAsBmM,IAAjB3P,UAAU,GAAmBA,UAAU,GAAK,GAClFoR,EAAepW,KAAMkmB,GAErBlmB,KAAKqf,eAAiB,WACpB,OAAO8G,sBAAsBpmB,EAAM8c,SAIrC7c,KAAK6c,OAASpL,EAASzR,KAAK6c,OAAO3R,KAAKlL,OAGxCA,KAAKkd,QAAUjG,EAAS,GAAIiP,EAAOtE,SAAU1E,GAG7Cld,KAAK2a,MAAQ,CACXmC,aAAa,EACbS,WAAW,EACX0B,cAAe,IAIjBjf,KAAK8S,UAAYA,GAAaA,EAAU1O,OAAS0O,EAAU,GAAKA,EAChE9S,KAAKkZ,OAASA,GAAUA,EAAO9U,OAAS8U,EAAO,GAAKA,EAGpDlZ,KAAKkd,QAAQd,UAAY,GACzBzZ,OAAOqX,KAAK/C,EAAS,GAAIiP,EAAOtE,SAASxF,UAAWc,EAAQd,YAAYK,SAAQ,SAAUoB,GACxF9d,EAAMmd,QAAQd,UAAUyB,GAAQ5G,EAAS,GAAIiP,EAAOtE,SAASxF,UAAUyB,IAAS,GAAIX,EAAQd,UAAYc,EAAQd,UAAUyB,GAAQ,OAIpI7d,KAAKoc,UAAYzZ,OAAOqX,KAAKha,KAAKkd,QAAQd,WAAWnC,KAAI,SAAU4D,GACjE,OAAO5G,EAAS,CACd4G,KAAMA,GACL9d,EAAMmd,QAAQd,UAAUyB,OAG5B1D,MAAK,SAAUC,EAAGC,GACjB,OAAOD,EAAEtG,MAAQuG,EAAEvG,SAOrB9T,KAAKoc,UAAUK,SAAQ,SAAUwJ,GAC3BA,EAAgBrJ,SAAW9K,EAAWmU,EAAgBD,SACxDC,EAAgBD,OAAOjmB,EAAM+S,UAAW/S,EAAMmZ,OAAQnZ,EAAMmd,QAAS+I,EAAiBlmB,EAAM4a,UAKhG3a,KAAK6c,SAEL,IAAIsC,EAAgBnf,KAAKkd,QAAQiC,cAC7BA,GAEFnf,KAAKof,uBAGPpf,KAAK2a,MAAMwE,cAAgBA,EAqD7B,OA9CA7I,EAAY4P,EAAQ,CAAC,CACnBpP,IAAK,SACL9T,MAAO,WACL,OAAO6Z,GAAO/Z,KAAK9C,QAEpB,CACD8W,IAAK,UACL9T,MAAO,WACL,OAAOmb,GAAQrb,KAAK9C,QAErB,CACD8W,IAAK,uBACL9T,MAAO,WACL,OAAOoc,GAAqBtc,KAAK9C,QAElC,CACD8W,IAAK,wBACL9T,MAAO,WACL,OAAOsb,GAAsBxb,KAAK9C,UA4B/BkmB,EA7HI,GAqJbA,GAAOE,OAA2B,oBAAXle,OAAyBA,OAASme,QAAQC,YACjEJ,GAAO5F,WAAaA,GACpB4F,GAAOtE,SAAWA,GCniFlB,IAAM3c,GAA2B,WAK3BC,GAA2BhF,EAAEiE,GAAGc,IAOhCshB,GAA2B,IAAIljB,OAAUmjB,YAgCzC7d,GAAU,CACdiQ,OAAe,EACfwE,MAAe,EACfqJ,SAAe,eACf3T,UAAe,SACf4T,QAAe,UACfC,aAAe,MAGXzd,GAAc,CAClB0P,OAAe,2BACfwE,KAAe,UACfqJ,SAAe,mBACf3T,UAAe,mBACf4T,QAAe,SACfC,aAAe,iBASXC,GAAAA,WACJ,SAAAA,EAAY7lB,EAASyB,GACnBxC,KAAKoF,SAAYrE,EACjBf,KAAK6mB,QAAY,KACjB7mB,KAAK+J,QAAY/J,KAAKgK,WAAWxH,GACjCxC,KAAK8mB,MAAY9mB,KAAK+mB,kBACtB/mB,KAAKgnB,UAAYhnB,KAAKinB,gBAEtBjnB,KAAKwK,gDAmBPvD,OAAA,WACE,IAAIjH,KAAKoF,SAAS8hB,WAAYhnB,EAAEF,KAAKoF,UAAUc,SAzEhB,YAyE/B,CAIA,IAAMihB,EAAWjnB,EAAEF,KAAK8mB,OAAO5gB,SA5EA,QA8E/B0gB,EAASQ,cAELD,GAIJnnB,KAAK8P,MAAK,OAGZA,KAAA,SAAKuX,GACH,QADsB,IAAnBA,IAAAA,GAAY,KACXrnB,KAAKoF,SAAS8hB,UAAYhnB,EAAEF,KAAKoF,UAAUc,SAzFhB,aAyFiDhG,EAAEF,KAAK8mB,OAAO5gB,SAxF/D,SAwF/B,CAIA,IAAMgH,EAAgB,CACpBA,cAAelN,KAAKoF,UAEhBkiB,EAAYpnB,EAAE8F,MAvGR,mBAuG0BkH,GAChCrH,EAAS+gB,EAASW,sBAAsBvnB,KAAKoF,UAInD,GAFAlF,EAAE2F,GAAQ7D,QAAQslB,IAEdA,EAAU7hB,qBAAd,CAKA,IAAKzF,KAAKgnB,WAAaK,EAAW,CAKhC,GAAsB,oBAAXnB,GACT,MAAM,IAAIjiB,UAAU,oEAGtB,IAAIujB,EAAmBxnB,KAAKoF,SAEG,WAA3BpF,KAAK+J,QAAQ+I,UACf0U,EAAmB3hB,EACVzF,EAAK+B,UAAUnC,KAAK+J,QAAQ+I,aACrC0U,EAAmBxnB,KAAK+J,QAAQ+I,UAGa,oBAAlC9S,KAAK+J,QAAQ+I,UAAU1O,SAChCojB,EAAmBxnB,KAAK+J,QAAQ+I,UAAU,KAOhB,iBAA1B9S,KAAK+J,QAAQ0c,UACfvmB,EAAE2F,GAAQ+H,SA9HiB,mBAgI7B5N,KAAK6mB,QAAU,IAAIX,GAAOsB,EAAkBxnB,KAAK8mB,MAAO9mB,KAAKynB,oBAO3D,iBAAkB7mB,SAAS8C,iBACuB,IAAlDxD,EAAE2F,GAAQC,QAnIa,eAmIgB0C,QACzCtI,EAAEU,SAAS4R,MAAM7E,WAAW9G,GAAG,YAAa,KAAM3G,EAAEwnB,MAGtD1nB,KAAKoF,SAASsC,QACd1H,KAAKoF,SAASwC,aAAa,iBAAiB,GAE5C1H,EAAEF,KAAK8mB,OAAOjf,YApJiB,QAqJ/B3H,EAAE2F,GACCgC,YAtJ4B,QAuJ5B7F,QAAQ9B,EAAE8F,MA9JA,oBA8JmBkH,SAGlC2C,KAAA,WACE,IAAI7P,KAAKoF,SAAS8hB,WAAYhnB,EAAEF,KAAKoF,UAAUc,SA5JhB,aA4JkDhG,EAAEF,KAAK8mB,OAAO5gB,SA3JhE,QA2J/B,CAIA,IAAMgH,EAAgB,CACpBA,cAAelN,KAAKoF,UAEhBuiB,EAAYznB,EAAE8F,MA5KR,mBA4K0BkH,GAChCrH,EAAS+gB,EAASW,sBAAsBvnB,KAAKoF,UAEnDlF,EAAE2F,GAAQ7D,QAAQ2lB,GAEdA,EAAUliB,uBAIVzF,KAAK6mB,SACP7mB,KAAK6mB,QAAQ1I,UAGfje,EAAEF,KAAK8mB,OAAOjf,YA/KiB,QAgL/B3H,EAAE2F,GACCgC,YAjL4B,QAkL5B7F,QAAQ9B,EAAE8F,MA3LC,qBA2LmBkH,SAGnCvH,QAAA,WACEzF,EAAE0F,WAAW5F,KAAKoF,SA5MW,eA6M7BlF,EAAEF,KAAKoF,UAAUoG,IA5MN,gBA6MXxL,KAAKoF,SAAW,KAChBpF,KAAK8mB,MAAQ,KACQ,OAAjB9mB,KAAK6mB,UACP7mB,KAAK6mB,QAAQ1I,UACbne,KAAK6mB,QAAU,SAInBhK,OAAA,WACE7c,KAAKgnB,UAAYhnB,KAAKinB,gBACD,OAAjBjnB,KAAK6mB,SACP7mB,KAAK6mB,QAAQxH,oBAMjB7U,mBAAA,WAAqB,IAAAzK,EAAAC,KACnBE,EAAEF,KAAKoF,UAAUyB,GAhNJ,qBAgNoB,SAACvC,GAChCA,EAAMsC,iBACNtC,EAAMsjB,kBACN7nB,EAAKkH,eAIT+C,WAAA,SAAWxH,GAaT,OAZAA,EAAMiJ,EAAAA,EAAAA,EAAA,GACDzL,KAAK6nB,YAAYlf,SACjBzI,EAAEF,KAAKoF,UAAUqB,QACjBjE,GAGLpC,EAAKkC,gBACH2C,GACAzC,EACAxC,KAAK6nB,YAAY3e,aAGZ1G,KAGTukB,gBAAA,WACE,IAAK/mB,KAAK8mB,MAAO,CACf,IAAMjhB,EAAS+gB,EAASW,sBAAsBvnB,KAAKoF,UAE/CS,IACF7F,KAAK8mB,MAAQjhB,EAAOzE,cA7NG,mBAgO3B,OAAOpB,KAAK8mB,SAGdgB,cAAA,WACE,IAAMC,EAAkB7nB,EAAEF,KAAKoF,SAASrB,YACpC6V,EA/NoB,eA6OxB,OAXImO,EAAgB7hB,SAhPW,UAiP7B0T,EAAY1Z,EAAEF,KAAK8mB,OAAO5gB,SA9OG,uBAUP,UADA,YAwOb6hB,EAAgB7hB,SAnPI,aAoP7B0T,EArOsB,cAsObmO,EAAgB7hB,SApPI,YAqP7B0T,EAtOsB,aAuOb1Z,EAAEF,KAAK8mB,OAAO5gB,SArPM,yBAsP7B0T,EA1OsB,cA4OjBA,KAGTqN,cAAA,WACE,OAAO/mB,EAAEF,KAAKoF,UAAUU,QAAQ,WAAW0C,OAAS,KAGtDwf,WAAA,WAAa,IAAAnc,EAAA7L,KACL4Y,EAAS,GAef,MAbmC,mBAAxB5Y,KAAK+J,QAAQ6O,OACtBA,EAAOzU,GAAK,SAACsC,GAMX,OALAA,EAAK4Q,QAAL5L,EAAAA,EAAA,GACKhF,EAAK4Q,SACLxL,EAAK9B,QAAQ6O,OAAOnS,EAAK4Q,QAASxL,EAAKzG,WAAa,IAGlDqB,GAGTmS,EAAOA,OAAS5Y,KAAK+J,QAAQ6O,OAGxBA,KAGT6O,iBAAA,WACE,IAAMd,EAAe,CACnB/M,UAAW5Z,KAAK8nB,gBAChB1L,UAAW,CACTxD,OAAQ5Y,KAAKgoB,aACb5K,KAAM,CACJR,QAAS5c,KAAK+J,QAAQqT,MAExB8E,gBAAiB,CACf9I,kBAAmBpZ,KAAK+J,QAAQ0c,YAYtC,MAN6B,WAAzBzmB,KAAK+J,QAAQ2c,UACfC,EAAavK,UAAU2J,WAAa,CAClCnJ,SAAS,IAIbnR,EAAAA,EAAA,GACKkb,GACA3mB,KAAK+J,QAAQ4c,iBAMbrgB,iBAAP,SAAwB9D,GACtB,OAAOxC,KAAKuG,MAAK,WACf,IAAIE,EAAOvG,EAAEF,MAAMyG,KA3UQ,eAmV3B,GALKA,IACHA,EAAO,IAAImgB,EAAS5mB,KAHY,iBAAXwC,EAAsBA,EAAS,MAIpDtC,EAAEF,MAAMyG,KAhViB,cAgVFA,IAGH,iBAAXjE,EAAqB,CAC9B,GAA4B,oBAAjBiE,EAAKjE,GACd,MAAM,IAAIyB,UAAJ,oBAAkCzB,EAAlC,KAERiE,EAAKjE,YAKJ4kB,YAAP,SAAmB9iB,GACjB,IAAIA,GApVyB,IAoVfA,EAAMoI,QACH,UAAfpI,EAAM+C,MAxVqB,IAwVD/C,EAAMoI,OAMlC,IAFA,IAAMub,EAAU,GAAG7f,MAAMtF,KAAKlC,SAASyH,iBArUZ,6BAuUlBC,EAAI,EAAGC,EAAM0f,EAAQzf,OAAQF,EAAIC,EAAKD,IAAK,CAClD,IAAMzC,EAAS+gB,EAASW,sBAAsBU,EAAQ3f,IAChD4f,EAAUhoB,EAAE+nB,EAAQ3f,IAAI7B,KAtWH,eAuWrByG,EAAgB,CACpBA,cAAe+a,EAAQ3f,IAOzB,GAJIhE,GAAwB,UAAfA,EAAM+C,OACjB6F,EAAcib,WAAa7jB,GAGxB4jB,EAAL,CAIA,IAAME,EAAeF,EAAQpB,MAC7B,GAAK5mB,EAAE2F,GAAQK,SA9Vc,WAkWzB5B,IAAyB,UAAfA,EAAM+C,MAChB,kBAAkB/D,KAAKgB,EAAMK,OAAOsD,UAA2B,UAAf3D,EAAM+C,MAnX/B,IAmXmD/C,EAAMoI,QAChFxM,EAAEsH,SAAS3B,EAAQvB,EAAMK,SAF7B,CAMA,IAAMgjB,EAAYznB,EAAE8F,MAlXV,mBAkX4BkH,GACtChN,EAAE2F,GAAQ7D,QAAQ2lB,GACdA,EAAUliB,uBAMV,iBAAkB7E,SAAS8C,iBAC7BxD,EAAEU,SAAS4R,MAAM7E,WAAWnC,IAAI,YAAa,KAAMtL,EAAEwnB,MAGvDO,EAAQ3f,GAAGV,aAAa,gBAAiB,SAErCsgB,EAAQrB,SACVqB,EAAQrB,QAAQ1I,UAGlBje,EAAEkoB,GAAcniB,YA1Xa,QA2X7B/F,EAAE2F,GACCI,YA5X0B,QA6X1BjE,QAAQ9B,EAAE8F,MAtYD,qBAsYqBkH,WAI9Bqa,sBAAP,SAA6BxmB,GAC3B,IAAI8E,EACE7E,EAAWZ,EAAKU,uBAAuBC,GAM7C,OAJIC,IACF6E,EAASjF,SAASQ,cAAcJ,IAG3B6E,GAAU9E,EAAQgD,cAIpBskB,uBAAP,SAA8B/jB,GAQ5B,KAAI,kBAAkBhB,KAAKgB,EAAMK,OAAOsD,SAtaX,KAuazB3D,EAAMoI,OAxamB,KAwaQpI,EAAMoI,QApad,KAqa1BpI,EAAMoI,OAtaoB,KAsaYpI,EAAMoI,OAC3CxM,EAAEoE,EAAMK,QAAQmB,QA/YO,kBA+YgB0C,SAAW+d,GAAejjB,KAAKgB,EAAMoI,UAI5E1M,KAAKknB,WAAYhnB,EAAEF,MAAMkG,SA7ZE,YA6Z/B,CAIA,IAAML,EAAW+gB,EAASW,sBAAsBvnB,MAC1CmnB,EAAWjnB,EAAE2F,GAAQK,SAjaI,QAma/B,GAAKihB,GArbwB,KAqbZ7iB,EAAMoI,MAAvB,CAOA,GAHApI,EAAMsC,iBACNtC,EAAMsjB,mBAEDT,GAAYA,IA5bY,KA4bC7iB,EAAMoI,OA3bP,KA2bmCpI,EAAMoI,OAMpE,OAlc2B,KA6bvBpI,EAAMoI,OACRxM,EAAE2F,EAAOzE,cArac,6BAqauBY,QAAQ,cAGxD9B,EAAEF,MAAMgC,QAAQ,SAIlB,IAAMsmB,EAAQ,GAAGlgB,MAAMtF,KAAK+C,EAAOwC,iBAxaR,gEAyaxBiH,QAAO,SAACiZ,GAAD,OAAUroB,EAAEqoB,GAAM3jB,GAAG,eAE/B,GAAqB,IAAjB0jB,EAAM9f,OAAV,CAIA,IAAI4C,EAAQkd,EAAM3b,QAAQrI,EAAMK,QAzcH,KA2czBL,EAAMoI,OAA8BtB,EAAQ,GAC9CA,IA3c2B,KA8czB9G,EAAMoI,OAAgCtB,EAAQkd,EAAM9f,OAAS,GAC/D4C,IAGEA,EAAQ,IACVA,EAAQ,GAGVkd,EAAMld,GAAO1D,oDA9Yb,MAjF6B,wCAqF7B,OAAOiB,uCAIP,OAAOO,SAtBL0d,GAsaN1mB,EAAEU,UACCiG,GAvdyB,+BAWG,2BA4cqB+f,GAASyB,wBAC1DxhB,GAxdyB,+BAaG,iBA2cc+f,GAASyB,wBACnDxhB,GAAM2hB,wDAAgD5B,GAASQ,aAC/DvgB,GA3duB,6BAYK,4BA+cmB,SAAUvC,GACxDA,EAAMsC,iBACNtC,EAAMsjB,kBACNhB,GAAStgB,iBAAiBxD,KAAK5C,EAAEF,MAAO,aAEzC6G,GAheuB,6BAaK,kBAmdkB,SAAC2F,GAC9CA,EAAEob,qBASN1nB,EAAEiE,GAAGc,IAAQ2hB,GAAStgB,iBACtBpG,EAAEiE,GAAGc,IAAM6B,YAAc8f,GACzB1mB,EAAEiE,GAAGc,IAAM8B,WAAa,WAEtB,OADA7G,EAAEiE,GAAGc,IAAQC,GACN0hB,GAAStgB,kBClgBlB,IAKMpB,GAAqBhF,EAAEiE,GAAF,MAGrBwE,GAAU,CACd8f,UAAW,EACX5f,UAAW,EACXnB,OAAW,EACXoI,MAAW,GAGP5G,GAAc,CAClBuf,SAAW,mBACX5f,SAAW,UACXnB,MAAW,UACXoI,KAAW,WAqCP4Y,GAAAA,WACJ,SAAAA,EAAY3nB,EAASyB,GACnBxC,KAAK+J,QAAuB/J,KAAKgK,WAAWxH,GAC5CxC,KAAKoF,SAAuBrE,EAC5Bf,KAAK2oB,QAAuB5nB,EAAQK,cAjBR,iBAkB5BpB,KAAK4oB,UAAuB,KAC5B5oB,KAAK6oB,UAAuB,EAC5B7oB,KAAK8oB,oBAAuB,EAC5B9oB,KAAK+oB,sBAAuB,EAC5B/oB,KAAKgP,kBAAuB,EAC5BhP,KAAKgpB,gBAAuB,6BAe9B/hB,OAAA,SAAOiG,GACL,OAAOlN,KAAK6oB,SAAW7oB,KAAK6P,OAAS7P,KAAK8P,KAAK5C,MAGjD4C,KAAA,SAAK5C,GAAe,IAAAnN,EAAAC,KAClB,IAAIA,KAAK6oB,WAAY7oB,KAAKgP,iBAA1B,CAII9O,EAAEF,KAAKoF,UAAUc,SAnDa,UAoDhClG,KAAKgP,kBAAmB,GAG1B,IAAMsY,EAAYpnB,EAAE8F,MArER,gBAqE0B,CACpCkH,cAAAA,IAGFhN,EAAEF,KAAKoF,UAAUpD,QAAQslB,GAErBtnB,KAAK6oB,UAAYvB,EAAU7hB,uBAI/BzF,KAAK6oB,UAAW,EAEhB7oB,KAAKipB,kBACLjpB,KAAKkpB,gBAELlpB,KAAKmpB,gBAELnpB,KAAKopB,kBACLppB,KAAKqpB,kBAELnpB,EAAEF,KAAKoF,UAAUyB,GArFI,yBAiBO,0BAuE1B,SAACvC,GAAD,OAAWvE,EAAK8P,KAAKvL,MAGvBpE,EAAEF,KAAK2oB,SAAS9hB,GAxFS,8BAwFmB,WAC1C3G,EAAEH,EAAKqF,UAAUjF,IA1FI,4BA0FuB,SAACmE,GACvCpE,EAAEoE,EAAMK,QAAQC,GAAG7E,EAAKqF,YAC1BrF,EAAKgpB,sBAAuB,SAKlC/oB,KAAKspB,eAAc,WAAA,OAAMvpB,EAAKwpB,aAAarc,WAG7C2C,KAAA,SAAKvL,GAAO,IAAAuH,EAAA7L,KAKV,GAJIsE,GACFA,EAAMsC,iBAGH5G,KAAK6oB,WAAY7oB,KAAKgP,iBAA3B,CAIA,IAAM2Y,EAAYznB,EAAE8F,MAtHR,iBA0HZ,GAFA9F,EAAEF,KAAKoF,UAAUpD,QAAQ2lB,GAEpB3nB,KAAK6oB,WAAYlB,EAAUliB,qBAAhC,CAIAzF,KAAK6oB,UAAW,EAChB,IAAMW,EAAatpB,EAAEF,KAAKoF,UAAUc,SA9GF,QA8HlC,GAdIsjB,IACFxpB,KAAKgP,kBAAmB,GAG1BhP,KAAKopB,kBACLppB,KAAKqpB,kBAELnpB,EAAEU,UAAU4K,IAnIG,oBAqIftL,EAAEF,KAAKoF,UAAUa,YAxHiB,QA0HlC/F,EAAEF,KAAKoF,UAAUoG,IArII,0BAsIrBtL,EAAEF,KAAK2oB,SAASnd,IAnIS,8BAqIrBge,EAAY,CACd,IAAMjoB,EAAsBnB,EAAKkB,iCAAiCtB,KAAKoF,UAEvElF,EAAEF,KAAKoF,UACJjF,IAAIC,EAAKC,gBAAgB,SAACiE,GAAD,OAAWuH,EAAK4d,WAAWnlB,MACpDD,qBAAqB9C,QAExBvB,KAAKypB,kBAIT9jB,QAAA,WACE,CAACuC,OAAQlI,KAAKoF,SAAUpF,KAAK2oB,SAC1BlM,SAAQ,SAACiN,GAAD,OAAiBxpB,EAAEwpB,GAAale,IA/KhC,gBAsLXtL,EAAEU,UAAU4K,IA9JG,oBAgKftL,EAAE0F,WAAW5F,KAAKoF,SAzLK,YA2LvBpF,KAAK+J,QAAuB,KAC5B/J,KAAKoF,SAAuB,KAC5BpF,KAAK2oB,QAAuB,KAC5B3oB,KAAK4oB,UAAuB,KAC5B5oB,KAAK6oB,SAAuB,KAC5B7oB,KAAK8oB,mBAAuB,KAC5B9oB,KAAK+oB,qBAAuB,KAC5B/oB,KAAKgP,iBAAuB,KAC5BhP,KAAKgpB,gBAAuB,QAG9BW,aAAA,WACE3pB,KAAKmpB,mBAKPnf,WAAA,SAAWxH,GAMT,OALAA,EAAMiJ,EAAAA,EAAA,GACD9C,IACAnG,GAELpC,EAAKkC,gBAnNkB,QAmNIE,EAAQ0G,IAC5B1G,KAGTonB,2BAAA,WAA6B,IAAA5d,EAAAhM,KAC3B,GAA8B,WAA1BA,KAAK+J,QAAQ0e,SAAuB,CACtC,IAAMoB,EAAqB3pB,EAAE8F,MAlMT,0BAqMpB,GADA9F,EAAEF,KAAKoF,UAAUpD,QAAQ6nB,GACrBA,EAAmBC,iBACrB,OAGF9pB,KAAKoF,SAASmC,UAAUkB,IAvLQ,gBAyLhC,IAAMshB,EAA0B3pB,EAAKkB,iCAAiCtB,KAAKoF,UAE3ElF,EAAEF,KAAKoF,UAAUjF,IAAIC,EAAKC,gBAAgB,WACxC2L,EAAK5G,SAASmC,UAAUlB,OA5LM,mBA8L7BhC,qBAAqB0lB,GACxB/pB,KAAKoF,SAASsC,aAEd1H,KAAK6P,UAIT0Z,aAAA,SAAarc,GAAe,IAAAa,EAAA/N,KACpBwpB,EAAatpB,EAAEF,KAAKoF,UAAUc,SAxMF,QAyM5B8jB,EAAYhqB,KAAK2oB,QAAU3oB,KAAK2oB,QAAQvnB,cApMlB,eAoMuD,KAE9EpB,KAAKoF,SAASrB,YACf/D,KAAKoF,SAASrB,WAAW1B,WAAa2R,KAAKiW,cAE7CrpB,SAAS4R,KAAK0X,YAAYlqB,KAAKoF,UAGjCpF,KAAKoF,SAASiL,MAAMqW,QAAU,QAC9B1mB,KAAKoF,SAASgZ,gBAAgB,eAC9Bpe,KAAKoF,SAASwC,aAAa,cAAc,GAErC1H,EAAEF,KAAK2oB,SAASziB,SAzNc,4BAyNqB8jB,EACrDA,EAAU9U,UAAY,EAEtBlV,KAAKoF,SAAS8P,UAAY,EAGxBsU,GACFppB,EAAK0B,OAAO9B,KAAKoF,UAGnBlF,EAAEF,KAAKoF,UAAUwI,SA9NiB,QAgO9B5N,KAAK+J,QAAQrC,OACf1H,KAAKmqB,gBAGP,IAAMC,EAAalqB,EAAE8F,MAlPR,iBAkP2B,CACtCkH,cAAAA,IAGImd,EAAqB,WACrBtc,EAAKhE,QAAQrC,OACfqG,EAAK3I,SAASsC,QAEhBqG,EAAKiB,kBAAmB,EACxB9O,EAAE6N,EAAK3I,UAAUpD,QAAQooB,IAG3B,GAAIZ,EAAY,CACd,IAAMjoB,EAAsBnB,EAAKkB,iCAAiCtB,KAAK2oB,SAEvEzoB,EAAEF,KAAK2oB,SACJxoB,IAAIC,EAAKC,eAAgBgqB,GACzBhmB,qBAAqB9C,QAExB8oB,OAIJF,cAAA,WAAgB,IAAAG,EAAAtqB,KACdE,EAAEU,UACC4K,IA1QY,oBA2QZ3E,GA3QY,oBA2QM,SAACvC,GACd1D,WAAa0D,EAAMK,QACnB2lB,EAAKllB,WAAad,EAAMK,QACsB,IAA9CzE,EAAEoqB,EAAKllB,UAAUmlB,IAAIjmB,EAAMK,QAAQ6D,QACrC8hB,EAAKllB,SAASsC,cAKtB0hB,gBAAA,WAAkB,IAAAoB,EAAAxqB,KACZA,KAAK6oB,SACP3oB,EAAEF,KAAKoF,UAAUyB,GAnRI,4BAmRsB,SAACvC,GACtCkmB,EAAKzgB,QAAQlB,UA5SE,KA4SUvE,EAAMoI,OACjCpI,EAAMsC,iBACN4jB,EAAK3a,QACK2a,EAAKzgB,QAAQlB,UA/SN,KA+SkBvE,EAAMoI,OACzC8d,EAAKZ,gCAGC5pB,KAAK6oB,UACf3oB,EAAEF,KAAKoF,UAAUoG,IA5RI,+BAgSzB6d,gBAAA,WAAkB,IAAAoB,EAAAzqB,KACZA,KAAK6oB,SACP3oB,EAAEgI,QAAQrB,GApSE,mBAoSe,SAACvC,GAAD,OAAWmmB,EAAKd,aAAarlB,MAExDpE,EAAEgI,QAAQsD,IAtSE,sBA0ShBie,WAAA,WAAa,IAAAiB,EAAA1qB,KACXA,KAAKoF,SAASiL,MAAMqW,QAAU,OAC9B1mB,KAAKoF,SAASwC,aAAa,eAAe,GAC1C5H,KAAKoF,SAASgZ,gBAAgB,cAC9Bpe,KAAKgP,kBAAmB,EACxBhP,KAAKspB,eAAc,WACjBppB,EAAEU,SAAS4R,MAAMvM,YAtSe,cAuShCykB,EAAKC,oBACLD,EAAKE,kBACL1qB,EAAEwqB,EAAKtlB,UAAUpD,QAvTL,yBA2ThB6oB,gBAAA,WACM7qB,KAAK4oB,YACP1oB,EAAEF,KAAK4oB,WAAWviB,SAClBrG,KAAK4oB,UAAY,SAIrBU,cAAA,SAActK,GAAU,IAAA8L,EAAA9qB,KAChB+qB,EAAU7qB,EAAEF,KAAKoF,UAAUc,SApTC,QAAA,OAqTZ,GAEtB,GAAIlG,KAAK6oB,UAAY7oB,KAAK+J,QAAQ0e,SAAU,CA4B1C,GA3BAzoB,KAAK4oB,UAAYhoB,SAASoqB,cAAc,OACxChrB,KAAK4oB,UAAUqC,UA3TiB,iBA6T5BF,GACF/qB,KAAK4oB,UAAUrhB,UAAUkB,IAAIsiB,GAG/B7qB,EAAEF,KAAK4oB,WAAWsC,SAAStqB,SAAS4R,MAEpCtS,EAAEF,KAAKoF,UAAUyB,GA3UE,0BA2UsB,SAACvC,GACpCwmB,EAAK/B,qBACP+B,EAAK/B,sBAAuB,EAG1BzkB,EAAMK,SAAWL,EAAM2M,eAI3B6Z,EAAKlB,gCAGHmB,GACF3qB,EAAK0B,OAAO9B,KAAK4oB,WAGnB1oB,EAAEF,KAAK4oB,WAAWhb,SAhVc,SAkV3BoR,EACH,OAGF,IAAK+L,EAEH,YADA/L,IAIF,IAAMmM,EAA6B/qB,EAAKkB,iCAAiCtB,KAAK4oB,WAE9E1oB,EAAEF,KAAK4oB,WACJzoB,IAAIC,EAAKC,eAAgB2e,GACzB3a,qBAAqB8mB,QACnB,IAAKnrB,KAAK6oB,UAAY7oB,KAAK4oB,UAAW,CAC3C1oB,EAAEF,KAAK4oB,WAAW3iB,YAjWc,QAmWhC,IAAMmlB,EAAiB,WACrBN,EAAKD,kBACD7L,GACFA,KAIJ,GAAI9e,EAAEF,KAAKoF,UAAUc,SA3WW,QA2WgB,CAC9C,IAAMilB,EAA6B/qB,EAAKkB,iCAAiCtB,KAAK4oB,WAE9E1oB,EAAEF,KAAK4oB,WACJzoB,IAAIC,EAAKC,eAAgB+qB,GACzB/mB,qBAAqB8mB,QAExBC,SAEOpM,GACTA,OASJmK,cAAA,WACE,IAAMkC,EACJrrB,KAAKoF,SAASkmB,aAAe1qB,SAAS8C,gBAAgB+T,cAEnDzX,KAAK8oB,oBAAsBuC,IAC9BrrB,KAAKoF,SAASiL,MAAMkb,YAAiBvrB,KAAKgpB,gBAA1C,MAGEhpB,KAAK8oB,qBAAuBuC,IAC9BrrB,KAAKoF,SAASiL,MAAMmb,aAAkBxrB,KAAKgpB,gBAA3C,SAIJ2B,kBAAA,WACE3qB,KAAKoF,SAASiL,MAAMkb,YAAc,GAClCvrB,KAAKoF,SAASiL,MAAMmb,aAAe,MAGrCvC,gBAAA,WACE,IAAMjU,EAAOpU,SAAS4R,KAAK9B,wBAC3B1Q,KAAK8oB,mBAAqBpoB,KAAK8iB,MAAMxO,EAAKO,KAAOP,EAAKQ,OAAStN,OAAOwQ,WACtE1Y,KAAKgpB,gBAAkBhpB,KAAKyrB,wBAG9BvC,cAAA,WAAgB,IAAAwC,EAAA1rB,KACd,GAAIA,KAAK8oB,mBAAoB,CAG3B,IAAM6C,EAAe,GAAGvjB,MAAMtF,KAAKlC,SAASyH,iBAlZlB,sDAmZpBujB,EAAgB,GAAGxjB,MAAMtF,KAAKlC,SAASyH,iBAlZnB,gBAqZ1BnI,EAAEyrB,GAAcplB,MAAK,SAAC6E,EAAOrK,GAC3B,IAAM8qB,EAAgB9qB,EAAQsP,MAAMmb,aAC9BM,EAAoB5rB,EAAEa,GAASS,IAAI,iBACzCtB,EAAEa,GACC0F,KAAK,gBAAiBolB,GACtBrqB,IAAI,gBAAoBG,WAAWmqB,GAAqBJ,EAAK1C,gBAFhE,SAMF9oB,EAAE0rB,GAAerlB,MAAK,SAAC6E,EAAOrK,GAC5B,IAAMgrB,EAAehrB,EAAQsP,MAAM4K,YAC7B+Q,EAAmB9rB,EAAEa,GAASS,IAAI,gBACxCtB,EAAEa,GACC0F,KAAK,eAAgBslB,GACrBvqB,IAAI,eAAmBG,WAAWqqB,GAAoBN,EAAK1C,gBAF9D,SAMF,IAAM6C,EAAgBjrB,SAAS4R,KAAKnC,MAAMmb,aACpCM,EAAoB5rB,EAAEU,SAAS4R,MAAMhR,IAAI,iBAC/CtB,EAAEU,SAAS4R,MACR/L,KAAK,gBAAiBolB,GACtBrqB,IAAI,gBAAoBG,WAAWmqB,GAAqB9rB,KAAKgpB,gBAFhE,MAKF9oB,EAAEU,SAAS4R,MAAM5E,SAxbiB,iBA2bpCgd,gBAAA,WAEE,IAAMe,EAAe,GAAGvjB,MAAMtF,KAAKlC,SAASyH,iBApbhB,sDAqb5BnI,EAAEyrB,GAAcplB,MAAK,SAAC6E,EAAOrK,GAC3B,IAAMoY,EAAUjZ,EAAEa,GAAS0F,KAAK,iBAChCvG,EAAEa,GAAS6E,WAAW,iBACtB7E,EAAQsP,MAAMmb,aAAerS,GAAoB,MAInD,IAAM8S,EAAW,GAAG7jB,MAAMtF,KAAKlC,SAASyH,iBA3bZ,gBA4b5BnI,EAAE+rB,GAAU1lB,MAAK,SAAC6E,EAAOrK,GACvB,IAAMmrB,EAAShsB,EAAEa,GAAS0F,KAAK,gBACT,oBAAXylB,GACThsB,EAAEa,GAASS,IAAI,eAAgB0qB,GAAQtmB,WAAW,mBAKtD,IAAMuT,EAAUjZ,EAAEU,SAAS4R,MAAM/L,KAAK,iBACtCvG,EAAEU,SAAS4R,MAAM5M,WAAW,iBAC5BhF,SAAS4R,KAAKnC,MAAMmb,aAAerS,GAAoB,MAGzDsS,mBAAA,WACE,IAAMU,EAAYvrB,SAASoqB,cAAc,OACzCmB,EAAUlB,UAvdwB,0BAwdlCrqB,SAAS4R,KAAK0X,YAAYiC,GAC1B,IAAMC,EAAiBD,EAAUzb,wBAAwByF,MAAQgW,EAAU3U,YAE3E,OADA5W,SAAS4R,KAAKgM,YAAY2N,GACnBC,KAKF9lB,iBAAP,SAAwB9D,EAAQ0K,GAC9B,OAAOlN,KAAKuG,MAAK,WACf,IAAIE,EAAOvG,EAAEF,MAAMyG,KApgBE,YAqgBfsD,EAAO0B,EAAAA,EAAAA,EAAA,GACR9C,IACAzI,EAAEF,MAAMyG,QACU,iBAAXjE,GAAuBA,EAASA,EAAS,IAQrD,GALKiE,IACHA,EAAO,IAAIiiB,EAAM1oB,KAAM+J,GACvB7J,EAAEF,MAAMyG,KA7gBW,WA6gBIA,IAGH,iBAAXjE,EAAqB,CAC9B,GAA4B,oBAAjBiE,EAAKjE,GACd,MAAM,IAAIyB,UAAJ,oBAAkCzB,EAAlC,KAERiE,EAAKjE,GAAQ0K,QACJnD,EAAQ+F,MACjBrJ,EAAKqJ,KAAK5C,+CAhdd,MAvEuB,wCA2EvB,OAAOvE,SApBL+f,GA4eNxoB,EAAEU,UAAUiG,GAngBc,0BAYM,yBAuf2B,SAAUvC,GAAO,IACtEK,EADsE0nB,EAAArsB,KAEpEgB,EAAWZ,EAAKU,uBAAuBd,MAEzCgB,IACF2D,EAAS/D,SAASQ,cAAcJ,IAGlC,IAAMwB,EAAStC,EAAEyE,GAAQ8B,KA1iBA,YA2iBrB,SADWgF,EAAAA,EAAA,GAERvL,EAAEyE,GAAQ8B,QACVvG,EAAEF,MAAMyG,QAGM,MAAjBzG,KAAKiI,SAAoC,SAAjBjI,KAAKiI,SAC/B3D,EAAMsC,iBAGR,IAAMwK,EAAUlR,EAAEyE,GAAQxE,IA7hBZ,iBA6hB4B,SAACmnB,GACrCA,EAAU7hB,sBAKd2L,EAAQjR,IApiBM,mBAoiBY,WACpBD,EAAEmsB,GAAMznB,GAAG,aACbynB,EAAK3kB,cAKXghB,GAAMpiB,iBAAiBxD,KAAK5C,EAAEyE,GAASnC,EAAQxC,SASjDE,EAAEiE,GAAF,MAAaukB,GAAMpiB,iBACnBpG,EAAEiE,GAAF,MAAW2C,YAAc4hB,GACzBxoB,EAAEiE,GAAF,MAAW4C,WAAa,WAEtB,OADA7G,EAAEiE,GAAF,MAAae,GACNwjB,GAAMpiB,kBCzlBf,IAAMgmB,GAAW,CACf,aACA,OACA,OACA,WACA,WACA,SACA,MACA,cAKWC,GAAmB,CAE9BC,IAAK,CAAC,QAAS,MAAO,KAAM,OAAQ,OAJP,kBAK7BpS,EAAG,CAAC,SAAU,OAAQ,QAAS,OAC/BF,KAAM,GACNG,EAAG,GACHoS,GAAI,GACJC,IAAK,GACLC,KAAM,GACNC,IAAK,GACLC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJ9kB,EAAG,GACH+kB,IAAK,CAAC,MAAO,SAAU,MAAO,QAAS,QAAS,UAChDC,GAAI,GACJC,GAAI,GACJC,EAAG,GACHC,IAAK,GACLC,EAAG,GACHC,MAAO,GACPC,KAAM,GACNC,IAAK,GACLC,IAAK,GACLC,OAAQ,GACRC,EAAG,GACHC,GAAI,IAQAC,GAAmB,8DAOnBC,GAAmB,qIAyBlB,SAASC,GAAaC,EAAYC,EAAWC,GAClD,GAA0B,IAAtBF,EAAW7lB,OACb,OAAO6lB,EAGT,GAAIE,GAAoC,mBAAfA,EACvB,OAAOA,EAAWF,GAQpB,IALA,IACMG,GADY,IAAItmB,OAAOumB,WACKC,gBAAgBL,EAAY,aACxDM,EAAgBhsB,OAAOqX,KAAKsU,GAC5BrC,EAAW,GAAG7jB,MAAMtF,KAAK0rB,EAAgBhc,KAAKnK,iBAAiB,MAZPumB,EAAA,SAcrDtmB,EAAOC,GACd,IAAMyQ,EAAKiT,EAAS3jB,GACdumB,EAAS7V,EAAG3G,SAASjP,cAE3B,IAA0D,IAAtDurB,EAAchiB,QAAQqM,EAAG3G,SAASjP,eAGpC,OAFA4V,EAAGjV,WAAWya,YAAYxF,GAE1B,WAGF,IAAM8V,EAAgB,GAAG1mB,MAAMtF,KAAKkW,EAAGgE,YACjC+R,EAAwB,GAAGrO,OAAO4N,EAAU,MAAQ,GAAIA,EAAUO,IAAW,IAEnFC,EAAcrS,SAAQ,SAACnM,IAlD3B,SAA0BA,EAAM0e,GAC9B,IAAMC,EAAW3e,EAAK+B,SAASjP,cAE/B,IAAgD,IAA5C4rB,EAAqBriB,QAAQsiB,GAC/B,OAAoC,IAAhC3C,GAAS3f,QAAQsiB,IACZ/sB,QAAQoO,EAAK4e,UAAU/rB,MAAM+qB,KAAqB5d,EAAK4e,UAAU/rB,MAAMgrB,KASlF,IAHA,IAAMgB,EAASH,EAAqB1f,QAAO,SAAC8f,GAAD,OAAeA,aAAqB/rB,UAGtEiF,EAAI,EAAGC,EAAM4mB,EAAO3mB,OAAQF,EAAIC,EAAKD,IAC5C,GAAI2mB,EAAS9rB,MAAMgsB,EAAO7mB,IACxB,OAAO,EAIX,OAAO,GA+BE+mB,CAAiB/e,EAAMye,IAC1B/V,EAAGoF,gBAAgB9N,EAAK+B,cAfrB/J,EAAI,EAAGC,EAAM0jB,EAASzjB,OAAQF,EAAIC,EAAKD,IAAKsmB,EAA5CtmB,GAoBT,OAAOkmB,EAAgBhc,KAAK8c,UCxG9B,IAAMrqB,GAAwB,UAIxBC,GAAwBhF,EAAEiE,GAAGc,IAE7BsqB,GAAwB,IAAIlsB,OAAJ,wBAAyC,KACjEmsB,GAAwB,CAAC,WAAY,YAAa,cAElDtmB,GAAc,CAClBumB,UAAoB,UACpBC,SAAoB,SACpBC,MAAoB,4BACpB3tB,QAAoB,SACpB4tB,MAAoB,kBACpB/a,KAAoB,UACpB7T,SAAoB,mBACpB4Y,UAAoB,oBACpBhB,OAAoB,2BACpBiX,UAAoB,2BACpBC,kBAAoB,iBACpBrJ,SAAoB,mBACpBsJ,SAAoB,UACpBxB,WAAoB,kBACpBD,UAAoB,SACpB3H,aAAoB,iBAGhBqJ,GAAgB,CACpBC,KAAS,OACTC,IAAS,MACTC,MAAS,QACTC,OAAS,SACTC,KAAS,QAGL1nB,GAAU,CACd8mB,WAAoB,EACpBC,SAAoB,uGAGpB1tB,QAAoB,cACpB2tB,MAAoB,GACpBC,MAAoB,EACpB/a,MAAoB,EACpB7T,UAAoB,EACpB4Y,UAAoB,MACpBhB,OAAoB,EACpBiX,WAAoB,EACpBC,kBAAoB,OACpBrJ,SAAoB,eACpBsJ,UAAoB,EACpBxB,WAAoB,KACpBD,UAAoB/B,GACpB5F,aAAoB,MAMhB3gB,GAAQ,CACZsqB,KAAI,kBACJC,OAAM,oBACNC,KAAI,kBACJC,MAAK,mBACLC,SAAQ,sBACRC,MAAK,mBACLC,QAAO,qBACPC,SAAQ,sBACRC,WAAU,wBACVC,WAAU,yBAoBNC,GAAAA,WACJ,SAAAA,EAAYjwB,EAASyB,GACnB,GAAsB,oBAAX0jB,GACT,MAAM,IAAIjiB,UAAU,mEAItBjE,KAAKixB,YAAiB,EACtBjxB,KAAKkxB,SAAiB,EACtBlxB,KAAKmxB,YAAiB,GACtBnxB,KAAKoxB,eAAiB,GACtBpxB,KAAK6mB,QAAiB,KAGtB7mB,KAAKe,QAAUA,EACff,KAAKwC,OAAUxC,KAAKgK,WAAWxH,GAC/BxC,KAAKqxB,IAAU,KAEfrxB,KAAKsxB,2CAmCPC,OAAA,WACEvxB,KAAKixB,YAAa,KAGpBO,QAAA,WACExxB,KAAKixB,YAAa,KAGpBQ,cAAA,WACEzxB,KAAKixB,YAAcjxB,KAAKixB,cAG1BhqB,OAAA,SAAO3C,GACL,GAAKtE,KAAKixB,WAIV,GAAI3sB,EAAO,CACT,IAAMotB,EAAU1xB,KAAK6nB,YAAY8J,SAC7BzJ,EAAUhoB,EAAEoE,EAAM2M,eAAexK,KAAKirB,GAErCxJ,IACHA,EAAU,IAAIloB,KAAK6nB,YACjBvjB,EAAM2M,cACNjR,KAAK4xB,sBAEP1xB,EAAEoE,EAAM2M,eAAexK,KAAKirB,EAASxJ,IAGvCA,EAAQkJ,eAAeS,OAAS3J,EAAQkJ,eAAeS,MAEnD3J,EAAQ4J,uBACV5J,EAAQ6J,OAAO,KAAM7J,GAErBA,EAAQ8J,OAAO,KAAM9J,OAElB,CACL,GAAIhoB,EAAEF,KAAKiyB,iBAAiB/rB,SA1GV,QA4GhB,YADAlG,KAAKgyB,OAAO,KAAMhyB,MAIpBA,KAAK+xB,OAAO,KAAM/xB,UAItB2F,QAAA,WACE4G,aAAavM,KAAKkxB,UAElBhxB,EAAE0F,WAAW5F,KAAKe,QAASf,KAAK6nB,YAAY8J,UAE5CzxB,EAAEF,KAAKe,SAASyK,IAAIxL,KAAK6nB,YAAYnf,WACrCxI,EAAEF,KAAKe,SAAS+E,QAAQ,UAAU0F,IAAI,gBAAiBxL,KAAKkyB,mBAExDlyB,KAAKqxB,KACPnxB,EAAEF,KAAKqxB,KAAKhrB,SAGdrG,KAAKixB,WAAiB,KACtBjxB,KAAKkxB,SAAiB,KACtBlxB,KAAKmxB,YAAiB,KACtBnxB,KAAKoxB,eAAiB,KAClBpxB,KAAK6mB,SACP7mB,KAAK6mB,QAAQ1I,UAGfne,KAAK6mB,QAAU,KACf7mB,KAAKe,QAAU,KACff,KAAKwC,OAAU,KACfxC,KAAKqxB,IAAU,QAGjBvhB,KAAA,WAAO,IAAA/P,EAAAC,KACL,GAAuC,SAAnCE,EAAEF,KAAKe,SAASS,IAAI,WACtB,MAAM,IAAI+B,MAAM,uCAGlB,IAAM+jB,EAAYpnB,EAAE8F,MAAMhG,KAAK6nB,YAAY7hB,MAAMwqB,MACjD,GAAIxwB,KAAKmyB,iBAAmBnyB,KAAKixB,WAAY,CAC3C/wB,EAAEF,KAAKe,SAASiB,QAAQslB,GAExB,IAAM8K,EAAahyB,EAAKqD,eAAezD,KAAKe,SACtCsxB,EAAanyB,EAAEsH,SACJ,OAAf4qB,EAAsBA,EAAapyB,KAAKe,QAAQkR,cAAcvO,gBAC9D1D,KAAKe,SAGP,GAAIumB,EAAU7hB,uBAAyB4sB,EACrC,OAGF,IAAMhB,EAAQrxB,KAAKiyB,gBACbK,EAAQlyB,EAAKI,OAAOR,KAAK6nB,YAAY5iB,MAE3CosB,EAAIzpB,aAAa,KAAM0qB,GACvBtyB,KAAKe,QAAQ6G,aAAa,mBAAoB0qB,GAE9CtyB,KAAKuyB,aAEDvyB,KAAKwC,OAAOitB,WACdvvB,EAAEmxB,GAAKzjB,SA1KS,QA6KlB,IAAMgM,EAA8C,mBAA1B5Z,KAAKwC,OAAOoX,UAClC5Z,KAAKwC,OAAOoX,UAAU9W,KAAK9C,KAAMqxB,EAAKrxB,KAAKe,SAC3Cf,KAAKwC,OAAOoX,UAEV4Y,EAAaxyB,KAAKyyB,eAAe7Y,GACvC5Z,KAAK0yB,mBAAmBF,GAExB,IAAM3C,EAAY7vB,KAAK2yB,gBACvBzyB,EAAEmxB,GAAK5qB,KAAKzG,KAAK6nB,YAAY8J,SAAU3xB,MAElCE,EAAEsH,SAASxH,KAAKe,QAAQkR,cAAcvO,gBAAiB1D,KAAKqxB,MAC/DnxB,EAAEmxB,GAAKnG,SAAS2E,GAGlB3vB,EAAEF,KAAKe,SAASiB,QAAQhC,KAAK6nB,YAAY7hB,MAAM0qB,UAE/C1wB,KAAK6mB,QAAU,IAAIX,GAAOlmB,KAAKe,QAASswB,EAAKrxB,KAAKynB,iBAAiB+K,IAEnEtyB,EAAEmxB,GAAKzjB,SA9LW,QAoMd,iBAAkBhN,SAAS8C,iBAC7BxD,EAAEU,SAAS4R,MAAM7E,WAAW9G,GAAG,YAAa,KAAM3G,EAAEwnB,MAGtD,IAAMkL,EAAW,WACX7yB,EAAKyC,OAAOitB,WACd1vB,EAAK8yB,iBAEP,IAAMC,EAAiB/yB,EAAKoxB,YAC5BpxB,EAAKoxB,YAAkB,KAEvBjxB,EAAEH,EAAKgB,SAASiB,QAAQjC,EAAK8nB,YAAY7hB,MAAMyqB,OA/N9B,QAiObqC,GACF/yB,EAAKiyB,OAAO,KAAMjyB,IAItB,GAAIG,EAAEF,KAAKqxB,KAAKnrB,SAvNE,QAuNyB,CACzC,IAAM3E,EAAqBnB,EAAKkB,iCAAiCtB,KAAKqxB,KAEtEnxB,EAAEF,KAAKqxB,KACJlxB,IAAIC,EAAKC,eAAgBuyB,GACzBvuB,qBAAqB9C,QAExBqxB,QAKN/iB,KAAA,SAAKmP,GAAU,IAAAnT,EAAA7L,KACPqxB,EAAYrxB,KAAKiyB,gBACjBtK,EAAYznB,EAAE8F,MAAMhG,KAAK6nB,YAAY7hB,MAAMsqB,MAC3CsC,EAAW,WAtPI,SAuPf/mB,EAAKslB,aAAoCE,EAAIttB,YAC/CstB,EAAIttB,WAAWya,YAAY6S,GAG7BxlB,EAAKknB,iBACLlnB,EAAK9K,QAAQqd,gBAAgB,oBAC7Ble,EAAE2L,EAAK9K,SAASiB,QAAQ6J,EAAKgc,YAAY7hB,MAAMuqB,QAC1B,OAAjB1kB,EAAKgb,SACPhb,EAAKgb,QAAQ1I,UAGXa,GACFA,KAMJ,GAFA9e,EAAEF,KAAKe,SAASiB,QAAQ2lB,IAEpBA,EAAUliB,qBAAd,CAgBA,GAZAvF,EAAEmxB,GAAKprB,YA5Pa,QAgQhB,iBAAkBrF,SAAS8C,iBAC7BxD,EAAEU,SAAS4R,MAAM7E,WAAWnC,IAAI,YAAa,KAAMtL,EAAEwnB,MAGvD1nB,KAAKoxB,eAAL,OAAqC,EACrCpxB,KAAKoxB,eAAL,OAAqC,EACrCpxB,KAAKoxB,eAAL,OAAqC,EAEjClxB,EAAEF,KAAKqxB,KAAKnrB,SAzQI,QAyQuB,CACzC,IAAM3E,EAAqBnB,EAAKkB,iCAAiC+vB,GAEjEnxB,EAAEmxB,GACClxB,IAAIC,EAAKC,eAAgBuyB,GACzBvuB,qBAAqB9C,QAExBqxB,IAGF5yB,KAAKmxB,YAAc,OAGrBtU,OAAA,WACuB,OAAjB7c,KAAK6mB,SACP7mB,KAAK6mB,QAAQxH,oBAMjB8S,cAAA,WACE,OAAOjwB,QAAQlC,KAAKgzB,eAGtBN,mBAAA,SAAmBF,GACjBtyB,EAAEF,KAAKiyB,iBAAiBrkB,SAAYqlB,cAAgBT,MAGtDP,cAAA,WAEE,OADAjyB,KAAKqxB,IAAMrxB,KAAKqxB,KAAOnxB,EAAEF,KAAKwC,OAAOktB,UAAU,GACxC1vB,KAAKqxB,OAGdkB,WAAA,WACE,IAAMlB,EAAMrxB,KAAKiyB,gBACjBjyB,KAAKkzB,kBAAkBhzB,EAAEmxB,EAAIhpB,iBA1SF,mBA0S6CrI,KAAKgzB,YAC7E9yB,EAAEmxB,GAAKprB,YAAektB,gBAGxBD,kBAAA,SAAkB1sB,EAAU4sB,GACH,iBAAZA,IAAyBA,EAAQ/wB,WAAY+wB,EAAQhvB,OAa5DpE,KAAKwC,OAAOqS,MACV7U,KAAKwC,OAAOutB,WACdqD,EAAUhF,GAAagF,EAASpzB,KAAKwC,OAAO8rB,UAAWtuB,KAAKwC,OAAO+rB,aAGrE/nB,EAASqO,KAAKue,IAEd5sB,EAAS6sB,KAAKD,GAlBVpzB,KAAKwC,OAAOqS,KACT3U,EAAEkzB,GAASvtB,SAASjB,GAAG4B,IAC1BA,EAAS8sB,QAAQC,OAAOH,GAG1B5sB,EAAS6sB,KAAKnzB,EAAEkzB,GAASC,WAiB/BL,SAAA,WACE,IAAIrD,EAAQ3vB,KAAKe,QAAQE,aAAa,uBAQtC,OANK0uB,IACHA,EAAqC,mBAAtB3vB,KAAKwC,OAAOmtB,MACvB3vB,KAAKwC,OAAOmtB,MAAM7sB,KAAK9C,KAAKe,SAC5Bf,KAAKwC,OAAOmtB,OAGXA,KAKTlI,iBAAA,SAAiB+K,GAAY,IAAAxmB,EAAAhM,KAuB3B,OAAAyL,EAAAA,EAAA,GAtBwB,CACtBmO,UAAW4Y,EACXpW,UAAW,CACTxD,OAAQ5Y,KAAKgoB,aACb5K,KAAM,CACJuG,SAAU3jB,KAAKwC,OAAOstB,mBAExBhN,MAAO,CACL/hB,QA7VqB,UA+VvBmhB,gBAAiB,CACf9I,kBAAmBpZ,KAAKwC,OAAOikB,WAGnChJ,SAAU,SAAChX,GACLA,EAAK4W,oBAAsB5W,EAAKmT,WAClC5N,EAAKwnB,6BAA6B/sB,IAGtC+W,SAAU,SAAC/W,GAAD,OAAUuF,EAAKwnB,6BAA6B/sB,MAKnDzG,KAAKwC,OAAOmkB,iBAInBqB,WAAA,WAAa,IAAAja,EAAA/N,KACL4Y,EAAS,GAef,MAbkC,mBAAvB5Y,KAAKwC,OAAOoW,OACrBA,EAAOzU,GAAK,SAACsC,GAMX,OALAA,EAAK4Q,QAAL5L,EAAAA,EAAA,GACKhF,EAAK4Q,SACLtJ,EAAKvL,OAAOoW,OAAOnS,EAAK4Q,QAAStJ,EAAKhN,UAAY,IAGhD0F,GAGTmS,EAAOA,OAAS5Y,KAAKwC,OAAOoW,OAGvBA,KAGT+Z,cAAA,WACE,OAA8B,IAA1B3yB,KAAKwC,OAAOqtB,UACPjvB,SAAS4R,KAGdpS,EAAK+B,UAAUnC,KAAKwC,OAAOqtB,WACtB3vB,EAAEF,KAAKwC,OAAOqtB,WAGhB3vB,EAAEU,UAAUmb,KAAK/b,KAAKwC,OAAOqtB,cAGtC4C,eAAA,SAAe7Y,GACb,OAAOoW,GAAcpW,EAAUpW,kBAGjC8tB,cAAA,WAAgB,IAAAhH,EAAAtqB,KACGA,KAAKwC,OAAOR,QAAQH,MAAM,KAElC4a,SAAQ,SAACza,GAChB,GAAgB,UAAZA,EACF9B,EAAEoqB,EAAKvpB,SAAS8F,GACdyjB,EAAKzC,YAAY7hB,MAAM2qB,MACvBrG,EAAK9nB,OAAOxB,UACZ,SAACsD,GAAD,OAAWgmB,EAAKrjB,OAAO3C,WAEpB,GAzZU,WAyZNtC,EAA4B,CACrC,IAAMyxB,EA7ZS,UA6ZCzxB,EACZsoB,EAAKzC,YAAY7hB,MAAM8qB,WACvBxG,EAAKzC,YAAY7hB,MAAM4qB,QACrB8C,EAhaS,UAgaE1xB,EACbsoB,EAAKzC,YAAY7hB,MAAM+qB,WACvBzG,EAAKzC,YAAY7hB,MAAM6qB,SAE3B3wB,EAAEoqB,EAAKvpB,SACJ8F,GAAG4sB,EAASnJ,EAAK9nB,OAAOxB,UAAU,SAACsD,GAAD,OAAWgmB,EAAKyH,OAAOztB,MACzDuC,GAAG6sB,EAAUpJ,EAAK9nB,OAAOxB,UAAU,SAACsD,GAAD,OAAWgmB,EAAK0H,OAAO1tB,UAIjEtE,KAAKkyB,kBAAoB,WACnB5H,EAAKvpB,SACPupB,EAAKza,QAIT3P,EAAEF,KAAKe,SAAS+E,QAAQ,UAAUe,GAAG,gBAAiB7G,KAAKkyB,mBAEvDlyB,KAAKwC,OAAOxB,SACdhB,KAAKwC,OAALiJ,EAAAA,EAAA,GACKzL,KAAKwC,QADV,GAAA,CAEER,QAAS,SACThB,SAAU,KAGZhB,KAAK2zB,eAITA,UAAA,WACE,IAAMC,SAAmB5zB,KAAKe,QAAQE,aAAa,wBAE/CjB,KAAKe,QAAQE,aAAa,UAA0B,WAAd2yB,KACxC5zB,KAAKe,QAAQ6G,aACX,sBACA5H,KAAKe,QAAQE,aAAa,UAAY,IAGxCjB,KAAKe,QAAQ6G,aAAa,QAAS,QAIvCmqB,OAAA,SAAOztB,EAAO4jB,GACZ,IAAMwJ,EAAU1xB,KAAK6nB,YAAY8J,UACjCzJ,EAAUA,GAAWhoB,EAAEoE,EAAM2M,eAAexK,KAAKirB,MAG/CxJ,EAAU,IAAIloB,KAAK6nB,YACjBvjB,EAAM2M,cACNjR,KAAK4xB,sBAEP1xB,EAAEoE,EAAM2M,eAAexK,KAAKirB,EAASxJ,IAGnC5jB,IACF4jB,EAAQkJ,eACS,YAAf9sB,EAAM+C,KAvdS,QADA,UAydb,GAGFnH,EAAEgoB,EAAQ+J,iBAAiB/rB,SAjeX,SAjBC,SAkfuCgiB,EAAQiJ,YAClEjJ,EAAQiJ,YAnfW,QAufrB5kB,aAAa2b,EAAQgJ,UAErBhJ,EAAQiJ,YAzfa,OA2fhBjJ,EAAQ1lB,OAAOotB,OAAU1H,EAAQ1lB,OAAOotB,MAAM9f,KAKnDoY,EAAQgJ,SAAW5wB,YAAW,WAhgBT,SAigBf4nB,EAAQiJ,aACVjJ,EAAQpY,SAEToY,EAAQ1lB,OAAOotB,MAAM9f,MARtBoY,EAAQpY,WAWZkiB,OAAA,SAAO1tB,EAAO4jB,GACZ,IAAMwJ,EAAU1xB,KAAK6nB,YAAY8J,UACjCzJ,EAAUA,GAAWhoB,EAAEoE,EAAM2M,eAAexK,KAAKirB,MAG/CxJ,EAAU,IAAIloB,KAAK6nB,YACjBvjB,EAAM2M,cACNjR,KAAK4xB,sBAEP1xB,EAAEoE,EAAM2M,eAAexK,KAAKirB,EAASxJ,IAGnC5jB,IACF4jB,EAAQkJ,eACS,aAAf9sB,EAAM+C,KA9fS,QADA,UAggBb,GAGF6gB,EAAQ4J,yBAIZvlB,aAAa2b,EAAQgJ,UAErBhJ,EAAQiJ,YA9hBa,MAgiBhBjJ,EAAQ1lB,OAAOotB,OAAU1H,EAAQ1lB,OAAOotB,MAAM/f,KAKnDqY,EAAQgJ,SAAW5wB,YAAW,WAriBT,QAsiBf4nB,EAAQiJ,aACVjJ,EAAQrY,SAETqY,EAAQ1lB,OAAOotB,MAAM/f,MARtBqY,EAAQrY,WAWZiiB,qBAAA,WACE,IAAK,IAAM9vB,KAAWhC,KAAKoxB,eACzB,GAAIpxB,KAAKoxB,eAAepvB,GACtB,OAAO,EAIX,OAAO,KAGTgI,WAAA,SAAWxH,GACT,IAAMqxB,EAAiB3zB,EAAEF,KAAKe,SAAS0F,OAwCvC,OAtCA9D,OAAOqX,KAAK6Z,GACTpX,SAAQ,SAACqX,IACyC,IAA7CtE,GAAsB7iB,QAAQmnB,WACzBD,EAAeC,MAUA,iBAN5BtxB,EAAMiJ,EAAAA,EAAAA,EAAA,GACDzL,KAAK6nB,YAAYlf,SACjBkrB,GACkB,iBAAXrxB,GAAuBA,EAASA,EAAS,KAGnCotB,QAChBptB,EAAOotB,MAAQ,CACb9f,KAAMtN,EAAOotB,MACb/f,KAAMrN,EAAOotB,QAIW,iBAAjBptB,EAAOmtB,QAChBntB,EAAOmtB,MAAQntB,EAAOmtB,MAAMzsB,YAGA,iBAAnBV,EAAO4wB,UAChB5wB,EAAO4wB,QAAU5wB,EAAO4wB,QAAQlwB,YAGlC9C,EAAKkC,gBACH2C,GACAzC,EACAxC,KAAK6nB,YAAY3e,aAGf1G,EAAOutB,WACTvtB,EAAOktB,SAAWtB,GAAa5rB,EAAOktB,SAAUltB,EAAO8rB,UAAW9rB,EAAO+rB,aAGpE/rB,KAGTovB,mBAAA,WACE,IAAMpvB,EAAS,GAEf,GAAIxC,KAAKwC,OACP,IAAK,IAAMsU,KAAO9W,KAAKwC,OACjBxC,KAAK6nB,YAAYlf,QAAQmO,KAAS9W,KAAKwC,OAAOsU,KAChDtU,EAAOsU,GAAO9W,KAAKwC,OAAOsU,IAKhC,OAAOtU,KAGTuwB,eAAA,WACE,IAAMgB,EAAO7zB,EAAEF,KAAKiyB,iBACd+B,EAAWD,EAAKzjB,KAAK,SAASnN,MAAMosB,IACzB,OAAbyE,GAAqBA,EAASxrB,QAChCurB,EAAK9tB,YAAY+tB,EAASC,KAAK,QAInCT,6BAAA,SAA6BU,GAC3Bl0B,KAAKqxB,IAAM6C,EAAW7d,SAAS6C,OAC/BlZ,KAAK+yB,iBACL/yB,KAAK0yB,mBAAmB1yB,KAAKyyB,eAAeyB,EAAWta,eAGzDiZ,eAAA,WACE,IAAMxB,EAAMrxB,KAAKiyB,gBACXkC,EAAsBn0B,KAAKwC,OAAOitB,UAEA,OAApC4B,EAAIpwB,aAAa,iBAIrBf,EAAEmxB,GAAKprB,YAvnBa,QAwnBpBjG,KAAKwC,OAAOitB,WAAY,EACxBzvB,KAAK6P,OACL7P,KAAK8P,OACL9P,KAAKwC,OAAOitB,UAAY0E,MAKnB7tB,iBAAP,SAAwB9D,GACtB,OAAOxC,KAAKuG,MAAK,WACf,IAAIE,EAAOvG,EAAEF,MAAMyG,KAzsBK,cA0sBlBsD,EAA4B,iBAAXvH,GAAuBA,EAE9C,IAAKiE,IAAQ,eAAenD,KAAKd,MAI5BiE,IACHA,EAAO,IAAIuqB,EAAQhxB,KAAM+J,GACzB7J,EAAEF,MAAMyG,KAltBc,aAktBCA,IAGH,iBAAXjE,GAAqB,CAC9B,GAA4B,oBAAjBiE,EAAKjE,GACd,MAAM,IAAIyB,UAAJ,oBAAkCzB,EAAlC,KAERiE,EAAKjE,kDAzmBT,MAjH0B,wCAqH1B,OAAOmG,gCAIP,OAAO1D,oCAIP,MA5H0B,2CAgI1B,OAAOe,qCAIP,MAnIW,kDAuIX,OAAOkD,SAhDL8nB,GA6oBN9wB,EAAEiE,GAAGc,IAAQ+rB,GAAQ1qB,iBACrBpG,EAAEiE,GAAGc,IAAM6B,YAAckqB,GACzB9wB,EAAEiE,GAAGc,IAAM8B,WAAa,WAEtB,OADA7G,EAAEiE,GAAGc,IAAQC,GACN8rB,GAAQ1qB,kBChvBjB,IAAMrB,GAAsB,UAItBC,GAAsBhF,EAAEiE,GAAGc,IAE3BsqB,GAAsB,IAAIlsB,OAAJ,wBAAyC,KAE/DsF,GAAO8C,EAAAA,EAAA,GACRulB,GAAQroB,SADA,GAAA,CAEXiR,UAAY,QACZ5X,QAAY,QACZoxB,QAAY,GACZ1D,SAAY,wIAMRxmB,GAAWuC,EAAAA,EAAA,GACZulB,GAAQ9nB,aADI,GAAA,CAEfkqB,QAAU,8BASNptB,GAAQ,CACZsqB,KAAI,kBACJC,OAAM,oBACNC,KAAI,kBACJC,MAAK,mBACLC,SAAQ,sBACRC,MAAK,mBACLC,QAAO,qBACPC,SAAQ,sBACRC,WAAU,wBACVC,WAAU,yBASNqD,GAAAA,SAAAA,+KAiCJjC,cAAA,WACE,OAAOnyB,KAAKgzB,YAAchzB,KAAKq0B,iBAGjC3B,mBAAA,SAAmBF,GACjBtyB,EAAEF,KAAKiyB,iBAAiBrkB,SAAYqlB,cAAgBT,MAGtDP,cAAA,WAEE,OADAjyB,KAAKqxB,IAAMrxB,KAAKqxB,KAAOnxB,EAAEF,KAAKwC,OAAOktB,UAAU,GACxC1vB,KAAKqxB,OAGdkB,WAAA,WACE,IAAMwB,EAAO7zB,EAAEF,KAAKiyB,iBAGpBjyB,KAAKkzB,kBAAkBa,EAAKhY,KAxEP,mBAwE6B/b,KAAKgzB,YACvD,IAAII,EAAUpzB,KAAKq0B,cACI,mBAAZjB,IACTA,EAAUA,EAAQtwB,KAAK9C,KAAKe,UAE9Bf,KAAKkzB,kBAAkBa,EAAKhY,KA5EP,iBA4E+BqX,GAEpDW,EAAK9tB,YAAektB,gBAKtBkB,YAAA,WACE,OAAOr0B,KAAKe,QAAQE,aAAa,iBAC/BjB,KAAKwC,OAAO4wB,WAGhBL,eAAA,WACE,IAAMgB,EAAO7zB,EAAEF,KAAKiyB,iBACd+B,EAAWD,EAAKzjB,KAAK,SAASnN,MAAMosB,IACzB,OAAbyE,GAAqBA,EAASxrB,OAAS,GACzCurB,EAAK9tB,YAAY+tB,EAASC,KAAK,QAM5B3tB,iBAAP,SAAwB9D,GACtB,OAAOxC,KAAKuG,MAAK,WACf,IAAIE,EAAOvG,EAAEF,MAAMyG,KA9HG,cA+HhBsD,EAA4B,iBAAXvH,EAAsBA,EAAS,KAEtD,IAAKiE,IAAQ,eAAenD,KAAKd,MAI5BiE,IACHA,EAAO,IAAI2tB,EAAQp0B,KAAM+J,GACzB7J,EAAEF,MAAMyG,KAvIY,aAuIGA,IAGH,iBAAXjE,GAAqB,CAC9B,GAA4B,oBAAjBiE,EAAKjE,GACd,MAAM,IAAIyB,UAAJ,oBAAkCzB,EAAlC,KAERiE,EAAKjE,kDA3FT,MApDwB,wCAwDxB,OAAOmG,gCAIP,OAAO1D,oCAIP,MA/DwB,2CAmExB,OAAOe,qCAIP,MAtEW,kDA0EX,OAAOkD,SA5BLkrB,CAAgBpD,IA2GtB9wB,EAAEiE,GAAGc,IAAQmvB,GAAQ9tB,iBACrBpG,EAAEiE,GAAGc,IAAM6B,YAAcstB,GACzBl0B,EAAEiE,GAAGc,IAAM8B,WAAa,WAEtB,OADA7G,EAAEiE,GAAGc,IAAQC,GACNkvB,GAAQ9tB,kBChKjB,IAAMrB,GAAqB,YAKrBC,GAAqBhF,EAAEiE,GAAGc,IAE1B0D,GAAU,CACdiQ,OAAS,GACT0b,OAAS,OACT3vB,OAAS,IAGLuE,GAAc,CAClB0P,OAAS,SACT0b,OAAS,SACT3vB,OAAS,oBA4BL4vB,GAAAA,WACJ,SAAAA,EAAYxzB,EAASyB,GAAQ,IAAAzC,EAAAC,KAC3BA,KAAKoF,SAAiBrE,EACtBf,KAAKw0B,eAAqC,SAApBzzB,EAAQkH,QAAqBC,OAASnH,EAC5Df,KAAK+J,QAAiB/J,KAAKgK,WAAWxH,GACtCxC,KAAKwP,UAAoBxP,KAAK+J,QAAQpF,OAAb3E,cACAA,KAAK+J,QAAQpF,OADhB,qBAEG3E,KAAK+J,QAAQpF,OAFhB,kBAGtB3E,KAAKy0B,SAAiB,GACtBz0B,KAAK00B,SAAiB,GACtB10B,KAAK20B,cAAiB,KACtB30B,KAAK40B,cAAiB,EAEtB10B,EAAEF,KAAKw0B,gBAAgB3tB,GArCT,uBAqC0B,SAACvC,GAAD,OAAWvE,EAAK80B,SAASvwB,MAEjEtE,KAAK80B,UACL90B,KAAK60B,sCAePC,QAAA,WAAU,IAAAjpB,EAAA7L,KACF+0B,EAAa/0B,KAAKw0B,iBAAmBx0B,KAAKw0B,eAAetsB,OAzC3C,SACA,WA2Cd8sB,EAAuC,SAAxBh1B,KAAK+J,QAAQuqB,OAC9BS,EAAa/0B,KAAK+J,QAAQuqB,OAExBW,EA9Cc,aA8CDD,EACfh1B,KAAKk1B,gBAAkB,EAE3Bl1B,KAAKy0B,SAAW,GAChBz0B,KAAK00B,SAAW,GAEhB10B,KAAK40B,cAAgB50B,KAAKm1B,mBAEV,GAAG/sB,MAAMtF,KAAKlC,SAASyH,iBAAiBrI,KAAKwP,YAG1DyK,KAAI,SAAClZ,GACJ,IAAI4D,EACEywB,EAAiBh1B,EAAKU,uBAAuBC,GAMnD,GAJIq0B,IACFzwB,EAAS/D,SAASQ,cAAcg0B,IAG9BzwB,EAAQ,CACV,IAAM0wB,EAAY1wB,EAAO+L,wBACzB,GAAI2kB,EAAUlf,OAASkf,EAAUnf,OAE/B,MAAO,CACLhW,EAAEyE,GAAQqwB,KAAgB3f,IAAM4f,EAChCG,GAIN,OAAO,QAER9lB,QAAO,SAACiZ,GAAD,OAAUA,KACjBpO,MAAK,SAACC,EAAGC,GAAJ,OAAUD,EAAE,GAAKC,EAAE,MACxBoC,SAAQ,SAAC8L,GACR1c,EAAK4oB,SAAShlB,KAAK8Y,EAAK,IACxB1c,EAAK6oB,SAASjlB,KAAK8Y,EAAK,UAI9B5iB,QAAA,WACEzF,EAAE0F,WAAW5F,KAAKoF,SAxHK,gBAyHvBlF,EAAEF,KAAKw0B,gBAAgBhpB,IAxHZ,iBA0HXxL,KAAKoF,SAAiB,KACtBpF,KAAKw0B,eAAiB,KACtBx0B,KAAK+J,QAAiB,KACtB/J,KAAKwP,UAAiB,KACtBxP,KAAKy0B,SAAiB,KACtBz0B,KAAK00B,SAAiB,KACtB10B,KAAK20B,cAAiB,KACtB30B,KAAK40B,cAAiB,QAKxB5qB,WAAA,SAAWxH,GAMT,GAA6B,iBAL7BA,EAAMiJ,EAAAA,EAAA,GACD9C,IACkB,iBAAXnG,GAAuBA,EAASA,EAAS,KAGnCmC,QAAuBvE,EAAK+B,UAAUK,EAAOmC,QAAS,CACtE,IAAIuK,EAAKhP,EAAEsC,EAAOmC,QAAQ2L,KAAK,MAC1BpB,IACHA,EAAK9O,EAAKI,OAAOyE,IACjB/E,EAAEsC,EAAOmC,QAAQ2L,KAAK,KAAMpB,IAE9B1M,EAAOmC,OAAP,IAAoBuK,EAKtB,OAFA9O,EAAKkC,gBAAgB2C,GAAMzC,EAAQ0G,IAE5B1G,KAGT0yB,cAAA,WACE,OAAOl1B,KAAKw0B,iBAAmBtsB,OAC3BlI,KAAKw0B,eAAec,YAAct1B,KAAKw0B,eAAetf,aAG5DigB,iBAAA,WACE,OAAOn1B,KAAKw0B,eAAelJ,cAAgB5qB,KAAKsV,IAC9CpV,SAAS4R,KAAK8Y,aACd1qB,SAAS8C,gBAAgB4nB,iBAI7BiK,iBAAA,WACE,OAAOv1B,KAAKw0B,iBAAmBtsB,OAC3BA,OAAOyQ,YAAc3Y,KAAKw0B,eAAe9jB,wBAAwBwF,UAGvE2e,SAAA,WACE,IAAM3f,EAAelV,KAAKk1B,gBAAkBl1B,KAAK+J,QAAQ6O,OACnD0S,EAAetrB,KAAKm1B,mBACpBK,EAAex1B,KAAK+J,QAAQ6O,OAAS0S,EAAetrB,KAAKu1B,mBAM/D,GAJIv1B,KAAK40B,gBAAkBtJ,GACzBtrB,KAAK80B,UAGH5f,GAAasgB,EAAjB,CACE,IAAM7wB,EAAS3E,KAAK00B,SAAS10B,KAAK00B,SAASlsB,OAAS,GAEhDxI,KAAK20B,gBAAkBhwB,GACzB3E,KAAKy1B,UAAU9wB,OAJnB,CASA,GAAI3E,KAAK20B,eAAiBzf,EAAYlV,KAAKy0B,SAAS,IAAMz0B,KAAKy0B,SAAS,GAAK,EAG3E,OAFAz0B,KAAK20B,cAAgB,UACrB30B,KAAK01B,SAIP,IAAK,IAAIptB,EAAItI,KAAKy0B,SAASjsB,OAAQF,KAAM,CAChBtI,KAAK20B,gBAAkB30B,KAAK00B,SAASpsB,IACxD4M,GAAalV,KAAKy0B,SAASnsB,KACM,oBAAzBtI,KAAKy0B,SAASnsB,EAAI,IACtB4M,EAAYlV,KAAKy0B,SAASnsB,EAAI,KAGpCtI,KAAKy1B,UAAUz1B,KAAK00B,SAASpsB,SAKnCmtB,UAAA,SAAU9wB,GACR3E,KAAK20B,cAAgBhwB,EAErB3E,KAAK01B,SAEL,IAAMC,EAAU31B,KAAKwP,UAClB3N,MAAM,KACNoY,KAAI,SAACjZ,GAAD,OAAiBA,EAAjB,iBAA0C2D,EAA1C,MAAsD3D,EAAtD,UAAwE2D,EAAxE,QAEDixB,EAAQ11B,EAAE,GAAGkI,MAAMtF,KAAKlC,SAASyH,iBAAiBstB,EAAQ1B,KAAK,QAEjE2B,EAAM1vB,SAtMmB,kBAuM3B0vB,EAAM9vB,QA/LqB,aAgMxBiW,KA9LwB,oBA+LxBnO,SAxMwB,UAyM3BgoB,EAAMhoB,SAzMqB,YA4M3BgoB,EAAMhoB,SA5MqB,UA+M3BgoB,EAAMC,QA5MqB,qBA6MxBhrB,KAAQirB,+BACRloB,SAjNwB,UAmN3BgoB,EAAMC,QAhNqB,qBAiNxBhrB,KA/MwB,aAgNxB8C,SAjNwB,aAkNxBC,SAtNwB,WAyN7B1N,EAAEF,KAAKw0B,gBAAgBxyB,QA9NP,wBA8N+B,CAC7CkL,cAAevI,OAInB+wB,OAAA,WACE,GAAGttB,MAAMtF,KAAKlC,SAASyH,iBAAiBrI,KAAKwP,YAC1CF,QAAO,SAACoE,GAAD,OAAUA,EAAKnM,UAAUC,SAhON,aAiO1BiV,SAAQ,SAAC/I,GAAD,OAAUA,EAAKnM,UAAUlB,OAjOP,gBAsOxBC,iBAAP,SAAwB9D,GACtB,OAAOxC,KAAKuG,MAAK,WACf,IAAIE,EAAOvG,EAAEF,MAAMyG,KA9PE,gBAsQrB,GALKA,IACHA,EAAO,IAAI8tB,EAAUv0B,KAHW,iBAAXwC,GAAuBA,GAI5CtC,EAAEF,MAAMyG,KAnQW,eAmQIA,IAGH,iBAAXjE,EAAqB,CAC9B,GAA4B,oBAAjBiE,EAAKjE,GACd,MAAM,IAAIyB,UAAJ,oBAAkCzB,EAAlC,KAERiE,EAAKjE,kDA1MT,MAjEuB,wCAqEvB,OAAOmG,SA1BL4rB,GA4ONr0B,EAAEgI,QAAQrB,GAnQe,8BAmQS,WAIhC,IAHA,IAAMkvB,EAAa,GAAG3tB,MAAMtF,KAAKlC,SAASyH,iBA/PX,wBAkQtBC,EAFgBytB,EAAWvtB,OAELF,KAAM,CACnC,IAAM0tB,EAAO91B,EAAE61B,EAAWztB,IAC1BisB,GAAUjuB,iBAAiBxD,KAAKkzB,EAAMA,EAAKvvB,YAU/CvG,EAAEiE,GAAGc,IAAQsvB,GAAUjuB,iBACvBpG,EAAEiE,GAAGc,IAAM6B,YAAcytB,GACzBr0B,EAAEiE,GAAGc,IAAM8B,WAAa,WAEtB,OADA7G,EAAEiE,GAAGc,IAAQC,GACNqvB,GAAUjuB,kBC5SnB,IAKMpB,GAAqBhF,EAAEiE,GAAF,IA4BrB8xB,GAAAA,WACJ,SAAAA,EAAYl1B,GACVf,KAAKoF,SAAWrE,6BAWlB+O,KAAA,WAAO,IAAA/P,EAAAC,KACL,KAAIA,KAAKoF,SAASrB,YACd/D,KAAKoF,SAASrB,WAAW1B,WAAa2R,KAAKiW,cAC3C/pB,EAAEF,KAAKoF,UAAUc,SAnCQ,WAoCzBhG,EAAEF,KAAKoF,UAAUc,SAnCQ,aAgC7B,CAOA,IAAIvB,EACAuxB,EACEC,EAAcj2B,EAAEF,KAAKoF,UAAUU,QApCF,qBAoCmC,GAChE9E,EAAWZ,EAAKU,uBAAuBd,KAAKoF,UAElD,GAAI+wB,EAAa,CACf,IAAMC,EAAwC,OAAzBD,EAAY9jB,UAA8C,OAAzB8jB,EAAY9jB,SAtCjC,iBADA,UAyCjC6jB,GADAA,EAAWh2B,EAAEm2B,UAAUn2B,EAAEi2B,GAAapa,KAAKqa,KACvBF,EAAS1tB,OAAS,GAGxC,IAAMmf,EAAYznB,EAAE8F,MA1DR,cA0D0B,CACpCkH,cAAelN,KAAKoF,WAGhBkiB,EAAYpnB,EAAE8F,MA5DR,cA4D0B,CACpCkH,cAAegpB,IASjB,GANIA,GACFh2B,EAAEg2B,GAAUl0B,QAAQ2lB,GAGtBznB,EAAEF,KAAKoF,UAAUpD,QAAQslB,IAErBA,EAAU7hB,uBACVkiB,EAAUliB,qBADd,CAKIzE,IACF2D,EAAS/D,SAASQ,cAAcJ,IAGlChB,KAAKy1B,UACHz1B,KAAKoF,SACL+wB,GAGF,IAAMvD,EAAW,WACf,IAAM0D,EAAcp2B,EAAE8F,MAtFV,gBAsF8B,CACxCkH,cAAenN,EAAKqF,WAGhBglB,EAAalqB,EAAE8F,MAxFV,eAwF6B,CACtCkH,cAAegpB,IAGjBh2B,EAAEg2B,GAAUl0B,QAAQs0B,GACpBp2B,EAAEH,EAAKqF,UAAUpD,QAAQooB,IAGvBzlB,EACF3E,KAAKy1B,UAAU9wB,EAAQA,EAAOZ,WAAY6uB,GAE1CA,SAIJjtB,QAAA,WACEzF,EAAE0F,WAAW5F,KAAKoF,SAhHK,UAiHvBpF,KAAKoF,SAAW,QAKlBqwB,UAAA,SAAU10B,EAAS8uB,EAAW7Q,GAAU,IAAAnT,EAAA7L,KAKhCu2B,IAJiB1G,GAAqC,OAAvBA,EAAUxd,UAA4C,OAAvBwd,EAAUxd,SAE1EnS,EAAE2vB,GAAWliB,SAtGkB,WAqG/BzN,EAAE2vB,GAAW9T,KApGkB,mBAuGL,GACxBnL,EAAkBoO,GAAauX,GAAUr2B,EAAEq2B,GAAQrwB,SA9G5B,QA+GvB0sB,EAAW,WAAA,OAAM/mB,EAAK2qB,oBAC1Bz1B,EACAw1B,EACAvX,IAGF,GAAIuX,GAAU3lB,EAAiB,CAC7B,IAAMrP,EAAqBnB,EAAKkB,iCAAiCi1B,GAEjEr2B,EAAEq2B,GACCtwB,YAxHwB,QAyHxB9F,IAAIC,EAAKC,eAAgBuyB,GACzBvuB,qBAAqB9C,QAExBqxB,OAIJ4D,oBAAA,SAAoBz1B,EAASw1B,EAAQvX,GACnC,GAAIuX,EAAQ,CACVr2B,EAAEq2B,GAAQtwB,YArIiB,UAuI3B,IAAMwwB,EAAgBv2B,EAAEq2B,EAAOxyB,YAAYgY,KA5HV,4BA8H/B,GAEE0a,GACFv2B,EAAEu2B,GAAexwB,YA5IQ,UA+IS,QAAhCswB,EAAOt1B,aAAa,SACtBs1B,EAAO3uB,aAAa,iBAAiB,GAezC,GAXA1H,EAAEa,GAAS6M,SApJkB,UAqJQ,QAAjC7M,EAAQE,aAAa,SACvBF,EAAQ6G,aAAa,iBAAiB,GAGxCxH,EAAK0B,OAAOf,GAERA,EAAQwG,UAAUC,SAzJO,SA0J3BzG,EAAQwG,UAAUkB,IAzJS,QA4JzB1H,EAAQgD,YAAc7D,EAAEa,EAAQgD,YAAYmC,SAhKnB,iBAgKuD,CAClF,IAAMwwB,EAAkBx2B,EAAEa,GAAS+E,QA3JF,aA2J6B,GAE9D,GAAI4wB,EAAiB,CACnB,IAAMC,EAAqB,GAAGvuB,MAAMtF,KAAK4zB,EAAgBruB,iBAzJ1B,qBA2J/BnI,EAAEy2B,GAAoB/oB,SArKG,UAwK3B7M,EAAQ6G,aAAa,iBAAiB,GAGpCoX,GACFA,OAMG1Y,iBAAP,SAAwB9D,GACtB,OAAOxC,KAAKuG,MAAK,WACf,IAAMyK,EAAQ9Q,EAAEF,MACZyG,EAAOuK,EAAMvK,KAjMI,UAwMrB,GALKA,IACHA,EAAO,IAAIwvB,EAAIj2B,MACfgR,EAAMvK,KArMa,SAqMEA,IAGD,iBAAXjE,EAAqB,CAC9B,GAA4B,oBAAjBiE,EAAKjE,GACd,MAAM,IAAIyB,UAAJ,oBAAkCzB,EAAlC,KAERiE,EAAKjE,kDArKT,MAxCuB,cAgCrByzB,GAyLN/1B,EAAEU,UACCiG,GAhNuB,wBAYa,mEAoMW,SAAUvC,GACxDA,EAAMsC,iBACNqvB,GAAI3vB,iBAAiBxD,KAAK5C,EAAEF,MAAO,WASvCE,EAAEiE,GAAF,IAAa8xB,GAAI3vB,iBACjBpG,EAAEiE,GAAF,IAAW2C,YAAcmvB,GACzB/1B,EAAEiE,GAAF,IAAW4C,WAAa,WAEtB,OADA7G,EAAEiE,GAAF,IAAae,GACN+wB,GAAI3vB,kBC1Ob,IAIMpB,GAAqBhF,EAAEiE,GAAF,MAarB+E,GAAc,CAClBumB,UAAY,UACZmH,SAAY,UACZhH,MAAY,UAGRjnB,GAAU,CACd8mB,WAAY,EACZmH,UAAY,EACZhH,MAAY,KAWRiH,GAAAA,WACJ,SAAAA,EAAY91B,EAASyB,GACnBxC,KAAKoF,SAAWrE,EAChBf,KAAK+J,QAAW/J,KAAKgK,WAAWxH,GAChCxC,KAAKkxB,SAAW,KAChBlxB,KAAKsxB,2CAmBPxhB,KAAA,WAAO,IAAA/P,EAAAC,KACCsnB,EAAYpnB,EAAE8F,MArDR,iBAwDZ,GADA9F,EAAEF,KAAKoF,UAAUpD,QAAQslB,IACrBA,EAAU7hB,qBAAd,CAIIzF,KAAK+J,QAAQ0lB,WACfzvB,KAAKoF,SAASmC,UAAUkB,IA1DH,QA6DvB,IAAMmqB,EAAW,WACf7yB,EAAKqF,SAASmC,UAAUlB,OA3DH,WA4DrBtG,EAAKqF,SAASmC,UAAUkB,IA7DH,QA+DrBvI,EAAEH,EAAKqF,UAAUpD,QAnEN,kBAqEPjC,EAAKgK,QAAQ6sB,WACf72B,EAAKmxB,SAAW5wB,YAAW,WACzBP,EAAK8P,SACJ9P,EAAKgK,QAAQ6lB,SAOpB,GAHA5vB,KAAKoF,SAASmC,UAAUlB,OAzED,QA0EvBjG,EAAK0B,OAAO9B,KAAKoF,UACjBpF,KAAKoF,SAASmC,UAAUkB,IAzED,WA0EnBzI,KAAK+J,QAAQ0lB,UAAW,CAC1B,IAAMluB,EAAqBnB,EAAKkB,iCAAiCtB,KAAKoF,UAEtElF,EAAEF,KAAKoF,UACJjF,IAAIC,EAAKC,eAAgBuyB,GACzBvuB,qBAAqB9C,QAExBqxB,QAIJ/iB,KAAA,WACE,GAAK7P,KAAKoF,SAASmC,UAAUC,SAvFN,QAuFvB,CAIA,IAAMmgB,EAAYznB,EAAE8F,MAlGR,iBAoGZ9F,EAAEF,KAAKoF,UAAUpD,QAAQ2lB,GACrBA,EAAUliB,sBAIdzF,KAAK82B,aAGPnxB,QAAA,WACE4G,aAAavM,KAAKkxB,UAClBlxB,KAAKkxB,SAAW,KAEZlxB,KAAKoF,SAASmC,UAAUC,SAzGL,SA0GrBxH,KAAKoF,SAASmC,UAAUlB,OA1GH,QA6GvBnG,EAAEF,KAAKoF,UAAUoG,IArHI,0BAuHrBtL,EAAE0F,WAAW5F,KAAKoF,SA3HK,YA4HvBpF,KAAKoF,SAAW,KAChBpF,KAAK+J,QAAW,QAKlBC,WAAA,SAAWxH,GAaT,OAZAA,EAAMiJ,EAAAA,EAAAA,EAAA,GACD9C,IACAzI,EAAEF,KAAKoF,UAAUqB,QACC,iBAAXjE,GAAuBA,EAASA,EAAS,IAGrDpC,EAAKkC,gBA3IkB,QA6IrBE,EACAxC,KAAK6nB,YAAY3e,aAGZ1G,KAGT8uB,cAAA,WAAgB,IAAAzlB,EAAA7L,KACdE,EAAEF,KAAKoF,UAAUyB,GA/II,yBAuBK,0BAwHsC,WAAA,OAAMgF,EAAKgE,aAG7EinB,OAAA,WAAS,IAAA9qB,EAAAhM,KACD4yB,EAAW,WACf5mB,EAAK5G,SAASmC,UAAUkB,IA7IH,QA8IrBvI,EAAE8L,EAAK5G,UAAUpD,QAnJL,oBAuJd,GADAhC,KAAKoF,SAASmC,UAAUlB,OAhJD,QAiJnBrG,KAAK+J,QAAQ0lB,UAAW,CAC1B,IAAMluB,EAAqBnB,EAAKkB,iCAAiCtB,KAAKoF,UAEtElF,EAAEF,KAAKoF,UACJjF,IAAIC,EAAKC,eAAgBuyB,GACzBvuB,qBAAqB9C,QAExBqxB,OAMGtsB,iBAAP,SAAwB9D,GACtB,OAAOxC,KAAKuG,MAAK,WACf,IAAMC,EAAWtG,EAAEF,MACfyG,EAAaD,EAASC,KA7KL,YAqLrB,GALKA,IACHA,EAAO,IAAIowB,EAAM72B,KAHgB,iBAAXwC,GAAuBA,GAI7CgE,EAASC,KAlLU,WAkLKA,IAGJ,iBAAXjE,EAAqB,CAC9B,GAA4B,oBAAjBiE,EAAKjE,GACd,MAAM,IAAIyB,UAAJ,oBAAkCzB,EAAlC,KAGRiE,EAAKjE,GAAQxC,mDA5IjB,MA/CuB,4CAmDvB,OAAOkJ,mCAIP,OAAOP,SAnBLkuB,GAmKN32B,EAAEiE,GAAF,MAAyB0yB,GAAMvwB,iBAC/BpG,EAAEiE,GAAF,MAAW2C,YAAc+vB,GACzB32B,EAAEiE,GAAF,MAAW4C,WAAc,WAEvB,OADA7G,EAAEiE,GAAF,MAAae,GACN2xB,GAAMvwB","sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.0): util.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/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 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 // eslint-disable-next-line no-bitwise\n prefix += ~~(Math.random() * MAX_UID) // \"~~\" acts like a faster Math.floor() here\n } while (document.getElementById(prefix))\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 (err) {\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 // TODO: Remove in v5\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.5.0): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/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.5.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.5.0): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'button'\nconst VERSION = '4.5.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 }\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(\n SELECTOR_DATA_TOGGLES\n )[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 &&\n 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 $(input).trigger('change')\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',\n !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) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n\n if (!data) {\n data = new Button(this)\n $(this).data(DATA_KEY, data)\n }\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 === 'LABEL' && inputBtn && inputBtn.type === 'checkbox') {\n event.preventDefault() // work around event sent to label and input\n }\n Button._jQueryInterface.call($(button), 'toggle')\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.5.0): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/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.5.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 // 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 ($(this._element).is(':visible') && $(this._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._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 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 _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\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 nextElementInterval = parseInt(nextElement.getAttribute('data-interval'), 10)\n if (nextElementInterval) {\n this._config.defaultInterval = this._config.defaultInterval || this._config.interval\n this._config.interval = nextElementInterval\n } else {\n this._config.interval = this._config.defaultInterval || this._config.interval\n }\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 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.5.0): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/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.5.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 $this = $(this)\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 && _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 $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 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.0\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'], 10) + parseFloat(styles['border' + sideB + 'Width'], 10);\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, 10);\n var borderLeftWidth = parseFloat(styles.borderLeftWidth, 10);\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, 10);\n var marginLeft = parseFloat(styles.marginLeft, 10);\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], 10);\n var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width'], 10);\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.5.0): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/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.5.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 // Disable totally Popper.js for Dropdown 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.js (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 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 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 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.js 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 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 || 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.5.0): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/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.5.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 if (this._config.backdrop === 'static') {\n const hideEventPrevented = $.Event(EVENT_HIDE_PREVENTED)\n\n $(this._element).trigger(hideEventPrevented)\n if (hideEventPrevented.defaultPrevented) {\n return\n }\n\n this._element.classList.add(CLASS_NAME_STATIC)\n\n const modalTransitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element).one(Util.TRANSITION_END, () => {\n this._element.classList.remove(CLASS_NAME_STATIC)\n })\n .emulateTransitionEnd(modalTransitionDuration)\n this._element.focus()\n } else {\n this.hide()\n }\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\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 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._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 if (event.target !== event.currentTarget) {\n return\n }\n\n this._triggerBackdropTransition()\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 =\n 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 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.5.0): tools/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/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.5.0): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/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.5.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 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 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.js (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\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 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 let data = $(this).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 $(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 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.5.0): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/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.5.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 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 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.5.0): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/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.5.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 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 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 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

    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%0Dso|=I1OUj{o3V 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 + + + + +Created by FontForge 20190801 at Thu Jun 18 14:52:21 2020 + By Robert Madole +Copyright (c) Font Awesome + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-solid-900.ttf b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-solid-900.ttf new file mode 100644 index 0000000000000000000000000000000000000000..8adeea24eedc0d87282d26536cfd74df4694d970 GIT binary patch literal 204580 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

Based on Bootstrap button.

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 literal 0 HcmV?d00001 From e1f1c2642fcf739ff177661b14f04fd08d21f36b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Sat, 4 Jul 2020 23:36:55 +0300 Subject: [PATCH 011/137] Update Part-3.md --- docs/en/Tutorials/Part-3.md | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/docs/en/Tutorials/Part-3.md b/docs/en/Tutorials/Part-3.md index 14822c9fe2..b9b00a8ece 100644 --- a/docs/en/Tutorials/Part-3.md +++ b/docs/en/Tutorials/Part-3.md @@ -1,4 +1,4 @@ -## ASP.NET Core {{UI_Value}} Tutorial - Part 3 +# ASP.NET Core {{UI_Value}} Tutorial - Part 3 ````json //[doc-params] { @@ -21,15 +21,18 @@ else end }} -### About this tutorial +## About This Tutorial -This is the third part of the ASP.NET Core {{UI_Value}} tutorial series. See all parts: +In this tutorial series, you will build an ABP based web application named `Acme.BookStore`. This application is used to manage a list of books and their authors. It is developed using the following technologies: -- [Part I: Creating the project and book list page](part-1.md) -- [Part II: Creating, updating and deleting books](part-2.md) -- **Part III: Integration tests (this tutorial)** +* **{{DB_Text}}** as the ORM provider. +* **{{UI_Value}}** as the UI Framework. + +This tutorial is organized as the following parts; -*You can also check out [the video course](https://amazingsolutions.teachable.com/p/lets-build-the-bookstore-application) prepared by the community, based on this tutorial.* +- [Part I: Creating the project and book list page](part-1.md) +- [Part-2: Creating, updating and deleting books](Part-2.md) +- **Part-3: Integration tests (this part)** ### Test projects in the solution From 85cd10ef31b2cf548cb0699124b79b84c443e18f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Sun, 5 Jul 2020 00:04:04 +0300 Subject: [PATCH 012/137] Completed the 3rd part of the tutorial. --- docs/en/Tutorials/Part-3.md | 155 ++++++++++++++++++++++-------------- 1 file changed, 94 insertions(+), 61 deletions(-) diff --git a/docs/en/Tutorials/Part-3.md b/docs/en/Tutorials/Part-3.md index b9b00a8ece..92be05f73a 100644 --- a/docs/en/Tutorials/Part-3.md +++ b/docs/en/Tutorials/Part-3.md @@ -34,7 +34,7 @@ This tutorial is organized as the following parts; - [Part-2: Creating, updating and deleting books](Part-2.md) - **Part-3: Integration tests (this part)** -### Test projects in the solution +## Test Projects in the Solution This part covers the **server side** tests. There are several test projects in the solution: @@ -46,76 +46,31 @@ Each project is used to test the related project. Test projects use the followin * [Shoudly](http://shouldly.readthedocs.io/en/latest/) as the assertion library. * [NSubstitute](http://nsubstitute.github.io/) as the mocking library. -### Adding test data +{{if DB="ef"}} -Startup template contains the `BookStoreTestDataBuilder` class in the `Acme.BookStore.TestBase` project which creates initial data to run tests. Change the content of `BookStoreTestDataSeedContributor` class as show below: +> The test projects are configured to use **SQLite in-memory** as the database. A separate database instance is created and seeded (with the data seed system) to prepare a fresh database for every test. -````csharp -using System; -using System.Threading.Tasks; -using Volo.Abp.Data; -using Volo.Abp.DependencyInjection; -using Volo.Abp.Domain.Repositories; -using Volo.Abp.Guids; +{{else if DB="mongodb"}} -namespace Acme.BookStore -{ - public class BookStoreTestDataSeedContributor - : IDataSeedContributor, ITransientDependency - { - private readonly IRepository _bookRepository; - private readonly IGuidGenerator _guidGenerator; +> **[Mongo2Go](https://github.com/Mongo2Go/Mongo2Go)** library is used to mock the MongoDB database. A separate database instance is created and seeded (with the data seed system) to prepare a fresh database for every test. - public BookStoreTestDataSeedContributor( - IRepository bookRepository, - IGuidGenerator guidGenerator) - { - _bookRepository = bookRepository; - _guidGenerator = guidGenerator; - } +{{end}} - public async Task SeedAsync(DataSeedContext context) - { - await _bookRepository.InsertAsync( - new Book(id: _guidGenerator.Create(), - name: "Test book 1", - type: BookType.Fantastic, - publishDate: new DateTime(2015, 05, 24), - price: 21 - ) - ); +## Adding Test Data - await _bookRepository.InsertAsync( - new Book(id: _guidGenerator.Create(), - name: "Test book 2", - type: BookType.Science, - publishDate: new DateTime(2014, 02, 11), - price: 15 - ) - ); - } - } -} -```` - -* `IRepository` is injected and used it in the `SeedAsync` to create two book entities as the test data. -* `IGuidGenerator` is injected to create GUIDs. While `Guid.NewGuid()` would perfectly work for testing, `IGuidGenerator` has additional features especially important while using real databases. Further information, see the [Guid generation document](../Guid-Generation.md). +If you had created a data seed contributor as described in the [first part](Part-1.md), the same data will be available in your tests. So, you can skip this section. If you haven't created the seed contributor, you can use the `BookStoreTestDataSeedContributor` to seed the same data to be used in the tests below. -### Testing the application service BookAppService +## Testing The Application Service: BookAppService Create a test class named `BookAppService_Tests` in the `Acme.BookStore.Application.Tests` project: ````csharp -using System; -using System.Linq; using System.Threading.Tasks; -using Xunit; using Shouldly; using Volo.Abp.Application.Dtos; -using Volo.Abp.Validation; -using Microsoft.EntityFrameworkCore.Internal; +using Xunit; -namespace Acme.BookStore +namespace Acme.BookStore.Books { public class BookAppService_Tests : BookStoreApplicationTestBase { @@ -136,15 +91,16 @@ namespace Acme.BookStore //Assert result.TotalCount.ShouldBeGreaterThan(0); - result.Items.ShouldContain(b => b.Name == "Test book 1"); + result.Items.ShouldContain(b => b.Name == "1984"); } } } ```` -* `Should_Get_List_Of_Books` test simply uses `BookAppService.GetListAsync` method to get and check the list of users. +* `Should_Get_List_Of_Books` test simply uses `BookAppService.GetListAsync` method to get and check the list of books. +* We can safely check the book "1984" by its name, because we know that this books is available in the database since we've added it in the seed data. -Add a new test that creates a valid new book: +Add a new test method to the `BookAppService_Tests` class that creates a new **valid** book: ````csharp [Fact] @@ -173,7 +129,7 @@ Add a new test that tries to create an invalid book and fails: [Fact] public async Task Should_Not_Create_A_Book_Without_Name() { - var exception = await Assert.ThrowsAsync(async () => + var exception = await Assert.ThrowsAsync(async () => { await _bookAppService.CreateAsync( new CreateUpdateBookDto @@ -193,9 +149,86 @@ public async Task Should_Not_Create_A_Book_Without_Name() * Since the `Name` is empty, ABP will throw an `AbpValidationException`. +The final test class should be as shown below: + +````csharp +using System; +using System.Linq; +using System.Threading.Tasks; +using Shouldly; +using Volo.Abp.Application.Dtos; +using Volo.Abp.Validation; +using Xunit; + +namespace Acme.BookStore.Books +{ + public class BookAppService_Tests : BookStoreApplicationTestBase + { + private readonly IBookAppService _bookAppService; + + public BookAppService_Tests() + { + _bookAppService = GetRequiredService(); + } + + [Fact] + public async Task Should_Get_List_Of_Books() + { + //Act + var result = await _bookAppService.GetListAsync( + new PagedAndSortedResultRequestDto() + ); + + //Assert + result.TotalCount.ShouldBeGreaterThan(0); + result.Items.ShouldContain(b => b.Name == "1984"); + } + + [Fact] + public async Task Should_Create_A_Valid_Book() + { + //Act + var result = await _bookAppService.CreateAsync( + new CreateUpdateBookDto + { + Name = "New test book 42", + Price = 10, + PublishDate = System.DateTime.Now, + Type = BookType.ScienceFiction + } + ); + + //Assert + result.Id.ShouldNotBe(Guid.Empty); + result.Name.ShouldBe("New test book 42"); + } + + [Fact] + public async Task Should_Not_Create_A_Book_Without_Name() + { + var exception = await Assert.ThrowsAsync(async () => + { + await _bookAppService.CreateAsync( + new CreateUpdateBookDto + { + Name = "", + Price = 10, + PublishDate = DateTime.Now, + Type = BookType.ScienceFiction + } + ); + }); + + exception.ValidationErrors + .ShouldContain(err => err.MemberNames.Any(mem => mem == "Name")); + } + } +} +```` + Open the **Test Explorer Window** (use Test -> Windows -> Test Explorer menu if it is not visible) and **Run All** tests: ![bookstore-appservice-tests](./images/bookstore-appservice-tests.png) -Congratulations, the green icons show, the tests have been successfully passed! +Congratulations, the **green icons** indicates that the tests have been successfully passed! From 12200857c0fcbb071dacf50889985e8d9e0e8a3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Sun, 5 Jul 2020 00:32:59 +0300 Subject: [PATCH 013/137] Update tutorial to fix the paging. --- docs/en/Tutorials/Part-1.md | 86 ++++----- docs/en/Tutorials/Part-2.md | 341 +++++++++++++++++++----------------- 2 files changed, 220 insertions(+), 207 deletions(-) diff --git a/docs/en/Tutorials/Part-1.md b/docs/en/Tutorials/Part-1.md index 00e0852d37..9279a53298 100644 --- a/docs/en/Tutorials/Part-1.md +++ b/docs/en/Tutorials/Part-1.md @@ -702,50 +702,52 @@ $(function () { var dataTable = $('#BooksTable').DataTable( abp.libs.datatables.normalizeConfiguration({ - ajax: abp.libs.datatables.createAjax(acme.bookStore.books.book.getList), - columnDefs: [ - { - title: l('Name'), - data: "name" - }, - { - title: l('Type'), - data: "type", - render: function (data) { - console.log(data); - return l('Enum:BookType:' + data); - } - }, - { - title: l('PublishDate'), - data: "publishDate", - render: function (data) { - return luxon - .DateTime - .fromISO(data, { - locale: abp.localization.currentCulture.name - }).toLocaleString(); - } - }, - { - title: l('Price'), - data: "price" - }, - { - title: l('CreationTime'), data: "creationTime", - render: function (data) { - return luxon - .DateTime - .fromISO(data, { - locale: abp.localization.currentCulture.name - }).toLocaleString(luxon.DateTime.DATETIME_SHORT); - } + serverSide: true, + paging: true, + order: [[1, "asc"]], + searching: false, + scrollX: true, + ajax: abp.libs.datatables.createAjax(acme.bookStore.books.book.getList), + columnDefs: [ + { + title: l('Name'), + data: "name" + }, + { + title: l('Type'), + data: "type", + render: function (data) { + return l('Enum:BookType:' + data); } - ] - } - ) + }, + { + title: l('PublishDate'), + data: "publishDate", + render: function (data) { + return luxon + .DateTime + .fromISO(data, { + locale: abp.localization.currentCulture.name + }).toLocaleString(); + } + }, + { + title: l('Price'), + data: "price" + }, + { + title: l('CreationTime'), data: "creationTime", + render: function (data) { + return luxon + .DateTime + .fromISO(data, { + locale: abp.localization.currentCulture.name + }).toLocaleString(luxon.DateTime.DATETIME_SHORT); + } + } + ] + }) ); - }); ```` diff --git a/docs/en/Tutorials/Part-2.md b/docs/en/Tutorials/Part-2.md index 694d20ed09..dc0a222ea1 100644 --- a/docs/en/Tutorials/Part-2.md +++ b/docs/en/Tutorials/Part-2.md @@ -207,47 +207,51 @@ $(function () { var dataTable = $('#BooksTable').DataTable( abp.libs.datatables.normalizeConfiguration({ - ajax: abp.libs.datatables.createAjax(acme.bookStore.books.book.getList), - columnDefs: [ - { - title: l('Name'), - data: "name" - }, - { - title: l('Type'), - data: "type", - render: function (data) { - return l('Enum:BookType:' + data); - } - }, - { - title: l('PublishDate'), - data: "publishDate", - render: function (data) { - return luxon - .DateTime - .fromISO(data, { - locale: abp.localization.currentCulture.name - }).toLocaleString(); - } - }, - { - title: l('Price'), - data: "price" - }, - { - title: l('CreationTime'), data: "creationTime", - render: function (data) { - return luxon - .DateTime - .fromISO(data, { - locale: abp.localization.currentCulture.name - }).toLocaleString(luxon.DateTime.DATETIME_SHORT); - } + serverSide: true, + paging: true, + order: [[1, "asc"]], + searching: false, + scrollX: true, + ajax: abp.libs.datatables.createAjax(acme.bookStore.books.book.getList), + columnDefs: [ + { + title: l('Name'), + data: "name" + }, + { + title: l('Type'), + data: "type", + render: function (data) { + return l('Enum:BookType:' + data); } - ] - } - ) + }, + { + title: l('PublishDate'), + data: "publishDate", + render: function (data) { + return luxon + .DateTime + .fromISO(data, { + locale: abp.localization.currentCulture.name + }).toLocaleString(); + } + }, + { + title: l('Price'), + data: "price" + }, + { + title: l('CreationTime'), data: "creationTime", + render: function (data) { + return luxon + .DateTime + .fromISO(data, { + locale: abp.localization.currentCulture.name + }).toLocaleString(luxon.DateTime.DATETIME_SHORT); + } + } + ] + }) ); var createModal = new abp.ModalManager(abp.appPath + 'Books/CreateModal'); @@ -260,7 +264,6 @@ $(function () { e.preventDefault(); createModal.open(); }); - }); ```` @@ -388,61 +391,65 @@ $(function () { var dataTable = $('#BooksTable').DataTable( abp.libs.datatables.normalizeConfiguration({ - ajax: abp.libs.datatables.createAjax(acme.bookStore.books.book.getList), - columnDefs: [ - { - title: l('Actions'), - rowAction: { - items: - [ - { - text: l('Edit'), - action: function (data) { - editModal.open({ id: data.record.id }); - } + serverSide: true, + paging: true, + order: [[1, "asc"]], + searching: false, + scrollX: true, + ajax: abp.libs.datatables.createAjax(acme.bookStore.books.book.getList), + columnDefs: [ + { + title: l('Actions'), + rowAction: { + items: + [ + { + text: l('Edit'), + action: function (data) { + editModal.open({ id: data.record.id }); } - ] - } - }, - { - title: l('Name'), - data: "name" - }, - { - title: l('Type'), - data: "type", - render: function (data) { - return l('Enum:BookType:' + data); - } - }, - { - title: l('PublishDate'), - data: "publishDate", - render: function (data) { - return luxon - .DateTime - .fromISO(data, { - locale: abp.localization.currentCulture.name - }).toLocaleString(); - } - }, - { - title: l('Price'), - data: "price" - }, - { - title: l('CreationTime'), data: "creationTime", - render: function (data) { - return luxon - .DateTime - .fromISO(data, { - locale: abp.localization.currentCulture.name - }).toLocaleString(luxon.DateTime.DATETIME_SHORT); - } + } + ] + } + }, + { + title: l('Name'), + data: "name" + }, + { + title: l('Type'), + data: "type", + render: function (data) { + return l('Enum:BookType:' + data); + } + }, + { + title: l('PublishDate'), + data: "publishDate", + render: function (data) { + return luxon + .DateTime + .fromISO(data, { + locale: abp.localization.currentCulture.name + }).toLocaleString(); } - ] - } - ) + }, + { + title: l('Price'), + data: "price" + }, + { + title: l('CreationTime'), data: "creationTime", + render: function (data) { + return luxon + .DateTime + .fromISO(data, { + locale: abp.localization.currentCulture.name + }).toLocaleString(luxon.DateTime.DATETIME_SHORT); + } + } + ] + }) ); createModal.onResult(function () { @@ -513,80 +520,84 @@ $(function () { var dataTable = $('#BooksTable').DataTable( abp.libs.datatables.normalizeConfiguration({ - ajax: abp.libs.datatables.createAjax(acme.bookStore.books.book.getList), - columnDefs: [ - { - title: l('Actions'), - rowAction: { - items: - [ - { - text: l('Edit'), - action: function (data) { - editModal.open({ id: data.record.id }); - } + serverSide: true, + paging: true, + order: [[1, "asc"]], + searching: false, + scrollX: true, + ajax: abp.libs.datatables.createAjax(acme.bookStore.books.book.getList), + columnDefs: [ + { + title: l('Actions'), + rowAction: { + items: + [ + { + text: l('Edit'), + action: function (data) { + editModal.open({ id: data.record.id }); + } + }, + { + text: l('Delete'), + confirmMessage: function (data) { + return l( + 'BookDeletionConfirmationMessage', + data.record.name + ); }, - { - text: l('Delete'), - confirmMessage: function (data) { - return l( - 'BookDeletionConfirmationMessage', - data.record.name - ); - }, - action: function (data) { - acme.bookStore.books.book - .delete(data.record.id) - .then(function() { - abp.notify.info( - l('SuccessfullyDeleted') - ); - dataTable.ajax.reload(); - }); - } + action: function (data) { + acme.bookStore.books.book + .delete(data.record.id) + .then(function() { + abp.notify.info( + l('SuccessfullyDeleted') + ); + dataTable.ajax.reload(); + }); } - ] - } - }, - { - title: l('Name'), - data: "name" - }, - { - title: l('Type'), - data: "type", - render: function (data) { - return l('Enum:BookType:' + data); - } - }, - { - title: l('PublishDate'), - data: "publishDate", - render: function (data) { - return luxon - .DateTime - .fromISO(data, { - locale: abp.localization.currentCulture.name - }).toLocaleString(); - } - }, - { - title: l('Price'), - data: "price" - }, - { - title: l('CreationTime'), data: "creationTime", - render: function (data) { - return luxon - .DateTime - .fromISO(data, { - locale: abp.localization.currentCulture.name - }).toLocaleString(luxon.DateTime.DATETIME_SHORT); - } + } + ] + } + }, + { + title: l('Name'), + data: "name" + }, + { + title: l('Type'), + data: "type", + render: function (data) { + return l('Enum:BookType:' + data); + } + }, + { + title: l('PublishDate'), + data: "publishDate", + render: function (data) { + return luxon + .DateTime + .fromISO(data, { + locale: abp.localization.currentCulture.name + }).toLocaleString(); + } + }, + { + title: l('Price'), + data: "price" + }, + { + title: l('CreationTime'), data: "creationTime", + render: function (data) { + return luxon + .DateTime + .fromISO(data, { + locale: abp.localization.currentCulture.name + }).toLocaleString(luxon.DateTime.DATETIME_SHORT); } - ] - } - ) + } + ] + }) ); createModal.onResult(function () { From df510ffa30caa9ba2dcf542f42327fc208823507 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Sun, 5 Jul 2020 14:17:04 +0300 Subject: [PATCH 014/137] Added source code --- docs/en/Tutorials/Part-2.md | 4 ++++ docs/en/Tutorials/Part-3.md | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/docs/en/Tutorials/Part-2.md b/docs/en/Tutorials/Part-2.md index dc0a222ea1..289d74e847 100644 --- a/docs/en/Tutorials/Part-2.md +++ b/docs/en/Tutorials/Part-2.md @@ -34,6 +34,10 @@ This tutorial is organized as the following parts; - **Part-2: Creating, updating and deleting books (this part)** - [Part-3: Integration tests](part-3.md) +### Source Code + +You can find the completed solution on {{if UI == "MVC"}}[the GitHub repository](https://github.com/abpframework/abp-samples/tree/master/BookStore-Mvc-EfCore){{else}}[the GitHub repository](https://github.com/abpframework/abp-samples/tree/master/BookStore-Angular-MongoDb){{end}}. + {{if UI == "MVC"}} ## Creating a New Book diff --git a/docs/en/Tutorials/Part-3.md b/docs/en/Tutorials/Part-3.md index 92be05f73a..fce9fe243d 100644 --- a/docs/en/Tutorials/Part-3.md +++ b/docs/en/Tutorials/Part-3.md @@ -34,6 +34,10 @@ This tutorial is organized as the following parts; - [Part-2: Creating, updating and deleting books](Part-2.md) - **Part-3: Integration tests (this part)** +### Source Code + +You can find the completed solution on {{if UI == "MVC"}}[the GitHub repository](https://github.com/abpframework/abp-samples/tree/master/BookStore-Mvc-EfCore){{else}}[the GitHub repository](https://github.com/abpframework/abp-samples/tree/master/BookStore-Angular-MongoDb){{end}}. + ## Test Projects in the Solution This part covers the **server side** tests. There are several test projects in the solution: From d8957fe5dc8b7f8f868c329dff504d0ac0d87158 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Sun, 5 Jul 2020 15:31:20 +0300 Subject: [PATCH 015/137] Added authorization part --- docs/en/Tutorials/Part-4.md | 226 ++++++++++++++++++ .../images/bookstore-edit-delete-actions.png | Bin 0 -> 12396 bytes .../images/bookstore-permissions-ui.png | Bin 0 -> 58971 bytes 3 files changed, 226 insertions(+) create mode 100644 docs/en/Tutorials/Part-4.md create mode 100644 docs/en/Tutorials/images/bookstore-edit-delete-actions.png create mode 100644 docs/en/Tutorials/images/bookstore-permissions-ui.png diff --git a/docs/en/Tutorials/Part-4.md b/docs/en/Tutorials/Part-4.md new file mode 100644 index 0000000000..53aa15278f --- /dev/null +++ b/docs/en/Tutorials/Part-4.md @@ -0,0 +1,226 @@ +# ASP.NET Core {{UI_Value}} Tutorial - Part 4 +````json +//[doc-params] +{ + "UI": ["MVC","NG"] +} +```` + +{{ +if UI == "MVC" + DB="ef" + DB_Text="Entity Framework Core" + UI_Text="mvc" +else if UI == "NG" + DB="mongodb" + DB_Text="MongoDB" + UI_Text="angular" +else + DB ="?" + UI_Text="?" +end +}} + +## About This Tutorial + +In this tutorial series, you will build an ABP based web application named `Acme.BookStore`. This application is used to manage a list of books and their authors. It is developed using the following technologies: + +* **{{DB_Text}}** as the ORM provider. +* **{{UI_Value}}** as the UI Framework. + +This tutorial is organized as the following parts; + +- [Part I: Creating the project and book list page](part-1.md) +- [Part-2: Creating, updating and deleting books](Part-2.md) +- [Part-3: Integration tests](Part-3.md) +- **Part-4: Authorization (this part)** + +### Source Code + +You can find the completed solution on {{if UI == "MVC"}}[the GitHub repository](https://github.com/abpframework/abp-samples/tree/master/BookStore-Mvc-EfCore){{else}}[the GitHub repository](https://github.com/abpframework/abp-samples/tree/master/BookStore-Angular-MongoDb){{end}}. + +## Permissions + +ABP Framework provides an [authorization system](../Authorization.md) based on the ASP.NET Core's [authorization infrastructure](https://docs.microsoft.com/en-us/aspnet/core/security/authorization/introduction). One major feature added on top of the standard authorization infrastructure is the **permission system** which allows to define permissions and enable/disable per role, user or client. + +### Permission Names + +A permission must have a unique name (a `string`). The best way is to define it as a `const`, so we can reuse the permission name. + +Open the `BookStorePermissions` class and change the content as shown below: + +````csharp +namespace Acme.BookStore.Permissions +{ + public static class BookStorePermissions + { + public const string GroupName = "BookStore"; + + public static class Books + { + public const string Default = GroupName + ".Books"; + public const string Create = Default + ".Create"; + public const string Edit = Default + ".Edit"; + public const string Delete = Default + ".Delete"; + } + } +} +```` + +This is a hierarchical way of defining permission names. For example, "create book" permission name was defined as `BookStore.Books.Create`. + +### Permission Definitions + +You should define permissions before using them. + +Open the `BookStorePermissionDefinitionProvider` class inside the `Acme.BookStore.Application.Contracts` project and change the content as shown below: + +````csharp +using Acme.BookStore.Localization; +using Volo.Abp.Authorization.Permissions; +using Volo.Abp.Localization; + +namespace Acme.BookStore.Permissions +{ + public class BookStorePermissionDefinitionProvider : PermissionDefinitionProvider + { + public override void Define(IPermissionDefinitionContext context) + { + var bookStoreGroup = context.AddGroup(BookStorePermissions.GroupName, L("Permission:BookStore")); + + var booksPermission = bookStoreGroup.AddPermission(BookStorePermissions.Books.Default, L("Permission:Books")); + booksPermission.AddChild(BookStorePermissions.Books.Create, L("Permission:Books.Create")); + booksPermission.AddChild(BookStorePermissions.Books.Edit, L("Permission:Books.Edit")); + booksPermission.AddChild(BookStorePermissions.Books.Delete, L("Permission:Books.Delete")); + } + + private static LocalizableString L(string name) + { + return LocalizableString.Create(name); + } + } +} +```` + +This class defines a **permission group** (to group permissions on the UI, will be seen below) and **4 permissions** inside this group. Also, **Create**, **Edit** and **Delete** are children of the `BookStorePermissions.Books.Default` permission. A child permission can be selected **only if the parent was selected**. + +Finally, edit the localization file (`en.json` under the `Localization/BookStore` folder of the `Acme.BookStore.Domain.Shared` project) to define the localization keys used above: + +````json +"Permission:BookStore": "Book Store", +"Permission:Books": "Book Management", +"Permission:Books.Create": "Creating new books", +"Permission:Books.Edit": "Editing the books", +"Permission:Books.Delete": "Deleting the books" +```` + +> Localization key names are arbitrary and no forcing rule. But we prefer the convention used above. + +### Permission Management UI + +Once you define the permissions, you can see them on the **permission management modal**. + +Go to the *Administration -> Identity -> Roles* page, select *Permissions* action for the admin role to open the permission management modal: + +![bookstore-permissions-ui](images/bookstore-permissions-ui.png) + +Grant the permissions you want and save the modal. + +## Authorization + +Now, you can use the permissions to authorize the book management. + +### Application Layer & HTTP API + +Open the `BookAppService` class and add set the policy names as the permission names defined above: + +````csharp +using System; +using Acme.BookStore.Permissions; +using Volo.Abp.Application.Dtos; +using Volo.Abp.Application.Services; +using Volo.Abp.Domain.Repositories; + +namespace Acme.BookStore.Books +{ + public class BookAppService : + CrudAppService< + Book, //The Book entity + BookDto, //Used to show books + Guid, //Primary key of the book entity + PagedAndSortedResultRequestDto, //Used for paging/sorting + CreateUpdateBookDto>, //Used to create/update a book + IBookAppService //implement the IBookAppService + { + public BookAppService(IRepository repository) + : base(repository) + { + GetPolicyName = BookStorePermissions.Books.Default; + GetListPolicyName = BookStorePermissions.Books.Default; + CreatePolicyName = BookStorePermissions.Books.Create; + UpdatePolicyName = BookStorePermissions.Books.Edit; + DeletePolicyName = BookStorePermissions.Books.Create; + } + } +} +```` + +Added code to the constructor. Base `CrudAppService` automatically uses these permissions on the CRUD operations. This makes the **application service** secure, but also makes the **HTTP API** secure since this service is automatically used as an HTTP API as explained before (see [auto API controllers](../API/Auto-API-Controllers.md)). + +{{if UI == "MVC"}} + +### Razor Page + +While securing the HTTP API & the application service prevents unauthorized users to use the services, they can still navigate to the book management page. While they will get authorization exceptions when the page makes the first AJAX call to the server, we should also authorize the page for a better user experience and security. + +Open the `BookStoreWebModule` and add the following code block inside the `ConfigureServices` method: + +````csharp +Configure(options => +{ + options.Conventions.AuthorizePage("/Books/Index", BookStorePermissions.Books.Default); + options.Conventions.AuthorizePage("/Books/CreateModal", BookStorePermissions.Books.Create); + options.Conventions.AuthorizePage("/Books/EditModal", BookStorePermissions.Books.Edit); +}); +```` + +Now, unauthorized users are redirected to the **login page**. + +### JavaScript Side + +Books table in the book management page has an actions button for each row. The actions button includes *Edit* and *Delete* action: + +![bookstore-edit-delete-actions](images/bookstore-edit-delete-actions.png) + +We should hide an action if the current user has not granted for the related permission. Datatables row actions has a `visible` option that can be set to `false` to hide the action item. + +Open the `Pages/Books/Index.js` inside the `Acme.BookStore.Web` project and add a `visible` option to the `Edit` action as shown below: + +````js +{ + text: l('Edit'), + visible: abp.auth.isGranted('BookStore.Books.Edit'), //CHECK for the PERMISSION + action: function (data) { + editModal.open({ id: data.record.id }); + } +} +```` + +Do same for the `Delete` action: + +````js +visible: abp.auth.isGranted('BookStore.Books.Delete') +```` + +* `abp.auth.isGranted(...)` is used to check a permission that is defined before. +* `visible` could also be get a function that returns a `bool` if the value will be calculated later, based on some conditions. + +### Menu Item + +Even we secured all layers of the book management page, it is still visible on the main menu of the application. + +{{else if UI == "NG"}} + +***Angular UI authorization document is being prepared...*** + +{{end}} \ No newline at end of file diff --git a/docs/en/Tutorials/images/bookstore-edit-delete-actions.png b/docs/en/Tutorials/images/bookstore-edit-delete-actions.png new file mode 100644 index 0000000000000000000000000000000000000000..9c275c6d15a0737498098b4c3ff2cafebd648595 GIT binary patch literal 12396 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 literal 0 HcmV?d00001 diff --git a/docs/en/Tutorials/images/bookstore-permissions-ui.png b/docs/en/Tutorials/images/bookstore-permissions-ui.png new file mode 100644 index 0000000000000000000000000000000000000000..749f7a013f72763af7759101d83b50b47527f76c GIT binary patch literal 58971 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 W=F2m#l*5w%7|~GCQLcM#8~GoxzB@et literal 0 HcmV?d00001 From c95f8ff88ba4c2a84e840023110de1ab2651cedb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Sun, 5 Jul 2020 16:48:33 +0300 Subject: [PATCH 016/137] Complete the part 4 for the mvc UI --- docs/en/Tutorials/Part-4.md | 93 +++++++++++++++++- .../bookstore-new-book-button-small.png | Bin 0 -> 3005 bytes 2 files changed, 91 insertions(+), 2 deletions(-) create mode 100644 docs/en/Tutorials/images/bookstore-new-book-button-small.png diff --git a/docs/en/Tutorials/Part-4.md b/docs/en/Tutorials/Part-4.md index 53aa15278f..43523440db 100644 --- a/docs/en/Tutorials/Part-4.md +++ b/docs/en/Tutorials/Part-4.md @@ -171,7 +171,7 @@ Added code to the constructor. Base `CrudAppService` automatically uses these pe ### Razor Page -While securing the HTTP API & the application service prevents unauthorized users to use the services, they can still navigate to the book management page. While they will get authorization exceptions when the page makes the first AJAX call to the server, we should also authorize the page for a better user experience and security. +While securing the HTTP API & the application service prevents unauthorized users to use the services, they can still navigate to the book management page. While they will get authorization exception when the page makes the first AJAX call to the server, we should also authorize the page for a better user experience and security. Open the `BookStoreWebModule` and add the following code block inside the `ConfigureServices` method: @@ -186,6 +186,55 @@ Configure(options => Now, unauthorized users are redirected to the **login page**. +#### Hide the New Book Button + +The book management page has a *New Book* button that should be invisible if the current user has no *Book Creation* permission. + +![bookstore-new-book-button-small](images/bookstore-new-book-button-small.png) + +Open the `Pages/Books/Index.cshtml` file and change the content as shown below: + +````html +@page +@using Acme.BookStore.Localization +@using Acme.BookStore.Permissions +@using Acme.BookStore.Web.Pages.Books +@using Microsoft.AspNetCore.Authorization +@using Microsoft.Extensions.Localization +@model IndexModel +@inject IStringLocalizer L +@inject IAuthorizationService AuthorizationService +@section scripts +{ + +} + + + + + + @L["Books"] + + + @if (await AuthorizationService.IsGrantedAsync(BookStorePermissions.Books.Create)) + { + + } + + + + + + + +```` + +* Added `@inject IAuthorizationService AuthorizationService` to access to the authorization service. +* Used `@if (await AuthorizationService.IsGrantedAsync(BookStorePermissions.Books.Create))` to check the book creation permission to conditionally render the *New Book* button. + ### JavaScript Side Books table in the book management page has an actions button for each row. The actions button includes *Edit* and *Delete* action: @@ -217,7 +266,47 @@ visible: abp.auth.isGranted('BookStore.Books.Delete') ### Menu Item -Even we secured all layers of the book management page, it is still visible on the main menu of the application. +Even we have secured all the layers of the book management page, it is still visible on the main menu of the application. We should hide the menu item if the current user has no permission. + +Open the `BookStoreMenuContributor` class, find the code block below: + +````csharp +context.Menu.AddItem( + new ApplicationMenuItem( + "BooksStore", + l["Menu:BookStore"], + icon: "fa fa-book" + ).AddItem( + new ApplicationMenuItem( + "BooksStore.Books", + l["Menu:Books"], + url: "/Books" + ) + ) +); +```` + +And replace this code block with the following: + +````csharp +var bookStoreMenu = new ApplicationMenuItem( + "BooksStore", + l["Menu:BookStore"], + icon: "fa fa-book" +); + +context.Menu.AddItem(bookStoreMenu); + +//CHECK the PERMISSION +if (await context.IsGrantedAsync(BookStorePermissions.Books.Default)) +{ + bookStoreMenu.AddItem(new ApplicationMenuItem( + "BooksStore.Books", + l["Menu:Books"], + url: "/Books" + )); +} +```` {{else if UI == "NG"}} diff --git a/docs/en/Tutorials/images/bookstore-new-book-button-small.png b/docs/en/Tutorials/images/bookstore-new-book-button-small.png new file mode 100644 index 0000000000000000000000000000000000000000..13f7da9285c92a9ee1476cd12cd66d2499d652f3 GIT binary patch literal 3005 zcmbuBXEYm(8pmSZP8M*Rl7#SD2ZKa*C>(DQX@#!2tlpdI|wxz-%lfYOKFwFt;t`x)q+F;CM;-8fp$Os5xS z;56&g1I(uo_?Qvb>8wC5#lti0g`+-@GVrV^UnjFI@0zRKEnu?k`yk7^uk~OY3eV}f zML6DmPSH%7ALUT$5BEQ zL80St+u$mC;S_iOvkXiekuAg}YXpkpEoFkSm`4glOK5@G{^q)NR=KqE`lT$}l|!TT zlcPOSH(hMC7;deq$>Du}7JU5niE_C}k)FJA(V@4e%n~&?3pY7HTEj_lzlF<;#%Xi9 ziScz_h|&tzY+0igmz3DyhE~~XoOFs+Bzv}knj|D7{Ay}`dDn@smoUNb{VTh)MTdv3 z3O`owsKUetgJVeDP=cxEx%SyTeyiibFwf)8YEeWkuocrlx({npM z|K+yVGYH@-m!!@0G$G_xm88Aw9xF9YMn|QR&>iHQh`INnsp3c6>$c%(($Y{@PR7-y z5a*>GX9__@3)JzC{_fQ->7e})yg;Xk;iyx?)Q@%l+ebgJ+i`~lCGDRvxx*KbrVq32 zaP^k(@iAMsuP0ylWAOrvg-l2a&H&?H;(#aBAj%$^a&o%I1eG8M7MO2w$*R35sILmM zG(`q+gb5|w+fBs@B#D=C#a&8zqAxCVu3h=xmr6iMN!M~$`ij0c5)>QQaV@statdBa z?+PLCQeL`g*VWf959D=!ktZKPf&#~XQ~P`8*JXG7YKCTOK``E_M#ae+@16SCRgaes zO(D+&DHwiLHQDfn4*A*DVZKS(j=jfy0b4<d^nE<}G0Xsw_qzl4?4m_qez~L2Dsf zV(C$%(X~EUXS;;wJrGHkF+#YQ`b{|viO{gYlrfDH4xi+Y8hp}x*LO#aYruw!+P>nl zWiuzNVAQo9x&LjjcV=~R0{fj|@Q?%L>0-^P`$+9rY8KBA7b0u)P8? zo1l-7JdD)UAao$cB*7!zedrjJ;`QWE$5z!_rQ+fI8y+*^+!n#190l6W)l?5}$-mI$j#9&?${QW&>aGx_X4&&Y+PM*JCRe{csv#GQZ`cHtd? zEdB7_9(sPscva>AS9(>00AEg!66X>1n?)5T`EBJuI2PAF-%))WOaL`=#lsU;?5{JD`94f&+Amo#FK6_xR+ur?=Boq+B|)< z-j9ST4SN7DQ|gJxYieM5$*3B}t_>ZrT%~5O8JmaDec2hyW;*yM9`$CNZpViM;NV~Y zq~N~D?5XiUQPlQLulz3r0=b-hyVl1_YCj3y9#q;0;|CN3>m*nU${n`J)P7aYEY=B!)PAT4-Z_V%2YY&E((1G^C7dWve7v zHe3}2vmLdq9^l+i-R(C zM(AB67MF8twZP5@>flm;ga<=AMm(aa{h-Z=cfz&Fe>2DV=%A1ZZmD7=WbL=Ov^(=$ zfWzr$ezZiqH5wzx+4n1l7W}!*Ob5g)(m+PuQ6nz>35jBpek+pE``m5LU*uM%*Gn>* zHndj*a;6zJ&po#+0Ib30 zKm@2ASRW=&=`xsqjy*FR&t*dK#T$#NLGoU(0B;{YQL1M>R+(KRtMhT$IHqUs_R@H{SA*e1s zlZAZn0Tg;W>|=DYLC#oil%qK&ZG{#Z;75lptNIcHJO!Yqevwh^{rCo6$H2AGgv)n+-L`z>r z03+^FkSWO9_8awq<%{2IBk~_tJ`o*L&l9h0Y$+fW97@p<^=oYcCx(08B<-w0UBVJG z6GazFXGyV;oH Date: Sun, 5 Jul 2020 16:51:33 +0300 Subject: [PATCH 017/137] Added navigation links to the tutorial. --- docs/en/Tutorials/Part-1.md | 1 + docs/en/Tutorials/Part-2.md | 1 + docs/en/Tutorials/Part-3.md | 4 ++++ 3 files changed, 6 insertions(+) diff --git a/docs/en/Tutorials/Part-1.md b/docs/en/Tutorials/Part-1.md index 9279a53298..53745f9b59 100644 --- a/docs/en/Tutorials/Part-1.md +++ b/docs/en/Tutorials/Part-1.md @@ -32,6 +32,7 @@ This tutorial is organized as the following parts; - **Part-1: Creating the project and book list page (this part)** - [Part-2: Creating, updating and deleting books](part-2.md) - [Part-3: Integration tests](part-3.md) +- [Part-4: Authorization](Part-4.md) ### Source Code diff --git a/docs/en/Tutorials/Part-2.md b/docs/en/Tutorials/Part-2.md index 289d74e847..c744d85229 100644 --- a/docs/en/Tutorials/Part-2.md +++ b/docs/en/Tutorials/Part-2.md @@ -33,6 +33,7 @@ This tutorial is organized as the following parts; - [Part I: Creating the project and book list page](part-1.md) - **Part-2: Creating, updating and deleting books (this part)** - [Part-3: Integration tests](part-3.md) +- [Part-4: Authorization](Part-4.md) ### Source Code diff --git a/docs/en/Tutorials/Part-3.md b/docs/en/Tutorials/Part-3.md index fce9fe243d..22e3cd4a5b 100644 --- a/docs/en/Tutorials/Part-3.md +++ b/docs/en/Tutorials/Part-3.md @@ -33,6 +33,7 @@ This tutorial is organized as the following parts; - [Part I: Creating the project and book list page](part-1.md) - [Part-2: Creating, updating and deleting books](Part-2.md) - **Part-3: Integration tests (this part)** +- [Part-4: Authorization](Part-4.md) ### Source Code @@ -236,3 +237,6 @@ Open the **Test Explorer Window** (use Test -> Windows -> Test Explorer menu if Congratulations, the **green icons** indicates that the tests have been successfully passed! +## Next Part + +See the [next part](part-4.md) of this tutorial. \ No newline at end of file From 8e9344db1e14633e5b73defea39f291940ad52ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Sun, 5 Jul 2020 17:27:55 +0300 Subject: [PATCH 018/137] Split the first part of two tutorial into 2 and rearranged the titles. --- docs/en/Tutorials/Part-1.md | 547 +------------- docs/en/Tutorials/Part-2.md | 1337 ++++++++-------------------------- docs/en/Tutorials/Part-3.md | 1348 +++++++++++++++++++++++++++++++---- docs/en/Tutorials/Part-4.md | 378 ++++------ docs/en/Tutorials/Part-5.md | 316 ++++++++ docs/en/docs-nav.json | 16 +- 6 files changed, 1999 insertions(+), 1943 deletions(-) create mode 100644 docs/en/Tutorials/Part-5.md diff --git a/docs/en/Tutorials/Part-1.md b/docs/en/Tutorials/Part-1.md index 53745f9b59..c74f7d8c85 100644 --- a/docs/en/Tutorials/Part-1.md +++ b/docs/en/Tutorials/Part-1.md @@ -1,4 +1,4 @@ -# ASP.NET Core {{UI_Value}} Tutorial - Part 1 +# Web Application Development Tutorial - Part 1: Creating the Server Side ````json //[doc-params] { @@ -29,10 +29,11 @@ In this tutorial series, you will build an ABP based web application named `Acme This tutorial is organized as the following parts; -- **Part-1: Creating the project and book list page (this part)** -- [Part-2: Creating, updating and deleting books](part-2.md) -- [Part-3: Integration tests](part-3.md) -- [Part-4: Authorization](Part-4.md) +- **Part 1: Creating the server side (this part)** +- [Part 2: The book list page](Part-2.md) +- [Part 3: Creating, updating and deleting books](Part-3.md) +- [Part 4: Integration tests](Part-4.md) +- [Part 5: Authorization](Part-5.md) ### Source Code @@ -490,538 +491,6 @@ If you try to execute the `[GET] /api/app/book` API to get a list of books, the That's pretty cool since we haven't written a single line of code to create the API controller, but now we have a fully working REST API! -{{if UI == "MVC"}} +## The Next Part -## Dynamic JavaScript Proxies - -It's common to call the HTTP API endpoints via AJAX from the **JavaScript** side. You can use `$.ajax` or another tool to call the endpoints. However, ABP offers a better way. - -ABP **dynamically** creates **[JavaScript Proxies](../UI/AspNetCore/)** for all API endpoints. So, you can use any **endpoint** just like calling a **JavaScript function**. - -### Testing in Developer Console of the Browser - -You can easily test the JavaScript proxies using your favorite browser's **Developer Console**. Run the application, open your browser's **developer tools** (*shortcut is generally F12*), switch to the **Console** tab, type the following code and press enter: - -````js -acme.bookStore.books.book.getList({}).done(function (result) { console.log(result); }); -```` - -* `acme.bookStore.books` is the namespace of the `BookAppService` converted to [camelCase](https://en.wikipedia.org/wiki/Camel_case). -* `book` is the conventional name for the `BookAppService` (removed `AppService` postfix and converted to camelCase). -* `getList` is the conventional name for the `GetListAsync` method defined in the `CrudAppService` base class (removed `Async` postfix and converted to camelCase). -* `{}` argument is used to send an empty object to the `GetListAsync` method which normally expects an object of type `PagedAndSortedResultRequestDto` that is used to send paging and sorting options to the server (all properties are optional with default values, so you can send an empty object). -* `getList` function returns a `promise`. You can pass a callback to the `then` (or `done`) function to get the result returned from the server. - -Running this code produces the following output: - -![bookstore-javascript-proxy-console](images/bookstore-javascript-proxy-console.png) - -You can see the **book list** returned from the server. You can also check the **network** tab of the developer tools to see the client to server communication: - -![bookstore-getlist-result-network](images/bookstore-getlist-result-network.png) - -Let's **create a new book** using the `create` function: - -````js -acme.bookStore.books.book.create({ - name: 'Foundation', - type: 7, - publishDate: '1951-05-24', - price: 21.5 - }).then(function (result) { - console.log('successfully created the book with id: ' + result.id); - }); -```` - -You should see a message in the console something like that: - -````text -successfully created the book with id: 439b0ea8-923e-8e1e-5d97-39f2c7ac4246 -```` - -Check the `Books` table in the database to see the new book row. You can try `get`, `update` and `delete` functions yourself. - -We will use these dynamic proxy functions in the next sections to communicate to the server. - -## Create a Books Page - -It's time to create something visible and usable! Instead of classic MVC, we will use the [Razor Pages UI](https://docs.microsoft.com/en-us/aspnet/core/tutorials/razor-pages/razor-pages-start) approach which is recommended by Microsoft. - -Create `Books` folder under the `Pages` folder of the `Acme.BookStore.Web` project. Add a new Razor Page by right clicking the Books folder then selecting **Add > Razor Page** menu item. Name it as `Index`: - -![bookstore-add-index-page](./images/bookstore-add-index-page-v2.png) - -Open the `Index.cshtml` and change the whole content as shown below: - -````html -@page -@using Acme.BookStore.Web.Pages.Books -@model IndexModel - -