diff --git a/README.md b/README.md index 0150d38..33d2890 100644 --- a/README.md +++ b/README.md @@ -61,7 +61,13 @@ Projeto que contém as exceções customizadas lançadas pela aplicação. ### 🧪 `URLShortener.Tests` Projeto que contém os testes unitários em xUnity da lógica de negócio da aplicação. +``` +dotnet test --collect:"XPlat Code Coverage" + +dotnet tool install -g dotnet-reportgenerator-globaltool +reportgenerator "-reports:.\**\coverage.cobertura.xml" -reporttypes:Html -targetdir:output +``` ## Configurações da Aplicação Personalizadas 📁 O domínio da url curta gerada, o mínimo e máximo de minutos para expirar são parâmetros customizáveis no `appsettings.json`: diff --git a/src/URLShortener.Tests/URLShortener.Tests.csproj b/src/URLShortener.Tests/URLShortener.Tests.csproj index 33a5119..5e18ef6 100644 --- a/src/URLShortener.Tests/URLShortener.Tests.csproj +++ b/src/URLShortener.Tests/URLShortener.Tests.csproj @@ -1,4 +1,4 @@ - + net8.0 @@ -14,6 +14,7 @@ + runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/URLShortener.Tests/output/URLShortener.Application_UrlService.html b/src/URLShortener.Tests/output/URLShortener.Application_UrlService.html new file mode 100644 index 0000000..185e87f --- /dev/null +++ b/src/URLShortener.Tests/output/URLShortener.Application_UrlService.html @@ -0,0 +1,265 @@ + + + + + + + +URLShortener.Application.Interfaces.UrlService - Coverage Report + +
+

< Summary

+
+
+
Information
+
+
+ + + + + + + + + + + + + +
Class:URLShortener.Application.Interfaces.UrlService
Assembly:URLShortener.Application
File(s):C:\Users\anaas\source\repos\URLShortener\src\URLShortener.Application\Services\UrlService.cs
+
+
+
+
+
+
+
Line coverage
+
+
90%
+
+ + + + + + + + + + + + + + + + + + + + + +
Covered lines:45
Uncovered lines:5
Coverable lines:50
Total lines:77
Line coverage:90%
+
+
+
+
+
Branch coverage
+
+
75%
+
+ + + + + + + + + + + + + +
Covered branches:12
Total branches:16
Branch coverage:75%
+
+
+
+
+
Method coverage
+
+
+

Feature is only available for sponsors

+Upgrade to PRO version +
+
+
+
+

Metrics

+
+ +++++++ + + + + + + + + + + + +
MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)50%22100%
GetOriginalUrlAsync()50%2.01287.5%
ShortenUrlAsync()100%11100%
GenerateShortenedUrl()100%11100%
GenerateRandomDuration()83.33%6.04690%
GenerateUniqueIdentifier()50%22100%
UrlIsExpired(...)100%44100%
GetAllAsync()100%210%
+
+

File(s)

+

C:\Users\anaas\source\repos\URLShortener\src\URLShortener.Application\Services\UrlService.cs

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1
 2using URLShortener.Domain;
 3using URLShortener.Infra.Interfaces;
 4using Microsoft.AspNetCore.WebUtilities;
 5using Microsoft.Extensions.Configuration;
 6
 7namespace URLShortener.Application.Interfaces
 8{
 9    public class UrlService : IUrlService
 10    {
 11        private readonly IUrlRepository _repository;
 12        private readonly IConfiguration _configuration;
 13        private readonly string _domain;
 1214        public UrlService(IUrlRepository repository, IConfiguration configuration)
 1215        {
 1216            _repository = repository;
 1217            _configuration = configuration;
 1218            _domain =  _configuration.GetSection("AppSettings:ShortenedUrlDomain").Value ?? throw new Exception("Host no
 1219        }
 20        public async Task<Url> GetOriginalUrlAsync(string slug)
 221        {
 222            string shortenedUrl = $"{_domain}/{slug}";
 223            string decodedUrl = System.Net.WebUtility.UrlDecode(shortenedUrl);
 224            Url retrievedUrl = await _repository.GetByUrlAsync(decodedUrl);
 25
 226            if(!UrlIsExpired(retrievedUrl))
 127                return retrievedUrl;
 28
 029            throw new ExpiredUrlException(decodedUrl);
 130        }
 31        public async Task<Url> ShortenUrlAsync(string originalUrl)
 132        {
 133            string shortenedUrl = await GenerateShortenedUrl();
 134            string slug = shortenedUrl.Split("/").Last();
 135            DateTime expirationDate = GenerateRandomDuration();
 136            Url newUrl = new Url(originalUrl, shortenedUrl, expirationDate, slug);
 137            await _repository.AddAsync(newUrl);
 138            return newUrl;
 139        }
 40        public async Task<string> GenerateShortenedUrl()
 241        {
 242            string uniqueIdentifier = await GenerateUniqueIdentifier();
 243            return $"{_domain}/{uniqueIdentifier}";
 244        }
 45        public DateTime GenerateRandomDuration()
 646        {
 647            var minMinutesConfig = _configuration.GetSection("AppSettings:MinMinutesToExpire").Value;
 648            var maxMinutesConfig = _configuration.GetSection("AppSettings:MaxMinutesToExpire").Value;
 49
 650            if (!uint.TryParse(minMinutesConfig, out uint minMinutes) || !uint.TryParse(maxMinutesConfig, out uint maxMi
 351                throw new FailedToParseMinutesToUintException();
 52
 353            if (minMinutes >= maxMinutes)
 054                throw new MinMinutesIsGreaterOrEqualThanMaxMinutesException();
 55
 356            var randomMinutes = new Random().Next((int)minMinutes, (int)maxMinutes);
 357            return DateTime.Now.AddMinutes(randomMinutes);
 358        }
 59        public async Task<string> GenerateUniqueIdentifier()
 360        {
 361            var urlRegisters = await _repository.GetAllAsync();
 362            Url? lastUrl = urlRegisters.LastOrDefault();
 363            uint id = lastUrl?.Id ?? 0;
 364            return WebEncoders.Base64UrlEncode(BitConverter.GetBytes(id));
 365        }
 66        public bool UrlIsExpired(Url retrievedUrl)
 467        {
 468            if (retrievedUrl.ExpirationDate > DateTime.Now || retrievedUrl is null)
 269                return false;
 270            throw new ExpiredUrlException(retrievedUrl.ShortenedUrl);
 271        }
 72        public async Task<IEnumerable<Url>> GetAllAsync()
 073        {
 074            return await _repository.GetAllAsync();
 075        }
 76    }
 77}
+
+
+
+ + \ No newline at end of file diff --git a/src/URLShortener.Tests/output/URLShortener.CustomExceptions_EntityAlreadyExistsException.html b/src/URLShortener.Tests/output/URLShortener.CustomExceptions_EntityAlreadyExistsException.html new file mode 100644 index 0000000..ac8dc04 --- /dev/null +++ b/src/URLShortener.Tests/output/URLShortener.CustomExceptions_EntityAlreadyExistsException.html @@ -0,0 +1,191 @@ + + + + + + + +URLShortener.Infra.Repositories.EntityAlreadyExistsException - Coverage Report + +
+

< Summary

+
+
+
Information
+
+
+ + + + + + + + + + + + + +
Class:URLShortener.Infra.Repositories.EntityAlreadyExistsException
Assembly:URLShortener.CustomExceptions
File(s):C:\Users\anaas\source\repos\URLShortener\src\URLShortener.CustomExceptions\EntityAlreadyExistsException.cs
+
+
+
+
+
+
+
Line coverage
+
+
0%
+
+ + + + + + + + + + + + + + + + + + + + + +
Covered lines:0
Uncovered lines:5
Coverable lines:5
Total lines:15
Line coverage:0%
+
+
+
+
+
Branch coverage
+
+
N/A
+
+ + + + + + + + + + + + + +
Covered branches:0
Total branches:0
Branch coverage:N/A
+
+
+
+
+
Method coverage
+
+
+

Feature is only available for sponsors

+Upgrade to PRO version +
+
+
+
+

Metrics

+
+ +++++++ + + + + + +
MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
get_SpecificEntity()100%210%
.ctor(...)100%210%
+
+

File(s)

+

C:\Users\anaas\source\repos\URLShortener\src\URLShortener.CustomExceptions\EntityAlreadyExistsException.cs

+
+ + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1
 2namespace URLShortener.Infra.Repositories
 3{
 4    [Serializable]
 5    public class EntityAlreadyExistsException : Exception
 6    {
 07        public string SpecificEntity { get; private set; }
 8
 9        public EntityAlreadyExistsException(string specificEntity)
 010           : base($"Entity {specificEntity} with properties described already exists.")
 011        {
 012            SpecificEntity = specificEntity;
 013        }
 14    }
 15}
+
+
+
+ +
+ + \ No newline at end of file diff --git a/src/URLShortener.Tests/output/URLShortener.CustomExceptions_EntityNotFoundException.html b/src/URLShortener.Tests/output/URLShortener.CustomExceptions_EntityNotFoundException.html new file mode 100644 index 0000000..ce27045 --- /dev/null +++ b/src/URLShortener.Tests/output/URLShortener.CustomExceptions_EntityNotFoundException.html @@ -0,0 +1,204 @@ + + + + + + + +URLShortener.Infra.Repositories.EntityNotFoundException - Coverage Report + +
+

< Summary

+
+
+
Information
+
+
+ + + + + + + + + + + + + +
Class:URLShortener.Infra.Repositories.EntityNotFoundException
Assembly:URLShortener.CustomExceptions
File(s):C:\Users\anaas\source\repos\URLShortener\src\URLShortener.CustomExceptions\EntityNotFoundException.cs
+
+
+
+
+
+
+
Line coverage
+
+
0%
+
+ + + + + + + + + + + + + + + + + + + + + +
Covered lines:0
Uncovered lines:11
Coverable lines:11
Total lines:24
Line coverage:0%
+
+
+
+
+
Branch coverage
+
+
N/A
+
+ + + + + + + + + + + + + +
Covered branches:0
Total branches:0
Branch coverage:N/A
+
+
+
+
+
Method coverage
+
+
+

Feature is only available for sponsors

+Upgrade to PRO version +
+
+
+
+

Metrics

+
+ +++++++ + + + + + + + +
MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
get_SpecificEntity()100%210%
get_Id()100%210%
.ctor(...)100%210%
.ctor(...)100%210%
+
+

File(s)

+

C:\Users\anaas\source\repos\URLShortener\src\URLShortener.CustomExceptions\EntityNotFoundException.cs

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1
 2using System.Runtime.Serialization;
 3
 4namespace URLShortener.Infra.Repositories
 5{
 6    [Serializable]
 7    public class EntityNotFoundException : Exception
 8    {
 09        public string SpecificEntity { get; private set; }
 010        public uint Id { get; private set; }
 11
 12        public EntityNotFoundException(string specificEntity, uint id)
 013            : base($"Entity {specificEntity} with id {id} doesn't exist.")
 014        {
 015            SpecificEntity = specificEntity;
 016            Id = id;
 017        }
 18        public EntityNotFoundException(string specificEntity)
 019            : base($"Entity with property {specificEntity} doesn't exist.")
 020        {
 021            SpecificEntity = specificEntity;
 022        }
 23    }
 24}
+
+
+
+ + \ No newline at end of file diff --git a/src/URLShortener.Tests/output/URLShortener.CustomExceptions_ExpiredUrlException.html b/src/URLShortener.Tests/output/URLShortener.CustomExceptions_ExpiredUrlException.html new file mode 100644 index 0000000..b487dad --- /dev/null +++ b/src/URLShortener.Tests/output/URLShortener.CustomExceptions_ExpiredUrlException.html @@ -0,0 +1,186 @@ + + + + + + + +URLShortener.Application.Interfaces.ExpiredUrlException - Coverage Report + +
+

< Summary

+
+
+
Information
+
+
+ + + + + + + + + + + + + +
Class:URLShortener.Application.Interfaces.ExpiredUrlException
Assembly:URLShortener.CustomExceptions
File(s):C:\Users\anaas\source\repos\URLShortener\src\URLShortener.CustomExceptions\ExpiredUrlException.cs
+
+
+
+
+
+
+
Line coverage
+
+
100%
+
+ + + + + + + + + + + + + + + + + + + + + +
Covered lines:3
Uncovered lines:0
Coverable lines:3
Total lines:12
Line coverage:100%
+
+
+
+
+
Branch coverage
+
+
N/A
+
+ + + + + + + + + + + + + +
Covered branches:0
Total branches:0
Branch coverage:N/A
+
+
+
+
+
Method coverage
+
+
+

Feature is only available for sponsors

+Upgrade to PRO version +
+
+
+
+

Metrics

+
+ +++++++ + + + + +
MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
+
+

File(s)

+

C:\Users\anaas\source\repos\URLShortener\src\URLShortener.CustomExceptions\ExpiredUrlException.cs

+
+ + + + + + + + + + + + + + + + +
#LineLine coverage
 1
 2namespace URLShortener.Application.Interfaces
 3{
 4    public class ExpiredUrlException : Exception
 5    {
 6        public ExpiredUrlException(string? url)
 27            : base($"This URL {url} has expired.")
 28        {
 9
 210        }
 11    }
 12}
+
+
+
+
+

Methods/Properties

+.ctor(System.String)
+
+
+ + \ No newline at end of file diff --git a/src/URLShortener.Tests/output/URLShortener.CustomExceptions_FailedToParseMinutesToUintException.html b/src/URLShortener.Tests/output/URLShortener.CustomExceptions_FailedToParseMinutesToUintException.html new file mode 100644 index 0000000..c9648b6 --- /dev/null +++ b/src/URLShortener.Tests/output/URLShortener.CustomExceptions_FailedToParseMinutesToUintException.html @@ -0,0 +1,185 @@ + + + + + + + +URLShortener.Application.Interfaces.FailedToParseMinutesToUintException - Coverage Report + +
+

< Summary

+
+
+
Information
+
+
+ + + + + + + + + + + + + +
Class:URLShortener.Application.Interfaces.FailedToParseMinutesToUintException
Assembly:URLShortener.CustomExceptions
File(s):C:\Users\anaas\source\repos\URLShortener\src\URLShortener.CustomExceptions\FailedToParseMinutesToUintException.cs
+
+
+
+
+
+
+
Line coverage
+
+
100%
+
+ + + + + + + + + + + + + + + + + + + + + +
Covered lines:3
Uncovered lines:0
Coverable lines:3
Total lines:11
Line coverage:100%
+
+
+
+
+
Branch coverage
+
+
N/A
+
+ + + + + + + + + + + + + +
Covered branches:0
Total branches:0
Branch coverage:N/A
+
+
+
+
+
Method coverage
+
+
+

Feature is only available for sponsors

+Upgrade to PRO version +
+
+
+
+

Metrics

+
+ +++++++ + + + + +
MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
+
+

File(s)

+

C:\Users\anaas\source\repos\URLShortener\src\URLShortener.CustomExceptions\FailedToParseMinutesToUintException.cs

+
+ + + + + + + + + + + + + + + +
#LineLine coverage
 1
 2namespace URLShortener.Application.Interfaces
 3{
 4    public class FailedToParseMinutesToUintException : Exception
 5    {
 6        public FailedToParseMinutesToUintException(string message = "Invalid configuration for expiration minutes. Check
 37            : base(message)
 38        {
 39        }
 10    }
 11}
+
+
+
+
+

Methods/Properties

+.ctor(System.String)
+
+
+ + \ No newline at end of file diff --git a/src/URLShortener.Tests/output/URLShortener.CustomExceptions_MinMinutesIsGreaterOrEqualThanMaxMinutesException.html b/src/URLShortener.Tests/output/URLShortener.CustomExceptions_MinMinutesIsGreaterOrEqualThanMaxMinutesException.html new file mode 100644 index 0000000..9008ecc --- /dev/null +++ b/src/URLShortener.Tests/output/URLShortener.CustomExceptions_MinMinutesIsGreaterOrEqualThanMaxMinutesException.html @@ -0,0 +1,184 @@ + + + + + + + +URLShortener.Application.Interfaces.MinMinutesIsGreaterOrEqualThanMaxMinutesException - Coverage Report + +
+

< Summary

+
+
+
Information
+
+
+ + + + + + + + + + + + + +
Class:URLShortener.Application.Interfaces.MinMinutesIsGreaterOrEqualThanMaxMinutesException
Assembly:URLShortener.CustomExceptions
File(s):C:\Users\anaas\source\repos\URLShortener\src\URLShortener.CustomExceptions\MinMinutesIsGreaterOrEqualThanMaxMinutesException.cs
+
+
+
+
+
+
+
Line coverage
+
+
0%
+
+ + + + + + + + + + + + + + + + + + + + + +
Covered lines:0
Uncovered lines:3
Coverable lines:3
Total lines:10
Line coverage:0%
+
+
+
+
+
Branch coverage
+
+
N/A
+
+ + + + + + + + + + + + + +
Covered branches:0
Total branches:0
Branch coverage:N/A
+
+
+
+
+
Method coverage
+
+
+

Feature is only available for sponsors

+Upgrade to PRO version +
+
+
+
+

Metrics

+
+ +++++++ + + + + +
MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%210%
+
+

File(s)

+

C:\Users\anaas\source\repos\URLShortener\src\URLShortener.CustomExceptions\MinMinutesIsGreaterOrEqualThanMaxMinutesException.cs

+
+ + + + + + + + + + + + + + +
#LineLine coverage
 1
 2namespace URLShortener.Application.Interfaces
 3{
 4    public class MinMinutesIsGreaterOrEqualThanMaxMinutesException : Exception
 5    {
 06        public MinMinutesIsGreaterOrEqualThanMaxMinutesException(string? message = "Invalid configuration. MinMinutesToE
 07        {
 08        }
 9    }
 10}
+
+
+
+
+

Methods/Properties

+.ctor(System.String)
+
+
+ + \ No newline at end of file diff --git a/src/URLShortener.Tests/output/URLShortener.Domain_BaseEntity.html b/src/URLShortener.Tests/output/URLShortener.Domain_BaseEntity.html new file mode 100644 index 0000000..81bfd27 --- /dev/null +++ b/src/URLShortener.Tests/output/URLShortener.Domain_BaseEntity.html @@ -0,0 +1,189 @@ + + + + + + + +URLShortener.Domain.BaseEntity - Coverage Report + +
+

< Summary

+
+
+
Information
+
+
+ + + + + + + + + + + + + +
Class:URLShortener.Domain.BaseEntity
Assembly:URLShortener.Domain
File(s):C:\Users\anaas\source\repos\URLShortener\src\URLShortener.Domain\BaseEntity.cs
+
+
+
+
+
+
+
Line coverage
+
+
0%
+
+ + + + + + + + + + + + + + + + + + + + + +
Covered lines:0
Uncovered lines:4
Coverable lines:4
Total lines:13
Line coverage:0%
+
+
+
+
+
Branch coverage
+
+
N/A
+
+ + + + + + + + + + + + + +
Covered branches:0
Total branches:0
Branch coverage:N/A
+
+
+
+
+
Method coverage
+
+
+

Feature is only available for sponsors

+Upgrade to PRO version +
+
+
+
+

Metrics

+
+ +++++++ + + + + + +
MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
get_Id()100%210%
SetId(...)100%210%
+
+

File(s)

+

C:\Users\anaas\source\repos\URLShortener\src\URLShortener.Domain\BaseEntity.cs

+
+ + + + + + + + + + + + + + + + + +
#LineLine coverage
 1
 2namespace URLShortener.Domain
 3{
 4    public class BaseEntity
 5    {
 06        public uint Id { get; private set; }
 7
 8        public void SetId(uint id)
 09        {
 010            Id = id;
 011        }
 12    }
 13}
+
+
+
+
+

Methods/Properties

+get_Id()
+SetId(System.UInt32)
+
+
+ + \ No newline at end of file diff --git a/src/URLShortener.Tests/output/URLShortener.Domain_Url.html b/src/URLShortener.Tests/output/URLShortener.Domain_Url.html new file mode 100644 index 0000000..a31b10a --- /dev/null +++ b/src/URLShortener.Tests/output/URLShortener.Domain_Url.html @@ -0,0 +1,223 @@ + + + + + + + +URLShortener.Domain.Url - Coverage Report + +
+

< Summary

+
+
+
Information
+
+
+ + + + + + + + + + + + + +
Class:URLShortener.Domain.Url
Assembly:URLShortener.Domain
File(s):C:\Users\anaas\source\repos\URLShortener\src\URLShortener.Domain\Url.cs
+
+
+
+
+
+
+
Line coverage
+
+
71%
+
+ + + + + + + + + + + + + + + + + + + + + +
Covered lines:15
Uncovered lines:6
Coverable lines:21
Total lines:35
Line coverage:71.4%
+
+
+
+
+
Branch coverage
+
+
N/A
+
+ + + + + + + + + + + + + +
Covered branches:0
Total branches:0
Branch coverage:N/A
+
+
+
+
+
Method coverage
+
+
+

Feature is only available for sponsors

+Upgrade to PRO version +
+
+
+
+

Metrics

+
+ +++++++ + + + + + + + + + + + +
MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
get_OriginalUrl()100%11100%
get_ShortenedUrl()100%11100%
get_Slug()100%11100%
get_ExpirationDate()100%11100%
.ctor()100%210%
.ctor(...)100%11100%
.ctor(...)100%11100%
ToString()100%210%
+
+

File(s)

+

C:\Users\anaas\source\repos\URLShortener\src\URLShortener.Domain\Url.cs

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1
 2namespace URLShortener.Domain
 3{
 4    public class Url : BaseEntity
 5    {
 46        public string OriginalUrl { get; private set; }
 67        public string ShortenedUrl { get; private set; }
 48        public string Slug { get; private set; }
 99        public DateTime ExpirationDate { get; private set; }
 10
 011        public Url()
 012        {
 13            // Required by EF
 014        }
 15
 316        public Url(string originalUrl, string shortenedUrl, DateTime expirationDate, string slug)
 317        {
 318            OriginalUrl = originalUrl;
 319            ShortenedUrl = shortenedUrl;
 320            ExpirationDate = expirationDate;
 321            Slug = slug;
 322        }
 23
 224        public Url(DateTime expirationDate)
 225        {
 26            // Required by test
 227            ExpirationDate = expirationDate;
 228        }
 29
 30        public override string ToString()
 031        {
 032            return "OriginalUrl: " + OriginalUrl + ", ShortenedUrl: " + ShortenedUrl + ", ExpirationDate: " + Expiration
 033        }
 34    }
 35}
+
+
+
+ + \ No newline at end of file diff --git a/src/URLShortener.Tests/output/URLShortener.Infra_AppDbContext.html b/src/URLShortener.Tests/output/URLShortener.Infra_AppDbContext.html new file mode 100644 index 0000000..c4fa784 --- /dev/null +++ b/src/URLShortener.Tests/output/URLShortener.Infra_AppDbContext.html @@ -0,0 +1,200 @@ + + + + + + + +URLShortener.Infra.Context.AppDbContext - Coverage Report + +
+

< Summary

+
+
+
Information
+
+
+ + + + + + + + + + + + + +
Class:URLShortener.Infra.Context.AppDbContext
Assembly:URLShortener.Infra
File(s):C:\Users\anaas\source\repos\URLShortener\src\URLShortener.Infra\Context\AppDbContext.cs
+
+
+
+
+
+
+
Line coverage
+
+
0%
+
+ + + + + + + + + + + + + + + + + + + + + +
Covered lines:0
Uncovered lines:9
Coverable lines:9
Total lines:22
Line coverage:0%
+
+
+
+
+
Branch coverage
+
+
N/A
+
+ + + + + + + + + + + + + +
Covered branches:0
Total branches:0
Branch coverage:N/A
+
+
+
+
+
Method coverage
+
+
+

Feature is only available for sponsors

+Upgrade to PRO version +
+
+
+
+

Metrics

+
+ +++++++ + + + + + + +
MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
get_Url()100%210%
.ctor(...)100%210%
OnModelCreating(...)100%210%
+
+

File(s)

+

C:\Users\anaas\source\repos\URLShortener\src\URLShortener.Infra\Context\AppDbContext.cs

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1using Microsoft.EntityFrameworkCore;
 2using URLShortener.Domain;
 3
 4namespace URLShortener.Infra.Context
 5{
 6    public class AppDbContext : DbContext
 7    {
 08        public DbSet<Url> Url { get; set; }
 09        public AppDbContext(DbContextOptions<AppDbContext> options) : base(options)
 010        {
 11
 012        }
 13
 14        protected override void OnModelCreating(ModelBuilder modelBuilder)
 015        {
 016            modelBuilder.Entity<Url>()
 017                .Ignore("Assert");
 18
 019            base.OnModelCreating(modelBuilder);
 020        }
 21    }
 22}
+
+
+
+ + \ No newline at end of file diff --git a/src/URLShortener.Tests/output/URLShortener.Infra_AppDbContextModelSnapshot.html b/src/URLShortener.Tests/output/URLShortener.Infra_AppDbContextModelSnapshot.html new file mode 100644 index 0000000..6ab418d --- /dev/null +++ b/src/URLShortener.Tests/output/URLShortener.Infra_AppDbContextModelSnapshot.html @@ -0,0 +1,222 @@ + + + + + + + +URLShortener.Infra.Migrations.AppDbContextModelSnapshot - Coverage Report + +
+

< Summary

+
+
+
Information
+
+
+ + + + + + + + + + + + + +
Class:URLShortener.Infra.Migrations.AppDbContextModelSnapshot
Assembly:URLShortener.Infra
File(s):C:\Users\anaas\source\repos\URLShortener\src\URLShortener.Infra\Migrations\AppDbContextModelSnapshot.cs
+
+
+
+
+
+
+
Line coverage
+
+
0%
+
+ + + + + + + + + + + + + + + + + + + + + +
Covered lines:0
Uncovered lines:28
Coverable lines:28
Total lines:48
Line coverage:0%
+
+
+
+
+
Branch coverage
+
+
N/A
+
+ + + + + + + + + + + + + +
Covered branches:0
Total branches:0
Branch coverage:N/A
+
+
+
+
+
Method coverage
+
+
+

Feature is only available for sponsors

+Upgrade to PRO version +
+
+
+
+

Metrics

+
+ +++++++ + + + + +
MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
BuildModel(...)100%210%
+
+

File(s)

+

C:\Users\anaas\source\repos\URLShortener\src\URLShortener.Infra\Migrations\AppDbContextModelSnapshot.cs

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// <auto-generated />
 2using System;
 3using Microsoft.EntityFrameworkCore;
 4using Microsoft.EntityFrameworkCore.Infrastructure;
 5using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
 6using URLShortener.Infra.Context;
 7
 8#nullable disable
 9
 10namespace URLShortener.Infra.Migrations
 11{
 12    [DbContext(typeof(AppDbContext))]
 13    partial class AppDbContextModelSnapshot : ModelSnapshot
 14    {
 15        protected override void BuildModel(ModelBuilder modelBuilder)
 016        {
 17#pragma warning disable 612, 618
 018            modelBuilder.HasAnnotation("ProductVersion", "8.0.2");
 19
 020            modelBuilder.Entity("URLShortener.Domain.Url", b =>
 021                {
 022                    b.Property<uint>("Id")
 023                        .ValueGeneratedOnAdd()
 024                        .HasColumnType("INTEGER");
 025
 026                    b.Property<DateTime>("ExpirationDate")
 027                        .HasColumnType("TEXT");
 028
 029                    b.Property<string>("OriginalUrl")
 030                        .IsRequired()
 031                        .HasColumnType("TEXT");
 032
 033                    b.Property<string>("ShortenedUrl")
 034                        .IsRequired()
 035                        .HasColumnType("TEXT");
 036
 037                    b.Property<string>("Slug")
 038                        .IsRequired()
 039                        .HasColumnType("TEXT");
 040
 041                    b.HasKey("Id");
 042
 043                    b.ToTable("Url");
 044                });
 45#pragma warning restore 612, 618
 046        }
 47    }
 48}
+
+
+
+ + \ No newline at end of file diff --git a/src/URLShortener.Tests/output/URLShortener.Infra_CreateDatabaseInitial.html b/src/URLShortener.Tests/output/URLShortener.Infra_CreateDatabaseInitial.html new file mode 100644 index 0000000..3f63cd4 --- /dev/null +++ b/src/URLShortener.Tests/output/URLShortener.Infra_CreateDatabaseInitial.html @@ -0,0 +1,275 @@ + + + + + + + +URLShortener.Infra.Migrations.CreateDatabaseInitial - Coverage Report + +
+

< Summary

+ +
+
+
Line coverage
+
+
0%
+
+ + + + + + + + + + + + + + + + + + + + + +
Covered lines:0
Uncovered lines:49
Coverable lines:49
Total lines:89
Line coverage:0%
+
+
+
+
+
Branch coverage
+
+
N/A
+
+ + + + + + + + + + + + + +
Covered branches:0
Total branches:0
Branch coverage:N/A
+
+
+
+
+
Method coverage
+
+
+

Feature is only available for sponsors

+Upgrade to PRO version +
+
+
+
+

Metrics

+
+ +++++++ + + + + + + +
MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
File 1: Up(...)100%210%
File 1: Down(...)100%210%
File 2: BuildTargetModel(...)100%210%
+
+

File(s)

+

C:\Users\anaas\source\repos\URLShortener\src\URLShortener.Infra\Migrations\20240303153543_CreateDatabaseInitial.cs

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1using System;
 2using Microsoft.EntityFrameworkCore.Migrations;
 3
 4#nullable disable
 5
 6namespace URLShortener.Infra.Migrations
 7{
 8    /// <inheritdoc />
 9    public partial class CreateDatabaseInitial : Migration
 10    {
 11        /// <inheritdoc />
 12        protected override void Up(MigrationBuilder migrationBuilder)
 013        {
 014            migrationBuilder.CreateTable(
 015                name: "Url",
 016                columns: table => new
 017                {
 018                    Id = table.Column<uint>(type: "INTEGER", nullable: false)
 019                        .Annotation("Sqlite:Autoincrement", true),
 020                    OriginalUrl = table.Column<string>(type: "TEXT", nullable: false),
 021                    ShortenedUrl = table.Column<string>(type: "TEXT", nullable: false),
 022                    Slug = table.Column<string>(type: "TEXT", nullable: false),
 023                    ExpirationDate = table.Column<DateTime>(type: "TEXT", nullable: false)
 024                },
 025                constraints: table =>
 026                {
 027                    table.PrimaryKey("PK_Url", x => x.Id);
 028                });
 029        }
 30
 31        /// <inheritdoc />
 32        protected override void Down(MigrationBuilder migrationBuilder)
 033        {
 034            migrationBuilder.DropTable(
 035                name: "Url");
 036        }
 37    }
 38}
+
+

C:\Users\anaas\source\repos\URLShortener\src\URLShortener.Infra\Migrations\20240303153543_CreateDatabaseInitial.Designer.cs

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1// <auto-generated />
 2using System;
 3using Microsoft.EntityFrameworkCore;
 4using Microsoft.EntityFrameworkCore.Infrastructure;
 5using Microsoft.EntityFrameworkCore.Migrations;
 6using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
 7using URLShortener.Infra.Context;
 8
 9#nullable disable
 10
 11namespace URLShortener.Infra.Migrations
 12{
 13    [DbContext(typeof(AppDbContext))]
 14    [Migration("20240303153543_CreateDatabaseInitial")]
 15    partial class CreateDatabaseInitial
 16    {
 17        /// <inheritdoc />
 18        protected override void BuildTargetModel(ModelBuilder modelBuilder)
 019        {
 20#pragma warning disable 612, 618
 021            modelBuilder.HasAnnotation("ProductVersion", "8.0.2");
 22
 023            modelBuilder.Entity("URLShortener.Domain.Url", b =>
 024                {
 025                    b.Property<uint>("Id")
 026                        .ValueGeneratedOnAdd()
 027                        .HasColumnType("INTEGER");
 028
 029                    b.Property<DateTime>("ExpirationDate")
 030                        .HasColumnType("TEXT");
 031
 032                    b.Property<string>("OriginalUrl")
 033                        .IsRequired()
 034                        .HasColumnType("TEXT");
 035
 036                    b.Property<string>("ShortenedUrl")
 037                        .IsRequired()
 038                        .HasColumnType("TEXT");
 039
 040                    b.Property<string>("Slug")
 041                        .IsRequired()
 042                        .HasColumnType("TEXT");
 043
 044                    b.HasKey("Id");
 045
 046                    b.ToTable("Url");
 047                });
 48#pragma warning restore 612, 618
 049        }
 50    }
 51}
+
+
+
+ + \ No newline at end of file diff --git a/src/URLShortener.Tests/output/URLShortener.Infra_Repository_1.html b/src/URLShortener.Tests/output/URLShortener.Infra_Repository_1.html new file mode 100644 index 0000000..b13533c --- /dev/null +++ b/src/URLShortener.Tests/output/URLShortener.Infra_Repository_1.html @@ -0,0 +1,264 @@ + + + + + + + +URLShortener.Infra.Repositories.Repository<T> - Coverage Report + +
+

< Summary

+
+
+
Information
+
+
+ + + + + + + + + + + + + +
Class:URLShortener.Infra.Repositories.Repository<T>
Assembly:URLShortener.Infra
File(s):C:\Users\anaas\source\repos\URLShortener\src\URLShortener.Infra\Repositories\Repository.cs
+
+
+
+
+
+
+
Line coverage
+
+
0%
+
+ + + + + + + + + + + + + + + + + + + + + +
Covered lines:0
Uncovered lines:45
Coverable lines:45
Total lines:78
Line coverage:0%
+
+
+
+
+
Branch coverage
+
+
0%
+
+ + + + + + + + + + + + + +
Covered branches:0
Total branches:4
Branch coverage:0%
+
+
+
+
+
Method coverage
+
+
+

Feature is only available for sponsors

+Upgrade to PRO version +
+
+
+
+

Metrics

+
+ +++++++ + + + + + + + + + + +
MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%210%
AddAsync()0%620%
DeleteAsync()100%210%
GetAsync()0%620%
GetAllAsync()100%210%
UpdateAsync()0%2040%
EntityExistsAsync()100%210%
+
+

File(s)

+

C:\Users\anaas\source\repos\URLShortener\src\URLShortener.Infra\Repositories\Repository.cs

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1
 2using Microsoft.EntityFrameworkCore;
 3using URLShortener.Domain;
 4using URLShortener.Infra.Context;
 5using URLShortener.Infra.Interfaces;
 6
 7namespace URLShortener.Infra.Repositories
 8{
 9    public class Repository<T> : IRepository<T> where T : BaseEntity
 10    {
 11        internal readonly AppDbContext _context;
 012        private string _specificEntity = typeof(T).Name;
 13
 014        public Repository(AppDbContext context)
 015        {
 016            _context = context;
 017        }
 18
 19        public async Task<T> AddAsync(T entityToAdd)
 020        {
 021            if (!await EntityExistsAsync(entityToAdd))
 022            {
 023                _context.Set<T>().Add(entityToAdd);
 024                await _context.SaveChangesAsync();
 025                return entityToAdd;
 26            }
 27
 028            throw new EntityAlreadyExistsException(_specificEntity);
 029        }
 30
 31        public async Task<bool> DeleteAsync(uint id)
 032        {
 033            var entityToDelete = await GetAsync(id);
 034            _context.Set<T>().Remove(entityToDelete);
 035            await _context.SaveChangesAsync();
 036            return true;
 037        }
 38
 39        public async Task<T> GetAsync(uint id)
 040        {
 041            var entityToReturn = await _context.Set<T>().FirstOrDefaultAsync(entity => entity.Id == id);
 42
 043            if (entityToReturn != null)
 044            {
 045                entityToReturn.SetId(id);
 046                await _context.SaveChangesAsync();
 047                return entityToReturn;
 48            }
 49
 050            throw new EntityNotFoundException(_specificEntity, id);
 051        }
 52
 53        public async Task<IEnumerable<T>> GetAllAsync()
 054        {
 055            return await _context.Set<T>().ToListAsync();
 056        }
 57
 58        public async Task<T> UpdateAsync(T newEntity)
 059        {
 060            var existingEntity = await GetAsync(newEntity.Id);
 61
 062            foreach (var prop in typeof(T).GetProperties().Where(prop => prop.Name != "Id"))
 063            {
 064                var newValue = prop.GetValue(newEntity);
 065                prop.SetValue(existingEntity, newValue);
 066            }
 67
 068            await _context.SaveChangesAsync();
 069            return existingEntity;
 070        }
 71
 72        public async Task<bool> EntityExistsAsync(T entityToAdd)
 073        {
 074            return await _context.Set<T>()
 075                .AnyAsync(existingEntity => existingEntity.Id == entityToAdd.Id);
 076        }
 77    }
 78}
+
+
+
+ + \ No newline at end of file diff --git a/src/URLShortener.Tests/output/URLShortener.Infra_UrlRepository.html b/src/URLShortener.Tests/output/URLShortener.Infra_UrlRepository.html new file mode 100644 index 0000000..920a533 --- /dev/null +++ b/src/URLShortener.Tests/output/URLShortener.Infra_UrlRepository.html @@ -0,0 +1,214 @@ + + + + + + + +URLShortener.Infra.Repositories.UrlRepository - Coverage Report + +
+

< Summary

+
+
+
Information
+
+
+ + + + + + + + + + + + + +
Class:URLShortener.Infra.Repositories.UrlRepository
Assembly:URLShortener.Infra
File(s):C:\Users\anaas\source\repos\URLShortener\src\URLShortener.Infra\Repositories\UrlRepository.cs
+
+
+
+
+
+
+
Line coverage
+
+
0%
+
+ + + + + + + + + + + + + + + + + + + + + +
Covered lines:0
Uncovered lines:17
Coverable lines:17
Total lines:36
Line coverage:0%
+
+
+
+
+
Branch coverage
+
+
0%
+
+ + + + + + + + + + + + + +
Covered branches:0
Total branches:6
Branch coverage:0%
+
+
+
+
+
Method coverage
+
+
+

Feature is only available for sponsors

+Upgrade to PRO version +
+
+
+
+

Metrics

+
+ +++++++ + + + + + + +
MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%210%
AddAsync()0%620%
GetByUrlAsync()0%2040%
+
+

File(s)

+

C:\Users\anaas\source\repos\URLShortener\src\URLShortener.Infra\Repositories\UrlRepository.cs

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1
 2using Microsoft.EntityFrameworkCore;
 3using URLShortener.Domain;
 4using URLShortener.Infra.Context;
 5using URLShortener.Infra.Interfaces;
 6
 7namespace URLShortener.Infra.Repositories
 8{
 9    public class UrlRepository : Repository<Url>, IUrlRepository
 10    {
 011        public UrlRepository(AppDbContext context) : base(context)
 012        {
 13            //required by EF
 014        }
 15        public new async Task<Url> AddAsync(Url entityToAdd)
 016        {
 017            if (!await EntityExistsAsync(entityToAdd))
 018            {
 019                _context.Url.Add(entityToAdd);
 020                await _context.SaveChangesAsync();
 021                return entityToAdd;
 22            }
 23
 024            throw new EntityAlreadyExistsException(entityToAdd.ToString());
 025        }
 26        public async Task<Url> GetByUrlAsync(string shortenedUrl)
 027        {
 028            var entityToReturn = await _context.Url.FirstOrDefaultAsync(url => url.ShortenedUrl.Equals(shortenedUrl));
 29
 030            if (entityToReturn is Url url)
 031                return entityToReturn;
 32
 033            throw new EntityNotFoundException(shortenedUrl);
 034        }
 35    }
 36}
+
+
+
+ + \ No newline at end of file diff --git a/src/URLShortener.Tests/output/URLShortener.ViewModels_UrlDTO.html b/src/URLShortener.Tests/output/URLShortener.ViewModels_UrlDTO.html new file mode 100644 index 0000000..9848fca --- /dev/null +++ b/src/URLShortener.Tests/output/URLShortener.ViewModels_UrlDTO.html @@ -0,0 +1,197 @@ + + + + + + + +URLShortener.ViewModels.UrlDTO - Coverage Report + +
+

< Summary

+
+
+
Information
+
+
+ + + + + + + + + + + + + +
Class:URLShortener.ViewModels.UrlDTO
Assembly:URLShortener.ViewModels
File(s):C:\Users\anaas\source\repos\URLShortener\src\URLShortener.ViewModels\UrlDTO.cs
+
+
+
+
+
+
+
Line coverage
+
+
0%
+
+ + + + + + + + + + + + + + + + + + + + + +
Covered lines:0
Uncovered lines:9
Coverable lines:9
Total lines:17
Line coverage:0%
+
+
+
+
+
Branch coverage
+
+
N/A
+
+ + + + + + + + + + + + + +
Covered branches:0
Total branches:0
Branch coverage:N/A
+
+
+
+
+
Method coverage
+
+
+

Feature is only available for sponsors

+Upgrade to PRO version +
+
+
+
+

Metrics

+
+ +++++++ + + + + + + + +
MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
get_ShortenedUrl()100%210%
get_OriginalUrl()100%210%
get_ExpirationDate()100%210%
.ctor(...)100%210%
+
+

File(s)

+

C:\Users\anaas\source\repos\URLShortener\src\URLShortener.ViewModels\UrlDTO.cs

+
+ + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1
 2namespace URLShortener.ViewModels
 3{
 4    public class UrlDTO
 5    {
 06        public string ShortenedUrl { get; set; }
 07        public string OriginalUrl { get; set; }
 08        public DateTime ExpirationDate { get; set; }
 9
 010        public UrlDTO(string shortenedUrl, string originalUrl, DateTime expirationDate)
 011        {
 012            ShortenedUrl = shortenedUrl;
 013            OriginalUrl = originalUrl;
 014            ExpirationDate = expirationDate;
 015        }
 16    }
 17}
+
+
+
+ + \ No newline at end of file diff --git a/src/URLShortener.Tests/output/URLShortener.ViewModels_UrlRequest.html b/src/URLShortener.Tests/output/URLShortener.ViewModels_UrlRequest.html new file mode 100644 index 0000000..7ece3f8 --- /dev/null +++ b/src/URLShortener.Tests/output/URLShortener.ViewModels_UrlRequest.html @@ -0,0 +1,192 @@ + + + + + + + +URLShortener.ViewModels.UrlRequest - Coverage Report + +
+

< Summary

+
+
+
Information
+
+
+ + + + + + + + + + + + + +
Class:URLShortener.ViewModels.UrlRequest
Assembly:URLShortener.ViewModels
File(s):C:\Users\anaas\source\repos\URLShortener\src\URLShortener.ViewModels\UrlRequest.cs
+
+
+
+
+
+
+
Line coverage
+
+
0%
+
+ + + + + + + + + + + + + + + + + + + + + +
Covered lines:0
Uncovered lines:5
Coverable lines:5
Total lines:16
Line coverage:0%
+
+
+
+
+
Branch coverage
+
+
N/A
+
+ + + + + + + + + + + + + +
Covered branches:0
Total branches:0
Branch coverage:N/A
+
+
+
+
+
Method coverage
+
+
+

Feature is only available for sponsors

+Upgrade to PRO version +
+
+
+
+

Metrics

+
+ +++++++ + + + + + +
MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
get_OriginalUrl()100%210%
.ctor(...)100%210%
+
+

File(s)

+

C:\Users\anaas\source\repos\URLShortener\src\URLShortener.ViewModels\UrlRequest.cs

+
+ + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1
 2using System.ComponentModel.DataAnnotations;
 3
 4namespace URLShortener.ViewModels
 5{
 6    public class UrlRequest
 7    {
 8        [Required(ErrorMessage = "Original url is required.")]
 09        public string OriginalUrl { get; init; }
 10
 011        public UrlRequest(string originalUrl)
 012        {
 013            OriginalUrl = originalUrl;
 014        }
 15    }
 16}
+
+
+
+
+

Methods/Properties

+get_OriginalUrl()
+.ctor(System.String)
+
+
+ + \ No newline at end of file diff --git a/src/URLShortener.Tests/output/URLShortener.WebAPI_ExceptionFilter.html b/src/URLShortener.Tests/output/URLShortener.WebAPI_ExceptionFilter.html new file mode 100644 index 0000000..d21dd7f --- /dev/null +++ b/src/URLShortener.Tests/output/URLShortener.WebAPI_ExceptionFilter.html @@ -0,0 +1,244 @@ + + + + + + + +ExceptionFilter - Coverage Report + +
+

< Summary

+
+
+
Information
+
+
+ + + + + + + + + + + + + +
Class:ExceptionFilter
Assembly:URLShortener.WebAPI
File(s):C:\Users\anaas\source\repos\URLShortener\src\URLShortener.WebAPI\Filters\ExceptionFilter.cs
+
+
+
+
+
+
+
Line coverage
+
+
0%
+
+ + + + + + + + + + + + + + + + + + + + + +
Covered lines:0
Uncovered lines:35
Coverable lines:35
Total lines:68
Line coverage:0%
+
+
+
+
+
Branch coverage
+
+
0%
+
+ + + + + + + + + + + + + +
Covered branches:0
Total branches:12
Branch coverage:0%
+
+
+
+
+
Method coverage
+
+
+

Feature is only available for sponsors

+Upgrade to PRO version +
+
+
+
+

Metrics

+
+ +++++++ + + + + + +
MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%210%
OnExceptionAsync()0%156120%
+
+

File(s)

+

C:\Users\anaas\source\repos\URLShortener\src\URLShortener.WebAPI\Filters\ExceptionFilter.cs

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1
 2using Microsoft.AspNetCore.Mvc;
 3using Microsoft.AspNetCore.Mvc.Filters;
 4using URLShortener.Application.Interfaces;
 5using URLShortener.Infra.Repositories;
 6
 7public class ExceptionFilter : IAsyncExceptionFilter
 8{
 9    private readonly ILogger<ExceptionFilter> _logger;
 10
 011    public ExceptionFilter(ILogger<ExceptionFilter> logger)
 012    {
 013        _logger = logger;
 014    }
 15
 16    public async Task OnExceptionAsync(ExceptionContext context)
 017    {
 018        context.ExceptionHandled = false;
 019        var ex = context.Exception;
 20        int statusCode;
 21
 022        var response = context.HttpContext.Response;
 023        response.ContentType = "application/json";
 24
 025        switch (ex)
 26        {
 27            case EntityAlreadyExistsException _:
 028                statusCode = StatusCodes.Status409Conflict;
 029                break;
 30
 31            case EntityNotFoundException _:
 032                statusCode = StatusCodes.Status404NotFound;
 033                break;
 34
 35            case ExpiredUrlException _:
 036                statusCode = StatusCodes.Status410Gone;
 037                break;
 38
 39            case FailedToParseMinutesToUintException _:
 40            case MinMinutesIsGreaterOrEqualThanMaxMinutesException _:
 41            case InvalidOperationException _:
 042                statusCode = StatusCodes.Status400BadRequest;
 043                break;
 44
 45            default:
 046                statusCode = StatusCodes.Status500InternalServerError;
 047                break;
 48        }
 49
 050        var objectResponse = new
 051        {
 052            Error = new
 053            {
 054                message = context.Exception.Message,
 055                statusCode = statusCode
 056            }
 057        };
 58
 059        context.Result = new ObjectResult(objectResponse)
 060        {
 061            StatusCode = statusCode
 062        };
 63
 064        _logger.LogError(objectResponse.ToString());
 65
 066        await Task.CompletedTask;
 067    }
 68}
+
+
+
+ + \ No newline at end of file diff --git a/src/URLShortener.Tests/output/URLShortener.WebAPI_LoggingMiddleware.html b/src/URLShortener.Tests/output/URLShortener.WebAPI_LoggingMiddleware.html new file mode 100644 index 0000000..ca07d2a --- /dev/null +++ b/src/URLShortener.Tests/output/URLShortener.WebAPI_LoggingMiddleware.html @@ -0,0 +1,205 @@ + + + + + + + +URLShortener.WebAPI.Middlewares.LoggingMiddleware - Coverage Report + +
+

< Summary

+
+
+
Information
+
+
+ + + + + + + + + + + + + +
Class:URLShortener.WebAPI.Middlewares.LoggingMiddleware
Assembly:URLShortener.WebAPI
File(s):C:\Users\anaas\source\repos\URLShortener\src\URLShortener.WebAPI\Middlewares\LoggingMiddleware.cs
+
+
+
+
+
+
+
Line coverage
+
+
0%
+
+ + + + + + + + + + + + + + + + + + + + + +
Covered lines:0
Uncovered lines:13
Coverable lines:13
Total lines:29
Line coverage:0%
+
+
+
+
+
Branch coverage
+
+
N/A
+
+ + + + + + + + + + + + + +
Covered branches:0
Total branches:0
Branch coverage:N/A
+
+
+
+
+
Method coverage
+
+
+

Feature is only available for sponsors

+Upgrade to PRO version +
+
+
+
+

Metrics

+
+ +++++++ + + + + + +
MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%210%
InvokeAsync()100%210%
+
+

File(s)

+

C:\Users\anaas\source\repos\URLShortener\src\URLShortener.WebAPI\Middlewares\LoggingMiddleware.cs

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1
 2using System.Diagnostics;
 3
 4namespace URLShortener.WebAPI.Middlewares
 5{
 6    public class LoggingMiddleware
 7    {
 8        private readonly RequestDelegate _next;
 9        private readonly ILogger<LoggingMiddleware> _logger;
 10
 011        public LoggingMiddleware(RequestDelegate next, ILogger<LoggingMiddleware> logger)
 012        {
 013            _next = next;
 014            _logger = logger;
 015        }
 16
 17        public async Task InvokeAsync(HttpContext context)
 018        {
 019            var requestDetails = $"{context.Request.Method} {context.Request.Path}";
 020            _logger.LogInformation($"BEGIN REQUEST: {requestDetails}");
 21
 022            var stopwatch = Stopwatch.StartNew();
 023            await _next(context);
 024            stopwatch.Stop();
 25
 026            _logger.LogInformation($"END REQUEST: {requestDetails} - Status: {context.Response.StatusCode} - Elapsed Tim
 027        }
 28    }
 29}
+
+
+
+ + \ No newline at end of file diff --git a/src/URLShortener.Tests/output/URLShortener.WebAPI_Program.html b/src/URLShortener.Tests/output/URLShortener.WebAPI_Program.html new file mode 100644 index 0000000..b999b77 --- /dev/null +++ b/src/URLShortener.Tests/output/URLShortener.WebAPI_Program.html @@ -0,0 +1,256 @@ + + + + + + + +URLShortener.WebAPI.Program - Coverage Report + +
+

< Summary

+
+
+
Information
+
+
+ + + + + + + + + + + + + +
Class:URLShortener.WebAPI.Program
Assembly:URLShortener.WebAPI
File(s):C:\Users\anaas\source\repos\URLShortener\src\URLShortener.WebAPI\Program.cs
+
+
+
+
+
+
+
Line coverage
+
+
0%
+
+ + + + + + + + + + + + + + + + + + + + + +
Covered lines:0
Uncovered lines:44
Coverable lines:44
Total lines:82
Line coverage:0%
+
+
+
+
+
Branch coverage
+
+
0%
+
+ + + + + + + + + + + + + +
Covered branches:0
Total branches:2
Branch coverage:0%
+
+
+
+
+
Method coverage
+
+
+

Feature is only available for sponsors

+Upgrade to PRO version +
+
+
+
+

Metrics

+
+ +++++++ + + + + +
MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
Main(...)0%620%
+
+

File(s)

+

C:\Users\anaas\source\repos\URLShortener\src\URLShortener.WebAPI\Program.cs

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1using Microsoft.EntityFrameworkCore;
 2using Microsoft.OpenApi.Models;
 3using URLShortener.Application.Interfaces;
 4using URLShortener.Infra.Context;
 5using URLShortener.Infra.Interfaces;
 6using URLShortener.Infra.Repositories;
 7using URLShortener.WebAPI.Controllers;
 8using URLShortener.WebAPI.Middlewares;
 9namespace URLShortener.WebAPI
 10{
 11    public class Program
 12    {
 13        public static void Main(string[] args)
 014        {
 015            var apiName = "URL Shortener";
 16
 017            var builder = WebApplication.CreateBuilder(args);
 18
 19            //Cors
 020            builder.Services.AddCors(corsOptions =>
 021            {
 022                corsOptions.AddPolicy("DevEnvPolicy", policyBuilder =>
 023                {
 024                    policyBuilder
 025                    .WithOrigins("http://localhost:5000")
 026                    .AllowAnyHeader()
 027                    .AllowAnyMethod();
 028                });
 029            });
 30
 31            //Add Logging
 032            builder.Services.AddLogging();
 33
 34            // DbContext
 035            builder.Services.AddDbContext<AppDbContext>(options =>
 036            {
 037                options.UseSqlite((builder.Configuration.GetConnectionString("URLShortenerSqlite")));
 038            });
 39
 40            //Repositories
 041            builder.Services.AddScoped<IUrlRepository, UrlRepository>();
 42
 43            //Services
 044            builder.Services.AddScoped<IUrlService, UrlService>();
 45
 46            //Controllers
 047            builder.Services.AddControllers(options =>
 048                {
 049                    //Custom Exception Filter
 050                    options.Filters.Add<ExceptionFilter>();
 051                }
 052                );
 53
 054            builder.Services.AddEndpointsApiExplorer();
 55
 056            builder.Services.AddSwaggerGen(c =>
 057            {
 058                c.SwaggerDoc("v1", new OpenApiInfo { Title = apiName, Version = "v1" });
 059                c.EnableAnnotations();
 060            });
 61
 062            var app = builder.Build();
 63
 064            if (app.Environment.IsDevelopment())
 065            {
 66                //Adds Cors Middleware in Dev Environment
 067                app.UseCors("DevEnvPolicy");
 068                app.UseSwagger();
 069                app.UseSwaggerUI();
 070            }
 71
 72            //Custom Logging Middleware
 073            app.UseMiddleware<LoggingMiddleware>();
 74
 075            app.UseAuthorization();
 76
 077            app.MapControllers();
 78
 079            app.Run();
 080        }
 81    }
 82}
+
+
+
+
+

Methods/Properties

+Main(System.String[])
+
+
+ + \ No newline at end of file diff --git a/src/URLShortener.Tests/output/URLShortener.WebAPI_UrlController.html b/src/URLShortener.Tests/output/URLShortener.WebAPI_UrlController.html new file mode 100644 index 0000000..70399e0 --- /dev/null +++ b/src/URLShortener.Tests/output/URLShortener.WebAPI_UrlController.html @@ -0,0 +1,249 @@ + + + + + + + +URLShortener.WebAPI.Controllers.UrlController - Coverage Report + +
+

< Summary

+
+
+
Information
+
+
+ + + + + + + + + + + + + +
Class:URLShortener.WebAPI.Controllers.UrlController
Assembly:URLShortener.WebAPI
File(s):C:\Users\anaas\source\repos\URLShortener\src\URLShortener.WebAPI\Controllers\UrlController.cs
+
+
+
+
+
+
+
Line coverage
+
+
0%
+
+ + + + + + + + + + + + + + + + + + + + + +
Covered lines:0
Uncovered lines:28
Coverable lines:28
Total lines:69
Line coverage:0%
+
+
+
+
+
Branch coverage
+
+
0%
+
+ + + + + + + + + + + + + +
Covered branches:0
Total branches:12
Branch coverage:0%
+
+
+
+
+
Method coverage
+
+
+

Feature is only available for sponsors

+Upgrade to PRO version +
+
+
+
+

Metrics

+
+ +++++++ + + + + + + + +
MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%210%
GetAll()0%2040%
Get()0%620%
Add()0%4260%
+
+

File(s)

+

C:\Users\anaas\source\repos\URLShortener\src\URLShortener.WebAPI\Controllers\UrlController.cs

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1using Microsoft.AspNetCore.Mvc;
 2using Swashbuckle.AspNetCore.Annotations;
 3using URLShortener.Application.Interfaces;
 4using URLShortener.Domain;
 5using URLShortener.ViewModels;
 6
 7namespace URLShortener.WebAPI.Controllers
 8{
 9    [ApiController]
 10    [Route("")]
 11    public class UrlController : ControllerBase
 12    {
 13        private readonly ILogger<UrlController> _logger;
 14        private readonly IUrlService _urlService;
 15        private readonly IConfiguration _configuration;
 16
 017        public UrlController(ILogger<UrlController> logger, IUrlService urlService, IConfiguration configuration)
 018        {
 019            _logger = logger;
 020            _urlService = urlService;
 021            _configuration = configuration;
 022        }
 23
 24        [HttpGet]
 25        [Route("all")]
 26        [SwaggerOperation("Get all URLs in database.")]
 27        public async Task<IActionResult> GetAll()
 028        {
 029            var urls = await _urlService.GetAllAsync();
 30
 031            if (urls is not null && urls.Any())
 032                return Ok(urls);
 33
 034            return NotFound();
 035        }
 36
 37        [HttpGet]
 38        [Route("{slug}")]
 39        [SwaggerOperation("Redirects to original URL by existing shortened URL.")]
 40        public async Task<IActionResult> Get([FromRoute] string slug)
 041        {
 042            Url originalUrl = await _urlService.GetOriginalUrlAsync(slug);
 43
 044            if (originalUrl != null)
 045            {
 046                _logger.LogInformation($"Redirecting to: {originalUrl.OriginalUrl}");
 047                return Redirect(originalUrl.OriginalUrl);
 48            }
 49
 050            return NotFound();
 051        }
 52
 53        [HttpPost]
 54        [Route("makeUrlShort")]
 55        [SwaggerOperation("Shortens a new URL and returns the object saved on database.")]
 56        public async Task<IActionResult> Add([FromBody] UrlRequest url)
 057        {
 058            if (url == null || string.IsNullOrEmpty(url.OriginalUrl))
 059                return BadRequest("Invalid input data");
 60
 061            var shortenedUrl = await _urlService.ShortenUrlAsync(url.OriginalUrl);
 62
 063            if (string.IsNullOrEmpty(shortenedUrl.ShortenedUrl))
 064                return BadRequest("Failed to create shortened URL");
 65
 066            return CreatedAtAction(nameof(Get), new { slug = shortenedUrl.ShortenedUrl }, shortenedUrl);
 067        }
 68    }
 69}
+
+
+
+ + \ No newline at end of file diff --git a/src/URLShortener.Tests/output/class.js b/src/URLShortener.Tests/output/class.js new file mode 100644 index 0000000..b7a43b2 --- /dev/null +++ b/src/URLShortener.Tests/output/class.js @@ -0,0 +1,218 @@ +/* Chartist.js 0.11.4 + * Copyright © 2019 Gion Kunz + * Free to use under either the WTFPL license or the MIT license. + * https://raw.githubusercontent.com/gionkunz/chartist-js/master/LICENSE-WTFPL + * https://raw.githubusercontent.com/gionkunz/chartist-js/master/LICENSE-MIT + */ + +!function (a, b) { "function" == typeof define && define.amd ? define("Chartist", [], function () { return a.Chartist = b() }) : "object" == typeof module && module.exports ? module.exports = b() : a.Chartist = b() }(this, function () { + var a = { version: "0.11.4" }; return function (a, b) { "use strict"; var c = a.window, d = a.document; b.namespaces = { svg: "http://www.w3.org/2000/svg", xmlns: "http://www.w3.org/2000/xmlns/", xhtml: "http://www.w3.org/1999/xhtml", xlink: "http://www.w3.org/1999/xlink", ct: "http://gionkunz.github.com/chartist-js/ct" }, b.noop = function (a) { return a }, b.alphaNumerate = function (a) { return String.fromCharCode(97 + a % 26) }, b.extend = function (a) { var c, d, e; for (a = a || {}, c = 1; c < arguments.length; c++) { d = arguments[c]; for (var f in d) e = d[f], "object" != typeof e || null === e || e instanceof Array ? a[f] = e : a[f] = b.extend(a[f], e) } return a }, b.replaceAll = function (a, b, c) { return a.replace(new RegExp(b, "g"), c) }, b.ensureUnit = function (a, b) { return "number" == typeof a && (a += b), a }, b.quantity = function (a) { if ("string" == typeof a) { var b = /^(\d+)\s*(.*)$/g.exec(a); return { value: +b[1], unit: b[2] || void 0 } } return { value: a } }, b.querySelector = function (a) { return a instanceof Node ? a : d.querySelector(a) }, b.times = function (a) { return Array.apply(null, new Array(a)) }, b.sum = function (a, b) { return a + (b ? b : 0) }, b.mapMultiply = function (a) { return function (b) { return b * a } }, b.mapAdd = function (a) { return function (b) { return b + a } }, b.serialMap = function (a, c) { var d = [], e = Math.max.apply(null, a.map(function (a) { return a.length })); return b.times(e).forEach(function (b, e) { var f = a.map(function (a) { return a[e] }); d[e] = c.apply(null, f) }), d }, b.roundWithPrecision = function (a, c) { var d = Math.pow(10, c || b.precision); return Math.round(a * d) / d }, b.precision = 8, b.escapingMap = { "&": "&", "<": "<", ">": ">", '"': """, "'": "'" }, b.serialize = function (a) { return null === a || void 0 === a ? a : ("number" == typeof a ? a = "" + a : "object" == typeof a && (a = JSON.stringify({ data: a })), Object.keys(b.escapingMap).reduce(function (a, c) { return b.replaceAll(a, c, b.escapingMap[c]) }, a)) }, b.deserialize = function (a) { if ("string" != typeof a) return a; a = Object.keys(b.escapingMap).reduce(function (a, c) { return b.replaceAll(a, b.escapingMap[c], c) }, a); try { a = JSON.parse(a), a = void 0 !== a.data ? a.data : a } catch (c) { } return a }, b.createSvg = function (a, c, d, e) { var f; return c = c || "100%", d = d || "100%", Array.prototype.slice.call(a.querySelectorAll("svg")).filter(function (a) { return a.getAttributeNS(b.namespaces.xmlns, "ct") }).forEach(function (b) { a.removeChild(b) }), f = new b.Svg("svg").attr({ width: c, height: d }).addClass(e), f._node.style.width = c, f._node.style.height = d, a.appendChild(f._node), f }, b.normalizeData = function (a, c, d) { var e, f = { raw: a, normalized: {} }; return f.normalized.series = b.getDataArray({ series: a.series || [] }, c, d), e = f.normalized.series.every(function (a) { return a instanceof Array }) ? Math.max.apply(null, f.normalized.series.map(function (a) { return a.length })) : f.normalized.series.length, f.normalized.labels = (a.labels || []).slice(), Array.prototype.push.apply(f.normalized.labels, b.times(Math.max(0, e - f.normalized.labels.length)).map(function () { return "" })), c && b.reverseData(f.normalized), f }, b.safeHasProperty = function (a, b) { return null !== a && "object" == typeof a && a.hasOwnProperty(b) }, b.isDataHoleValue = function (a) { return null === a || void 0 === a || "number" == typeof a && isNaN(a) }, b.reverseData = function (a) { a.labels.reverse(), a.series.reverse(); for (var b = 0; b < a.series.length; b++)"object" == typeof a.series[b] && void 0 !== a.series[b].data ? a.series[b].data.reverse() : a.series[b] instanceof Array && a.series[b].reverse() }, b.getDataArray = function (a, c, d) { function e(a) { if (b.safeHasProperty(a, "value")) return e(a.value); if (b.safeHasProperty(a, "data")) return e(a.data); if (a instanceof Array) return a.map(e); if (!b.isDataHoleValue(a)) { if (d) { var c = {}; return "string" == typeof d ? c[d] = b.getNumberOrUndefined(a) : c.y = b.getNumberOrUndefined(a), c.x = a.hasOwnProperty("x") ? b.getNumberOrUndefined(a.x) : c.x, c.y = a.hasOwnProperty("y") ? b.getNumberOrUndefined(a.y) : c.y, c } return b.getNumberOrUndefined(a) } } return a.series.map(e) }, b.normalizePadding = function (a, b) { return b = b || 0, "number" == typeof a ? { top: a, right: a, bottom: a, left: a } : { top: "number" == typeof a.top ? a.top : b, right: "number" == typeof a.right ? a.right : b, bottom: "number" == typeof a.bottom ? a.bottom : b, left: "number" == typeof a.left ? a.left : b } }, b.getMetaData = function (a, b) { var c = a.data ? a.data[b] : a[b]; return c ? c.meta : void 0 }, b.orderOfMagnitude = function (a) { return Math.floor(Math.log(Math.abs(a)) / Math.LN10) }, b.projectLength = function (a, b, c) { return b / c.range * a }, b.getAvailableHeight = function (a, c) { return Math.max((b.quantity(c.height).value || a.height()) - (c.chartPadding.top + c.chartPadding.bottom) - c.axisX.offset, 0) }, b.getHighLow = function (a, c, d) { function e(a) { if (void 0 !== a) if (a instanceof Array) for (var b = 0; b < a.length; b++)e(a[b]); else { var c = d ? +a[d] : +a; g && c > f.high && (f.high = c), h && c < f.low && (f.low = c) } } c = b.extend({}, c, d ? c["axis" + d.toUpperCase()] : {}); var f = { high: void 0 === c.high ? -Number.MAX_VALUE : +c.high, low: void 0 === c.low ? Number.MAX_VALUE : +c.low }, g = void 0 === c.high, h = void 0 === c.low; return (g || h) && e(a), (c.referenceValue || 0 === c.referenceValue) && (f.high = Math.max(c.referenceValue, f.high), f.low = Math.min(c.referenceValue, f.low)), f.high <= f.low && (0 === f.low ? f.high = 1 : f.low < 0 ? f.high = 0 : f.high > 0 ? f.low = 0 : (f.high = 1, f.low = 0)), f }, b.isNumeric = function (a) { return null !== a && isFinite(a) }, b.isFalseyButZero = function (a) { return !a && 0 !== a }, b.getNumberOrUndefined = function (a) { return b.isNumeric(a) ? +a : void 0 }, b.isMultiValue = function (a) { return "object" == typeof a && ("x" in a || "y" in a) }, b.getMultiValue = function (a, c) { return b.isMultiValue(a) ? b.getNumberOrUndefined(a[c || "y"]) : b.getNumberOrUndefined(a) }, b.rho = function (a) { function b(a, c) { return a % c === 0 ? c : b(c, a % c) } function c(a) { return a * a + 1 } if (1 === a) return a; var d, e = 2, f = 2; if (a % 2 === 0) return 2; do e = c(e) % a, f = c(c(f)) % a, d = b(Math.abs(e - f), a); while (1 === d); return d }, b.getBounds = function (a, c, d, e) { function f(a, b) { return a === (a += b) && (a *= 1 + (b > 0 ? o : -o)), a } var g, h, i, j = 0, k = { high: c.high, low: c.low }; k.valueRange = k.high - k.low, k.oom = b.orderOfMagnitude(k.valueRange), k.step = Math.pow(10, k.oom), k.min = Math.floor(k.low / k.step) * k.step, k.max = Math.ceil(k.high / k.step) * k.step, k.range = k.max - k.min, k.numberOfSteps = Math.round(k.range / k.step); var l = b.projectLength(a, k.step, k), m = l < d, n = e ? b.rho(k.range) : 0; if (e && b.projectLength(a, 1, k) >= d) k.step = 1; else if (e && n < k.step && b.projectLength(a, n, k) >= d) k.step = n; else for (; ;) { if (m && b.projectLength(a, k.step, k) <= d) k.step *= 2; else { if (m || !(b.projectLength(a, k.step / 2, k) >= d)) break; if (k.step /= 2, e && k.step % 1 !== 0) { k.step *= 2; break } } if (j++ > 1e3) throw new Error("Exceeded maximum number of iterations while optimizing scale step!") } var o = 2.221e-16; for (k.step = Math.max(k.step, o), h = k.min, i = k.max; h + k.step <= k.low;)h = f(h, k.step); for (; i - k.step >= k.high;)i = f(i, -k.step); k.min = h, k.max = i, k.range = k.max - k.min; var p = []; for (g = k.min; g <= k.max; g = f(g, k.step)) { var q = b.roundWithPrecision(g); q !== p[p.length - 1] && p.push(q) } return k.values = p, k }, b.polarToCartesian = function (a, b, c, d) { var e = (d - 90) * Math.PI / 180; return { x: a + c * Math.cos(e), y: b + c * Math.sin(e) } }, b.createChartRect = function (a, c, d) { var e = !(!c.axisX && !c.axisY), f = e ? c.axisY.offset : 0, g = e ? c.axisX.offset : 0, h = a.width() || b.quantity(c.width).value || 0, i = a.height() || b.quantity(c.height).value || 0, j = b.normalizePadding(c.chartPadding, d); h = Math.max(h, f + j.left + j.right), i = Math.max(i, g + j.top + j.bottom); var k = { padding: j, width: function () { return this.x2 - this.x1 }, height: function () { return this.y1 - this.y2 } }; return e ? ("start" === c.axisX.position ? (k.y2 = j.top + g, k.y1 = Math.max(i - j.bottom, k.y2 + 1)) : (k.y2 = j.top, k.y1 = Math.max(i - j.bottom - g, k.y2 + 1)), "start" === c.axisY.position ? (k.x1 = j.left + f, k.x2 = Math.max(h - j.right, k.x1 + 1)) : (k.x1 = j.left, k.x2 = Math.max(h - j.right - f, k.x1 + 1))) : (k.x1 = j.left, k.x2 = Math.max(h - j.right, k.x1 + 1), k.y2 = j.top, k.y1 = Math.max(i - j.bottom, k.y2 + 1)), k }, b.createGrid = function (a, c, d, e, f, g, h, i) { var j = {}; j[d.units.pos + "1"] = a, j[d.units.pos + "2"] = a, j[d.counterUnits.pos + "1"] = e, j[d.counterUnits.pos + "2"] = e + f; var k = g.elem("line", j, h.join(" ")); i.emit("draw", b.extend({ type: "grid", axis: d, index: c, group: g, element: k }, j)) }, b.createGridBackground = function (a, b, c, d) { var e = a.elem("rect", { x: b.x1, y: b.y2, width: b.width(), height: b.height() }, c, !0); d.emit("draw", { type: "gridBackground", group: a, element: e }) }, b.createLabel = function (a, c, e, f, g, h, i, j, k, l, m) { var n, o = {}; if (o[g.units.pos] = a + i[g.units.pos], o[g.counterUnits.pos] = i[g.counterUnits.pos], o[g.units.len] = c, o[g.counterUnits.len] = Math.max(0, h - 10), l) { var p = d.createElement("span"); p.className = k.join(" "), p.setAttribute("xmlns", b.namespaces.xhtml), p.innerText = f[e], p.style[g.units.len] = Math.round(o[g.units.len]) + "px", p.style[g.counterUnits.len] = Math.round(o[g.counterUnits.len]) + "px", n = j.foreignObject(p, b.extend({ style: "overflow: visible;" }, o)) } else n = j.elem("text", o, k.join(" ")).text(f[e]); m.emit("draw", b.extend({ type: "label", axis: g, index: e, group: j, element: n, text: f[e] }, o)) }, b.getSeriesOption = function (a, b, c) { if (a.name && b.series && b.series[a.name]) { var d = b.series[a.name]; return d.hasOwnProperty(c) ? d[c] : b[c] } return b[c] }, b.optionsProvider = function (a, d, e) { function f(a) { var f = h; if (h = b.extend({}, j), d) for (i = 0; i < d.length; i++) { var g = c.matchMedia(d[i][0]); g.matches && (h = b.extend(h, d[i][1])) } e && a && e.emit("optionsChanged", { previousOptions: f, currentOptions: h }) } function g() { k.forEach(function (a) { a.removeListener(f) }) } var h, i, j = b.extend({}, a), k = []; if (!c.matchMedia) throw "window.matchMedia not found! Make sure you're using a polyfill."; if (d) for (i = 0; i < d.length; i++) { var l = c.matchMedia(d[i][0]); l.addListener(f), k.push(l) } return f(), { removeMediaQueryListeners: g, getCurrentOptions: function () { return b.extend({}, h) } } }, b.splitIntoSegments = function (a, c, d) { var e = { increasingX: !1, fillHoles: !1 }; d = b.extend({}, e, d); for (var f = [], g = !0, h = 0; h < a.length; h += 2)void 0 === b.getMultiValue(c[h / 2].value) ? d.fillHoles || (g = !0) : (d.increasingX && h >= 2 && a[h] <= a[h - 2] && (g = !0), g && (f.push({ pathCoordinates: [], valueData: [] }), g = !1), f[f.length - 1].pathCoordinates.push(a[h], a[h + 1]), f[f.length - 1].valueData.push(c[h / 2])); return f } }(this || global, a), function (a, b) { "use strict"; b.Interpolation = {}, b.Interpolation.none = function (a) { var c = { fillHoles: !1 }; return a = b.extend({}, c, a), function (c, d) { for (var e = new b.Svg.Path, f = !0, g = 0; g < c.length; g += 2) { var h = c[g], i = c[g + 1], j = d[g / 2]; void 0 !== b.getMultiValue(j.value) ? (f ? e.move(h, i, !1, j) : e.line(h, i, !1, j), f = !1) : a.fillHoles || (f = !0) } return e } }, b.Interpolation.simple = function (a) { var c = { divisor: 2, fillHoles: !1 }; a = b.extend({}, c, a); var d = 1 / Math.max(1, a.divisor); return function (c, e) { for (var f, g, h, i = new b.Svg.Path, j = 0; j < c.length; j += 2) { var k = c[j], l = c[j + 1], m = (k - f) * d, n = e[j / 2]; void 0 !== n.value ? (void 0 === h ? i.move(k, l, !1, n) : i.curve(f + m, g, k - m, l, k, l, !1, n), f = k, g = l, h = n) : a.fillHoles || (f = k = h = void 0) } return i } }, b.Interpolation.cardinal = function (a) { var c = { tension: 1, fillHoles: !1 }; a = b.extend({}, c, a); var d = Math.min(1, Math.max(0, a.tension)), e = 1 - d; return function f(c, g) { var h = b.splitIntoSegments(c, g, { fillHoles: a.fillHoles }); if (h.length) { if (h.length > 1) { var i = []; return h.forEach(function (a) { i.push(f(a.pathCoordinates, a.valueData)) }), b.Svg.Path.join(i) } if (c = h[0].pathCoordinates, g = h[0].valueData, c.length <= 4) return b.Interpolation.none()(c, g); for (var j, k = (new b.Svg.Path).move(c[0], c[1], !1, g[0]), l = 0, m = c.length; m - 2 * !j > l; l += 2) { var n = [{ x: +c[l - 2], y: +c[l - 1] }, { x: +c[l], y: +c[l + 1] }, { x: +c[l + 2], y: +c[l + 3] }, { x: +c[l + 4], y: +c[l + 5] }]; j ? l ? m - 4 === l ? n[3] = { x: +c[0], y: +c[1] } : m - 2 === l && (n[2] = { x: +c[0], y: +c[1] }, n[3] = { x: +c[2], y: +c[3] }) : n[0] = { x: +c[m - 2], y: +c[m - 1] } : m - 4 === l ? n[3] = n[2] : l || (n[0] = { x: +c[l], y: +c[l + 1] }), k.curve(d * (-n[0].x + 6 * n[1].x + n[2].x) / 6 + e * n[2].x, d * (-n[0].y + 6 * n[1].y + n[2].y) / 6 + e * n[2].y, d * (n[1].x + 6 * n[2].x - n[3].x) / 6 + e * n[2].x, d * (n[1].y + 6 * n[2].y - n[3].y) / 6 + e * n[2].y, n[2].x, n[2].y, !1, g[(l + 2) / 2]) } return k } return b.Interpolation.none()([]) } }, b.Interpolation.monotoneCubic = function (a) { var c = { fillHoles: !1 }; return a = b.extend({}, c, a), function d(c, e) { var f = b.splitIntoSegments(c, e, { fillHoles: a.fillHoles, increasingX: !0 }); if (f.length) { if (f.length > 1) { var g = []; return f.forEach(function (a) { g.push(d(a.pathCoordinates, a.valueData)) }), b.Svg.Path.join(g) } if (c = f[0].pathCoordinates, e = f[0].valueData, c.length <= 4) return b.Interpolation.none()(c, e); var h, i, j = [], k = [], l = c.length / 2, m = [], n = [], o = [], p = []; for (h = 0; h < l; h++)j[h] = c[2 * h], k[h] = c[2 * h + 1]; for (h = 0; h < l - 1; h++)o[h] = k[h + 1] - k[h], p[h] = j[h + 1] - j[h], n[h] = o[h] / p[h]; for (m[0] = n[0], m[l - 1] = n[l - 2], h = 1; h < l - 1; h++)0 === n[h] || 0 === n[h - 1] || n[h - 1] > 0 != n[h] > 0 ? m[h] = 0 : (m[h] = 3 * (p[h - 1] + p[h]) / ((2 * p[h] + p[h - 1]) / n[h - 1] + (p[h] + 2 * p[h - 1]) / n[h]), isFinite(m[h]) || (m[h] = 0)); for (i = (new b.Svg.Path).move(j[0], k[0], !1, e[0]), h = 0; h < l - 1; h++)i.curve(j[h] + p[h] / 3, k[h] + m[h] * p[h] / 3, j[h + 1] - p[h] / 3, k[h + 1] - m[h + 1] * p[h] / 3, j[h + 1], k[h + 1], !1, e[h + 1]); return i } return b.Interpolation.none()([]) } }, b.Interpolation.step = function (a) { var c = { postpone: !0, fillHoles: !1 }; return a = b.extend({}, c, a), function (c, d) { for (var e, f, g, h = new b.Svg.Path, i = 0; i < c.length; i += 2) { var j = c[i], k = c[i + 1], l = d[i / 2]; void 0 !== l.value ? (void 0 === g ? h.move(j, k, !1, l) : (a.postpone ? h.line(j, f, !1, g) : h.line(e, k, !1, l), h.line(j, k, !1, l)), e = j, f = k, g = l) : a.fillHoles || (e = f = g = void 0) } return h } } }(this || global, a), function (a, b) { "use strict"; b.EventEmitter = function () { function a(a, b) { d[a] = d[a] || [], d[a].push(b) } function b(a, b) { d[a] && (b ? (d[a].splice(d[a].indexOf(b), 1), 0 === d[a].length && delete d[a]) : delete d[a]) } function c(a, b) { d[a] && d[a].forEach(function (a) { a(b) }), d["*"] && d["*"].forEach(function (c) { c(a, b) }) } var d = []; return { addEventHandler: a, removeEventHandler: b, emit: c } } }(this || global, a), function (a, b) { "use strict"; function c(a) { var b = []; if (a.length) for (var c = 0; c < a.length; c++)b.push(a[c]); return b } function d(a, c) { var d = c || this.prototype || b.Class, e = Object.create(d); b.Class.cloneDefinitions(e, a); var f = function () { var a, c = e.constructor || function () { }; return a = this === b ? Object.create(e) : this, c.apply(a, Array.prototype.slice.call(arguments, 0)), a }; return f.prototype = e, f["super"] = d, f.extend = this.extend, f } function e() { var a = c(arguments), b = a[0]; return a.splice(1, a.length - 1).forEach(function (a) { Object.getOwnPropertyNames(a).forEach(function (c) { delete b[c], Object.defineProperty(b, c, Object.getOwnPropertyDescriptor(a, c)) }) }), b } b.Class = { extend: d, cloneDefinitions: e } }(this || global, a), function (a, b) { "use strict"; function c(a, c, d) { return a && (this.data = a || {}, this.data.labels = this.data.labels || [], this.data.series = this.data.series || [], this.eventEmitter.emit("data", { type: "update", data: this.data })), c && (this.options = b.extend({}, d ? this.options : this.defaultOptions, c), this.initializeTimeoutId || (this.optionsProvider.removeMediaQueryListeners(), this.optionsProvider = b.optionsProvider(this.options, this.responsiveOptions, this.eventEmitter))), this.initializeTimeoutId || this.createChart(this.optionsProvider.getCurrentOptions()), this } function d() { return this.initializeTimeoutId ? i.clearTimeout(this.initializeTimeoutId) : (i.removeEventListener("resize", this.resizeListener), this.optionsProvider.removeMediaQueryListeners()), this } function e(a, b) { return this.eventEmitter.addEventHandler(a, b), this } function f(a, b) { return this.eventEmitter.removeEventHandler(a, b), this } function g() { i.addEventListener("resize", this.resizeListener), this.optionsProvider = b.optionsProvider(this.options, this.responsiveOptions, this.eventEmitter), this.eventEmitter.addEventHandler("optionsChanged", function () { this.update() }.bind(this)), this.options.plugins && this.options.plugins.forEach(function (a) { a instanceof Array ? a[0](this, a[1]) : a(this) }.bind(this)), this.eventEmitter.emit("data", { type: "initial", data: this.data }), this.createChart(this.optionsProvider.getCurrentOptions()), this.initializeTimeoutId = void 0 } function h(a, c, d, e, f) { this.container = b.querySelector(a), this.data = c || {}, this.data.labels = this.data.labels || [], this.data.series = this.data.series || [], this.defaultOptions = d, this.options = e, this.responsiveOptions = f, this.eventEmitter = b.EventEmitter(), this.supportsForeignObject = b.Svg.isSupported("Extensibility"), this.supportsAnimations = b.Svg.isSupported("AnimationEventsAttribute"), this.resizeListener = function () { this.update() }.bind(this), this.container && (this.container.__chartist__ && this.container.__chartist__.detach(), this.container.__chartist__ = this), this.initializeTimeoutId = setTimeout(g.bind(this), 0) } var i = a.window; b.Base = b.Class.extend({ constructor: h, optionsProvider: void 0, container: void 0, svg: void 0, eventEmitter: void 0, createChart: function () { throw new Error("Base chart type can't be instantiated!") }, update: c, detach: d, on: e, off: f, version: b.version, supportsForeignObject: !1 }) }(this || global, a), function (a, b) { "use strict"; function c(a, c, d, e, f) { a instanceof Element ? this._node = a : (this._node = y.createElementNS(b.namespaces.svg, a), "svg" === a && this.attr({ "xmlns:ct": b.namespaces.ct })), c && this.attr(c), d && this.addClass(d), e && (f && e._node.firstChild ? e._node.insertBefore(this._node, e._node.firstChild) : e._node.appendChild(this._node)) } function d(a, c) { return "string" == typeof a ? c ? this._node.getAttributeNS(c, a) : this._node.getAttribute(a) : (Object.keys(a).forEach(function (c) { if (void 0 !== a[c]) if (c.indexOf(":") !== -1) { var d = c.split(":"); this._node.setAttributeNS(b.namespaces[d[0]], c, a[c]) } else this._node.setAttribute(c, a[c]) }.bind(this)), this) } function e(a, c, d, e) { return new b.Svg(a, c, d, this, e) } function f() { return this._node.parentNode instanceof SVGElement ? new b.Svg(this._node.parentNode) : null } function g() { for (var a = this._node; "svg" !== a.nodeName;)a = a.parentNode; return new b.Svg(a) } function h(a) { var c = this._node.querySelector(a); return c ? new b.Svg(c) : null } function i(a) { var c = this._node.querySelectorAll(a); return c.length ? new b.Svg.List(c) : null } function j() { return this._node } function k(a, c, d, e) { if ("string" == typeof a) { var f = y.createElement("div"); f.innerHTML = a, a = f.firstChild } a.setAttribute("xmlns", b.namespaces.xmlns); var g = this.elem("foreignObject", c, d, e); return g._node.appendChild(a), g } function l(a) { return this._node.appendChild(y.createTextNode(a)), this } function m() { for (; this._node.firstChild;)this._node.removeChild(this._node.firstChild); return this } function n() { return this._node.parentNode.removeChild(this._node), this.parent() } function o(a) { return this._node.parentNode.replaceChild(a._node, this._node), a } function p(a, b) { return b && this._node.firstChild ? this._node.insertBefore(a._node, this._node.firstChild) : this._node.appendChild(a._node), this } function q() { return this._node.getAttribute("class") ? this._node.getAttribute("class").trim().split(/\s+/) : [] } function r(a) { return this._node.setAttribute("class", this.classes(this._node).concat(a.trim().split(/\s+/)).filter(function (a, b, c) { return c.indexOf(a) === b }).join(" ")), this } function s(a) { var b = a.trim().split(/\s+/); return this._node.setAttribute("class", this.classes(this._node).filter(function (a) { return b.indexOf(a) === -1 }).join(" ")), this } function t() { return this._node.setAttribute("class", ""), this } function u() { return this._node.getBoundingClientRect().height } function v() { return this._node.getBoundingClientRect().width } function w(a, c, d) { return void 0 === c && (c = !0), Object.keys(a).forEach(function (e) { function f(a, c) { var f, g, h, i = {}; a.easing && (h = a.easing instanceof Array ? a.easing : b.Svg.Easing[a.easing], delete a.easing), a.begin = b.ensureUnit(a.begin, "ms"), a.dur = b.ensureUnit(a.dur, "ms"), h && (a.calcMode = "spline", a.keySplines = h.join(" "), a.keyTimes = "0;1"), c && (a.fill = "freeze", i[e] = a.from, this.attr(i), g = b.quantity(a.begin || 0).value, a.begin = "indefinite"), f = this.elem("animate", b.extend({ attributeName: e }, a)), c && setTimeout(function () { try { f._node.beginElement() } catch (b) { i[e] = a.to, this.attr(i), f.remove() } }.bind(this), g), d && f._node.addEventListener("beginEvent", function () { d.emit("animationBegin", { element: this, animate: f._node, params: a }) }.bind(this)), f._node.addEventListener("endEvent", function () { d && d.emit("animationEnd", { element: this, animate: f._node, params: a }), c && (i[e] = a.to, this.attr(i), f.remove()) }.bind(this)) } a[e] instanceof Array ? a[e].forEach(function (a) { f.bind(this)(a, !1) }.bind(this)) : f.bind(this)(a[e], c) }.bind(this)), this } function x(a) { var c = this; this.svgElements = []; for (var d = 0; d < a.length; d++)this.svgElements.push(new b.Svg(a[d])); Object.keys(b.Svg.prototype).filter(function (a) { return ["constructor", "parent", "querySelector", "querySelectorAll", "replace", "append", "classes", "height", "width"].indexOf(a) === -1 }).forEach(function (a) { c[a] = function () { var d = Array.prototype.slice.call(arguments, 0); return c.svgElements.forEach(function (c) { b.Svg.prototype[a].apply(c, d) }), c } }) } var y = a.document; b.Svg = b.Class.extend({ constructor: c, attr: d, elem: e, parent: f, root: g, querySelector: h, querySelectorAll: i, getNode: j, foreignObject: k, text: l, empty: m, remove: n, replace: o, append: p, classes: q, addClass: r, removeClass: s, removeAllClasses: t, height: u, width: v, animate: w }), b.Svg.isSupported = function (a) { return y.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#" + a, "1.1") }; var z = { easeInSine: [.47, 0, .745, .715], easeOutSine: [.39, .575, .565, 1], easeInOutSine: [.445, .05, .55, .95], easeInQuad: [.55, .085, .68, .53], easeOutQuad: [.25, .46, .45, .94], easeInOutQuad: [.455, .03, .515, .955], easeInCubic: [.55, .055, .675, .19], easeOutCubic: [.215, .61, .355, 1], easeInOutCubic: [.645, .045, .355, 1], easeInQuart: [.895, .03, .685, .22], easeOutQuart: [.165, .84, .44, 1], easeInOutQuart: [.77, 0, .175, 1], easeInQuint: [.755, .05, .855, .06], easeOutQuint: [.23, 1, .32, 1], easeInOutQuint: [.86, 0, .07, 1], easeInExpo: [.95, .05, .795, .035], easeOutExpo: [.19, 1, .22, 1], easeInOutExpo: [1, 0, 0, 1], easeInCirc: [.6, .04, .98, .335], easeOutCirc: [.075, .82, .165, 1], easeInOutCirc: [.785, .135, .15, .86], easeInBack: [.6, -.28, .735, .045], easeOutBack: [.175, .885, .32, 1.275], easeInOutBack: [.68, -.55, .265, 1.55] }; b.Svg.Easing = z, b.Svg.List = b.Class.extend({ constructor: x }) }(this || global, a), function (a, b) { "use strict"; function c(a, c, d, e, f, g) { var h = b.extend({ command: f ? a.toLowerCase() : a.toUpperCase() }, c, g ? { data: g } : {}); d.splice(e, 0, h) } function d(a, b) { a.forEach(function (c, d) { t[c.command.toLowerCase()].forEach(function (e, f) { b(c, e, d, f, a) }) }) } function e(a, c) { this.pathElements = [], this.pos = 0, this.close = a, this.options = b.extend({}, u, c) } function f(a) { return void 0 !== a ? (this.pos = Math.max(0, Math.min(this.pathElements.length, a)), this) : this.pos } function g(a) { return this.pathElements.splice(this.pos, a), this } function h(a, b, d, e) { return c("M", { x: +a, y: +b }, this.pathElements, this.pos++, d, e), this } function i(a, b, d, e) { return c("L", { x: +a, y: +b }, this.pathElements, this.pos++, d, e), this } function j(a, b, d, e, f, g, h, i) { return c("C", { x1: +a, y1: +b, x2: +d, y2: +e, x: +f, y: +g }, this.pathElements, this.pos++, h, i), this } function k(a, b, d, e, f, g, h, i, j) { return c("A", { rx: +a, ry: +b, xAr: +d, lAf: +e, sf: +f, x: +g, y: +h }, this.pathElements, this.pos++, i, j), this } function l(a) { var c = a.replace(/([A-Za-z])([0-9])/g, "$1 $2").replace(/([0-9])([A-Za-z])/g, "$1 $2").split(/[\s,]+/).reduce(function (a, b) { return b.match(/[A-Za-z]/) && a.push([]), a[a.length - 1].push(b), a }, []); "Z" === c[c.length - 1][0].toUpperCase() && c.pop(); var d = c.map(function (a) { var c = a.shift(), d = t[c.toLowerCase()]; return b.extend({ command: c }, d.reduce(function (b, c, d) { return b[c] = +a[d], b }, {})) }), e = [this.pos, 0]; return Array.prototype.push.apply(e, d), Array.prototype.splice.apply(this.pathElements, e), this.pos += d.length, this } function m() { var a = Math.pow(10, this.options.accuracy); return this.pathElements.reduce(function (b, c) { var d = t[c.command.toLowerCase()].map(function (b) { return this.options.accuracy ? Math.round(c[b] * a) / a : c[b] }.bind(this)); return b + c.command + d.join(",") }.bind(this), "") + (this.close ? "Z" : "") } function n(a, b) { return d(this.pathElements, function (c, d) { c[d] *= "x" === d[0] ? a : b }), this } function o(a, b) { return d(this.pathElements, function (c, d) { c[d] += "x" === d[0] ? a : b }), this } function p(a) { return d(this.pathElements, function (b, c, d, e, f) { var g = a(b, c, d, e, f); (g || 0 === g) && (b[c] = g) }), this } function q(a) { var c = new b.Svg.Path(a || this.close); return c.pos = this.pos, c.pathElements = this.pathElements.slice().map(function (a) { return b.extend({}, a) }), c.options = b.extend({}, this.options), c } function r(a) { var c = [new b.Svg.Path]; return this.pathElements.forEach(function (d) { d.command === a.toUpperCase() && 0 !== c[c.length - 1].pathElements.length && c.push(new b.Svg.Path), c[c.length - 1].pathElements.push(d) }), c } function s(a, c, d) { for (var e = new b.Svg.Path(c, d), f = 0; f < a.length; f++)for (var g = a[f], h = 0; h < g.pathElements.length; h++)e.pathElements.push(g.pathElements[h]); return e } var t = { m: ["x", "y"], l: ["x", "y"], c: ["x1", "y1", "x2", "y2", "x", "y"], a: ["rx", "ry", "xAr", "lAf", "sf", "x", "y"] }, u = { accuracy: 3 }; b.Svg.Path = b.Class.extend({ constructor: e, position: f, remove: g, move: h, line: i, curve: j, arc: k, scale: n, translate: o, transform: p, parse: l, stringify: m, clone: q, splitByCommand: r }), b.Svg.Path.elementDescriptions = t, b.Svg.Path.join = s }(this || global, a), function (a, b) { "use strict"; function c(a, b, c, d) { this.units = a, this.counterUnits = a === e.x ? e.y : e.x, this.chartRect = b, this.axisLength = b[a.rectEnd] - b[a.rectStart], this.gridOffset = b[a.rectOffset], this.ticks = c, this.options = d } function d(a, c, d, e, f) { var g = e["axis" + this.units.pos.toUpperCase()], h = this.ticks.map(this.projectValue.bind(this)), i = this.ticks.map(g.labelInterpolationFnc); h.forEach(function (j, k) { var l, m = { x: 0, y: 0 }; l = h[k + 1] ? h[k + 1] - j : Math.max(this.axisLength - j, 30), b.isFalseyButZero(i[k]) && "" !== i[k] || ("x" === this.units.pos ? (j = this.chartRect.x1 + j, m.x = e.axisX.labelOffset.x, "start" === e.axisX.position ? m.y = this.chartRect.padding.top + e.axisX.labelOffset.y + (d ? 5 : 20) : m.y = this.chartRect.y1 + e.axisX.labelOffset.y + (d ? 5 : 20)) : (j = this.chartRect.y1 - j, m.y = e.axisY.labelOffset.y - (d ? l : 0), "start" === e.axisY.position ? m.x = d ? this.chartRect.padding.left + e.axisY.labelOffset.x : this.chartRect.x1 - 10 : m.x = this.chartRect.x2 + e.axisY.labelOffset.x + 10), g.showGrid && b.createGrid(j, k, this, this.gridOffset, this.chartRect[this.counterUnits.len](), a, [e.classNames.grid, e.classNames[this.units.dir]], f), g.showLabel && b.createLabel(j, l, k, i, this, g.offset, m, c, [e.classNames.label, e.classNames[this.units.dir], "start" === g.position ? e.classNames[g.position] : e.classNames.end], d, f)) }.bind(this)) } var e = (a.window, a.document, { x: { pos: "x", len: "width", dir: "horizontal", rectStart: "x1", rectEnd: "x2", rectOffset: "y2" }, y: { pos: "y", len: "height", dir: "vertical", rectStart: "y2", rectEnd: "y1", rectOffset: "x1" } }); b.Axis = b.Class.extend({ constructor: c, createGridAndLabels: d, projectValue: function (a, b, c) { throw new Error("Base axis can't be instantiated!") } }), b.Axis.units = e }(this || global, a), function (a, b) { "use strict"; function c(a, c, d, e) { var f = e.highLow || b.getHighLow(c, e, a.pos); this.bounds = b.getBounds(d[a.rectEnd] - d[a.rectStart], f, e.scaleMinSpace || 20, e.onlyInteger), this.range = { min: this.bounds.min, max: this.bounds.max }, b.AutoScaleAxis["super"].constructor.call(this, a, d, this.bounds.values, e) } function d(a) { return this.axisLength * (+b.getMultiValue(a, this.units.pos) - this.bounds.min) / this.bounds.range } a.window, a.document; b.AutoScaleAxis = b.Axis.extend({ constructor: c, projectValue: d }) }(this || global, a), function (a, b) { "use strict"; function c(a, c, d, e) { var f = e.highLow || b.getHighLow(c, e, a.pos); this.divisor = e.divisor || 1, this.ticks = e.ticks || b.times(this.divisor).map(function (a, b) { return f.low + (f.high - f.low) / this.divisor * b }.bind(this)), this.ticks.sort(function (a, b) { return a - b }), this.range = { min: f.low, max: f.high }, b.FixedScaleAxis["super"].constructor.call(this, a, d, this.ticks, e), this.stepLength = this.axisLength / this.divisor } function d(a) { return this.axisLength * (+b.getMultiValue(a, this.units.pos) - this.range.min) / (this.range.max - this.range.min) } a.window, a.document; b.FixedScaleAxis = b.Axis.extend({ constructor: c, projectValue: d }) }(this || global, a), function (a, b) { "use strict"; function c(a, c, d, e) { b.StepAxis["super"].constructor.call(this, a, d, e.ticks, e); var f = Math.max(1, e.ticks.length - (e.stretch ? 1 : 0)); this.stepLength = this.axisLength / f } function d(a, b) { return this.stepLength * b } a.window, a.document; b.StepAxis = b.Axis.extend({ constructor: c, projectValue: d }) }(this || global, a), function (a, b) { "use strict"; function c(a) { var c = b.normalizeData(this.data, a.reverseData, !0); this.svg = b.createSvg(this.container, a.width, a.height, a.classNames.chart); var d, f, g = this.svg.elem("g").addClass(a.classNames.gridGroup), h = this.svg.elem("g"), i = this.svg.elem("g").addClass(a.classNames.labelGroup), j = b.createChartRect(this.svg, a, e.padding); d = void 0 === a.axisX.type ? new b.StepAxis(b.Axis.units.x, c.normalized.series, j, b.extend({}, a.axisX, { ticks: c.normalized.labels, stretch: a.fullWidth })) : a.axisX.type.call(b, b.Axis.units.x, c.normalized.series, j, a.axisX), f = void 0 === a.axisY.type ? new b.AutoScaleAxis(b.Axis.units.y, c.normalized.series, j, b.extend({}, a.axisY, { high: b.isNumeric(a.high) ? a.high : a.axisY.high, low: b.isNumeric(a.low) ? a.low : a.axisY.low })) : a.axisY.type.call(b, b.Axis.units.y, c.normalized.series, j, a.axisY), d.createGridAndLabels(g, i, this.supportsForeignObject, a, this.eventEmitter), f.createGridAndLabels(g, i, this.supportsForeignObject, a, this.eventEmitter), a.showGridBackground && b.createGridBackground(g, j, a.classNames.gridBackground, this.eventEmitter), c.raw.series.forEach(function (e, g) { var i = h.elem("g"); i.attr({ "ct:series-name": e.name, "ct:meta": b.serialize(e.meta) }), i.addClass([a.classNames.series, e.className || a.classNames.series + "-" + b.alphaNumerate(g)].join(" ")); var k = [], l = []; c.normalized.series[g].forEach(function (a, h) { var i = { x: j.x1 + d.projectValue(a, h, c.normalized.series[g]), y: j.y1 - f.projectValue(a, h, c.normalized.series[g]) }; k.push(i.x, i.y), l.push({ value: a, valueIndex: h, meta: b.getMetaData(e, h) }) }.bind(this)); var m = { lineSmooth: b.getSeriesOption(e, a, "lineSmooth"), showPoint: b.getSeriesOption(e, a, "showPoint"), showLine: b.getSeriesOption(e, a, "showLine"), showArea: b.getSeriesOption(e, a, "showArea"), areaBase: b.getSeriesOption(e, a, "areaBase") }, n = "function" == typeof m.lineSmooth ? m.lineSmooth : m.lineSmooth ? b.Interpolation.monotoneCubic() : b.Interpolation.none(), o = n(k, l); if (m.showPoint && o.pathElements.forEach(function (c) { var h = i.elem("line", { x1: c.x, y1: c.y, x2: c.x + .01, y2: c.y }, a.classNames.point).attr({ "ct:value": [c.data.value.x, c.data.value.y].filter(b.isNumeric).join(","), "ct:meta": b.serialize(c.data.meta) }); this.eventEmitter.emit("draw", { type: "point", value: c.data.value, index: c.data.valueIndex, meta: c.data.meta, series: e, seriesIndex: g, axisX: d, axisY: f, group: i, element: h, x: c.x, y: c.y }) }.bind(this)), m.showLine) { var p = i.elem("path", { d: o.stringify() }, a.classNames.line, !0); this.eventEmitter.emit("draw", { type: "line", values: c.normalized.series[g], path: o.clone(), chartRect: j, index: g, series: e, seriesIndex: g, seriesMeta: e.meta, axisX: d, axisY: f, group: i, element: p }) } if (m.showArea && f.range) { var q = Math.max(Math.min(m.areaBase, f.range.max), f.range.min), r = j.y1 - f.projectValue(q); o.splitByCommand("M").filter(function (a) { return a.pathElements.length > 1 }).map(function (a) { var b = a.pathElements[0], c = a.pathElements[a.pathElements.length - 1]; return a.clone(!0).position(0).remove(1).move(b.x, r).line(b.x, b.y).position(a.pathElements.length + 1).line(c.x, r) }).forEach(function (b) { var h = i.elem("path", { d: b.stringify() }, a.classNames.area, !0); this.eventEmitter.emit("draw", { type: "area", values: c.normalized.series[g], path: b.clone(), series: e, seriesIndex: g, axisX: d, axisY: f, chartRect: j, index: g, group: i, element: h }) }.bind(this)) } }.bind(this)), this.eventEmitter.emit("created", { bounds: f.bounds, chartRect: j, axisX: d, axisY: f, svg: this.svg, options: a }) } function d(a, c, d, f) { b.Line["super"].constructor.call(this, a, c, e, b.extend({}, e, d), f) } var e = (a.window, a.document, { axisX: { offset: 30, position: "end", labelOffset: { x: 0, y: 0 }, showLabel: !0, showGrid: !0, labelInterpolationFnc: b.noop, type: void 0 }, axisY: { offset: 40, position: "start", labelOffset: { x: 0, y: 0 }, showLabel: !0, showGrid: !0, labelInterpolationFnc: b.noop, type: void 0, scaleMinSpace: 20, onlyInteger: !1 }, width: void 0, height: void 0, showLine: !0, showPoint: !0, showArea: !1, areaBase: 0, lineSmooth: !0, showGridBackground: !1, low: void 0, high: void 0, chartPadding: { top: 15, right: 15, bottom: 5, left: 10 }, fullWidth: !1, reverseData: !1, classNames: { chart: "ct-chart-line", label: "ct-label", labelGroup: "ct-labels", series: "ct-series", line: "ct-line", point: "ct-point", area: "ct-area", grid: "ct-grid", gridGroup: "ct-grids", gridBackground: "ct-grid-background", vertical: "ct-vertical", horizontal: "ct-horizontal", start: "ct-start", end: "ct-end" } }); b.Line = b.Base.extend({ constructor: d, createChart: c }) }(this || global, a), function (a, b) { + "use strict"; function c(a) { + var c, d; a.distributeSeries ? (c = b.normalizeData(this.data, a.reverseData, a.horizontalBars ? "x" : "y"), c.normalized.series = c.normalized.series.map(function (a) { return [a] })) : c = b.normalizeData(this.data, a.reverseData, a.horizontalBars ? "x" : "y"), this.svg = b.createSvg(this.container, a.width, a.height, a.classNames.chart + (a.horizontalBars ? " " + a.classNames.horizontalBars : "")); var f = this.svg.elem("g").addClass(a.classNames.gridGroup), g = this.svg.elem("g"), h = this.svg.elem("g").addClass(a.classNames.labelGroup); + if (a.stackBars && 0 !== c.normalized.series.length) { var i = b.serialMap(c.normalized.series, function () { return Array.prototype.slice.call(arguments).map(function (a) { return a }).reduce(function (a, b) { return { x: a.x + (b && b.x) || 0, y: a.y + (b && b.y) || 0 } }, { x: 0, y: 0 }) }); d = b.getHighLow([i], a, a.horizontalBars ? "x" : "y") } else d = b.getHighLow(c.normalized.series, a, a.horizontalBars ? "x" : "y"); d.high = +a.high || (0 === a.high ? 0 : d.high), d.low = +a.low || (0 === a.low ? 0 : d.low); var j, k, l, m, n, o = b.createChartRect(this.svg, a, e.padding); k = a.distributeSeries && a.stackBars ? c.normalized.labels.slice(0, 1) : c.normalized.labels, a.horizontalBars ? (j = m = void 0 === a.axisX.type ? new b.AutoScaleAxis(b.Axis.units.x, c.normalized.series, o, b.extend({}, a.axisX, { highLow: d, referenceValue: 0 })) : a.axisX.type.call(b, b.Axis.units.x, c.normalized.series, o, b.extend({}, a.axisX, { highLow: d, referenceValue: 0 })), l = n = void 0 === a.axisY.type ? new b.StepAxis(b.Axis.units.y, c.normalized.series, o, { ticks: k }) : a.axisY.type.call(b, b.Axis.units.y, c.normalized.series, o, a.axisY)) : (l = m = void 0 === a.axisX.type ? new b.StepAxis(b.Axis.units.x, c.normalized.series, o, { ticks: k }) : a.axisX.type.call(b, b.Axis.units.x, c.normalized.series, o, a.axisX), j = n = void 0 === a.axisY.type ? new b.AutoScaleAxis(b.Axis.units.y, c.normalized.series, o, b.extend({}, a.axisY, { highLow: d, referenceValue: 0 })) : a.axisY.type.call(b, b.Axis.units.y, c.normalized.series, o, b.extend({}, a.axisY, { highLow: d, referenceValue: 0 }))); var p = a.horizontalBars ? o.x1 + j.projectValue(0) : o.y1 - j.projectValue(0), q = []; l.createGridAndLabels(f, h, this.supportsForeignObject, a, this.eventEmitter), j.createGridAndLabels(f, h, this.supportsForeignObject, a, this.eventEmitter), a.showGridBackground && b.createGridBackground(f, o, a.classNames.gridBackground, this.eventEmitter), c.raw.series.forEach(function (d, e) { var f, h, i = e - (c.raw.series.length - 1) / 2; f = a.distributeSeries && !a.stackBars ? l.axisLength / c.normalized.series.length / 2 : a.distributeSeries && a.stackBars ? l.axisLength / 2 : l.axisLength / c.normalized.series[e].length / 2, h = g.elem("g"), h.attr({ "ct:series-name": d.name, "ct:meta": b.serialize(d.meta) }), h.addClass([a.classNames.series, d.className || a.classNames.series + "-" + b.alphaNumerate(e)].join(" ")), c.normalized.series[e].forEach(function (g, k) { var r, s, t, u; if (u = a.distributeSeries && !a.stackBars ? e : a.distributeSeries && a.stackBars ? 0 : k, r = a.horizontalBars ? { x: o.x1 + j.projectValue(g && g.x ? g.x : 0, k, c.normalized.series[e]), y: o.y1 - l.projectValue(g && g.y ? g.y : 0, u, c.normalized.series[e]) } : { x: o.x1 + l.projectValue(g && g.x ? g.x : 0, u, c.normalized.series[e]), y: o.y1 - j.projectValue(g && g.y ? g.y : 0, k, c.normalized.series[e]) }, l instanceof b.StepAxis && (l.options.stretch || (r[l.units.pos] += f * (a.horizontalBars ? -1 : 1)), r[l.units.pos] += a.stackBars || a.distributeSeries ? 0 : i * a.seriesBarDistance * (a.horizontalBars ? -1 : 1)), t = q[k] || p, q[k] = t - (p - r[l.counterUnits.pos]), void 0 !== g) { var v = {}; v[l.units.pos + "1"] = r[l.units.pos], v[l.units.pos + "2"] = r[l.units.pos], !a.stackBars || "accumulate" !== a.stackMode && a.stackMode ? (v[l.counterUnits.pos + "1"] = p, v[l.counterUnits.pos + "2"] = r[l.counterUnits.pos]) : (v[l.counterUnits.pos + "1"] = t, v[l.counterUnits.pos + "2"] = q[k]), v.x1 = Math.min(Math.max(v.x1, o.x1), o.x2), v.x2 = Math.min(Math.max(v.x2, o.x1), o.x2), v.y1 = Math.min(Math.max(v.y1, o.y2), o.y1), v.y2 = Math.min(Math.max(v.y2, o.y2), o.y1); var w = b.getMetaData(d, k); s = h.elem("line", v, a.classNames.bar).attr({ "ct:value": [g.x, g.y].filter(b.isNumeric).join(","), "ct:meta": b.serialize(w) }), this.eventEmitter.emit("draw", b.extend({ type: "bar", value: g, index: k, meta: w, series: d, seriesIndex: e, axisX: m, axisY: n, chartRect: o, group: h, element: s }, v)) } }.bind(this)) }.bind(this)), this.eventEmitter.emit("created", { bounds: j.bounds, chartRect: o, axisX: m, axisY: n, svg: this.svg, options: a }) + } function d(a, c, d, f) { b.Bar["super"].constructor.call(this, a, c, e, b.extend({}, e, d), f) } var e = (a.window, a.document, { axisX: { offset: 30, position: "end", labelOffset: { x: 0, y: 0 }, showLabel: !0, showGrid: !0, labelInterpolationFnc: b.noop, scaleMinSpace: 30, onlyInteger: !1 }, axisY: { offset: 40, position: "start", labelOffset: { x: 0, y: 0 }, showLabel: !0, showGrid: !0, labelInterpolationFnc: b.noop, scaleMinSpace: 20, onlyInteger: !1 }, width: void 0, height: void 0, high: void 0, low: void 0, referenceValue: 0, chartPadding: { top: 15, right: 15, bottom: 5, left: 10 }, seriesBarDistance: 15, stackBars: !1, stackMode: "accumulate", horizontalBars: !1, distributeSeries: !1, reverseData: !1, showGridBackground: !1, classNames: { chart: "ct-chart-bar", horizontalBars: "ct-horizontal-bars", label: "ct-label", labelGroup: "ct-labels", series: "ct-series", bar: "ct-bar", grid: "ct-grid", gridGroup: "ct-grids", gridBackground: "ct-grid-background", vertical: "ct-vertical", horizontal: "ct-horizontal", start: "ct-start", end: "ct-end" } }); b.Bar = b.Base.extend({ constructor: d, createChart: c }) + }(this || global, a), function (a, b) { "use strict"; function c(a, b, c) { var d = b.x > a.x; return d && "explode" === c || !d && "implode" === c ? "start" : d && "implode" === c || !d && "explode" === c ? "end" : "middle" } function d(a) { var d, e, g, h, i, j = b.normalizeData(this.data), k = [], l = a.startAngle; this.svg = b.createSvg(this.container, a.width, a.height, a.donut ? a.classNames.chartDonut : a.classNames.chartPie), e = b.createChartRect(this.svg, a, f.padding), g = Math.min(e.width() / 2, e.height() / 2), i = a.total || j.normalized.series.reduce(function (a, b) { return a + b }, 0); var m = b.quantity(a.donutWidth); "%" === m.unit && (m.value *= g / 100), g -= a.donut && !a.donutSolid ? m.value / 2 : 0, h = "outside" === a.labelPosition || a.donut && !a.donutSolid ? g : "center" === a.labelPosition ? 0 : a.donutSolid ? g - m.value / 2 : g / 2, h += a.labelOffset; var n = { x: e.x1 + e.width() / 2, y: e.y2 + e.height() / 2 }, o = 1 === j.raw.series.filter(function (a) { return a.hasOwnProperty("value") ? 0 !== a.value : 0 !== a }).length; j.raw.series.forEach(function (a, b) { k[b] = this.svg.elem("g", null, null) }.bind(this)), a.showLabel && (d = this.svg.elem("g", null, null)), j.raw.series.forEach(function (e, f) { if (0 !== j.normalized.series[f] || !a.ignoreEmptyValues) { k[f].attr({ "ct:series-name": e.name }), k[f].addClass([a.classNames.series, e.className || a.classNames.series + "-" + b.alphaNumerate(f)].join(" ")); var p = i > 0 ? l + j.normalized.series[f] / i * 360 : 0, q = Math.max(0, l - (0 === f || o ? 0 : .2)); p - q >= 359.99 && (p = q + 359.99); var r, s, t, u = b.polarToCartesian(n.x, n.y, g, q), v = b.polarToCartesian(n.x, n.y, g, p), w = new b.Svg.Path(!a.donut || a.donutSolid).move(v.x, v.y).arc(g, g, 0, p - l > 180, 0, u.x, u.y); a.donut ? a.donutSolid && (t = g - m.value, r = b.polarToCartesian(n.x, n.y, t, l - (0 === f || o ? 0 : .2)), s = b.polarToCartesian(n.x, n.y, t, p), w.line(r.x, r.y), w.arc(t, t, 0, p - l > 180, 1, s.x, s.y)) : w.line(n.x, n.y); var x = a.classNames.slicePie; a.donut && (x = a.classNames.sliceDonut, a.donutSolid && (x = a.classNames.sliceDonutSolid)); var y = k[f].elem("path", { d: w.stringify() }, x); if (y.attr({ "ct:value": j.normalized.series[f], "ct:meta": b.serialize(e.meta) }), a.donut && !a.donutSolid && (y._node.style.strokeWidth = m.value + "px"), this.eventEmitter.emit("draw", { type: "slice", value: j.normalized.series[f], totalDataSum: i, index: f, meta: e.meta, series: e, group: k[f], element: y, path: w.clone(), center: n, radius: g, startAngle: l, endAngle: p }), a.showLabel) { var z; z = 1 === j.raw.series.length ? { x: n.x, y: n.y } : b.polarToCartesian(n.x, n.y, h, l + (p - l) / 2); var A; A = j.normalized.labels && !b.isFalseyButZero(j.normalized.labels[f]) ? j.normalized.labels[f] : j.normalized.series[f]; var B = a.labelInterpolationFnc(A, f); if (B || 0 === B) { var C = d.elem("text", { dx: z.x, dy: z.y, "text-anchor": c(n, z, a.labelDirection) }, a.classNames.label).text("" + B); this.eventEmitter.emit("draw", { type: "label", index: f, group: d, element: C, text: "" + B, x: z.x, y: z.y }) } } l = p } }.bind(this)), this.eventEmitter.emit("created", { chartRect: e, svg: this.svg, options: a }) } function e(a, c, d, e) { b.Pie["super"].constructor.call(this, a, c, f, b.extend({}, f, d), e) } var f = (a.window, a.document, { width: void 0, height: void 0, chartPadding: 5, classNames: { chartPie: "ct-chart-pie", chartDonut: "ct-chart-donut", series: "ct-series", slicePie: "ct-slice-pie", sliceDonut: "ct-slice-donut", sliceDonutSolid: "ct-slice-donut-solid", label: "ct-label" }, startAngle: 0, total: void 0, donut: !1, donutSolid: !1, donutWidth: 60, showLabel: !0, labelOffset: 0, labelPosition: "inside", labelInterpolationFnc: b.noop, labelDirection: "neutral", reverseData: !1, ignoreEmptyValues: !1 }); b.Pie = b.Base.extend({ constructor: e, createChart: d, determineAnchorPosition: c }) }(this || global, a), a +}); +//# sourceMappingURL=chartist.min.js.map + +var i, l, selectedLine = null; + +/* Navigate to hash without browser history entry */ +var navigateToHash = function () { + if (window.history !== undefined && window.history.replaceState !== undefined) { + window.history.replaceState(undefined, undefined, this.getAttribute("href")); + } +}; + +var hashLinks = document.getElementsByClassName('navigatetohash'); +for (i = 0, l = hashLinks.length; i < l; i++) { + hashLinks[i].addEventListener('click', navigateToHash); +} + +/* Switch test method */ +var switchTestMethod = function () { + var method = this.getAttribute("value"); + console.log("Selected test method: " + method); + + var lines, i, l, coverageData, lineAnalysis, cells; + + lines = document.querySelectorAll('.lineAnalysis tr'); + + for (i = 1, l = lines.length; i < l; i++) { + coverageData = JSON.parse(lines[i].getAttribute('data-coverage').replace(/'/g, '"')); + lineAnalysis = coverageData[method]; + cells = lines[i].querySelectorAll('td'); + if (lineAnalysis === undefined) { + lineAnalysis = coverageData.AllTestMethods; + if (lineAnalysis.LVS !== 'gray') { + cells[0].setAttribute('class', 'red'); + cells[1].innerText = cells[1].textContent = '0'; + cells[4].setAttribute('class', 'lightred'); + } + } else { + cells[0].setAttribute('class', lineAnalysis.LVS); + cells[1].innerText = cells[1].textContent = lineAnalysis.VC; + cells[4].setAttribute('class', 'light' + lineAnalysis.LVS); + } + } +}; + +var testMethods = document.getElementsByClassName('switchtestmethod'); +for (i = 0, l = testMethods.length; i < l; i++) { + testMethods[i].addEventListener('change', switchTestMethod); +} + +/* Highlight test method by line */ +var toggleLine = function () { + if (selectedLine === this) { + selectedLine = null; + } else { + selectedLine = null; + unhighlightTestMethods(); + highlightTestMethods.call(this); + selectedLine = this; + } + +}; +var highlightTestMethods = function () { + if (selectedLine !== null) { + return; + } + + var lineAnalysis; + var coverageData = JSON.parse(this.getAttribute('data-coverage').replace(/'/g, '"')); + var testMethods = document.getElementsByClassName('testmethod'); + + for (i = 0, l = testMethods.length; i < l; i++) { + lineAnalysis = coverageData[testMethods[i].id]; + if (lineAnalysis === undefined) { + testMethods[i].className = testMethods[i].className.replace(/\s*light.+/g, ""); + } else { + testMethods[i].className += ' light' + lineAnalysis.LVS; + } + } +}; +var unhighlightTestMethods = function () { + if (selectedLine !== null) { + return; + } + + var testMethods = document.getElementsByClassName('testmethod'); + for (i = 0, l = testMethods.length; i < l; i++) { + testMethods[i].className = testMethods[i].className.replace(/\s*light.+/g, ""); + } +}; +var coverableLines = document.getElementsByClassName('coverableline'); +for (i = 0, l = coverableLines.length; i < l; i++) { + coverableLines[i].addEventListener('click', toggleLine); + coverableLines[i].addEventListener('mouseenter', highlightTestMethods); + coverableLines[i].addEventListener('mouseleave', unhighlightTestMethods); +} + +/* History charts */ +var renderChart = function (chart) { + // Remove current children (e.g. PNG placeholder) + while (chart.firstChild) { + chart.firstChild.remove(); + } + + var chartData = window[chart.getAttribute('data-data')]; + var options = { + axisY: { + type: undefined, + onlyInteger: true + }, + lineSmooth: false, + low: 0, + high: 100, + scaleMinSpace: 20, + onlyInteger: true, + fullWidth: true + }; + var lineChart = new Chartist.Line(chart, { + labels: [], + series: chartData.series + }, options); + + /* Zoom */ + var zoomButtonDiv = document.createElement("div"); + zoomButtonDiv.className = "toggleZoom"; + var zoomButtonLink = document.createElement("a"); + zoomButtonLink.setAttribute("href", ""); + var zoomButtonText = document.createElement("i"); + zoomButtonText.className = "icon-search-plus"; + + zoomButtonLink.appendChild(zoomButtonText); + zoomButtonDiv.appendChild(zoomButtonLink); + + chart.appendChild(zoomButtonDiv); + + zoomButtonDiv.addEventListener('click', function (event) { + event.preventDefault(); + + if (options.axisY.type === undefined) { + options.axisY.type = Chartist.AutoScaleAxis; + zoomButtonText.className = "icon-search-minus"; + } else { + options.axisY.type = undefined; + zoomButtonText.className = "icon-search-plus"; + } + + lineChart.update(null, options); + }); + + var tooltip = document.createElement("div"); + tooltip.className = "tooltip"; + + chart.appendChild(tooltip); + + /* Tooltips */ + var showToolTip = function () { + var index = this.getAttribute('ct:meta'); + + tooltip.innerHTML = chartData.tooltips[index]; + tooltip.style.display = 'block'; + }; + + var moveToolTip = function (event) { + var box = chart.getBoundingClientRect(); + var left = event.pageX - box.left - window.pageXOffset; + var top = event.pageY - box.top - window.pageYOffset; + + left = left + 20; + top = top - tooltip.offsetHeight / 2; + + if (left + tooltip.offsetWidth > box.width) { + left -= tooltip.offsetWidth + 40; + } + + if (top < 0) { + top = 0; + } + + if (top + tooltip.offsetHeight > box.height) { + top = box.height - tooltip.offsetHeight; + } + + tooltip.style.left = left + 'px'; + tooltip.style.top = top + 'px'; + }; + + var hideToolTip = function () { + tooltip.style.display = 'none'; + }; + chart.addEventListener('mousemove', moveToolTip); + + lineChart.on('created', function () { + var chartPoints = chart.getElementsByClassName('ct-point'); + for (i = 0, l = chartPoints.length; i < l; i++) { + chartPoints[i].addEventListener('mousemove', showToolTip); + chartPoints[i].addEventListener('mouseout', hideToolTip); + } + }); +}; + +var charts = document.getElementsByClassName('historychart'); +for (i = 0, l = charts.length; i < l; i++) { + renderChart(charts[i]); +} \ No newline at end of file diff --git a/src/URLShortener.Tests/output/icon_cog.svg b/src/URLShortener.Tests/output/icon_cog.svg new file mode 100644 index 0000000..d730bf1 --- /dev/null +++ b/src/URLShortener.Tests/output/icon_cog.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/URLShortener.Tests/output/icon_cog_dark.svg b/src/URLShortener.Tests/output/icon_cog_dark.svg new file mode 100644 index 0000000..ccbcd9b --- /dev/null +++ b/src/URLShortener.Tests/output/icon_cog_dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/URLShortener.Tests/output/icon_cube.svg b/src/URLShortener.Tests/output/icon_cube.svg new file mode 100644 index 0000000..3302443 --- /dev/null +++ b/src/URLShortener.Tests/output/icon_cube.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/src/URLShortener.Tests/output/icon_cube_dark.svg b/src/URLShortener.Tests/output/icon_cube_dark.svg new file mode 100644 index 0000000..3e7f0fa --- /dev/null +++ b/src/URLShortener.Tests/output/icon_cube_dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/URLShortener.Tests/output/icon_down-dir_active.svg b/src/URLShortener.Tests/output/icon_down-dir_active.svg new file mode 100644 index 0000000..d11cf04 --- /dev/null +++ b/src/URLShortener.Tests/output/icon_down-dir_active.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/src/URLShortener.Tests/output/icon_down-dir_active_dark.svg b/src/URLShortener.Tests/output/icon_down-dir_active_dark.svg new file mode 100644 index 0000000..fa34aeb --- /dev/null +++ b/src/URLShortener.Tests/output/icon_down-dir_active_dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/URLShortener.Tests/output/icon_fork.svg b/src/URLShortener.Tests/output/icon_fork.svg new file mode 100644 index 0000000..f0148b3 --- /dev/null +++ b/src/URLShortener.Tests/output/icon_fork.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/src/URLShortener.Tests/output/icon_fork_dark.svg b/src/URLShortener.Tests/output/icon_fork_dark.svg new file mode 100644 index 0000000..11930c9 --- /dev/null +++ b/src/URLShortener.Tests/output/icon_fork_dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/URLShortener.Tests/output/icon_info-circled.svg b/src/URLShortener.Tests/output/icon_info-circled.svg new file mode 100644 index 0000000..252166b --- /dev/null +++ b/src/URLShortener.Tests/output/icon_info-circled.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/src/URLShortener.Tests/output/icon_info-circled_dark.svg b/src/URLShortener.Tests/output/icon_info-circled_dark.svg new file mode 100644 index 0000000..252166b --- /dev/null +++ b/src/URLShortener.Tests/output/icon_info-circled_dark.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/src/URLShortener.Tests/output/icon_minus.svg b/src/URLShortener.Tests/output/icon_minus.svg new file mode 100644 index 0000000..3c30c36 --- /dev/null +++ b/src/URLShortener.Tests/output/icon_minus.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/src/URLShortener.Tests/output/icon_minus_dark.svg b/src/URLShortener.Tests/output/icon_minus_dark.svg new file mode 100644 index 0000000..2516b6f --- /dev/null +++ b/src/URLShortener.Tests/output/icon_minus_dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/URLShortener.Tests/output/icon_plus.svg b/src/URLShortener.Tests/output/icon_plus.svg new file mode 100644 index 0000000..7932723 --- /dev/null +++ b/src/URLShortener.Tests/output/icon_plus.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/src/URLShortener.Tests/output/icon_plus_dark.svg b/src/URLShortener.Tests/output/icon_plus_dark.svg new file mode 100644 index 0000000..6ed4edd --- /dev/null +++ b/src/URLShortener.Tests/output/icon_plus_dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/URLShortener.Tests/output/icon_search-minus.svg b/src/URLShortener.Tests/output/icon_search-minus.svg new file mode 100644 index 0000000..c174eb5 --- /dev/null +++ b/src/URLShortener.Tests/output/icon_search-minus.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/src/URLShortener.Tests/output/icon_search-minus_dark.svg b/src/URLShortener.Tests/output/icon_search-minus_dark.svg new file mode 100644 index 0000000..9caaffb --- /dev/null +++ b/src/URLShortener.Tests/output/icon_search-minus_dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/URLShortener.Tests/output/icon_search-plus.svg b/src/URLShortener.Tests/output/icon_search-plus.svg new file mode 100644 index 0000000..04b24ec --- /dev/null +++ b/src/URLShortener.Tests/output/icon_search-plus.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/src/URLShortener.Tests/output/icon_search-plus_dark.svg b/src/URLShortener.Tests/output/icon_search-plus_dark.svg new file mode 100644 index 0000000..5324194 --- /dev/null +++ b/src/URLShortener.Tests/output/icon_search-plus_dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/URLShortener.Tests/output/icon_sponsor.svg b/src/URLShortener.Tests/output/icon_sponsor.svg new file mode 100644 index 0000000..bf6d959 --- /dev/null +++ b/src/URLShortener.Tests/output/icon_sponsor.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/src/URLShortener.Tests/output/icon_star.svg b/src/URLShortener.Tests/output/icon_star.svg new file mode 100644 index 0000000..b23c54e --- /dev/null +++ b/src/URLShortener.Tests/output/icon_star.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/src/URLShortener.Tests/output/icon_star_dark.svg b/src/URLShortener.Tests/output/icon_star_dark.svg new file mode 100644 index 0000000..49c0d03 --- /dev/null +++ b/src/URLShortener.Tests/output/icon_star_dark.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/src/URLShortener.Tests/output/icon_up-dir.svg b/src/URLShortener.Tests/output/icon_up-dir.svg new file mode 100644 index 0000000..567c11f --- /dev/null +++ b/src/URLShortener.Tests/output/icon_up-dir.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/src/URLShortener.Tests/output/icon_up-dir_active.svg b/src/URLShortener.Tests/output/icon_up-dir_active.svg new file mode 100644 index 0000000..bb22554 --- /dev/null +++ b/src/URLShortener.Tests/output/icon_up-dir_active.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/src/URLShortener.Tests/output/icon_wrench.svg b/src/URLShortener.Tests/output/icon_wrench.svg new file mode 100644 index 0000000..b6aa318 --- /dev/null +++ b/src/URLShortener.Tests/output/icon_wrench.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/src/URLShortener.Tests/output/icon_wrench_dark.svg b/src/URLShortener.Tests/output/icon_wrench_dark.svg new file mode 100644 index 0000000..5c77a9c --- /dev/null +++ b/src/URLShortener.Tests/output/icon_wrench_dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/URLShortener.Tests/output/index.htm b/src/URLShortener.Tests/output/index.htm new file mode 100644 index 0000000..62195f4 --- /dev/null +++ b/src/URLShortener.Tests/output/index.htm @@ -0,0 +1,251 @@ + + + + + + + +Summary - Coverage Report + +
+

SummaryStarSponsor

+
+
+
Information
+
+
+ + + + + + + + + + + + + + + + + + + + + +
Parser:Cobertura
Assemblies:6
Classes:19
Files:20
Coverage date:3/5/2024 - 1:26:17 PM
+
+
+
+
+
Line coverage
+
+
17%
+
+ + + + + + + + + + + + + + + + + + + + + +
Covered lines:66
Uncovered lines:316
Coverable lines:382
Total lines:751
Line coverage:17.2%
+
+
+
+
+
Branch coverage
+
+
23%
+
+ + + + + + + + + + + + + +
Covered branches:12
Total branches:52
Branch coverage:23%
+
+
+
+
+
Method coverage
+
+
+

Feature is only available for sponsors

+Upgrade to PRO version +
+
+
+
+

Risk Hotspots

+ +
+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AssemblyClassMethodCrap Score Cyclomatic complexity
URLShortener.WebAPIExceptionFilterOnExceptionAsync()15612
URLShortener.WebAPIURLShortener.WebAPI.Controllers.UrlControllerAdd()426
URLShortener.InfraURLShortener.Infra.Repositories.Repository<T>UpdateAsync()204
URLShortener.InfraURLShortener.Infra.Repositories.UrlRepositoryGetByUrlAsync()204
URLShortener.WebAPIURLShortener.WebAPI.Controllers.UrlControllerGetAll()204
+
+
+

Coverage

+ +
+ +++++++++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Line coverageBranch coverage
NameCoveredUncoveredCoverableTotalPercentageCoveredTotalPercentage
URLShortener.Application455507790%
  
121675%
  
URLShortener.Application.Interfaces.UrlService455507790%
  
121675%
  
URLShortener.CustomExceptions619257224%
  
00
 
URLShortener.Application.Interfaces.ExpiredUrlException30312100%
 
00
 
URLShortener.Application.Interfaces.FailedToParseMinutesToUintException30311100%
 
00
 
URLShortener.Application.Interfaces.MinMinutesIsGreaterOrEqualThanMaxMinutesException033100%
 
00
 
URLShortener.Infra.Repositories.EntityAlreadyExistsException055150%
 
00
 
URLShortener.Infra.Repositories.EntityNotFoundException01111240%
 
00
 
URLShortener.Domain1510254860%
  
00
 
URLShortener.Domain.BaseEntity044130%
 
00
 
URLShortener.Domain.Url156213571.4%
  
00
 
URLShortener.Infra01481482730%
 
0100%
 
URLShortener.Infra.Context.AppDbContext099220%
 
00
 
URLShortener.Infra.Migrations.AppDbContextModelSnapshot02828480%
 
00
 
URLShortener.Infra.Migrations.CreateDatabaseInitial04949890%
 
00
 
URLShortener.Infra.Repositories.Repository<T>04545780%
 
040%
 
URLShortener.Infra.Repositories.UrlRepository01717360%
 
060%
 
URLShortener.ViewModels01414330%
 
00
 
URLShortener.ViewModels.UrlDTO099170%
 
00
 
URLShortener.ViewModels.UrlRequest055160%
 
00
 
URLShortener.WebAPI01201202480%
 
0260%
 
ExceptionFilter03535680%
 
0120%
 
URLShortener.WebAPI.Controllers.UrlController02828690%
 
0120%
 
URLShortener.WebAPI.Middlewares.LoggingMiddleware01313290%
 
00
 
URLShortener.WebAPI.Program04444820%
 
020%
 
+
+
+
+ + \ No newline at end of file diff --git a/src/URLShortener.Tests/output/index.html b/src/URLShortener.Tests/output/index.html new file mode 100644 index 0000000..62195f4 --- /dev/null +++ b/src/URLShortener.Tests/output/index.html @@ -0,0 +1,251 @@ + + + + + + + +Summary - Coverage Report + +
+

SummaryStarSponsor

+
+
+
Information
+
+
+ + + + + + + + + + + + + + + + + + + + + +
Parser:Cobertura
Assemblies:6
Classes:19
Files:20
Coverage date:3/5/2024 - 1:26:17 PM
+
+
+
+
+
Line coverage
+
+
17%
+
+ + + + + + + + + + + + + + + + + + + + + +
Covered lines:66
Uncovered lines:316
Coverable lines:382
Total lines:751
Line coverage:17.2%
+
+
+
+
+
Branch coverage
+
+
23%
+
+ + + + + + + + + + + + + +
Covered branches:12
Total branches:52
Branch coverage:23%
+
+
+
+
+
Method coverage
+
+
+

Feature is only available for sponsors

+Upgrade to PRO version +
+
+
+
+

Risk Hotspots

+ +
+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AssemblyClassMethodCrap Score Cyclomatic complexity
URLShortener.WebAPIExceptionFilterOnExceptionAsync()15612
URLShortener.WebAPIURLShortener.WebAPI.Controllers.UrlControllerAdd()426
URLShortener.InfraURLShortener.Infra.Repositories.Repository<T>UpdateAsync()204
URLShortener.InfraURLShortener.Infra.Repositories.UrlRepositoryGetByUrlAsync()204
URLShortener.WebAPIURLShortener.WebAPI.Controllers.UrlControllerGetAll()204
+
+
+

Coverage

+ +
+ +++++++++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Line coverageBranch coverage
NameCoveredUncoveredCoverableTotalPercentageCoveredTotalPercentage
URLShortener.Application455507790%
  
121675%
  
URLShortener.Application.Interfaces.UrlService455507790%
  
121675%
  
URLShortener.CustomExceptions619257224%
  
00
 
URLShortener.Application.Interfaces.ExpiredUrlException30312100%
 
00
 
URLShortener.Application.Interfaces.FailedToParseMinutesToUintException30311100%
 
00
 
URLShortener.Application.Interfaces.MinMinutesIsGreaterOrEqualThanMaxMinutesException033100%
 
00
 
URLShortener.Infra.Repositories.EntityAlreadyExistsException055150%
 
00
 
URLShortener.Infra.Repositories.EntityNotFoundException01111240%
 
00
 
URLShortener.Domain1510254860%
  
00
 
URLShortener.Domain.BaseEntity044130%
 
00
 
URLShortener.Domain.Url156213571.4%
  
00
 
URLShortener.Infra01481482730%
 
0100%
 
URLShortener.Infra.Context.AppDbContext099220%
 
00
 
URLShortener.Infra.Migrations.AppDbContextModelSnapshot02828480%
 
00
 
URLShortener.Infra.Migrations.CreateDatabaseInitial04949890%
 
00
 
URLShortener.Infra.Repositories.Repository<T>04545780%
 
040%
 
URLShortener.Infra.Repositories.UrlRepository01717360%
 
060%
 
URLShortener.ViewModels01414330%
 
00
 
URLShortener.ViewModels.UrlDTO099170%
 
00
 
URLShortener.ViewModels.UrlRequest055160%
 
00
 
URLShortener.WebAPI01201202480%
 
0260%
 
ExceptionFilter03535680%
 
0120%
 
URLShortener.WebAPI.Controllers.UrlController02828690%
 
0120%
 
URLShortener.WebAPI.Middlewares.LoggingMiddleware01313290%
 
00
 
URLShortener.WebAPI.Program04444820%
 
020%
 
+
+
+
+ + \ No newline at end of file diff --git a/src/URLShortener.Tests/output/main.js b/src/URLShortener.Tests/output/main.js new file mode 100644 index 0000000..954d397 --- /dev/null +++ b/src/URLShortener.Tests/output/main.js @@ -0,0 +1,358 @@ +/* Chartist.js 0.11.4 + * Copyright © 2019 Gion Kunz + * Free to use under either the WTFPL license or the MIT license. + * https://raw.githubusercontent.com/gionkunz/chartist-js/master/LICENSE-WTFPL + * https://raw.githubusercontent.com/gionkunz/chartist-js/master/LICENSE-MIT + */ + +!function (a, b) { "function" == typeof define && define.amd ? define("Chartist", [], function () { return a.Chartist = b() }) : "object" == typeof module && module.exports ? module.exports = b() : a.Chartist = b() }(this, function () { + var a = { version: "0.11.4" }; return function (a, b) { "use strict"; var c = a.window, d = a.document; b.namespaces = { svg: "http://www.w3.org/2000/svg", xmlns: "http://www.w3.org/2000/xmlns/", xhtml: "http://www.w3.org/1999/xhtml", xlink: "http://www.w3.org/1999/xlink", ct: "http://gionkunz.github.com/chartist-js/ct" }, b.noop = function (a) { return a }, b.alphaNumerate = function (a) { return String.fromCharCode(97 + a % 26) }, b.extend = function (a) { var c, d, e; for (a = a || {}, c = 1; c < arguments.length; c++) { d = arguments[c]; for (var f in d) e = d[f], "object" != typeof e || null === e || e instanceof Array ? a[f] = e : a[f] = b.extend(a[f], e) } return a }, b.replaceAll = function (a, b, c) { return a.replace(new RegExp(b, "g"), c) }, b.ensureUnit = function (a, b) { return "number" == typeof a && (a += b), a }, b.quantity = function (a) { if ("string" == typeof a) { var b = /^(\d+)\s*(.*)$/g.exec(a); return { value: +b[1], unit: b[2] || void 0 } } return { value: a } }, b.querySelector = function (a) { return a instanceof Node ? a : d.querySelector(a) }, b.times = function (a) { return Array.apply(null, new Array(a)) }, b.sum = function (a, b) { return a + (b ? b : 0) }, b.mapMultiply = function (a) { return function (b) { return b * a } }, b.mapAdd = function (a) { return function (b) { return b + a } }, b.serialMap = function (a, c) { var d = [], e = Math.max.apply(null, a.map(function (a) { return a.length })); return b.times(e).forEach(function (b, e) { var f = a.map(function (a) { return a[e] }); d[e] = c.apply(null, f) }), d }, b.roundWithPrecision = function (a, c) { var d = Math.pow(10, c || b.precision); return Math.round(a * d) / d }, b.precision = 8, b.escapingMap = { "&": "&", "<": "<", ">": ">", '"': """, "'": "'" }, b.serialize = function (a) { return null === a || void 0 === a ? a : ("number" == typeof a ? a = "" + a : "object" == typeof a && (a = JSON.stringify({ data: a })), Object.keys(b.escapingMap).reduce(function (a, c) { return b.replaceAll(a, c, b.escapingMap[c]) }, a)) }, b.deserialize = function (a) { if ("string" != typeof a) return a; a = Object.keys(b.escapingMap).reduce(function (a, c) { return b.replaceAll(a, b.escapingMap[c], c) }, a); try { a = JSON.parse(a), a = void 0 !== a.data ? a.data : a } catch (c) { } return a }, b.createSvg = function (a, c, d, e) { var f; return c = c || "100%", d = d || "100%", Array.prototype.slice.call(a.querySelectorAll("svg")).filter(function (a) { return a.getAttributeNS(b.namespaces.xmlns, "ct") }).forEach(function (b) { a.removeChild(b) }), f = new b.Svg("svg").attr({ width: c, height: d }).addClass(e), f._node.style.width = c, f._node.style.height = d, a.appendChild(f._node), f }, b.normalizeData = function (a, c, d) { var e, f = { raw: a, normalized: {} }; return f.normalized.series = b.getDataArray({ series: a.series || [] }, c, d), e = f.normalized.series.every(function (a) { return a instanceof Array }) ? Math.max.apply(null, f.normalized.series.map(function (a) { return a.length })) : f.normalized.series.length, f.normalized.labels = (a.labels || []).slice(), Array.prototype.push.apply(f.normalized.labels, b.times(Math.max(0, e - f.normalized.labels.length)).map(function () { return "" })), c && b.reverseData(f.normalized), f }, b.safeHasProperty = function (a, b) { return null !== a && "object" == typeof a && a.hasOwnProperty(b) }, b.isDataHoleValue = function (a) { return null === a || void 0 === a || "number" == typeof a && isNaN(a) }, b.reverseData = function (a) { a.labels.reverse(), a.series.reverse(); for (var b = 0; b < a.series.length; b++)"object" == typeof a.series[b] && void 0 !== a.series[b].data ? a.series[b].data.reverse() : a.series[b] instanceof Array && a.series[b].reverse() }, b.getDataArray = function (a, c, d) { function e(a) { if (b.safeHasProperty(a, "value")) return e(a.value); if (b.safeHasProperty(a, "data")) return e(a.data); if (a instanceof Array) return a.map(e); if (!b.isDataHoleValue(a)) { if (d) { var c = {}; return "string" == typeof d ? c[d] = b.getNumberOrUndefined(a) : c.y = b.getNumberOrUndefined(a), c.x = a.hasOwnProperty("x") ? b.getNumberOrUndefined(a.x) : c.x, c.y = a.hasOwnProperty("y") ? b.getNumberOrUndefined(a.y) : c.y, c } return b.getNumberOrUndefined(a) } } return a.series.map(e) }, b.normalizePadding = function (a, b) { return b = b || 0, "number" == typeof a ? { top: a, right: a, bottom: a, left: a } : { top: "number" == typeof a.top ? a.top : b, right: "number" == typeof a.right ? a.right : b, bottom: "number" == typeof a.bottom ? a.bottom : b, left: "number" == typeof a.left ? a.left : b } }, b.getMetaData = function (a, b) { var c = a.data ? a.data[b] : a[b]; return c ? c.meta : void 0 }, b.orderOfMagnitude = function (a) { return Math.floor(Math.log(Math.abs(a)) / Math.LN10) }, b.projectLength = function (a, b, c) { return b / c.range * a }, b.getAvailableHeight = function (a, c) { return Math.max((b.quantity(c.height).value || a.height()) - (c.chartPadding.top + c.chartPadding.bottom) - c.axisX.offset, 0) }, b.getHighLow = function (a, c, d) { function e(a) { if (void 0 !== a) if (a instanceof Array) for (var b = 0; b < a.length; b++)e(a[b]); else { var c = d ? +a[d] : +a; g && c > f.high && (f.high = c), h && c < f.low && (f.low = c) } } c = b.extend({}, c, d ? c["axis" + d.toUpperCase()] : {}); var f = { high: void 0 === c.high ? -Number.MAX_VALUE : +c.high, low: void 0 === c.low ? Number.MAX_VALUE : +c.low }, g = void 0 === c.high, h = void 0 === c.low; return (g || h) && e(a), (c.referenceValue || 0 === c.referenceValue) && (f.high = Math.max(c.referenceValue, f.high), f.low = Math.min(c.referenceValue, f.low)), f.high <= f.low && (0 === f.low ? f.high = 1 : f.low < 0 ? f.high = 0 : f.high > 0 ? f.low = 0 : (f.high = 1, f.low = 0)), f }, b.isNumeric = function (a) { return null !== a && isFinite(a) }, b.isFalseyButZero = function (a) { return !a && 0 !== a }, b.getNumberOrUndefined = function (a) { return b.isNumeric(a) ? +a : void 0 }, b.isMultiValue = function (a) { return "object" == typeof a && ("x" in a || "y" in a) }, b.getMultiValue = function (a, c) { return b.isMultiValue(a) ? b.getNumberOrUndefined(a[c || "y"]) : b.getNumberOrUndefined(a) }, b.rho = function (a) { function b(a, c) { return a % c === 0 ? c : b(c, a % c) } function c(a) { return a * a + 1 } if (1 === a) return a; var d, e = 2, f = 2; if (a % 2 === 0) return 2; do e = c(e) % a, f = c(c(f)) % a, d = b(Math.abs(e - f), a); while (1 === d); return d }, b.getBounds = function (a, c, d, e) { function f(a, b) { return a === (a += b) && (a *= 1 + (b > 0 ? o : -o)), a } var g, h, i, j = 0, k = { high: c.high, low: c.low }; k.valueRange = k.high - k.low, k.oom = b.orderOfMagnitude(k.valueRange), k.step = Math.pow(10, k.oom), k.min = Math.floor(k.low / k.step) * k.step, k.max = Math.ceil(k.high / k.step) * k.step, k.range = k.max - k.min, k.numberOfSteps = Math.round(k.range / k.step); var l = b.projectLength(a, k.step, k), m = l < d, n = e ? b.rho(k.range) : 0; if (e && b.projectLength(a, 1, k) >= d) k.step = 1; else if (e && n < k.step && b.projectLength(a, n, k) >= d) k.step = n; else for (; ;) { if (m && b.projectLength(a, k.step, k) <= d) k.step *= 2; else { if (m || !(b.projectLength(a, k.step / 2, k) >= d)) break; if (k.step /= 2, e && k.step % 1 !== 0) { k.step *= 2; break } } if (j++ > 1e3) throw new Error("Exceeded maximum number of iterations while optimizing scale step!") } var o = 2.221e-16; for (k.step = Math.max(k.step, o), h = k.min, i = k.max; h + k.step <= k.low;)h = f(h, k.step); for (; i - k.step >= k.high;)i = f(i, -k.step); k.min = h, k.max = i, k.range = k.max - k.min; var p = []; for (g = k.min; g <= k.max; g = f(g, k.step)) { var q = b.roundWithPrecision(g); q !== p[p.length - 1] && p.push(q) } return k.values = p, k }, b.polarToCartesian = function (a, b, c, d) { var e = (d - 90) * Math.PI / 180; return { x: a + c * Math.cos(e), y: b + c * Math.sin(e) } }, b.createChartRect = function (a, c, d) { var e = !(!c.axisX && !c.axisY), f = e ? c.axisY.offset : 0, g = e ? c.axisX.offset : 0, h = a.width() || b.quantity(c.width).value || 0, i = a.height() || b.quantity(c.height).value || 0, j = b.normalizePadding(c.chartPadding, d); h = Math.max(h, f + j.left + j.right), i = Math.max(i, g + j.top + j.bottom); var k = { padding: j, width: function () { return this.x2 - this.x1 }, height: function () { return this.y1 - this.y2 } }; return e ? ("start" === c.axisX.position ? (k.y2 = j.top + g, k.y1 = Math.max(i - j.bottom, k.y2 + 1)) : (k.y2 = j.top, k.y1 = Math.max(i - j.bottom - g, k.y2 + 1)), "start" === c.axisY.position ? (k.x1 = j.left + f, k.x2 = Math.max(h - j.right, k.x1 + 1)) : (k.x1 = j.left, k.x2 = Math.max(h - j.right - f, k.x1 + 1))) : (k.x1 = j.left, k.x2 = Math.max(h - j.right, k.x1 + 1), k.y2 = j.top, k.y1 = Math.max(i - j.bottom, k.y2 + 1)), k }, b.createGrid = function (a, c, d, e, f, g, h, i) { var j = {}; j[d.units.pos + "1"] = a, j[d.units.pos + "2"] = a, j[d.counterUnits.pos + "1"] = e, j[d.counterUnits.pos + "2"] = e + f; var k = g.elem("line", j, h.join(" ")); i.emit("draw", b.extend({ type: "grid", axis: d, index: c, group: g, element: k }, j)) }, b.createGridBackground = function (a, b, c, d) { var e = a.elem("rect", { x: b.x1, y: b.y2, width: b.width(), height: b.height() }, c, !0); d.emit("draw", { type: "gridBackground", group: a, element: e }) }, b.createLabel = function (a, c, e, f, g, h, i, j, k, l, m) { var n, o = {}; if (o[g.units.pos] = a + i[g.units.pos], o[g.counterUnits.pos] = i[g.counterUnits.pos], o[g.units.len] = c, o[g.counterUnits.len] = Math.max(0, h - 10), l) { var p = d.createElement("span"); p.className = k.join(" "), p.setAttribute("xmlns", b.namespaces.xhtml), p.innerText = f[e], p.style[g.units.len] = Math.round(o[g.units.len]) + "px", p.style[g.counterUnits.len] = Math.round(o[g.counterUnits.len]) + "px", n = j.foreignObject(p, b.extend({ style: "overflow: visible;" }, o)) } else n = j.elem("text", o, k.join(" ")).text(f[e]); m.emit("draw", b.extend({ type: "label", axis: g, index: e, group: j, element: n, text: f[e] }, o)) }, b.getSeriesOption = function (a, b, c) { if (a.name && b.series && b.series[a.name]) { var d = b.series[a.name]; return d.hasOwnProperty(c) ? d[c] : b[c] } return b[c] }, b.optionsProvider = function (a, d, e) { function f(a) { var f = h; if (h = b.extend({}, j), d) for (i = 0; i < d.length; i++) { var g = c.matchMedia(d[i][0]); g.matches && (h = b.extend(h, d[i][1])) } e && a && e.emit("optionsChanged", { previousOptions: f, currentOptions: h }) } function g() { k.forEach(function (a) { a.removeListener(f) }) } var h, i, j = b.extend({}, a), k = []; if (!c.matchMedia) throw "window.matchMedia not found! Make sure you're using a polyfill."; if (d) for (i = 0; i < d.length; i++) { var l = c.matchMedia(d[i][0]); l.addListener(f), k.push(l) } return f(), { removeMediaQueryListeners: g, getCurrentOptions: function () { return b.extend({}, h) } } }, b.splitIntoSegments = function (a, c, d) { var e = { increasingX: !1, fillHoles: !1 }; d = b.extend({}, e, d); for (var f = [], g = !0, h = 0; h < a.length; h += 2)void 0 === b.getMultiValue(c[h / 2].value) ? d.fillHoles || (g = !0) : (d.increasingX && h >= 2 && a[h] <= a[h - 2] && (g = !0), g && (f.push({ pathCoordinates: [], valueData: [] }), g = !1), f[f.length - 1].pathCoordinates.push(a[h], a[h + 1]), f[f.length - 1].valueData.push(c[h / 2])); return f } }(this || global, a), function (a, b) { "use strict"; b.Interpolation = {}, b.Interpolation.none = function (a) { var c = { fillHoles: !1 }; return a = b.extend({}, c, a), function (c, d) { for (var e = new b.Svg.Path, f = !0, g = 0; g < c.length; g += 2) { var h = c[g], i = c[g + 1], j = d[g / 2]; void 0 !== b.getMultiValue(j.value) ? (f ? e.move(h, i, !1, j) : e.line(h, i, !1, j), f = !1) : a.fillHoles || (f = !0) } return e } }, b.Interpolation.simple = function (a) { var c = { divisor: 2, fillHoles: !1 }; a = b.extend({}, c, a); var d = 1 / Math.max(1, a.divisor); return function (c, e) { for (var f, g, h, i = new b.Svg.Path, j = 0; j < c.length; j += 2) { var k = c[j], l = c[j + 1], m = (k - f) * d, n = e[j / 2]; void 0 !== n.value ? (void 0 === h ? i.move(k, l, !1, n) : i.curve(f + m, g, k - m, l, k, l, !1, n), f = k, g = l, h = n) : a.fillHoles || (f = k = h = void 0) } return i } }, b.Interpolation.cardinal = function (a) { var c = { tension: 1, fillHoles: !1 }; a = b.extend({}, c, a); var d = Math.min(1, Math.max(0, a.tension)), e = 1 - d; return function f(c, g) { var h = b.splitIntoSegments(c, g, { fillHoles: a.fillHoles }); if (h.length) { if (h.length > 1) { var i = []; return h.forEach(function (a) { i.push(f(a.pathCoordinates, a.valueData)) }), b.Svg.Path.join(i) } if (c = h[0].pathCoordinates, g = h[0].valueData, c.length <= 4) return b.Interpolation.none()(c, g); for (var j, k = (new b.Svg.Path).move(c[0], c[1], !1, g[0]), l = 0, m = c.length; m - 2 * !j > l; l += 2) { var n = [{ x: +c[l - 2], y: +c[l - 1] }, { x: +c[l], y: +c[l + 1] }, { x: +c[l + 2], y: +c[l + 3] }, { x: +c[l + 4], y: +c[l + 5] }]; j ? l ? m - 4 === l ? n[3] = { x: +c[0], y: +c[1] } : m - 2 === l && (n[2] = { x: +c[0], y: +c[1] }, n[3] = { x: +c[2], y: +c[3] }) : n[0] = { x: +c[m - 2], y: +c[m - 1] } : m - 4 === l ? n[3] = n[2] : l || (n[0] = { x: +c[l], y: +c[l + 1] }), k.curve(d * (-n[0].x + 6 * n[1].x + n[2].x) / 6 + e * n[2].x, d * (-n[0].y + 6 * n[1].y + n[2].y) / 6 + e * n[2].y, d * (n[1].x + 6 * n[2].x - n[3].x) / 6 + e * n[2].x, d * (n[1].y + 6 * n[2].y - n[3].y) / 6 + e * n[2].y, n[2].x, n[2].y, !1, g[(l + 2) / 2]) } return k } return b.Interpolation.none()([]) } }, b.Interpolation.monotoneCubic = function (a) { var c = { fillHoles: !1 }; return a = b.extend({}, c, a), function d(c, e) { var f = b.splitIntoSegments(c, e, { fillHoles: a.fillHoles, increasingX: !0 }); if (f.length) { if (f.length > 1) { var g = []; return f.forEach(function (a) { g.push(d(a.pathCoordinates, a.valueData)) }), b.Svg.Path.join(g) } if (c = f[0].pathCoordinates, e = f[0].valueData, c.length <= 4) return b.Interpolation.none()(c, e); var h, i, j = [], k = [], l = c.length / 2, m = [], n = [], o = [], p = []; for (h = 0; h < l; h++)j[h] = c[2 * h], k[h] = c[2 * h + 1]; for (h = 0; h < l - 1; h++)o[h] = k[h + 1] - k[h], p[h] = j[h + 1] - j[h], n[h] = o[h] / p[h]; for (m[0] = n[0], m[l - 1] = n[l - 2], h = 1; h < l - 1; h++)0 === n[h] || 0 === n[h - 1] || n[h - 1] > 0 != n[h] > 0 ? m[h] = 0 : (m[h] = 3 * (p[h - 1] + p[h]) / ((2 * p[h] + p[h - 1]) / n[h - 1] + (p[h] + 2 * p[h - 1]) / n[h]), isFinite(m[h]) || (m[h] = 0)); for (i = (new b.Svg.Path).move(j[0], k[0], !1, e[0]), h = 0; h < l - 1; h++)i.curve(j[h] + p[h] / 3, k[h] + m[h] * p[h] / 3, j[h + 1] - p[h] / 3, k[h + 1] - m[h + 1] * p[h] / 3, j[h + 1], k[h + 1], !1, e[h + 1]); return i } return b.Interpolation.none()([]) } }, b.Interpolation.step = function (a) { var c = { postpone: !0, fillHoles: !1 }; return a = b.extend({}, c, a), function (c, d) { for (var e, f, g, h = new b.Svg.Path, i = 0; i < c.length; i += 2) { var j = c[i], k = c[i + 1], l = d[i / 2]; void 0 !== l.value ? (void 0 === g ? h.move(j, k, !1, l) : (a.postpone ? h.line(j, f, !1, g) : h.line(e, k, !1, l), h.line(j, k, !1, l)), e = j, f = k, g = l) : a.fillHoles || (e = f = g = void 0) } return h } } }(this || global, a), function (a, b) { "use strict"; b.EventEmitter = function () { function a(a, b) { d[a] = d[a] || [], d[a].push(b) } function b(a, b) { d[a] && (b ? (d[a].splice(d[a].indexOf(b), 1), 0 === d[a].length && delete d[a]) : delete d[a]) } function c(a, b) { d[a] && d[a].forEach(function (a) { a(b) }), d["*"] && d["*"].forEach(function (c) { c(a, b) }) } var d = []; return { addEventHandler: a, removeEventHandler: b, emit: c } } }(this || global, a), function (a, b) { "use strict"; function c(a) { var b = []; if (a.length) for (var c = 0; c < a.length; c++)b.push(a[c]); return b } function d(a, c) { var d = c || this.prototype || b.Class, e = Object.create(d); b.Class.cloneDefinitions(e, a); var f = function () { var a, c = e.constructor || function () { }; return a = this === b ? Object.create(e) : this, c.apply(a, Array.prototype.slice.call(arguments, 0)), a }; return f.prototype = e, f["super"] = d, f.extend = this.extend, f } function e() { var a = c(arguments), b = a[0]; return a.splice(1, a.length - 1).forEach(function (a) { Object.getOwnPropertyNames(a).forEach(function (c) { delete b[c], Object.defineProperty(b, c, Object.getOwnPropertyDescriptor(a, c)) }) }), b } b.Class = { extend: d, cloneDefinitions: e } }(this || global, a), function (a, b) { "use strict"; function c(a, c, d) { return a && (this.data = a || {}, this.data.labels = this.data.labels || [], this.data.series = this.data.series || [], this.eventEmitter.emit("data", { type: "update", data: this.data })), c && (this.options = b.extend({}, d ? this.options : this.defaultOptions, c), this.initializeTimeoutId || (this.optionsProvider.removeMediaQueryListeners(), this.optionsProvider = b.optionsProvider(this.options, this.responsiveOptions, this.eventEmitter))), this.initializeTimeoutId || this.createChart(this.optionsProvider.getCurrentOptions()), this } function d() { return this.initializeTimeoutId ? i.clearTimeout(this.initializeTimeoutId) : (i.removeEventListener("resize", this.resizeListener), this.optionsProvider.removeMediaQueryListeners()), this } function e(a, b) { return this.eventEmitter.addEventHandler(a, b), this } function f(a, b) { return this.eventEmitter.removeEventHandler(a, b), this } function g() { i.addEventListener("resize", this.resizeListener), this.optionsProvider = b.optionsProvider(this.options, this.responsiveOptions, this.eventEmitter), this.eventEmitter.addEventHandler("optionsChanged", function () { this.update() }.bind(this)), this.options.plugins && this.options.plugins.forEach(function (a) { a instanceof Array ? a[0](this, a[1]) : a(this) }.bind(this)), this.eventEmitter.emit("data", { type: "initial", data: this.data }), this.createChart(this.optionsProvider.getCurrentOptions()), this.initializeTimeoutId = void 0 } function h(a, c, d, e, f) { this.container = b.querySelector(a), this.data = c || {}, this.data.labels = this.data.labels || [], this.data.series = this.data.series || [], this.defaultOptions = d, this.options = e, this.responsiveOptions = f, this.eventEmitter = b.EventEmitter(), this.supportsForeignObject = b.Svg.isSupported("Extensibility"), this.supportsAnimations = b.Svg.isSupported("AnimationEventsAttribute"), this.resizeListener = function () { this.update() }.bind(this), this.container && (this.container.__chartist__ && this.container.__chartist__.detach(), this.container.__chartist__ = this), this.initializeTimeoutId = setTimeout(g.bind(this), 0) } var i = a.window; b.Base = b.Class.extend({ constructor: h, optionsProvider: void 0, container: void 0, svg: void 0, eventEmitter: void 0, createChart: function () { throw new Error("Base chart type can't be instantiated!") }, update: c, detach: d, on: e, off: f, version: b.version, supportsForeignObject: !1 }) }(this || global, a), function (a, b) { "use strict"; function c(a, c, d, e, f) { a instanceof Element ? this._node = a : (this._node = y.createElementNS(b.namespaces.svg, a), "svg" === a && this.attr({ "xmlns:ct": b.namespaces.ct })), c && this.attr(c), d && this.addClass(d), e && (f && e._node.firstChild ? e._node.insertBefore(this._node, e._node.firstChild) : e._node.appendChild(this._node)) } function d(a, c) { return "string" == typeof a ? c ? this._node.getAttributeNS(c, a) : this._node.getAttribute(a) : (Object.keys(a).forEach(function (c) { if (void 0 !== a[c]) if (c.indexOf(":") !== -1) { var d = c.split(":"); this._node.setAttributeNS(b.namespaces[d[0]], c, a[c]) } else this._node.setAttribute(c, a[c]) }.bind(this)), this) } function e(a, c, d, e) { return new b.Svg(a, c, d, this, e) } function f() { return this._node.parentNode instanceof SVGElement ? new b.Svg(this._node.parentNode) : null } function g() { for (var a = this._node; "svg" !== a.nodeName;)a = a.parentNode; return new b.Svg(a) } function h(a) { var c = this._node.querySelector(a); return c ? new b.Svg(c) : null } function i(a) { var c = this._node.querySelectorAll(a); return c.length ? new b.Svg.List(c) : null } function j() { return this._node } function k(a, c, d, e) { if ("string" == typeof a) { var f = y.createElement("div"); f.innerHTML = a, a = f.firstChild } a.setAttribute("xmlns", b.namespaces.xmlns); var g = this.elem("foreignObject", c, d, e); return g._node.appendChild(a), g } function l(a) { return this._node.appendChild(y.createTextNode(a)), this } function m() { for (; this._node.firstChild;)this._node.removeChild(this._node.firstChild); return this } function n() { return this._node.parentNode.removeChild(this._node), this.parent() } function o(a) { return this._node.parentNode.replaceChild(a._node, this._node), a } function p(a, b) { return b && this._node.firstChild ? this._node.insertBefore(a._node, this._node.firstChild) : this._node.appendChild(a._node), this } function q() { return this._node.getAttribute("class") ? this._node.getAttribute("class").trim().split(/\s+/) : [] } function r(a) { return this._node.setAttribute("class", this.classes(this._node).concat(a.trim().split(/\s+/)).filter(function (a, b, c) { return c.indexOf(a) === b }).join(" ")), this } function s(a) { var b = a.trim().split(/\s+/); return this._node.setAttribute("class", this.classes(this._node).filter(function (a) { return b.indexOf(a) === -1 }).join(" ")), this } function t() { return this._node.setAttribute("class", ""), this } function u() { return this._node.getBoundingClientRect().height } function v() { return this._node.getBoundingClientRect().width } function w(a, c, d) { return void 0 === c && (c = !0), Object.keys(a).forEach(function (e) { function f(a, c) { var f, g, h, i = {}; a.easing && (h = a.easing instanceof Array ? a.easing : b.Svg.Easing[a.easing], delete a.easing), a.begin = b.ensureUnit(a.begin, "ms"), a.dur = b.ensureUnit(a.dur, "ms"), h && (a.calcMode = "spline", a.keySplines = h.join(" "), a.keyTimes = "0;1"), c && (a.fill = "freeze", i[e] = a.from, this.attr(i), g = b.quantity(a.begin || 0).value, a.begin = "indefinite"), f = this.elem("animate", b.extend({ attributeName: e }, a)), c && setTimeout(function () { try { f._node.beginElement() } catch (b) { i[e] = a.to, this.attr(i), f.remove() } }.bind(this), g), d && f._node.addEventListener("beginEvent", function () { d.emit("animationBegin", { element: this, animate: f._node, params: a }) }.bind(this)), f._node.addEventListener("endEvent", function () { d && d.emit("animationEnd", { element: this, animate: f._node, params: a }), c && (i[e] = a.to, this.attr(i), f.remove()) }.bind(this)) } a[e] instanceof Array ? a[e].forEach(function (a) { f.bind(this)(a, !1) }.bind(this)) : f.bind(this)(a[e], c) }.bind(this)), this } function x(a) { var c = this; this.svgElements = []; for (var d = 0; d < a.length; d++)this.svgElements.push(new b.Svg(a[d])); Object.keys(b.Svg.prototype).filter(function (a) { return ["constructor", "parent", "querySelector", "querySelectorAll", "replace", "append", "classes", "height", "width"].indexOf(a) === -1 }).forEach(function (a) { c[a] = function () { var d = Array.prototype.slice.call(arguments, 0); return c.svgElements.forEach(function (c) { b.Svg.prototype[a].apply(c, d) }), c } }) } var y = a.document; b.Svg = b.Class.extend({ constructor: c, attr: d, elem: e, parent: f, root: g, querySelector: h, querySelectorAll: i, getNode: j, foreignObject: k, text: l, empty: m, remove: n, replace: o, append: p, classes: q, addClass: r, removeClass: s, removeAllClasses: t, height: u, width: v, animate: w }), b.Svg.isSupported = function (a) { return y.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#" + a, "1.1") }; var z = { easeInSine: [.47, 0, .745, .715], easeOutSine: [.39, .575, .565, 1], easeInOutSine: [.445, .05, .55, .95], easeInQuad: [.55, .085, .68, .53], easeOutQuad: [.25, .46, .45, .94], easeInOutQuad: [.455, .03, .515, .955], easeInCubic: [.55, .055, .675, .19], easeOutCubic: [.215, .61, .355, 1], easeInOutCubic: [.645, .045, .355, 1], easeInQuart: [.895, .03, .685, .22], easeOutQuart: [.165, .84, .44, 1], easeInOutQuart: [.77, 0, .175, 1], easeInQuint: [.755, .05, .855, .06], easeOutQuint: [.23, 1, .32, 1], easeInOutQuint: [.86, 0, .07, 1], easeInExpo: [.95, .05, .795, .035], easeOutExpo: [.19, 1, .22, 1], easeInOutExpo: [1, 0, 0, 1], easeInCirc: [.6, .04, .98, .335], easeOutCirc: [.075, .82, .165, 1], easeInOutCirc: [.785, .135, .15, .86], easeInBack: [.6, -.28, .735, .045], easeOutBack: [.175, .885, .32, 1.275], easeInOutBack: [.68, -.55, .265, 1.55] }; b.Svg.Easing = z, b.Svg.List = b.Class.extend({ constructor: x }) }(this || global, a), function (a, b) { "use strict"; function c(a, c, d, e, f, g) { var h = b.extend({ command: f ? a.toLowerCase() : a.toUpperCase() }, c, g ? { data: g } : {}); d.splice(e, 0, h) } function d(a, b) { a.forEach(function (c, d) { t[c.command.toLowerCase()].forEach(function (e, f) { b(c, e, d, f, a) }) }) } function e(a, c) { this.pathElements = [], this.pos = 0, this.close = a, this.options = b.extend({}, u, c) } function f(a) { return void 0 !== a ? (this.pos = Math.max(0, Math.min(this.pathElements.length, a)), this) : this.pos } function g(a) { return this.pathElements.splice(this.pos, a), this } function h(a, b, d, e) { return c("M", { x: +a, y: +b }, this.pathElements, this.pos++, d, e), this } function i(a, b, d, e) { return c("L", { x: +a, y: +b }, this.pathElements, this.pos++, d, e), this } function j(a, b, d, e, f, g, h, i) { return c("C", { x1: +a, y1: +b, x2: +d, y2: +e, x: +f, y: +g }, this.pathElements, this.pos++, h, i), this } function k(a, b, d, e, f, g, h, i, j) { return c("A", { rx: +a, ry: +b, xAr: +d, lAf: +e, sf: +f, x: +g, y: +h }, this.pathElements, this.pos++, i, j), this } function l(a) { var c = a.replace(/([A-Za-z])([0-9])/g, "$1 $2").replace(/([0-9])([A-Za-z])/g, "$1 $2").split(/[\s,]+/).reduce(function (a, b) { return b.match(/[A-Za-z]/) && a.push([]), a[a.length - 1].push(b), a }, []); "Z" === c[c.length - 1][0].toUpperCase() && c.pop(); var d = c.map(function (a) { var c = a.shift(), d = t[c.toLowerCase()]; return b.extend({ command: c }, d.reduce(function (b, c, d) { return b[c] = +a[d], b }, {})) }), e = [this.pos, 0]; return Array.prototype.push.apply(e, d), Array.prototype.splice.apply(this.pathElements, e), this.pos += d.length, this } function m() { var a = Math.pow(10, this.options.accuracy); return this.pathElements.reduce(function (b, c) { var d = t[c.command.toLowerCase()].map(function (b) { return this.options.accuracy ? Math.round(c[b] * a) / a : c[b] }.bind(this)); return b + c.command + d.join(",") }.bind(this), "") + (this.close ? "Z" : "") } function n(a, b) { return d(this.pathElements, function (c, d) { c[d] *= "x" === d[0] ? a : b }), this } function o(a, b) { return d(this.pathElements, function (c, d) { c[d] += "x" === d[0] ? a : b }), this } function p(a) { return d(this.pathElements, function (b, c, d, e, f) { var g = a(b, c, d, e, f); (g || 0 === g) && (b[c] = g) }), this } function q(a) { var c = new b.Svg.Path(a || this.close); return c.pos = this.pos, c.pathElements = this.pathElements.slice().map(function (a) { return b.extend({}, a) }), c.options = b.extend({}, this.options), c } function r(a) { var c = [new b.Svg.Path]; return this.pathElements.forEach(function (d) { d.command === a.toUpperCase() && 0 !== c[c.length - 1].pathElements.length && c.push(new b.Svg.Path), c[c.length - 1].pathElements.push(d) }), c } function s(a, c, d) { for (var e = new b.Svg.Path(c, d), f = 0; f < a.length; f++)for (var g = a[f], h = 0; h < g.pathElements.length; h++)e.pathElements.push(g.pathElements[h]); return e } var t = { m: ["x", "y"], l: ["x", "y"], c: ["x1", "y1", "x2", "y2", "x", "y"], a: ["rx", "ry", "xAr", "lAf", "sf", "x", "y"] }, u = { accuracy: 3 }; b.Svg.Path = b.Class.extend({ constructor: e, position: f, remove: g, move: h, line: i, curve: j, arc: k, scale: n, translate: o, transform: p, parse: l, stringify: m, clone: q, splitByCommand: r }), b.Svg.Path.elementDescriptions = t, b.Svg.Path.join = s }(this || global, a), function (a, b) { "use strict"; function c(a, b, c, d) { this.units = a, this.counterUnits = a === e.x ? e.y : e.x, this.chartRect = b, this.axisLength = b[a.rectEnd] - b[a.rectStart], this.gridOffset = b[a.rectOffset], this.ticks = c, this.options = d } function d(a, c, d, e, f) { var g = e["axis" + this.units.pos.toUpperCase()], h = this.ticks.map(this.projectValue.bind(this)), i = this.ticks.map(g.labelInterpolationFnc); h.forEach(function (j, k) { var l, m = { x: 0, y: 0 }; l = h[k + 1] ? h[k + 1] - j : Math.max(this.axisLength - j, 30), b.isFalseyButZero(i[k]) && "" !== i[k] || ("x" === this.units.pos ? (j = this.chartRect.x1 + j, m.x = e.axisX.labelOffset.x, "start" === e.axisX.position ? m.y = this.chartRect.padding.top + e.axisX.labelOffset.y + (d ? 5 : 20) : m.y = this.chartRect.y1 + e.axisX.labelOffset.y + (d ? 5 : 20)) : (j = this.chartRect.y1 - j, m.y = e.axisY.labelOffset.y - (d ? l : 0), "start" === e.axisY.position ? m.x = d ? this.chartRect.padding.left + e.axisY.labelOffset.x : this.chartRect.x1 - 10 : m.x = this.chartRect.x2 + e.axisY.labelOffset.x + 10), g.showGrid && b.createGrid(j, k, this, this.gridOffset, this.chartRect[this.counterUnits.len](), a, [e.classNames.grid, e.classNames[this.units.dir]], f), g.showLabel && b.createLabel(j, l, k, i, this, g.offset, m, c, [e.classNames.label, e.classNames[this.units.dir], "start" === g.position ? e.classNames[g.position] : e.classNames.end], d, f)) }.bind(this)) } var e = (a.window, a.document, { x: { pos: "x", len: "width", dir: "horizontal", rectStart: "x1", rectEnd: "x2", rectOffset: "y2" }, y: { pos: "y", len: "height", dir: "vertical", rectStart: "y2", rectEnd: "y1", rectOffset: "x1" } }); b.Axis = b.Class.extend({ constructor: c, createGridAndLabels: d, projectValue: function (a, b, c) { throw new Error("Base axis can't be instantiated!") } }), b.Axis.units = e }(this || global, a), function (a, b) { "use strict"; function c(a, c, d, e) { var f = e.highLow || b.getHighLow(c, e, a.pos); this.bounds = b.getBounds(d[a.rectEnd] - d[a.rectStart], f, e.scaleMinSpace || 20, e.onlyInteger), this.range = { min: this.bounds.min, max: this.bounds.max }, b.AutoScaleAxis["super"].constructor.call(this, a, d, this.bounds.values, e) } function d(a) { return this.axisLength * (+b.getMultiValue(a, this.units.pos) - this.bounds.min) / this.bounds.range } a.window, a.document; b.AutoScaleAxis = b.Axis.extend({ constructor: c, projectValue: d }) }(this || global, a), function (a, b) { "use strict"; function c(a, c, d, e) { var f = e.highLow || b.getHighLow(c, e, a.pos); this.divisor = e.divisor || 1, this.ticks = e.ticks || b.times(this.divisor).map(function (a, b) { return f.low + (f.high - f.low) / this.divisor * b }.bind(this)), this.ticks.sort(function (a, b) { return a - b }), this.range = { min: f.low, max: f.high }, b.FixedScaleAxis["super"].constructor.call(this, a, d, this.ticks, e), this.stepLength = this.axisLength / this.divisor } function d(a) { return this.axisLength * (+b.getMultiValue(a, this.units.pos) - this.range.min) / (this.range.max - this.range.min) } a.window, a.document; b.FixedScaleAxis = b.Axis.extend({ constructor: c, projectValue: d }) }(this || global, a), function (a, b) { "use strict"; function c(a, c, d, e) { b.StepAxis["super"].constructor.call(this, a, d, e.ticks, e); var f = Math.max(1, e.ticks.length - (e.stretch ? 1 : 0)); this.stepLength = this.axisLength / f } function d(a, b) { return this.stepLength * b } a.window, a.document; b.StepAxis = b.Axis.extend({ constructor: c, projectValue: d }) }(this || global, a), function (a, b) { "use strict"; function c(a) { var c = b.normalizeData(this.data, a.reverseData, !0); this.svg = b.createSvg(this.container, a.width, a.height, a.classNames.chart); var d, f, g = this.svg.elem("g").addClass(a.classNames.gridGroup), h = this.svg.elem("g"), i = this.svg.elem("g").addClass(a.classNames.labelGroup), j = b.createChartRect(this.svg, a, e.padding); d = void 0 === a.axisX.type ? new b.StepAxis(b.Axis.units.x, c.normalized.series, j, b.extend({}, a.axisX, { ticks: c.normalized.labels, stretch: a.fullWidth })) : a.axisX.type.call(b, b.Axis.units.x, c.normalized.series, j, a.axisX), f = void 0 === a.axisY.type ? new b.AutoScaleAxis(b.Axis.units.y, c.normalized.series, j, b.extend({}, a.axisY, { high: b.isNumeric(a.high) ? a.high : a.axisY.high, low: b.isNumeric(a.low) ? a.low : a.axisY.low })) : a.axisY.type.call(b, b.Axis.units.y, c.normalized.series, j, a.axisY), d.createGridAndLabels(g, i, this.supportsForeignObject, a, this.eventEmitter), f.createGridAndLabels(g, i, this.supportsForeignObject, a, this.eventEmitter), a.showGridBackground && b.createGridBackground(g, j, a.classNames.gridBackground, this.eventEmitter), c.raw.series.forEach(function (e, g) { var i = h.elem("g"); i.attr({ "ct:series-name": e.name, "ct:meta": b.serialize(e.meta) }), i.addClass([a.classNames.series, e.className || a.classNames.series + "-" + b.alphaNumerate(g)].join(" ")); var k = [], l = []; c.normalized.series[g].forEach(function (a, h) { var i = { x: j.x1 + d.projectValue(a, h, c.normalized.series[g]), y: j.y1 - f.projectValue(a, h, c.normalized.series[g]) }; k.push(i.x, i.y), l.push({ value: a, valueIndex: h, meta: b.getMetaData(e, h) }) }.bind(this)); var m = { lineSmooth: b.getSeriesOption(e, a, "lineSmooth"), showPoint: b.getSeriesOption(e, a, "showPoint"), showLine: b.getSeriesOption(e, a, "showLine"), showArea: b.getSeriesOption(e, a, "showArea"), areaBase: b.getSeriesOption(e, a, "areaBase") }, n = "function" == typeof m.lineSmooth ? m.lineSmooth : m.lineSmooth ? b.Interpolation.monotoneCubic() : b.Interpolation.none(), o = n(k, l); if (m.showPoint && o.pathElements.forEach(function (c) { var h = i.elem("line", { x1: c.x, y1: c.y, x2: c.x + .01, y2: c.y }, a.classNames.point).attr({ "ct:value": [c.data.value.x, c.data.value.y].filter(b.isNumeric).join(","), "ct:meta": b.serialize(c.data.meta) }); this.eventEmitter.emit("draw", { type: "point", value: c.data.value, index: c.data.valueIndex, meta: c.data.meta, series: e, seriesIndex: g, axisX: d, axisY: f, group: i, element: h, x: c.x, y: c.y }) }.bind(this)), m.showLine) { var p = i.elem("path", { d: o.stringify() }, a.classNames.line, !0); this.eventEmitter.emit("draw", { type: "line", values: c.normalized.series[g], path: o.clone(), chartRect: j, index: g, series: e, seriesIndex: g, seriesMeta: e.meta, axisX: d, axisY: f, group: i, element: p }) } if (m.showArea && f.range) { var q = Math.max(Math.min(m.areaBase, f.range.max), f.range.min), r = j.y1 - f.projectValue(q); o.splitByCommand("M").filter(function (a) { return a.pathElements.length > 1 }).map(function (a) { var b = a.pathElements[0], c = a.pathElements[a.pathElements.length - 1]; return a.clone(!0).position(0).remove(1).move(b.x, r).line(b.x, b.y).position(a.pathElements.length + 1).line(c.x, r) }).forEach(function (b) { var h = i.elem("path", { d: b.stringify() }, a.classNames.area, !0); this.eventEmitter.emit("draw", { type: "area", values: c.normalized.series[g], path: b.clone(), series: e, seriesIndex: g, axisX: d, axisY: f, chartRect: j, index: g, group: i, element: h }) }.bind(this)) } }.bind(this)), this.eventEmitter.emit("created", { bounds: f.bounds, chartRect: j, axisX: d, axisY: f, svg: this.svg, options: a }) } function d(a, c, d, f) { b.Line["super"].constructor.call(this, a, c, e, b.extend({}, e, d), f) } var e = (a.window, a.document, { axisX: { offset: 30, position: "end", labelOffset: { x: 0, y: 0 }, showLabel: !0, showGrid: !0, labelInterpolationFnc: b.noop, type: void 0 }, axisY: { offset: 40, position: "start", labelOffset: { x: 0, y: 0 }, showLabel: !0, showGrid: !0, labelInterpolationFnc: b.noop, type: void 0, scaleMinSpace: 20, onlyInteger: !1 }, width: void 0, height: void 0, showLine: !0, showPoint: !0, showArea: !1, areaBase: 0, lineSmooth: !0, showGridBackground: !1, low: void 0, high: void 0, chartPadding: { top: 15, right: 15, bottom: 5, left: 10 }, fullWidth: !1, reverseData: !1, classNames: { chart: "ct-chart-line", label: "ct-label", labelGroup: "ct-labels", series: "ct-series", line: "ct-line", point: "ct-point", area: "ct-area", grid: "ct-grid", gridGroup: "ct-grids", gridBackground: "ct-grid-background", vertical: "ct-vertical", horizontal: "ct-horizontal", start: "ct-start", end: "ct-end" } }); b.Line = b.Base.extend({ constructor: d, createChart: c }) }(this || global, a), function (a, b) { + "use strict"; function c(a) { + var c, d; a.distributeSeries ? (c = b.normalizeData(this.data, a.reverseData, a.horizontalBars ? "x" : "y"), c.normalized.series = c.normalized.series.map(function (a) { return [a] })) : c = b.normalizeData(this.data, a.reverseData, a.horizontalBars ? "x" : "y"), this.svg = b.createSvg(this.container, a.width, a.height, a.classNames.chart + (a.horizontalBars ? " " + a.classNames.horizontalBars : "")); var f = this.svg.elem("g").addClass(a.classNames.gridGroup), g = this.svg.elem("g"), h = this.svg.elem("g").addClass(a.classNames.labelGroup); + if (a.stackBars && 0 !== c.normalized.series.length) { var i = b.serialMap(c.normalized.series, function () { return Array.prototype.slice.call(arguments).map(function (a) { return a }).reduce(function (a, b) { return { x: a.x + (b && b.x) || 0, y: a.y + (b && b.y) || 0 } }, { x: 0, y: 0 }) }); d = b.getHighLow([i], a, a.horizontalBars ? "x" : "y") } else d = b.getHighLow(c.normalized.series, a, a.horizontalBars ? "x" : "y"); d.high = +a.high || (0 === a.high ? 0 : d.high), d.low = +a.low || (0 === a.low ? 0 : d.low); var j, k, l, m, n, o = b.createChartRect(this.svg, a, e.padding); k = a.distributeSeries && a.stackBars ? c.normalized.labels.slice(0, 1) : c.normalized.labels, a.horizontalBars ? (j = m = void 0 === a.axisX.type ? new b.AutoScaleAxis(b.Axis.units.x, c.normalized.series, o, b.extend({}, a.axisX, { highLow: d, referenceValue: 0 })) : a.axisX.type.call(b, b.Axis.units.x, c.normalized.series, o, b.extend({}, a.axisX, { highLow: d, referenceValue: 0 })), l = n = void 0 === a.axisY.type ? new b.StepAxis(b.Axis.units.y, c.normalized.series, o, { ticks: k }) : a.axisY.type.call(b, b.Axis.units.y, c.normalized.series, o, a.axisY)) : (l = m = void 0 === a.axisX.type ? new b.StepAxis(b.Axis.units.x, c.normalized.series, o, { ticks: k }) : a.axisX.type.call(b, b.Axis.units.x, c.normalized.series, o, a.axisX), j = n = void 0 === a.axisY.type ? new b.AutoScaleAxis(b.Axis.units.y, c.normalized.series, o, b.extend({}, a.axisY, { highLow: d, referenceValue: 0 })) : a.axisY.type.call(b, b.Axis.units.y, c.normalized.series, o, b.extend({}, a.axisY, { highLow: d, referenceValue: 0 }))); var p = a.horizontalBars ? o.x1 + j.projectValue(0) : o.y1 - j.projectValue(0), q = []; l.createGridAndLabels(f, h, this.supportsForeignObject, a, this.eventEmitter), j.createGridAndLabels(f, h, this.supportsForeignObject, a, this.eventEmitter), a.showGridBackground && b.createGridBackground(f, o, a.classNames.gridBackground, this.eventEmitter), c.raw.series.forEach(function (d, e) { var f, h, i = e - (c.raw.series.length - 1) / 2; f = a.distributeSeries && !a.stackBars ? l.axisLength / c.normalized.series.length / 2 : a.distributeSeries && a.stackBars ? l.axisLength / 2 : l.axisLength / c.normalized.series[e].length / 2, h = g.elem("g"), h.attr({ "ct:series-name": d.name, "ct:meta": b.serialize(d.meta) }), h.addClass([a.classNames.series, d.className || a.classNames.series + "-" + b.alphaNumerate(e)].join(" ")), c.normalized.series[e].forEach(function (g, k) { var r, s, t, u; if (u = a.distributeSeries && !a.stackBars ? e : a.distributeSeries && a.stackBars ? 0 : k, r = a.horizontalBars ? { x: o.x1 + j.projectValue(g && g.x ? g.x : 0, k, c.normalized.series[e]), y: o.y1 - l.projectValue(g && g.y ? g.y : 0, u, c.normalized.series[e]) } : { x: o.x1 + l.projectValue(g && g.x ? g.x : 0, u, c.normalized.series[e]), y: o.y1 - j.projectValue(g && g.y ? g.y : 0, k, c.normalized.series[e]) }, l instanceof b.StepAxis && (l.options.stretch || (r[l.units.pos] += f * (a.horizontalBars ? -1 : 1)), r[l.units.pos] += a.stackBars || a.distributeSeries ? 0 : i * a.seriesBarDistance * (a.horizontalBars ? -1 : 1)), t = q[k] || p, q[k] = t - (p - r[l.counterUnits.pos]), void 0 !== g) { var v = {}; v[l.units.pos + "1"] = r[l.units.pos], v[l.units.pos + "2"] = r[l.units.pos], !a.stackBars || "accumulate" !== a.stackMode && a.stackMode ? (v[l.counterUnits.pos + "1"] = p, v[l.counterUnits.pos + "2"] = r[l.counterUnits.pos]) : (v[l.counterUnits.pos + "1"] = t, v[l.counterUnits.pos + "2"] = q[k]), v.x1 = Math.min(Math.max(v.x1, o.x1), o.x2), v.x2 = Math.min(Math.max(v.x2, o.x1), o.x2), v.y1 = Math.min(Math.max(v.y1, o.y2), o.y1), v.y2 = Math.min(Math.max(v.y2, o.y2), o.y1); var w = b.getMetaData(d, k); s = h.elem("line", v, a.classNames.bar).attr({ "ct:value": [g.x, g.y].filter(b.isNumeric).join(","), "ct:meta": b.serialize(w) }), this.eventEmitter.emit("draw", b.extend({ type: "bar", value: g, index: k, meta: w, series: d, seriesIndex: e, axisX: m, axisY: n, chartRect: o, group: h, element: s }, v)) } }.bind(this)) }.bind(this)), this.eventEmitter.emit("created", { bounds: j.bounds, chartRect: o, axisX: m, axisY: n, svg: this.svg, options: a }) + } function d(a, c, d, f) { b.Bar["super"].constructor.call(this, a, c, e, b.extend({}, e, d), f) } var e = (a.window, a.document, { axisX: { offset: 30, position: "end", labelOffset: { x: 0, y: 0 }, showLabel: !0, showGrid: !0, labelInterpolationFnc: b.noop, scaleMinSpace: 30, onlyInteger: !1 }, axisY: { offset: 40, position: "start", labelOffset: { x: 0, y: 0 }, showLabel: !0, showGrid: !0, labelInterpolationFnc: b.noop, scaleMinSpace: 20, onlyInteger: !1 }, width: void 0, height: void 0, high: void 0, low: void 0, referenceValue: 0, chartPadding: { top: 15, right: 15, bottom: 5, left: 10 }, seriesBarDistance: 15, stackBars: !1, stackMode: "accumulate", horizontalBars: !1, distributeSeries: !1, reverseData: !1, showGridBackground: !1, classNames: { chart: "ct-chart-bar", horizontalBars: "ct-horizontal-bars", label: "ct-label", labelGroup: "ct-labels", series: "ct-series", bar: "ct-bar", grid: "ct-grid", gridGroup: "ct-grids", gridBackground: "ct-grid-background", vertical: "ct-vertical", horizontal: "ct-horizontal", start: "ct-start", end: "ct-end" } }); b.Bar = b.Base.extend({ constructor: d, createChart: c }) + }(this || global, a), function (a, b) { "use strict"; function c(a, b, c) { var d = b.x > a.x; return d && "explode" === c || !d && "implode" === c ? "start" : d && "implode" === c || !d && "explode" === c ? "end" : "middle" } function d(a) { var d, e, g, h, i, j = b.normalizeData(this.data), k = [], l = a.startAngle; this.svg = b.createSvg(this.container, a.width, a.height, a.donut ? a.classNames.chartDonut : a.classNames.chartPie), e = b.createChartRect(this.svg, a, f.padding), g = Math.min(e.width() / 2, e.height() / 2), i = a.total || j.normalized.series.reduce(function (a, b) { return a + b }, 0); var m = b.quantity(a.donutWidth); "%" === m.unit && (m.value *= g / 100), g -= a.donut && !a.donutSolid ? m.value / 2 : 0, h = "outside" === a.labelPosition || a.donut && !a.donutSolid ? g : "center" === a.labelPosition ? 0 : a.donutSolid ? g - m.value / 2 : g / 2, h += a.labelOffset; var n = { x: e.x1 + e.width() / 2, y: e.y2 + e.height() / 2 }, o = 1 === j.raw.series.filter(function (a) { return a.hasOwnProperty("value") ? 0 !== a.value : 0 !== a }).length; j.raw.series.forEach(function (a, b) { k[b] = this.svg.elem("g", null, null) }.bind(this)), a.showLabel && (d = this.svg.elem("g", null, null)), j.raw.series.forEach(function (e, f) { if (0 !== j.normalized.series[f] || !a.ignoreEmptyValues) { k[f].attr({ "ct:series-name": e.name }), k[f].addClass([a.classNames.series, e.className || a.classNames.series + "-" + b.alphaNumerate(f)].join(" ")); var p = i > 0 ? l + j.normalized.series[f] / i * 360 : 0, q = Math.max(0, l - (0 === f || o ? 0 : .2)); p - q >= 359.99 && (p = q + 359.99); var r, s, t, u = b.polarToCartesian(n.x, n.y, g, q), v = b.polarToCartesian(n.x, n.y, g, p), w = new b.Svg.Path(!a.donut || a.donutSolid).move(v.x, v.y).arc(g, g, 0, p - l > 180, 0, u.x, u.y); a.donut ? a.donutSolid && (t = g - m.value, r = b.polarToCartesian(n.x, n.y, t, l - (0 === f || o ? 0 : .2)), s = b.polarToCartesian(n.x, n.y, t, p), w.line(r.x, r.y), w.arc(t, t, 0, p - l > 180, 1, s.x, s.y)) : w.line(n.x, n.y); var x = a.classNames.slicePie; a.donut && (x = a.classNames.sliceDonut, a.donutSolid && (x = a.classNames.sliceDonutSolid)); var y = k[f].elem("path", { d: w.stringify() }, x); if (y.attr({ "ct:value": j.normalized.series[f], "ct:meta": b.serialize(e.meta) }), a.donut && !a.donutSolid && (y._node.style.strokeWidth = m.value + "px"), this.eventEmitter.emit("draw", { type: "slice", value: j.normalized.series[f], totalDataSum: i, index: f, meta: e.meta, series: e, group: k[f], element: y, path: w.clone(), center: n, radius: g, startAngle: l, endAngle: p }), a.showLabel) { var z; z = 1 === j.raw.series.length ? { x: n.x, y: n.y } : b.polarToCartesian(n.x, n.y, h, l + (p - l) / 2); var A; A = j.normalized.labels && !b.isFalseyButZero(j.normalized.labels[f]) ? j.normalized.labels[f] : j.normalized.series[f]; var B = a.labelInterpolationFnc(A, f); if (B || 0 === B) { var C = d.elem("text", { dx: z.x, dy: z.y, "text-anchor": c(n, z, a.labelDirection) }, a.classNames.label).text("" + B); this.eventEmitter.emit("draw", { type: "label", index: f, group: d, element: C, text: "" + B, x: z.x, y: z.y }) } } l = p } }.bind(this)), this.eventEmitter.emit("created", { chartRect: e, svg: this.svg, options: a }) } function e(a, c, d, e) { b.Pie["super"].constructor.call(this, a, c, f, b.extend({}, f, d), e) } var f = (a.window, a.document, { width: void 0, height: void 0, chartPadding: 5, classNames: { chartPie: "ct-chart-pie", chartDonut: "ct-chart-donut", series: "ct-series", slicePie: "ct-slice-pie", sliceDonut: "ct-slice-donut", sliceDonutSolid: "ct-slice-donut-solid", label: "ct-label" }, startAngle: 0, total: void 0, donut: !1, donutSolid: !1, donutWidth: 60, showLabel: !0, labelOffset: 0, labelPosition: "inside", labelInterpolationFnc: b.noop, labelDirection: "neutral", reverseData: !1, ignoreEmptyValues: !1 }); b.Pie = b.Base.extend({ constructor: e, createChart: d, determineAnchorPosition: c }) }(this || global, a), a +}); +//# sourceMappingURL=chartist.min.js.map + +var i, l, selectedLine = null; + +/* Navigate to hash without browser history entry */ +var navigateToHash = function () { + if (window.history !== undefined && window.history.replaceState !== undefined) { + window.history.replaceState(undefined, undefined, this.getAttribute("href")); + } +}; + +var hashLinks = document.getElementsByClassName('navigatetohash'); +for (i = 0, l = hashLinks.length; i < l; i++) { + hashLinks[i].addEventListener('click', navigateToHash); +} + +/* Switch test method */ +var switchTestMethod = function () { + var method = this.getAttribute("value"); + console.log("Selected test method: " + method); + + var lines, i, l, coverageData, lineAnalysis, cells; + + lines = document.querySelectorAll('.lineAnalysis tr'); + + for (i = 1, l = lines.length; i < l; i++) { + coverageData = JSON.parse(lines[i].getAttribute('data-coverage').replace(/'/g, '"')); + lineAnalysis = coverageData[method]; + cells = lines[i].querySelectorAll('td'); + if (lineAnalysis === undefined) { + lineAnalysis = coverageData.AllTestMethods; + if (lineAnalysis.LVS !== 'gray') { + cells[0].setAttribute('class', 'red'); + cells[1].innerText = cells[1].textContent = '0'; + cells[4].setAttribute('class', 'lightred'); + } + } else { + cells[0].setAttribute('class', lineAnalysis.LVS); + cells[1].innerText = cells[1].textContent = lineAnalysis.VC; + cells[4].setAttribute('class', 'light' + lineAnalysis.LVS); + } + } +}; + +var testMethods = document.getElementsByClassName('switchtestmethod'); +for (i = 0, l = testMethods.length; i < l; i++) { + testMethods[i].addEventListener('change', switchTestMethod); +} + +/* Highlight test method by line */ +var toggleLine = function () { + if (selectedLine === this) { + selectedLine = null; + } else { + selectedLine = null; + unhighlightTestMethods(); + highlightTestMethods.call(this); + selectedLine = this; + } + +}; +var highlightTestMethods = function () { + if (selectedLine !== null) { + return; + } + + var lineAnalysis; + var coverageData = JSON.parse(this.getAttribute('data-coverage').replace(/'/g, '"')); + var testMethods = document.getElementsByClassName('testmethod'); + + for (i = 0, l = testMethods.length; i < l; i++) { + lineAnalysis = coverageData[testMethods[i].id]; + if (lineAnalysis === undefined) { + testMethods[i].className = testMethods[i].className.replace(/\s*light.+/g, ""); + } else { + testMethods[i].className += ' light' + lineAnalysis.LVS; + } + } +}; +var unhighlightTestMethods = function () { + if (selectedLine !== null) { + return; + } + + var testMethods = document.getElementsByClassName('testmethod'); + for (i = 0, l = testMethods.length; i < l; i++) { + testMethods[i].className = testMethods[i].className.replace(/\s*light.+/g, ""); + } +}; +var coverableLines = document.getElementsByClassName('coverableline'); +for (i = 0, l = coverableLines.length; i < l; i++) { + coverableLines[i].addEventListener('click', toggleLine); + coverableLines[i].addEventListener('mouseenter', highlightTestMethods); + coverableLines[i].addEventListener('mouseleave', unhighlightTestMethods); +} + +/* History charts */ +var renderChart = function (chart) { + // Remove current children (e.g. PNG placeholder) + while (chart.firstChild) { + chart.firstChild.remove(); + } + + var chartData = window[chart.getAttribute('data-data')]; + var options = { + axisY: { + type: undefined, + onlyInteger: true + }, + lineSmooth: false, + low: 0, + high: 100, + scaleMinSpace: 20, + onlyInteger: true, + fullWidth: true + }; + var lineChart = new Chartist.Line(chart, { + labels: [], + series: chartData.series + }, options); + + /* Zoom */ + var zoomButtonDiv = document.createElement("div"); + zoomButtonDiv.className = "toggleZoom"; + var zoomButtonLink = document.createElement("a"); + zoomButtonLink.setAttribute("href", ""); + var zoomButtonText = document.createElement("i"); + zoomButtonText.className = "icon-search-plus"; + + zoomButtonLink.appendChild(zoomButtonText); + zoomButtonDiv.appendChild(zoomButtonLink); + + chart.appendChild(zoomButtonDiv); + + zoomButtonDiv.addEventListener('click', function (event) { + event.preventDefault(); + + if (options.axisY.type === undefined) { + options.axisY.type = Chartist.AutoScaleAxis; + zoomButtonText.className = "icon-search-minus"; + } else { + options.axisY.type = undefined; + zoomButtonText.className = "icon-search-plus"; + } + + lineChart.update(null, options); + }); + + var tooltip = document.createElement("div"); + tooltip.className = "tooltip"; + + chart.appendChild(tooltip); + + /* Tooltips */ + var showToolTip = function () { + var index = this.getAttribute('ct:meta'); + + tooltip.innerHTML = chartData.tooltips[index]; + tooltip.style.display = 'block'; + }; + + var moveToolTip = function (event) { + var box = chart.getBoundingClientRect(); + var left = event.pageX - box.left - window.pageXOffset; + var top = event.pageY - box.top - window.pageYOffset; + + left = left + 20; + top = top - tooltip.offsetHeight / 2; + + if (left + tooltip.offsetWidth > box.width) { + left -= tooltip.offsetWidth + 40; + } + + if (top < 0) { + top = 0; + } + + if (top + tooltip.offsetHeight > box.height) { + top = box.height - tooltip.offsetHeight; + } + + tooltip.style.left = left + 'px'; + tooltip.style.top = top + 'px'; + }; + + var hideToolTip = function () { + tooltip.style.display = 'none'; + }; + chart.addEventListener('mousemove', moveToolTip); + + lineChart.on('created', function () { + var chartPoints = chart.getElementsByClassName('ct-point'); + for (i = 0, l = chartPoints.length; i < l; i++) { + chartPoints[i].addEventListener('mousemove', showToolTip); + chartPoints[i].addEventListener('mouseout', hideToolTip); + } + }); +}; + +var charts = document.getElementsByClassName('historychart'); +for (i = 0, l = charts.length; i < l; i++) { + renderChart(charts[i]); +} + +var assemblies = [ + { + "name": "URLShortener.Application", + "classes": [ + { "name": "URLShortener.Application.Interfaces.UrlService", "rp": "URLShortener.Application_UrlService.html", "cl": 45, "ucl": 5, "cal": 50, "tl": 77, "cb": 12, "tb": 16, "cm": 0, "tm": 0, "lch": [], "bch": [], "mch": [], "hc": [], "metrics": { } }, + ]}, + { + "name": "URLShortener.CustomExceptions", + "classes": [ + { "name": "URLShortener.Application.Interfaces.ExpiredUrlException", "rp": "URLShortener.CustomExceptions_ExpiredUrlException.html", "cl": 3, "ucl": 0, "cal": 3, "tl": 12, "cb": 0, "tb": 0, "cm": 0, "tm": 0, "lch": [], "bch": [], "mch": [], "hc": [], "metrics": { } }, + { "name": "URLShortener.Application.Interfaces.FailedToParseMinutesToUintException", "rp": "URLShortener.CustomExceptions_FailedToParseMinutesToUintException.html", "cl": 3, "ucl": 0, "cal": 3, "tl": 11, "cb": 0, "tb": 0, "cm": 0, "tm": 0, "lch": [], "bch": [], "mch": [], "hc": [], "metrics": { } }, + { "name": "URLShortener.Application.Interfaces.MinMinutesIsGreaterOrEqualThanMaxMinutesException", "rp": "URLShortener.CustomExceptions_MinMinutesIsGreaterOrEqualThanMaxMinutesException.html", "cl": 0, "ucl": 3, "cal": 3, "tl": 10, "cb": 0, "tb": 0, "cm": 0, "tm": 0, "lch": [], "bch": [], "mch": [], "hc": [], "metrics": { } }, + { "name": "URLShortener.Infra.Repositories.EntityAlreadyExistsException", "rp": "URLShortener.CustomExceptions_EntityAlreadyExistsException.html", "cl": 0, "ucl": 5, "cal": 5, "tl": 15, "cb": 0, "tb": 0, "cm": 0, "tm": 0, "lch": [], "bch": [], "mch": [], "hc": [], "metrics": { } }, + { "name": "URLShortener.Infra.Repositories.EntityNotFoundException", "rp": "URLShortener.CustomExceptions_EntityNotFoundException.html", "cl": 0, "ucl": 11, "cal": 11, "tl": 24, "cb": 0, "tb": 0, "cm": 0, "tm": 0, "lch": [], "bch": [], "mch": [], "hc": [], "metrics": { } }, + ]}, + { + "name": "URLShortener.Domain", + "classes": [ + { "name": "URLShortener.Domain.BaseEntity", "rp": "URLShortener.Domain_BaseEntity.html", "cl": 0, "ucl": 4, "cal": 4, "tl": 13, "cb": 0, "tb": 0, "cm": 0, "tm": 0, "lch": [], "bch": [], "mch": [], "hc": [], "metrics": { } }, + { "name": "URLShortener.Domain.Url", "rp": "URLShortener.Domain_Url.html", "cl": 15, "ucl": 6, "cal": 21, "tl": 35, "cb": 0, "tb": 0, "cm": 0, "tm": 0, "lch": [], "bch": [], "mch": [], "hc": [], "metrics": { } }, + ]}, + { + "name": "URLShortener.Infra", + "classes": [ + { "name": "URLShortener.Infra.Context.AppDbContext", "rp": "URLShortener.Infra_AppDbContext.html", "cl": 0, "ucl": 9, "cal": 9, "tl": 22, "cb": 0, "tb": 0, "cm": 0, "tm": 0, "lch": [], "bch": [], "mch": [], "hc": [], "metrics": { } }, + { "name": "URLShortener.Infra.Migrations.AppDbContextModelSnapshot", "rp": "URLShortener.Infra_AppDbContextModelSnapshot.html", "cl": 0, "ucl": 28, "cal": 28, "tl": 48, "cb": 0, "tb": 0, "cm": 0, "tm": 0, "lch": [], "bch": [], "mch": [], "hc": [], "metrics": { } }, + { "name": "URLShortener.Infra.Migrations.CreateDatabaseInitial", "rp": "URLShortener.Infra_CreateDatabaseInitial.html", "cl": 0, "ucl": 49, "cal": 49, "tl": 89, "cb": 0, "tb": 0, "cm": 0, "tm": 0, "lch": [], "bch": [], "mch": [], "hc": [], "metrics": { } }, + { "name": "URLShortener.Infra.Repositories.Repository", "rp": "URLShortener.Infra_Repository_1.html", "cl": 0, "ucl": 45, "cal": 45, "tl": 78, "cb": 0, "tb": 4, "cm": 0, "tm": 0, "lch": [], "bch": [], "mch": [], "hc": [], "metrics": { } }, + { "name": "URLShortener.Infra.Repositories.UrlRepository", "rp": "URLShortener.Infra_UrlRepository.html", "cl": 0, "ucl": 17, "cal": 17, "tl": 36, "cb": 0, "tb": 6, "cm": 0, "tm": 0, "lch": [], "bch": [], "mch": [], "hc": [], "metrics": { } }, + ]}, + { + "name": "URLShortener.ViewModels", + "classes": [ + { "name": "URLShortener.ViewModels.UrlDTO", "rp": "URLShortener.ViewModels_UrlDTO.html", "cl": 0, "ucl": 9, "cal": 9, "tl": 17, "cb": 0, "tb": 0, "cm": 0, "tm": 0, "lch": [], "bch": [], "mch": [], "hc": [], "metrics": { } }, + { "name": "URLShortener.ViewModels.UrlRequest", "rp": "URLShortener.ViewModels_UrlRequest.html", "cl": 0, "ucl": 5, "cal": 5, "tl": 16, "cb": 0, "tb": 0, "cm": 0, "tm": 0, "lch": [], "bch": [], "mch": [], "hc": [], "metrics": { } }, + ]}, + { + "name": "URLShortener.WebAPI", + "classes": [ + { "name": "ExceptionFilter", "rp": "URLShortener.WebAPI_ExceptionFilter.html", "cl": 0, "ucl": 35, "cal": 35, "tl": 68, "cb": 0, "tb": 12, "cm": 0, "tm": 0, "lch": [], "bch": [], "mch": [], "hc": [], "metrics": { } }, + { "name": "URLShortener.WebAPI.Controllers.UrlController", "rp": "URLShortener.WebAPI_UrlController.html", "cl": 0, "ucl": 28, "cal": 28, "tl": 69, "cb": 0, "tb": 12, "cm": 0, "tm": 0, "lch": [], "bch": [], "mch": [], "hc": [], "metrics": { } }, + { "name": "URLShortener.WebAPI.Middlewares.LoggingMiddleware", "rp": "URLShortener.WebAPI_LoggingMiddleware.html", "cl": 0, "ucl": 13, "cal": 13, "tl": 29, "cb": 0, "tb": 0, "cm": 0, "tm": 0, "lch": [], "bch": [], "mch": [], "hc": [], "metrics": { } }, + { "name": "URLShortener.WebAPI.Program", "rp": "URLShortener.WebAPI_Program.html", "cl": 0, "ucl": 44, "cal": 44, "tl": 82, "cb": 0, "tb": 2, "cm": 0, "tm": 0, "lch": [], "bch": [], "mch": [], "hc": [], "metrics": { } }, + ]}, +]; + +var metrics = [{ "name": "Crap Score", "abbreviation": "crp", "explanationUrl": "https://googletesting.blogspot.de/2011/02/this-code-is-crap.html" }, { "name": "Cyclomatic complexity", "abbreviation": "cc", "explanationUrl": "https://en.wikipedia.org/wiki/Cyclomatic_complexity" }, { "name": "Line coverage", "abbreviation": "cov", "explanationUrl": "https://en.wikipedia.org/wiki/Code_coverage" }, { "name": "Branch coverage", "abbreviation": "bcov", "explanationUrl": "https://en.wikipedia.org/wiki/Code_coverage" }]; + +var historicCoverageExecutionTimes = []; + +var riskHotspotMetrics = [ + { "name": "Crap Score", "explanationUrl": "https://googletesting.blogspot.de/2011/02/this-code-is-crap.html" }, + { "name": "Cyclomatic complexity", "explanationUrl": "https://en.wikipedia.org/wiki/Cyclomatic_complexity" }, +]; + +var riskHotspots = [ + { + "assembly": "URLShortener.WebAPI", "class": "ExceptionFilter", "reportPath": "URLShortener.WebAPI_ExceptionFilter.html", "methodName": "OnExceptionAsync()", "methodShortName": "OnExceptionAsync()", "fileIndex": 0, "line": 17, + "metrics": [ + { "value": 156, "exceeded": true }, + { "value": 12, "exceeded": false }, + ]}, + { + "assembly": "URLShortener.WebAPI", "class": "URLShortener.WebAPI.Controllers.UrlController", "reportPath": "URLShortener.WebAPI_UrlController.html", "methodName": "Add()", "methodShortName": "Add()", "fileIndex": 0, "line": 57, + "metrics": [ + { "value": 42, "exceeded": true }, + { "value": 6, "exceeded": false }, + ]}, + { + "assembly": "URLShortener.Infra", "class": "URLShortener.Infra.Repositories.Repository", "reportPath": "URLShortener.Infra_Repository_1.html", "methodName": "UpdateAsync()", "methodShortName": "UpdateAsync()", "fileIndex": 0, "line": 59, + "metrics": [ + { "value": 20, "exceeded": true }, + { "value": 4, "exceeded": false }, + ]}, + { + "assembly": "URLShortener.Infra", "class": "URLShortener.Infra.Repositories.UrlRepository", "reportPath": "URLShortener.Infra_UrlRepository.html", "methodName": "GetByUrlAsync()", "methodShortName": "GetByUrlAsync()", "fileIndex": 0, "line": 27, + "metrics": [ + { "value": 20, "exceeded": true }, + { "value": 4, "exceeded": false }, + ]}, + { + "assembly": "URLShortener.WebAPI", "class": "URLShortener.WebAPI.Controllers.UrlController", "reportPath": "URLShortener.WebAPI_UrlController.html", "methodName": "GetAll()", "methodShortName": "GetAll()", "fileIndex": 0, "line": 28, + "metrics": [ + { "value": 20, "exceeded": true }, + { "value": 4, "exceeded": false }, + ]}, +]; + +var branchCoverageAvailable = true; +var methodCoverageAvailable = false; +var maximumDecimalPlacesForCoverageQuotas = 1; + + +var translations = { +'top': 'Top:', +'all': 'All', +'assembly': 'Assembly', +'class': 'Class', +'method': 'Method', +'lineCoverage': 'Line coverage', +'noGrouping': 'No grouping', +'byAssembly': 'By assembly', +'byNamespace': 'By namespace, Level:', +'all': 'All', +'collapseAll': 'Collapse all', +'expandAll': 'Expand all', +'grouping': 'Grouping:', +'filter': 'Filter:', +'name': 'Name', +'covered': 'Covered', +'uncovered': 'Uncovered', +'coverable': 'Coverable', +'total': 'Total', +'coverage': 'Line coverage', +'branchCoverage': 'Branch coverage', +'methodCoverage': 'Method coverage', +'percentage': 'Percentage', +'history': 'Coverage history', +'compareHistory': 'Compare with:', +'date': 'Date', +'allChanges': 'All changes', +'selectCoverageTypes': 'Select coverage types', +'selectCoverageTypesAndMetrics': 'Select coverage types & metrics', +'coverageTypes': 'Coverage types', +'metrics': 'Metrics', +'methodCoverageProVersion': 'Feature is only available for sponsors', +'lineCoverageIncreaseOnly': 'Line coverage: Increase only', +'lineCoverageDecreaseOnly': 'Line coverage: Decrease only', +'branchCoverageIncreaseOnly': 'Branch coverage: Increase only', +'branchCoverageDecreaseOnly': 'Branch coverage: Decrease only', +'methodCoverageIncreaseOnly': 'Method coverage: Increase only', +'methodCoverageDecreaseOnly': 'Method coverage: Decrease only' +}; + + +(()=>{"use strict";var e,_={},p={};function n(e){var a=p[e];if(void 0!==a)return a.exports;var r=p[e]={exports:{}};return _[e](r,r.exports,n),r.exports}n.m=_,e=[],n.O=(a,r,u,l)=>{if(!r){var o=1/0;for(f=0;f=l)&&Object.keys(n.O).every(h=>n.O[h](r[t]))?r.splice(t--,1):(v=!1,l0&&e[f-1][2]>l;f--)e[f]=e[f-1];e[f]=[r,u,l]},n.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return n.d(a,{a}),a},n.d=(e,a)=>{for(var r in a)n.o(a,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:a[r]})},n.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),(()=>{var e={688:0};n.O.j=u=>0===e[u];var a=(u,l)=>{var t,c,[f,o,v]=l,s=0;if(f.some(d=>0!==e[d])){for(t in o)n.o(o,t)&&(n.m[t]=o[t]);if(v)var b=v(n)}for(u&&u(l);s{de(728)},728:()=>{!function(e){const n=e.performance;function i(L){n&&n.mark&&n.mark(L)}function o(L,T){n&&n.measure&&n.measure(L,T)}i("Zone");const c=e.__Zone_symbol_prefix||"__zone_symbol__";function a(L){return c+L}const y=!0===e[a("forceDuplicateZoneCheck")];if(e.Zone){if(y||"function"!=typeof e.Zone.__symbol__)throw new Error("Zone already loaded.");return e.Zone}let d=(()=>{class L{static#e=this.__symbol__=a;static assertZonePatched(){if(e.Promise!==oe.ZoneAwarePromise)throw new Error("Zone.js has detected that ZoneAwarePromise `(window|global).Promise` has been overwritten.\nMost likely cause is that a Promise polyfill has been loaded after Zone.js (Polyfilling Promise api is not necessary when zone.js is loaded. If you must load one, do so before loading zone.js.)")}static get root(){let t=L.current;for(;t.parent;)t=t.parent;return t}static get current(){return U.zone}static get currentTask(){return re}static __load_patch(t,r,k=!1){if(oe.hasOwnProperty(t)){if(!k&&y)throw Error("Already loaded patch: "+t)}else if(!e["__Zone_disable_"+t]){const C="Zone:"+t;i(C),oe[t]=r(e,L,z),o(C,C)}}get parent(){return this._parent}get name(){return this._name}constructor(t,r){this._parent=t,this._name=r?r.name||"unnamed":"",this._properties=r&&r.properties||{},this._zoneDelegate=new v(this,this._parent&&this._parent._zoneDelegate,r)}get(t){const r=this.getZoneWith(t);if(r)return r._properties[t]}getZoneWith(t){let r=this;for(;r;){if(r._properties.hasOwnProperty(t))return r;r=r._parent}return null}fork(t){if(!t)throw new Error("ZoneSpec required!");return this._zoneDelegate.fork(this,t)}wrap(t,r){if("function"!=typeof t)throw new Error("Expecting function got: "+t);const k=this._zoneDelegate.intercept(this,t,r),C=this;return function(){return C.runGuarded(k,this,arguments,r)}}run(t,r,k,C){U={parent:U,zone:this};try{return this._zoneDelegate.invoke(this,t,r,k,C)}finally{U=U.parent}}runGuarded(t,r=null,k,C){U={parent:U,zone:this};try{try{return this._zoneDelegate.invoke(this,t,r,k,C)}catch($){if(this._zoneDelegate.handleError(this,$))throw $}}finally{U=U.parent}}runTask(t,r,k){if(t.zone!=this)throw new Error("A task can only be run in the zone of creation! (Creation: "+(t.zone||K).name+"; Execution: "+this.name+")");if(t.state===x&&(t.type===Q||t.type===P))return;const C=t.state!=E;C&&t._transitionTo(E,A),t.runCount++;const $=re;re=t,U={parent:U,zone:this};try{t.type==P&&t.data&&!t.data.isPeriodic&&(t.cancelFn=void 0);try{return this._zoneDelegate.invokeTask(this,t,r,k)}catch(l){if(this._zoneDelegate.handleError(this,l))throw l}}finally{t.state!==x&&t.state!==h&&(t.type==Q||t.data&&t.data.isPeriodic?C&&t._transitionTo(A,E):(t.runCount=0,this._updateTaskCount(t,-1),C&&t._transitionTo(x,E,x))),U=U.parent,re=$}}scheduleTask(t){if(t.zone&&t.zone!==this){let k=this;for(;k;){if(k===t.zone)throw Error(`can not reschedule task to ${this.name} which is descendants of the original zone ${t.zone.name}`);k=k.parent}}t._transitionTo(X,x);const r=[];t._zoneDelegates=r,t._zone=this;try{t=this._zoneDelegate.scheduleTask(this,t)}catch(k){throw t._transitionTo(h,X,x),this._zoneDelegate.handleError(this,k),k}return t._zoneDelegates===r&&this._updateTaskCount(t,1),t.state==X&&t._transitionTo(A,X),t}scheduleMicroTask(t,r,k,C){return this.scheduleTask(new p(I,t,r,k,C,void 0))}scheduleMacroTask(t,r,k,C,$){return this.scheduleTask(new p(P,t,r,k,C,$))}scheduleEventTask(t,r,k,C,$){return this.scheduleTask(new p(Q,t,r,k,C,$))}cancelTask(t){if(t.zone!=this)throw new Error("A task can only be cancelled in the zone of creation! (Creation: "+(t.zone||K).name+"; Execution: "+this.name+")");if(t.state===A||t.state===E){t._transitionTo(G,A,E);try{this._zoneDelegate.cancelTask(this,t)}catch(r){throw t._transitionTo(h,G),this._zoneDelegate.handleError(this,r),r}return this._updateTaskCount(t,-1),t._transitionTo(x,G),t.runCount=0,t}}_updateTaskCount(t,r){const k=t._zoneDelegates;-1==r&&(t._zoneDelegates=null);for(let C=0;CL.hasTask(t,r),onScheduleTask:(L,T,t,r)=>L.scheduleTask(t,r),onInvokeTask:(L,T,t,r,k,C)=>L.invokeTask(t,r,k,C),onCancelTask:(L,T,t,r)=>L.cancelTask(t,r)};class v{constructor(T,t,r){this._taskCounts={microTask:0,macroTask:0,eventTask:0},this.zone=T,this._parentDelegate=t,this._forkZS=r&&(r&&r.onFork?r:t._forkZS),this._forkDlgt=r&&(r.onFork?t:t._forkDlgt),this._forkCurrZone=r&&(r.onFork?this.zone:t._forkCurrZone),this._interceptZS=r&&(r.onIntercept?r:t._interceptZS),this._interceptDlgt=r&&(r.onIntercept?t:t._interceptDlgt),this._interceptCurrZone=r&&(r.onIntercept?this.zone:t._interceptCurrZone),this._invokeZS=r&&(r.onInvoke?r:t._invokeZS),this._invokeDlgt=r&&(r.onInvoke?t:t._invokeDlgt),this._invokeCurrZone=r&&(r.onInvoke?this.zone:t._invokeCurrZone),this._handleErrorZS=r&&(r.onHandleError?r:t._handleErrorZS),this._handleErrorDlgt=r&&(r.onHandleError?t:t._handleErrorDlgt),this._handleErrorCurrZone=r&&(r.onHandleError?this.zone:t._handleErrorCurrZone),this._scheduleTaskZS=r&&(r.onScheduleTask?r:t._scheduleTaskZS),this._scheduleTaskDlgt=r&&(r.onScheduleTask?t:t._scheduleTaskDlgt),this._scheduleTaskCurrZone=r&&(r.onScheduleTask?this.zone:t._scheduleTaskCurrZone),this._invokeTaskZS=r&&(r.onInvokeTask?r:t._invokeTaskZS),this._invokeTaskDlgt=r&&(r.onInvokeTask?t:t._invokeTaskDlgt),this._invokeTaskCurrZone=r&&(r.onInvokeTask?this.zone:t._invokeTaskCurrZone),this._cancelTaskZS=r&&(r.onCancelTask?r:t._cancelTaskZS),this._cancelTaskDlgt=r&&(r.onCancelTask?t:t._cancelTaskDlgt),this._cancelTaskCurrZone=r&&(r.onCancelTask?this.zone:t._cancelTaskCurrZone),this._hasTaskZS=null,this._hasTaskDlgt=null,this._hasTaskDlgtOwner=null,this._hasTaskCurrZone=null;const k=r&&r.onHasTask;(k||t&&t._hasTaskZS)&&(this._hasTaskZS=k?r:b,this._hasTaskDlgt=t,this._hasTaskDlgtOwner=this,this._hasTaskCurrZone=T,r.onScheduleTask||(this._scheduleTaskZS=b,this._scheduleTaskDlgt=t,this._scheduleTaskCurrZone=this.zone),r.onInvokeTask||(this._invokeTaskZS=b,this._invokeTaskDlgt=t,this._invokeTaskCurrZone=this.zone),r.onCancelTask||(this._cancelTaskZS=b,this._cancelTaskDlgt=t,this._cancelTaskCurrZone=this.zone))}fork(T,t){return this._forkZS?this._forkZS.onFork(this._forkDlgt,this.zone,T,t):new d(T,t)}intercept(T,t,r){return this._interceptZS?this._interceptZS.onIntercept(this._interceptDlgt,this._interceptCurrZone,T,t,r):t}invoke(T,t,r,k,C){return this._invokeZS?this._invokeZS.onInvoke(this._invokeDlgt,this._invokeCurrZone,T,t,r,k,C):t.apply(r,k)}handleError(T,t){return!this._handleErrorZS||this._handleErrorZS.onHandleError(this._handleErrorDlgt,this._handleErrorCurrZone,T,t)}scheduleTask(T,t){let r=t;if(this._scheduleTaskZS)this._hasTaskZS&&r._zoneDelegates.push(this._hasTaskDlgtOwner),r=this._scheduleTaskZS.onScheduleTask(this._scheduleTaskDlgt,this._scheduleTaskCurrZone,T,t),r||(r=t);else if(t.scheduleFn)t.scheduleFn(t);else{if(t.type!=I)throw new Error("Task is missing scheduleFn.");R(t)}return r}invokeTask(T,t,r,k){return this._invokeTaskZS?this._invokeTaskZS.onInvokeTask(this._invokeTaskDlgt,this._invokeTaskCurrZone,T,t,r,k):t.callback.apply(r,k)}cancelTask(T,t){let r;if(this._cancelTaskZS)r=this._cancelTaskZS.onCancelTask(this._cancelTaskDlgt,this._cancelTaskCurrZone,T,t);else{if(!t.cancelFn)throw Error("Task is not cancelable");r=t.cancelFn(t)}return r}hasTask(T,t){try{this._hasTaskZS&&this._hasTaskZS.onHasTask(this._hasTaskDlgt,this._hasTaskCurrZone,T,t)}catch(r){this.handleError(T,r)}}_updateTaskCount(T,t){const r=this._taskCounts,k=r[T],C=r[T]=k+t;if(C<0)throw new Error("More tasks executed then were scheduled.");0!=k&&0!=C||this.hasTask(this.zone,{microTask:r.microTask>0,macroTask:r.macroTask>0,eventTask:r.eventTask>0,change:T})}}class p{constructor(T,t,r,k,C,$){if(this._zone=null,this.runCount=0,this._zoneDelegates=null,this._state="notScheduled",this.type=T,this.source=t,this.data=k,this.scheduleFn=C,this.cancelFn=$,!r)throw new Error("callback is not defined");this.callback=r;const l=this;this.invoke=T===Q&&k&&k.useG?p.invokeTask:function(){return p.invokeTask.call(e,l,this,arguments)}}static invokeTask(T,t,r){T||(T=this),ee++;try{return T.runCount++,T.zone.runTask(T,t,r)}finally{1==ee&&_(),ee--}}get zone(){return this._zone}get state(){return this._state}cancelScheduleRequest(){this._transitionTo(x,X)}_transitionTo(T,t,r){if(this._state!==t&&this._state!==r)throw new Error(`${this.type} '${this.source}': can not transition to '${T}', expecting state '${t}'${r?" or '"+r+"'":""}, was '${this._state}'.`);this._state=T,T==x&&(this._zoneDelegates=null)}toString(){return this.data&&typeof this.data.handleId<"u"?this.data.handleId.toString():Object.prototype.toString.call(this)}toJSON(){return{type:this.type,state:this.state,source:this.source,zone:this.zone.name,runCount:this.runCount}}}const M=a("setTimeout"),Z=a("Promise"),N=a("then");let J,B=[],H=!1;function q(L){if(J||e[Z]&&(J=e[Z].resolve(0)),J){let T=J[N];T||(T=J.then),T.call(J,L)}else e[M](L,0)}function R(L){0===ee&&0===B.length&&q(_),L&&B.push(L)}function _(){if(!H){for(H=!0;B.length;){const L=B;B=[];for(let T=0;TU,onUnhandledError:W,microtaskDrainDone:W,scheduleMicroTask:R,showUncaughtError:()=>!d[a("ignoreConsoleErrorUncaughtError")],patchEventTarget:()=>[],patchOnProperties:W,patchMethod:()=>W,bindArguments:()=>[],patchThen:()=>W,patchMacroTask:()=>W,patchEventPrototype:()=>W,isIEOrEdge:()=>!1,getGlobalObjects:()=>{},ObjectDefineProperty:()=>W,ObjectGetOwnPropertyDescriptor:()=>{},ObjectCreate:()=>{},ArraySlice:()=>[],patchClass:()=>W,wrapWithCurrentZone:()=>W,filterProperties:()=>[],attachOriginToPatched:()=>W,_redefineProperty:()=>W,patchCallbacks:()=>W,nativeScheduleMicroTask:q};let U={parent:null,zone:new d(null,null)},re=null,ee=0;function W(){}o("Zone","Zone"),e.Zone=d}(globalThis);const ie=Object.getOwnPropertyDescriptor,Ee=Object.defineProperty,de=Object.getPrototypeOf,ge=Object.create,Ve=Array.prototype.slice,Se="addEventListener",Oe="removeEventListener",Ze=Zone.__symbol__(Se),Ne=Zone.__symbol__(Oe),ce="true",ae="false",ke=Zone.__symbol__("");function Ie(e,n){return Zone.current.wrap(e,n)}function Me(e,n,i,o,c){return Zone.current.scheduleMacroTask(e,n,i,o,c)}const j=Zone.__symbol__,Pe=typeof window<"u",Te=Pe?window:void 0,Y=Pe&&Te||globalThis,ct="removeAttribute";function Le(e,n){for(let i=e.length-1;i>=0;i--)"function"==typeof e[i]&&(e[i]=Ie(e[i],n+"_"+i));return e}function Fe(e){return!e||!1!==e.writable&&!("function"==typeof e.get&&typeof e.set>"u")}const Be=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope,we=!("nw"in Y)&&typeof Y.process<"u"&&"[object process]"==={}.toString.call(Y.process),Ae=!we&&!Be&&!(!Pe||!Te.HTMLElement),Ue=typeof Y.process<"u"&&"[object process]"==={}.toString.call(Y.process)&&!Be&&!(!Pe||!Te.HTMLElement),Re={},We=function(e){if(!(e=e||Y.event))return;let n=Re[e.type];n||(n=Re[e.type]=j("ON_PROPERTY"+e.type));const i=this||e.target||Y,o=i[n];let c;return Ae&&i===Te&&"error"===e.type?(c=o&&o.call(this,e.message,e.filename,e.lineno,e.colno,e.error),!0===c&&e.preventDefault()):(c=o&&o.apply(this,arguments),null!=c&&!c&&e.preventDefault()),c};function qe(e,n,i){let o=ie(e,n);if(!o&&i&&ie(i,n)&&(o={enumerable:!0,configurable:!0}),!o||!o.configurable)return;const c=j("on"+n+"patched");if(e.hasOwnProperty(c)&&e[c])return;delete o.writable,delete o.value;const a=o.get,y=o.set,d=n.slice(2);let b=Re[d];b||(b=Re[d]=j("ON_PROPERTY"+d)),o.set=function(v){let p=this;!p&&e===Y&&(p=Y),p&&("function"==typeof p[b]&&p.removeEventListener(d,We),y&&y.call(p,null),p[b]=v,"function"==typeof v&&p.addEventListener(d,We,!1))},o.get=function(){let v=this;if(!v&&e===Y&&(v=Y),!v)return null;const p=v[b];if(p)return p;if(a){let M=a.call(this);if(M)return o.set.call(this,M),"function"==typeof v[ct]&&v.removeAttribute(n),M}return null},Ee(e,n,o),e[c]=!0}function Xe(e,n,i){if(n)for(let o=0;ofunction(y,d){const b=i(y,d);return b.cbIdx>=0&&"function"==typeof d[b.cbIdx]?Me(b.name,d[b.cbIdx],b,c):a.apply(y,d)})}function ue(e,n){e[j("OriginalDelegate")]=n}let ze=!1,je=!1;function ft(){if(ze)return je;ze=!0;try{const e=Te.navigator.userAgent;(-1!==e.indexOf("MSIE ")||-1!==e.indexOf("Trident/")||-1!==e.indexOf("Edge/"))&&(je=!0)}catch{}return je}Zone.__load_patch("ZoneAwarePromise",(e,n,i)=>{const o=Object.getOwnPropertyDescriptor,c=Object.defineProperty,y=i.symbol,d=[],b=!1!==e[y("DISABLE_WRAPPING_UNCAUGHT_PROMISE_REJECTION")],v=y("Promise"),p=y("then"),M="__creationTrace__";i.onUnhandledError=l=>{if(i.showUncaughtError()){const u=l&&l.rejection;u?console.error("Unhandled Promise rejection:",u instanceof Error?u.message:u,"; Zone:",l.zone.name,"; Task:",l.task&&l.task.source,"; Value:",u,u instanceof Error?u.stack:void 0):console.error(l)}},i.microtaskDrainDone=()=>{for(;d.length;){const l=d.shift();try{l.zone.runGuarded(()=>{throw l.throwOriginal?l.rejection:l})}catch(u){N(u)}}};const Z=y("unhandledPromiseRejectionHandler");function N(l){i.onUnhandledError(l);try{const u=n[Z];"function"==typeof u&&u.call(this,l)}catch{}}function B(l){return l&&l.then}function H(l){return l}function J(l){return t.reject(l)}const q=y("state"),R=y("value"),_=y("finally"),K=y("parentPromiseValue"),x=y("parentPromiseState"),X="Promise.then",A=null,E=!0,G=!1,h=0;function I(l,u){return s=>{try{z(l,u,s)}catch(f){z(l,!1,f)}}}const P=function(){let l=!1;return function(s){return function(){l||(l=!0,s.apply(null,arguments))}}},Q="Promise resolved with itself",oe=y("currentTaskTrace");function z(l,u,s){const f=P();if(l===s)throw new TypeError(Q);if(l[q]===A){let g=null;try{("object"==typeof s||"function"==typeof s)&&(g=s&&s.then)}catch(w){return f(()=>{z(l,!1,w)})(),l}if(u!==G&&s instanceof t&&s.hasOwnProperty(q)&&s.hasOwnProperty(R)&&s[q]!==A)re(s),z(l,s[q],s[R]);else if(u!==G&&"function"==typeof g)try{g.call(s,f(I(l,u)),f(I(l,!1)))}catch(w){f(()=>{z(l,!1,w)})()}else{l[q]=u;const w=l[R];if(l[R]=s,l[_]===_&&u===E&&(l[q]=l[x],l[R]=l[K]),u===G&&s instanceof Error){const m=n.currentTask&&n.currentTask.data&&n.currentTask.data[M];m&&c(s,oe,{configurable:!0,enumerable:!1,writable:!0,value:m})}for(let m=0;m{try{const D=l[R],S=!!s&&_===s[_];S&&(s[K]=D,s[x]=w);const O=u.run(m,void 0,S&&m!==J&&m!==H?[]:[D]);z(s,!0,O)}catch(D){z(s,!1,D)}},s)}const L=function(){},T=e.AggregateError;class t{static toString(){return"function ZoneAwarePromise() { [native code] }"}static resolve(u){return z(new this(null),E,u)}static reject(u){return z(new this(null),G,u)}static any(u){if(!u||"function"!=typeof u[Symbol.iterator])return Promise.reject(new T([],"All promises were rejected"));const s=[];let f=0;try{for(let m of u)f++,s.push(t.resolve(m))}catch{return Promise.reject(new T([],"All promises were rejected"))}if(0===f)return Promise.reject(new T([],"All promises were rejected"));let g=!1;const w=[];return new t((m,D)=>{for(let S=0;S{g||(g=!0,m(O))},O=>{w.push(O),f--,0===f&&(g=!0,D(new T(w,"All promises were rejected")))})})}static race(u){let s,f,g=new this((D,S)=>{s=D,f=S});function w(D){s(D)}function m(D){f(D)}for(let D of u)B(D)||(D=this.resolve(D)),D.then(w,m);return g}static all(u){return t.allWithCallback(u)}static allSettled(u){return(this&&this.prototype instanceof t?this:t).allWithCallback(u,{thenCallback:f=>({status:"fulfilled",value:f}),errorCallback:f=>({status:"rejected",reason:f})})}static allWithCallback(u,s){let f,g,w=new this((O,V)=>{f=O,g=V}),m=2,D=0;const S=[];for(let O of u){B(O)||(O=this.resolve(O));const V=D;try{O.then(F=>{S[V]=s?s.thenCallback(F):F,m--,0===m&&f(S)},F=>{s?(S[V]=s.errorCallback(F),m--,0===m&&f(S)):g(F)})}catch(F){g(F)}m++,D++}return m-=2,0===m&&f(S),w}constructor(u){const s=this;if(!(s instanceof t))throw new Error("Must be an instanceof Promise.");s[q]=A,s[R]=[];try{const f=P();u&&u(f(I(s,E)),f(I(s,G)))}catch(f){z(s,!1,f)}}get[Symbol.toStringTag](){return"Promise"}get[Symbol.species](){return t}then(u,s){let f=this.constructor?.[Symbol.species];(!f||"function"!=typeof f)&&(f=this.constructor||t);const g=new f(L),w=n.current;return this[q]==A?this[R].push(w,g,u,s):ee(this,w,g,u,s),g}catch(u){return this.then(null,u)}finally(u){let s=this.constructor?.[Symbol.species];(!s||"function"!=typeof s)&&(s=t);const f=new s(L);f[_]=_;const g=n.current;return this[q]==A?this[R].push(g,f,u,u):ee(this,g,f,u,u),f}}t.resolve=t.resolve,t.reject=t.reject,t.race=t.race,t.all=t.all;const r=e[v]=e.Promise;e.Promise=t;const k=y("thenPatched");function C(l){const u=l.prototype,s=o(u,"then");if(s&&(!1===s.writable||!s.configurable))return;const f=u.then;u[p]=f,l.prototype.then=function(g,w){return new t((D,S)=>{f.call(this,D,S)}).then(g,w)},l[k]=!0}return i.patchThen=C,r&&(C(r),le(e,"fetch",l=>function $(l){return function(u,s){let f=l.apply(u,s);if(f instanceof t)return f;let g=f.constructor;return g[k]||C(g),f}}(l))),Promise[n.__symbol__("uncaughtPromiseErrors")]=d,t}),Zone.__load_patch("toString",e=>{const n=Function.prototype.toString,i=j("OriginalDelegate"),o=j("Promise"),c=j("Error"),a=function(){if("function"==typeof this){const v=this[i];if(v)return"function"==typeof v?n.call(v):Object.prototype.toString.call(v);if(this===Promise){const p=e[o];if(p)return n.call(p)}if(this===Error){const p=e[c];if(p)return n.call(p)}}return n.call(this)};a[i]=n,Function.prototype.toString=a;const y=Object.prototype.toString;Object.prototype.toString=function(){return"function"==typeof Promise&&this instanceof Promise?"[object Promise]":y.call(this)}});let ye=!1;if(typeof window<"u")try{const e=Object.defineProperty({},"passive",{get:function(){ye=!0}});window.addEventListener("test",e,e),window.removeEventListener("test",e,e)}catch{ye=!1}const ht={useG:!0},te={},Ye={},$e=new RegExp("^"+ke+"(\\w+)(true|false)$"),Ke=j("propagationStopped");function Je(e,n){const i=(n?n(e):e)+ae,o=(n?n(e):e)+ce,c=ke+i,a=ke+o;te[e]={},te[e][ae]=c,te[e][ce]=a}function dt(e,n,i,o){const c=o&&o.add||Se,a=o&&o.rm||Oe,y=o&&o.listeners||"eventListeners",d=o&&o.rmAll||"removeAllListeners",b=j(c),v="."+c+":",p="prependListener",M="."+p+":",Z=function(R,_,K){if(R.isRemoved)return;const x=R.callback;let X;"object"==typeof x&&x.handleEvent&&(R.callback=E=>x.handleEvent(E),R.originalDelegate=x);try{R.invoke(R,_,[K])}catch(E){X=E}const A=R.options;return A&&"object"==typeof A&&A.once&&_[a].call(_,K.type,R.originalDelegate?R.originalDelegate:R.callback,A),X};function N(R,_,K){if(!(_=_||e.event))return;const x=R||_.target||e,X=x[te[_.type][K?ce:ae]];if(X){const A=[];if(1===X.length){const E=Z(X[0],x,_);E&&A.push(E)}else{const E=X.slice();for(let G=0;G{throw G})}}}const B=function(R){return N(this,R,!1)},H=function(R){return N(this,R,!0)};function J(R,_){if(!R)return!1;let K=!0;_&&void 0!==_.useG&&(K=_.useG);const x=_&&_.vh;let X=!0;_&&void 0!==_.chkDup&&(X=_.chkDup);let A=!1;_&&void 0!==_.rt&&(A=_.rt);let E=R;for(;E&&!E.hasOwnProperty(c);)E=de(E);if(!E&&R[c]&&(E=R),!E||E[b])return!1;const G=_&&_.eventNameToString,h={},I=E[b]=E[c],P=E[j(a)]=E[a],Q=E[j(y)]=E[y],oe=E[j(d)]=E[d];let z;_&&_.prepend&&(z=E[j(_.prepend)]=E[_.prepend]);const t=K?function(s){if(!h.isExisting)return I.call(h.target,h.eventName,h.capture?H:B,h.options)}:function(s){return I.call(h.target,h.eventName,s.invoke,h.options)},r=K?function(s){if(!s.isRemoved){const f=te[s.eventName];let g;f&&(g=f[s.capture?ce:ae]);const w=g&&s.target[g];if(w)for(let m=0;mfunction(c,a){c[Ke]=!0,o&&o.apply(c,a)})}function Et(e,n,i,o,c){const a=Zone.__symbol__(o);if(n[a])return;const y=n[a]=n[o];n[o]=function(d,b,v){return b&&b.prototype&&c.forEach(function(p){const M=`${i}.${o}::`+p,Z=b.prototype;try{if(Z.hasOwnProperty(p)){const N=e.ObjectGetOwnPropertyDescriptor(Z,p);N&&N.value?(N.value=e.wrapWithCurrentZone(N.value,M),e._redefineProperty(b.prototype,p,N)):Z[p]&&(Z[p]=e.wrapWithCurrentZone(Z[p],M))}else Z[p]&&(Z[p]=e.wrapWithCurrentZone(Z[p],M))}catch{}}),y.call(n,d,b,v)},e.attachOriginToPatched(n[o],y)}function et(e,n,i){if(!i||0===i.length)return n;const o=i.filter(a=>a.target===e);if(!o||0===o.length)return n;const c=o[0].ignoreProperties;return n.filter(a=>-1===c.indexOf(a))}function tt(e,n,i,o){e&&Xe(e,et(e,n,i),o)}function He(e){return Object.getOwnPropertyNames(e).filter(n=>n.startsWith("on")&&n.length>2).map(n=>n.substring(2))}Zone.__load_patch("util",(e,n,i)=>{const o=He(e);i.patchOnProperties=Xe,i.patchMethod=le,i.bindArguments=Le,i.patchMacroTask=lt;const c=n.__symbol__("BLACK_LISTED_EVENTS"),a=n.__symbol__("UNPATCHED_EVENTS");e[a]&&(e[c]=e[a]),e[c]&&(n[c]=n[a]=e[c]),i.patchEventPrototype=_t,i.patchEventTarget=dt,i.isIEOrEdge=ft,i.ObjectDefineProperty=Ee,i.ObjectGetOwnPropertyDescriptor=ie,i.ObjectCreate=ge,i.ArraySlice=Ve,i.patchClass=ve,i.wrapWithCurrentZone=Ie,i.filterProperties=et,i.attachOriginToPatched=ue,i._redefineProperty=Object.defineProperty,i.patchCallbacks=Et,i.getGlobalObjects=()=>({globalSources:Ye,zoneSymbolEventNames:te,eventNames:o,isBrowser:Ae,isMix:Ue,isNode:we,TRUE_STR:ce,FALSE_STR:ae,ZONE_SYMBOL_PREFIX:ke,ADD_EVENT_LISTENER_STR:Se,REMOVE_EVENT_LISTENER_STR:Oe})});const Ce=j("zoneTask");function pe(e,n,i,o){let c=null,a=null;i+=o;const y={};function d(v){const p=v.data;return p.args[0]=function(){return v.invoke.apply(this,arguments)},p.handleId=c.apply(e,p.args),v}function b(v){return a.call(e,v.data.handleId)}c=le(e,n+=o,v=>function(p,M){if("function"==typeof M[0]){const Z={isPeriodic:"Interval"===o,delay:"Timeout"===o||"Interval"===o?M[1]||0:void 0,args:M},N=M[0];M[0]=function(){try{return N.apply(this,arguments)}finally{Z.isPeriodic||("number"==typeof Z.handleId?delete y[Z.handleId]:Z.handleId&&(Z.handleId[Ce]=null))}};const B=Me(n,M[0],Z,d,b);if(!B)return B;const H=B.data.handleId;return"number"==typeof H?y[H]=B:H&&(H[Ce]=B),H&&H.ref&&H.unref&&"function"==typeof H.ref&&"function"==typeof H.unref&&(B.ref=H.ref.bind(H),B.unref=H.unref.bind(H)),"number"==typeof H||H?H:B}return v.apply(e,M)}),a=le(e,i,v=>function(p,M){const Z=M[0];let N;"number"==typeof Z?N=y[Z]:(N=Z&&Z[Ce],N||(N=Z)),N&&"string"==typeof N.type?"notScheduled"!==N.state&&(N.cancelFn&&N.data.isPeriodic||0===N.runCount)&&("number"==typeof Z?delete y[Z]:Z&&(Z[Ce]=null),N.zone.cancelTask(N)):v.apply(e,M)})}Zone.__load_patch("legacy",e=>{const n=e[Zone.__symbol__("legacyPatch")];n&&n()}),Zone.__load_patch("timers",e=>{const n="set",i="clear";pe(e,n,i,"Timeout"),pe(e,n,i,"Interval"),pe(e,n,i,"Immediate")}),Zone.__load_patch("requestAnimationFrame",e=>{pe(e,"request","cancel","AnimationFrame"),pe(e,"mozRequest","mozCancel","AnimationFrame"),pe(e,"webkitRequest","webkitCancel","AnimationFrame")}),Zone.__load_patch("blocking",(e,n)=>{const i=["alert","prompt","confirm"];for(let o=0;ofunction(b,v){return n.current.run(a,e,v,d)})}),Zone.__load_patch("EventTarget",(e,n,i)=>{(function gt(e,n){n.patchEventPrototype(e,n)})(e,i),function mt(e,n){if(Zone[n.symbol("patchEventTarget")])return;const{eventNames:i,zoneSymbolEventNames:o,TRUE_STR:c,FALSE_STR:a,ZONE_SYMBOL_PREFIX:y}=n.getGlobalObjects();for(let b=0;b{ve("MutationObserver"),ve("WebKitMutationObserver")}),Zone.__load_patch("IntersectionObserver",(e,n,i)=>{ve("IntersectionObserver")}),Zone.__load_patch("FileReader",(e,n,i)=>{ve("FileReader")}),Zone.__load_patch("on_property",(e,n,i)=>{!function Tt(e,n){if(we&&!Ue||Zone[e.symbol("patchEvents")])return;const i=n.__Zone_ignore_on_properties;let o=[];if(Ae){const c=window;o=o.concat(["Document","SVGElement","Element","HTMLElement","HTMLBodyElement","HTMLMediaElement","HTMLFrameSetElement","HTMLFrameElement","HTMLIFrameElement","HTMLMarqueeElement","Worker"]);const a=function ut(){try{const e=Te.navigator.userAgent;if(-1!==e.indexOf("MSIE ")||-1!==e.indexOf("Trident/"))return!0}catch{}return!1}()?[{target:c,ignoreProperties:["error"]}]:[];tt(c,He(c),i&&i.concat(a),de(c))}o=o.concat(["XMLHttpRequest","XMLHttpRequestEventTarget","IDBIndex","IDBRequest","IDBOpenDBRequest","IDBDatabase","IDBTransaction","IDBCursor","WebSocket"]);for(let c=0;c{!function pt(e,n){const{isBrowser:i,isMix:o}=n.getGlobalObjects();(i||o)&&e.customElements&&"customElements"in e&&n.patchCallbacks(n,e.customElements,"customElements","define",["connectedCallback","disconnectedCallback","adoptedCallback","attributeChangedCallback"])}(e,i)}),Zone.__load_patch("XHR",(e,n)=>{!function b(v){const p=v.XMLHttpRequest;if(!p)return;const M=p.prototype;let N=M[Ze],B=M[Ne];if(!N){const h=v.XMLHttpRequestEventTarget;if(h){const I=h.prototype;N=I[Ze],B=I[Ne]}}const H="readystatechange",J="scheduled";function q(h){const I=h.data,P=I.target;P[a]=!1,P[d]=!1;const Q=P[c];N||(N=P[Ze],B=P[Ne]),Q&&B.call(P,H,Q);const oe=P[c]=()=>{if(P.readyState===P.DONE)if(!I.aborted&&P[a]&&h.state===J){const U=P[n.__symbol__("loadfalse")];if(0!==P.status&&U&&U.length>0){const re=h.invoke;h.invoke=function(){const ee=P[n.__symbol__("loadfalse")];for(let W=0;Wfunction(h,I){return h[o]=0==I[2],h[y]=I[1],K.apply(h,I)}),X=j("fetchTaskAborting"),A=j("fetchTaskScheduling"),E=le(M,"send",()=>function(h,I){if(!0===n.current[A]||h[o])return E.apply(h,I);{const P={target:h,url:h[y],isPeriodic:!1,args:I,aborted:!1},Q=Me("XMLHttpRequest.send",R,P,q,_);h&&!0===h[d]&&!P.aborted&&Q.state===J&&Q.invoke()}}),G=le(M,"abort",()=>function(h,I){const P=function Z(h){return h[i]}(h);if(P&&"string"==typeof P.type){if(null==P.cancelFn||P.data&&P.data.aborted)return;P.zone.cancelTask(P)}else if(!0===n.current[X])return G.apply(h,I)})}(e);const i=j("xhrTask"),o=j("xhrSync"),c=j("xhrListener"),a=j("xhrScheduled"),y=j("xhrURL"),d=j("xhrErrorBeforeScheduled")}),Zone.__load_patch("geolocation",e=>{e.navigator&&e.navigator.geolocation&&function at(e,n){const i=e.constructor.name;for(let o=0;o{const b=function(){return d.apply(this,Le(arguments,i+"."+c))};return ue(b,d),b})(a)}}}(e.navigator.geolocation,["getCurrentPosition","watchPosition"])}),Zone.__load_patch("PromiseRejectionEvent",(e,n)=>{function i(o){return function(c){Qe(e,o).forEach(y=>{const d=e.PromiseRejectionEvent;if(d){const b=new d(o,{promise:c.promise,reason:c.rejection});y.invoke(b)}})}}e.PromiseRejectionEvent&&(n[j("unhandledPromiseRejectionHandler")]=i("unhandledrejection"),n[j("rejectionHandledHandler")]=i("rejectionhandled"))}),Zone.__load_patch("queueMicrotask",(e,n,i)=>{!function yt(e,n){n.patchMethod(e,"queueMicrotask",i=>function(o,c){Zone.current.scheduleMicroTask("queueMicrotask",c[0])})}(e,i)})}},ie=>{ie(ie.s=432)}]); + +"use strict";(self.webpackChunkcoverage_app=self.webpackChunkcoverage_app||[]).push([[590],{590:()=>{let Se=null,$i=1;const Ln=Symbol("SIGNAL");function be(e){const n=Se;return Se=e,n}function Lf(e){if((!bo(e)||e.dirty)&&(e.dirty||e.lastCleanEpoch!==$i)){if(!e.producerMustRecompute(e)&&!fl(e))return e.dirty=!1,void(e.lastCleanEpoch=$i);e.producerRecomputeValue(e),e.dirty=!1,e.lastCleanEpoch=$i}}function fl(e){fr(e);for(let n=0;n0}function fr(e){e.producerNode??=[],e.producerIndexOfThis??=[],e.producerLastReadVersion??=[]}let qf=null;function $e(e){return"function"==typeof e}function Qf(e){const t=e(r=>{Error.call(r),r.stack=(new Error).stack});return t.prototype=Object.create(Error.prototype),t.prototype.constructor=t,t}const pl=Qf(e=>function(t){e(this),this.message=t?`${t.length} errors occurred during unsubscription:\n${t.map((r,o)=>`${o+1}) ${r.toString()}`).join("\n ")}`:"",this.name="UnsubscriptionError",this.errors=t});function gl(e,n){if(e){const t=e.indexOf(n);0<=t&&e.splice(t,1)}}class At{constructor(n){this.initialTeardown=n,this.closed=!1,this._parentage=null,this._teardowns=null}unsubscribe(){let n;if(!this.closed){this.closed=!0;const{_parentage:t}=this;if(t)if(this._parentage=null,Array.isArray(t))for(const i of t)i.remove(this);else t.remove(this);const{initialTeardown:r}=this;if($e(r))try{r()}catch(i){n=i instanceof pl?i.errors:[i]}const{_teardowns:o}=this;if(o){this._teardowns=null;for(const i of o)try{Jf(i)}catch(s){n=n??[],s instanceof pl?n=[...n,...s.errors]:n.push(s)}}if(n)throw new pl(n)}}add(n){var t;if(n&&n!==this)if(this.closed)Jf(n);else{if(n instanceof At){if(n.closed||n._hasParent(this))return;n._addParent(this)}(this._teardowns=null!==(t=this._teardowns)&&void 0!==t?t:[]).push(n)}}_hasParent(n){const{_parentage:t}=this;return t===n||Array.isArray(t)&&t.includes(n)}_addParent(n){const{_parentage:t}=this;this._parentage=Array.isArray(t)?(t.push(n),t):t?[t,n]:n}_removeParent(n){const{_parentage:t}=this;t===n?this._parentage=null:Array.isArray(t)&&gl(t,n)}remove(n){const{_teardowns:t}=this;t&&gl(t,n),n instanceof At&&n._removeParent(this)}}At.EMPTY=(()=>{const e=new At;return e.closed=!0,e})();const Yf=At.EMPTY;function Kf(e){return e instanceof At||e&&"closed"in e&&$e(e.remove)&&$e(e.add)&&$e(e.unsubscribe)}function Jf(e){$e(e)?e():e.unsubscribe()}const Vn={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1},zi={setTimeout(...e){const{delegate:n}=zi;return(n?.setTimeout||setTimeout)(...e)},clearTimeout(e){const{delegate:n}=zi;return(n?.clearTimeout||clearTimeout)(e)},delegate:void 0};function Xf(e){zi.setTimeout(()=>{const{onUnhandledError:n}=Vn;if(!n)throw e;n(e)})}function Gi(){}const qw=ml("C",void 0,void 0);function ml(e,n,t){return{kind:e,value:n,error:t}}let Hn=null;function qi(e){if(Vn.useDeprecatedSynchronousErrorHandling){const n=!Hn;if(n&&(Hn={errorThrown:!1,error:null}),e(),n){const{errorThrown:t,error:r}=Hn;if(Hn=null,t)throw r}}else e()}class vl extends At{constructor(n){super(),this.isStopped=!1,n?(this.destination=n,Kf(n)&&n.add(this)):this.destination=Yw}static create(n,t,r){return new eh(n,t,r)}next(n){this.isStopped?yl(function Zw(e){return ml("N",e,void 0)}(n),this):this._next(n)}error(n){this.isStopped?yl(function Ww(e){return ml("E",void 0,e)}(n),this):(this.isStopped=!0,this._error(n))}complete(){this.isStopped?yl(qw,this):(this.isStopped=!0,this._complete())}unsubscribe(){this.closed||(this.isStopped=!0,super.unsubscribe(),this.destination=null)}_next(n){this.destination.next(n)}_error(n){try{this.destination.error(n)}finally{this.unsubscribe()}}_complete(){try{this.destination.complete()}finally{this.unsubscribe()}}}class eh extends vl{constructor(n,t,r){let o;if(super(),$e(n))o=n;else if(n){let i;({next:o,error:t,complete:r}=n),this&&Vn.useDeprecatedNextContext?(i=Object.create(n),i.unsubscribe=()=>this.unsubscribe()):i=n,o=o?.bind(i),t=t?.bind(i),r=r?.bind(i)}this.destination={next:o?_l(o):Gi,error:_l(t??th),complete:r?_l(r):Gi}}}function _l(e,n){return(...t)=>{try{e(...t)}catch(r){Vn.useDeprecatedSynchronousErrorHandling?function Qw(e){Vn.useDeprecatedSynchronousErrorHandling&&Hn&&(Hn.errorThrown=!0,Hn.error=e)}(r):Xf(r)}}}function th(e){throw e}function yl(e,n){const{onStoppedNotification:t}=Vn;t&&zi.setTimeout(()=>t(e,n))}const Yw={closed:!0,next:Gi,error:th,complete:Gi},Cl="function"==typeof Symbol&&Symbol.observable||"@@observable";function Kw(e){return e}let wt=(()=>{class e{constructor(t){t&&(this._subscribe=t)}lift(t){const r=new e;return r.source=this,r.operator=t,r}subscribe(t,r,o){const i=function Xw(e){return e&&e instanceof vl||function Jw(e){return e&&$e(e.next)&&$e(e.error)&&$e(e.complete)}(e)&&Kf(e)}(t)?t:new eh(t,r,o);return qi(()=>{const{operator:s,source:a}=this;i.add(s?s.call(i,a):a?this._subscribe(i):this._trySubscribe(i))}),i}_trySubscribe(t){try{return this._subscribe(t)}catch(r){t.error(r)}}forEach(t,r){return new(r=rh(r))((o,i)=>{let s;s=this.subscribe(a=>{try{t(a)}catch(l){i(l),s?.unsubscribe()}},i,o)})}_subscribe(t){var r;return null===(r=this.source)||void 0===r?void 0:r.subscribe(t)}[Cl](){return this}pipe(...t){return function nh(e){return 0===e.length?Kw:1===e.length?e[0]:function(t){return e.reduce((r,o)=>o(r),t)}}(t)(this)}toPromise(t){return new(t=rh(t))((r,o)=>{let i;this.subscribe(s=>i=s,s=>o(s),()=>r(i))})}}return e.create=n=>new e(n),e})();function rh(e){var n;return null!==(n=e??Vn.Promise)&&void 0!==n?n:Promise}const eb=Qf(e=>function(){e(this),this.name="ObjectUnsubscribedError",this.message="object unsubscribed"});let Dl=(()=>{class e extends wt{constructor(){super(),this.closed=!1,this.observers=[],this.isStopped=!1,this.hasError=!1,this.thrownError=null}lift(t){const r=new oh(this,this);return r.operator=t,r}_throwIfClosed(){if(this.closed)throw new eb}next(t){qi(()=>{if(this._throwIfClosed(),!this.isStopped){const r=this.observers.slice();for(const o of r)o.next(t)}})}error(t){qi(()=>{if(this._throwIfClosed(),!this.isStopped){this.hasError=this.isStopped=!0,this.thrownError=t;const{observers:r}=this;for(;r.length;)r.shift().error(t)}})}complete(){qi(()=>{if(this._throwIfClosed(),!this.isStopped){this.isStopped=!0;const{observers:t}=this;for(;t.length;)t.shift().complete()}})}unsubscribe(){this.isStopped=this.closed=!0,this.observers=null}get observed(){var t;return(null===(t=this.observers)||void 0===t?void 0:t.length)>0}_trySubscribe(t){return this._throwIfClosed(),super._trySubscribe(t)}_subscribe(t){return this._throwIfClosed(),this._checkFinalizedStatuses(t),this._innerSubscribe(t)}_innerSubscribe(t){const{hasError:r,isStopped:o,observers:i}=this;return r||o?Yf:(i.push(t),new At(()=>gl(i,t)))}_checkFinalizedStatuses(t){const{hasError:r,thrownError:o,isStopped:i}=this;r?t.error(o):i&&t.complete()}asObservable(){const t=new wt;return t.source=this,t}}return e.create=(n,t)=>new oh(n,t),e})();class oh extends Dl{constructor(n,t){super(),this.destination=n,this.source=t}next(n){var t,r;null===(r=null===(t=this.destination)||void 0===t?void 0:t.next)||void 0===r||r.call(t,n)}error(n){var t,r;null===(r=null===(t=this.destination)||void 0===t?void 0:t.error)||void 0===r||r.call(t,n)}complete(){var n,t;null===(t=null===(n=this.destination)||void 0===n?void 0:n.complete)||void 0===t||t.call(n)}_subscribe(n){var t,r;return null!==(r=null===(t=this.source)||void 0===t?void 0:t.subscribe(n))&&void 0!==r?r:Yf}}class tb extends Dl{constructor(n){super(),this._value=n}get value(){return this.getValue()}_subscribe(n){const t=super._subscribe(n);return!t.closed&&n.next(this._value),t}getValue(){const{hasError:n,thrownError:t,_value:r}=this;if(n)throw t;return this._throwIfClosed(),r}next(n){super.next(this._value=n)}}function wl(e){return n=>{if(function nb(e){return $e(e?.lift)}(n))return n.lift(function(t){try{return e(t,this)}catch(r){this.error(r)}});throw new TypeError("Unable to lift unknown Observable type")}}class bl extends vl{constructor(n,t,r,o,i){super(n),this.onFinalize=i,this._next=t?function(s){try{t(s)}catch(a){n.error(a)}}:super._next,this._error=o?function(s){try{o(s)}catch(a){n.error(a)}finally{this.unsubscribe()}}:super._error,this._complete=r?function(){try{r()}catch(s){n.error(s)}finally{this.unsubscribe()}}:super._complete}unsubscribe(){var n;const{closed:t}=this;super.unsubscribe(),!t&&(null===(n=this.onFinalize)||void 0===n||n.call(this))}}function El(e,n){return wl((t,r)=>{let o=0;t.subscribe(new bl(r,i=>{r.next(e.call(n,i,o++))}))})}const ih="https://g.co/ng/security#xss";class I extends Error{constructor(n,t){super(function hr(e,n){return`NG0${Math.abs(e)}${n?": "+n:""}`}(n,t)),this.code=n}}function Il(e){return n=>{setTimeout(e,void 0,n)}}const Ee=class rb extends Dl{constructor(n=!1){super(),this.__isAsync=n}emit(n){super.next(n)}subscribe(n,t,r){let o=n,i=t||(()=>null),s=r;if(n&&"object"==typeof n){const l=n;o=l.next?.bind(l),i=l.error?.bind(l),s=l.complete?.bind(l)}this.__isAsync&&(i=Il(i),o&&(o=Il(o)),s&&(s=Il(s)));const a=super.subscribe({next:o,error:i,complete:s});return n instanceof At&&n.add(a),a}};var X=function(e){return e[e.Default=0]="Default",e[e.Host=1]="Host",e[e.Self=2]="Self",e[e.SkipSelf=4]="SkipSelf",e[e.Optional=8]="Optional",e}(X||{});function ke(e){if("string"==typeof e)return e;if(Array.isArray(e))return"["+e.map(ke).join(", ")+"]";if(null==e)return""+e;if(e.overriddenName)return`${e.overriddenName}`;if(e.name)return`${e.name}`;const n=e.toString();if(null==n)return""+n;const t=n.indexOf("\n");return-1===t?n:n.substring(0,t)}function Ml(e,n){return null==e||""===e?null===n?"":n:null==n||""===n?e:e+" "+n}var Zi=function(e){return e[e.OnPush=0]="OnPush",e[e.Default=1]="Default",e}(Zi||{}),Nt=function(e){return e[e.Emulated=0]="Emulated",e[e.None=2]="None",e[e.ShadowDom=3]="ShadowDom",e}(Nt||{});function tn(e){return{toString:e}.toString()}const ae=globalThis,$t={},re=[];function le(e){for(let n in e)if(e[n]===le)return n;throw Error("Could not find renamed property on target object.")}function ab(e,n){for(const t in n)n.hasOwnProperty(t)&&!e.hasOwnProperty(t)&&(e[t]=n[t])}const Eo=le({\u0275cmp:le}),Sl=le({\u0275dir:le}),Tl=le({\u0275pipe:le}),lh=le({\u0275mod:le}),nn=le({\u0275fac:le}),Io=le({__NG_ELEMENT_ID__:le}),ch=le({__NG_ENV_ID__:le});var Ie=function(e){return e[e.None=0]="None",e[e.SignalBased=1]="SignalBased",e[e.HasDecoratorInputTransform=2]="HasDecoratorInputTransform",e}(Ie||{});function uh(e,n,t){let r=e.length;for(;;){const o=e.indexOf(n,t);if(-1===o)return o;if(0===o||e.charCodeAt(o-1)<=32){const i=n.length;if(o+i===r||e.charCodeAt(o+i)<=32)return o}t=o+1}}function Al(e,n,t){let r=0;for(;rn){s=i-1;break}}}for(;ii?"":o[d+1].toLowerCase();const p=8&r?h:null;if(p&&-1!==uh(p,c,0)||2&r&&c!==h){if(xt(r))return!1;s=!0}}}}else{if(!s&&!xt(r)&&!xt(l))return!1;if(s&&xt(l))continue;s=!1,r=l|1&r}}return xt(r)||s}function xt(e){return 0==(1&e)}function db(e,n,t,r){if(null===n)return-1;let o=0;if(r||!t){let i=!1;for(;o-1)for(t++;t0?'="'+a+'"':"")+"]"}else 8&r?o+="."+s:4&r&&(o+=" "+s);else""!==o&&!xt(s)&&(n+=vh(i,o),o=""),r=s,i=i||!xt(r);t++}return""!==o&&(n+=vh(i,o)),n}function rn(e){return tn(()=>{const n=yh(e),t={...n,decls:e.decls,vars:e.vars,template:e.template,consts:e.consts||null,ngContentSelectors:e.ngContentSelectors,onPush:e.changeDetection===Zi.OnPush,directiveDefs:null,pipeDefs:null,dependencies:n.standalone&&e.dependencies||null,getStandaloneInjector:null,signals:e.signals??!1,data:e.data||{},encapsulation:e.encapsulation||Nt.Emulated,styles:e.styles||re,_:null,schemas:e.schemas||null,tView:null,id:""};Ch(t);const r=e.dependencies;return t.directiveDefs=Qi(r,!1),t.pipeDefs=Qi(r,!0),t.id=function wb(e){let n=0;const t=[e.selectors,e.ngContentSelectors,e.hostVars,e.hostAttrs,e.consts,e.vars,e.decls,e.encapsulation,e.standalone,e.signals,e.exportAs,JSON.stringify(e.inputs),JSON.stringify(e.outputs),Object.getOwnPropertyNames(e.type.prototype),!!e.contentQueries,!!e.viewQuery].join("|");for(const o of t)n=Math.imul(31,n)+o.charCodeAt(0)<<0;return n+=2147483648,"c"+n}(t),t})}function yb(e){return Q(e)||Le(e)}function Cb(e){return null!==e}function Bn(e){return tn(()=>({type:e.type,bootstrap:e.bootstrap||re,declarations:e.declarations||re,imports:e.imports||re,exports:e.exports||re,transitiveCompileScopes:null,schemas:e.schemas||null,id:e.id||null}))}function _h(e,n){if(null==e)return $t;const t={};for(const r in e)if(e.hasOwnProperty(r)){const o=e[r];let i,s,a=Ie.None;Array.isArray(o)?(a=o[0],i=o[1],s=o[2]??i):(i=o,s=o),n?(t[i]=a!==Ie.None?[r,a]:r,n[i]=s):t[i]=r}return t}function U(e){return tn(()=>{const n=yh(e);return Ch(n),n})}function at(e){return{type:e.type,name:e.name,factory:null,pure:!1!==e.pure,standalone:!0===e.standalone,onDestroy:e.type.prototype.ngOnDestroy||null}}function Q(e){return e[Eo]||null}function Le(e){return e[Sl]||null}function ze(e){return e[Tl]||null}function yh(e){const n={};return{type:e.type,providersResolver:null,factory:null,hostBindings:e.hostBindings||null,hostVars:e.hostVars||0,hostAttrs:e.hostAttrs||null,contentQueries:e.contentQueries||null,declaredInputs:n,inputTransforms:null,inputConfig:e.inputs||$t,exportAs:e.exportAs||null,standalone:!0===e.standalone,signals:!0===e.signals,selectors:e.selectors||re,viewQuery:e.viewQuery||null,features:e.features||null,setInput:null,findHostDirectiveDefs:null,hostDirectives:null,inputs:_h(e.inputs,n),outputs:_h(e.outputs),debugInfo:null}}function Ch(e){e.features?.forEach(n=>n(e))}function Qi(e,n){if(!e)return null;const t=n?ze:yb;return()=>("function"==typeof e?e():e).map(r=>t(r)).filter(Cb)}const Ce=0,M=1,x=2,Te=3,Ot=4,qe=5,Rt=6,pr=7,he=8,We=9,on=10,V=11,So=12,Dh=13,gr=14,we=15,To=16,mr=17,sn=18,Ao=19,wh=20,yn=21,Yi=22,$n=23,B=25,Nl=1,Ut=7,vr=9,Ae=10;var xl=function(e){return e[e.None=0]="None",e[e.HasTransplantedViews=2]="HasTransplantedViews",e}(xl||{});function Ze(e){return Array.isArray(e)&&"object"==typeof e[Nl]}function Qe(e){return Array.isArray(e)&&!0===e[Nl]}function Ol(e){return 0!=(4&e.flags)}function Un(e){return e.componentOffset>-1}function Ji(e){return 1==(1&e.flags)}function Ft(e){return!!e.template}function Rl(e){return 0!=(512&e[x])}let Th=!1;function de(e){for(;Array.isArray(e);)e=e[Ce];return e}function xo(e,n){return de(n[e])}function tt(e,n){return de(n[e.index])}function Oo(e,n){return e.data[n]}function mt(e,n){const t=n[e];return Ze(t)?t:t[Ce]}function Ll(e){return 128==(128&e[x])}function zt(e,n){return null==n?null:e[n]}function Ah(e){e[mr]=0}function Nb(e){1024&e[x]||(e[x]|=1024,Ll(e)&&Ro(e))}function Vl(e){return!!(9216&e[x]||e[$n]?.dirty)}function Hl(e){Vl(e)?Ro(e):64&e[x]&&(function Mb(){return Th}()?(e[x]|=1024,Ro(e)):e[on].changeDetectionScheduler?.notify())}function Ro(e){e[on].changeDetectionScheduler?.notify();let n=zn(e);for(;null!==n&&!(8192&n[x])&&(n[x]|=8192,Ll(n));)n=zn(n)}function zn(e){const n=e[Te];return Qe(n)?n[Te]:n}const L={lFrame:Hh(null),bindingsEnabled:!0,skipHydrationRootTNode:null};function Oh(){return L.bindingsEnabled}function C(){return L.lFrame.lView}function Y(){return L.lFrame.tView}function W(e){return L.lFrame.contextLView=e,e[he]}function Z(e){return L.lFrame.contextLView=null,e}function ce(){let e=Rh();for(;null!==e&&64===e.type;)e=e.parent;return e}function Rh(){return L.lFrame.currentTNode}function Gt(e,n){const t=L.lFrame;t.currentTNode=e,t.isParent=n}function jl(){return L.lFrame.isParent}function $l(){L.lFrame.isParent=!1}function nt(){const e=L.lFrame;let n=e.bindingRootIndex;return-1===n&&(n=e.bindingRootIndex=e.tView.bindingStartIndex),n}function Pt(){return L.lFrame.bindingIndex++}function ln(e){const n=L.lFrame,t=n.bindingIndex;return n.bindingIndex=n.bindingIndex+e,t}function jb(e,n){const t=L.lFrame;t.bindingIndex=t.bindingRootIndex=e,Ul(n)}function Ul(e){L.lFrame.currentDirectiveIndex=e}function es(e){L.lFrame.currentQueryIndex=e}function Ub(e){const n=e[M];return 2===n.type?n.declTNode:1===n.type?e[qe]:null}function Lh(e,n,t){if(t&X.SkipSelf){let o=n,i=e;for(;!(o=o.parent,null!==o||t&X.Host||(o=Ub(i),null===o||(i=i[gr],10&o.type))););if(null===o)return!1;n=o,e=i}const r=L.lFrame=Vh();return r.currentTNode=n,r.lView=e,!0}function ql(e){const n=Vh(),t=e[M];L.lFrame=n,n.currentTNode=t.firstChild,n.lView=e,n.tView=t,n.contextLView=e,n.bindingIndex=t.bindingStartIndex,n.inI18n=!1}function Vh(){const e=L.lFrame,n=null===e?null:e.child;return null===n?Hh(e):n}function Hh(e){const n={currentTNode:null,isParent:!0,lView:null,tView:null,selectedIndex:-1,contextLView:null,elementDepthCount:0,currentNamespace:null,currentDirectiveIndex:-1,bindingRootIndex:-1,bindingIndex:-1,currentQueryIndex:0,parent:e,child:null,inI18n:!1};return null!==e&&(e.child=n),n}function Bh(){const e=L.lFrame;return L.lFrame=e.parent,e.currentTNode=null,e.lView=null,e}const jh=Bh;function Wl(){const e=Bh();e.isParent=!0,e.tView=null,e.selectedIndex=-1,e.contextLView=null,e.elementDepthCount=0,e.currentDirectiveIndex=-1,e.currentNamespace=null,e.bindingRootIndex=-1,e.bindingIndex=-1,e.currentQueryIndex=0}function Ye(){return L.lFrame.selectedIndex}function Gn(e){L.lFrame.selectedIndex=e}function pe(){const e=L.lFrame;return Oo(e.tView,e.selectedIndex)}let zh=!0;function ts(){return zh}function Cn(e){zh=e}function Zb(){return Cr(ce(),C())}function Cr(e,n){return new kt(tt(e,n))}let Kl,kt=(()=>{class e{constructor(t){this.nativeElement=t}static#e=this.__NG_ELEMENT_ID__=Zb}return e})();function Dr(e,n){e.forEach(t=>Array.isArray(t)?Dr(t,n):n(t))}function qh(e,n,t){n>=e.length?e.push(t):e.splice(n,0,t)}function ns(e,n){return n>=e.length-1?e.pop():e.splice(n,1)[0]}function vt(e,n,t){let r=wr(e,n);return r>=0?e[1|r]=t:(r=~r,function Wh(e,n,t,r){let o=e.length;if(o==n)e.push(t,r);else if(1===o)e.push(r,e[0]),e[0]=t;else{for(o--,e.push(e[o-1],e[o]);o>n;)e[o]=e[o-2],o--;e[n]=t,e[n+1]=r}}(e,r,n,t)),r}function Ql(e,n){const t=wr(e,n);if(t>=0)return e[1|t]}function wr(e,n){return function Zh(e,n,t){let r=0,o=e.length>>t;for(;o!==r;){const i=r+(o-r>>1),s=e[i<n?o=i:r=i+1}return~(o<tE}),tE="ng",Xh=new R(""),br=new R("",{providedIn:"platform",factory:()=>"unknown"}),ep=new R("",{providedIn:"root",factory:()=>function Dn(){if(void 0!==Kl)return Kl;if(typeof document<"u")return document;throw new I(210,!1)}().body?.querySelector("[ngCspNonce]")?.getAttribute("ngCspNonce")||null}),oE=le({__forward_ref__:le});function ge(e){return e.__forward_ref__=ge,e.toString=function(){return ke(this())},e}function P(e){return us(e)?e():e}function us(e){return"function"==typeof e&&e.hasOwnProperty(oE)&&e.__forward_ref__===ge}function rc(e){return e&&!!e.\u0275providers}function j(e){return"string"==typeof e?e:null==e?"":String(e)}function oc(e,n){throw new I(-201,!1)}let ic;function ct(e){const n=ic;return ic=e,n}function rp(e,n,t){const r=ss(e);return r&&"root"==r.providedIn?void 0===r.value?r.value=r.factory():r.value:t&X.Optional?null:void 0!==n?n:void oc()}const ko={},sc="__NG_DI_FLAG__",ds="ngTempTokenPath",uE=/\n/gm,op="__source";let Er;function bn(e){const n=Er;return Er=e,n}function hE(e,n=X.Default){if(void 0===Er)throw new I(-203,!1);return null===Er?rp(e,void 0,n):Er.get(e,n&X.Optional?null:void 0,n)}function ne(e,n=X.Default){return(function np(){return ic}()||hE)(P(e),n)}function ee(e,n=X.Default){return ne(e,fs(n))}function fs(e){return typeof e>"u"||"number"==typeof e?e:0|(e.optional&&8)|(e.host&&1)|(e.self&&2)|(e.skipSelf&&4)}function ac(e){const n=[];for(let t=0;tnull;function gc(e,n,t=!1){return sp(e,n,t)}const Ar="__parameters__";function xr(e,n,t){return tn(()=>{const r=function yc(e){return function(...t){if(e){const r=e(...t);for(const o in r)this[o]=r[o]}}}(n);function o(...i){if(this instanceof o)return r.apply(this,i),this;const s=new o(...i);return a.annotation=s,a;function a(l,c,u){const d=l.hasOwnProperty(Ar)?l[Ar]:Object.defineProperty(l,Ar,{value:[]})[Ar];for(;d.length<=u;)d.push(null);return(d[u]=d[u]||[]).push(s),l}}return t&&(o.prototype=Object.create(t.prototype)),o.prototype.ngMetadataName=e,o.annotationCls=o,o})}const Cc=Lo(xr("Optional"),8),Dc=Lo(xr("SkipSelf"),4);function qn(e,n){return e.hasOwnProperty(nn)?e[nn]:null}const Or=new R(""),fp=new R("",-1),wc=new R("");class _s{get(n,t=ko){if(t===ko){const r=new Error(`NullInjectorError: No provider for ${ke(n)}!`);throw r.name="NullInjectorError",r}return t}}function TE(...e){return{\u0275providers:hp(0,e),\u0275fromNgModule:!0}}function hp(e,...n){const t=[],r=new Set;let o;const i=s=>{t.push(s)};return Dr(n,s=>{const a=s;ys(a,i,[],r)&&(o||=[],o.push(a))}),void 0!==o&&pp(o,i),t}function pp(e,n){for(let t=0;t{n(i,r)})}}function ys(e,n,t,r){if(!(e=P(e)))return!1;let o=null,i=as(e);const s=!i&&Q(e);if(i||s){if(s&&!s.standalone)return!1;o=e}else{const l=e.ngModule;if(i=as(l),!i)return!1;o=l}const a=r.has(o);if(s){if(a)return!1;if(r.add(o),s.dependencies){const l="function"==typeof s.dependencies?s.dependencies():s.dependencies;for(const c of l)ys(c,n,t,r)}}else{if(!i)return!1;{if(null!=i.imports&&!a){let c;r.add(o);try{Dr(i.imports,u=>{ys(u,n,t,r)&&(c||=[],c.push(u))})}finally{}void 0!==c&&pp(c,n)}if(!a){const c=qn(o)||(()=>new o);n({provide:o,useFactory:c,deps:re},o),n({provide:wc,useValue:o,multi:!0},o),n({provide:Or,useValue:()=>ne(o),multi:!0},o)}const l=i.providers;if(null!=l&&!a){const c=e;Ec(l,u=>{n(u,c)})}}}return o!==e&&void 0!==e.providers}function Ec(e,n){for(let t of e)rc(t)&&(t=t.\u0275providers),Array.isArray(t)?Ec(t,n):n(t)}const AE=le({provide:String,useValue:le});function Ic(e){return null!==e&&"object"==typeof e&&AE in e}function Wn(e){return"function"==typeof e}const Mc=new R(""),Cs={},xE={};let Sc;function Ds(){return void 0===Sc&&(Sc=new _s),Sc}class cn{}class Rr extends cn{get destroyed(){return this._destroyed}constructor(n,t,r,o){super(),this.parent=t,this.source=r,this.scopes=o,this.records=new Map,this._ngOnDestroyHooks=new Set,this._onDestroyHooks=[],this._destroyed=!1,Ac(n,s=>this.processProvider(s)),this.records.set(fp,Fr(void 0,this)),o.has("environment")&&this.records.set(cn,Fr(void 0,this));const i=this.records.get(Mc);null!=i&&"string"==typeof i.value&&this.scopes.add(i.value),this.injectorDefTypes=new Set(this.get(wc,re,X.Self))}destroy(){this.assertNotDestroyed(),this._destroyed=!0;try{for(const t of this._ngOnDestroyHooks)t.ngOnDestroy();const n=this._onDestroyHooks;this._onDestroyHooks=[];for(const t of n)t()}finally{this.records.clear(),this._ngOnDestroyHooks.clear(),this.injectorDefTypes.clear()}}onDestroy(n){return this.assertNotDestroyed(),this._onDestroyHooks.push(n),()=>this.removeOnDestroy(n)}runInContext(n){this.assertNotDestroyed();const t=bn(this),r=ct(void 0);try{return n()}finally{bn(t),ct(r)}}get(n,t=ko,r=X.Default){if(this.assertNotDestroyed(),n.hasOwnProperty(ch))return n[ch](this);r=fs(r);const i=bn(this),s=ct(void 0);try{if(!(r&X.SkipSelf)){let l=this.records.get(n);if(void 0===l){const c=function kE(e){return"function"==typeof e||"object"==typeof e&&e instanceof R}(n)&&ss(n);l=c&&this.injectableDefInScope(c)?Fr(Tc(n),Cs):null,this.records.set(n,l)}if(null!=l)return this.hydrate(n,l)}return(r&X.Self?Ds():this.parent).get(n,t=r&X.Optional&&t===ko?null:t)}catch(a){if("NullInjectorError"===a.name){if((a[ds]=a[ds]||[]).unshift(ke(n)),i)throw a;return function gE(e,n,t,r){const o=e[ds];throw n[op]&&o.unshift(n[op]),e.message=function mE(e,n,t,r=null){e=e&&"\n"===e.charAt(0)&&"\u0275"==e.charAt(1)?e.slice(2):e;let o=ke(n);if(Array.isArray(n))o=n.map(ke).join(" -> ");else if("object"==typeof n){let i=[];for(let s in n)if(n.hasOwnProperty(s)){let a=n[s];i.push(s+":"+("string"==typeof a?JSON.stringify(a):ke(a)))}o=`{${i.join(", ")}}`}return`${t}${r?"("+r+")":""}[${o}]: ${e.replace(uE,"\n ")}`}("\n"+e.message,o,t,r),e.ngTokenPath=o,e[ds]=null,e}(a,n,"R3InjectorError",this.source)}throw a}finally{ct(s),bn(i)}}resolveInjectorInitializers(){const n=bn(this),t=ct(void 0);try{const o=this.get(Or,re,X.Self);for(const i of o)i()}finally{bn(n),ct(t)}}toString(){const n=[],t=this.records;for(const r of t.keys())n.push(ke(r));return`R3Injector[${n.join(", ")}]`}assertNotDestroyed(){if(this._destroyed)throw new I(205,!1)}processProvider(n){let t=Wn(n=P(n))?n:P(n&&n.provide);const r=function RE(e){return Ic(e)?Fr(void 0,e.useValue):Fr(vp(e),Cs)}(n);if(!Wn(n)&&!0===n.multi){let o=this.records.get(t);o||(o=Fr(void 0,Cs,!0),o.factory=()=>ac(o.multi),this.records.set(t,o)),t=n,o.multi.push(n)}this.records.set(t,r)}hydrate(n,t){return t.value===Cs&&(t.value=xE,t.value=t.factory()),"object"==typeof t.value&&t.value&&function PE(e){return null!==e&&"object"==typeof e&&"function"==typeof e.ngOnDestroy}(t.value)&&this._ngOnDestroyHooks.add(t.value),t.value}injectableDefInScope(n){if(!n.providedIn)return!1;const t=P(n.providedIn);return"string"==typeof t?"any"===t||this.scopes.has(t):this.injectorDefTypes.has(t)}removeOnDestroy(n){const t=this._onDestroyHooks.indexOf(n);-1!==t&&this._onDestroyHooks.splice(t,1)}}function Tc(e){const n=ss(e),t=null!==n?n.factory:qn(e);if(null!==t)return t;if(e instanceof R)throw new I(204,!1);if(e instanceof Function)return function OE(e){if(e.length>0)throw new I(204,!1);const t=function Xb(e){return e&&(e[ls]||e[Jh])||null}(e);return null!==t?()=>t.factory(e):()=>new e}(e);throw new I(204,!1)}function vp(e,n,t){let r;if(Wn(e)){const o=P(e);return qn(o)||Tc(o)}if(Ic(e))r=()=>P(e.useValue);else if(function mp(e){return!(!e||!e.useFactory)}(e))r=()=>e.useFactory(...ac(e.deps||[]));else if(function gp(e){return!(!e||!e.useExisting)}(e))r=()=>ne(P(e.useExisting));else{const o=P(e&&(e.useClass||e.provide));if(!function FE(e){return!!e.deps}(e))return qn(o)||Tc(o);r=()=>new o(...ac(e.deps))}return r}function Fr(e,n,t=!1){return{factory:e,value:n,multi:t?[]:void 0}}function Ac(e,n){for(const t of e)Array.isArray(t)?Ac(t,n):t&&rc(t)?Ac(t.\u0275providers,n):n(t)}class qE{constructor(n,t,r){this.previousValue=n,this.currentValue=t,this.firstChange=r}isFirstChange(){return this.firstChange}}function yp(e,n,t,r){null!==n?n.applyValueToInputSignal(n,r):e[t]=r}function un(){return Cp}function Cp(e){return e.type.prototype.ngOnChanges&&(e.setInput=ZE),WE}function WE(){const e=wp(this),n=e?.current;if(n){const t=e.previous;if(t===$t)e.previous=n;else for(let r in n)t[r]=n[r];e.current=null,this.ngOnChanges(n)}}function ZE(e,n,t,r,o){const i=this.declaredInputs[r],s=wp(e)||function QE(e,n){return e[Dp]=n}(e,{previous:$t,current:null}),a=s.current||(s.current={}),l=s.previous,c=l[i];a[i]=new qE(c&&c.currentValue,t,l===$t),yp(e,n,o,t)}un.ngInherit=!0;const Dp="__ngSimpleChanges__";function wp(e){return e[Dp]||null}const qt=function(e,n,t){};function bs(e,n){for(let t=n.directiveStart,r=n.directiveEnd;t=r)break}else n[l]<0&&(e[mr]+=65536),(a>14>16&&(3&e[x])===n&&(e[x]+=16384,Ep(a,i)):Ep(a,i)}const kr=-1;class $o{constructor(n,t,r){this.factory=n,this.resolving=!1,this.canSeeViewProviders=t,this.injectImpl=r}}function Pc(e){return e!==kr}function Uo(e){return 32767&e}function zo(e,n){let t=function rI(e){return e>>16}(e),r=n;for(;t>0;)r=r[gr],t--;return r}let kc=!0;function Ms(e){const n=kc;return kc=e,n}const Ip=255,Mp=5;let oI=0;const Wt={};function Ss(e,n){const t=Sp(e,n);if(-1!==t)return t;const r=n[M];r.firstCreatePass&&(e.injectorIndex=n.length,Lc(r.data,e),Lc(n,null),Lc(r.blueprint,null));const o=Ts(e,n),i=e.injectorIndex;if(Pc(o)){const s=Uo(o),a=zo(o,n),l=a[M].data;for(let c=0;c<8;c++)n[i+c]=a[s+c]|l[s+c]}return n[i+8]=o,i}function Lc(e,n){e.push(0,0,0,0,0,0,0,0,n)}function Sp(e,n){return-1===e.injectorIndex||e.parent&&e.parent.injectorIndex===e.injectorIndex||null===n[e.injectorIndex+8]?-1:e.injectorIndex}function Ts(e,n){if(e.parent&&-1!==e.parent.injectorIndex)return e.parent.injectorIndex;let t=0,r=null,o=n;for(;null!==o;){if(r=Fp(o),null===r)return kr;if(t++,o=o[gr],-1!==r.injectorIndex)return r.injectorIndex|t<<16}return kr}function Vc(e,n,t){!function iI(e,n,t){let r;"string"==typeof t?r=t.charCodeAt(0)||0:t.hasOwnProperty(Io)&&(r=t[Io]),null==r&&(r=t[Io]=oI++);const o=r&Ip;n.data[e+(o>>Mp)]|=1<=0?n&Ip:cI:n}(t);if("function"==typeof i){if(!Lh(n,e,r))return r&X.Host?Tp(o,0,r):Ap(n,t,r,o);try{let s;if(s=i(r),null!=s||r&X.Optional)return s;oc()}finally{jh()}}else if("number"==typeof i){let s=null,a=Sp(e,n),l=kr,c=r&X.Host?n[we][qe]:null;for((-1===a||r&X.SkipSelf)&&(l=-1===a?Ts(e,n):n[a+8],l!==kr&&Rp(r,!1)?(s=n[M],a=Uo(l),n=zo(l,n)):a=-1);-1!==a;){const u=n[M];if(Op(i,a,u.data)){const d=aI(a,n,t,s,r,c);if(d!==Wt)return d}l=n[a+8],l!==kr&&Rp(r,n[M].data[a+8]===c)&&Op(i,a,n)?(s=u,a=Uo(l),n=zo(l,n)):a=-1}}return o}function aI(e,n,t,r,o,i){const s=n[M],a=s.data[e+8],u=function As(e,n,t,r,o){const i=e.providerIndexes,s=n.data,a=1048575&i,l=e.directiveStart,u=i>>20,h=o?a+u:e.directiveEnd;for(let p=r?a:a+u;p=l&&m.type===t)return p}if(o){const p=s[l];if(p&&Ft(p)&&p.type===t)return l}return null}(a,s,t,null==r?Un(a)&&kc:r!=s&&0!=(3&a.type),o&X.Host&&i===a);return null!==u?Zn(n,s,u,a):Wt}function Zn(e,n,t,r){let o=e[t];const i=n.data;if(function XE(e){return e instanceof $o}(o)){const s=o;s.resolving&&function aE(e,n){throw n&&n.join(" > "),new I(-200,e)}(function oe(e){return"function"==typeof e?e.name||e.toString():"object"==typeof e&&null!=e&&"function"==typeof e.type?e.type.name||e.type.toString():j(e)}(i[t]));const a=Ms(s.canSeeViewProviders);s.resolving=!0;const c=s.injectImpl?ct(s.injectImpl):null;Lh(e,r,X.Default);try{o=e[t]=s.factory(void 0,i,e,r),n.firstCreatePass&&t>=r.directiveStart&&function KE(e,n,t){const{ngOnChanges:r,ngOnInit:o,ngDoCheck:i}=n.type.prototype;if(r){const s=Cp(n);(t.preOrderHooks??=[]).push(e,s),(t.preOrderCheckHooks??=[]).push(e,s)}o&&(t.preOrderHooks??=[]).push(0-e,o),i&&((t.preOrderHooks??=[]).push(e,i),(t.preOrderCheckHooks??=[]).push(e,i))}(t,i[t],n)}finally{null!==c&&ct(c),Ms(a),s.resolving=!1,jh()}}return o}function Op(e,n,t){return!!(t[n+(e>>Mp)]&1<{const n=e.prototype.constructor,t=n[nn]||Hc(n),r=Object.prototype;let o=Object.getPrototypeOf(e.prototype).constructor;for(;o&&o!==r;){const i=o[nn]||Hc(o);if(i&&i!==t)return i;o=Object.getPrototypeOf(o)}return i=>new i})}function Hc(e){return us(e)?()=>{const n=Hc(P(e));return n&&n()}:qn(e)}function Fp(e){const n=e[M],t=n.type;return 2===t?n.declTNode:1===t?e[qe]:null}function Hp(e,n=null,t=null,r){const o=Bp(e,n,t,r);return o.resolveInjectorInitializers(),o}function Bp(e,n=null,t=null,r,o=new Set){const i=[t||re,TE(e)];return r=r||("object"==typeof e?void 0:ke(e)),new Rr(i,n||Ds(),r||null,o)}let bt=(()=>{class e{static#e=this.THROW_IF_NOT_FOUND=ko;static#t=this.NULL=new _s;static create(t,r){if(Array.isArray(t))return Hp({name:""},r,t,"");{const o=t.name??"";return Hp({name:o},t.parent,t.providers,o)}}static#n=this.\u0275prov=te({token:e,providedIn:"any",factory:()=>ne(fp)});static#r=this.__NG_ELEMENT_ID__=-1}return e})();function $c(e){return e.ngOriginalError}class dn{constructor(){this._console=console}handleError(n){const t=this._findOriginalError(n);this._console.error("ERROR",n),t&&this._console.error("ORIGINAL ERROR",t)}_findOriginalError(n){let t=n&&$c(n);for(;t&&$c(t);)t=$c(t);return t||null}}const $p=new R("",{providedIn:"root",factory:()=>ee(dn).handleError.bind(void 0)}),zp=new R("",{providedIn:"root",factory:()=>!1});class Zp{constructor(n){this.changingThisBreaksApplicationSecurity=n}toString(){return`SafeValue must use [property]=binding: ${this.changingThisBreaksApplicationSecurity} (see ${ih})`}}function En(e){return e instanceof Zp?e.changingThisBreaksApplicationSecurity:e}const AI=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:\/?#]*(?:[\/?#]|$))/i;var Br=function(e){return e[e.NONE=0]="NONE",e[e.HTML=1]="HTML",e[e.STYLE=2]="STYLE",e[e.SCRIPT=3]="SCRIPT",e[e.URL=4]="URL",e[e.RESOURCE_URL=5]="RESOURCE_URL",e}(Br||{});function In(e){const n=function Wo(){const e=C();return e&&e[on].sanitizer}();return n?n.sanitize(Br.URL,e)||"":function Go(e,n){const t=function II(e){return e instanceof Zp&&e.getTypeName()||null}(e);if(null!=t&&t!==n){if("ResourceURL"===t&&"URL"===n)return!0;throw new Error(`Required a safe ${n}, got a ${t} (see ${ih})`)}return t===n}(e,"URL")?En(e):function Gc(e){return(e=String(e)).match(AI)?e:"unsafe:"+e}(j(e))}const UI=/^>|^->||--!>|)/g,GI="\u200b$1\u200b";const Qc=new Map;let YI=0;const Kc="__ngContext__";function Je(e,n){Ze(n)?(e[Kc]=n[Ao],function JI(e){Qc.set(e[Ao],e)}(n)):e[Kc]=n}function tu(e){return e.ownerDocument.defaultView}var Sn=function(e){return e[e.Important=1]="Important",e[e.DashCase=2]="DashCase",e}(Sn||{});let nu;function ru(e,n){return nu(e,n)}function $r(e,n,t,r,o){if(null!=r){let i,s=!1;Qe(r)?i=r:Ze(r)&&(s=!0,r=r[Ce]);const a=de(r);0===e&&null!==t?null==o?Cg(n,t,a):Qn(n,t,a,o||null,!0):1===e&&null!==t?Qn(n,t,a,o||null,!0):2===e?function $s(e,n,t){const r=Bs(e,n);r&&function yM(e,n,t,r){e.removeChild(n,t,r)}(e,r,n,t)}(n,a,s):3===e&&n.destroyNode(a),null!=i&&function wM(e,n,t,r,o){const i=t[Ut];i!==de(t)&&$r(n,e,r,i,o);for(let a=Ae;an.replace(zI,GI))}(n))}function Vs(e,n,t){return e.createElement(n,t)}function vg(e,n){Us(e,n,n[V],2,null,null)}function _g(e,n){const t=e[vr],r=t.indexOf(n);t.splice(r,1)}function Qo(e,n){if(e.length<=Ae)return;const t=Ae+n,r=e[t];if(r){const o=r[To];null!==o&&o!==e&&_g(o,r),n>0&&(e[t-1][Ot]=r[Ot]);const i=ns(e,Ae+n);!function fM(e,n){vg(e,n),n[Ce]=null,n[qe]=null}(r[M],r);const s=i[sn];null!==s&&s.detachView(i[M]),r[Te]=null,r[Ot]=null,r[x]&=-129}return r}function Hs(e,n){if(!(256&n[x])){const t=n[V];t.destroyNode&&Us(e,n,t,3,null,null),function pM(e){let n=e[So];if(!n)return iu(e[M],e);for(;n;){let t=null;if(Ze(n))t=n[So];else{const r=n[Ae];r&&(t=r)}if(!t){for(;n&&!n[Ot]&&n!==e;)Ze(n)&&iu(n[M],n),n=n[Te];null===n&&(n=e),Ze(n)&&iu(n[M],n),t=n&&n[Ot]}n=t}}(n)}}function iu(e,n){if(!(256&n[x])){n[x]&=-129,n[x]|=256,n[$n]&&function Uf(e){if(fr(e),bo(e))for(let n=0;n=0?r[s]():r[-s].unsubscribe(),i+=2}else t[i].call(r[t[i+1]]);null!==r&&(n[pr]=null);const o=n[yn];if(null!==o){n[yn]=null;for(let i=0;i-1){const{encapsulation:i}=e.data[r.directiveStart+o];if(i===Nt.None||i===Nt.Emulated)return null}return tt(r,t)}}(e,n.parent,t)}function Qn(e,n,t,r,o){e.insertBefore(n,t,r,o)}function Cg(e,n,t){e.appendChild(n,t)}function Dg(e,n,t,r,o){null!==r?Qn(e,n,t,r,o):Cg(e,n,t)}function Bs(e,n){return e.parentNode(n)}let au,Eg=function bg(e,n,t){return 40&e.type?tt(e,t):null};function js(e,n,t,r){const o=su(e,r,n),i=n[V],a=function wg(e,n,t){return Eg(e,n,t)}(r.parent||n[qe],r,n);if(null!=o)if(Array.isArray(t))for(let l=0;lB&&xg(e,n,B,!1),qt(s?2:0,o),t(r,o)}finally{Gn(i),qt(s?3:1,o)}}function du(e,n,t){if(Ol(n)){const r=be(null);try{const i=n.directiveEnd;for(let s=n.directiveStart;snull;function kg(e,n,t,r,o){for(let i in n){if(!n.hasOwnProperty(i))continue;const s=n[i];if(void 0===s)continue;r??={};let a,l=Ie.None;Array.isArray(s)?(a=s[0],l=s[1]):a=s;let c=i;if(null!==o){if(!o.hasOwnProperty(i))continue;c=o[i]}0===e?Lg(r,t,c,a,l):Lg(r,t,c,a)}return r}function Lg(e,n,t,r,o){let i;e.hasOwnProperty(t)?(i=e[t]).push(n,r):i=e[t]=[n,r],void 0!==o&&i.push(o)}function dt(e,n,t,r,o,i,s,a){const l=tt(n,t);let u,c=n.inputs;!a&&null!=c&&(u=c[r])?(yu(e,t,u,r,o),Un(n)&&function kM(e,n){const t=mt(n,e);16&t[x]||(t[x]|=64)}(t,n.index)):3&n.type&&(r=function PM(e){return"class"===e?"className":"for"===e?"htmlFor":"formaction"===e?"formAction":"innerHtml"===e?"innerHTML":"readonly"===e?"readOnly":"tabindex"===e?"tabIndex":e}(r),o=null!=s?s(o,n.value||"",r):o,i.setProperty(l,r,o))}function gu(e,n,t,r){if(Oh()){const o=null===r?null:{"":-1},i=function $M(e,n){const t=e.directiveRegistry;let r=null,o=null;if(t)for(let i=0;i0;){const t=e[--n];if("number"==typeof t&&t<0)return t}return 0})(s)!=a&&s.push(a),s.push(t,r,i)}}(e,n,r,Ko(e,t,o.hostVars,z),o)}function Zt(e,n,t,r,o,i){const s=tt(e,n);!function vu(e,n,t,r,o,i,s){if(null==i)e.removeAttribute(n,o,t);else{const a=null==s?j(i):s(i,r||"",o);e.setAttribute(n,o,a,t)}}(n[V],s,i,e.value,t,r,o)}function ZM(e,n,t,r,o,i){const s=i[n];if(null!==s)for(let a=0;a0&&(t[o-1][Ot]=n),r!1,producerRecomputeValue:()=>{},consumerMarkedDirty:()=>{},consumerOnSignalRead:()=>{},consumerIsAlwaysLive:!0,consumerMarkedDirty:e=>{Ro(e.lView)},consumerOnSignalRead(){this.lView[$n]=this}};function Zg(e){return Yg(e[So])}function Qg(e){return Yg(e[Ot])}function Yg(e){for(;null!==e&&!Qe(e);)e=e[Ot];return e}function Ws(e,n=!0,t=0){const r=e[on],o=r.rendererFactory;o.begin?.();try{!function s0(e,n){wu(e,n);let t=0;for(;Vl(e);){if(100===t)throw new I(103,!1);t++,wu(e,1)}}(e,t)}catch(s){throw n&&qs(e,s),s}finally{o.end?.(),r.inlineEffectRunner?.flush()}}function a0(e,n,t,r){const o=n[x];if(256==(256&o))return;n[on].inlineEffectRunner?.flush(),ql(n);let s=null,a=null;(function l0(e){return 2!==e.type})(e)&&(a=function XM(e){return e[$n]??function e0(e){const n=Wg.pop()??Object.create(n0);return n.lView=e,n}(e)}(n),s=function jf(e){return e&&(e.nextProducerIndex=0),be(e)}(a));try{Ah(n),function Ph(e){return L.lFrame.bindingIndex=e}(e.bindingStartIndex),null!==t&&Rg(e,n,t,2,r);const l=3==(3&o);if(l){const d=e.preOrderCheckHooks;null!==d&&Es(n,d,null)}else{const d=e.preOrderHooks;null!==d&&Is(n,d,0,null),Rc(n,0)}if(function c0(e){for(let n=Zg(e);null!==n;n=Qg(n)){if(!(n[x]&xl.HasTransplantedViews))continue;const t=n[vr];for(let r=0;re.nextProducerIndex;)e.producerNode.pop(),e.producerLastReadVersion.pop(),e.producerIndexOfThis.pop()}}(a,s),function t0(e){e.lView[$n]!==e&&(e.lView=null,Wg.push(e))}(a)),Wl()}}function Jg(e,n){for(let t=Zg(e);null!==t;t=Qg(t))for(let r=Ae;r-1&&(Qo(n,r),ns(t,r))}this._attachedToViewContainer=!1}Hs(this._lView[M],this._lView)}onDestroy(n){!function Xi(e,n){if(256==(256&e[x]))throw new I(911,!1);null===e[yn]&&(e[yn]=[]),e[yn].push(n)}(this._lView,n)}markForCheck(){ti(this._cdRefInjectingView||this._lView)}detach(){this._lView[x]&=-129}reattach(){Hl(this._lView),this._lView[x]|=128}detectChanges(){this._lView[x]|=1024,Ws(this._lView,this.notifyErrorHandler)}checkNoChanges(){}attachToViewContainerRef(){if(this._appRef)throw new I(902,!1);this._attachedToViewContainer=!0}detachFromAppRef(){this._appRef=null,vg(this._lView[M],this._lView)}attachToAppRef(n){if(this._attachedToViewContainer)throw new I(902,!1);this._appRef=n,Hl(this._lView)}}let pn=(()=>{class e{static#e=this.__NG_ELEMENT_ID__=h0}return e})();const d0=pn,f0=class extends d0{constructor(n,t,r){super(),this._declarationLView=n,this._declarationTContainer=t,this.elementRef=r}get ssrId(){return this._declarationTContainer.tView?.ssrId||null}createEmbeddedView(n,t){return this.createEmbeddedViewImpl(n,t)}createEmbeddedViewImpl(n,t,r){const o=function Jo(e,n,t,r){const o=n.tView,a=zs(e,o,t,4096&e[x]?4096:16,null,n,null,null,null,r?.injector??null,r?.dehydratedView??null);a[To]=e[n.index];const c=e[sn];return null!==c&&(a[sn]=c.createEmbeddedView(o)),Cu(o,a,t),a}(this._declarationLView,this._declarationTContainer,n,{injector:t,dehydratedView:r});return new ni(o)}};function h0(){return function Zs(e,n){return 4&e.type?new f0(n,e,Cr(e,n)):null}(ce(),C())}class am{}class P0{}class lm{}class L0{resolveComponentFactory(n){throw function k0(e){const n=Error(`No component factory found for ${ke(e)}.`);return n.ngComponent=e,n}(n)}}let Xs=(()=>{class e{static#e=this.NULL=new L0}return e})();class um{}let Yn=(()=>{class e{constructor(){this.destroyNode=null}static#e=this.__NG_ELEMENT_ID__=()=>function V0(){const e=C(),t=mt(ce().index,e);return(Ze(t)?t:e)[V]}()}return e})(),H0=(()=>{class e{static#e=this.\u0275prov=te({token:e,providedIn:"root",factory:()=>null})}return e})();const Tu={};function fm(e){return function dm(e){return"function"==typeof e&&void 0!==e[Ln]}(e)&&"function"==typeof e.set}function ea(e){return!!function Au(e){return null!==e&&("function"==typeof e||"object"==typeof e)}(e)&&(Array.isArray(e)||!(e instanceof Map)&&Symbol.iterator in e)}class pm{constructor(){}supports(n){return ea(n)}create(n){return new G0(n)}}const z0=(e,n)=>n;class G0{constructor(n){this.length=0,this._linkedRecords=null,this._unlinkedRecords=null,this._previousItHead=null,this._itHead=null,this._itTail=null,this._additionsHead=null,this._additionsTail=null,this._movesHead=null,this._movesTail=null,this._removalsHead=null,this._removalsTail=null,this._identityChangesHead=null,this._identityChangesTail=null,this._trackByFn=n||z0}forEachItem(n){let t;for(t=this._itHead;null!==t;t=t._next)n(t)}forEachOperation(n){let t=this._itHead,r=this._removalsHead,o=0,i=null;for(;t||r;){const s=!r||t&&t.currentIndex{s=this._trackByFn(o,a),null!==t&&Object.is(t.trackById,s)?(r&&(t=this._verifyReinsertion(t,a,s,o)),Object.is(t.item,a)||this._addIdentityChange(t,a)):(t=this._mismatch(t,a,s,o),r=!0),t=t._next,o++}),this.length=o;return this._truncate(t),this.collection=n,this.isDirty}get isDirty(){return null!==this._additionsHead||null!==this._movesHead||null!==this._removalsHead||null!==this._identityChangesHead}_reset(){if(this.isDirty){let n;for(n=this._previousItHead=this._itHead;null!==n;n=n._next)n._nextPrevious=n._next;for(n=this._additionsHead;null!==n;n=n._nextAdded)n.previousIndex=n.currentIndex;for(this._additionsHead=this._additionsTail=null,n=this._movesHead;null!==n;n=n._nextMoved)n.previousIndex=n.currentIndex;this._movesHead=this._movesTail=null,this._removalsHead=this._removalsTail=null,this._identityChangesHead=this._identityChangesTail=null}}_mismatch(n,t,r,o){let i;return null===n?i=this._itTail:(i=n._prev,this._remove(n)),null!==(n=null===this._unlinkedRecords?null:this._unlinkedRecords.get(r,null))?(Object.is(n.item,t)||this._addIdentityChange(n,t),this._reinsertAfter(n,i,o)):null!==(n=null===this._linkedRecords?null:this._linkedRecords.get(r,o))?(Object.is(n.item,t)||this._addIdentityChange(n,t),this._moveAfter(n,i,o)):n=this._addAfter(new q0(t,r),i,o),n}_verifyReinsertion(n,t,r,o){let i=null===this._unlinkedRecords?null:this._unlinkedRecords.get(r,null);return null!==i?n=this._reinsertAfter(i,n._prev,o):n.currentIndex!=o&&(n.currentIndex=o,this._addToMoves(n,o)),n}_truncate(n){for(;null!==n;){const t=n._next;this._addToRemovals(this._unlink(n)),n=t}null!==this._unlinkedRecords&&this._unlinkedRecords.clear(),null!==this._additionsTail&&(this._additionsTail._nextAdded=null),null!==this._movesTail&&(this._movesTail._nextMoved=null),null!==this._itTail&&(this._itTail._next=null),null!==this._removalsTail&&(this._removalsTail._nextRemoved=null),null!==this._identityChangesTail&&(this._identityChangesTail._nextIdentityChange=null)}_reinsertAfter(n,t,r){null!==this._unlinkedRecords&&this._unlinkedRecords.remove(n);const o=n._prevRemoved,i=n._nextRemoved;return null===o?this._removalsHead=i:o._nextRemoved=i,null===i?this._removalsTail=o:i._prevRemoved=o,this._insertAfter(n,t,r),this._addToMoves(n,r),n}_moveAfter(n,t,r){return this._unlink(n),this._insertAfter(n,t,r),this._addToMoves(n,r),n}_addAfter(n,t,r){return this._insertAfter(n,t,r),this._additionsTail=null===this._additionsTail?this._additionsHead=n:this._additionsTail._nextAdded=n,n}_insertAfter(n,t,r){const o=null===t?this._itHead:t._next;return n._next=o,n._prev=t,null===o?this._itTail=n:o._prev=n,null===t?this._itHead=n:t._next=n,null===this._linkedRecords&&(this._linkedRecords=new gm),this._linkedRecords.put(n),n.currentIndex=r,n}_remove(n){return this._addToRemovals(this._unlink(n))}_unlink(n){null!==this._linkedRecords&&this._linkedRecords.remove(n);const t=n._prev,r=n._next;return null===t?this._itHead=r:t._next=r,null===r?this._itTail=t:r._prev=t,n}_addToMoves(n,t){return n.previousIndex===t||(this._movesTail=null===this._movesTail?this._movesHead=n:this._movesTail._nextMoved=n),n}_addToRemovals(n){return null===this._unlinkedRecords&&(this._unlinkedRecords=new gm),this._unlinkedRecords.put(n),n.currentIndex=null,n._nextRemoved=null,null===this._removalsTail?(this._removalsTail=this._removalsHead=n,n._prevRemoved=null):(n._prevRemoved=this._removalsTail,this._removalsTail=this._removalsTail._nextRemoved=n),n}_addIdentityChange(n,t){return n.item=t,this._identityChangesTail=null===this._identityChangesTail?this._identityChangesHead=n:this._identityChangesTail._nextIdentityChange=n,n}}class q0{constructor(n,t){this.item=n,this.trackById=t,this.currentIndex=null,this.previousIndex=null,this._nextPrevious=null,this._prev=null,this._next=null,this._prevDup=null,this._nextDup=null,this._prevRemoved=null,this._nextRemoved=null,this._nextAdded=null,this._nextMoved=null,this._nextIdentityChange=null}}class W0{constructor(){this._head=null,this._tail=null}add(n){null===this._head?(this._head=this._tail=n,n._nextDup=null,n._prevDup=null):(this._tail._nextDup=n,n._prevDup=this._tail,n._nextDup=null,this._tail=n)}get(n,t){let r;for(r=this._head;null!==r;r=r._nextDup)if((null===t||t<=r.currentIndex)&&Object.is(r.trackById,n))return r;return null}remove(n){const t=n._prevDup,r=n._nextDup;return null===t?this._head=r:t._nextDup=r,null===r?this._tail=t:r._prevDup=t,null===this._head}}class gm{constructor(){this.map=new Map}put(n){const t=n.trackById;let r=this.map.get(t);r||(r=new W0,this.map.set(t,r)),r.add(n)}get(n,t){const o=this.map.get(n);return o?o.get(n,t):null}remove(n){const t=n.trackById;return this.map.get(t).remove(n)&&this.map.delete(t),n}get isEmpty(){return 0===this.map.size}clear(){this.map.clear()}}function mm(e,n,t){const r=e.previousIndex;if(null===r)return r;let o=0;return t&&r{class e{static#e=this.\u0275prov=te({token:e,providedIn:"root",factory:_m});constructor(t){this.factories=t}static create(t,r){if(null!=r){const o=r.factories.slice();t=t.concat(o)}return new e(t)}static extend(t){return{provide:e,useFactory:r=>e.create(t,r||_m()),deps:[[e,new Dc,new Cc]]}}find(t){const r=this.factories.find(o=>o.supports(t));if(null!=r)return r;throw new I(901,!1)}}return e})(),xu=(()=>{class e{static#e=this.__NG_ELEMENT_ID__=K0}return e})();function K0(e){return function J0(e,n,t){if(Un(e)&&!t){const r=mt(e.index,n);return new ni(r,r)}return 47&e.type?new ni(n[we],n):null}(ce(),C(),16==(16&e))}function Dm(...e){}class ye{constructor({enableLongStackTrace:n=!1,shouldCoalesceEventChangeDetection:t=!1,shouldCoalesceRunChangeDetection:r=!1}){if(this.hasPendingMacrotasks=!1,this.hasPendingMicrotasks=!1,this.isStable=!0,this.onUnstable=new Ee(!1),this.onMicrotaskEmpty=new Ee(!1),this.onStable=new Ee(!1),this.onError=new Ee(!1),typeof Zone>"u")throw new I(908,!1);Zone.assertZonePatched();const o=this;o._nesting=0,o._outer=o._inner=Zone.current,Zone.TaskTrackingZoneSpec&&(o._inner=o._inner.fork(new Zone.TaskTrackingZoneSpec)),n&&Zone.longStackTraceZoneSpec&&(o._inner=o._inner.fork(Zone.longStackTraceZoneSpec)),o.shouldCoalesceEventChangeDetection=!r&&t,o.shouldCoalesceRunChangeDetection=r,o.lastRequestAnimationFrameId=-1,o.nativeRequestAnimationFrame=function lS(){const e="function"==typeof ae.requestAnimationFrame;let n=ae[e?"requestAnimationFrame":"setTimeout"],t=ae[e?"cancelAnimationFrame":"clearTimeout"];if(typeof Zone<"u"&&n&&t){const r=n[Zone.__symbol__("OriginalDelegate")];r&&(n=r);const o=t[Zone.__symbol__("OriginalDelegate")];o&&(t=o)}return{nativeRequestAnimationFrame:n,nativeCancelAnimationFrame:t}}().nativeRequestAnimationFrame,function dS(e){const n=()=>{!function uS(e){e.isCheckStableRunning||-1!==e.lastRequestAnimationFrameId||(e.lastRequestAnimationFrameId=e.nativeRequestAnimationFrame.call(ae,()=>{e.fakeTopEventTask||(e.fakeTopEventTask=Zone.root.scheduleEventTask("fakeTopEventTask",()=>{e.lastRequestAnimationFrameId=-1,Ru(e),e.isCheckStableRunning=!0,Ou(e),e.isCheckStableRunning=!1},void 0,()=>{},()=>{})),e.fakeTopEventTask.invoke()}),Ru(e))}(e)};e._inner=e._inner.fork({name:"angular",properties:{isAngularZone:!0},onInvokeTask:(t,r,o,i,s,a)=>{if(function fS(e){return!(!Array.isArray(e)||1!==e.length)&&!0===e[0].data?.__ignore_ng_zone__}(a))return t.invokeTask(o,i,s,a);try{return wm(e),t.invokeTask(o,i,s,a)}finally{(e.shouldCoalesceEventChangeDetection&&"eventTask"===i.type||e.shouldCoalesceRunChangeDetection)&&n(),bm(e)}},onInvoke:(t,r,o,i,s,a,l)=>{try{return wm(e),t.invoke(o,i,s,a,l)}finally{e.shouldCoalesceRunChangeDetection&&n(),bm(e)}},onHasTask:(t,r,o,i)=>{t.hasTask(o,i),r===o&&("microTask"==i.change?(e._hasPendingMicrotasks=i.microTask,Ru(e),Ou(e)):"macroTask"==i.change&&(e.hasPendingMacrotasks=i.macroTask))},onHandleError:(t,r,o,i)=>(t.handleError(o,i),e.runOutsideAngular(()=>e.onError.emit(i)),!1)})}(o)}static isInAngularZone(){return typeof Zone<"u"&&!0===Zone.current.get("isAngularZone")}static assertInAngularZone(){if(!ye.isInAngularZone())throw new I(909,!1)}static assertNotInAngularZone(){if(ye.isInAngularZone())throw new I(909,!1)}run(n,t,r){return this._inner.run(n,t,r)}runTask(n,t,r,o){const i=this._inner,s=i.scheduleEventTask("NgZoneEvent: "+o,n,cS,Dm,Dm);try{return i.runTask(s,t,r)}finally{i.cancelTask(s)}}runGuarded(n,t,r){return this._inner.runGuarded(n,t,r)}runOutsideAngular(n){return this._outer.run(n)}}const cS={};function Ou(e){if(0==e._nesting&&!e.hasPendingMicrotasks&&!e.isStable)try{e._nesting++,e.onMicrotaskEmpty.emit(null)}finally{if(e._nesting--,!e.hasPendingMicrotasks)try{e.runOutsideAngular(()=>e.onStable.emit(null))}finally{e.isStable=!0}}}function Ru(e){e.hasPendingMicrotasks=!!(e._hasPendingMicrotasks||(e.shouldCoalesceEventChangeDetection||e.shouldCoalesceRunChangeDetection)&&-1!==e.lastRequestAnimationFrameId)}function wm(e){e._nesting++,e.isStable&&(e.isStable=!1,e.onUnstable.emit(null))}function bm(e){e._nesting--,Ou(e)}class Em{constructor(){this.hasPendingMicrotasks=!1,this.hasPendingMacrotasks=!1,this.isStable=!0,this.onUnstable=new Ee,this.onMicrotaskEmpty=new Ee,this.onStable=new Ee,this.onError=new Ee}run(n,t,r){return n.apply(t,r)}runGuarded(n,t,r){return n.apply(t,r)}runOutsideAngular(n){return n()}runTask(n,t,r,o){return n.apply(t,r)}}let ai=(()=>{class e{constructor(){this.handler=null,this.internalCallbacks=[]}execute(){const t=[...this.internalCallbacks];this.internalCallbacks.length=0;for(const r of t)r();this.handler?.execute()}ngOnDestroy(){this.handler?.destroy(),this.handler=null,this.internalCallbacks.length=0}static#e=this.\u0275prov=te({token:e,providedIn:"root",factory:()=>new e})}return e})();function oa(e,n,t){let r=t?e.styles:null,o=t?e.classes:null,i=0;if(null!==n)for(let s=0;s0&&Ag(e,t,i.join(" "))}}(h,G,m,r),void 0!==t&&function MS(e,n,t){const r=e.projection=[];for(let o=0;o{class e{static#e=this.__NG_ELEMENT_ID__=TS}return e})();function TS(){return function Pm(e,n){let t;const r=n[e.index];return Qe(r)?t=r:(t=Bg(r,n,null,e),n[e.index]=t,Gs(n,t)),km(t,n,e,r),new Rm(t,e,n)}(ce(),C())}const AS=Qt,Rm=class extends AS{constructor(n,t,r){super(),this._lContainer=n,this._hostTNode=t,this._hostLView=r}get element(){return Cr(this._hostTNode,this._hostLView)}get injector(){return new He(this._hostTNode,this._hostLView)}get parentInjector(){const n=Ts(this._hostTNode,this._hostLView);if(Pc(n)){const t=zo(n,this._hostLView),r=Uo(n);return new He(t[M].data[r+8],t)}return new He(null,this._hostLView)}clear(){for(;this.length>0;)this.remove(this.length-1)}get(n){const t=Fm(this._lContainer);return null!==t&&t[n]||null}get length(){return this._lContainer.length-Ae}createEmbeddedView(n,t,r){let o,i;"number"==typeof r?o=r:null!=r&&(o=r.index,i=r.injector);const a=n.createEmbeddedViewImpl(t||{},i,null);return this.insertImpl(a,o,zr(this._hostTNode,null)),a}createComponent(n,t,r,o,i){const s=n&&!function jo(e){return"function"==typeof e}(n);let a;if(s)a=t;else{const m=t||{};a=m.index,r=m.injector,o=m.projectableNodes,i=m.environmentInjector||m.ngModuleRef}const l=s?n:new ui(Q(n)),c=r||this.parentInjector;if(!i&&null==l.ngModule){const D=(s?c:this.parentInjector).get(cn,null);D&&(i=D)}Q(l.componentType??{});const p=l.create(c,o,null,i);return this.insertImpl(p.hostView,a,zr(this._hostTNode,null)),p}insert(n,t){return this.insertImpl(n,t,!0)}insertImpl(n,t,r){const o=n._lView;if(function Ab(e){return Qe(e[Te])}(o)){const a=this.indexOf(n);if(-1!==a)this.detach(a);else{const l=o[Te],c=new Rm(l,l[qe],l[Te]);c.detach(c.indexOf(n))}}const i=this._adjustIndex(t),s=this._lContainer;return Xo(s,o,i,r),n.attachToViewContainerRef(),qh(ku(s),i,n),n}move(n,t){return this.insert(n,t)}indexOf(n){const t=Fm(this._lContainer);return null!==t?t.indexOf(n):-1}remove(n){const t=this._adjustIndex(n,-1),r=Qo(this._lContainer,t);r&&(ns(ku(this._lContainer),t),Hs(r[M],r))}detach(n){const t=this._adjustIndex(n,-1),r=Qo(this._lContainer,t);return r&&null!=ns(ku(this._lContainer),t)?new ni(r):null}_adjustIndex(n,t=0){return n??this.length+t}};function Fm(e){return e[8]}function ku(e){return e[8]||(e[8]=[])}let km=function Vm(e,n,t,r){if(e[Ut])return;let o;o=8&t.type?de(r):function NS(e,n){const t=e[V],r=t.createComment(""),o=tt(n,e);return Qn(t,Bs(t,o),r,function CM(e,n){return e.nextSibling(n)}(t,o),!1),r}(n,t),e[Ut]=o},Lu=()=>!1;function ue(e){let n=function nv(e){return Object.getPrototypeOf(e.prototype).constructor}(e.type),t=!0;const r=[e];for(;n;){let o;if(Ft(e))o=n.\u0275cmp||n.\u0275dir;else{if(n.\u0275cmp)throw new I(903,!1);o=n.\u0275dir}if(o){if(t){r.push(o);const s=e;s.inputs=sa(e.inputs),s.inputTransforms=sa(e.inputTransforms),s.declaredInputs=sa(e.declaredInputs),s.outputs=sa(e.outputs);const a=o.hostBindings;a&&XS(e,a);const l=o.viewQuery,c=o.contentQueries;if(l&&KS(e,l),c&&JS(e,c),QS(e,o),ab(e.outputs,o.outputs),Ft(o)&&o.data.animation){const u=e.data;u.animation=(u.animation||[]).concat(o.data.animation)}}const i=o.features;if(i)for(let s=0;s=0;r--){const o=e[r];o.hostVars=n+=o.hostVars,o.hostAttrs=Mo(o.hostAttrs,t=Mo(t,o.hostAttrs))}}(r)}function QS(e,n){for(const t in n.inputs){if(!n.inputs.hasOwnProperty(t)||e.inputs.hasOwnProperty(t))continue;const r=n.inputs[t];if(void 0!==r&&(e.inputs[t]=r,e.declaredInputs[t]=n.declaredInputs[t],null!==n.inputTransforms)){const o=Array.isArray(r)?r[0]:r;if(!n.inputTransforms.hasOwnProperty(o))continue;e.inputTransforms??={},e.inputTransforms[o]=n.inputTransforms[o]}}}function sa(e){return e===$t?{}:e===re?[]:e}function KS(e,n){const t=e.viewQuery;e.viewQuery=t?(r,o)=>{n(r,o),t(r,o)}:n}function JS(e,n){const t=e.contentQueries;e.contentQueries=t?(r,o,i)=>{n(r,o,i),t(r,o,i)}:n}function XS(e,n){const t=e.hostBindings;e.hostBindings=t?(r,o)=>{n(r,o),t(r,o)}:n}class er{}class aT{}class qu extends er{constructor(n,t,r){super(),this._parent=t,this._bootstrapComponents=[],this.destroyCbs=[],this.componentFactoryResolver=new xm(this);const o=function Ge(e,n){const t=e[lh]||null;if(!t&&!0===n)throw new Error(`Type ${ke(e)} does not have '\u0275mod' property.`);return t}(n);this._bootstrapComponents=function _t(e){return e instanceof Function?e():e}(o.bootstrap),this._r3Injector=Bp(n,t,[{provide:er,useValue:this},{provide:Xs,useValue:this.componentFactoryResolver},...r],ke(n),new Set(["environment"])),this._r3Injector.resolveInjectorInitializers(),this.instance=this._r3Injector.get(n)}get injector(){return this._r3Injector}destroy(){const n=this._r3Injector;!n.destroyed&&n.destroy(),this.destroyCbs.forEach(t=>t()),this.destroyCbs=null}onDestroy(n){this.destroyCbs.push(n)}}class Wu extends aT{constructor(n){super(),this.moduleType=n}create(n){return new qu(this.moduleType,n,[])}}let la=(()=>{class e{constructor(){this.taskId=0,this.pendingTasks=new Set,this.hasPendingTasks=new tb(!1)}get _hasPendingTasks(){return this.hasPendingTasks.value}add(){this._hasPendingTasks||this.hasPendingTasks.next(!0);const t=this.taskId++;return this.pendingTasks.add(t),t}remove(t){this.pendingTasks.delete(t),0===this.pendingTasks.size&&this._hasPendingTasks&&this.hasPendingTasks.next(!1)}ngOnDestroy(){this.pendingTasks.clear(),this._hasPendingTasks&&this.hasPendingTasks.next(!1)}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275prov=te({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();function Yt(e,n,t){return e[n]=t}function Ne(e,n,t){return!Object.is(e[n],t)&&(e[n]=t,!0)}function tr(e,n,t,r){const o=Ne(e,n,t);return Ne(e,n+1,r)||o}function k(e,n,t,r,o,i,s,a){const l=C(),c=Y(),u=e+B,d=c.firstCreatePass?function dT(e,n,t,r,o,i,s,a,l){const c=n.consts,u=Ur(n,e,4,s||null,zt(c,a));gu(n,t,u,zt(c,l)),bs(n,u);const d=u.tView=pu(2,u,r,o,i,n.directiveRegistry,n.pipeRegistry,null,n.schemas,c,null);return null!==n.queries&&(n.queries.template(n,u),d.queries=n.queries.embeddedTView(u)),u}(u,c,l,n,t,r,o,i,s):c.data[u];Gt(d,!1);const h=av(c,l,d,e);ts()&&js(c,l,h,d),Je(h,l);const p=Bg(h,l,h,d);return l[u]=p,Gs(l,p),function Lm(e,n,t){return Lu(e,n,t)}(p,d,l),Ji(d)&&fu(c,l,d),null!=s&&hu(l,d,a),k}let av=function lv(e,n,t,r){return Cn(!0),n[V].createComment("")};function Lt(e,n,t,r){const o=C();return Ne(o,Pt(),n)&&(Y(),Zt(pe(),o,e,n,t,r)),Lt}function eo(e,n,t,r){return Ne(e,Pt(),t)?n+j(t)+r:z}function ga(e,n){return e<<17|n<<2}function Nn(e){return e>>17&32767}function rd(e){return 2|e}function rr(e){return(131068&e)>>2}function od(e,n){return-131069&e|n<<2}function id(e){return 1|e}function Hv(e,n,t,r){const o=e[t+1],i=null===n;let s=r?Nn(o):rr(o),a=!1;for(;0!==s&&(!1===a||i);){const c=e[s+1];QT(e[s],n)&&(a=!0,e[s+1]=r?id(c):rd(c)),s=r?Nn(c):rr(c)}a&&(e[t+1]=r?rd(o):id(o))}function QT(e,n){return null===e||null==n||(Array.isArray(e)?e[1]:e)===n||!(!Array.isArray(e)||"string"!=typeof n)&&wr(e,n)>=0}const Be={textEnd:0,key:0,keyEnd:0,value:0,valueEnd:0};function Bv(e){return e.substring(Be.key,Be.keyEnd)}function jv(e,n){const t=Be.textEnd;return t===n?-1:(n=Be.keyEnd=function XT(e,n,t){for(;n32;)n++;return n}(e,Be.key=n,t),lo(e,n,t))}function lo(e,n,t){for(;n=0;t=jv(n,t))vt(e,Bv(n),!0)}function Wv(e,n){return n>=e.expandoStartIndex}function Zv(e,n,t,r){const o=e.data;if(null===o[t+1]){const i=o[Ye()],s=Wv(e,t);Jv(i,r)&&null===n&&!s&&(n=!1),n=function oA(e,n,t,r){const o=function zl(e){const n=L.lFrame.currentDirectiveIndex;return-1===n?null:e[n]}(e);let i=r?n.residualClasses:n.residualStyles;if(null===o)0===(r?n.classBindings:n.styleBindings)&&(t=mi(t=ad(null,e,n,t,r),n.attrs,r),i=null);else{const s=n.directiveStylingLast;if(-1===s||e[s]!==o)if(t=ad(o,e,n,t,r),null===i){let l=function iA(e,n,t){const r=t?n.classBindings:n.styleBindings;if(0!==rr(r))return e[Nn(r)]}(e,n,r);void 0!==l&&Array.isArray(l)&&(l=ad(null,e,n,l[1],r),l=mi(l,n.attrs,r),function sA(e,n,t,r){e[Nn(t?n.classBindings:n.styleBindings)]=r}(e,n,r,l))}else i=function aA(e,n,t){let r;const o=n.directiveEnd;for(let i=1+n.directiveStylingLast;i0)&&(c=!0)):u=t,o)if(0!==l){const h=Nn(e[a+1]);e[r+1]=ga(h,a),0!==h&&(e[h+1]=od(e[h+1],r)),e[a+1]=function GT(e,n){return 131071&e|n<<17}(e[a+1],r)}else e[r+1]=ga(a,0),0!==a&&(e[a+1]=od(e[a+1],r)),a=r;else e[r+1]=ga(l,0),0===a?a=r:e[l+1]=od(e[l+1],r),l=r;c&&(e[r+1]=rd(e[r+1])),Hv(e,u,r,!0),Hv(e,u,r,!1),function ZT(e,n,t,r,o){const i=o?e.residualClasses:e.residualStyles;null!=i&&"string"==typeof n&&wr(i,n)>=0&&(t[r+1]=id(t[r+1]))}(n,u,e,r,i),s=ga(a,l),i?n.classBindings=s:n.styleBindings=s}(o,i,n,t,s,r)}}function ad(e,n,t,r,o){let i=null;const s=t.directiveEnd;let a=t.directiveStylingLast;for(-1===a?a=t.directiveStart:a++;a0;){const l=e[o],c=Array.isArray(l),u=c?l[1]:l,d=null===u;let h=t[o+1];h===z&&(h=d?re:void 0);let p=d?Ql(h,r):u===r?h:void 0;if(c&&!va(p)&&(p=Ql(l,r)),va(p)&&(a=p,s))return a;const m=e[o+1];o=s?Nn(m):rr(m)}if(null!==n){let l=i?n.residualClasses:n.residualStyles;null!=l&&(a=Ql(l,r))}return a}function va(e){return void 0!==e}function Jv(e,n){return 0!=(e.flags&(n?8:16))}function Xt(e,n,t){!function Ht(e,n,t,r){const o=Y(),i=ln(2);o.firstUpdatePass&&Zv(o,null,i,r);const s=C();if(t!==z&&Ne(s,i,t)){const a=o.data[Ye()];if(Jv(a,r)&&!Wv(o,i)){let l=r?a.classesWithoutHost:a.stylesWithoutHost;null!==l&&(t=Ml(l,t||"")),sd(o,a,s,t,r)}else!function uA(e,n,t,r,o,i,s,a){o===z&&(o=re);let l=0,c=0,u=0(Cn(!0),Vs(r,o,function Uh(){return L.lFrame.currentNamespace}()));function K(e,n,t){const r=C(),o=Y(),i=e+B,s=o.firstCreatePass?function kA(e,n,t,r,o){const i=n.consts,s=zt(i,r),a=Ur(n,e,8,"ng-container",s);return null!==s&&oa(a,s,!0),gu(n,t,a,zt(i,o)),null!==n.queries&&n.queries.elementStart(n,a),a}(i,o,r,n,t):o.data[i];Gt(s,!0);const a=o_(o,r,s,e);return r[i]=a,ts()&&js(o,r,a,s),Je(a,r),Ji(s)&&(fu(o,r,s),du(o,s,r)),null!=t&&hu(r,s),K}function J(){let e=ce();const n=Y();return jl()?$l():(e=e.parent,Gt(e,!1)),n.firstCreatePass&&(bs(n,e),Ol(e)&&n.queries.elementEnd(e)),J}let o_=(e,n,t,r)=>(Cn(!0),ou(n[V],""));function Me(){return C()}const uo="en-US";let c_=uo;function $(e,n,t,r){const o=C(),i=Y(),s=ce();return pd(i,o,o[V],s,e,n,r),$}function pd(e,n,t,r,o,i,s){const a=Ji(r),c=e.firstCreatePass&&function Ug(e){return e.cleanup||(e.cleanup=[])}(e),u=n[he],d=function $g(e){return e[pr]||(e[pr]=[])}(n);let h=!0;if(3&r.type||s){const D=tt(r,n),E=s?s(D):D,T=d.length,w=s?H=>s(de(H[r.index])):r.index;let O=null;if(!s&&a&&(O=function P1(e,n,t,r){const o=e.cleanup;if(null!=o)for(let i=0;il?a[l]:null}"string"==typeof s&&(i+=2)}return null}(e,n,o,r.index)),null!==O)(O.__ngLastListenerFn__||O).__ngNextListenerFn__=i,O.__ngLastListenerFn__=i,h=!1;else{i=k_(r,n,u,i,!1);const H=t.listen(E,o,i);d.push(i,H),c&&c.push(o,w,T,T+1)}}else i=k_(r,n,u,i,!1);const p=r.outputs;let m;if(h&&null!==p&&(m=p[o])){const D=m.length;if(D)for(let E=0;E-1?mt(e.index,n):n);let l=P_(n,t,r,s),c=i.__ngNextListenerFn__;for(;c;)l=P_(n,t,c,s)&&l,c=c.__ngNextListenerFn__;return o&&!1===l&&s.preventDefault(),l}}function v(e=1){return function zb(e){return(L.lFrame.contextLView=function Nh(e,n){for(;e>0;)n=n[gr],e--;return n}(e,L.lFrame.contextLView))[he]}(e)}function xn(e,n,t){return gd(e,"",n,"",t),xn}function gd(e,n,t,r,o){const i=C(),s=eo(i,n,t,r);return s!==z&&dt(Y(),pe(),i,e,s,i[V],o,!1),gd}function b(e,n=""){const t=C(),r=Y(),o=e+B,i=r.firstCreatePass?Ur(r,o,1,n,null):r.data[o],s=ey(r,t,i,n,e);t[o]=s,ts()&&js(r,t,s,i),Gt(i,!1)}let ey=(e,n,t,r,o)=>(Cn(!0),function Ls(e,n){return e.createText(n)}(n[V],r));function N(e){return q("",e,""),N}function q(e,n,t){const r=C(),o=eo(r,e,n,t);return o!==z&&function hn(e,n,t){const r=xo(n,e);!function mg(e,n,t){e.setValue(n,t)}(e[V],r,t)}(r,Ye(),o),q}function ht(e,n,t){fm(n)&&(n=n());const r=C();return Ne(r,Pt(),n)&&dt(Y(),pe(),r,e,n,r[V],t,!1),ht}function Xe(e,n){const t=fm(e);return t&&e.set(n),t}function yt(e,n){const t=C(),r=Y(),o=ce();return pd(r,t,t[V],o,e,n),yt}function md(e,n,t,r,o){if(e=P(e),Array.isArray(e))for(let i=0;i>20;if(Wn(e)||!e.multi){const p=new $o(c,o,S),m=_d(l,n,o?u:u+h,d);-1===m?(Vc(Ss(a,s),i,l),vd(i,e,n.length),n.push(l),a.directiveStart++,a.directiveEnd++,o&&(a.providerIndexes+=1048576),t.push(p),s.push(p)):(t[m]=p,s[m]=p)}else{const p=_d(l,n,u+h,d),m=_d(l,n,u,u+h),E=m>=0&&t[m];if(o&&!E||!o&&!(p>=0&&t[p])){Vc(Ss(a,s),i,l);const T=function lN(e,n,t,r,o){const i=new $o(e,t,S);return i.multi=[],i.index=n,i.componentProviders=0,cy(i,o,r&&!t),i}(o?aN:sN,t.length,o,r,c);!o&&E&&(t[m].providerFactory=T),vd(i,e,n.length,0),n.push(l),a.directiveStart++,a.directiveEnd++,o&&(a.providerIndexes+=1048576),t.push(T),s.push(T)}else vd(i,e,p>-1?p:m,cy(t[o?m:p],c,!o&&r));!o&&r&&E&&t[m].componentProviders++}}}function vd(e,n,t,r){const o=Wn(n),i=function NE(e){return!!e.useClass}(n);if(o||i){const l=(i?P(n.useClass):n).prototype.ngOnDestroy;if(l){const c=e.destroyHooks||(e.destroyHooks=[]);if(!o&&n.multi){const u=c.indexOf(t);-1===u?c.push(t,[r,l]):c[u+1].push(r,l)}else c.push(t,l)}}}function cy(e,n,t){return t&&e.componentProviders++,e.multi.push(n)-1}function _d(e,n,t,r){for(let o=t;o{t.providersResolver=(r,o)=>function iN(e,n,t){const r=Y();if(r.firstCreatePass){const o=Ft(e);md(t,r.data,r.blueprint,o,!0),md(n,r.data,r.blueprint,o,!1)}}(r,o?o(e):e,n)}}function ba(e,n,t,r){return function _y(e,n,t,r,o,i){const s=n+t;return Ne(e,s,o)?Yt(e,s+1,i?r.call(i,o):r(o)):wi(e,s+1)}(C(),nt(),e,n,t,r)}function Dd(e,n,t,r,o){return function yy(e,n,t,r,o,i,s){const a=n+t;return tr(e,a,o,i)?Yt(e,a+2,s?r.call(s,o,i):r(o,i)):wi(e,a+2)}(C(),nt(),e,n,t,r,o)}function Ue(e,n,t,r,o,i){return Cy(C(),nt(),e,n,t,r,o,i)}function wi(e,n){const t=e[n];return t===z?void 0:t}function Cy(e,n,t,r,o,i,s,a){const l=n+t;return function ca(e,n,t,r,o){const i=tr(e,n,t,r);return Ne(e,n+2,o)||i}(e,l,o,i,s)?Yt(e,l+3,a?r.call(a,o,i,s):r(o,i,s)):wi(e,l+3)}function Ey(e,n,t,r,o){const i=e+B,s=C(),a=function _r(e,n){return e[n]}(s,i);return function bi(e,n){return e[M].data[n].pure}(s,i)?Cy(s,nt(),n,a.transform,t,r,o,a):a.transform(t,r,o)}const zy=new R(""),Sa=new R("");let Ad,Sd=(()=>{class e{constructor(t,r,o){this._ngZone=t,this.registry=r,this._pendingCount=0,this._isZoneStable=!0,this._callbacks=[],this.taskTrackingZone=null,Ad||(function Mx(e){Ad=e}(o),o.addToWindow(r)),this._watchAngularEvents(),t.run(()=>{this.taskTrackingZone=typeof Zone>"u"?null:Zone.current.get("TaskTrackingZone")})}_watchAngularEvents(){this._ngZone.onUnstable.subscribe({next:()=>{this._isZoneStable=!1}}),this._ngZone.runOutsideAngular(()=>{this._ngZone.onStable.subscribe({next:()=>{ye.assertNotInAngularZone(),queueMicrotask(()=>{this._isZoneStable=!0,this._runCallbacksIfReady()})}})})}increasePendingRequestCount(){return this._pendingCount+=1,this._pendingCount}decreasePendingRequestCount(){if(this._pendingCount-=1,this._pendingCount<0)throw new Error("pending async requests below zero");return this._runCallbacksIfReady(),this._pendingCount}isStable(){return this._isZoneStable&&0===this._pendingCount&&!this._ngZone.hasPendingMacrotasks}_runCallbacksIfReady(){if(this.isStable())queueMicrotask(()=>{for(;0!==this._callbacks.length;){let t=this._callbacks.pop();clearTimeout(t.timeoutId),t.doneCb()}});else{let t=this.getPendingTasks();this._callbacks=this._callbacks.filter(r=>!r.updateCb||!r.updateCb(t)||(clearTimeout(r.timeoutId),!1))}}getPendingTasks(){return this.taskTrackingZone?this.taskTrackingZone.macroTasks.map(t=>({source:t.source,creationLocation:t.creationLocation,data:t.data})):[]}addCallback(t,r,o){let i=-1;r&&r>0&&(i=setTimeout(()=>{this._callbacks=this._callbacks.filter(s=>s.timeoutId!==i),t()},r)),this._callbacks.push({doneCb:t,timeoutId:i,updateCb:o})}whenStable(t,r,o){if(o&&!this.taskTrackingZone)throw new Error('Task tracking zone is required when passing an update callback to whenStable(). Is "zone.js/plugins/task-tracking" loaded?');this.addCallback(t,r,o),this._runCallbacksIfReady()}getPendingRequestCount(){return this._pendingCount}registerApplication(t){this.registry.registerApplication(t,this)}unregisterApplication(t){this.registry.unregisterApplication(t)}findProviders(t,r,o){return[]}static#e=this.\u0275fac=function(r){return new(r||e)(ne(ye),ne(Td),ne(Sa))};static#t=this.\u0275prov=te({token:e,factory:e.\u0275fac})}return e})(),Td=(()=>{class e{constructor(){this._applications=new Map}registerApplication(t,r){this._applications.set(t,r)}unregisterApplication(t){this._applications.delete(t)}unregisterAllApplications(){this._applications.clear()}getTestability(t){return this._applications.get(t)||null}getAllTestabilities(){return Array.from(this._applications.values())}getAllRootElements(){return Array.from(this._applications.keys())}findTestabilityInTree(t,r=!0){return Ad?.findTestabilityInTree(this,t,r)??null}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275prov=te({token:e,factory:e.\u0275fac,providedIn:"platform"})}return e})();function Ta(e){return!!e&&"function"==typeof e.then}function Gy(e){return!!e&&"function"==typeof e.subscribe}const Sx=new R("");let Nd=(()=>{class e{constructor(){this.initialized=!1,this.done=!1,this.donePromise=new Promise((t,r)=>{this.resolve=t,this.reject=r}),this.appInits=ee(Sx,{optional:!0})??[]}runInitializers(){if(this.initialized)return;const t=[];for(const o of this.appInits){const i=o();if(Ta(i))t.push(i);else if(Gy(i)){const s=new Promise((a,l)=>{i.subscribe({complete:a,error:l})});t.push(s)}}const r=()=>{this.done=!0,this.resolve()};Promise.all(t).then(()=>{r()}).catch(o=>{this.reject(o)}),0===t.length&&r(),this.initialized=!0}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275prov=te({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();const qy=new R("");function Qy(e,n){return Array.isArray(n)?n.reduce(Qy,e):{...e,...n}}let po=(()=>{class e{constructor(){this._bootstrapListeners=[],this._runningTick=!1,this._destroyed=!1,this._destroyListeners=[],this._views=[],this.internalErrorHandler=ee($p),this.afterRenderEffectManager=ee(ai),this.componentTypes=[],this.components=[],this.isStable=ee(la).hasPendingTasks.pipe(El(t=>!t)),this._injector=ee(cn)}get destroyed(){return this._destroyed}get injector(){return this._injector}bootstrap(t,r){const o=t instanceof lm;if(!this._injector.get(Nd).done)throw!o&&function jn(e){const n=Q(e)||Le(e)||ze(e);return null!==n&&n.standalone}(t),new I(405,!1);let s;s=o?t:this._injector.get(Xs).resolveComponentFactory(t),this.componentTypes.push(s.componentType);const a=function Tx(e){return e.isBoundToModule}(s)?void 0:this._injector.get(er),c=s.create(bt.NULL,[],r||s.selector,a),u=c.location.nativeElement,d=c.injector.get(zy,null);return d?.registerApplication(u),c.onDestroy(()=>{this.detachView(c.hostView),Aa(this.components,c),d?.unregisterApplication(u)}),this._loadComponent(c),c}tick(){if(this._runningTick)throw new I(101,!1);try{this._runningTick=!0,this.detectChangesInAttachedViews()}catch(t){this.internalErrorHandler(t)}finally{this._runningTick=!1}}detectChangesInAttachedViews(){let t=0;do{if(100===t)throw new I(103,!1);const r=0===t;for(let{_lView:o,notifyErrorHandler:i}of this._views)!r&&!Yy(o)||this.detectChangesInView(o,i,r);this.afterRenderEffectManager.execute(),t++}while(this._views.some(({_lView:r})=>Yy(r)))}detectChangesInView(t,r,o){let i;o?(i=0,t[x]|=1024):i=64&t[x]?0:1,Ws(t,r,i)}attachView(t){const r=t;this._views.push(r),r.attachToAppRef(this)}detachView(t){const r=t;Aa(this._views,r),r.detachFromAppRef()}_loadComponent(t){this.attachView(t.hostView),this.tick(),this.components.push(t);const r=this._injector.get(qy,[]);[...this._bootstrapListeners,...r].forEach(o=>o(t))}ngOnDestroy(){if(!this._destroyed)try{this._destroyListeners.forEach(t=>t()),this._views.slice().forEach(t=>t.destroy())}finally{this._destroyed=!0,this._views=[],this._bootstrapListeners=[],this._destroyListeners=[]}}onDestroy(t){return this._destroyListeners.push(t),()=>Aa(this._destroyListeners,t)}destroy(){if(this._destroyed)throw new I(406,!1);const t=this._injector;t.destroy&&!t.destroyed&&t.destroy()}get viewCount(){return this._views.length}warnIfDestroyed(){}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275prov=te({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();function Aa(e,n){const t=e.indexOf(n);t>-1&&e.splice(t,1)}function Yy(e){return Vl(e)}let Rx=(()=>{class e{constructor(){this.zone=ee(ye),this.applicationRef=ee(po)}initialize(){this._onMicrotaskEmptySubscription||(this._onMicrotaskEmptySubscription=this.zone.onMicrotaskEmpty.subscribe({next:()=>{this.zone.run(()=>{this.applicationRef.tick()})}}))}ngOnDestroy(){this._onMicrotaskEmptySubscription?.unsubscribe()}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275prov=te({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();function Fx(){const e=ee(ye),n=ee(dn);return t=>e.runOutsideAngular(()=>n.handleError(t))}let kx=(()=>{class e{constructor(){this.subscription=new At,this.initialized=!1,this.zone=ee(ye),this.pendingTasks=ee(la)}initialize(){if(this.initialized)return;this.initialized=!0;let t=null;!this.zone.isStable&&!this.zone.hasPendingMacrotasks&&!this.zone.hasPendingMicrotasks&&(t=this.pendingTasks.add()),this.zone.runOutsideAngular(()=>{this.subscription.add(this.zone.onStable.subscribe(()=>{ye.assertNotInAngularZone(),queueMicrotask(()=>{null!==t&&!this.zone.hasPendingMacrotasks&&!this.zone.hasPendingMicrotasks&&(this.pendingTasks.remove(t),t=null)})}))}),this.subscription.add(this.zone.onUnstable.subscribe(()=>{ye.assertInAngularZone(),t??=this.pendingTasks.add()}))}ngOnDestroy(){this.subscription.unsubscribe()}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275prov=te({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();const gn=new R("",{providedIn:"root",factory:()=>ee(gn,X.Optional|X.SkipSelf)||function Lx(){return typeof $localize<"u"&&$localize.locale||uo}()}),xd=new R("");let eC=(()=>{class e{constructor(t){this._injector=t,this._modules=[],this._destroyListeners=[],this._destroyed=!1}bootstrapModuleFactory(t,r){const o=function hS(e="zone.js",n){return"noop"===e?new Em:"zone.js"===e?new ye(n):e}(r?.ngZone,function Xy(e){return{enableLongStackTrace:!1,shouldCoalesceEventChangeDetection:e?.eventCoalescing??!1,shouldCoalesceRunChangeDetection:e?.runCoalescing??!1}}({eventCoalescing:r?.ngZoneEventCoalescing,runCoalescing:r?.ngZoneRunCoalescing}));return o.run(()=>{const i=function cT(e,n,t){return new qu(e,n,t)}(t.moduleType,this.injector,function Jy(e){return[{provide:ye,useFactory:e},{provide:Or,multi:!0,useFactory:()=>{const n=ee(Rx,{optional:!0});return()=>n.initialize()}},{provide:Or,multi:!0,useFactory:()=>{const n=ee(kx);return()=>{n.initialize()}}},{provide:$p,useFactory:Fx}]}(()=>o)),s=i.injector.get(dn,null);return o.runOutsideAngular(()=>{const a=o.onError.subscribe({next:l=>{s.handleError(l)}});i.onDestroy(()=>{Aa(this._modules,i),a.unsubscribe()})}),function Zy(e,n,t){try{const r=t();return Ta(r)?r.catch(o=>{throw n.runOutsideAngular(()=>e.handleError(o)),o}):r}catch(r){throw n.runOutsideAngular(()=>e.handleError(r)),r}}(s,o,()=>{const a=i.injector.get(Nd);return a.runInitializers(),a.donePromise.then(()=>(function u_(e){"string"==typeof e&&(c_=e.toLowerCase().replace(/_/g,"-"))}(i.injector.get(gn,uo)||uo),this._moduleDoBootstrap(i),i))})})}bootstrapModule(t,r=[]){const o=Qy({},r);return function Ox(e,n,t){const r=new Wu(t);return Promise.resolve(r)}(0,0,t).then(i=>this.bootstrapModuleFactory(i,o))}_moduleDoBootstrap(t){const r=t.injector.get(po);if(t._bootstrapComponents.length>0)t._bootstrapComponents.forEach(o=>r.bootstrap(o));else{if(!t.instance.ngDoBootstrap)throw new I(-403,!1);t.instance.ngDoBootstrap(r)}this._modules.push(t)}onDestroy(t){this._destroyListeners.push(t)}get injector(){return this._injector}destroy(){if(this._destroyed)throw new I(404,!1);this._modules.slice().forEach(r=>r.destroy()),this._destroyListeners.forEach(r=>r());const t=this._injector.get(xd,null);t&&(t.forEach(r=>r()),t.clear()),this._destroyed=!0}get destroyed(){return this._destroyed}static#e=this.\u0275fac=function(r){return new(r||e)(ne(bt))};static#t=this.\u0275prov=te({token:e,factory:e.\u0275fac,providedIn:"platform"})}return e})(),On=null;const tC=new R("");function nC(e,n,t=[]){const r=`Platform: ${n}`,o=new R(r);return(i=[])=>{let s=Od();if(!s||s.injector.get(tC,!1)){const a=[...t,...i,{provide:o,useValue:!0}];e?e(a):function Bx(e){if(On&&!On.get(tC,!1))throw new I(400,!1);(function Wy(){!function jw(e){qf=e}(()=>{throw new I(600,!1)})})(),On=e;const n=e.get(eC);(function oC(e){e.get(Xh,null)?.forEach(t=>t())})(e)}(function rC(e=[],n){return bt.create({name:n,providers:[{provide:Mc,useValue:"platform"},{provide:xd,useValue:new Set([()=>On=null])},...e]})}(a,r))}return function jx(e){const n=Od();if(!n)throw new I(401,!1);return n}()}}function Od(){return On?.get(eC)??null}const qx=nC(null,"core",[]);let Wx=(()=>{class e{constructor(t){}static#e=this.\u0275fac=function(r){return new(r||e)(ne(po))};static#t=this.\u0275mod=Bn({type:e});static#n=this.\u0275inj=wn({})}return e})();let AC=null;function Ti(){return AC}class wO{}const sr=new R(""),Qd=/\s+/,VC=[];let Ni=(()=>{class e{constructor(t,r){this._ngEl=t,this._renderer=r,this.initialClasses=VC,this.stateMap=new Map}set klass(t){this.initialClasses=null!=t?t.trim().split(Qd):VC}set ngClass(t){this.rawClass="string"==typeof t?t.trim().split(Qd):t}ngDoCheck(){for(const r of this.initialClasses)this._updateState(r,!0);const t=this.rawClass;if(Array.isArray(t)||t instanceof Set)for(const r of t)this._updateState(r,!0);else if(null!=t)for(const r of Object.keys(t))this._updateState(r,!!t[r]);this._applyStateDiff()}_updateState(t,r){const o=this.stateMap.get(t);void 0!==o?(o.enabled!==r&&(o.changed=!0,o.enabled=r),o.touched=!0):this.stateMap.set(t,{enabled:r,changed:!0,touched:!0})}_applyStateDiff(){for(const t of this.stateMap){const r=t[0],o=t[1];o.changed?(this._toggleClass(r,o.enabled),o.changed=!1):o.touched||(o.enabled&&this._toggleClass(r,!1),this.stateMap.delete(r)),o.touched=!1}}_toggleClass(t,r){(t=t.trim()).length>0&&t.split(Qd).forEach(o=>{r?this._renderer.addClass(this._ngEl.nativeElement,o):this._renderer.removeClass(this._ngEl.nativeElement,o)})}static#e=this.\u0275fac=function(r){return new(r||e)(S(kt),S(Yn))};static#t=this.\u0275dir=U({type:e,selectors:[["","ngClass",""]],inputs:{klass:[Ie.None,"class","klass"],ngClass:"ngClass"},standalone:!0})}return e})();class uR{constructor(n,t,r,o){this.$implicit=n,this.ngForOf=t,this.index=r,this.count=o}get first(){return 0===this.index}get last(){return this.index===this.count-1}get even(){return this.index%2==0}get odd(){return!this.even}}let vo=(()=>{class e{set ngForOf(t){this._ngForOf=t,this._ngForOfDirty=!0}set ngForTrackBy(t){this._trackByFn=t}get ngForTrackBy(){return this._trackByFn}constructor(t,r,o){this._viewContainer=t,this._template=r,this._differs=o,this._ngForOf=null,this._ngForOfDirty=!0,this._differ=null}set ngForTemplate(t){t&&(this._template=t)}ngDoCheck(){if(this._ngForOfDirty){this._ngForOfDirty=!1;const t=this._ngForOf;!this._differ&&t&&(this._differ=this._differs.find(t).create(this.ngForTrackBy))}if(this._differ){const t=this._differ.diff(this._ngForOf);t&&this._applyChanges(t)}}_applyChanges(t){const r=this._viewContainer;t.forEachOperation((o,i,s)=>{if(null==o.previousIndex)r.createEmbeddedView(this._template,new uR(o.item,this._ngForOf,-1,-1),null===s?void 0:s);else if(null==s)r.remove(null===i?void 0:i);else if(null!==i){const a=r.get(i);r.move(a,s),BC(a,o)}});for(let o=0,i=r.length;o{BC(r.get(o.currentIndex),o)})}static ngTemplateContextGuard(t,r){return!0}static#e=this.\u0275fac=function(r){return new(r||e)(S(Qt),S(pn),S(Nu))};static#t=this.\u0275dir=U({type:e,selectors:[["","ngFor","","ngForOf",""]],inputs:{ngForOf:"ngForOf",ngForTrackBy:"ngForTrackBy",ngForTemplate:"ngForTemplate"},standalone:!0})}return e})();function BC(e,n){e.context.$implicit=n.item}let ar=(()=>{class e{constructor(t,r){this._viewContainer=t,this._context=new dR,this._thenTemplateRef=null,this._elseTemplateRef=null,this._thenViewRef=null,this._elseViewRef=null,this._thenTemplateRef=r}set ngIf(t){this._context.$implicit=this._context.ngIf=t,this._updateView()}set ngIfThen(t){jC("ngIfThen",t),this._thenTemplateRef=t,this._thenViewRef=null,this._updateView()}set ngIfElse(t){jC("ngIfElse",t),this._elseTemplateRef=t,this._elseViewRef=null,this._updateView()}_updateView(){this._context.$implicit?this._thenViewRef||(this._viewContainer.clear(),this._elseViewRef=null,this._thenTemplateRef&&(this._thenViewRef=this._viewContainer.createEmbeddedView(this._thenTemplateRef,this._context))):this._elseViewRef||(this._viewContainer.clear(),this._thenViewRef=null,this._elseTemplateRef&&(this._elseViewRef=this._viewContainer.createEmbeddedView(this._elseTemplateRef,this._context)))}static ngTemplateContextGuard(t,r){return!0}static#e=this.\u0275fac=function(r){return new(r||e)(S(Qt),S(pn))};static#t=this.\u0275dir=U({type:e,selectors:[["","ngIf",""]],inputs:{ngIf:"ngIf",ngIfThen:"ngIfThen",ngIfElse:"ngIfElse"},standalone:!0})}return e})();class dR{constructor(){this.$implicit=null,this.ngIf=null}}function jC(e,n){if(n&&!n.createEmbeddedView)throw new Error(`${e} must be a TemplateRef, but received '${ke(n)}'.`)}let zC=(()=>{class e{transform(t,r,o){if(null==t)return null;if(!this.supports(t))throw function jt(e,n){return new I(2100,!1)}();return t.slice(r,o)}supports(t){return"string"==typeof t||Array.isArray(t)}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275pipe=at({name:"slice",type:e,pure:!1,standalone:!0})}return e})(),LR=(()=>{class e{static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275mod=Bn({type:e});static#n=this.\u0275inj=wn({})}return e})();function qC(e){return"server"===e}class mF extends wO{constructor(){super(...arguments),this.supportsDOMEvents=!0}}class tf extends mF{static makeCurrent(){!function DO(e){AC??=e}(new tf)}onAndCancel(n,t,r){return n.addEventListener(t,r),()=>{n.removeEventListener(t,r)}}dispatchEvent(n,t){n.dispatchEvent(t)}remove(n){n.parentNode&&n.parentNode.removeChild(n)}createElement(n,t){return(t=t||this.getDefaultDocument()).createElement(n)}createHtmlDocument(){return document.implementation.createHTMLDocument("fakeTitle")}getDefaultDocument(){return document}isElementNode(n){return n.nodeType===Node.ELEMENT_NODE}isShadowRoot(n){return n instanceof DocumentFragment}getGlobalEventTarget(n,t){return"window"===t?window:"document"===t?n:"body"===t?n.body:null}getBaseHref(n){const t=function vF(){return Ri=Ri||document.querySelector("base"),Ri?Ri.getAttribute("href"):null}();return null==t?null:function _F(e){return new URL(e,document.baseURI).pathname}(t)}resetBaseElement(){Ri=null}getUserAgent(){return window.navigator.userAgent}getCookie(n){return function lR(e,n){n=encodeURIComponent(n);for(const t of e.split(";")){const r=t.indexOf("="),[o,i]=-1==r?[t,""]:[t.slice(0,r),t.slice(r+1)];if(o.trim()===n)return decodeURIComponent(i)}return null}(document.cookie,n)}}let Ri=null,CF=(()=>{class e{build(){return new XMLHttpRequest}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275prov=te({token:e,factory:e.\u0275fac})}return e})();const nf=new R("");let tD=(()=>{class e{constructor(t,r){this._zone=r,this._eventNameToPlugin=new Map,t.forEach(o=>{o.manager=this}),this._plugins=t.slice().reverse()}addEventListener(t,r,o){return this._findPluginFor(r).addEventListener(t,r,o)}getZone(){return this._zone}_findPluginFor(t){let r=this._eventNameToPlugin.get(t);if(r)return r;if(r=this._plugins.find(i=>i.supports(t)),!r)throw new I(5101,!1);return this._eventNameToPlugin.set(t,r),r}static#e=this.\u0275fac=function(r){return new(r||e)(ne(nf),ne(ye))};static#t=this.\u0275prov=te({token:e,factory:e.\u0275fac})}return e})();class nD{constructor(n){this._doc=n}}const rf="ng-app-id";let rD=(()=>{class e{constructor(t,r,o,i={}){this.doc=t,this.appId=r,this.nonce=o,this.platformId=i,this.styleRef=new Map,this.hostNodes=new Set,this.styleNodesInDOM=this.collectServerRenderedStyles(),this.platformIsServer=qC(i),this.resetHostNodes()}addStyles(t){for(const r of t)1===this.changeUsageCount(r,1)&&this.onStyleAdded(r)}removeStyles(t){for(const r of t)this.changeUsageCount(r,-1)<=0&&this.onStyleRemoved(r)}ngOnDestroy(){const t=this.styleNodesInDOM;t&&(t.forEach(r=>r.remove()),t.clear());for(const r of this.getAllStyles())this.onStyleRemoved(r);this.resetHostNodes()}addHost(t){this.hostNodes.add(t);for(const r of this.getAllStyles())this.addStyleToHost(t,r)}removeHost(t){this.hostNodes.delete(t)}getAllStyles(){return this.styleRef.keys()}onStyleAdded(t){for(const r of this.hostNodes)this.addStyleToHost(r,t)}onStyleRemoved(t){const r=this.styleRef;r.get(t)?.elements?.forEach(o=>o.remove()),r.delete(t)}collectServerRenderedStyles(){const t=this.doc.head?.querySelectorAll(`style[${rf}="${this.appId}"]`);if(t?.length){const r=new Map;return t.forEach(o=>{null!=o.textContent&&r.set(o.textContent,o)}),r}return null}changeUsageCount(t,r){const o=this.styleRef;if(o.has(t)){const i=o.get(t);return i.usage+=r,i.usage}return o.set(t,{usage:r,elements:[]}),r}getStyleElement(t,r){const o=this.styleNodesInDOM,i=o?.get(r);if(i?.parentNode===t)return o.delete(r),i.removeAttribute(rf),i;{const s=this.doc.createElement("style");return this.nonce&&s.setAttribute("nonce",this.nonce),s.textContent=r,this.platformIsServer&&s.setAttribute(rf,this.appId),t.appendChild(s),s}}addStyleToHost(t,r){const o=this.getStyleElement(t,r),i=this.styleRef,s=i.get(r)?.elements;s?s.push(o):i.set(r,{elements:[o],usage:1})}resetHostNodes(){const t=this.hostNodes;t.clear(),t.add(this.doc.head)}static#e=this.\u0275fac=function(r){return new(r||e)(ne(sr),ne(cs),ne(ep,8),ne(br))};static#t=this.\u0275prov=te({token:e,factory:e.\u0275fac})}return e})();const of={svg:"http://www.w3.org/2000/svg",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/",math:"http://www.w3.org/1998/MathML/"},sf=/%COMP%/g,EF=new R("",{providedIn:"root",factory:()=>!0});function iD(e,n){return n.map(t=>t.replace(sf,e))}let sD=(()=>{class e{constructor(t,r,o,i,s,a,l,c=null){this.eventManager=t,this.sharedStylesHost=r,this.appId=o,this.removeStylesOnCompDestroy=i,this.doc=s,this.platformId=a,this.ngZone=l,this.nonce=c,this.rendererByCompId=new Map,this.platformIsServer=qC(a),this.defaultRenderer=new af(t,s,l,this.platformIsServer)}createRenderer(t,r){if(!t||!r)return this.defaultRenderer;this.platformIsServer&&r.encapsulation===Nt.ShadowDom&&(r={...r,encapsulation:Nt.Emulated});const o=this.getOrCreateRenderer(t,r);return o instanceof lD?o.applyToHost(t):o instanceof lf&&o.applyStyles(),o}getOrCreateRenderer(t,r){const o=this.rendererByCompId;let i=o.get(r.id);if(!i){const s=this.doc,a=this.ngZone,l=this.eventManager,c=this.sharedStylesHost,u=this.removeStylesOnCompDestroy,d=this.platformIsServer;switch(r.encapsulation){case Nt.Emulated:i=new lD(l,c,r,this.appId,u,s,a,d);break;case Nt.ShadowDom:return new TF(l,c,t,r,s,a,this.nonce,d);default:i=new lf(l,c,r,u,s,a,d)}o.set(r.id,i)}return i}ngOnDestroy(){this.rendererByCompId.clear()}static#e=this.\u0275fac=function(r){return new(r||e)(ne(tD),ne(rD),ne(cs),ne(EF),ne(sr),ne(br),ne(ye),ne(ep))};static#t=this.\u0275prov=te({token:e,factory:e.\u0275fac})}return e})();class af{constructor(n,t,r,o){this.eventManager=n,this.doc=t,this.ngZone=r,this.platformIsServer=o,this.data=Object.create(null),this.throwOnSyntheticProps=!0,this.destroyNode=null}destroy(){}createElement(n,t){return t?this.doc.createElementNS(of[t]||t,n):this.doc.createElement(n)}createComment(n){return this.doc.createComment(n)}createText(n){return this.doc.createTextNode(n)}appendChild(n,t){(aD(n)?n.content:n).appendChild(t)}insertBefore(n,t,r){n&&(aD(n)?n.content:n).insertBefore(t,r)}removeChild(n,t){n&&n.removeChild(t)}selectRootElement(n,t){let r="string"==typeof n?this.doc.querySelector(n):n;if(!r)throw new I(-5104,!1);return t||(r.textContent=""),r}parentNode(n){return n.parentNode}nextSibling(n){return n.nextSibling}setAttribute(n,t,r,o){if(o){t=o+":"+t;const i=of[o];i?n.setAttributeNS(i,t,r):n.setAttribute(t,r)}else n.setAttribute(t,r)}removeAttribute(n,t,r){if(r){const o=of[r];o?n.removeAttributeNS(o,t):n.removeAttribute(`${r}:${t}`)}else n.removeAttribute(t)}addClass(n,t){n.classList.add(t)}removeClass(n,t){n.classList.remove(t)}setStyle(n,t,r,o){o&(Sn.DashCase|Sn.Important)?n.style.setProperty(t,r,o&Sn.Important?"important":""):n.style[t]=r}removeStyle(n,t,r){r&Sn.DashCase?n.style.removeProperty(t):n.style[t]=""}setProperty(n,t,r){null!=n&&(n[t]=r)}setValue(n,t){n.nodeValue=t}listen(n,t,r){if("string"==typeof n&&!(n=Ti().getGlobalEventTarget(this.doc,n)))throw new Error(`Unsupported event target ${n} for event ${t}`);return this.eventManager.addEventListener(n,t,this.decoratePreventDefault(r))}decoratePreventDefault(n){return t=>{if("__ngUnwrap__"===t)return n;!1===(this.platformIsServer?this.ngZone.runGuarded(()=>n(t)):n(t))&&t.preventDefault()}}}function aD(e){return"TEMPLATE"===e.tagName&&void 0!==e.content}class TF extends af{constructor(n,t,r,o,i,s,a,l){super(n,i,s,l),this.sharedStylesHost=t,this.hostEl=r,this.shadowRoot=r.attachShadow({mode:"open"}),this.sharedStylesHost.addHost(this.shadowRoot);const c=iD(o.id,o.styles);for(const u of c){const d=document.createElement("style");a&&d.setAttribute("nonce",a),d.textContent=u,this.shadowRoot.appendChild(d)}}nodeOrShadowRoot(n){return n===this.hostEl?this.shadowRoot:n}appendChild(n,t){return super.appendChild(this.nodeOrShadowRoot(n),t)}insertBefore(n,t,r){return super.insertBefore(this.nodeOrShadowRoot(n),t,r)}removeChild(n,t){return super.removeChild(this.nodeOrShadowRoot(n),t)}parentNode(n){return this.nodeOrShadowRoot(super.parentNode(this.nodeOrShadowRoot(n)))}destroy(){this.sharedStylesHost.removeHost(this.shadowRoot)}}class lf extends af{constructor(n,t,r,o,i,s,a,l){super(n,i,s,a),this.sharedStylesHost=t,this.removeStylesOnCompDestroy=o,this.styles=l?iD(l,r.styles):r.styles}applyStyles(){this.sharedStylesHost.addStyles(this.styles)}destroy(){this.removeStylesOnCompDestroy&&this.sharedStylesHost.removeStyles(this.styles)}}class lD extends lf{constructor(n,t,r,o,i,s,a,l){const c=o+"-"+r.id;super(n,t,r,i,s,a,l,c),this.contentAttr=function IF(e){return"_ngcontent-%COMP%".replace(sf,e)}(c),this.hostAttr=function MF(e){return"_nghost-%COMP%".replace(sf,e)}(c)}applyToHost(n){this.applyStyles(),this.setAttribute(n,this.hostAttr,"")}createElement(n,t){const r=super.createElement(n,t);return super.setAttribute(r,this.contentAttr,""),r}}let AF=(()=>{class e extends nD{constructor(t){super(t)}supports(t){return!0}addEventListener(t,r,o){return t.addEventListener(r,o,!1),()=>this.removeEventListener(t,r,o)}removeEventListener(t,r,o){return t.removeEventListener(r,o)}static#e=this.\u0275fac=function(r){return new(r||e)(ne(sr))};static#t=this.\u0275prov=te({token:e,factory:e.\u0275fac})}return e})();const cD=["alt","control","meta","shift"],NF={"\b":"Backspace","\t":"Tab","\x7f":"Delete","\x1b":"Escape",Del:"Delete",Esc:"Escape",Left:"ArrowLeft",Right:"ArrowRight",Up:"ArrowUp",Down:"ArrowDown",Menu:"ContextMenu",Scroll:"ScrollLock",Win:"OS"},xF={alt:e=>e.altKey,control:e=>e.ctrlKey,meta:e=>e.metaKey,shift:e=>e.shiftKey};let OF=(()=>{class e extends nD{constructor(t){super(t)}supports(t){return null!=e.parseEventName(t)}addEventListener(t,r,o){const i=e.parseEventName(r),s=e.eventCallback(i.fullKey,o,this.manager.getZone());return this.manager.getZone().runOutsideAngular(()=>Ti().onAndCancel(t,i.domEventName,s))}static parseEventName(t){const r=t.toLowerCase().split("."),o=r.shift();if(0===r.length||"keydown"!==o&&"keyup"!==o)return null;const i=e._normalizeKey(r.pop());let s="",a=r.indexOf("code");if(a>-1&&(r.splice(a,1),s="code."),cD.forEach(c=>{const u=r.indexOf(c);u>-1&&(r.splice(u,1),s+=c+".")}),s+=i,0!=r.length||0===i.length)return null;const l={};return l.domEventName=o,l.fullKey=s,l}static matchEventFullKeyCode(t,r){let o=NF[t.key]||t.key,i="";return r.indexOf("code.")>-1&&(o=t.code,i="code."),!(null==o||!o)&&(o=o.toLowerCase()," "===o?o="space":"."===o&&(o="dot"),cD.forEach(s=>{s!==o&&(0,xF[s])(t)&&(i+=s+".")}),i+=o,i===r)}static eventCallback(t,r,o){return i=>{e.matchEventFullKeyCode(i,t)&&o.runGuarded(()=>r(i))}}static _normalizeKey(t){return"esc"===t?"escape":t}static#e=this.\u0275fac=function(r){return new(r||e)(ne(sr))};static#t=this.\u0275prov=te({token:e,factory:e.\u0275fac})}return e})();const kF=nC(qx,"browser",[{provide:br,useValue:"browser"},{provide:Xh,useValue:function RF(){tf.makeCurrent()},multi:!0},{provide:sr,useFactory:function PF(){return function Jb(e){Kl=e}(document),document},deps:[]}]),LF=new R(""),fD=[{provide:Sa,useClass:class yF{addToWindow(n){ae.getAngularTestability=(r,o=!0)=>{const i=n.findTestabilityInTree(r,o);if(null==i)throw new I(5103,!1);return i},ae.getAllAngularTestabilities=()=>n.getAllTestabilities(),ae.getAllAngularRootElements=()=>n.getAllRootElements(),ae.frameworkStabilizers||(ae.frameworkStabilizers=[]),ae.frameworkStabilizers.push(r=>{const o=ae.getAllAngularTestabilities();let i=o.length;const s=function(){i--,0==i&&r()};o.forEach(a=>{a.whenStable(s)})})}findTestabilityInTree(n,t,r){return null==t?null:n.getTestability(t)??(r?Ti().isShadowRoot(t)?this.findTestabilityInTree(n,t.host,!0):this.findTestabilityInTree(n,t.parentElement,!0):null)}},deps:[]},{provide:zy,useClass:Sd,deps:[ye,Td,Sa]},{provide:Sd,useClass:Sd,deps:[ye,Td,Sa]}],hD=[{provide:Mc,useValue:"root"},{provide:dn,useFactory:function FF(){return new dn},deps:[]},{provide:nf,useClass:AF,multi:!0,deps:[sr,ye,br]},{provide:nf,useClass:OF,multi:!0,deps:[sr]},sD,rD,tD,{provide:um,useExisting:sD},{provide:class $R{},useClass:CF,deps:[]},[]];let VF=(()=>{class e{constructor(t){}static withServerTransition(t){return{ngModule:e,providers:[{provide:cs,useValue:t.appId}]}}static#e=this.\u0275fac=function(r){return new(r||e)(ne(LF,12))};static#t=this.\u0275mod=Bn({type:e});static#n=this.\u0275inj=wn({providers:[...hD,...fD],imports:[LR,Wx]})}return e})();function lr(e){return this instanceof lr?(this.v=e,this):new lr(e)}function GF(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t,n=e[Symbol.asyncIterator];return n?n.call(e):(e=function yD(e){var n="function"==typeof Symbol&&Symbol.iterator,t=n&&e[n],r=0;if(t)return t.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(n?"Object is not iterable.":"Symbol.iterator is not defined.")}(e),t={},r("next"),r("throw"),r("return"),t[Symbol.asyncIterator]=function(){return this},t);function r(i){t[i]=e[i]&&function(s){return new Promise(function(a,l){!function o(i,s,a,l){Promise.resolve(l).then(function(c){i({value:c,done:a})},s)}(a,l,(s=e[i](s)).done,s.value)})}}}const CD=e=>e&&"number"==typeof e.length&&"function"!=typeof e;function DD(e){return $e(e?.then)}function wD(e){return $e(e[Cl])}function bD(e){return Symbol.asyncIterator&&$e(e?.[Symbol.asyncIterator])}function ED(e){return new TypeError(`You provided ${null!==e&&"object"==typeof e?"an invalid object":`'${e}'`} where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.`)}const ID=function WF(){return"function"==typeof Symbol&&Symbol.iterator?Symbol.iterator:"@@iterator"}();function MD(e){return $e(e?.[ID])}function SD(e){return function zF(e,n,t){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var o,r=t.apply(e,n||[]),i=[];return o={},s("next"),s("throw"),s("return"),o[Symbol.asyncIterator]=function(){return this},o;function s(h){r[h]&&(o[h]=function(p){return new Promise(function(m,D){i.push([h,p,m,D])>1||a(h,p)})})}function a(h,p){try{!function l(h){h.value instanceof lr?Promise.resolve(h.value.v).then(c,u):d(i[0][2],h)}(r[h](p))}catch(m){d(i[0][3],m)}}function c(h){a("next",h)}function u(h){a("throw",h)}function d(h,p){h(p),i.shift(),i.length&&a(i[0][0],i[0][1])}}(this,arguments,function*(){const t=e.getReader();try{for(;;){const{value:r,done:o}=yield lr(t.read());if(o)return yield lr(void 0);yield yield lr(r)}}finally{t.releaseLock()}})}function TD(e){return $e(e?.getReader)}function Ka(e){if(e instanceof wt)return e;if(null!=e){if(wD(e))return function ZF(e){return new wt(n=>{const t=e[Cl]();if($e(t.subscribe))return t.subscribe(n);throw new TypeError("Provided object does not correctly implement Symbol.observable")})}(e);if(CD(e))return function QF(e){return new wt(n=>{for(let t=0;t{e.then(t=>{n.closed||(n.next(t),n.complete())},t=>n.error(t)).then(null,Xf)})}(e);if(bD(e))return AD(e);if(MD(e))return function KF(e){return new wt(n=>{for(const t of e)if(n.next(t),n.closed)return;n.complete()})}(e);if(TD(e))return function JF(e){return AD(SD(e))}(e)}throw ED(e)}function AD(e){return new wt(n=>{(function XF(e,n){var t,r,o,i;return function $F(e,n,t,r){return new(t||(t=Promise))(function(i,s){function a(u){try{c(r.next(u))}catch(d){s(d)}}function l(u){try{c(r.throw(u))}catch(d){s(d)}}function c(u){u.done?i(u.value):function o(i){return i instanceof t?i:new t(function(s){s(i)})}(u.value).then(a,l)}c((r=r.apply(e,n||[])).next())})}(this,void 0,void 0,function*(){try{for(t=GF(e);!(r=yield t.next()).done;)if(n.next(r.value),n.closed)return}catch(s){o={error:s}}finally{try{r&&!r.done&&(i=t.return)&&(yield i.call(t))}finally{if(o)throw o.error}}n.complete()})})(e,n).catch(t=>n.error(t))})}function cr(e,n,t,r=0,o=!1){const i=n.schedule(function(){t(),o?e.add(this.schedule(null,r)):this.unsubscribe()},r);if(e.add(i),!o)return i}function ND(e,n=0){return wl((t,r)=>{t.subscribe(new bl(r,o=>cr(r,e,()=>r.next(o),n),()=>cr(r,e,()=>r.complete(),n),o=>cr(r,e,()=>r.error(o),n)))})}function xD(e,n=0){return wl((t,r)=>{r.add(e.schedule(()=>t.subscribe(r),n))})}function OD(e,n){if(!e)throw new Error("Iterable cannot be null");return new wt(t=>{cr(t,n,()=>{const r=e[Symbol.asyncIterator]();cr(t,n,()=>{r.next().then(o=>{o.done?t.complete():t.next(o.value)})},0,!0)})})}const{isArray:aP}=Array,{getPrototypeOf:lP,prototype:cP,keys:uP}=Object;const{isArray:pP}=Array;function vP(e,n){return e.reduce((t,r,o)=>(t[r]=n[o],t),{})}function _P(...e){const n=function hP(e){return $e(function uf(e){return e[e.length-1]}(e))?e.pop():void 0}(e),{args:t,keys:r}=function dP(e){if(1===e.length){const n=e[0];if(aP(n))return{args:n,keys:null};if(function fP(e){return e&&"object"==typeof e&&lP(e)===cP}(n)){const t=uP(n);return{args:t.map(r=>n[r]),keys:t}}}return{args:e,keys:null}}(e),o=new wt(i=>{const{length:s}=t;if(!s)return void i.complete();const a=new Array(s);let l=s,c=s;for(let u=0;u{d||(d=!0,c--),a[u]=h},()=>l--,void 0,()=>{(!l||!d)&&(c||i.next(r?vP(r,a):a),i.complete())}))}});return n?o.pipe(function mP(e){return El(n=>function gP(e,n){return pP(n)?e(...n):e(n)}(e,n))}(n)):o}let RD=(()=>{class e{constructor(t,r){this._renderer=t,this._elementRef=r,this.onChange=o=>{},this.onTouched=()=>{}}setProperty(t,r){this._renderer.setProperty(this._elementRef.nativeElement,t,r)}registerOnTouched(t){this.onTouched=t}registerOnChange(t){this.onChange=t}setDisabledState(t){this.setProperty("disabled",t)}static#e=this.\u0275fac=function(r){return new(r||e)(S(Yn),S(kt))};static#t=this.\u0275dir=U({type:e})}return e})(),ur=(()=>{class e extends RD{static#e=this.\u0275fac=(()=>{let t;return function(o){return(t||(t=Ke(e)))(o||e)}})();static#t=this.\u0275dir=U({type:e,features:[ue]})}return e})();const en=new R(""),yP={provide:en,useExisting:ge(()=>df),multi:!0};let df=(()=>{class e extends ur{writeValue(t){this.setProperty("checked",t)}static#e=this.\u0275fac=(()=>{let t;return function(o){return(t||(t=Ke(e)))(o||e)}})();static#t=this.\u0275dir=U({type:e,selectors:[["input","type","checkbox","formControlName",""],["input","type","checkbox","formControl",""],["input","type","checkbox","ngModel",""]],hostBindings:function(r,o){1&r&&$("change",function(s){return o.onChange(s.target.checked)})("blur",function(){return o.onTouched()})},features:[De([yP]),ue]})}return e})();const CP={provide:en,useExisting:ge(()=>Pi),multi:!0},wP=new R("");let Pi=(()=>{class e extends RD{constructor(t,r,o){super(t,r),this._compositionMode=o,this._composing=!1,null==this._compositionMode&&(this._compositionMode=!function DP(){const e=Ti()?Ti().getUserAgent():"";return/android (\d+)/.test(e.toLowerCase())}())}writeValue(t){this.setProperty("value",t??"")}_handleInput(t){(!this._compositionMode||this._compositionMode&&!this._composing)&&this.onChange(t)}_compositionStart(){this._composing=!0}_compositionEnd(t){this._composing=!1,this._compositionMode&&this.onChange(t)}static#e=this.\u0275fac=function(r){return new(r||e)(S(Yn),S(kt),S(wP,8))};static#t=this.\u0275dir=U({type:e,selectors:[["input","formControlName","",3,"type","checkbox"],["textarea","formControlName",""],["input","formControl","",3,"type","checkbox"],["textarea","formControl",""],["input","ngModel","",3,"type","checkbox"],["textarea","ngModel",""],["","ngDefaultControl",""]],hostBindings:function(r,o){1&r&&$("input",function(s){return o._handleInput(s.target.value)})("blur",function(){return o.onTouched()})("compositionstart",function(){return o._compositionStart()})("compositionend",function(s){return o._compositionEnd(s.target.value)})},features:[De([CP]),ue]})}return e})();const et=new R(""),Fn=new R("");function UD(e){return null!=e}function zD(e){return Ta(e)?function sP(e,n){return n?function iP(e,n){if(null!=e){if(wD(e))return function eP(e,n){return Ka(e).pipe(xD(n),ND(n))}(e,n);if(CD(e))return function nP(e,n){return new wt(t=>{let r=0;return n.schedule(function(){r===e.length?t.complete():(t.next(e[r++]),t.closed||this.schedule())})})}(e,n);if(DD(e))return function tP(e,n){return Ka(e).pipe(xD(n),ND(n))}(e,n);if(bD(e))return OD(e,n);if(MD(e))return function rP(e,n){return new wt(t=>{let r;return cr(t,n,()=>{r=e[ID](),cr(t,n,()=>{let o,i;try{({value:o,done:i}=r.next())}catch(s){return void t.error(s)}i?t.complete():t.next(o)},0,!0)}),()=>$e(r?.return)&&r.return()})}(e,n);if(TD(e))return function oP(e,n){return OD(SD(e),n)}(e,n)}throw ED(e)}(e,n):Ka(e)}(e):e}function GD(e){let n={};return e.forEach(t=>{n=null!=t?{...n,...t}:n}),0===Object.keys(n).length?null:n}function qD(e,n){return n.map(t=>t(e))}function WD(e){return e.map(n=>function EP(e){return!e.validate}(n)?n:t=>n.validate(t))}function ff(e){return null!=e?function ZD(e){if(!e)return null;const n=e.filter(UD);return 0==n.length?null:function(t){return GD(qD(t,n))}}(WD(e)):null}function hf(e){return null!=e?function QD(e){if(!e)return null;const n=e.filter(UD);return 0==n.length?null:function(t){return _P(qD(t,n).map(zD)).pipe(El(GD))}}(WD(e)):null}function YD(e,n){return null===e?[n]:Array.isArray(e)?[...e,n]:[e,n]}function pf(e){return e?Array.isArray(e)?e:[e]:[]}function Xa(e,n){return Array.isArray(e)?e.includes(n):e===n}function XD(e,n){const t=pf(n);return pf(e).forEach(o=>{Xa(t,o)||t.push(o)}),t}function ew(e,n){return pf(n).filter(t=>!Xa(e,t))}class tw{constructor(){this._rawValidators=[],this._rawAsyncValidators=[],this._onDestroyCallbacks=[]}get value(){return this.control?this.control.value:null}get valid(){return this.control?this.control.valid:null}get invalid(){return this.control?this.control.invalid:null}get pending(){return this.control?this.control.pending:null}get disabled(){return this.control?this.control.disabled:null}get enabled(){return this.control?this.control.enabled:null}get errors(){return this.control?this.control.errors:null}get pristine(){return this.control?this.control.pristine:null}get dirty(){return this.control?this.control.dirty:null}get touched(){return this.control?this.control.touched:null}get status(){return this.control?this.control.status:null}get untouched(){return this.control?this.control.untouched:null}get statusChanges(){return this.control?this.control.statusChanges:null}get valueChanges(){return this.control?this.control.valueChanges:null}get path(){return null}_setValidators(n){this._rawValidators=n||[],this._composedValidatorFn=ff(this._rawValidators)}_setAsyncValidators(n){this._rawAsyncValidators=n||[],this._composedAsyncValidatorFn=hf(this._rawAsyncValidators)}get validator(){return this._composedValidatorFn||null}get asyncValidator(){return this._composedAsyncValidatorFn||null}_registerOnDestroy(n){this._onDestroyCallbacks.push(n)}_invokeOnDestroyCallbacks(){this._onDestroyCallbacks.forEach(n=>n()),this._onDestroyCallbacks=[]}reset(n=void 0){this.control&&this.control.reset(n)}hasError(n,t){return!!this.control&&this.control.hasError(n,t)}getError(n,t){return this.control?this.control.getError(n,t):null}}class st extends tw{get formDirective(){return null}get path(){return null}}class Pn extends tw{constructor(){super(...arguments),this._parent=null,this.name=null,this.valueAccessor=null}}class nw{constructor(n){this._cd=n}get isTouched(){return!!this._cd?.control?.touched}get isUntouched(){return!!this._cd?.control?.untouched}get isPristine(){return!!this._cd?.control?.pristine}get isDirty(){return!!this._cd?.control?.dirty}get isValid(){return!!this._cd?.control?.valid}get isInvalid(){return!!this._cd?.control?.invalid}get isPending(){return!!this._cd?.control?.pending}get isSubmitted(){return!!this._cd?.submitted}}let el=(()=>{class e extends nw{constructor(t){super(t)}static#e=this.\u0275fac=function(r){return new(r||e)(S(Pn,2))};static#t=this.\u0275dir=U({type:e,selectors:[["","formControlName",""],["","ngModel",""],["","formControl",""]],hostVars:14,hostBindings:function(r,o){2&r&&ma("ng-untouched",o.isUntouched)("ng-touched",o.isTouched)("ng-pristine",o.isPristine)("ng-dirty",o.isDirty)("ng-valid",o.isValid)("ng-invalid",o.isInvalid)("ng-pending",o.isPending)},features:[ue]})}return e})();const ki="VALID",nl="INVALID",_o="PENDING",Li="DISABLED";function rl(e){return null!=e&&!Array.isArray(e)&&"object"==typeof e}class yf{constructor(n,t){this._pendingDirty=!1,this._hasOwnPendingAsyncValidator=!1,this._pendingTouched=!1,this._onCollectionChange=()=>{},this._parent=null,this.pristine=!0,this.touched=!1,this._onDisabledChange=[],this._assignValidators(n),this._assignAsyncValidators(t)}get validator(){return this._composedValidatorFn}set validator(n){this._rawValidators=this._composedValidatorFn=n}get asyncValidator(){return this._composedAsyncValidatorFn}set asyncValidator(n){this._rawAsyncValidators=this._composedAsyncValidatorFn=n}get parent(){return this._parent}get valid(){return this.status===ki}get invalid(){return this.status===nl}get pending(){return this.status==_o}get disabled(){return this.status===Li}get enabled(){return this.status!==Li}get dirty(){return!this.pristine}get untouched(){return!this.touched}get updateOn(){return this._updateOn?this._updateOn:this.parent?this.parent.updateOn:"change"}setValidators(n){this._assignValidators(n)}setAsyncValidators(n){this._assignAsyncValidators(n)}addValidators(n){this.setValidators(XD(n,this._rawValidators))}addAsyncValidators(n){this.setAsyncValidators(XD(n,this._rawAsyncValidators))}removeValidators(n){this.setValidators(ew(n,this._rawValidators))}removeAsyncValidators(n){this.setAsyncValidators(ew(n,this._rawAsyncValidators))}hasValidator(n){return Xa(this._rawValidators,n)}hasAsyncValidator(n){return Xa(this._rawAsyncValidators,n)}clearValidators(){this.validator=null}clearAsyncValidators(){this.asyncValidator=null}markAsTouched(n={}){this.touched=!0,this._parent&&!n.onlySelf&&this._parent.markAsTouched(n)}markAllAsTouched(){this.markAsTouched({onlySelf:!0}),this._forEachChild(n=>n.markAllAsTouched())}markAsUntouched(n={}){this.touched=!1,this._pendingTouched=!1,this._forEachChild(t=>{t.markAsUntouched({onlySelf:!0})}),this._parent&&!n.onlySelf&&this._parent._updateTouched(n)}markAsDirty(n={}){this.pristine=!1,this._parent&&!n.onlySelf&&this._parent.markAsDirty(n)}markAsPristine(n={}){this.pristine=!0,this._pendingDirty=!1,this._forEachChild(t=>{t.markAsPristine({onlySelf:!0})}),this._parent&&!n.onlySelf&&this._parent._updatePristine(n)}markAsPending(n={}){this.status=_o,!1!==n.emitEvent&&this.statusChanges.emit(this.status),this._parent&&!n.onlySelf&&this._parent.markAsPending(n)}disable(n={}){const t=this._parentMarkedDirty(n.onlySelf);this.status=Li,this.errors=null,this._forEachChild(r=>{r.disable({...n,onlySelf:!0})}),this._updateValue(),!1!==n.emitEvent&&(this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._updateAncestors({...n,skipPristineCheck:t}),this._onDisabledChange.forEach(r=>r(!0))}enable(n={}){const t=this._parentMarkedDirty(n.onlySelf);this.status=ki,this._forEachChild(r=>{r.enable({...n,onlySelf:!0})}),this.updateValueAndValidity({onlySelf:!0,emitEvent:n.emitEvent}),this._updateAncestors({...n,skipPristineCheck:t}),this._onDisabledChange.forEach(r=>r(!1))}_updateAncestors(n){this._parent&&!n.onlySelf&&(this._parent.updateValueAndValidity(n),n.skipPristineCheck||this._parent._updatePristine(),this._parent._updateTouched())}setParent(n){this._parent=n}getRawValue(){return this.value}updateValueAndValidity(n={}){this._setInitialStatus(),this._updateValue(),this.enabled&&(this._cancelExistingSubscription(),this.errors=this._runValidator(),this.status=this._calculateStatus(),(this.status===ki||this.status===_o)&&this._runAsyncValidator(n.emitEvent)),!1!==n.emitEvent&&(this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._parent&&!n.onlySelf&&this._parent.updateValueAndValidity(n)}_updateTreeValidity(n={emitEvent:!0}){this._forEachChild(t=>t._updateTreeValidity(n)),this.updateValueAndValidity({onlySelf:!0,emitEvent:n.emitEvent})}_setInitialStatus(){this.status=this._allControlsDisabled()?Li:ki}_runValidator(){return this.validator?this.validator(this):null}_runAsyncValidator(n){if(this.asyncValidator){this.status=_o,this._hasOwnPendingAsyncValidator=!0;const t=zD(this.asyncValidator(this));this._asyncValidationSubscription=t.subscribe(r=>{this._hasOwnPendingAsyncValidator=!1,this.setErrors(r,{emitEvent:n})})}}_cancelExistingSubscription(){this._asyncValidationSubscription&&(this._asyncValidationSubscription.unsubscribe(),this._hasOwnPendingAsyncValidator=!1)}setErrors(n,t={}){this.errors=n,this._updateControlsErrors(!1!==t.emitEvent)}get(n){let t=n;return null==t||(Array.isArray(t)||(t=t.split(".")),0===t.length)?null:t.reduce((r,o)=>r&&r._find(o),this)}getError(n,t){const r=t?this.get(t):this;return r&&r.errors?r.errors[n]:null}hasError(n,t){return!!this.getError(n,t)}get root(){let n=this;for(;n._parent;)n=n._parent;return n}_updateControlsErrors(n){this.status=this._calculateStatus(),n&&this.statusChanges.emit(this.status),this._parent&&this._parent._updateControlsErrors(n)}_initObservables(){this.valueChanges=new Ee,this.statusChanges=new Ee}_calculateStatus(){return this._allControlsDisabled()?Li:this.errors?nl:this._hasOwnPendingAsyncValidator||this._anyControlsHaveStatus(_o)?_o:this._anyControlsHaveStatus(nl)?nl:ki}_anyControlsHaveStatus(n){return this._anyControls(t=>t.status===n)}_anyControlsDirty(){return this._anyControls(n=>n.dirty)}_anyControlsTouched(){return this._anyControls(n=>n.touched)}_updatePristine(n={}){this.pristine=!this._anyControlsDirty(),this._parent&&!n.onlySelf&&this._parent._updatePristine(n)}_updateTouched(n={}){this.touched=this._anyControlsTouched(),this._parent&&!n.onlySelf&&this._parent._updateTouched(n)}_registerOnCollectionChange(n){this._onCollectionChange=n}_setUpdateStrategy(n){rl(n)&&null!=n.updateOn&&(this._updateOn=n.updateOn)}_parentMarkedDirty(n){return!n&&!(!this._parent||!this._parent.dirty)&&!this._parent._anyControlsDirty()}_find(n){return null}_assignValidators(n){this._rawValidators=Array.isArray(n)?n.slice():n,this._composedValidatorFn=function AP(e){return Array.isArray(e)?ff(e):e||null}(this._rawValidators)}_assignAsyncValidators(n){this._rawAsyncValidators=Array.isArray(n)?n.slice():n,this._composedAsyncValidatorFn=function NP(e){return Array.isArray(e)?hf(e):e||null}(this._rawAsyncValidators)}}const yo=new R("CallSetDisabledState",{providedIn:"root",factory:()=>ol}),ol="always";function Vi(e,n,t=ol){(function Df(e,n){const t=function KD(e){return e._rawValidators}(e);null!==n.validator?e.setValidators(YD(t,n.validator)):"function"==typeof t&&e.setValidators([t]);const r=function JD(e){return e._rawAsyncValidators}(e);null!==n.asyncValidator?e.setAsyncValidators(YD(r,n.asyncValidator)):"function"==typeof r&&e.setAsyncValidators([r]);const o=()=>e.updateValueAndValidity();al(n._rawValidators,o),al(n._rawAsyncValidators,o)})(e,n),n.valueAccessor.writeValue(e.value),(e.disabled||"always"===t)&&n.valueAccessor.setDisabledState?.(e.disabled),function RP(e,n){n.valueAccessor.registerOnChange(t=>{e._pendingValue=t,e._pendingChange=!0,e._pendingDirty=!0,"change"===e.updateOn&&sw(e,n)})}(e,n),function PP(e,n){const t=(r,o)=>{n.valueAccessor.writeValue(r),o&&n.viewToModelUpdate(r)};e.registerOnChange(t),n._registerOnDestroy(()=>{e._unregisterOnChange(t)})}(e,n),function FP(e,n){n.valueAccessor.registerOnTouched(()=>{e._pendingTouched=!0,"blur"===e.updateOn&&e._pendingChange&&sw(e,n),"submit"!==e.updateOn&&e.markAsTouched()})}(e,n),function OP(e,n){if(n.valueAccessor.setDisabledState){const t=r=>{n.valueAccessor.setDisabledState(r)};e.registerOnDisabledChange(t),n._registerOnDestroy(()=>{e._unregisterOnDisabledChange(t)})}}(e,n)}function al(e,n){e.forEach(t=>{t.registerOnValidatorChange&&t.registerOnValidatorChange(n)})}function sw(e,n){e._pendingDirty&&e.markAsDirty(),e.setValue(e._pendingValue,{emitModelToViewChange:!1}),n.viewToModelUpdate(e._pendingValue),e._pendingChange=!1}function cw(e,n){const t=e.indexOf(n);t>-1&&e.splice(t,1)}function uw(e){return"object"==typeof e&&null!==e&&2===Object.keys(e).length&&"value"in e&&"disabled"in e}Promise.resolve();const dw=class extends yf{constructor(n=null,t,r){super(function vf(e){return(rl(e)?e.validators:e)||null}(t),function _f(e,n){return(rl(n)?n.asyncValidators:e)||null}(r,t)),this.defaultValue=null,this._onChange=[],this._pendingChange=!1,this._applyFormState(n),this._setUpdateStrategy(t),this._initObservables(),this.updateValueAndValidity({onlySelf:!0,emitEvent:!!this.asyncValidator}),rl(t)&&(t.nonNullable||t.initialValueIsDefault)&&(this.defaultValue=uw(n)?n.value:n)}setValue(n,t={}){this.value=this._pendingValue=n,this._onChange.length&&!1!==t.emitModelToViewChange&&this._onChange.forEach(r=>r(this.value,!1!==t.emitViewToModelChange)),this.updateValueAndValidity(t)}patchValue(n,t={}){this.setValue(n,t)}reset(n=this.defaultValue,t={}){this._applyFormState(n),this.markAsPristine(t),this.markAsUntouched(t),this.setValue(this.value,t),this._pendingChange=!1}_updateValue(){}_anyControls(n){return!1}_allControlsDisabled(){return this.disabled}registerOnChange(n){this._onChange.push(n)}_unregisterOnChange(n){cw(this._onChange,n)}registerOnDisabledChange(n){this._onDisabledChange.push(n)}_unregisterOnDisabledChange(n){cw(this._onDisabledChange,n)}_forEachChild(n){}_syncPendingControls(){return!("submit"!==this.updateOn||(this._pendingDirty&&this.markAsDirty(),this._pendingTouched&&this.markAsTouched(),!this._pendingChange)||(this.setValue(this._pendingValue,{onlySelf:!0,emitModelToViewChange:!1}),0))}_applyFormState(n){uw(n)?(this.value=this._pendingValue=n.value,n.disabled?this.disable({onlySelf:!0,emitEvent:!1}):this.enable({onlySelf:!0,emitEvent:!1})):this.value=this._pendingValue=n}},UP={provide:Pn,useExisting:ge(()=>Bi)},pw=Promise.resolve();let Bi=(()=>{class e extends Pn{constructor(t,r,o,i,s,a){super(),this._changeDetectorRef=s,this.callSetDisabledState=a,this.control=new dw,this._registered=!1,this.name="",this.update=new Ee,this._parent=t,this._setValidators(r),this._setAsyncValidators(o),this.valueAccessor=function Ef(e,n){if(!n)return null;let t,r,o;return Array.isArray(n),n.forEach(i=>{i.constructor===Pi?t=i:function VP(e){return Object.getPrototypeOf(e.constructor)===ur}(i)?r=i:o=i}),o||r||t||null}(0,i)}ngOnChanges(t){if(this._checkForErrors(),!this._registered||"name"in t){if(this._registered&&(this._checkName(),this.formDirective)){const r=t.name.previousValue;this.formDirective.removeControl({name:r,path:this._getPath(r)})}this._setUpControl()}"isDisabled"in t&&this._updateDisabled(t),function bf(e,n){if(!e.hasOwnProperty("model"))return!1;const t=e.model;return!!t.isFirstChange()||!Object.is(n,t.currentValue)}(t,this.viewModel)&&(this._updateValue(this.model),this.viewModel=this.model)}ngOnDestroy(){this.formDirective&&this.formDirective.removeControl(this)}get path(){return this._getPath(this.name)}get formDirective(){return this._parent?this._parent.formDirective:null}viewToModelUpdate(t){this.viewModel=t,this.update.emit(t)}_setUpControl(){this._setUpdateStrategy(),this._isStandalone()?this._setUpStandalone():this.formDirective.addControl(this),this._registered=!0}_setUpdateStrategy(){this.options&&null!=this.options.updateOn&&(this.control._updateOn=this.options.updateOn)}_isStandalone(){return!this._parent||!(!this.options||!this.options.standalone)}_setUpStandalone(){Vi(this.control,this,this.callSetDisabledState),this.control.updateValueAndValidity({emitEvent:!1})}_checkForErrors(){this._isStandalone()||this._checkParentType(),this._checkName()}_checkParentType(){}_checkName(){this.options&&this.options.name&&(this.name=this.options.name),this._isStandalone()}_updateValue(t){pw.then(()=>{this.control.setValue(t,{emitViewToModelChange:!1}),this._changeDetectorRef?.markForCheck()})}_updateDisabled(t){const r=t.isDisabled.currentValue,o=0!==r&&function Hd(e){return"boolean"==typeof e?e:null!=e&&"false"!==e}(r);pw.then(()=>{o&&!this.control.disabled?this.control.disable():!o&&this.control.disabled&&this.control.enable(),this._changeDetectorRef?.markForCheck()})}_getPath(t){return this._parent?function il(e,n){return[...n.path,e]}(t,this._parent):[t]}static#e=this.\u0275fac=function(r){return new(r||e)(S(st,9),S(et,10),S(Fn,10),S(en,10),S(xu,8),S(yo,8))};static#t=this.\u0275dir=U({type:e,selectors:[["","ngModel","",3,"formControlName","",3,"formControl",""]],inputs:{name:"name",isDisabled:[Ie.None,"disabled","isDisabled"],model:[Ie.None,"ngModel","model"],options:[Ie.None,"ngModelOptions","options"]},outputs:{update:"ngModelChange"},exportAs:["ngModel"],features:[De([UP]),ue,un]})}return e})();const ZP={provide:en,useExisting:ge(()=>Mf),multi:!0};let Mf=(()=>{class e extends ur{writeValue(t){this.setProperty("value",parseFloat(t))}registerOnChange(t){this.onChange=r=>{t(""==r?null:parseFloat(r))}}static#e=this.\u0275fac=(()=>{let t;return function(o){return(t||(t=Ke(e)))(o||e)}})();static#t=this.\u0275dir=U({type:e,selectors:[["input","type","range","formControlName",""],["input","type","range","formControl",""],["input","type","range","ngModel",""]],hostBindings:function(r,o){1&r&&$("change",function(s){return o.onChange(s.target.value)})("input",function(s){return o.onChange(s.target.value)})("blur",function(){return o.onTouched()})},features:[De([ZP]),ue]})}return e})();const ek={provide:en,useExisting:ge(()=>ji),multi:!0};function Dw(e,n){return null==e?`${n}`:(n&&"object"==typeof n&&(n="Object"),`${e}: ${n}`.slice(0,50))}let ji=(()=>{class e extends ur{constructor(){super(...arguments),this._optionMap=new Map,this._idCounter=0,this._compareWith=Object.is}set compareWith(t){this._compareWith=t}writeValue(t){this.value=t;const o=Dw(this._getOptionId(t),t);this.setProperty("value",o)}registerOnChange(t){this.onChange=r=>{this.value=this._getOptionValue(r),t(this.value)}}_registerOption(){return(this._idCounter++).toString()}_getOptionId(t){for(const r of this._optionMap.keys())if(this._compareWith(this._optionMap.get(r),t))return r;return null}_getOptionValue(t){const r=function tk(e){return e.split(":")[0]}(t);return this._optionMap.has(r)?this._optionMap.get(r):t}static#e=this.\u0275fac=(()=>{let t;return function(o){return(t||(t=Ke(e)))(o||e)}})();static#t=this.\u0275dir=U({type:e,selectors:[["select","formControlName","",3,"multiple",""],["select","formControl","",3,"multiple",""],["select","ngModel","",3,"multiple",""]],hostBindings:function(r,o){1&r&&$("change",function(s){return o.onChange(s.target.value)})("blur",function(){return o.onTouched()})},inputs:{compareWith:"compareWith"},features:[De([ek]),ue]})}return e})(),Nf=(()=>{class e{constructor(t,r,o){this._element=t,this._renderer=r,this._select=o,this._select&&(this.id=this._select._registerOption())}set ngValue(t){null!=this._select&&(this._select._optionMap.set(this.id,t),this._setElementValue(Dw(this.id,t)),this._select.writeValue(this._select.value))}set value(t){this._setElementValue(t),this._select&&this._select.writeValue(this._select.value)}_setElementValue(t){this._renderer.setProperty(this._element.nativeElement,"value",t)}ngOnDestroy(){this._select&&(this._select._optionMap.delete(this.id),this._select.writeValue(this._select.value))}static#e=this.\u0275fac=function(r){return new(r||e)(S(kt),S(Yn),S(ji,9))};static#t=this.\u0275dir=U({type:e,selectors:[["option"]],inputs:{ngValue:"ngValue",value:"value"}})}return e})();const nk={provide:en,useExisting:ge(()=>xf),multi:!0};function ww(e,n){return null==e?`${n}`:("string"==typeof n&&(n=`'${n}'`),n&&"object"==typeof n&&(n="Object"),`${e}: ${n}`.slice(0,50))}let xf=(()=>{class e extends ur{constructor(){super(...arguments),this._optionMap=new Map,this._idCounter=0,this._compareWith=Object.is}set compareWith(t){this._compareWith=t}writeValue(t){let r;if(this.value=t,Array.isArray(t)){const o=t.map(i=>this._getOptionId(i));r=(i,s)=>{i._setSelected(o.indexOf(s.toString())>-1)}}else r=(o,i)=>{o._setSelected(!1)};this._optionMap.forEach(r)}registerOnChange(t){this.onChange=r=>{const o=[],i=r.selectedOptions;if(void 0!==i){const s=i;for(let a=0;a{let t;return function(o){return(t||(t=Ke(e)))(o||e)}})();static#t=this.\u0275dir=U({type:e,selectors:[["select","multiple","","formControlName",""],["select","multiple","","formControl",""],["select","multiple","","ngModel",""]],hostBindings:function(r,o){1&r&&$("change",function(s){return o.onChange(s.target)})("blur",function(){return o.onTouched()})},inputs:{compareWith:"compareWith"},features:[De([nk]),ue]})}return e})(),Of=(()=>{class e{constructor(t,r,o){this._element=t,this._renderer=r,this._select=o,this._select&&(this.id=this._select._registerOption(this))}set ngValue(t){null!=this._select&&(this._value=t,this._setElementValue(ww(this.id,t)),this._select.writeValue(this._select.value))}set value(t){this._select?(this._value=t,this._setElementValue(ww(this.id,t)),this._select.writeValue(this._select.value)):this._setElementValue(t)}_setElementValue(t){this._renderer.setProperty(this._element.nativeElement,"value",t)}_setSelected(t){this._renderer.setProperty(this._element.nativeElement,"selected",t)}ngOnDestroy(){this._select&&(this._select._optionMap.delete(this.id),this._select.writeValue(this._select.value))}static#e=this.\u0275fac=function(r){return new(r||e)(S(kt),S(Yn),S(xf,9))};static#t=this.\u0275dir=U({type:e,selectors:[["option"]],inputs:{ngValue:"ngValue",value:"value"}})}return e})(),fk=(()=>{class e{static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275mod=Bn({type:e});static#n=this.\u0275inj=wn({})}return e})(),pk=(()=>{class e{static withConfig(t){return{ngModule:e,providers:[{provide:yo,useValue:t.callSetDisabledState??ol}]}}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275mod=Bn({type:e});static#n=this.\u0275inj=wn({imports:[fk]})}return e})();class Ow{constructor(){this.riskHotspotsSettings=null,this.coverageInfoSettings=null}}class gk{constructor(){this.showLineCoverage=!0,this.showBranchCoverage=!0,this.showMethodCoverage=!0,this.visibleMetrics=[],this.groupingMaximum=0,this.grouping=0,this.historyComparisionDate="",this.historyComparisionType="",this.filter="",this.sortBy="name",this.sortOrder="asc",this.collapseStates=[]}}class mk{constructor(n){this.et="",this.et=n.et,this.cl=n.cl,this.ucl=n.ucl,this.cal=n.cal,this.tl=n.tl,this.lcq=n.lcq,this.cb=n.cb,this.tb=n.tb,this.bcq=n.bcq,this.cm=n.cm,this.tm=n.tm,this.mcq=n.mcq}get coverageRatioText(){return 0===this.tl?"-":this.cl+"/"+this.cal}get branchCoverageRatioText(){return 0===this.tb?"-":this.cb+"/"+this.tb}get methodCoverageRatioText(){return 0===this.tm?"-":this.cm+"/"+this.tm}}class Tt{static roundNumber(n){return Math.floor(n*Math.pow(10,Tt.maximumDecimalPlacesForCoverageQuotas))/Math.pow(10,Tt.maximumDecimalPlacesForCoverageQuotas)}static getNthOrLastIndexOf(n,t,r){let o=0,i=-1,s=-1;for(;o{this.historicCoverages.push(new mk(r))}),this.metrics=n.metrics}get coverage(){return 0===this.coverableLines?NaN:Tt.roundNumber(100*this.coveredLines/this.coverableLines)}visible(n,t){if(""!==n&&-1===this.name.toLowerCase().indexOf(n.toLowerCase()))return!1;if(""===t||null===this.currentHistoricCoverage)return!0;if("allChanges"===t){if(this.coveredLines===this.currentHistoricCoverage.cl&&this.uncoveredLines===this.currentHistoricCoverage.ucl&&this.coverableLines===this.currentHistoricCoverage.cal&&this.totalLines===this.currentHistoricCoverage.tl&&this.coveredBranches===this.currentHistoricCoverage.cb&&this.totalBranches===this.currentHistoricCoverage.tb&&this.coveredMethods===this.currentHistoricCoverage.cm&&this.totalMethods===this.currentHistoricCoverage.tm)return!1}else if("lineCoverageIncreaseOnly"===t){let r=this.coverage;if(isNaN(r)||r<=this.currentHistoricCoverage.lcq)return!1}else if("lineCoverageDecreaseOnly"===t){let r=this.coverage;if(isNaN(r)||r>=this.currentHistoricCoverage.lcq)return!1}else if("branchCoverageIncreaseOnly"===t){let r=this.branchCoverage;if(isNaN(r)||r<=this.currentHistoricCoverage.bcq)return!1}else if("branchCoverageDecreaseOnly"===t){let r=this.branchCoverage;if(isNaN(r)||r>=this.currentHistoricCoverage.bcq)return!1}else if("methodCoverageIncreaseOnly"===t){let r=this.methodCoverage;if(isNaN(r)||r<=this.currentHistoricCoverage.mcq)return!1}else if("methodCoverageDecreaseOnly"===t){let r=this.methodCoverage;if(isNaN(r)||r>=this.currentHistoricCoverage.mcq)return!1}return!0}updateCurrentHistoricCoverage(n){if(this.currentHistoricCoverage=null,""!==n)for(let t=0;t-1&&null===t}visible(n,t){if(""!==n&&this.name.toLowerCase().indexOf(n.toLowerCase())>-1)return!0;for(let r=0;r{class e{get nativeWindow(){return function vk(){return window}()}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275prov=te({token:e,factory:e.\u0275fac})}return e})(),_k=(()=>{class e{constructor(){this.translations={}}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=rn({type:e,selectors:[["pro-button"]],inputs:{translations:"translations"},decls:3,vars:1,consts:[["href","https://reportgenerator.io/pro","target","_blank",1,"pro-button","pro-button-tiny",3,"title"]],template:function(r,o){1&r&&(b(0,"\xa0"),y(1,"a",0),b(2,"PRO"),_()),2&r&&(f(),xn("title",o.translations.methodCoverageProVersion))},encapsulation:2})}return e})();function yk(e,n){if(1&e){const t=Me();y(0,"div",3)(1,"label")(2,"input",4),yt("ngModelChange",function(o){W(t);const i=v();return Xe(i.showBranchCoverage,o)||(i.showBranchCoverage=o),Z(o)}),$("change",function(){W(t);const o=v();return Z(o.showBranchCoverageChange.emit(o.showBranchCoverage))}),_(),b(3),_()()}if(2&e){const t=v();f(2),ht("ngModel",t.showBranchCoverage),f(),q(" ",t.translations.branchCoverage,"")}}function Ck(e,n){1&e&&A(0,"pro-button",9),2&e&&g("translations",v().translations)}function Dk(e,n){1&e&&A(0,"pro-button",9),2&e&&g("translations",v(2).translations)}function wk(e,n){1&e&&(y(0,"a",13),A(1,"i",14),_()),2&e&&g("href",v().$implicit.explanationUrl,In)}function bk(e,n){if(1&e){const t=Me();y(0,"div",3)(1,"label")(2,"input",11),$("change",function(){const i=W(t).$implicit;return Z(v(2).toggleMetric(i))}),_(),b(3),_(),b(4,"\xa0"),k(5,wk,2,1,"a",12),_()}if(2&e){const t=n.$implicit,r=v(2);f(2),g("checked",r.isMetricSelected(t))("disabled",!r.methodCoverageAvailable),f(),q(" ",t.name,""),f(2),g("ngIf",t.explanationUrl)}}function Ek(e,n){if(1&e&&(K(0),A(1,"br")(2,"br"),y(3,"b"),b(4),_(),k(5,Dk,1,1,"pro-button",7)(6,bk,6,4,"div",10),J()),2&e){const t=v();f(4),N(t.translations.metrics),f(),g("ngIf",!t.methodCoverageAvailable),f(),g("ngForOf",t.metrics)}}let Ik=(()=>{class e{constructor(){this.visible=!1,this.visibleChange=new Ee,this.translations={},this.branchCoverageAvailable=!1,this.methodCoverageAvailable=!1,this.metrics=[],this.showLineCoverage=!1,this.showLineCoverageChange=new Ee,this.showBranchCoverage=!1,this.showBranchCoverageChange=new Ee,this.showMethodCoverage=!1,this.showMethodCoverageChange=new Ee,this.visibleMetrics=[],this.visibleMetricsChange=new Ee}isMetricSelected(t){return void 0!==this.visibleMetrics.find(r=>r.name===t.name)}toggleMetric(t){let r=this.visibleMetrics.find(o=>o.name===t.name);r?this.visibleMetrics.splice(this.visibleMetrics.indexOf(r),1):this.visibleMetrics.push(t),this.visibleMetrics=[...this.visibleMetrics],this.visibleMetricsChange.emit(this.visibleMetrics)}close(){this.visible=!1,this.visibleChange.emit(this.visible)}cancelEvent(t){t.stopPropagation()}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=rn({type:e,selectors:[["popup"]],inputs:{visible:"visible",translations:"translations",branchCoverageAvailable:"branchCoverageAvailable",methodCoverageAvailable:"methodCoverageAvailable",metrics:"metrics",showLineCoverage:"showLineCoverage",showBranchCoverage:"showBranchCoverage",showMethodCoverage:"showMethodCoverage",visibleMetrics:"visibleMetrics"},outputs:{visibleChange:"visibleChange",showLineCoverageChange:"showLineCoverageChange",showBranchCoverageChange:"showBranchCoverageChange",showMethodCoverageChange:"showMethodCoverageChange",visibleMetricsChange:"visibleMetricsChange"},decls:17,vars:9,consts:[[1,"popup-container",3,"click"],[1,"popup",3,"click"],[1,"close",3,"click"],[1,"mt-1"],["type","checkbox",3,"ngModel","ngModelChange","change"],["class","mt-1",4,"ngIf"],["type","checkbox",3,"ngModel","disabled","ngModelChange","change"],[3,"translations",4,"ngIf"],[4,"ngIf"],[3,"translations"],["class","mt-1",4,"ngFor","ngForOf"],["type","checkbox",3,"checked","disabled","change"],["target","_blank",3,"href",4,"ngIf"],["target","_blank",3,"href"],[1,"icon-info-circled"]],template:function(r,o){1&r&&(y(0,"div",0),$("click",function(){return o.close()}),y(1,"div",1),$("click",function(s){return o.cancelEvent(s)}),y(2,"div",2),$("click",function(){return o.close()}),b(3,"X"),_(),y(4,"b"),b(5),_(),y(6,"div",3)(7,"label")(8,"input",4),yt("ngModelChange",function(s){return Xe(o.showLineCoverage,s)||(o.showLineCoverage=s),s}),$("change",function(){return o.showLineCoverageChange.emit(o.showLineCoverage)}),_(),b(9),_()(),k(10,yk,4,2,"div",5),y(11,"div",3)(12,"label")(13,"input",6),yt("ngModelChange",function(s){return Xe(o.showMethodCoverage,s)||(o.showMethodCoverage=s),s}),$("change",function(){return o.showMethodCoverageChange.emit(o.showMethodCoverage)}),_(),b(14),_(),k(15,Ck,1,1,"pro-button",7),_(),k(16,Ek,7,3,"ng-container",8),_()()),2&r&&(f(5),N(o.translations.coverageTypes),f(3),ht("ngModel",o.showLineCoverage),f(),q(" ",o.translations.coverage,""),f(),g("ngIf",o.branchCoverageAvailable),f(3),ht("ngModel",o.showMethodCoverage),g("disabled",!o.methodCoverageAvailable),f(),q(" ",o.translations.methodCoverage,""),f(),g("ngIf",!o.methodCoverageAvailable),f(),g("ngIf",o.metrics.length>0))},dependencies:[vo,ar,df,el,Bi,_k],encapsulation:2})}return e})();function Mk(e,n){1&e&&A(0,"td",3)}function Sk(e,n){1&e&&A(0,"td"),2&e&&Xt("green ",v().greenClass,"")}function Tk(e,n){1&e&&A(0,"td"),2&e&&Xt("red ",v().redClass,"")}let Fw=(()=>{class e{constructor(){this.grayVisible=!0,this.greenVisible=!1,this.redVisible=!1,this.greenClass="",this.redClass="",this._percentage=NaN}get percentage(){return this._percentage}set percentage(t){this._percentage=t,this.grayVisible=isNaN(t),this.greenVisible=!isNaN(t)&&Math.round(t)>0,this.redVisible=!isNaN(t)&&100-Math.round(t)>0,this.greenClass="covered"+Math.round(t),this.redClass="covered"+(100-Math.round(t))}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=rn({type:e,selectors:[["coverage-bar"]],inputs:{percentage:"percentage"},decls:4,vars:3,consts:[[1,"coverage"],["class","gray covered100",4,"ngIf"],[3,"class",4,"ngIf"],[1,"gray","covered100"]],template:function(r,o){1&r&&(y(0,"table",0),k(1,Mk,1,0,"td",1)(2,Sk,1,3,"td",2)(3,Tk,1,3,"td",2),_()),2&r&&(f(),g("ngIf",o.grayVisible),f(),g("ngIf",o.greenVisible),f(),g("ngIf",o.redVisible))},dependencies:[ar],encapsulation:2,changeDetection:0})}return e})();const Ak=["codeelement-row",""];function Nk(e,n){if(1&e&&(y(0,"th",5),b(1),_()),2&e){const t=v();f(),N(t.element.coveredLines)}}function xk(e,n){if(1&e&&(y(0,"th",5),b(1),_()),2&e){const t=v();f(),N(t.element.uncoveredLines)}}function Ok(e,n){if(1&e&&(y(0,"th",5),b(1),_()),2&e){const t=v();f(),N(t.element.coverableLines)}}function Rk(e,n){if(1&e&&(y(0,"th",5),b(1),_()),2&e){const t=v();f(),N(t.element.totalLines)}}function Fk(e,n){if(1&e&&(y(0,"th",6),b(1),_()),2&e){const t=v();g("title",t.element.coverageRatioText),f(),N(t.element.coveragePercentage)}}function Pk(e,n){if(1&e&&(y(0,"th",5),A(1,"coverage-bar",7),_()),2&e){const t=v();f(),g("percentage",t.element.coverage)}}function kk(e,n){if(1&e&&(y(0,"th",5),b(1),_()),2&e){const t=v();f(),N(t.element.coveredBranches)}}function Lk(e,n){if(1&e&&(y(0,"th",5),b(1),_()),2&e){const t=v();f(),N(t.element.totalBranches)}}function Vk(e,n){if(1&e&&(y(0,"th",6),b(1),_()),2&e){const t=v();g("title",t.element.branchCoverageRatioText),f(),N(t.element.branchCoveragePercentage)}}function Hk(e,n){if(1&e&&(y(0,"th",5),A(1,"coverage-bar",7),_()),2&e){const t=v();f(),g("percentage",t.element.branchCoverage)}}function Bk(e,n){if(1&e&&(y(0,"th",5),b(1),_()),2&e){const t=v();f(),N(t.element.coveredMethods)}}function jk(e,n){if(1&e&&(y(0,"th",5),b(1),_()),2&e){const t=v();f(),N(t.element.totalMethods)}}function $k(e,n){if(1&e&&(y(0,"th",6),b(1),_()),2&e){const t=v();g("title",t.element.methodCoverageRatioText),f(),N(t.element.methodCoveragePercentage)}}function Uk(e,n){if(1&e&&(y(0,"th",5),A(1,"coverage-bar",7),_()),2&e){const t=v();f(),g("percentage",t.element.methodCoverage)}}function zk(e,n){1&e&&A(0,"th",5)}const Gk=(e,n)=>({"icon-plus":e,"icon-minus":n});let qk=(()=>{class e{constructor(){this.collapsed=!1,this.lineCoverageAvailable=!1,this.branchCoverageAvailable=!1,this.methodCoverageAvailable=!1,this.visibleMetrics=[]}static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275cmp=rn({type:e,selectors:[["","codeelement-row",""]],inputs:{element:"element",collapsed:"collapsed",lineCoverageAvailable:"lineCoverageAvailable",branchCoverageAvailable:"branchCoverageAvailable",methodCoverageAvailable:"methodCoverageAvailable",visibleMetrics:"visibleMetrics"},attrs:Ak,decls:19,vars:20,consts:[["href","#",3,"click"],[3,"ngClass"],["class","right",4,"ngIf"],["class","right",3,"title",4,"ngIf"],["class","right",4,"ngFor","ngForOf"],[1,"right"],[1,"right",3,"title"],[3,"percentage"]],template:function(r,o){1&r&&(y(0,"th")(1,"a",0),$("click",function(s){return o.element.toggleCollapse(s)}),A(2,"i",1),b(3),_()(),k(4,Nk,2,1,"th",2)(5,xk,2,1,"th",2)(6,Ok,2,1,"th",2)(7,Rk,2,1,"th",2)(8,Fk,2,2,"th",3)(9,Pk,2,1,"th",2)(10,kk,2,1,"th",2)(11,Lk,2,1,"th",2)(12,Vk,2,2,"th",3)(13,Hk,2,1,"th",2)(14,Bk,2,1,"th",2)(15,jk,2,1,"th",2)(16,$k,2,2,"th",3)(17,Uk,2,1,"th",2)(18,zk,1,0,"th",4)),2&r&&(f(2),g("ngClass",Dd(17,Gk,o.element.collapsed,!o.element.collapsed)),f(),q(" ",o.element.name,""),f(),g("ngIf",o.lineCoverageAvailable),f(),g("ngIf",o.lineCoverageAvailable),f(),g("ngIf",o.lineCoverageAvailable),f(),g("ngIf",o.lineCoverageAvailable),f(),g("ngIf",o.lineCoverageAvailable),f(),g("ngIf",o.lineCoverageAvailable),f(),g("ngIf",o.branchCoverageAvailable),f(),g("ngIf",o.branchCoverageAvailable),f(),g("ngIf",o.branchCoverageAvailable),f(),g("ngIf",o.branchCoverageAvailable),f(),g("ngIf",o.methodCoverageAvailable),f(),g("ngIf",o.methodCoverageAvailable),f(),g("ngIf",o.methodCoverageAvailable),f(),g("ngIf",o.methodCoverageAvailable),f(),g("ngForOf",o.visibleMetrics))},dependencies:[Ni,vo,ar,Fw],encapsulation:2,changeDetection:0})}return e})();const Wk=["coverage-history-chart",""];let Zk=(()=>{class e{constructor(){this.path=null,this._historicCoverages=[]}get historicCoverages(){return this._historicCoverages}set historicCoverages(t){if(this._historicCoverages=t,t.length>1){let r="";for(let o=0;o({historiccoverageoffset:e});function u2(e,n){if(1&e&&A(0,"div",11),2&e){const t=v(2);xn("title",t.translations.history+": "+t.translations.coverage),g("historicCoverages",t.clazz.lineCoverageHistory)("ngClass",ba(3,kf,null!==t.clazz.currentHistoricCoverage))}}function d2(e,n){if(1&e&&(K(0),y(1,"div"),b(2),_(),y(3,"div",7),b(4),_(),J()),2&e){const t=v(2);f(),Xt("currenthistory ",t.getClassName(t.clazz.coverage,t.clazz.currentHistoricCoverage.lcq),""),f(),q(" ",t.clazz.coveragePercentage," "),f(),g("title",t.clazz.currentHistoricCoverage.et+": "+t.clazz.currentHistoricCoverage.coverageRatioText),f(),q("",t.clazz.currentHistoricCoverage.lcq,"%")}}function f2(e,n){if(1&e&&(K(0),b(1),J()),2&e){const t=v(2);f(),q(" ",t.clazz.coveragePercentage," ")}}function h2(e,n){if(1&e&&(y(0,"td",9),k(1,u2,1,5,"div",10)(2,d2,5,6,"ng-container",1)(3,f2,2,1,"ng-container",1),_()),2&e){const t=v();g("title",t.clazz.coverageRatioText),f(),g("ngIf",t.clazz.lineCoverageHistory.length>1),f(),g("ngIf",null!==t.clazz.currentHistoricCoverage),f(),g("ngIf",null===t.clazz.currentHistoricCoverage)}}function p2(e,n){if(1&e&&(y(0,"td",6),A(1,"coverage-bar",12),_()),2&e){const t=v();f(),g("percentage",t.clazz.coverage)}}function g2(e,n){if(1&e&&(K(0),y(1,"div"),b(2),_(),y(3,"div",7),b(4),_(),J()),2&e){const t=v(2);f(),Xt("currenthistory ",t.getClassName(t.clazz.coveredBranches,t.clazz.currentHistoricCoverage.cb),""),f(),q(" ",t.clazz.coveredBranches," "),f(),g("title",t.clazz.currentHistoricCoverage.et),f(),q(" ",t.clazz.currentHistoricCoverage.cb," ")}}function m2(e,n){if(1&e&&(K(0),b(1),J()),2&e){const t=v(2);f(),q(" ",t.clazz.coveredBranches," ")}}function v2(e,n){if(1&e&&(y(0,"td",6),k(1,g2,5,6,"ng-container",1)(2,m2,2,1,"ng-container",1),_()),2&e){const t=v();f(),g("ngIf",null!==t.clazz.currentHistoricCoverage),f(),g("ngIf",null===t.clazz.currentHistoricCoverage)}}function _2(e,n){if(1&e&&(K(0),y(1,"div",8),b(2),_(),y(3,"div",7),b(4),_(),J()),2&e){const t=v(2);f(2),N(t.clazz.totalBranches),f(),g("title",t.clazz.currentHistoricCoverage.et),f(),N(t.clazz.currentHistoricCoverage.tb)}}function y2(e,n){if(1&e&&(K(0),b(1),J()),2&e){const t=v(2);f(),q(" ",t.clazz.totalBranches," ")}}function C2(e,n){if(1&e&&(y(0,"td",6),k(1,_2,5,3,"ng-container",1)(2,y2,2,1,"ng-container",1),_()),2&e){const t=v();f(),g("ngIf",null!==t.clazz.currentHistoricCoverage),f(),g("ngIf",null===t.clazz.currentHistoricCoverage)}}function D2(e,n){if(1&e&&A(0,"div",14),2&e){const t=v(2);xn("title",t.translations.history+": "+t.translations.branchCoverage),g("historicCoverages",t.clazz.branchCoverageHistory)("ngClass",ba(3,kf,null!==t.clazz.currentHistoricCoverage))}}function w2(e,n){if(1&e&&(K(0),y(1,"div"),b(2),_(),y(3,"div",7),b(4),_(),J()),2&e){const t=v(2);f(),Xt("currenthistory ",t.getClassName(t.clazz.branchCoverage,t.clazz.currentHistoricCoverage.bcq),""),f(),q(" ",t.clazz.branchCoveragePercentage," "),f(),g("title",t.clazz.currentHistoricCoverage.et+": "+t.clazz.currentHistoricCoverage.branchCoverageRatioText),f(),q("",t.clazz.currentHistoricCoverage.bcq,"%")}}function b2(e,n){if(1&e&&(K(0),b(1),J()),2&e){const t=v(2);f(),q(" ",t.clazz.branchCoveragePercentage," ")}}function E2(e,n){if(1&e&&(y(0,"td",9),k(1,D2,1,5,"div",13)(2,w2,5,6,"ng-container",1)(3,b2,2,1,"ng-container",1),_()),2&e){const t=v();g("title",t.clazz.branchCoverageRatioText),f(),g("ngIf",t.clazz.branchCoverageHistory.length>1),f(),g("ngIf",null!==t.clazz.currentHistoricCoverage),f(),g("ngIf",null===t.clazz.currentHistoricCoverage)}}function I2(e,n){if(1&e&&(y(0,"td",6),A(1,"coverage-bar",12),_()),2&e){const t=v();f(),g("percentage",t.clazz.branchCoverage)}}function M2(e,n){if(1&e&&(K(0),y(1,"div"),b(2),_(),y(3,"div",7),b(4),_(),J()),2&e){const t=v(2);f(),Xt("currenthistory ",t.getClassName(t.clazz.coveredMethods,t.clazz.currentHistoricCoverage.cm),""),f(),q(" ",t.clazz.coveredMethods," "),f(),g("title",t.clazz.currentHistoricCoverage.et),f(),q(" ",t.clazz.currentHistoricCoverage.cm," ")}}function S2(e,n){if(1&e&&(K(0),b(1),J()),2&e){const t=v(2);f(),q(" ",t.clazz.coveredMethods," ")}}function T2(e,n){if(1&e&&(y(0,"td",6),k(1,M2,5,6,"ng-container",1)(2,S2,2,1,"ng-container",1),_()),2&e){const t=v();f(),g("ngIf",null!==t.clazz.currentHistoricCoverage),f(),g("ngIf",null===t.clazz.currentHistoricCoverage)}}function A2(e,n){if(1&e&&(K(0),y(1,"div",8),b(2),_(),y(3,"div",7),b(4),_(),J()),2&e){const t=v(2);f(2),N(t.clazz.totalMethods),f(),g("title",t.clazz.currentHistoricCoverage.et),f(),N(t.clazz.currentHistoricCoverage.tm)}}function N2(e,n){if(1&e&&(K(0),b(1),J()),2&e){const t=v(2);f(),q(" ",t.clazz.totalMethods," ")}}function x2(e,n){if(1&e&&(y(0,"td",6),k(1,A2,5,3,"ng-container",1)(2,N2,2,1,"ng-container",1),_()),2&e){const t=v();f(),g("ngIf",null!==t.clazz.currentHistoricCoverage),f(),g("ngIf",null===t.clazz.currentHistoricCoverage)}}function O2(e,n){if(1&e&&A(0,"div",16),2&e){const t=v(2);xn("title",t.translations.history+": "+t.translations.methodCoverage),g("historicCoverages",t.clazz.methodCoverageHistory)("ngClass",ba(3,kf,null!==t.clazz.currentHistoricCoverage))}}function R2(e,n){if(1&e&&(K(0),y(1,"div"),b(2),_(),y(3,"div",7),b(4),_(),J()),2&e){const t=v(2);f(),Xt("currenthistory ",t.getClassName(t.clazz.methodCoverage,t.clazz.currentHistoricCoverage.mcq),""),f(),q(" ",t.clazz.methodCoveragePercentage," "),f(),g("title",t.clazz.currentHistoricCoverage.et+": "+t.clazz.currentHistoricCoverage.methodCoverageRatioText),f(),q("",t.clazz.currentHistoricCoverage.mcq,"%")}}function F2(e,n){if(1&e&&(K(0),b(1),J()),2&e){const t=v(2);f(),q(" ",t.clazz.methodCoveragePercentage," ")}}function P2(e,n){if(1&e&&(y(0,"td",9),k(1,O2,1,5,"div",15)(2,R2,5,6,"ng-container",1)(3,F2,2,1,"ng-container",1),_()),2&e){const t=v();g("title",t.clazz.methodCoverageRatioText),f(),g("ngIf",t.clazz.methodCoverageHistory.length>1),f(),g("ngIf",null!==t.clazz.currentHistoricCoverage),f(),g("ngIf",null===t.clazz.currentHistoricCoverage)}}function k2(e,n){if(1&e&&(y(0,"td",6),A(1,"coverage-bar",12),_()),2&e){const t=v();f(),g("percentage",t.clazz.methodCoverage)}}function L2(e,n){if(1&e&&(y(0,"td",6),b(1),_()),2&e){const t=n.$implicit,r=v();f(),N(r.clazz.metrics[t.abbreviation])}}let V2=(()=>{class e{constructor(){this.translations={},this.lineCoverageAvailable=!1,this.branchCoverageAvailable=!1,this.methodCoverageAvailable=!1,this.visibleMetrics=[],this.historyComparisionDate=""}getClassName(t,r){return t>r?"lightgreen":t({"icon-up-dir_active":e,"icon-down-dir_active":n,"icon-down-dir":t});function mL(e,n){if(1&e){const t=Me();y(0,"th",54)(1,"a",3),$("click",function(o){return W(t),Z(v(2).updateSorting("covered",o))}),A(2,"i",25),b(3),_()()}if(2&e){const t=v(2);f(2),g("ngClass",Ue(2,Dt,"covered"===t.settings.sortBy&&"desc"===t.settings.sortOrder,"covered"===t.settings.sortBy&&"asc"===t.settings.sortOrder,"covered"!==t.settings.sortBy)),f(),N(t.translations.covered)}}function vL(e,n){if(1&e){const t=Me();y(0,"th",54)(1,"a",3),$("click",function(o){return W(t),Z(v(2).updateSorting("uncovered",o))}),A(2,"i",25),b(3),_()()}if(2&e){const t=v(2);f(2),g("ngClass",Ue(2,Dt,"uncovered"===t.settings.sortBy&&"desc"===t.settings.sortOrder,"uncovered"===t.settings.sortBy&&"asc"===t.settings.sortOrder,"uncovered"!==t.settings.sortBy)),f(),N(t.translations.uncovered)}}function _L(e,n){if(1&e){const t=Me();y(0,"th",54)(1,"a",3),$("click",function(o){return W(t),Z(v(2).updateSorting("coverable",o))}),A(2,"i",25),b(3),_()()}if(2&e){const t=v(2);f(2),g("ngClass",Ue(2,Dt,"coverable"===t.settings.sortBy&&"desc"===t.settings.sortOrder,"coverable"===t.settings.sortBy&&"asc"===t.settings.sortOrder,"coverable"!==t.settings.sortBy)),f(),N(t.translations.coverable)}}function yL(e,n){if(1&e){const t=Me();y(0,"th",54)(1,"a",3),$("click",function(o){return W(t),Z(v(2).updateSorting("total",o))}),A(2,"i",25),b(3),_()()}if(2&e){const t=v(2);f(2),g("ngClass",Ue(2,Dt,"total"===t.settings.sortBy&&"desc"===t.settings.sortOrder,"total"===t.settings.sortBy&&"asc"===t.settings.sortOrder,"total"!==t.settings.sortBy)),f(),N(t.translations.total)}}function CL(e,n){if(1&e){const t=Me();y(0,"th",55)(1,"a",3),$("click",function(o){return W(t),Z(v(2).updateSorting("coverage",o))}),A(2,"i",25),b(3),_()()}if(2&e){const t=v(2);f(2),g("ngClass",Ue(2,Dt,"coverage"===t.settings.sortBy&&"desc"===t.settings.sortOrder,"coverage"===t.settings.sortBy&&"asc"===t.settings.sortOrder,"coverage"!==t.settings.sortBy)),f(),N(t.translations.percentage)}}function DL(e,n){if(1&e){const t=Me();y(0,"th",54)(1,"a",3),$("click",function(o){return W(t),Z(v(2).updateSorting("covered_branches",o))}),A(2,"i",25),b(3),_()()}if(2&e){const t=v(2);f(2),g("ngClass",Ue(2,Dt,"covered_branches"===t.settings.sortBy&&"desc"===t.settings.sortOrder,"covered_branches"===t.settings.sortBy&&"asc"===t.settings.sortOrder,"covered_branches"!==t.settings.sortBy)),f(),N(t.translations.covered)}}function wL(e,n){if(1&e){const t=Me();y(0,"th",54)(1,"a",3),$("click",function(o){return W(t),Z(v(2).updateSorting("total_branches",o))}),A(2,"i",25),b(3),_()()}if(2&e){const t=v(2);f(2),g("ngClass",Ue(2,Dt,"total_branches"===t.settings.sortBy&&"desc"===t.settings.sortOrder,"total_branches"===t.settings.sortBy&&"asc"===t.settings.sortOrder,"total_branches"!==t.settings.sortBy)),f(),N(t.translations.total)}}function bL(e,n){if(1&e){const t=Me();y(0,"th",55)(1,"a",3),$("click",function(o){return W(t),Z(v(2).updateSorting("branchcoverage",o))}),A(2,"i",25),b(3),_()()}if(2&e){const t=v(2);f(2),g("ngClass",Ue(2,Dt,"branchcoverage"===t.settings.sortBy&&"desc"===t.settings.sortOrder,"branchcoverage"===t.settings.sortBy&&"asc"===t.settings.sortOrder,"branchcoverage"!==t.settings.sortBy)),f(),N(t.translations.percentage)}}function EL(e,n){if(1&e){const t=Me();y(0,"th",54)(1,"a",3),$("click",function(o){return W(t),Z(v(2).updateSorting("covered_methods",o))}),A(2,"i",25),b(3),_()()}if(2&e){const t=v(2);f(2),g("ngClass",Ue(2,Dt,"covered_methods"===t.settings.sortBy&&"desc"===t.settings.sortOrder,"covered_methods"===t.settings.sortBy&&"asc"===t.settings.sortOrder,"covered_methods"!==t.settings.sortBy)),f(),N(t.translations.covered)}}function IL(e,n){if(1&e){const t=Me();y(0,"th",54)(1,"a",3),$("click",function(o){return W(t),Z(v(2).updateSorting("total_methods",o))}),A(2,"i",25),b(3),_()()}if(2&e){const t=v(2);f(2),g("ngClass",Ue(2,Dt,"total_methods"===t.settings.sortBy&&"desc"===t.settings.sortOrder,"total_methods"===t.settings.sortBy&&"asc"===t.settings.sortOrder,"total_methods"!==t.settings.sortBy)),f(),N(t.translations.total)}}function ML(e,n){if(1&e){const t=Me();y(0,"th",55)(1,"a",3),$("click",function(o){return W(t),Z(v(2).updateSorting("methodcoverage",o))}),A(2,"i",25),b(3),_()()}if(2&e){const t=v(2);f(2),g("ngClass",Ue(2,Dt,"methodcoverage"===t.settings.sortBy&&"desc"===t.settings.sortOrder,"methodcoverage"===t.settings.sortBy&&"asc"===t.settings.sortOrder,"methodcoverage"!==t.settings.sortBy)),f(),N(t.translations.percentage)}}function SL(e,n){if(1&e){const t=Me();y(0,"th")(1,"a",3),$("click",function(o){const s=W(t).$implicit;return Z(v(2).updateSorting(s.abbreviation,o))}),A(2,"i",25),b(3),_(),y(4,"a",56),A(5,"i",57),_()()}if(2&e){const t=n.$implicit,r=v(2);f(2),g("ngClass",Ue(3,Dt,r.settings.sortBy===t.abbreviation&&"desc"===r.settings.sortOrder,r.settings.sortBy===t.abbreviation&&"asc"===r.settings.sortOrder,r.settings.sortBy!==t.abbreviation)),f(),N(t.name),f(),xn("href",t.explanationUrl,In)}}function TL(e,n){if(1&e&&A(0,"tr",59),2&e){const t=v().$implicit,r=v(2);g("element",t)("collapsed",t.collapsed)("lineCoverageAvailable",r.settings.showLineCoverage)("branchCoverageAvailable",r.branchCoverageAvailable&&r.settings.showBranchCoverage)("methodCoverageAvailable",r.methodCoverageAvailable&&r.settings.showMethodCoverage)("visibleMetrics",r.settings.visibleMetrics)}}function AL(e,n){if(1&e&&A(0,"tr",61),2&e){const t=v().$implicit,r=v(3);g("clazz",t)("translations",r.translations)("lineCoverageAvailable",r.settings.showLineCoverage)("branchCoverageAvailable",r.branchCoverageAvailable&&r.settings.showBranchCoverage)("methodCoverageAvailable",r.methodCoverageAvailable&&r.settings.showMethodCoverage)("visibleMetrics",r.settings.visibleMetrics)("historyComparisionDate",r.settings.historyComparisionDate)}}function NL(e,n){if(1&e&&(K(0),k(1,AL,1,7,"tr",60),J()),2&e){const t=n.$implicit,r=v().$implicit,o=v(2);f(),g("ngIf",!r.collapsed&&t.visible(o.settings.filter,o.settings.historyComparisionType))}}function xL(e,n){if(1&e&&A(0,"tr",64),2&e){const t=v().$implicit,r=v(5);g("clazz",t)("translations",r.translations)("lineCoverageAvailable",r.settings.showLineCoverage)("branchCoverageAvailable",r.branchCoverageAvailable&&r.settings.showBranchCoverage)("methodCoverageAvailable",r.methodCoverageAvailable&&r.settings.showMethodCoverage)("visibleMetrics",r.settings.visibleMetrics)("historyComparisionDate",r.settings.historyComparisionDate)}}function OL(e,n){if(1&e&&(K(0),k(1,xL,1,7,"tr",63),J()),2&e){const t=n.$implicit,r=v(2).$implicit,o=v(3);f(),g("ngIf",!r.collapsed&&t.visible(o.settings.filter,o.settings.historyComparisionType))}}function RL(e,n){if(1&e&&(K(0),A(1,"tr",62),k(2,OL,2,1,"ng-container",28),J()),2&e){const t=v().$implicit,r=v(3);f(),g("element",t)("collapsed",t.collapsed)("lineCoverageAvailable",r.settings.showLineCoverage)("branchCoverageAvailable",r.branchCoverageAvailable&&r.settings.showBranchCoverage)("methodCoverageAvailable",r.methodCoverageAvailable&&r.settings.showMethodCoverage)("visibleMetrics",r.settings.visibleMetrics),f(),g("ngForOf",t.classes)}}function FL(e,n){if(1&e&&(K(0),k(1,RL,3,7,"ng-container",0),J()),2&e){const t=n.$implicit,r=v().$implicit,o=v(2);f(),g("ngIf",!r.collapsed&&t.visible(o.settings.filter,o.settings.historyComparisionType))}}function PL(e,n){if(1&e&&(K(0),k(1,TL,1,6,"tr",58)(2,NL,2,1,"ng-container",28)(3,FL,2,1,"ng-container",28),J()),2&e){const t=n.$implicit,r=v(2);f(),g("ngIf",t.visible(r.settings.filter,r.settings.historyComparisionType)),f(),g("ngForOf",t.classes),f(),g("ngForOf",t.subElements)}}function kL(e,n){if(1&e){const t=Me();y(0,"div"),k(1,H2,1,9,"popup",1),y(2,"div",2)(3,"div")(4,"a",3),$("click",function(o){return W(t),Z(v().collapseAll(o))}),b(5),_(),b(6," | "),y(7,"a",3),$("click",function(o){return W(t),Z(v().expandAll(o))}),b(8),_()(),y(9,"div",4)(10,"span",5),k(11,B2,2,1,"ng-container",0)(12,j2,2,1,"ng-container",0)(13,$2,2,1,"ng-container",0),_(),A(14,"br"),b(15),y(16,"input",6),yt("ngModelChange",function(o){W(t);const i=v();return Xe(i.settings.grouping,o)||(i.settings.grouping=o),Z(o)}),$("ngModelChange",function(){return W(t),Z(v().updateCoverageInfo())}),_()(),y(17,"div",4),k(18,Y2,9,6,"ng-container",0),_(),y(19,"div",7)(20,"div")(21,"button",8),$("click",function(){return W(t),Z(v().popupVisible=!0)}),A(22,"i",9),b(23),_()(),A(24,"br"),y(25,"div")(26,"span"),b(27),_(),y(28,"input",10),yt("ngModelChange",function(o){W(t);const i=v();return Xe(i.settings.filter,o)||(i.settings.filter=o),Z(o)}),_()()()(),y(29,"div",11)(30,"table",12)(31,"colgroup"),A(32,"col",13),k(33,K2,1,0,"col",14)(34,J2,1,0,"col",15)(35,X2,1,0,"col",16)(36,eL,1,0,"col",17)(37,tL,1,0,"col",18)(38,nL,1,0,"col",19)(39,rL,1,0,"col",14)(40,oL,1,0,"col",17)(41,iL,1,0,"col",18)(42,sL,1,0,"col",19)(43,aL,1,0,"col",14)(44,lL,1,0,"col",17)(45,cL,1,0,"col",18)(46,uL,1,0,"col",19)(47,dL,1,0,"col",20),_(),y(48,"thead")(49,"tr",21),A(50,"th"),k(51,fL,2,1,"th",22)(52,hL,2,1,"th",23)(53,pL,2,1,"th",23)(54,gL,2,2,"th",24),_(),y(55,"tr")(56,"th")(57,"a",3),$("click",function(o){return W(t),Z(v().updateSorting("name",o))}),A(58,"i",25),b(59),_()(),k(60,mL,4,6,"th",26)(61,vL,4,6,"th",26)(62,_L,4,6,"th",26)(63,yL,4,6,"th",26)(64,CL,4,6,"th",27)(65,DL,4,6,"th",26)(66,wL,4,6,"th",26)(67,bL,4,6,"th",27)(68,EL,4,6,"th",26)(69,IL,4,6,"th",26)(70,ML,4,6,"th",27)(71,SL,6,7,"th",28),_()(),y(72,"tbody"),k(73,PL,4,3,"ng-container",28),_()()()()}if(2&e){const t=v();f(),g("ngIf",t.popupVisible),f(4),N(t.translations.collapseAll),f(3),N(t.translations.expandAll),f(3),g("ngIf",-1===t.settings.grouping),f(),g("ngIf",0===t.settings.grouping),f(),g("ngIf",t.settings.grouping>0),f(2),q(" ",t.translations.grouping," "),f(),g("max",t.settings.groupingMaximum),ht("ngModel",t.settings.grouping),f(2),g("ngIf",t.historicCoverageExecutionTimes.length>0),f(5),N(t.metrics.length>0?t.translations.selectCoverageTypesAndMetrics:t.translations.selectCoverageTypes),f(4),q("",t.translations.filter," "),f(),ht("ngModel",t.settings.filter),f(5),g("ngIf",t.settings.showLineCoverage),f(),g("ngIf",t.settings.showLineCoverage),f(),g("ngIf",t.settings.showLineCoverage),f(),g("ngIf",t.settings.showLineCoverage),f(),g("ngIf",t.settings.showLineCoverage),f(),g("ngIf",t.settings.showLineCoverage),f(),g("ngIf",t.branchCoverageAvailable&&t.settings.showBranchCoverage),f(),g("ngIf",t.branchCoverageAvailable&&t.settings.showBranchCoverage),f(),g("ngIf",t.branchCoverageAvailable&&t.settings.showBranchCoverage),f(),g("ngIf",t.branchCoverageAvailable&&t.settings.showBranchCoverage),f(),g("ngIf",t.methodCoverageAvailable&&t.settings.showMethodCoverage),f(),g("ngIf",t.methodCoverageAvailable&&t.settings.showMethodCoverage),f(),g("ngIf",t.methodCoverageAvailable&&t.settings.showMethodCoverage),f(),g("ngIf",t.methodCoverageAvailable&&t.settings.showMethodCoverage),f(),g("ngForOf",t.settings.visibleMetrics),f(4),g("ngIf",t.settings.showLineCoverage),f(),g("ngIf",t.branchCoverageAvailable&&t.settings.showBranchCoverage),f(),g("ngIf",t.methodCoverageAvailable&&t.settings.showMethodCoverage),f(),g("ngIf",t.settings.visibleMetrics.length>0),f(4),g("ngClass",Ue(47,Dt,"name"===t.settings.sortBy&&"desc"===t.settings.sortOrder,"name"===t.settings.sortBy&&"asc"===t.settings.sortOrder,"name"!==t.settings.sortBy)),f(),N(t.translations.name),f(),g("ngIf",t.settings.showLineCoverage),f(),g("ngIf",t.settings.showLineCoverage),f(),g("ngIf",t.settings.showLineCoverage),f(),g("ngIf",t.settings.showLineCoverage),f(),g("ngIf",t.settings.showLineCoverage),f(),g("ngIf",t.branchCoverageAvailable&&t.settings.showBranchCoverage),f(),g("ngIf",t.branchCoverageAvailable&&t.settings.showBranchCoverage),f(),g("ngIf",t.branchCoverageAvailable&&t.settings.showBranchCoverage),f(),g("ngIf",t.methodCoverageAvailable&&t.settings.showMethodCoverage),f(),g("ngIf",t.methodCoverageAvailable&&t.settings.showMethodCoverage),f(),g("ngIf",t.methodCoverageAvailable&&t.settings.showMethodCoverage),f(),g("ngForOf",t.settings.visibleMetrics),f(2),g("ngForOf",t.codeElements)}}let LL=(()=>{class e{constructor(t){this.queryString="",this.historicCoverageExecutionTimes=[],this.branchCoverageAvailable=!1,this.methodCoverageAvailable=!1,this.metrics=[],this.codeElements=[],this.translations={},this.popupVisible=!1,this.settings=new gk,this.window=t.nativeWindow}ngOnInit(){this.historicCoverageExecutionTimes=this.window.historicCoverageExecutionTimes,this.branchCoverageAvailable=this.window.branchCoverageAvailable,this.methodCoverageAvailable=this.window.methodCoverageAvailable,this.metrics=this.window.metrics,this.translations=this.window.translations,Tt.maximumDecimalPlacesForCoverageQuotas=this.window.maximumDecimalPlacesForCoverageQuotas;let t=!1;if(void 0!==this.window.history&&void 0!==this.window.history.replaceState&&null!==this.window.history.state&&null!=this.window.history.state.coverageInfoSettings)console.log("Coverage info: Restoring from history",this.window.history.state.coverageInfoSettings),t=!0,this.settings=JSON.parse(JSON.stringify(this.window.history.state.coverageInfoSettings));else{let o=0,i=this.window.assemblies;for(let s=0;s-1&&(this.queryString=window.location.href.substring(r)),this.updateCoverageInfo(),t&&this.restoreCollapseState()}onBeforeUnload(){if(this.saveCollapseState(),void 0!==this.window.history&&void 0!==this.window.history.replaceState){console.log("Coverage info: Updating history",this.settings);let t=new Ow;null!==window.history.state&&(t=JSON.parse(JSON.stringify(this.window.history.state))),t.coverageInfoSettings=JSON.parse(JSON.stringify(this.settings)),window.history.replaceState(t,"")}}updateCoverageInfo(){let t=(new Date).getTime(),r=this.window.assemblies,o=[],i=0;if(0===this.settings.grouping)for(let l=0;l{for(let o=0;o{for(let i=0;it&&(o[i].collapsed=this.settings.collapseStates[t]),t++,r(o[i].subElements)};r(this.codeElements)}static#e=this.\u0275fac=function(r){return new(r||e)(S(Pf))};static#t=this.\u0275cmp=rn({type:e,selectors:[["coverage-info"]],hostBindings:function(r,o){1&r&&$("beforeunload",function(){return o.onBeforeUnload()},0,tu)},decls:1,vars:1,consts:[[4,"ngIf"],[3,"visible","translations","branchCoverageAvailable","methodCoverageAvailable","metrics","showLineCoverage","showBranchCoverage","showMethodCoverage","visibleMetrics","visibleChange","showLineCoverageChange","showBranchCoverageChange","showMethodCoverageChange","visibleMetricsChange",4,"ngIf"],[1,"customizebox"],["href","#",3,"click"],[1,"col-center"],[1,"slider-label"],["type","range","step","1","min","-1",3,"max","ngModel","ngModelChange"],[1,"col-right"],["type","button",3,"click"],[1,"icon-cog"],["type","text",3,"ngModel","ngModelChange"],[1,"table-responsive"],[1,"overview","table-fixed","stripped"],[1,"column-min-200"],["class","column90",4,"ngIf"],["class","column105",4,"ngIf"],["class","column100",4,"ngIf"],["class","column70",4,"ngIf"],["class","column98",4,"ngIf"],["class","column112",4,"ngIf"],["class","column112",4,"ngFor","ngForOf"],[1,"header"],["class","center","colspan","6",4,"ngIf"],["class","center","colspan","4",4,"ngIf"],["class","center",4,"ngIf"],[1,"icon-down-dir",3,"ngClass"],["class","right",4,"ngIf"],["class","center","colspan","2",4,"ngIf"],[4,"ngFor","ngForOf"],[3,"visible","translations","branchCoverageAvailable","methodCoverageAvailable","metrics","showLineCoverage","showBranchCoverage","showMethodCoverage","visibleMetrics","visibleChange","showLineCoverageChange","showBranchCoverageChange","showMethodCoverageChange","visibleMetricsChange"],[3,"ngModel","ngModelChange"],["value",""],[3,"value",4,"ngFor","ngForOf"],[3,"value"],["value","allChanges"],["value","lineCoverageIncreaseOnly"],["value","lineCoverageDecreaseOnly"],["value","branchCoverageIncreaseOnly",4,"ngIf"],["value","branchCoverageDecreaseOnly",4,"ngIf"],["value","methodCoverageIncreaseOnly",4,"ngIf"],["value","methodCoverageDecreaseOnly",4,"ngIf"],["value","branchCoverageIncreaseOnly"],["value","branchCoverageDecreaseOnly"],["value","methodCoverageIncreaseOnly"],["value","methodCoverageDecreaseOnly"],[1,"column90"],[1,"column105"],[1,"column100"],[1,"column70"],[1,"column98"],[1,"column112"],["colspan","6",1,"center"],["colspan","4",1,"center"],[1,"center"],[1,"right"],["colspan","2",1,"center"],["target","_blank",3,"href"],[1,"icon-info-circled"],["codeelement-row","",3,"element","collapsed","lineCoverageAvailable","branchCoverageAvailable","methodCoverageAvailable","visibleMetrics",4,"ngIf"],["codeelement-row","",3,"element","collapsed","lineCoverageAvailable","branchCoverageAvailable","methodCoverageAvailable","visibleMetrics"],["class-row","",3,"clazz","translations","lineCoverageAvailable","branchCoverageAvailable","methodCoverageAvailable","visibleMetrics","historyComparisionDate",4,"ngIf"],["class-row","",3,"clazz","translations","lineCoverageAvailable","branchCoverageAvailable","methodCoverageAvailable","visibleMetrics","historyComparisionDate"],["codeelement-row","",1,"namespace",3,"element","collapsed","lineCoverageAvailable","branchCoverageAvailable","methodCoverageAvailable","visibleMetrics"],["class","namespace","class-row","",3,"clazz","translations","lineCoverageAvailable","branchCoverageAvailable","methodCoverageAvailable","visibleMetrics","historyComparisionDate",4,"ngIf"],["class-row","",1,"namespace",3,"clazz","translations","lineCoverageAvailable","branchCoverageAvailable","methodCoverageAvailable","visibleMetrics","historyComparisionDate"]],template:function(r,o){1&r&&k(0,kL,74,51,"div",0),2&r&&g("ngIf",o.codeElements.length>0)},dependencies:[Ni,vo,ar,Nf,Of,Pi,Mf,ji,el,Bi,Ik,qk,V2],encapsulation:2})}return e})();class VL{constructor(){this.assembly="",this.numberOfRiskHotspots=10,this.filter="",this.sortBy="",this.sortOrder="asc"}}function HL(e,n){if(1&e&&(y(0,"option",16),b(1),_()),2&e){const t=n.$implicit;g("value",t),f(),N(t)}}function BL(e,n){if(1&e&&(y(0,"span"),b(1),_()),2&e){const t=v(2);f(),N(t.translations.top)}}function jL(e,n){1&e&&(y(0,"option",23),b(1,"20"),_())}function $L(e,n){1&e&&(y(0,"option",24),b(1,"50"),_())}function UL(e,n){1&e&&(y(0,"option",25),b(1,"100"),_())}function zL(e,n){if(1&e&&(y(0,"option",16),b(1),_()),2&e){const t=v(3);g("value",t.totalNumberOfRiskHotspots),f(),N(t.translations.all)}}function GL(e,n){if(1&e){const t=Me();y(0,"select",17),yt("ngModelChange",function(o){W(t);const i=v(2);return Xe(i.settings.numberOfRiskHotspots,o)||(i.settings.numberOfRiskHotspots=o),Z(o)}),y(1,"option",18),b(2,"10"),_(),k(3,jL,2,0,"option",19)(4,$L,2,0,"option",20)(5,UL,2,0,"option",21)(6,zL,2,2,"option",22),_()}if(2&e){const t=v(2);ht("ngModel",t.settings.numberOfRiskHotspots),f(3),g("ngIf",t.totalNumberOfRiskHotspots>10),f(),g("ngIf",t.totalNumberOfRiskHotspots>20),f(),g("ngIf",t.totalNumberOfRiskHotspots>50),f(),g("ngIf",t.totalNumberOfRiskHotspots>100)}}function qL(e,n){1&e&&A(0,"col",26)}const cl=(e,n,t)=>({"icon-up-dir_active":e,"icon-down-dir_active":n,"icon-down-dir":t});function WL(e,n){if(1&e){const t=Me();y(0,"th")(1,"a",13),$("click",function(o){const s=W(t).index;return Z(v(2).updateSorting(""+s,o))}),A(2,"i",14),b(3),_(),y(4,"a",27),A(5,"i",28),_()()}if(2&e){const t=n.$implicit,r=n.index,o=v(2);f(2),g("ngClass",Ue(3,cl,o.settings.sortBy===""+r&&"desc"===o.settings.sortOrder,o.settings.sortBy===""+r&&"asc"===o.settings.sortOrder,o.settings.sortBy!==""+r)),f(),N(t.name),f(),xn("href",t.explanationUrl,In)}}const ZL=(e,n)=>({lightred:e,lightgreen:n});function QL(e,n){if(1&e&&(y(0,"td",32),b(1),_()),2&e){const t=n.$implicit;g("ngClass",Dd(2,ZL,t.exceeded,!t.exceeded)),f(),N(t.value)}}function YL(e,n){if(1&e&&(y(0,"tr")(1,"td"),b(2),_(),y(3,"td")(4,"a",29),b(5),_()(),y(6,"td",30)(7,"a",29),b(8),_()(),k(9,QL,2,5,"td",31),_()),2&e){const t=n.$implicit,r=v(2);f(2),N(t.assembly),f(2),g("href",t.reportPath+r.queryString,In),f(),N(t.class),f(),g("title",t.methodName),f(),g("href",t.reportPath+r.queryString+"#file"+t.fileIndex+"_line"+t.line,In),f(),q(" ",t.methodShortName," "),f(),g("ngForOf",t.metrics)}}function KL(e,n){if(1&e){const t=Me();y(0,"div")(1,"div",1)(2,"div")(3,"select",2),yt("ngModelChange",function(o){W(t);const i=v();return Xe(i.settings.assembly,o)||(i.settings.assembly=o),Z(o)}),$("ngModelChange",function(){return W(t),Z(v().updateRiskHotpots())}),y(4,"option",3),b(5),_(),k(6,HL,2,2,"option",4),_()(),y(7,"div",5),k(8,BL,2,1,"span",0)(9,GL,7,5,"select",6),_(),A(10,"div",5),y(11,"div",7)(12,"span"),b(13),_(),y(14,"input",8),yt("ngModelChange",function(o){W(t);const i=v();return Xe(i.settings.filter,o)||(i.settings.filter=o),Z(o)}),$("ngModelChange",function(){return W(t),Z(v().updateRiskHotpots())}),_()()(),y(15,"div",9)(16,"table",10)(17,"colgroup"),A(18,"col",11)(19,"col",11)(20,"col",11),k(21,qL,1,0,"col",12),_(),y(22,"thead")(23,"tr")(24,"th")(25,"a",13),$("click",function(o){return W(t),Z(v().updateSorting("assembly",o))}),A(26,"i",14),b(27),_()(),y(28,"th")(29,"a",13),$("click",function(o){return W(t),Z(v().updateSorting("class",o))}),A(30,"i",14),b(31),_()(),y(32,"th")(33,"a",13),$("click",function(o){return W(t),Z(v().updateSorting("method",o))}),A(34,"i",14),b(35),_()(),k(36,WL,6,7,"th",15),_()(),y(37,"tbody"),k(38,YL,10,7,"tr",15),function by(e,n){const t=Y();let r;const o=e+B;t.firstCreatePass?(r=function SN(e,n){if(n)for(let t=n.length-1;t>=0;t--){const r=n[t];if(e===r.name)return r}}(n,t.pipeRegistry),t.data[o]=r,r.onDestroy&&(t.destroyHooks??=[]).push(o,r.onDestroy)):r=t.data[o];const i=r.factory||(r.factory=qn(r.type)),a=ct(S);try{const l=Ms(!1),c=i();return Ms(l),function q1(e,n,t,r){t>=e.data.length&&(e.data[t]=null,e.blueprint[t]=null),n[t]=r}(t,C(),o,c),c}finally{ct(a)}}(39,"slice"),_()()()()}if(2&e){const t=v();f(3),ht("ngModel",t.settings.assembly),f(2),N(t.translations.assembly),f(),g("ngForOf",t.assemblies),f(2),g("ngIf",t.totalNumberOfRiskHotspots>10),f(),g("ngIf",t.totalNumberOfRiskHotspots>10),f(4),q("",t.translations.filter," "),f(),ht("ngModel",t.settings.filter),f(7),g("ngForOf",t.riskHotspotMetrics),f(5),g("ngClass",Ue(20,cl,"assembly"===t.settings.sortBy&&"desc"===t.settings.sortOrder,"assembly"===t.settings.sortBy&&"asc"===t.settings.sortOrder,"assembly"!==t.settings.sortBy)),f(),N(t.translations.assembly),f(3),g("ngClass",Ue(24,cl,"class"===t.settings.sortBy&&"desc"===t.settings.sortOrder,"class"===t.settings.sortBy&&"asc"===t.settings.sortOrder,"class"!==t.settings.sortBy)),f(),N(t.translations.class),f(3),g("ngClass",Ue(28,cl,"method"===t.settings.sortBy&&"desc"===t.settings.sortOrder,"method"===t.settings.sortBy&&"asc"===t.settings.sortOrder,"method"!==t.settings.sortBy)),f(),N(t.translations.method),f(),g("ngForOf",t.riskHotspotMetrics),f(2),g("ngForOf",Ey(39,16,t.riskHotspots,0,t.settings.numberOfRiskHotspots))}}let JL=(()=>{class e{constructor(t){this.queryString="",this.riskHotspotMetrics=[],this.riskHotspots=[],this.totalNumberOfRiskHotspots=0,this.assemblies=[],this.translations={},this.settings=new VL,this.window=t.nativeWindow}ngOnInit(){this.riskHotspotMetrics=this.window.riskHotspotMetrics,this.translations=this.window.translations,void 0!==this.window.history&&void 0!==this.window.history.replaceState&&null!==this.window.history.state&&null!=this.window.history.state.riskHotspotsSettings&&(console.log("Risk hotspots: Restoring from history",this.window.history.state.riskHotspotsSettings),this.settings=JSON.parse(JSON.stringify(this.window.history.state.riskHotspotsSettings)));const t=window.location.href.indexOf("?");t>-1&&(this.queryString=window.location.href.substring(t)),this.updateRiskHotpots()}onDonBeforeUnlodad(){if(void 0!==this.window.history&&void 0!==this.window.history.replaceState){console.log("Risk hotspots: Updating history",this.settings);let t=new Ow;null!==window.history.state&&(t=JSON.parse(JSON.stringify(this.window.history.state))),t.riskHotspotsSettings=JSON.parse(JSON.stringify(this.settings)),window.history.replaceState(t,"")}}updateRiskHotpots(){const t=this.window.riskHotspots;if(this.totalNumberOfRiskHotspots=t.length,0===this.assemblies.length){let s=[];for(let a=0;a0)},dependencies:[Ni,vo,ar,Nf,Of,Pi,ji,el,Bi,zC],encapsulation:2})}return e})(),XL=(()=>{class e{static#e=this.\u0275fac=function(r){return new(r||e)};static#t=this.\u0275mod=Bn({type:e,bootstrap:[JL,LL]});static#n=this.\u0275inj=wn({providers:[Pf],imports:[VF,pk]})}return e})();kF().bootstrapModule(XL).catch(e=>console.error(e))}},Do=>{Do(Do.s=590)}]); \ No newline at end of file diff --git a/src/URLShortener.Tests/output/report.css b/src/URLShortener.Tests/output/report.css new file mode 100644 index 0000000..db2d588 --- /dev/null +++ b/src/URLShortener.Tests/output/report.css @@ -0,0 +1,785 @@ +:root { + --green: #0aad0a; + --lightgreen: #dcf4dc; +} + +html { font-family: sans-serif; margin: 0; padding: 0; font-size: 0.9em; background-color: #d6d6d6; height: 100%; } +body { margin: 0; padding: 0; height: 100%; color: #000; } +h1 { font-family: 'Century Gothic', sans-serif; font-size: 1.2em; font-weight: normal; color: #fff; background-color: #6f6f6f; padding: 10px; margin: 20px -20px 20px -20px; } +h1:first-of-type { margin-top: 0; } +h2 { font-size: 1.0em; font-weight: bold; margin: 10px 0 15px 0; padding: 0; } +h3 { font-size: 1.0em; font-weight: bold; margin: 0 0 10px 0; padding: 0; display: inline-block; } +input, select, button { border: 1px solid #767676; border-radius: 0; } +button { background-color: #ddd; cursor: pointer; } +a { color: #c00; text-decoration: none; } +a:hover { color: #000; text-decoration: none; } +h1 a.back { color: #fff; background-color: #949494; display: inline-block; margin: -12px 5px -10px -10px; padding: 10px; border-right: 1px solid #fff; } +h1 a.back:hover { background-color: #ccc; } +h1 a.button { color: #000; background-color: #bebebe; margin: -5px 0 0 10px; padding: 5px 8px 5px 8px; border: 1px solid #fff; font-size: 0.9em; border-radius: 3px; float:right; } +h1 a.button:hover { background-color: #ccc; } +h1 a.button i { position: relative; top: 1px; } + +.container { margin: auto; max-width: 1650px; width: 90%; background-color: #fff; display: flex; box-shadow: 0 0 60px #7d7d7d; min-height: 100%; } +.containerleft { padding: 0 20px 20px 20px; flex: 1; min-width: 1%; } +.containerright { width: 340px; min-width: 340px; background-color: #e5e5e5; height: 100%; } +.containerrightfixed { position: fixed; padding: 0 20px 20px 20px; border-left: 1px solid #6f6f6f; width: 300px; overflow-y: auto; height: 100%; top: 0; bottom: 0; } +.containerrightfixed h1 { background-color: #c00; } +.containerrightfixed label, .containerright a { white-space: nowrap; overflow: hidden; display: inline-block; width: 100%; max-width: 300px; text-overflow: ellipsis; } +.containerright a { margin-bottom: 3px; } + +@media screen and (max-width:1200px){ + .container { box-shadow: none; width: 100%; } + .containerright { display: none; } +} + +.popup-container { position: fixed; left: 0; right: 0; top: 0; bottom: 0; background-color: rgb(0, 0, 0, 0.6); z-index: 100; } +.popup { position: absolute; top: 50%; right: 50%; transform: translate(50%,-50%); background-color: #fff; padding: 25px; border-radius: 15px; min-width: 300px; } +.popup .close { text-align: right; color: #979797; font-size: 25px;position: relative; left: 10px; bottom: 10px; cursor: pointer; } + +.footer { font-size: 0.7em; text-align: center; margin-top: 35px; } + +.card-group { display: flex; flex-wrap: wrap; margin-top: -15px; margin-left: -15px; } +.card-group + .card-group { margin-top: 0; } +.card-group .card { margin-top: 15px; margin-left: 15px; display: flex; flex-direction: column; background-color: #e4e4e4; background: radial-gradient(circle, #fefefe 0%, #f6f6f6 100%); border: 1px solid #c1c1c1; padding: 15px; color: #6f6f6f; max-width: 100% } +.card-group .card .card-header { font-size: 1.5rem; font-family: 'Century Gothic', sans-serif; margin-bottom: 15px; flex-grow: 1; } +.card-group .card .card-body { display: flex; flex-direction: row; gap: 15px; flex-grow: 1; } +.card-group .card .card-body div.table { display: flex; flex-direction: column; } +.card-group .card .large { font-size: 5rem; line-height: 5rem; font-weight: bold; align-self: flex-end; border-left-width: 4px; padding-left: 10px; } +.card-group .card table { align-self: flex-end; border-collapse: collapse; } +.card-group .card table tr { border-bottom: 1px solid #c1c1c1; } +.card-group .card table tr:hover { background-color: #c1c1c1; } +.card-group .card table tr:last-child { border-bottom: none; } +.card-group .card table th, .card-group .card table td { padding: 2px; } +.card-group td.limit-width { max-width: 200px; text-overflow: ellipsis; overflow: hidden; } +.card-group td.overflow-wrap { overflow-wrap: anywhere; } + +.pro-button { color: #fff; background-color: #20A0D2; background-image: linear-gradient(50deg, #1c7ed6 0%, #23b8cf 100%); padding: 10px; border-radius: 3px; font-weight: bold; display: inline-block; } +.pro-button:hover { color: #fff; background-color: #1C8EB7; background-image: linear-gradient(50deg, #1A6FBA 0%, #1EA1B5 100%); } +.pro-button-tiny { border-radius: 10px; padding: 3px 8px; } + +th { text-align: left; } +.table-fixed { table-layout: fixed; } +.table-responsive { overflow-x: auto; } +.table-responsive::-webkit-scrollbar { height: 20px; } +.table-responsive::-webkit-scrollbar-thumb { background-color: #6f6f6f; border-radius: 20px; border: 5px solid #fff; } +.overview { border: 1px solid #c1c1c1; border-collapse: collapse; width: 100%; word-wrap: break-word; } +.overview th { border: 1px solid #c1c1c1; border-collapse: collapse; padding: 2px 4px 2px 4px; background-color: #ddd; } +.overview tr.namespace th { background-color: #dcdcdc; } +.overview thead th { background-color: #d1d1d1; } +.overview th a { color: #000; } +.overview tr.namespace a { margin-left: 15px; display: block; } +.overview td { border: 1px solid #c1c1c1; border-collapse: collapse; padding: 2px 5px 2px 5px; } +.overview tr.header th { background-color: #d1d1d1; } +.overview tr.header th:nth-child(2n+1) { background-color: #ddd; } +.overview tr.header th:first-child { border-left: 1px solid #fff; border-top: 1px solid #fff; background-color: #fff; } +.overview tr:hover>td { background-color: #b0b0b0; } + +div.currenthistory { margin: -2px -5px 0 -5px; padding: 2px 5px 2px 5px; height: 16px; } +.coverage { border-collapse: collapse; font-size: 5px; height: 10px; } +.coverage td { padding: 0; border: none; } +.stripped tr:nth-child(2n+1) { background-color: #F3F3F3; } + +.customizebox { font-size: 0.75em; margin-bottom: 7px; display: grid; grid-template-columns: 1fr; grid-template-rows: auto auto auto auto; grid-column-gap: 10px; grid-row-gap: 10px; } +.customizebox>div { align-self: end; } +.customizebox div.col-right input { width: 150px; } + +@media screen and (min-width: 1000px) { + .customizebox { grid-template-columns: repeat(4, 1fr); grid-template-rows: 1fr; } + .customizebox div.col-center { justify-self: center; } + .customizebox div.col-right { justify-self: end; } +} +.slider-label { position: relative; left: 85px; } + +.percentagebar { + padding-left: 3px; +} +a.percentagebar { + padding-left: 6px; +} +.percentagebarundefined { + border-left: 2px solid #fff; +} +.percentagebar0 { + border-left: 2px solid #c10909; +} +.percentagebar10 { + border-left: 2px solid; + border-image: linear-gradient(to bottom, #c10909 90%, var(--green) 90%, var(--green) 100%) 1; +} +.percentagebar20 { + border-left: 2px solid; + border-image: linear-gradient(to bottom, #c10909 80%, var(--green) 80%, var(--green) 100%) 1; +} +.percentagebar30 { + border-left: 2px solid; + border-image: linear-gradient(to bottom, #c10909 70%, var(--green) 70%, var(--green) 100%) 1; +} +.percentagebar40 { + border-left: 2px solid; + border-image: linear-gradient(to bottom, #c10909 60%, var(--green) 60%, var(--green) 100%) 1; +} +.percentagebar50 { + border-left: 2px solid; + border-image: linear-gradient(to bottom, #c10909 50%, var(--green) 50%, var(--green) 100%) 1; +} +.percentagebar60 { + border-left: 2px solid; + border-image: linear-gradient(to bottom, #c10909 40%, var(--green) 40%, var(--green) 100%) 1; +} +.percentagebar70 { + border-left: 2px solid; + border-image: linear-gradient(to bottom, #c10909 30%, var(--green) 30%, var(--green) 100%) 1; +} +.percentagebar80 { + border-left: 2px solid; + border-image: linear-gradient(to bottom, #c10909 20%, var(--green) 20%, var(--green) 100%) 1; +} +.percentagebar90 { + border-left: 2px solid; + border-image: linear-gradient(to bottom, #c10909 10%, var(--green) 10%, var(--green) 100%) 1; +} +.percentagebar100 { + border-left: 2px solid var(--green); +} + +.mt-1 { margin-top: 4px; } +.hidden, .ng-hide { display: none; } +.right { text-align: right; } +.center { text-align: center; } +.rightmargin { padding-right: 8px; } +.leftmargin { padding-left: 5px; } +.green { background-color: var(--green); } +.lightgreen { background-color: var(--lightgreen); } +.red { background-color: #c10909; } +.lightred { background-color: #f7dede; } +.orange { background-color: #FFA500; } +.lightorange { background-color: #FFEFD5; } +.gray { background-color: #dcdcdc; } +.lightgray { color: #888888; } +.lightgraybg { background-color: #dadada; } + +code { font-family: Consolas, monospace; font-size: 0.9em; } + +.toggleZoom { text-align:right; } + +.historychart svg { max-width: 100%; } +.ct-chart { position: relative; } +.ct-chart .ct-line { stroke-width: 2px !important; } +.ct-chart .ct-point { stroke-width: 6px !important; transition: stroke-width .2s; } +.ct-chart .ct-point:hover { stroke-width: 10px !important; } +.ct-chart .ct-series.ct-series-a .ct-line, .ct-chart .ct-series.ct-series-a .ct-point { stroke: #c00 !important;} +.ct-chart .ct-series.ct-series-b .ct-line, .ct-chart .ct-series.ct-series-b .ct-point { stroke: #1c2298 !important;} +.ct-chart .ct-series.ct-series-c .ct-line, .ct-chart .ct-series.ct-series-c .ct-point { stroke: #0aad0a !important;} + +.tinylinecoveragechart, .tinybranchcoveragechart, .tinymethodcoveragechart { background-color: #fff; margin-left: -3px; float: left; border: 1px solid #c1c1c1; width: 30px; height: 18px; } +.historiccoverageoffset { margin-top: 7px; } + +.tinylinecoveragechart .ct-line, .tinybranchcoveragechart .ct-line, .tinymethodcoveragechart .ct-line { stroke-width: 1px !important; } +.tinybranchcoveragechart .ct-series.ct-series-a .ct-line { stroke: #1c2298 !important; } +.tinymethodcoveragechart .ct-series.ct-series-a .ct-line { stroke: #0aad0a !important; } + +.linecoverage { background-color: #c00; width: 10px; height: 8px; border: 1px solid #000; display: inline-block; } +.branchcoverage { background-color: #1c2298; width: 10px; height: 8px; border: 1px solid #000; display: inline-block; } +.codeelementcoverage { background-color: #0aad0a; width: 10px; height: 8px; border: 1px solid #000; display: inline-block; } + +.tooltip { position: absolute; display: none; padding: 5px; background: #F4C63D; color: #453D3F; pointer-events: none; z-index: 1; min-width: 250px; } + +.column-min-200 { min-width: 200px; } +.column60 { width: 60px; } +.column70 { width: 70px; } +.column90 { width: 90px; } +.column98 { width: 98px; } +.column100 { width: 100px; } +.column105 { width: 105px; } +.column112 { width: 112px; } + +.cardpercentagebar { border-left-style: solid; } +.cardpercentagebar0 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 0%, var(--green) 0%) 1; } +.cardpercentagebar1 { border-image: linear-gradient(to bottom, #c10909 1%, #c10909 1%, var(--green) 1%) 1; } +.cardpercentagebar2 { border-image: linear-gradient(to bottom, #c10909 2%, #c10909 2%, var(--green) 2%) 1; } +.cardpercentagebar3 { border-image: linear-gradient(to bottom, #c10909 3%, #c10909 3%, var(--green) 3%) 1; } +.cardpercentagebar4 { border-image: linear-gradient(to bottom, #c10909 4%, #c10909 4%, var(--green) 4%) 1; } +.cardpercentagebar5 { border-image: linear-gradient(to bottom, #c10909 5%, #c10909 5%, var(--green) 5%) 1; } +.cardpercentagebar6 { border-image: linear-gradient(to bottom, #c10909 6%, #c10909 6%, var(--green) 6%) 1; } +.cardpercentagebar7 { border-image: linear-gradient(to bottom, #c10909 7%, #c10909 7%, var(--green) 7%) 1; } +.cardpercentagebar8 { border-image: linear-gradient(to bottom, #c10909 8%, #c10909 8%, var(--green) 8%) 1; } +.cardpercentagebar9 { border-image: linear-gradient(to bottom, #c10909 9%, #c10909 9%, var(--green) 9%) 1; } +.cardpercentagebar10 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 10%, var(--green) 10%) 1; } +.cardpercentagebar11 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 11%, var(--green) 11%) 1; } +.cardpercentagebar12 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 12%, var(--green) 12%) 1; } +.cardpercentagebar13 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 13%, var(--green) 13%) 1; } +.cardpercentagebar14 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 14%, var(--green) 14%) 1; } +.cardpercentagebar15 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 15%, var(--green) 15%) 1; } +.cardpercentagebar16 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 16%, var(--green) 16%) 1; } +.cardpercentagebar17 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 17%, var(--green) 17%) 1; } +.cardpercentagebar18 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 18%, var(--green) 18%) 1; } +.cardpercentagebar19 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 19%, var(--green) 19%) 1; } +.cardpercentagebar20 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 20%, var(--green) 20%) 1; } +.cardpercentagebar21 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 21%, var(--green) 21%) 1; } +.cardpercentagebar22 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 22%, var(--green) 22%) 1; } +.cardpercentagebar23 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 23%, var(--green) 23%) 1; } +.cardpercentagebar24 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 24%, var(--green) 24%) 1; } +.cardpercentagebar25 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 25%, var(--green) 25%) 1; } +.cardpercentagebar26 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 26%, var(--green) 26%) 1; } +.cardpercentagebar27 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 27%, var(--green) 27%) 1; } +.cardpercentagebar28 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 28%, var(--green) 28%) 1; } +.cardpercentagebar29 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 29%, var(--green) 29%) 1; } +.cardpercentagebar30 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 30%, var(--green) 30%) 1; } +.cardpercentagebar31 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 31%, var(--green) 31%) 1; } +.cardpercentagebar32 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 32%, var(--green) 32%) 1; } +.cardpercentagebar33 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 33%, var(--green) 33%) 1; } +.cardpercentagebar34 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 34%, var(--green) 34%) 1; } +.cardpercentagebar35 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 35%, var(--green) 35%) 1; } +.cardpercentagebar36 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 36%, var(--green) 36%) 1; } +.cardpercentagebar37 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 37%, var(--green) 37%) 1; } +.cardpercentagebar38 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 38%, var(--green) 38%) 1; } +.cardpercentagebar39 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 39%, var(--green) 39%) 1; } +.cardpercentagebar40 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 40%, var(--green) 40%) 1; } +.cardpercentagebar41 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 41%, var(--green) 41%) 1; } +.cardpercentagebar42 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 42%, var(--green) 42%) 1; } +.cardpercentagebar43 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 43%, var(--green) 43%) 1; } +.cardpercentagebar44 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 44%, var(--green) 44%) 1; } +.cardpercentagebar45 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 45%, var(--green) 45%) 1; } +.cardpercentagebar46 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 46%, var(--green) 46%) 1; } +.cardpercentagebar47 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 47%, var(--green) 47%) 1; } +.cardpercentagebar48 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 48%, var(--green) 48%) 1; } +.cardpercentagebar49 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 49%, var(--green) 49%) 1; } +.cardpercentagebar50 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 50%, var(--green) 50%) 1; } +.cardpercentagebar51 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 51%, var(--green) 51%) 1; } +.cardpercentagebar52 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 52%, var(--green) 52%) 1; } +.cardpercentagebar53 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 53%, var(--green) 53%) 1; } +.cardpercentagebar54 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 54%, var(--green) 54%) 1; } +.cardpercentagebar55 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 55%, var(--green) 55%) 1; } +.cardpercentagebar56 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 56%, var(--green) 56%) 1; } +.cardpercentagebar57 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 57%, var(--green) 57%) 1; } +.cardpercentagebar58 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 58%, var(--green) 58%) 1; } +.cardpercentagebar59 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 59%, var(--green) 59%) 1; } +.cardpercentagebar60 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 60%, var(--green) 60%) 1; } +.cardpercentagebar61 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 61%, var(--green) 61%) 1; } +.cardpercentagebar62 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 62%, var(--green) 62%) 1; } +.cardpercentagebar63 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 63%, var(--green) 63%) 1; } +.cardpercentagebar64 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 64%, var(--green) 64%) 1; } +.cardpercentagebar65 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 65%, var(--green) 65%) 1; } +.cardpercentagebar66 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 66%, var(--green) 66%) 1; } +.cardpercentagebar67 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 67%, var(--green) 67%) 1; } +.cardpercentagebar68 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 68%, var(--green) 68%) 1; } +.cardpercentagebar69 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 69%, var(--green) 69%) 1; } +.cardpercentagebar70 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 70%, var(--green) 70%) 1; } +.cardpercentagebar71 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 71%, var(--green) 71%) 1; } +.cardpercentagebar72 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 72%, var(--green) 72%) 1; } +.cardpercentagebar73 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 73%, var(--green) 73%) 1; } +.cardpercentagebar74 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 74%, var(--green) 74%) 1; } +.cardpercentagebar75 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 75%, var(--green) 75%) 1; } +.cardpercentagebar76 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 76%, var(--green) 76%) 1; } +.cardpercentagebar77 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 77%, var(--green) 77%) 1; } +.cardpercentagebar78 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 78%, var(--green) 78%) 1; } +.cardpercentagebar79 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 79%, var(--green) 79%) 1; } +.cardpercentagebar80 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 80%, var(--green) 80%) 1; } +.cardpercentagebar81 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 81%, var(--green) 81%) 1; } +.cardpercentagebar82 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 82%, var(--green) 82%) 1; } +.cardpercentagebar83 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 83%, var(--green) 83%) 1; } +.cardpercentagebar84 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 84%, var(--green) 84%) 1; } +.cardpercentagebar85 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 85%, var(--green) 85%) 1; } +.cardpercentagebar86 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 86%, var(--green) 86%) 1; } +.cardpercentagebar87 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 87%, var(--green) 87%) 1; } +.cardpercentagebar88 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 88%, var(--green) 88%) 1; } +.cardpercentagebar89 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 89%, var(--green) 89%) 1; } +.cardpercentagebar90 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 90%, var(--green) 90%) 1; } +.cardpercentagebar91 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 91%, var(--green) 91%) 1; } +.cardpercentagebar92 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 92%, var(--green) 92%) 1; } +.cardpercentagebar93 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 93%, var(--green) 93%) 1; } +.cardpercentagebar94 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 94%, var(--green) 94%) 1; } +.cardpercentagebar95 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 95%, var(--green) 95%) 1; } +.cardpercentagebar96 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 96%, var(--green) 96%) 1; } +.cardpercentagebar97 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 97%, var(--green) 97%) 1; } +.cardpercentagebar98 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 98%, var(--green) 98%) 1; } +.cardpercentagebar99 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 99%, var(--green) 99%) 1; } +.cardpercentagebar100 { border-image: linear-gradient(to bottom, #c10909 0%, #c10909 100%, var(--green) 100%) 1; } + +.covered0 { width: 0px; } +.covered1 { width: 1px; } +.covered2 { width: 2px; } +.covered3 { width: 3px; } +.covered4 { width: 4px; } +.covered5 { width: 5px; } +.covered6 { width: 6px; } +.covered7 { width: 7px; } +.covered8 { width: 8px; } +.covered9 { width: 9px; } +.covered10 { width: 10px; } +.covered11 { width: 11px; } +.covered12 { width: 12px; } +.covered13 { width: 13px; } +.covered14 { width: 14px; } +.covered15 { width: 15px; } +.covered16 { width: 16px; } +.covered17 { width: 17px; } +.covered18 { width: 18px; } +.covered19 { width: 19px; } +.covered20 { width: 20px; } +.covered21 { width: 21px; } +.covered22 { width: 22px; } +.covered23 { width: 23px; } +.covered24 { width: 24px; } +.covered25 { width: 25px; } +.covered26 { width: 26px; } +.covered27 { width: 27px; } +.covered28 { width: 28px; } +.covered29 { width: 29px; } +.covered30 { width: 30px; } +.covered31 { width: 31px; } +.covered32 { width: 32px; } +.covered33 { width: 33px; } +.covered34 { width: 34px; } +.covered35 { width: 35px; } +.covered36 { width: 36px; } +.covered37 { width: 37px; } +.covered38 { width: 38px; } +.covered39 { width: 39px; } +.covered40 { width: 40px; } +.covered41 { width: 41px; } +.covered42 { width: 42px; } +.covered43 { width: 43px; } +.covered44 { width: 44px; } +.covered45 { width: 45px; } +.covered46 { width: 46px; } +.covered47 { width: 47px; } +.covered48 { width: 48px; } +.covered49 { width: 49px; } +.covered50 { width: 50px; } +.covered51 { width: 51px; } +.covered52 { width: 52px; } +.covered53 { width: 53px; } +.covered54 { width: 54px; } +.covered55 { width: 55px; } +.covered56 { width: 56px; } +.covered57 { width: 57px; } +.covered58 { width: 58px; } +.covered59 { width: 59px; } +.covered60 { width: 60px; } +.covered61 { width: 61px; } +.covered62 { width: 62px; } +.covered63 { width: 63px; } +.covered64 { width: 64px; } +.covered65 { width: 65px; } +.covered66 { width: 66px; } +.covered67 { width: 67px; } +.covered68 { width: 68px; } +.covered69 { width: 69px; } +.covered70 { width: 70px; } +.covered71 { width: 71px; } +.covered72 { width: 72px; } +.covered73 { width: 73px; } +.covered74 { width: 74px; } +.covered75 { width: 75px; } +.covered76 { width: 76px; } +.covered77 { width: 77px; } +.covered78 { width: 78px; } +.covered79 { width: 79px; } +.covered80 { width: 80px; } +.covered81 { width: 81px; } +.covered82 { width: 82px; } +.covered83 { width: 83px; } +.covered84 { width: 84px; } +.covered85 { width: 85px; } +.covered86 { width: 86px; } +.covered87 { width: 87px; } +.covered88 { width: 88px; } +.covered89 { width: 89px; } +.covered90 { width: 90px; } +.covered91 { width: 91px; } +.covered92 { width: 92px; } +.covered93 { width: 93px; } +.covered94 { width: 94px; } +.covered95 { width: 95px; } +.covered96 { width: 96px; } +.covered97 { width: 97px; } +.covered98 { width: 98px; } +.covered99 { width: 99px; } +.covered100 { width: 100px; } + + @media print { + html, body { background-color: #fff; } + .container { max-width: 100%; width: 100%; padding: 0; } + .overview colgroup col:first-child { width: 300px; } +} + +.icon-up-dir_active { + background-image: url(icon_up-dir.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGZpbGw9IiNjMDAiIGQ9Ik0xNDA4IDEyMTZxMCAyNi0xOSA0NXQtNDUgMTloLTg5NnEtMjYgMC00NS0xOXQtMTktNDUgMTktNDVsNDQ4LTQ0OHExOS0xOSA0NS0xOXQ0NSAxOWw0NDggNDQ4cTE5IDE5IDE5IDQ1eiIvPjwvc3ZnPg==); + background-repeat: no-repeat; + background-size: contain; + padding-left: 15px; + height: 0.9em; + display: inline-block; + position: relative; + top: 3px; +} +.icon-down-dir_active { + background-image: url(icon_up-dir_active.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGZpbGw9IiNjMDAiIGQ9Ik0xNDA4IDcwNHEwIDI2LTE5IDQ1bC00NDggNDQ4cS0xOSAxOS00NSAxOXQtNDUtMTlsLTQ0OC00NDhxLTE5LTE5LTE5LTQ1dDE5LTQ1IDQ1LTE5aDg5NnEyNiAwIDQ1IDE5dDE5IDQ1eiIvPjwvc3ZnPg==); + background-repeat: no-repeat; + background-size: contain; + padding-left: 15px; + height: 0.9em; + display: inline-block; + position: relative; + top: 3px; +} +.icon-down-dir { + background-image: url(icon_down-dir_active.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0xNDA4IDcwNHEwIDI2LTE5IDQ1bC00NDggNDQ4cS0xOSAxOS00NSAxOXQtNDUtMTlsLTQ0OC00NDhxLTE5LTE5LTE5LTQ1dDE5LTQ1IDQ1LTE5aDg5NnEyNiAwIDQ1IDE5dDE5IDQ1eiIvPjwvc3ZnPg==); + background-repeat: no-repeat; + background-size: contain; + padding-left: 15px; + height: 0.9em; + display: inline-block; + position: relative; + top: 3px; +} +.icon-info-circled { + background-image: url(icon_info-circled.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxjaXJjbGUgY3g9Ijg5NiIgY3k9Ijg5NiIgcj0iNzUwIiBmaWxsPSIjZmZmIiAvPjxwYXRoIGZpbGw9IiMyOEE1RkYiIGQ9Ik0xMTUyIDEzNzZ2LTE2MHEwLTE0LTktMjN0LTIzLTloLTk2di01MTJxMC0xNC05LTIzdC0yMy05aC0zMjBxLTE0IDAtMjMgOXQtOSAyM3YxNjBxMCAxNCA5IDIzdDIzIDloOTZ2MzIwaC05NnEtMTQgMC0yMyA5dC05IDIzdjE2MHEwIDE0IDkgMjN0MjMgOWg0NDhxMTQgMCAyMy05dDktMjN6bS0xMjgtODk2di0xNjBxMC0xNC05LTIzdC0yMy05aC0xOTJxLTE0IDAtMjMgOXQtOSAyM3YxNjBxMCAxNCA5IDIzdDIzIDloMTkycTE0IDAgMjMtOXQ5LTIzem02NDAgNDE2cTAgMjA5LTEwMyAzODUuNXQtMjc5LjUgMjc5LjUtMzg1LjUgMTAzLTM4NS41LTEwMy0yNzkuNS0yNzkuNS0xMDMtMzg1LjUgMTAzLTM4NS41IDI3OS41LTI3OS41IDM4NS41LTEwMyAzODUuNSAxMDMgMjc5LjUgMjc5LjUgMTAzIDM4NS41eiIvPjwvc3ZnPg==); + background-repeat: no-repeat; + background-size: contain; + padding-left: 15px; + height: 0.9em; + display: inline-block; +} +.icon-plus { + background-image: url(icon_plus.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0xNjAwIDczNnYxOTJxMCA0MC0yOCA2OHQtNjggMjhoLTQxNnY0MTZxMCA0MC0yOCA2OHQtNjggMjhoLTE5MnEtNDAgMC02OC0yOHQtMjgtNjh2LTQxNmgtNDE2cS00MCAwLTY4LTI4dC0yOC02OHYtMTkycTAtNDAgMjgtNjh0NjgtMjhoNDE2di00MTZxMC00MCAyOC02OHQ2OC0yOGgxOTJxNDAgMCA2OCAyOHQyOCA2OHY0MTZoNDE2cTQwIDAgNjggMjh0MjggNjh6Ii8+PC9zdmc+); + background-repeat: no-repeat; + background-size: contain; + padding-left: 15px; + height: 0.9em; + display: inline-block; + position: relative; + top: 3px; +} +.icon-minus { + background-image: url(icon_minus.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGZpbGw9IiNjMDAiIGQ9Ik0xNjAwIDczNnYxOTJxMCA0MC0yOCA2OHQtNjggMjhoLTEyMTZxLTQwIDAtNjgtMjh0LTI4LTY4di0xOTJxMC00MCAyOC02OHQ2OC0yOGgxMjE2cTQwIDAgNjggMjh0MjggNjh6Ii8+PC9zdmc+); + background-repeat: no-repeat; + background-size: contain; + padding-left: 15px; + height: 0.9em; + display: inline-block; + position: relative; + top: 3px; +} +.icon-wrench { + background-image: url(icon_wrench.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik00NDggMTQ3MnEwLTI2LTE5LTQ1dC00NS0xOS00NSAxOS0xOSA0NSAxOSA0NSA0NSAxOSA0NS0xOSAxOS00NXptNjQ0LTQyMGwtNjgyIDY4MnEtMzcgMzctOTAgMzctNTIgMC05MS0zN2wtMTA2LTEwOHEtMzgtMzYtMzgtOTAgMC01MyAzOC05MWw2ODEtNjgxcTM5IDk4IDExNC41IDE3My41dDE3My41IDExNC41em02MzQtNDM1cTAgMzktMjMgMTA2LTQ3IDEzNC0xNjQuNSAyMTcuNXQtMjU4LjUgODMuNXEtMTg1IDAtMzE2LjUtMTMxLjV0LTEzMS41LTMxNi41IDEzMS41LTMxNi41IDMxNi41LTEzMS41cTU4IDAgMTIxLjUgMTYuNXQxMDcuNSA0Ni41cTE2IDExIDE2IDI4dC0xNiAyOGwtMjkzIDE2OXYyMjRsMTkzIDEwN3E1LTMgNzktNDguNXQxMzUuNS04MSA3MC41LTM1LjVxMTUgMCAyMy41IDEwdDguNSAyNXoiLz48L3N2Zz4=); + background-repeat: no-repeat; + background-size: contain; + padding-left: 20px; + height: 0.9em; + display: inline-block; +} +.icon-cog { + background-image: url(icon_cog.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiB2aWV3Qm94PSIwIDAgNTEyIDUxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNDQ0Ljc4OCAyOTEuMWw0Mi42MTYgMjQuNTk5YzQuODY3IDIuODA5IDcuMTI2IDguNjE4IDUuNDU5IDEzLjk4NS0xMS4wNyAzNS42NDItMjkuOTcgNjcuODQyLTU0LjY4OSA5NC41ODZhMTIuMDE2IDEyLjAxNiAwIDAgMS0xNC44MzIgMi4yNTRsLTQyLjU4NC0yNC41OTVhMTkxLjU3NyAxOTEuNTc3IDAgMCAxLTYwLjc1OSAzNS4xM3Y0OS4xODJhMTIuMDEgMTIuMDEgMCAwIDEtOS4zNzcgMTEuNzE4Yy0zNC45NTYgNy44NS03Mi40OTkgOC4yNTYtMTA5LjIxOS4wMDctNS40OS0xLjIzMy05LjQwMy02LjA5Ni05LjQwMy0xMS43MjN2LTQ5LjE4NGExOTEuNTU1IDE5MS41NTUgMCAwIDEtNjAuNzU5LTM1LjEzbC00Mi41ODQgMjQuNTk1YTEyLjAxNiAxMi4wMTYgMCAwIDEtMTQuODMyLTIuMjU0Yy0yNC43MTgtMjYuNzQ0LTQzLjYxOS01OC45NDQtNTQuNjg5LTk0LjU4Ni0xLjY2Ny01LjM2Ni41OTItMTEuMTc1IDUuNDU5LTEzLjk4NUw2Ny4yMTIgMjkxLjFhMTkzLjQ4IDE5My40OCAwIDAgMSAwLTcwLjE5OWwtNDIuNjE2LTI0LjU5OWMtNC44NjctMi44MDktNy4xMjYtOC42MTgtNS40NTktMTMuOTg1IDExLjA3LTM1LjY0MiAyOS45Ny02Ny44NDIgNTQuNjg5LTk0LjU4NmExMi4wMTYgMTIuMDE2IDAgMCAxIDE0LjgzMi0yLjI1NGw0Mi41ODQgMjQuNTk1YTE5MS41NzcgMTkxLjU3NyAwIDAgMSA2MC43NTktMzUuMTNWMjUuNzU5YTEyLjAxIDEyLjAxIDAgMCAxIDkuMzc3LTExLjcxOGMzNC45NTYtNy44NSA3Mi40OTktOC4yNTYgMTA5LjIxOS0uMDA3IDUuNDkgMS4yMzMgOS40MDMgNi4wOTYgOS40MDMgMTEuNzIzdjQ5LjE4NGExOTEuNTU1IDE5MS41NTUgMCAwIDEgNjAuNzU5IDM1LjEzbDQyLjU4NC0yNC41OTVhMTIuMDE2IDEyLjAxNiAwIDAgMSAxNC44MzIgMi4yNTRjMjQuNzE4IDI2Ljc0NCA0My42MTkgNTguOTQ0IDU0LjY4OSA5NC41ODYgMS42NjcgNS4zNjYtLjU5MiAxMS4xNzUtNS40NTkgMTMuOTg1TDQ0NC43ODggMjIwLjlhMTkzLjQ4NSAxOTMuNDg1IDAgMCAxIDAgNzAuMnpNMzM2IDI1NmMwLTQ0LjExMi0zNS44ODgtODAtODAtODBzLTgwIDM1Ljg4OC04MCA4MCAzNS44ODggODAgODAgODAgODAtMzUuODg4IDgwLTgweiIvPjwvc3ZnPg==); + background-repeat: no-repeat; + background-size: contain; + padding-left: 16px; + height: 0.8em; + display: inline-block; +} +.icon-fork { + background-image: url(icon_fork.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxyZWN0IHdpZHRoPSIxNzkyIiBoZWlnaHQ9IjE3OTIiIHN0eWxlPSJmaWxsOiNmZmYiIC8+PHBhdGggZD0iTTY3MiAxNDcycTAtNDAtMjgtNjh0LTY4LTI4LTY4IDI4LTI4IDY4IDI4IDY4IDY4IDI4IDY4LTI4IDI4LTY4em0wLTExNTJxMC00MC0yOC02OHQtNjgtMjgtNjggMjgtMjggNjggMjggNjggNjggMjggNjgtMjggMjgtNjh6bTY0MCAxMjhxMC00MC0yOC02OHQtNjgtMjgtNjggMjgtMjggNjggMjggNjggNjggMjggNjgtMjggMjgtNjh6bTk2IDBxMCA1Mi0yNiA5Ni41dC03MCA2OS41cS0yIDI4Ny0yMjYgNDE0LTY3IDM4LTIwMyA4MS0xMjggNDAtMTY5LjUgNzF0LTQxLjUgMTAwdjI2cTQ0IDI1IDcwIDY5LjV0MjYgOTYuNXEwIDgwLTU2IDEzNnQtMTM2IDU2LTEzNi01Ni01Ni0xMzZxMC01MiAyNi05Ni41dDcwLTY5LjV2LTgyMHEtNDQtMjUtNzAtNjkuNXQtMjYtOTYuNXEwLTgwIDU2LTEzNnQxMzYtNTYgMTM2IDU2IDU2IDEzNnEwIDUyLTI2IDk2LjV0LTcwIDY5LjV2NDk3cTU0LTI2IDE1NC01NyA1NS0xNyA4Ny41LTI5LjV0NzAuNS0zMSA1OS0zOS41IDQwLjUtNTEgMjgtNjkuNSA4LjUtOTEuNXEtNDQtMjUtNzAtNjkuNXQtMjYtOTYuNXEwLTgwIDU2LTEzNnQxMzYtNTYgMTM2IDU2IDU2IDEzNnoiLz48L3N2Zz4=); + background-repeat: no-repeat; + background-size: contain; + padding-left: 20px; + height: 0.9em; + display: inline-block; +} +.icon-cube { + background-image: url(icon_cube.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik04OTYgMTYyOWw2NDAtMzQ5di02MzZsLTY0MCAyMzN2NzUyem0tNjQtODY1bDY5OC0yNTQtNjk4LTI1NC02OTggMjU0em04MzItMjUydjc2OHEwIDM1LTE4IDY1dC00OSA0N2wtNzA0IDM4NHEtMjggMTYtNjEgMTZ0LTYxLTE2bC03MDQtMzg0cS0zMS0xNy00OS00N3QtMTgtNjV2LTc2OHEwLTQwIDIzLTczdDYxLTQ3bDcwNC0yNTZxMjItOCA0NC04dDQ0IDhsNzA0IDI1NnEzOCAxNCA2MSA0N3QyMyA3M3oiLz48L3N2Zz4=); + background-repeat: no-repeat; + background-size: contain; + padding-left: 20px; + height: 0.9em; + display: inline-block; +} +.icon-search-plus { + background-image: url(icon_search-plus.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGZpbGw9IiM2ZjZmNmYiIGQ9Ik0xMDg4IDgwMHY2NHEwIDEzLTkuNSAyMi41dC0yMi41IDkuNWgtMjI0djIyNHEwIDEzLTkuNSAyMi41dC0yMi41IDkuNWgtNjRxLTEzIDAtMjIuNS05LjV0LTkuNS0yMi41di0yMjRoLTIyNHEtMTMgMC0yMi41LTkuNXQtOS41LTIyLjV2LTY0cTAtMTMgOS41LTIyLjV0MjIuNS05LjVoMjI0di0yMjRxMC0xMyA5LjUtMjIuNXQyMi41LTkuNWg2NHExMyAwIDIyLjUgOS41dDkuNSAyMi41djIyNGgyMjRxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXptMTI4IDMycTAtMTg1LTEzMS41LTMxNi41dC0zMTYuNS0xMzEuNS0zMTYuNSAxMzEuNS0xMzEuNSAzMTYuNSAxMzEuNSAzMTYuNSAzMTYuNSAxMzEuNSAzMTYuNS0xMzEuNSAxMzEuNS0zMTYuNXptNTEyIDgzMnEwIDUzLTM3LjUgOTAuNXQtOTAuNSAzNy41cS01NCAwLTkwLTM4bC0zNDMtMzQycS0xNzkgMTI0LTM5OSAxMjQtMTQzIDAtMjczLjUtNTUuNXQtMjI1LTE1MC0xNTAtMjI1LTU1LjUtMjczLjUgNTUuNS0yNzMuNSAxNTAtMjI1IDIyNS0xNTAgMjczLjUtNTUuNSAyNzMuNSA1NS41IDIyNSAxNTAgMTUwIDIyNSA1NS41IDI3My41cTAgMjIwLTEyNCAzOTlsMzQzIDM0M3EzNyAzNyAzNyA5MHoiLz48L3N2Zz4=); + background-repeat: no-repeat; + background-size: contain; + padding-left: 20px; + height: 0.9em; + display: inline-block; +} +.icon-search-minus { + background-image: url(icon_search-minus.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGZpbGw9IiM2ZjZmNmYiIGQ9Ik0xMDg4IDgwMHY2NHEwIDEzLTkuNSAyMi41dC0yMi41IDkuNWgtNTc2cS0xMyAwLTIyLjUtOS41dC05LjUtMjIuNXYtNjRxMC0xMyA5LjUtMjIuNXQyMi41LTkuNWg1NzZxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXptMTI4IDMycTAtMTg1LTEzMS41LTMxNi41dC0zMTYuNS0xMzEuNS0zMTYuNSAxMzEuNS0xMzEuNSAzMTYuNSAxMzEuNSAzMTYuNSAzMTYuNSAxMzEuNSAzMTYuNS0xMzEuNSAxMzEuNS0zMTYuNXptNTEyIDgzMnEwIDUzLTM3LjUgOTAuNXQtOTAuNSAzNy41cS01NCAwLTkwLTM4bC0zNDMtMzQycS0xNzkgMTI0LTM5OSAxMjQtMTQzIDAtMjczLjUtNTUuNXQtMjI1LTE1MC0xNTAtMjI1LTU1LjUtMjczLjUgNTUuNS0yNzMuNSAxNTAtMjI1IDIyNS0xNTAgMjczLjUtNTUuNSAyNzMuNSA1NS41IDIyNSAxNTAgMTUwIDIyNSA1NS41IDI3My41cTAgMjIwLTEyNCAzOTlsMzQzIDM0M3EzNyAzNyAzNyA5MHoiLz48L3N2Zz4=); + background-repeat: no-repeat; + background-size: contain; + padding-left: 20px; + height: 0.9em; + display: inline-block; +} +.icon-star { + background-image: url(icon_star.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0xNzI4IDY0N3EwIDIyLTI2IDQ4bC0zNjMgMzU0IDg2IDUwMHExIDcgMSAyMCAwIDIxLTEwLjUgMzUuNXQtMzAuNSAxNC41cS0xOSAwLTQwLTEybC00NDktMjM2LTQ0OSAyMzZxLTIyIDEyLTQwIDEyLTIxIDAtMzEuNS0xNC41dC0xMC41LTM1LjVxMC02IDItMjBsODYtNTAwLTM2NC0zNTRxLTI1LTI3LTI1LTQ4IDAtMzcgNTYtNDZsNTAyLTczIDIyNS00NTVxMTktNDEgNDktNDF0NDkgNDFsMjI1IDQ1NSA1MDIgNzNxNTYgOSA1NiA0NnoiIGZpbGw9IiMwMDAiLz48L3N2Zz4=); + background-repeat: no-repeat; + background-size: contain; + padding-left: 20px; + height: 0.9em; + display: inline-block; +} +.icon-sponsor { + background-image: url(icon_sponsor.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik04OTYgMTY2NHEtMjYgMC00NC0xOGwtNjI0LTYwMnEtMTAtOC0yNy41LTI2dC01NS41LTY1LjUtNjgtOTcuNS01My41LTEyMS0yMy41LTEzOHEwLTIyMCAxMjctMzQ0dDM1MS0xMjRxNjIgMCAxMjYuNSAyMS41dDEyMCA1OCA5NS41IDY4LjUgNzYgNjhxMzYtMzYgNzYtNjh0OTUuNS02OC41IDEyMC01OCAxMjYuNS0yMS41cTIyNCAwIDM1MSAxMjR0MTI3IDM0NHEwIDIyMS0yMjkgNDUwbC02MjMgNjAwcS0xOCAxOC00NCAxOHoiIGZpbGw9IiNlYTRhYWEiLz48L3N2Zz4=); + background-repeat: no-repeat; + background-size: contain; + padding-left: 20px; + height: 0.9em; + display: inline-block; +} + + + +@media (prefers-color-scheme: dark) { + @media screen { + html { + background-color: #333; + color: #fff; + } + + body { + color: #fff; + } + + h1 { + background-color: #555453; + color: #fff; + } + + .container { + background-color: #333; + box-shadow: 0 0 60px #0c0c0c; + } + + .containerrightfixed { + background-color: #3D3C3C; + border-left: 1px solid #515050; + } + + .containerrightfixed h1 { + background-color: #484747; + } + + .popup-container { + background-color: rgb(80, 80, 80, 0.6); + } + + .popup { + background-color: #333; + } + + .card-group .card { + background-color: #333; + background: radial-gradient(circle, #444 0%, #333 100%); + border: 1px solid #545454; + color: #fff; + } + + .card-group .card table tr { + border-bottom: 1px solid #545454; + } + + .card-group .card table tr:hover { + background-color: #2E2D2C; + } + + .table-responsive::-webkit-scrollbar-thumb { + background-color: #555453; + border: 5px solid #333; + } + + .overview tr:hover > td { + background-color: #2E2D2C; + } + + .overview th { + background-color: #444; + border: 1px solid #3B3A39; + } + + .overview tr.namespace th { + background-color: #444; + } + + .overview thead th { + background-color: #444; + } + + .overview th a { + color: #fff; + color: rgba(255, 255, 255, 0.95); + } + + .overview th a:hover { + color: #0078d4; + } + + .overview td { + border: 1px solid #3B3A39; + } + + .overview .coverage td { + border: none; + } + + .overview tr.header th { + background-color: #444; + } + + .overview tr.header th:nth-child(2n+1) { + background-color: #3a3a3a; + } + + .overview tr.header th:first-child { + border-left: 1px solid #333; + border-top: 1px solid #333; + background-color: #333; + } + + .stripped tr:nth-child(2n+1) { + background-color: #3c3c3c; + } + + input, select, button { + background-color: #333; + color: #fff; + border: 1px solid #A19F9D; + } + + a { + color: #fff; + color: rgba(255, 255, 255, 0.95); + } + + a:hover { + color: #0078d4; + } + + h1 a.back { + background-color: #4a4846; + } + + h1 a.button { + color: #fff; + background-color: #565656; + border-color: #c1c1c1; + } + + h1 a.button:hover { + background-color: #8d8d8d; + } + + .gray { + background-color: #484747; + } + + .lightgray { + color: #ebebeb; + } + + .lightgraybg { + background-color: #474747; + } + + .lightgreen { + background-color: #406540; + } + + .lightorange { + background-color: #ab7f36; + } + + .lightred { + background-color: #954848; + } + + .ct-label { + color: #fff !important; + fill: #fff !important; + } + + .ct-grid { + stroke: #fff !important; + } + + .ct-chart .ct-series.ct-series-a .ct-line, .ct-chart .ct-series.ct-series-a .ct-point { + stroke: #0078D4 !important; + } + + .ct-chart .ct-series.ct-series-b .ct-line, .ct-chart .ct-series.ct-series-b .ct-point { + stroke: #6dc428 !important; + } + + .ct-chart .ct-series.ct-series-c .ct-line, .ct-chart .ct-series.ct-series-c .ct-point { + stroke: #e58f1d !important; + } + + .linecoverage { + background-color: #0078D4; + } + + .branchcoverage { + background-color: #6dc428; + } + .codeelementcoverage { + background-color: #e58f1d; + } + + .tinylinecoveragechart, .tinybranchcoveragechart, .tinymethodcoveragechart { + background-color: #333; + } + + .tinybranchcoveragechart .ct-series.ct-series-a .ct-line { + stroke: #6dc428 !important; + } + + .tinymethodcoveragechart .ct-series.ct-series-a .ct-line { + stroke: #e58f1d !important; + } + + .icon-down-dir { + background-image: url(icon_down-dir_active_dark.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHdpZHRoPSIxNzkyIiBoZWlnaHQ9IjE3OTIiIHZpZXdCb3g9IjAgMCAxNzkyIDE3OTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbD0iI0JGQkZDMCIgZD0iTTE0MDggNzA0cTAgMjYtMTkgNDVsLTQ0OCA0NDhxLTE5IDE5LTQ1IDE5dC00NS0xOWwtNDQ4LTQ0OHEtMTktMTktMTktNDV0MTktNDUgNDUtMTloODk2cTI2IDAgNDUgMTl0MTkgNDV6Ii8+PC9zdmc+); + } + + .icon-info-circled { + background-image: url(icon_info-circled_dark.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxjaXJjbGUgY3g9Ijg5NiIgY3k9Ijg5NiIgcj0iNzUwIiBmaWxsPSIjZmZmIiAvPjxwYXRoIGZpbGw9IiMyOEE1RkYiIGQ9Ik0xMTUyIDEzNzZ2LTE2MHEwLTE0LTktMjN0LTIzLTloLTk2di01MTJxMC0xNC05LTIzdC0yMy05aC0zMjBxLTE0IDAtMjMgOXQtOSAyM3YxNjBxMCAxNCA5IDIzdDIzIDloOTZ2MzIwaC05NnEtMTQgMC0yMyA5dC05IDIzdjE2MHEwIDE0IDkgMjN0MjMgOWg0NDhxMTQgMCAyMy05dDktMjN6bS0xMjgtODk2di0xNjBxMC0xNC05LTIzdC0yMy05aC0xOTJxLTE0IDAtMjMgOXQtOSAyM3YxNjBxMCAxNCA5IDIzdDIzIDloMTkycTE0IDAgMjMtOXQ5LTIzem02NDAgNDE2cTAgMjA5LTEwMyAzODUuNXQtMjc5LjUgMjc5LjUtMzg1LjUgMTAzLTM4NS41LTEwMy0yNzkuNS0yNzkuNS0xMDMtMzg1LjUgMTAzLTM4NS41IDI3OS41LTI3OS41IDM4NS41LTEwMyAzODUuNSAxMDMgMjc5LjUgMjc5LjUgMTAzIDM4NS41eiIvPjwvc3ZnPg==); + } + + .icon-plus { + background-image: url(icon_plus_dark.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHdpZHRoPSIxNzkyIiBoZWlnaHQ9IjE3OTIiIHZpZXdCb3g9IjAgMCAxNzkyIDE3OTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbD0iI0JGQkZDMCIgZD0iTTE2MDAgNzM2djE5MnEwIDQwLTI4IDY4dC02OCAyOGgtNDE2djQxNnEwIDQwLTI4IDY4dC02OCAyOGgtMTkycS00MCAwLTY4LTI4dC0yOC02OHYtNDE2aC00MTZxLTQwIDAtNjgtMjh0LTI4LTY4di0xOTJxMC00MCAyOC02OHQ2OC0yOGg0MTZ2LTQxNnEwLTQwIDI4LTY4dDY4LTI4aDE5MnE0MCAwIDY4IDI4dDI4IDY4djQxNmg0MTZxNDAgMCA2OCAyOHQyOCA2OHoiLz48L3N2Zz4=); + } + + .icon-minus { + background-image: url(icon_minus_dark.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHdpZHRoPSIxNzkyIiBoZWlnaHQ9IjE3OTIiIHZpZXdCb3g9IjAgMCAxNzkyIDE3OTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbD0iI0JGQkZDMCIgZD0iTTE2MDAgNzM2djE5MnEwIDQwLTI4IDY4dC02OCAyOGgtMTIxNnEtNDAgMC02OC0yOHQtMjgtNjh2LTE5MnEwLTQwIDI4LTY4dDY4LTI4aDEyMTZxNDAgMCA2OCAyOHQyOCA2OHoiLz48L3N2Zz4=); + } + + .icon-wrench { + background-image: url(icon_wrench_dark.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHdpZHRoPSIxNzkyIiBoZWlnaHQ9IjE3OTIiIHZpZXdCb3g9IjAgMCAxNzkyIDE3OTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbD0iI0JEQkRCRiIgZD0iTTQ0OCAxNDcycTAtMjYtMTktNDV0LTQ1LTE5LTQ1IDE5LTE5IDQ1IDE5IDQ1IDQ1IDE5IDQ1LTE5IDE5LTQ1em02NDQtNDIwbC02ODIgNjgycS0zNyAzNy05MCAzNy01MiAwLTkxLTM3bC0xMDYtMTA4cS0zOC0zNi0zOC05MCAwLTUzIDM4LTkxbDY4MS02ODFxMzkgOTggMTE0LjUgMTczLjV0MTczLjUgMTE0LjV6bTYzNC00MzVxMCAzOS0yMyAxMDYtNDcgMTM0LTE2NC41IDIxNy41dC0yNTguNSA4My41cS0xODUgMC0zMTYuNS0xMzEuNXQtMTMxLjUtMzE2LjUgMTMxLjUtMzE2LjUgMzE2LjUtMTMxLjVxNTggMCAxMjEuNSAxNi41dDEwNy41IDQ2LjVxMTYgMTEgMTYgMjh0LTE2IDI4bC0yOTMgMTY5djIyNGwxOTMgMTA3cTUtMyA3OS00OC41dDEzNS41LTgxIDcwLjUtMzUuNXExNSAwIDIzLjUgMTB0OC41IDI1eiIvPjwvc3ZnPg==); + } + + .icon-cog { + background-image: url(icon_cog_dark.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiB2aWV3Qm94PSIwIDAgNTEyIDUxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBmaWxsPSIjQkRCREJGIiBkPSJNNDQ0Ljc4OCAyOTEuMWw0Mi42MTYgMjQuNTk5YzQuODY3IDIuODA5IDcuMTI2IDguNjE4IDUuNDU5IDEzLjk4NS0xMS4wNyAzNS42NDItMjkuOTcgNjcuODQyLTU0LjY4OSA5NC41ODZhMTIuMDE2IDEyLjAxNiAwIDAgMS0xNC44MzIgMi4yNTRsLTQyLjU4NC0yNC41OTVhMTkxLjU3NyAxOTEuNTc3IDAgMCAxLTYwLjc1OSAzNS4xM3Y0OS4xODJhMTIuMDEgMTIuMDEgMCAwIDEtOS4zNzcgMTEuNzE4Yy0zNC45NTYgNy44NS03Mi40OTkgOC4yNTYtMTA5LjIxOS4wMDctNS40OS0xLjIzMy05LjQwMy02LjA5Ni05LjQwMy0xMS43MjN2LTQ5LjE4NGExOTEuNTU1IDE5MS41NTUgMCAwIDEtNjAuNzU5LTM1LjEzbC00Mi41ODQgMjQuNTk1YTEyLjAxNiAxMi4wMTYgMCAwIDEtMTQuODMyLTIuMjU0Yy0yNC43MTgtMjYuNzQ0LTQzLjYxOS01OC45NDQtNTQuNjg5LTk0LjU4Ni0xLjY2Ny01LjM2Ni41OTItMTEuMTc1IDUuNDU5LTEzLjk4NUw2Ny4yMTIgMjkxLjFhMTkzLjQ4IDE5My40OCAwIDAgMSAwLTcwLjE5OWwtNDIuNjE2LTI0LjU5OWMtNC44NjctMi44MDktNy4xMjYtOC42MTgtNS40NTktMTMuOTg1IDExLjA3LTM1LjY0MiAyOS45Ny02Ny44NDIgNTQuNjg5LTk0LjU4NmExMi4wMTYgMTIuMDE2IDAgMCAxIDE0LjgzMi0yLjI1NGw0Mi41ODQgMjQuNTk1YTE5MS41NzcgMTkxLjU3NyAwIDAgMSA2MC43NTktMzUuMTNWMjUuNzU5YTEyLjAxIDEyLjAxIDAgMCAxIDkuMzc3LTExLjcxOGMzNC45NTYtNy44NSA3Mi40OTktOC4yNTYgMTA5LjIxOS0uMDA3IDUuNDkgMS4yMzMgOS40MDMgNi4wOTYgOS40MDMgMTEuNzIzdjQ5LjE4NGExOTEuNTU1IDE5MS41NTUgMCAwIDEgNjAuNzU5IDM1LjEzbDQyLjU4NC0yNC41OTVhMTIuMDE2IDEyLjAxNiAwIDAgMSAxNC44MzIgMi4yNTRjMjQuNzE4IDI2Ljc0NCA0My42MTkgNTguOTQ0IDU0LjY4OSA5NC41ODYgMS42NjcgNS4zNjYtLjU5MiAxMS4xNzUtNS40NTkgMTMuOTg1TDQ0NC43ODggMjIwLjlhMTkzLjQ4NSAxOTMuNDg1IDAgMCAxIDAgNzAuMnpNMzM2IDI1NmMwLTQ0LjExMi0zNS44ODgtODAtODAtODBzLTgwIDM1Ljg4OC04MCA4MCAzNS44ODggODAgODAgODAgODAtMzUuODg4IDgwLTgweiIvPjwvc3ZnPg==); + } + + .icon-fork { + background-image: url(icon_fork_dark.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHdpZHRoPSIxNzkyIiBoZWlnaHQ9IjE3OTIiIHZpZXdCb3g9IjAgMCAxNzkyIDE3OTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbD0iI0JGQkZDMCIgZD0iTTY3MiAxNDcycTAtNDAtMjgtNjh0LTY4LTI4LTY4IDI4LTI4IDY4IDI4IDY4IDY4IDI4IDY4LTI4IDI4LTY4em0wLTExNTJxMC00MC0yOC02OHQtNjgtMjgtNjggMjgtMjggNjggMjggNjggNjggMjggNjgtMjggMjgtNjh6bTY0MCAxMjhxMC00MC0yOC02OHQtNjgtMjgtNjggMjgtMjggNjggMjggNjggNjggMjggNjgtMjggMjgtNjh6bTk2IDBxMCA1Mi0yNiA5Ni41dC03MCA2OS41cS0yIDI4Ny0yMjYgNDE0LTY3IDM4LTIwMyA4MS0xMjggNDAtMTY5LjUgNzF0LTQxLjUgMTAwdjI2cTQ0IDI1IDcwIDY5LjV0MjYgOTYuNXEwIDgwLTU2IDEzNnQtMTM2IDU2LTEzNi01Ni01Ni0xMzZxMC01MiAyNi05Ni41dDcwLTY5LjV2LTgyMHEtNDQtMjUtNzAtNjkuNXQtMjYtOTYuNXEwLTgwIDU2LTEzNnQxMzYtNTYgMTM2IDU2IDU2IDEzNnEwIDUyLTI2IDk2LjV0LTcwIDY5LjV2NDk3cTU0LTI2IDE1NC01NyA1NS0xNyA4Ny41LTI5LjV0NzAuNS0zMSA1OS0zOS41IDQwLjUtNTEgMjgtNjkuNSA4LjUtOTEuNXEtNDQtMjUtNzAtNjkuNXQtMjYtOTYuNXEwLTgwIDU2LTEzNnQxMzYtNTYgMTM2IDU2IDU2IDEzNnoiLz48L3N2Zz4=); + } + + .icon-cube { + background-image: url(icon_cube_dark.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHdpZHRoPSIxNzkyIiBoZWlnaHQ9IjE3OTIiIHZpZXdCb3g9IjAgMCAxNzkyIDE3OTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbD0iI0JGQkZDMCIgZD0iTTg5NiAxNjI5bDY0MC0zNDl2LTYzNmwtNjQwIDIzM3Y3NTJ6bS02NC04NjVsNjk4LTI1NC02OTgtMjU0LTY5OCAyNTR6bTgzMi0yNTJ2NzY4cTAgMzUtMTggNjV0LTQ5IDQ3bC03MDQgMzg0cS0yOCAxNi02MSAxNnQtNjEtMTZsLTcwNC0zODRxLTMxLTE3LTQ5LTQ3dC0xOC02NXYtNzY4cTAtNDAgMjMtNzN0NjEtNDdsNzA0LTI1NnEyMi04IDQ0LTh0NDQgOGw3MDQgMjU2cTM4IDE0IDYxIDQ3dDIzIDczeiIvPjwvc3ZnPg==); + } + + .icon-search-plus { + background-image: url(icon_search-plus_dark.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHdpZHRoPSIxNzkyIiBoZWlnaHQ9IjE3OTIiIHZpZXdCb3g9IjAgMCAxNzkyIDE3OTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbD0iI0JGQkZDMCIgZD0iTTEwODggODAwdjY0cTAgMTMtOS41IDIyLjV0LTIyLjUgOS41aC0yMjR2MjI0cTAgMTMtOS41IDIyLjV0LTIyLjUgOS41aC02NHEtMTMgMC0yMi41LTkuNXQtOS41LTIyLjV2LTIyNGgtMjI0cS0xMyAwLTIyLjUtOS41dC05LjUtMjIuNXYtNjRxMC0xMyA5LjUtMjIuNXQyMi41LTkuNWgyMjR2LTIyNHEwLTEzIDkuNS0yMi41dDIyLjUtOS41aDY0cTEzIDAgMjIuNSA5LjV0OS41IDIyLjV2MjI0aDIyNHExMyAwIDIyLjUgOS41dDkuNSAyMi41em0xMjggMzJxMC0xODUtMTMxLjUtMzE2LjV0LTMxNi41LTEzMS41LTMxNi41IDEzMS41LTEzMS41IDMxNi41IDEzMS41IDMxNi41IDMxNi41IDEzMS41IDMxNi41LTEzMS41IDEzMS41LTMxNi41em01MTIgODMycTAgNTMtMzcuNSA5MC41dC05MC41IDM3LjVxLTU0IDAtOTAtMzhsLTM0My0zNDJxLTE3OSAxMjQtMzk5IDEyNC0xNDMgMC0yNzMuNS01NS41dC0yMjUtMTUwLTE1MC0yMjUtNTUuNS0yNzMuNSA1NS41LTI3My41IDE1MC0yMjUgMjI1LTE1MCAyNzMuNS01NS41IDI3My41IDU1LjUgMjI1IDE1MCAxNTAgMjI1IDU1LjUgMjczLjVxMCAyMjAtMTI0IDM5OWwzNDMgMzQzcTM3IDM3IDM3IDkweiIvPjwvc3ZnPg==); + } + + .icon-search-minus { + background-image: url(icon_search-minus_dark.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHdpZHRoPSIxNzkyIiBoZWlnaHQ9IjE3OTIiIHZpZXdCb3g9IjAgMCAxNzkyIDE3OTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbD0iI0JGQkZDMCIgZD0iTTEwODggODAwdjY0cTAgMTMtOS41IDIyLjV0LTIyLjUgOS41aC01NzZxLTEzIDAtMjIuNS05LjV0LTkuNS0yMi41di02NHEwLTEzIDkuNS0yMi41dDIyLjUtOS41aDU3NnExMyAwIDIyLjUgOS41dDkuNSAyMi41em0xMjggMzJxMC0xODUtMTMxLjUtMzE2LjV0LTMxNi41LTEzMS41LTMxNi41IDEzMS41LTEzMS41IDMxNi41IDEzMS41IDMxNi41IDMxNi41IDEzMS41IDMxNi41LTEzMS41IDEzMS41LTMxNi41em01MTIgODMycTAgNTMtMzcuNSA5MC41dC05MC41IDM3LjVxLTU0IDAtOTAtMzhsLTM0My0zNDJxLTE3OSAxMjQtMzk5IDEyNC0xNDMgMC0yNzMuNS01NS41dC0yMjUtMTUwLTE1MC0yMjUtNTUuNS0yNzMuNSA1NS41LTI3My41IDE1MC0yMjUgMjI1LTE1MCAyNzMuNS01NS41IDI3My41IDU1LjUgMjI1IDE1MCAxNTAgMjI1IDU1LjUgMjczLjVxMCAyMjAtMTI0IDM5OWwzNDMgMzQzcTM3IDM3IDM3IDkweiIvPjwvc3ZnPg==); + } + + .icon-star { + background-image: url(icon_star_dark.svg), url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTc5MiIgaGVpZ2h0PSIxNzkyIiB2aWV3Qm94PSIwIDAgMTc5MiAxNzkyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0xNzI4IDY0N3EwIDIyLTI2IDQ4bC0zNjMgMzU0IDg2IDUwMHExIDcgMSAyMCAwIDIxLTEwLjUgMzUuNXQtMzAuNSAxNC41cS0xOSAwLTQwLTEybC00NDktMjM2LTQ0OSAyMzZxLTIyIDEyLTQwIDEyLTIxIDAtMzEuNS0xNC41dC0xMC41LTM1LjVxMC02IDItMjBsODYtNTAwLTM2NC0zNTRxLTI1LTI3LTI1LTQ4IDAtMzcgNTYtNDZsNTAyLTczIDIyNS00NTVxMTktNDEgNDktNDF0NDkgNDFsMjI1IDQ1NSA1MDIgNzNxNTYgOSA1NiA0NnoiIGZpbGw9IiNmZmYiLz48L3N2Zz4=); + } + } +} + +.ct-double-octave:after,.ct-golden-section:after,.ct-major-eleventh:after,.ct-major-second:after,.ct-major-seventh:after,.ct-major-sixth:after,.ct-major-tenth:after,.ct-major-third:after,.ct-major-twelfth:after,.ct-minor-second:after,.ct-minor-seventh:after,.ct-minor-sixth:after,.ct-minor-third:after,.ct-octave:after,.ct-perfect-fifth:after,.ct-perfect-fourth:after,.ct-square:after{content:"";clear:both}.ct-label{fill:rgba(0,0,0,.4);color:rgba(0,0,0,.4);font-size:.75rem;line-height:1}.ct-chart-bar .ct-label,.ct-chart-line .ct-label{display:block;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex}.ct-chart-donut .ct-label,.ct-chart-pie .ct-label{dominant-baseline:central}.ct-label.ct-horizontal.ct-start{-webkit-box-align:flex-end;-webkit-align-items:flex-end;-ms-flex-align:flex-end;align-items:flex-end;-webkit-box-pack:flex-start;-webkit-justify-content:flex-start;-ms-flex-pack:flex-start;justify-content:flex-start;text-align:left;text-anchor:start}.ct-label.ct-horizontal.ct-end{-webkit-box-align:flex-start;-webkit-align-items:flex-start;-ms-flex-align:flex-start;align-items:flex-start;-webkit-box-pack:flex-start;-webkit-justify-content:flex-start;-ms-flex-pack:flex-start;justify-content:flex-start;text-align:left;text-anchor:start}.ct-label.ct-vertical.ct-start{-webkit-box-align:flex-end;-webkit-align-items:flex-end;-ms-flex-align:flex-end;align-items:flex-end;-webkit-box-pack:flex-end;-webkit-justify-content:flex-end;-ms-flex-pack:flex-end;justify-content:flex-end;text-align:right;text-anchor:end}.ct-label.ct-vertical.ct-end{-webkit-box-align:flex-end;-webkit-align-items:flex-end;-ms-flex-align:flex-end;align-items:flex-end;-webkit-box-pack:flex-start;-webkit-justify-content:flex-start;-ms-flex-pack:flex-start;justify-content:flex-start;text-align:left;text-anchor:start}.ct-chart-bar .ct-label.ct-horizontal.ct-start{-webkit-box-align:flex-end;-webkit-align-items:flex-end;-ms-flex-align:flex-end;align-items:flex-end;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;text-align:center;text-anchor:start}.ct-chart-bar .ct-label.ct-horizontal.ct-end{-webkit-box-align:flex-start;-webkit-align-items:flex-start;-ms-flex-align:flex-start;align-items:flex-start;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;text-align:center;text-anchor:start}.ct-chart-bar.ct-horizontal-bars .ct-label.ct-horizontal.ct-start{-webkit-box-align:flex-end;-webkit-align-items:flex-end;-ms-flex-align:flex-end;align-items:flex-end;-webkit-box-pack:flex-start;-webkit-justify-content:flex-start;-ms-flex-pack:flex-start;justify-content:flex-start;text-align:left;text-anchor:start}.ct-chart-bar.ct-horizontal-bars .ct-label.ct-horizontal.ct-end{-webkit-box-align:flex-start;-webkit-align-items:flex-start;-ms-flex-align:flex-start;align-items:flex-start;-webkit-box-pack:flex-start;-webkit-justify-content:flex-start;-ms-flex-pack:flex-start;justify-content:flex-start;text-align:left;text-anchor:start}.ct-chart-bar.ct-horizontal-bars .ct-label.ct-vertical.ct-start{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:flex-end;-webkit-justify-content:flex-end;-ms-flex-pack:flex-end;justify-content:flex-end;text-align:right;text-anchor:end}.ct-chart-bar.ct-horizontal-bars .ct-label.ct-vertical.ct-end{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:flex-start;-webkit-justify-content:flex-start;-ms-flex-pack:flex-start;justify-content:flex-start;text-align:left;text-anchor:end}.ct-grid{stroke:rgba(0,0,0,.2);stroke-width:1px;stroke-dasharray:2px}.ct-grid-background{fill:none}.ct-point{stroke-width:10px;stroke-linecap:round}.ct-line{fill:none;stroke-width:4px}.ct-area{stroke:none;fill-opacity:.1}.ct-bar{fill:none;stroke-width:10px}.ct-slice-donut{fill:none;stroke-width:60px}.ct-series-a .ct-bar,.ct-series-a .ct-line,.ct-series-a .ct-point,.ct-series-a .ct-slice-donut{stroke:#d70206}.ct-series-a .ct-area,.ct-series-a .ct-slice-donut-solid,.ct-series-a .ct-slice-pie{fill:#d70206}.ct-series-b .ct-bar,.ct-series-b .ct-line,.ct-series-b .ct-point,.ct-series-b .ct-slice-donut{stroke:#f05b4f}.ct-series-b .ct-area,.ct-series-b .ct-slice-donut-solid,.ct-series-b .ct-slice-pie{fill:#f05b4f}.ct-series-c .ct-bar,.ct-series-c .ct-line,.ct-series-c .ct-point,.ct-series-c .ct-slice-donut{stroke:#f4c63d}.ct-series-c .ct-area,.ct-series-c .ct-slice-donut-solid,.ct-series-c .ct-slice-pie{fill:#f4c63d}.ct-series-d .ct-bar,.ct-series-d .ct-line,.ct-series-d .ct-point,.ct-series-d .ct-slice-donut{stroke:#d17905}.ct-series-d .ct-area,.ct-series-d .ct-slice-donut-solid,.ct-series-d .ct-slice-pie{fill:#d17905}.ct-series-e .ct-bar,.ct-series-e .ct-line,.ct-series-e .ct-point,.ct-series-e .ct-slice-donut{stroke:#453d3f}.ct-series-e .ct-area,.ct-series-e .ct-slice-donut-solid,.ct-series-e .ct-slice-pie{fill:#453d3f}.ct-series-f .ct-bar,.ct-series-f .ct-line,.ct-series-f .ct-point,.ct-series-f .ct-slice-donut{stroke:#59922b}.ct-series-f .ct-area,.ct-series-f .ct-slice-donut-solid,.ct-series-f .ct-slice-pie{fill:#59922b}.ct-series-g .ct-bar,.ct-series-g .ct-line,.ct-series-g .ct-point,.ct-series-g .ct-slice-donut{stroke:#0544d3}.ct-series-g .ct-area,.ct-series-g .ct-slice-donut-solid,.ct-series-g .ct-slice-pie{fill:#0544d3}.ct-series-h .ct-bar,.ct-series-h .ct-line,.ct-series-h .ct-point,.ct-series-h .ct-slice-donut{stroke:#6b0392}.ct-series-h .ct-area,.ct-series-h .ct-slice-donut-solid,.ct-series-h .ct-slice-pie{fill:#6b0392}.ct-series-i .ct-bar,.ct-series-i .ct-line,.ct-series-i .ct-point,.ct-series-i .ct-slice-donut{stroke:#f05b4f}.ct-series-i .ct-area,.ct-series-i .ct-slice-donut-solid,.ct-series-i .ct-slice-pie{fill:#f05b4f}.ct-series-j .ct-bar,.ct-series-j .ct-line,.ct-series-j .ct-point,.ct-series-j .ct-slice-donut{stroke:#dda458}.ct-series-j .ct-area,.ct-series-j .ct-slice-donut-solid,.ct-series-j .ct-slice-pie{fill:#dda458}.ct-series-k .ct-bar,.ct-series-k .ct-line,.ct-series-k .ct-point,.ct-series-k .ct-slice-donut{stroke:#eacf7d}.ct-series-k .ct-area,.ct-series-k .ct-slice-donut-solid,.ct-series-k .ct-slice-pie{fill:#eacf7d}.ct-series-l .ct-bar,.ct-series-l .ct-line,.ct-series-l .ct-point,.ct-series-l .ct-slice-donut{stroke:#86797d}.ct-series-l .ct-area,.ct-series-l .ct-slice-donut-solid,.ct-series-l .ct-slice-pie{fill:#86797d}.ct-series-m .ct-bar,.ct-series-m .ct-line,.ct-series-m .ct-point,.ct-series-m .ct-slice-donut{stroke:#b2c326}.ct-series-m .ct-area,.ct-series-m .ct-slice-donut-solid,.ct-series-m .ct-slice-pie{fill:#b2c326}.ct-series-n .ct-bar,.ct-series-n .ct-line,.ct-series-n .ct-point,.ct-series-n .ct-slice-donut{stroke:#6188e2}.ct-series-n .ct-area,.ct-series-n .ct-slice-donut-solid,.ct-series-n .ct-slice-pie{fill:#6188e2}.ct-series-o .ct-bar,.ct-series-o .ct-line,.ct-series-o .ct-point,.ct-series-o .ct-slice-donut{stroke:#a748ca}.ct-series-o .ct-area,.ct-series-o .ct-slice-donut-solid,.ct-series-o .ct-slice-pie{fill:#a748ca}.ct-square{display:block;position:relative;width:100%}.ct-square:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:100%}.ct-square:after{display:table}.ct-square>svg{display:block;position:absolute;top:0;left:0}.ct-minor-second{display:block;position:relative;width:100%}.ct-minor-second:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:93.75%}.ct-minor-second:after{display:table}.ct-minor-second>svg{display:block;position:absolute;top:0;left:0}.ct-major-second{display:block;position:relative;width:100%}.ct-major-second:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:88.8888888889%}.ct-major-second:after{display:table}.ct-major-second>svg{display:block;position:absolute;top:0;left:0}.ct-minor-third{display:block;position:relative;width:100%}.ct-minor-third:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:83.3333333333%}.ct-minor-third:after{display:table}.ct-minor-third>svg{display:block;position:absolute;top:0;left:0}.ct-major-third{display:block;position:relative;width:100%}.ct-major-third:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:80%}.ct-major-third:after{display:table}.ct-major-third>svg{display:block;position:absolute;top:0;left:0}.ct-perfect-fourth{display:block;position:relative;width:100%}.ct-perfect-fourth:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:75%}.ct-perfect-fourth:after{display:table}.ct-perfect-fourth>svg{display:block;position:absolute;top:0;left:0}.ct-perfect-fifth{display:block;position:relative;width:100%}.ct-perfect-fifth:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:66.6666666667%}.ct-perfect-fifth:after{display:table}.ct-perfect-fifth>svg{display:block;position:absolute;top:0;left:0}.ct-minor-sixth{display:block;position:relative;width:100%}.ct-minor-sixth:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:62.5%}.ct-minor-sixth:after{display:table}.ct-minor-sixth>svg{display:block;position:absolute;top:0;left:0}.ct-golden-section{display:block;position:relative;width:100%}.ct-golden-section:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:61.804697157%}.ct-golden-section:after{display:table}.ct-golden-section>svg{display:block;position:absolute;top:0;left:0}.ct-major-sixth{display:block;position:relative;width:100%}.ct-major-sixth:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:60%}.ct-major-sixth:after{display:table}.ct-major-sixth>svg{display:block;position:absolute;top:0;left:0}.ct-minor-seventh{display:block;position:relative;width:100%}.ct-minor-seventh:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:56.25%}.ct-minor-seventh:after{display:table}.ct-minor-seventh>svg{display:block;position:absolute;top:0;left:0}.ct-major-seventh{display:block;position:relative;width:100%}.ct-major-seventh:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:53.3333333333%}.ct-major-seventh:after{display:table}.ct-major-seventh>svg{display:block;position:absolute;top:0;left:0}.ct-octave{display:block;position:relative;width:100%}.ct-octave:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:50%}.ct-octave:after{display:table}.ct-octave>svg{display:block;position:absolute;top:0;left:0}.ct-major-tenth{display:block;position:relative;width:100%}.ct-major-tenth:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:40%}.ct-major-tenth:after{display:table}.ct-major-tenth>svg{display:block;position:absolute;top:0;left:0}.ct-major-eleventh{display:block;position:relative;width:100%}.ct-major-eleventh:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:37.5%}.ct-major-eleventh:after{display:table}.ct-major-eleventh>svg{display:block;position:absolute;top:0;left:0}.ct-major-twelfth{display:block;position:relative;width:100%}.ct-major-twelfth:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:33.3333333333%}.ct-major-twelfth:after{display:table}.ct-major-twelfth>svg{display:block;position:absolute;top:0;left:0}.ct-double-octave{display:block;position:relative;width:100%}.ct-double-octave:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:25%}.ct-double-octave:after{display:table}.ct-double-octave>svg{display:block;position:absolute;top:0;left:0} \ No newline at end of file